qcacmn: VHT/HE info in radiotap header of mgmt & control frames
In monitor mode, radiotap header contains VHT/HE information in management and control frames after association of STA to AP.For this,reset of ppdu_info is required before processing of ppdu in order to avoid reuse of ppdu_info. Change-Id: Ia36ec2664f79d645ff76db016f986dfb92ec8bbd CRs-Fixed: 2734804
This commit is contained in:

committed by
snandini

parent
da291f0045
commit
cc9f9c7c1f
@@ -2036,8 +2036,13 @@ dp_rx_pdev_mon_status_desc_pool_init(struct dp_pdev *pdev, uint32_t mac_id)
|
|||||||
|
|
||||||
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, sizeof(pdev->ppdu_info));
|
||||||
sizeof(pdev->ppdu_info.rx_status));
|
|
||||||
|
/*
|
||||||
|
* Set ppdu_id to HAL_INVALID_PPDU_ID in order to avoid ppdu_id
|
||||||
|
* match with '0' ppdu_id from monitor status ring
|
||||||
|
*/
|
||||||
|
pdev->ppdu_info.com_info.ppdu_id = HAL_INVALID_PPDU_ID;
|
||||||
|
|
||||||
qdf_mem_zero(&pdev->rx_mon_stats, sizeof(pdev->rx_mon_stats));
|
qdf_mem_zero(&pdev->rx_mon_stats, sizeof(pdev->rx_mon_stats));
|
||||||
|
|
||||||
|
@@ -154,8 +154,15 @@
|
|||||||
rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \
|
rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \
|
||||||
} \
|
} \
|
||||||
|
|
||||||
|
#define HAL_RX_SET_MSDU_AGGREGATION((rs_mpdu), (rs_ppdu))\
|
||||||
|
{\
|
||||||
|
if (rs_mpdu->rs_flags & IEEE80211_AMSDU_FLAG)\
|
||||||
|
rs_ppdu->rs_flags |= IEEE80211_AMSDU_FLAG;\
|
||||||
|
} \
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)
|
#define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)
|
||||||
|
#define HAL_RX_SET_MSDU_AGGREGATION(rs_mpdu, rs_ppdu)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Max MPDUs per status buffer */
|
/* Max MPDUs per status buffer */
|
||||||
@@ -170,6 +177,7 @@
|
|||||||
* struct hal_rx_mon_desc_info () - HAL Rx Monitor descriptor info
|
* struct hal_rx_mon_desc_info () - HAL Rx Monitor descriptor info
|
||||||
*
|
*
|
||||||
* @ppdu_id: PHY ppdu id
|
* @ppdu_id: PHY ppdu id
|
||||||
|
* @status_ppdu_id: status PHY ppdu id
|
||||||
* @status_buf_count: number of status buffer count
|
* @status_buf_count: number of status buffer count
|
||||||
* @rxdma_push_reason: rxdma push reason
|
* @rxdma_push_reason: rxdma push reason
|
||||||
* @rxdma_error_code: rxdma error code
|
* @rxdma_error_code: rxdma error code
|
||||||
@@ -184,6 +192,7 @@
|
|||||||
*/
|
*/
|
||||||
struct hal_rx_mon_desc_info {
|
struct hal_rx_mon_desc_info {
|
||||||
uint16_t ppdu_id;
|
uint16_t ppdu_id;
|
||||||
|
uint16_t status_ppdu_id;
|
||||||
uint8_t status_buf_count;
|
uint8_t status_buf_count;
|
||||||
uint8_t rxdma_push_reason;
|
uint8_t rxdma_push_reason;
|
||||||
uint8_t rxdma_error_code;
|
uint8_t rxdma_error_code;
|
||||||
@@ -471,7 +480,6 @@ struct hal_rx_ppdu_common_info {
|
|||||||
uint32_t mpdu_cnt_fcs_ok;
|
uint32_t mpdu_cnt_fcs_ok;
|
||||||
uint32_t mpdu_cnt_fcs_err;
|
uint32_t mpdu_cnt_fcs_err;
|
||||||
uint32_t mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
|
uint32_t mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
|
||||||
uint32_t last_ppdu_id;
|
|
||||||
uint32_t mpdu_cnt;
|
uint32_t mpdu_cnt;
|
||||||
uint8_t num_users;
|
uint8_t num_users;
|
||||||
};
|
};
|
||||||
|
@@ -568,11 +568,18 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
|
|
||||||
case WIFIRX_PPDU_START_E:
|
case WIFIRX_PPDU_START_E:
|
||||||
{
|
{
|
||||||
struct hal_rx_ppdu_common_info *com_info = &ppdu_info->com_info;
|
if (qdf_likely(ppdu_info->com_info.ppdu_id !=
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_START_0, PHY_PPDU_ID)))
|
||||||
|
/* Reset ppdu_info before processing the ppdu */
|
||||||
|
qdf_mem_zero(ppdu_info,
|
||||||
|
sizeof(struct hal_rx_ppdu_info));
|
||||||
|
else
|
||||||
|
qdf_assert_always(0);
|
||||||
|
|
||||||
ppdu_info->com_info.ppdu_id =
|
ppdu_info->com_info.ppdu_id =
|
||||||
HAL_RX_GET(rx_tlv, RX_PPDU_START_0,
|
HAL_RX_GET(rx_tlv, RX_PPDU_START_0,
|
||||||
PHY_PPDU_ID);
|
PHY_PPDU_ID);
|
||||||
|
|
||||||
/* channel number is set in PHY meta data */
|
/* channel number is set in PHY meta data */
|
||||||
ppdu_info->rx_status.chan_num =
|
ppdu_info->rx_status.chan_num =
|
||||||
(HAL_RX_GET(rx_tlv, RX_PPDU_START_1,
|
(HAL_RX_GET(rx_tlv, RX_PPDU_START_1,
|
||||||
@@ -594,20 +601,6 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
ppdu_info->com_info.ppdu_timestamp;
|
ppdu_info->com_info.ppdu_timestamp;
|
||||||
ppdu_info->rx_state = HAL_RX_MON_PPDU_START;
|
ppdu_info->rx_state = HAL_RX_MON_PPDU_START;
|
||||||
|
|
||||||
/* If last ppdu_id doesn't match new ppdu_id,
|
|
||||||
* 1. reset mpdu_cnt
|
|
||||||
* 2. update last_ppdu_id with new
|
|
||||||
* 3. reset mpdu fcs bitmap
|
|
||||||
*/
|
|
||||||
if (com_info->ppdu_id != com_info->last_ppdu_id) {
|
|
||||||
com_info->mpdu_cnt = 0;
|
|
||||||
com_info->last_ppdu_id =
|
|
||||||
com_info->ppdu_id;
|
|
||||||
com_info->num_users = 0;
|
|
||||||
qdf_mem_zero(&com_info->mpdu_fcs_ok_bitmap,
|
|
||||||
HAL_RX_NUM_WORDS_PER_PPDU_BITMAP *
|
|
||||||
sizeof(com_info->mpdu_fcs_ok_bitmap[0]));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <hal_api.h>
|
#include <hal_api.h>
|
||||||
|
|
||||||
|
#define HAL_INVALID_PPDU_ID 0xFFFFFFFF
|
||||||
#define HAL_RX_OFFSET(block, field) block##_##field##_OFFSET
|
#define HAL_RX_OFFSET(block, field) block##_##field##_OFFSET
|
||||||
#define HAL_RX_LSB(block, field) block##_##field##_LSB
|
#define HAL_RX_LSB(block, field) block##_##field##_LSB
|
||||||
#define HAL_RX_MASk(block, field) block##_##field##_MASK
|
#define HAL_RX_MASk(block, field) block##_##field##_MASK
|
||||||
|
Reference in New Issue
Block a user