diff --git a/dp/wifi3.0/be/dp_be_rx.c b/dp/wifi3.0/be/dp_be_rx.c index f6017ab142..f1554b5dfe 100644 --- a/dp/wifi3.0/be/dp_be_rx.c +++ b/dp/wifi3.0/be/dp_be_rx.c @@ -372,8 +372,9 @@ more_data: if (msdu_desc_info.msdu_flags & HAL_MSDU_F_INTRA_BSS) qdf_nbuf_set_intra_bss(rx_desc->nbuf, 1); - qdf_nbuf_set_tid_val(rx_desc->nbuf, - HAL_RX_REO_QUEUE_NUMBER_GET(ring_desc)); + if (qdf_likely(mpdu_desc_info.mpdu_flags & + HAL_MPDU_F_QOS_CONTROL_VALID)) + qdf_nbuf_set_tid_val(rx_desc->nbuf, mpdu_desc_info.tid); #ifdef CONFIG_LITHIUM qdf_nbuf_set_rx_reo_dest_ind( rx_desc->nbuf, diff --git a/hal/wifi3.0/be/hal_be_rx.h b/hal/wifi3.0/be/hal_be_rx.h index acfed6b8dc..5dbde9feac 100644 --- a/hal/wifi3.0/be/hal_be_rx.h +++ b/hal/wifi3.0/be/hal_be_rx.h @@ -129,6 +129,16 @@ RX_MPDU_DESC_INFO_BAR_FRAME_MASK) >> \ RX_MPDU_DESC_INFO_BAR_FRAME_LSB) +#define HAL_RX_MPDU_TID_GET(mpdu_info_ptr) \ + ((mpdu_info_ptr[RX_MPDU_DESC_INFO_TID_OFFSET >> 2] & \ + RX_MPDU_DESC_INFO_TID_MASK) >> \ + RX_MPDU_DESC_INFO_TID_LSB) + +#define HAL_RX_MPDU_MPDU_QOS_CONTROL_VALID_GET(mpdu_info_ptr) \ + ((mpdu_info_ptr[RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_OFFSET >> 2] &\ + RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_MASK) >> \ + RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_LSB) + /* * NOTE: None of the following _GET macros need a right * shift by the corresponding _LSB. This is because, they are @@ -243,6 +253,9 @@ static inline uint32_t hal_rx_get_mpdu_flags(uint32_t *mpdu_info) if (HAL_RX_MPDU_RAW_MPDU_GET(mpdu_info)) mpdu_flags |= HAL_MPDU_F_RAW_AMPDU; + if (HAL_RX_MPDU_MPDU_QOS_CONTROL_VALID_GET(mpdu_info)) + mpdu_flags |= HAL_MPDU_F_QOS_CONTROL_VALID; + return mpdu_flags; } @@ -255,11 +268,6 @@ static inline uint32_t hal_rx_get_mpdu_flags(uint32_t *mpdu_info) REO_DESTINATION_RING_REO_DEST_BUFFER_TYPE_MASK) >> \ REO_DESTINATION_RING_REO_DEST_BUFFER_TYPE_LSB) -#define HAL_RX_REO_QUEUE_NUMBER_GET(reo_desc) (((*(((uint32_t *)reo_desc) + \ - (REO_DESTINATION_RING_RX_MPDU_DESC_INFO_DETAILS_TID_OFFSET >> 2))) & \ - REO_DESTINATION_RING_RX_MPDU_DESC_INFO_DETAILS_TID_MASK) >> \ - REO_DESTINATION_RING_RX_MPDU_DESC_INFO_DETAILS_TID_LSB) - #define HAL_RX_REO_ERROR_GET(reo_desc) (((*(((uint32_t *)reo_desc) + \ (REO_DESTINATION_RING_REO_ERROR_CODE_OFFSET >> 2))) & \ REO_DESTINATION_RING_REO_ERROR_CODE_MASK) >> \ @@ -396,6 +404,7 @@ void hal_rx_mpdu_desc_info_get_be(void *desc_addr, mpdu_desc_info->peer_meta_data = HAL_RX_MPDU_DESC_PEER_META_DATA_GET(mpdu_info); mpdu_desc_info->bar_frame = HAL_RX_MPDU_BAR_FRAME_GET(mpdu_info); + mpdu_desc_info->tid = HAL_RX_MPDU_TID_GET(mpdu_info); } /* diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index b631a34d61..83441db420 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -216,6 +216,7 @@ enum hal_rx_msdu_desc_flags { * [3] raw_ampdu * @peer_meta_data: Upper bits containing peer id, vdev id * @bar_frame: indicates if received frame is a bar frame + * @tid: tid value of received MPDU */ struct hal_rx_mpdu_desc_info { uint16_t msdu_count; @@ -223,6 +224,8 @@ struct hal_rx_mpdu_desc_info { uint32_t mpdu_flags; uint32_t peer_meta_data; /* sw progamed meta-data:MAC Id & peer Id */ uint16_t bar_frame; + uint8_t tid:4, + reserved:4; }; /** @@ -232,12 +235,14 @@ struct hal_rx_mpdu_desc_info { * @ HAL_MPDU_F_RETRY_BIT: Retry bit is set in FC of MPDU * @ HAL_MPDU_F_AMPDU_FLAG: MPDU received as part of A-MPDU * @ HAL_MPDU_F_RAW_AMPDU: MPDU is a Raw MDPU + * @ HAL_MPDU_F_QOS_CONTROL_VALID: MPDU has a QoS control field */ enum hal_rx_mpdu_desc_flags { HAL_MPDU_F_FRAGMENT = (0x1 << 20), HAL_MPDU_F_RETRY_BIT = (0x1 << 21), HAL_MPDU_F_AMPDU_FLAG = (0x1 << 22), - HAL_MPDU_F_RAW_AMPDU = (0x1 << 30) + HAL_MPDU_F_RAW_AMPDU = (0x1 << 30), + HAL_MPDU_F_QOS_CONTROL_VALID = (0x1 << 31) }; /* Return Buffer manager ID */