瀏覽代碼

qcacmn: Update TID value in skb priority from the MPDU buffer

Update TID value in skb priority from the MPDU buffer.

Change-Id: I707190f0c3095b4c47bd4b3cffd4a94f5952939c
CRs-Fixed: 3037067
Sai Rupesh Chevuru 3 年之前
父節點
當前提交
ba3f9c04c8
共有 3 個文件被更改,包括 23 次插入8 次删除
  1. 3 2
      dp/wifi3.0/be/dp_be_rx.c
  2. 14 5
      hal/wifi3.0/be/hal_be_rx.h
  3. 6 1
      hal/wifi3.0/hal_rx.h

+ 3 - 2
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,

+ 14 - 5
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);
 }
 
 /*

+ 6 - 1
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 */