From fadeef890bf072b78fcb67317fc638c13c837b78 Mon Sep 17 00:00:00 2001 From: Ruben Columbus Date: Wed, 13 Nov 2019 14:09:16 -0800 Subject: [PATCH] qcacmn: populate qos_null in rx state sw_frame_group_id decides process for frame. USER_STATS tlv case uses sw_frame_group_id to add qos_null frame control to rx_status. Change-Id: Ia3da8dbe4fc4c2d0f21fa8864e6b4e87170ba8f6 --- hal/wifi3.0/hal_api_mon.h | 2 ++ hal/wifi3.0/hal_generic_api.h | 29 ++++++++++++++++++++------- hal/wifi3.0/qca6290/hal_6290_rx.h | 3 +++ hal/wifi3.0/qca6390/hal_6390_rx.h | 3 +++ hal/wifi3.0/qca6490/hal_6490_rx.h | 3 +++ hal/wifi3.0/qca8074v1/hal_8074v1_rx.h | 3 +++ hal/wifi3.0/qca8074v2/hal_8074v2_rx.h | 3 +++ hal/wifi3.0/qcn9000/hal_9000_rx.h | 3 +++ 8 files changed, 42 insertions(+), 7 deletions(-) diff --git a/hal/wifi3.0/hal_api_mon.h b/hal/wifi3.0/hal_api_mon.h index 3ae4e335ea..1cf89ea207 100644 --- a/hal/wifi3.0/hal_api_mon.h +++ b/hal/wifi3.0/hal_api_mon.h @@ -486,6 +486,8 @@ struct hal_rx_ppdu_info { uint32_t hdr_len; /* MPDU FCS error */ bool fcs_err; + /* Id to indicate how to process mpdu */ + uint8_t sw_frame_group_id; struct hal_rx_ppdu_msdu_info rx_msdu_info[HAL_MAX_UL_MU_USERS]; /* first msdu payload for all mpdus in ppdu */ struct hal_rx_msdu_payload_info ppdu_msdu_info[HAL_RX_MAX_MPDU]; diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index ef4ccc3ed1..1c03f5accf 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -485,14 +485,18 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_10, OTHER_MSDU_COUNT); - ppdu_info->rx_status.frame_control_info_valid = - HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3, - FRAME_CONTROL_INFO_VALID); + if (ppdu_info->sw_frame_group_id + != HAL_MPDU_SW_FRAME_GROUP_NULL_DATA) { + ppdu_info->rx_status.frame_control_info_valid = + HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3, + FRAME_CONTROL_INFO_VALID); - if (ppdu_info->rx_status.frame_control_info_valid) - ppdu_info->rx_status.frame_control = - HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_4, - FRAME_CONTROL_FIELD); + if (ppdu_info->rx_status.frame_control_info_valid) + ppdu_info->rx_status.frame_control = + HAL_RX_GET(rx_tlv, + RX_PPDU_END_USER_STATS_4, + FRAME_CONTROL_FIELD); + } ppdu_info->rx_status.data_sequence_control_info_valid = HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3, @@ -1368,6 +1372,17 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, RX_MPDU_INFO_14, MPDU_FRAME_CONTROL_FIELD); + ppdu_info->sw_frame_group_id = + HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start); + + if (ppdu_info->sw_frame_group_id == + HAL_MPDU_SW_FRAME_GROUP_NULL_DATA) { + ppdu_info->rx_status.frame_control_info_valid = + ppdu_info->nac_info.fc_valid; + ppdu_info->rx_status.frame_control = + ppdu_info->nac_info.frame_control; + } + ppdu_info->nac_info.mac_addr2_valid = HAL_RX_GET_MAC_ADDR2_VALID(rx_mpdu_start); diff --git a/hal/wifi3.0/qca6290/hal_6290_rx.h b/hal/wifi3.0/qca6290/hal_6290_rx.h index e6243b2d0b..5ad1241fa8 100644 --- a/hal/wifi3.0/qca6290/hal_6290_rx.h +++ b/hal/wifi3.0/qca6290/hal_6290_rx.h @@ -264,6 +264,9 @@ #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, PHY_PPDU_ID) +#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ (reg_val) &= \ diff --git a/hal/wifi3.0/qca6390/hal_6390_rx.h b/hal/wifi3.0/qca6390/hal_6390_rx.h index f69d622f14..b8f1bd5b24 100644 --- a/hal/wifi3.0/qca6390/hal_6390_rx.h +++ b/hal/wifi3.0/qca6390/hal_6390_rx.h @@ -270,6 +270,9 @@ #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, PHY_PPDU_ID) +#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca6490/hal_6490_rx.h b/hal/wifi3.0/qca6490/hal_6490_rx.h index bb76636fd8..5e565f397d 100644 --- a/hal/wifi3.0/qca6490/hal_6490_rx.h +++ b/hal/wifi3.0/qca6490/hal_6490_rx.h @@ -273,6 +273,9 @@ #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, PHY_PPDU_ID) +#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h index af014db7d4..00941fd31a 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h +++ b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h @@ -253,6 +253,9 @@ #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, PHY_PPDU_ID) +#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h index 4c12dfed0d..2c7ed76bbb 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h +++ b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h @@ -262,6 +262,9 @@ #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, PHY_PPDU_ID) +#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qcn9000/hal_9000_rx.h b/hal/wifi3.0/qcn9000/hal_9000_rx.h index 3b710d081c..4d36fe633e 100644 --- a/hal/wifi3.0/qcn9000/hal_9000_rx.h +++ b/hal/wifi3.0/qcn9000/hal_9000_rx.h @@ -47,6 +47,9 @@ #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, PHY_PPDU_ID) +#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \