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:
Karunakar Dasineni
2017-12-18 22:17:29 -08:00
zatwierdzone przez snandini
rodzic 1e1def7550
commit 65b626eb3d
3 zmienionych plików z 105 dodań i 101 usunięć

Wyświetl plik

@@ -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;
} }

Wyświetl plik

@@ -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));

Wyświetl plik

@@ -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;
}; };