Эх сурвалжийг харах

qcacmn: tx monitor populate block ack information from tlv

tx monitor populate block ack information from tlv

Change-Id: I500015e888a0984188bcee821262dee072dea7f9
CRs-Fixed: 3205304
nobelj 3 жил өмнө
parent
commit
8c3b9f7684

+ 109 - 0
hal/wifi3.0/be/hal_be_generic_api.h

@@ -1482,6 +1482,68 @@ hal_txmon_status_parse_tlv_generic_be(void *data_ppdu_info,
 		/* user tlv */
 		status = HAL_MON_RX_FRAME_BITMAP_ACK;
 		SHOW_DEFINED(WIFIRX_FRAME_BITMAP_ACK_E);
+		TXMON_HAL(ppdu_info, cur_usr_idx) = user_id;
+		TXMON_STATUS_INFO(tx_status_info, no_bitmap_avail) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   NO_BITMAP_AVAILABLE);
+
+		TXMON_STATUS_INFO(tx_status_info, explicit_ack) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   EXPLICIT_ACK);
+		/*
+		 * get mac address, since address is received frame
+		 * change the order and store it
+		 */
+		*(uint32_t *)&tx_status_info->addr2[0] =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   ADDR1_31_0);
+		*(uint32_t *)&tx_status_info->addr2[4] =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   ADDR1_47_32);
+		*(uint32_t *)&tx_status_info->addr1[0] =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   ADDR2_15_0);
+		*(uint32_t *)&tx_status_info->addr1[2] =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   ADDR2_47_16);
+
+		TXMON_STATUS_INFO(tx_status_info, explicit_ack_type) =
+				HAL_TX_DESC_GET_64(tx_tlv, RX_FRAME_BITMAP_ACK,
+						   EXPLICT_ACK_TYPE);
+
+		TXMON_HAL_USER(ppdu_info, user_id, tid) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   BA_TID);
+		TXMON_HAL_USER(ppdu_info, user_id, aid) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   STA_FULL_AID);
+		TXMON_HAL_USER(ppdu_info, user_id, start_seq) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   BA_TS_SEQ);
+		TXMON_HAL_USER(ppdu_info, user_id, ba_control) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   BA_TS_CTRL);
+		TXMON_HAL_USER(ppdu_info, user_id, ba_bitmap_sz) =
+					HAL_TX_DESC_GET_64(tx_tlv,
+							   RX_FRAME_BITMAP_ACK,
+							   BA_BITMAP_SIZE);
+
+		/* ba bitmap */
+		qdf_mem_copy(TXMON_HAL_USER(ppdu_info, user_id, ba_bitmap),
+			     &HAL_SET_FLD_OFFSET_64(tx_tlv,
+						    RX_FRAME_BITMAP_ACK,
+						    BA_TS_BITMAP_31_0, 0), 32);
+
 		break;
 	}
 	case WIFIRX_FRAME_1K_BITMAP_ACK_E:
@@ -1489,6 +1551,53 @@ hal_txmon_status_parse_tlv_generic_be(void *data_ppdu_info,
 		/* user tlv */
 		status = HAL_MON_RX_FRAME_BITMAP_BLOCK_ACK_1K;
 		SHOW_DEFINED(WIFIRX_FRAME_1K_BITMAP_ACK_E);
+		TXMON_HAL(ppdu_info, cur_usr_idx) = user_id;
+		TXMON_HAL_USER(ppdu_info, user_id, ba_bitmap_sz) =
+			(4 + HAL_TX_DESC_GET_64(tx_tlv, RX_FRAME_1K_BITMAP_ACK,
+						BA_BITMAP_SIZE));
+		TXMON_HAL_USER(ppdu_info, user_id, tid) =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   BA_TID);
+		TXMON_HAL_USER(ppdu_info, user_id, aid) =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   STA_FULL_AID);
+		/* get mac address */
+		*(uint32_t *)&tx_status_info->addr1[0] =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   ADDR1_31_0);
+		*(uint32_t *)&tx_status_info->addr1[4] =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   ADDR1_47_32);
+		*(uint32_t *)&tx_status_info->addr2[0] =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   ADDR2_15_0);
+		*(uint32_t *)&tx_status_info->addr2[2] =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   ADDR2_47_16);
+
+		TXMON_HAL_USER(ppdu_info, user_id, start_seq) =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   BA_TS_SEQ);
+		TXMON_HAL_USER(ppdu_info, user_id, ba_control) =
+				HAL_TX_DESC_GET_64(tx_tlv,
+						   RX_FRAME_1K_BITMAP_ACK,
+						   BA_TS_CTRL);
+		/* memcpy  ba bitmap */
+		qdf_mem_copy(TXMON_HAL_USER(ppdu_info, user_id, ba_bitmap),
+			     tx_tlv +
+			     HAL_TX_DESC_OFFSET_GET_64(tx_tlv,
+						       RX_FRAME_1K_BITMAP_ACK,
+						       BA_TS_BITMAP_31_0, 0),
+			     4 << TXMON_HAL_USER(ppdu_info,
+						 user_id, ba_bitmap_sz));
+
 		break;
 	}
 	case WIFIRESPONSE_START_STATUS_E: