qcacmn: Support RX MPDU sequence logging from DP

tcp_seq_num and tcp_ack_num in qdf_nbuf_cb is not used
for Beryllium, repurpose them to store RX MPDU sequence
number. get RX mpdu sequence number from DP and store
it in qdf_nbuf_cb for logging later.

Change-Id: I3c21b383d827f12a1e1ec6202a5fc17804dddc1b
CRs-Fixed: 3610468
This commit is contained in:
Jinwei Chen
2023-09-07 19:44:05 -07:00
committed by Rahul Choudhary
parent 3102185ee2
commit ebc572b89c
7 changed files with 65 additions and 17 deletions

View File

@@ -516,6 +516,7 @@ done:
rx_tlv_hdr = qdf_nbuf_data(nbuf);
vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf);
peer_id = dp_rx_get_peer_id_be(nbuf);
dp_rx_set_mpdu_seq_number_be(nbuf, rx_tlv_hdr);
if (dp_rx_is_list_ready(deliver_list_head, vdev, txrx_peer,
peer_id, vdev_id)) {

View File

@@ -666,6 +666,13 @@ dp_rx_peer_mdata_link_id_get_be(uint32_t peer_metadata)
}
#endif /* DP_MLO_LINK_STATS_SUPPORT */
static inline void
dp_rx_set_mpdu_seq_number_be(qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr)
{
QDF_NBUF_CB_RX_MPDU_SEQ_NUM(nbuf) =
hal_rx_mpdu_sequence_number_get_be(rx_tlv_hdr);
}
static inline void
dp_rx_set_link_id_be(qdf_nbuf_t nbuf, uint32_t peer_mdata)
{
@@ -792,6 +799,11 @@ dp_rx_set_link_id_be(qdf_nbuf_t nbuf, uint32_t peer_mdata)
{
}
static inline void
dp_rx_set_mpdu_seq_number_be(qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr)
{
}
static inline uint16_t
dp_rx_get_peer_id_be(qdf_nbuf_t nbuf)
{

View File

@@ -1706,19 +1706,21 @@ void dp_rx_process_invalid_peer_wrapper(struct dp_soc *soc,
* dp_rx_print_offload_info() - Print offload info from RX TLV
* @soc: dp soc handle
* @msdu: MSDU for which the offload info is to be printed
* @ofl_info: offload info saved in hal_offload_info structure
*
* Return: None
*/
static void dp_rx_print_offload_info(struct dp_soc *soc,
qdf_nbuf_t msdu)
qdf_nbuf_t msdu,
struct hal_offload_info *ofl_info)
{
dp_verbose_debug("----------------------RX DESC LRO/GRO----------------------");
dp_verbose_debug("lro_eligible 0x%x",
QDF_NBUF_CB_RX_LRO_ELIGIBLE(msdu));
dp_verbose_debug("pure_ack 0x%x", QDF_NBUF_CB_RX_TCP_PURE_ACK(msdu));
dp_verbose_debug("chksum 0x%x", QDF_NBUF_CB_RX_TCP_CHKSUM(msdu));
dp_verbose_debug("TCP seq num 0x%x", QDF_NBUF_CB_RX_TCP_SEQ_NUM(msdu));
dp_verbose_debug("TCP ack num 0x%x", QDF_NBUF_CB_RX_TCP_ACK_NUM(msdu));
dp_verbose_debug("TCP seq num 0x%x", ofl_info->tcp_seq_num);
dp_verbose_debug("TCP ack num 0x%x", ofl_info->tcp_ack_num);
dp_verbose_debug("TCP window 0x%x", QDF_NBUF_CB_RX_TCP_WIN(msdu));
dp_verbose_debug("TCP protocol 0x%x", QDF_NBUF_CB_RX_TCP_PROTO(msdu));
dp_verbose_debug("TCP offset 0x%x", QDF_NBUF_CB_RX_TCP_OFFSET(msdu));
@@ -1744,15 +1746,13 @@ void dp_rx_fill_gro_info(struct dp_soc *soc, uint8_t *rx_tlv,
QDF_NBUF_CB_RX_TCP_CHKSUM(msdu) =
hal_rx_tlv_get_tcp_chksum(soc->hal_soc,
rx_tlv);
QDF_NBUF_CB_RX_TCP_SEQ_NUM(msdu) = offload_info.tcp_seq_num;
QDF_NBUF_CB_RX_TCP_ACK_NUM(msdu) = offload_info.tcp_ack_num;
QDF_NBUF_CB_RX_TCP_WIN(msdu) = offload_info.tcp_win;
QDF_NBUF_CB_RX_TCP_PROTO(msdu) = offload_info.tcp_proto;
QDF_NBUF_CB_RX_IPV6_PROTO(msdu) = offload_info.ipv6_proto;
QDF_NBUF_CB_RX_TCP_OFFSET(msdu) = offload_info.tcp_offset;
QDF_NBUF_CB_RX_FLOW_ID(msdu) = offload_info.flow_id;
dp_rx_print_offload_info(soc, msdu);
dp_rx_print_offload_info(soc, msdu, &offload_info);
}
#endif /* RECEIVE_OFFLOAD */

View File

@@ -154,6 +154,17 @@ static inline uint8_t qdf_nbuf_get_lmac_id(qdf_nbuf_t buf)
return QDF_NBUF_CB_RX_PACKET_LMAC_ID(buf);
}
/**
* qdf_nbuf_get_mpdu_seq_num() - get MPDU sequence number
* @buf: Network buffer
*
* Return: mpdu sequence number value
*/
static inline uint16_t qdf_nbuf_get_mpdu_seq_num(qdf_nbuf_t buf)
{
return QDF_NBUF_CB_RX_MPDU_SEQ_NUM(buf);
}
/**
* qdf_nbuf_set_rx_ipa_smmu_map() - set ipa smmu mapped flag
* @buf: Network buffer

View File

@@ -265,6 +265,11 @@ static inline uint8_t qdf_nbuf_get_lmac_id(qdf_nbuf_t buf)
return 0;
}
static inline uint16_t qdf_nbuf_get_mpdu_seq_num(qdf_nbuf_t buf)
{
return 0;
}
/**
* qdf_nbuf_tx_set_band() - Set band in nbuf cb
* @nbuf: nbuf pointer

View File

@@ -75,8 +75,12 @@
* @u.rx.dev.priv_cb_m.to_ds: to DS bit in RX packet
* @u.rx.dev.priv_cb_m.logical_link_id: link id of RX packet
* @u.rx.dev.priv_cb_m.reserved1: reserved bits
* @u.rx.dev.priv_cb_m.tcp_seq_num: TCP sequence number
* @u.rx.dev.priv_cb_m.tcp_ack_num: TCP ACK number
* @u.rx.dev.priv_cb_m.dp_ext: Union of tcp and ext structs
* @u.rx.dev.priv_cb_m.dp_ext.tcp: TCP structs
* @u.rx.dev.priv_cb_m.dp_ext.tcp.tcp_seq_num: TCP sequence number
* @u.rx.dev.priv_cb_m.dp_ext.tcp.tcp_ack_num: TCP ACK number
* @u.rx.dev.priv_cb_m.dp_ext.ext: Extension struct for other usage
* @u.rx.dev.priv_cb_m.dp_ext.ext.mpdu_seq: wifi MPDU sequence number
* @u.rx.dev.priv_cb_m.dp: Union of wifi3 and wifi2 structs
* @u.rx.dev.priv_cb_m.dp.wifi3: wifi3 data
* @u.rx.dev.priv_cb_m.dp.wifi3.msdu_len: length of RX packet
@@ -219,8 +223,17 @@ struct qdf_nbuf_cb {
logical_link_id:4,
band:3,
reserved1:7;
uint32_t tcp_seq_num;
uint32_t tcp_ack_num;
union {
struct {
uint32_t tcp_seq_num;
uint32_t tcp_ack_num;
} tcp;
struct {
uint32_t mpdu_seq:12,
reserved:20;
uint32_t reserved1;
} ext;
} dp_ext;
union {
struct {
uint16_t msdu_len;
@@ -542,9 +555,15 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
(QDF_NBUF_CB_TX_NUM_EXTRA_FRAGS(skb) = 0)
#define QDF_NBUF_CB_RX_TCP_SEQ_NUM(skb) \
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m.tcp_seq_num)
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m. \
dp_ext.tcp.tcp_seq_num)
#define QDF_NBUF_CB_RX_TCP_ACK_NUM(skb) \
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m.tcp_ack_num)
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m. \
dp_ext.tcp.tcp_ack_num)
#define QDF_NBUF_CB_RX_MPDU_SEQ_NUM(skb) \
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m. \
dp_ext.ext.mpdu_seq)
#define QDF_NBUF_CB_RX_LRO_CTX(skb) \
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m.lro_ctx)

View File

@@ -1524,7 +1524,7 @@ static bool qdf_log_icmpv6_pkt(uint8_t vdev_id, struct sk_buff *skb,
cmn_info.type = QDF_PROTO_TYPE_ICMPv6;
cmn_info.subtype = subtype;
cmn_info.proto_priv_data = 0;
cmn_info.mpdu_seq = 0xFF;
cmn_info.mpdu_seq = qdf_nbuf_get_mpdu_seq_num(skb);
DPTRACE(qdf_dp_trace_proto_pkt(
QDF_DP_TRACE_ICMPv6_PACKET_RECORD,
(skb->data + QDF_NBUF_SRC_MAC_OFFSET),
@@ -1590,7 +1590,7 @@ static bool qdf_log_icmp_pkt(uint8_t vdev_id, struct sk_buff *skb,
cmn_info.proto_priv_data |= (uint32_t)seq_num;
cmn_info.type = QDF_PROTO_TYPE_ICMP;
cmn_info.vdev_id = vdev_id;
cmn_info.mpdu_seq = 0xFF;
cmn_info.mpdu_seq = qdf_nbuf_get_mpdu_seq_num(skb);
if (QDF_TX == dir)
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
@@ -1894,7 +1894,7 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb,
cmn_info.type = QDF_PROTO_TYPE_EAPOL;
cmn_info.subtype = subtype;
cmn_info.proto_priv_data = 0;
cmn_info.mpdu_seq = 0xFF;
cmn_info.mpdu_seq = qdf_nbuf_get_mpdu_seq_num(skb);
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD,
skb->data +
QDF_NBUF_SRC_MAC_OFFSET,
@@ -1979,7 +1979,7 @@ static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb,
cmn_info.type = QDF_PROTO_TYPE_DHCP;
cmn_info.subtype = subtype;
cmn_info.proto_priv_data = 0;
cmn_info.mpdu_seq = 0xFF;
cmn_info.mpdu_seq = qdf_nbuf_get_mpdu_seq_num(skb);
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD,
skb->data +
QDF_NBUF_SRC_MAC_OFFSET,
@@ -2043,7 +2043,7 @@ static bool qdf_log_arp_pkt(uint8_t vdev_id, struct sk_buff *skb,
cmn_info.type = QDF_PROTO_TYPE_ARP;
cmn_info.subtype = proto_subtype;
cmn_info.proto_priv_data = 0;
cmn_info.mpdu_seq = 0xFF;
cmn_info.mpdu_seq = qdf_nbuf_get_mpdu_seq_num(skb);
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD,
skb->data +
QDF_NBUF_SRC_MAC_OFFSET,