فهرست منبع

qcacmn: Add Indication for MSDU or MPDU level aggregation

populate flags for MPDU or MSDU level aggregation in
mon_rx_status structure.

Change-Id: I5d8d026a42ffef9e95f579178b4f8cdc581699ec
Keyur Parekh 7 سال پیش
والد
کامیت
4d36b32991
2فایلهای تغییر یافته به همراه33 افزوده شده و 0 حذف شده
  1. 25 0
      hal/wifi3.0/hal_api_mon.h
  2. 8 0
      qdf/inc/qdf_nbuf.h

+ 25 - 0
hal/wifi3.0/hal_api_mon.h

@@ -118,6 +118,24 @@
 #define HAL_TID_INVALID 31
 #define HAL_AST_IDX_INVALID 0xFFFF
 
+#ifdef GET_MSDU_AGGREGATION
+#define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)\
+{\
+	struct rx_msdu_end *rx_msdu_end;\
+	bool first_msdu, last_msdu; \
+	rx_msdu_end = &rx_desc->msdu_end_tlv.rx_msdu_end;\
+	first_msdu = HAL_RX_GET(rx_msdu_end, RX_MSDU_END_5, FIRST_MSDU);\
+	last_msdu = HAL_RX_GET(rx_msdu_end, RX_MSDU_END_5, LAST_MSDU);\
+	if (first_msdu && last_msdu)\
+		rs->rs_flags &= (~IEEE80211_AMSDU_FLAG);\
+	else\
+		rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \
+} \
+
+#else
+#define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)
+#endif
+
 enum {
 	HAL_HW_RX_DECAP_FORMAT_RAW = 0,
 	HAL_HW_RX_DECAP_FORMAT_NWIFI,
@@ -391,6 +409,7 @@ void hal_rx_mon_hw_desc_get_mpdu_status(void *hw_desc_addr,
 	};
 
 	rx_msdu_start = &rx_desc->msdu_start_tlv.rx_msdu_start;
+	HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs);
 
 	rs->ant_signal_db = HAL_RX_GET(rx_msdu_start,
 					RX_MSDU_START_5, USER_RSSI);
@@ -572,6 +591,12 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		ppdu_info->com_info.mpdu_cnt_fcs_err =
 			HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_2,
 					MPDU_CNT_FCS_ERR);
+		if ((ppdu_info->com_info.mpdu_cnt_fcs_ok |
+			ppdu_info->com_info.mpdu_cnt_fcs_err) > 1)
+			ppdu_info->rx_status.rs_flags |= IEEE80211_AMPDU_FLAG;
+		else
+			ppdu_info->rx_status.rs_flags &=
+				(~IEEE80211_AMPDU_FLAG);
 		break;
 	}
 

+ 8 - 0
qdf/inc/qdf_nbuf.h

@@ -119,6 +119,12 @@
 #define TSO_DEBUG(fmt, args ...)
 #endif
 
+#define IEEE80211_AMPDU_FLAG    0x01
+
+#ifdef GET_MSDU_AGGREGATION
+#define IEEE80211_AMSDU_FLAG    0x02
+#endif
+
 /**
  * struct mon_rx_status - This will have monitor mode rx_status extracted from
  * htt_rx_desc used later to update radiotap information.
@@ -161,6 +167,7 @@
  * @ast_index: AST table hash index
  * @tid: QoS traffic tid number
  * @rs_fcs_err: FCS error flag
+ * @rs_flags: Flags to indicate AMPDU or AMSDU aggregation
  * @he_per_user_1: HE per user info1
  * @he_per_user_2: HE per user info2
  * @he_per_user_position: HE per user position info
@@ -224,6 +231,7 @@ struct mon_rx_status {
 	uint32_t ast_index;
 	uint32_t tid;
 	uint8_t  rs_fcs_err;
+	uint8_t      rs_flags;
 	/* New HE radiotap fields */
 	uint16_t he_per_user_1;
 	uint16_t he_per_user_2;