qcacmn: Monitor status PPDU ID wraparound handling
Check PPDU ID wraparound in monitor mode processing. Change-Id: I9e1dcc7b22d4db8006e945e360b3744f548fb122 CRs-Fixed: 2160214
This commit is contained in:

zatwierdzone przez
snandini

rodzic
1e1def7550
commit
65b626eb3d
@@ -138,13 +138,14 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
void *p_buf_addr_info;
|
void *p_buf_addr_info;
|
||||||
void *p_last_buf_addr_info;
|
void *p_last_buf_addr_info;
|
||||||
uint32_t rx_bufs_used = 0;
|
uint32_t rx_bufs_used = 0;
|
||||||
uint32_t msdu_ppdu_id, msdu_cnt;
|
uint32_t msdu_ppdu_id, msdu_cnt, last_ppdu_id;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
uint32_t total_frag_len, frag_len;
|
uint32_t total_frag_len, frag_len;
|
||||||
bool is_frag, is_first_msdu;
|
bool is_frag, is_first_msdu;
|
||||||
|
|
||||||
msdu = 0;
|
msdu = 0;
|
||||||
|
last_ppdu_id = dp_pdev->ppdu_info.com_info.last_ppdu_id;
|
||||||
|
|
||||||
last = NULL;
|
last = NULL;
|
||||||
|
|
||||||
@@ -197,12 +198,12 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
if (*ppdu_id > msdu_ppdu_id)
|
if (*ppdu_id > msdu_ppdu_id)
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||||
QDF_TRACE_LEVEL_WARN,
|
QDF_TRACE_LEVEL_WARN,
|
||||||
"[%s][%d] ppdu_id=%id \
|
"[%s][%d] ppdu_id=%d msdu_ppdu_id=%d\n",
|
||||||
msdu_ppdu_id=%d\n",
|
|
||||||
__func__, __LINE__, *ppdu_id,
|
__func__, __LINE__, *ppdu_id,
|
||||||
msdu_ppdu_id);
|
msdu_ppdu_id);
|
||||||
|
|
||||||
if (*ppdu_id < msdu_ppdu_id) {
|
if ((*ppdu_id < msdu_ppdu_id) && (*ppdu_id >
|
||||||
|
last_ppdu_id)) {
|
||||||
*ppdu_id = msdu_ppdu_id;
|
*ppdu_id = msdu_ppdu_id;
|
||||||
return rx_bufs_used;
|
return rx_bufs_used;
|
||||||
}
|
}
|
||||||
@@ -249,7 +250,6 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
qdf_nbuf_set_pktlen(msdu, rx_buf_size);
|
qdf_nbuf_set_pktlen(msdu, rx_buf_size);
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* Disble it.see packet on msdu done set to 0 */
|
/* Disble it.see packet on msdu done set to 0 */
|
||||||
/*
|
/*
|
||||||
* Check if DMA completed -- msdu_done is the
|
* Check if DMA completed -- msdu_done is the
|
||||||
@@ -258,18 +258,16 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
if (!hal_rx_attn_msdu_done_get(rx_desc_tlv)) {
|
if (!hal_rx_attn_msdu_done_get(rx_desc_tlv)) {
|
||||||
|
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||||
QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE_LEVEL_DEBUG,
|
||||||
"%s %d\n",
|
"%s:%d: Pkt Desc\n",
|
||||||
__func__, __LINE__);
|
__func__, __LINE__);
|
||||||
|
|
||||||
print_hex_dump(KERN_ERR,
|
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_DP,
|
||||||
"\t Pkt Desc:",
|
QDF_TRACE_LEVEL_DEBUG,
|
||||||
DUMP_PREFIX_NONE, 32, 4,
|
rx_desc_tlv, 128);
|
||||||
rx_desc_tlv, 128, false);
|
|
||||||
|
|
||||||
qdf_assert(0);
|
qdf_assert_always(0);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
rx_bufs_used++;
|
rx_bufs_used++;
|
||||||
|
|
||||||
@@ -730,6 +728,8 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
|
|||||||
pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
|
pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
|
||||||
qdf_mem_zero(&(pdev->ppdu_info.rx_status),
|
qdf_mem_zero(&(pdev->ppdu_info.rx_status),
|
||||||
sizeof(pdev->ppdu_info.rx_status));
|
sizeof(pdev->ppdu_info.rx_status));
|
||||||
|
pdev->ppdu_info.com_info.last_ppdu_id =
|
||||||
|
pdev->ppdu_info.com_info.ppdu_id;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -325,6 +325,8 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
pdev->mon_ppdu_status = DP_PPDU_STATUS_DONE;
|
pdev->mon_ppdu_status = DP_PPDU_STATUS_DONE;
|
||||||
dp_rx_mon_dest_process(soc, mac_id, quota);
|
dp_rx_mon_dest_process(soc, mac_id, quota);
|
||||||
pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
|
pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
|
||||||
|
pdev->ppdu_info.com_info.last_ppdu_id =
|
||||||
|
pdev->ppdu_info.com_info.ppdu_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -734,6 +736,7 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev) {
|
|||||||
qdf_nbuf_queue_init(&pdev->rx_status_q);
|
qdf_nbuf_queue_init(&pdev->rx_status_q);
|
||||||
|
|
||||||
pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
|
pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
|
||||||
|
pdev->ppdu_info.com_info.last_ppdu_id = 0;
|
||||||
qdf_mem_zero(&(pdev->ppdu_info.rx_status),
|
qdf_mem_zero(&(pdev->ppdu_info.rx_status),
|
||||||
sizeof(pdev->ppdu_info.rx_status));
|
sizeof(pdev->ppdu_info.rx_status));
|
||||||
|
|
||||||
|
@@ -434,6 +434,7 @@ struct hal_rx_ppdu_user_info {
|
|||||||
|
|
||||||
struct hal_rx_ppdu_common_info {
|
struct hal_rx_ppdu_common_info {
|
||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
|
uint32_t last_ppdu_id;
|
||||||
uint32_t ppdu_timestamp;
|
uint32_t ppdu_timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user