qcacmn: Read 256 fcs_ok bitmap from user ext TLV
Read extra bits of fcs okay bit map from RX_PPDU_END_USER_STATS_EXT TLV and use the same to send first fcs okay packet in case of M COPY CRs-Fixed: 2499150 Change-Id: I1a25971ea789dd7fddddb312af8a18a4cccdc178
This commit is contained in:

committed by
nshrivas

parent
37ac32ba18
commit
1f89b97be2
@@ -1582,7 +1582,7 @@ struct cdp_rx_stats_ppdu_user {
|
||||
uint16_t he_flags;
|
||||
uint32_t mpdu_cnt_fcs_ok;
|
||||
uint32_t mpdu_cnt_fcs_err;
|
||||
uint64_t mpdu_fcs_ok_bitmap;
|
||||
uint32_t mpdu_fcs_ok_bitmap[QDF_MON_STATUS_MPDU_FCS_BMAP_NWORDS];
|
||||
uint32_t mpdu_ok_byte_count;
|
||||
uint32_t mpdu_err_byte_count;
|
||||
uint32_t retries;
|
||||
|
@@ -202,8 +202,10 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
|
||||
rx_user_status->mpdu_cnt_fcs_ok;
|
||||
rx_stats_peruser->mpdu_cnt_fcs_err =
|
||||
rx_user_status->mpdu_cnt_fcs_err;
|
||||
rx_stats_peruser->mpdu_fcs_ok_bitmap =
|
||||
rx_user_status->mpdu_fcs_ok_bitmap;
|
||||
qdf_mem_copy(&rx_stats_peruser->mpdu_fcs_ok_bitmap,
|
||||
&rx_user_status->mpdu_fcs_ok_bitmap,
|
||||
HAL_RX_NUM_WORDS_PER_PPDU_BITMAP *
|
||||
sizeof(rx_user_status->mpdu_fcs_ok_bitmap[0]));
|
||||
rx_stats_peruser->mpdu_ok_byte_count =
|
||||
rx_user_status->mpdu_ok_byte_count;
|
||||
rx_stats_peruser->mpdu_err_byte_count =
|
||||
@@ -544,18 +546,19 @@ dp_rx_get_fcs_ok_msdu(struct dp_pdev *pdev,
|
||||
{
|
||||
uint16_t mpdu_fcs_ok;
|
||||
qdf_nbuf_t status_nbuf = NULL;
|
||||
unsigned long int fcs_ok_bitmap;
|
||||
|
||||
/* If fcs_ok_bitmap is zero, no need to procees further */
|
||||
if (qdf_unlikely(!ppdu_info->com_info.mpdu_fcs_ok_bitmap))
|
||||
return NULL;
|
||||
unsigned long *fcs_ok_bitmap;
|
||||
|
||||
/* Obtain fcs_ok passed index from bitmap
|
||||
* this index is used to get fcs passed first msdu payload
|
||||
*/
|
||||
|
||||
fcs_ok_bitmap = ppdu_info->com_info.mpdu_fcs_ok_bitmap;
|
||||
mpdu_fcs_ok = qdf_find_first_bit(&fcs_ok_bitmap, HAL_RX_MAX_MPDU);
|
||||
fcs_ok_bitmap =
|
||||
(unsigned long *)&ppdu_info->com_info.mpdu_fcs_ok_bitmap[0];
|
||||
mpdu_fcs_ok = qdf_find_first_bit(fcs_ok_bitmap,
|
||||
HAL_RX_MAX_MPDU);
|
||||
|
||||
if (mpdu_fcs_ok >= HAL_RX_MAX_MPDU)
|
||||
goto end;
|
||||
|
||||
/* Get status buffer by indexing mpdu_fcs_ok index
|
||||
* containing first msdu payload with fcs passed
|
||||
@@ -567,6 +570,7 @@ dp_rx_get_fcs_ok_msdu(struct dp_pdev *pdev,
|
||||
*/
|
||||
qdf_nbuf_ref(status_nbuf);
|
||||
|
||||
end:
|
||||
/* Free the ppdu status buffer queue */
|
||||
qdf_nbuf_queue_free(&pdev->rx_ppdu_buf_q);
|
||||
|
||||
|
@@ -148,12 +148,9 @@
|
||||
#define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)
|
||||
#endif
|
||||
|
||||
#define HAL_RX_MPDU_FCS_BITMAP_0_31_OFFSET 0x00000000FFFFFFFF
|
||||
#define HAL_RX_MPDU_FCS_BITMAP_LSB 32
|
||||
#define HAL_RX_MPDU_FCS_BITMAP_32_63_OFFSET 0xFFFFFFFF00000000
|
||||
|
||||
/* Max MPDUs per status buffer */
|
||||
#define HAL_RX_MAX_MPDU 64
|
||||
#define HAL_RX_MAX_MPDU 256
|
||||
#define HAL_RX_NUM_WORDS_PER_PPDU_BITMAP (HAL_RX_MAX_MPDU >> 5)
|
||||
|
||||
/* Max pilot count */
|
||||
#define HAL_RX_MAX_SU_EVM_COUNT 32
|
||||
@@ -431,7 +428,7 @@ struct hal_rx_ppdu_common_info {
|
||||
uint32_t ppdu_timestamp;
|
||||
uint32_t mpdu_cnt_fcs_ok;
|
||||
uint32_t mpdu_cnt_fcs_err;
|
||||
uint64_t mpdu_fcs_ok_bitmap;
|
||||
uint32_t mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
|
||||
uint32_t last_ppdu_id;
|
||||
uint32_t mpdu_cnt;
|
||||
uint8_t num_users;
|
||||
|
@@ -297,9 +297,10 @@ hal_rx_populate_mu_user_info(void *rx_tlv, void *ppduinfo,
|
||||
ppdu_info->com_info.mpdu_cnt_fcs_ok;
|
||||
mon_rx_user_status->mpdu_cnt_fcs_err =
|
||||
ppdu_info->com_info.mpdu_cnt_fcs_err;
|
||||
mon_rx_user_status->mpdu_fcs_ok_bitmap =
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap;
|
||||
|
||||
qdf_mem_copy(&mon_rx_user_status->mpdu_fcs_ok_bitmap,
|
||||
&ppdu_info->com_info.mpdu_fcs_ok_bitmap,
|
||||
HAL_RX_NUM_WORDS_PER_PPDU_BITMAP *
|
||||
sizeof(ppdu_info->com_info.mpdu_fcs_ok_bitmap[0]));
|
||||
mpdu_ok_byte_count = HAL_RX_GET(rx_tlv,
|
||||
RX_PPDU_END_USER_STATS_17,
|
||||
MPDU_OK_BYTE_COUNT);
|
||||
@@ -545,18 +546,13 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
||||
ppdu_info->rx_status.rs_flags &=
|
||||
(~IEEE80211_AMPDU_FLAG);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap =
|
||||
(((ppdu_info->com_info.mpdu_fcs_ok_bitmap |
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_8,
|
||||
FCS_OK_BITMAP_63_32)) <<
|
||||
HAL_RX_MPDU_FCS_BITMAP_LSB) &
|
||||
HAL_RX_MPDU_FCS_BITMAP_32_63_OFFSET);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap =
|
||||
((ppdu_info->com_info.mpdu_fcs_ok_bitmap |
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[0] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_7,
|
||||
FCS_OK_BITMAP_31_0)) &
|
||||
HAL_RX_MPDU_FCS_BITMAP_0_31_OFFSET);
|
||||
FCS_OK_BITMAP_31_0);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[1] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_8,
|
||||
FCS_OK_BITMAP_63_32);
|
||||
|
||||
if (user_id < HAL_MAX_UL_MU_USERS) {
|
||||
mon_rx_user_status =
|
||||
@@ -573,6 +569,29 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
||||
}
|
||||
|
||||
case WIFIRX_PPDU_END_USER_STATS_EXT_E:
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[2] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_EXT_1,
|
||||
FCS_OK_BITMAP_95_64);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[3] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_EXT_2,
|
||||
FCS_OK_BITMAP_127_96);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[4] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_EXT_3,
|
||||
FCS_OK_BITMAP_159_128);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[5] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_EXT_4,
|
||||
FCS_OK_BITMAP_191_160);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[6] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_EXT_5,
|
||||
FCS_OK_BITMAP_223_192);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[7] =
|
||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_EXT_6,
|
||||
FCS_OK_BITMAP_255_224);
|
||||
break;
|
||||
|
||||
case WIFIRX_PPDU_END_STATUS_DONE_E:
|
||||
@@ -1311,6 +1330,10 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
||||
struct hal_rx_ppdu_common_info *com_info = &ppdu_info->com_info;
|
||||
uint16_t mpdu_cnt = com_info->mpdu_cnt;
|
||||
|
||||
if (mpdu_cnt >= HAL_RX_MAX_MPDU) {
|
||||
hal_alert("Number of MPDUs per PPDU exceeded");
|
||||
break;
|
||||
}
|
||||
/* Update first_msdu_payload for every mpdu and increment
|
||||
* com_info->mpdu_cnt for every WIFIRX_HEADER_E TLV
|
||||
*/
|
||||
|
@@ -163,6 +163,7 @@
|
||||
#endif
|
||||
|
||||
#define MAX_CHAIN 8
|
||||
#define QDF_MON_STATUS_MPDU_FCS_BMAP_NWORDS 8
|
||||
|
||||
/**
|
||||
* struct mon_rx_status - This will have monitor mode rx_status extracted from
|
||||
@@ -375,7 +376,7 @@ struct mon_rx_user_status {
|
||||
uint8_t rs_flags;
|
||||
uint32_t mpdu_cnt_fcs_ok;
|
||||
uint32_t mpdu_cnt_fcs_err;
|
||||
uint64_t mpdu_fcs_ok_bitmap;
|
||||
uint32_t mpdu_fcs_ok_bitmap[QDF_MON_STATUS_MPDU_FCS_BMAP_NWORDS];
|
||||
uint32_t mpdu_ok_byte_count;
|
||||
uint32_t mpdu_err_byte_count;
|
||||
};
|
||||
|
Reference in New Issue
Block a user