فهرست منبع

qcacld-3.0: Update EHT IEs handling as per D1.4

EHT capabilities and EHT operation IE definitions are updated as per
new draft version D1.4. Update corresponding IE handling as per new
definitions.

Change-Id: Ic321ea0d037a5f59fb6bc42f9ed013509dd2ea49
CRs-Fixed: 3160713
Deeksha Gupta 3 سال پیش
والد
کامیت
f88c2a171f
3فایلهای تغییر یافته به همراه107 افزوده شده و 22 حذف شده
  1. 5 1
      core/mac/src/pe/lim/lim_utils.c
  2. 48 12
      core/mac/src/sys/legacy/src/utils/src/parser_api.c
  3. 54 9
      core/wma/src/wma_eht.c

+ 5 - 1
core/mac/src/pe/lim/lim_utils.c

@@ -8456,7 +8456,7 @@ void lim_set_eht_caps(struct mac_context *mac, struct pe_session *session,
 		/* convert from unpacked to packed structure */
 		eht_cap = (struct wlan_eht_cap_info *)&ie[2 + EHT_CAP_OUI_SIZE];
 
-		eht_cap->nsep_pri_access = dot11_cap.nsep_pri_access;
+		eht_cap->epcs_pri_access = dot11_cap.epcs_pri_access;
 		eht_cap->eht_om_ctl = dot11_cap.eht_om_ctl;
 		eht_cap->triggered_txop_sharing_mode1 =
 			dot11_cap.triggered_txop_sharing_mode1;
@@ -8529,6 +8529,10 @@ void lim_set_eht_caps(struct mac_context *mac, struct pe_session *session,
 		eht_cap->mu_bformer_320mhz = dot11_cap.mu_bformer_320mhz;
 		eht_cap->tb_sounding_feedback_rl =
 			dot11_cap.tb_sounding_feedback_rl;
+		eht_cap->rx_1k_qam_in_wider_bw_dl_ofdma =
+			dot11_cap.rx_1k_qam_in_wider_bw_dl_ofdma;
+		eht_cap->rx_4k_qam_in_wider_bw_dl_ofdma =
+			dot11_cap.rx_4k_qam_in_wider_bw_dl_ofdma;
 
 		if ((is_band_2g && !dot11_he_cap.chan_width_0) ||
 			(!is_band_2g && !dot11_he_cap.chan_width_1 &&

+ 48 - 12
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -6840,8 +6840,8 @@ const uint8_t *lim_get_ext_ie_ptr_from_ext_id(const uint8_t *ie,
 					       ie, ie_len);
 }
 
-/* 1 byte ext id, 2 bytes mac cap, 8 bytes phy cap */
-#define EHTCAP_FIXED_LEN 11
+/* 1 byte ext id, 2 bytes mac cap, 9 bytes phy cap */
+#define EHTCAP_FIXED_LEN 12
 #define EHTCAP_MACBYTE_IDX0      0
 #define EHTCAP_MACBYTE_IDX1      1
 
@@ -6853,6 +6853,7 @@ const uint8_t *lim_get_ext_ie_ptr_from_ext_id(const uint8_t *ie,
 #define EHTCAP_PHYBYTE_IDX5      5
 #define EHTCAP_PHYBYTE_IDX6      6
 #define EHTCAP_PHYBYTE_IDX7      7
+#define EHTCAP_PHYBYTE_IDX8      8
 
 #define WLAN_IE_HDR_LEN          2
 
@@ -6930,14 +6931,14 @@ enum EHT_PER_BW_TXRX_MCS_NSS_MAP_IDX {
 				     (num_bits))
 
 /* byte 0 */
-#define EHTCAP_MAC_NSEPPRIACCESS_GET_FROM_IE(__eht_cap_mac) \
+#define EHTCAP_MAC_EPCSPRIACCESS_GET_FROM_IE(__eht_cap_mac) \
 			ehtcap_ie_get(__eht_cap_mac[EHTCAP_MACBYTE_IDX0], \
-				      EHTCAP_MAC_NSEPPRIACCESS_IDX, \
-				      EHTCAP_MAC_NSEPPRIACCESS_BITS)
-#define EHTCAP_MAC_NSEPPRIACCESS_SET_TO_IE(__eht_cap_mac, __value) \
+				      EHTCAP_MAC_EPCSPRIACCESS_IDX, \
+				      EHTCAP_MAC_EPCSPRIACCESS_BITS)
+#define EHTCAP_MAC_EPCSPRIACCESS_SET_TO_IE(__eht_cap_mac, __value) \
 			ehtcap_ie_set(&__eht_cap_mac[EHTCAP_MACBYTE_IDX0], \
-				      EHTCAP_MAC_NSEPPRIACCESS_IDX, \
-				      EHTCAP_MAC_NSEPPRIACCESS_BITS, __value)
+				      EHTCAP_MAC_EPCSPRIACCESS_IDX, \
+				      EHTCAP_MAC_EPCSPRIACCESS_BITS, __value)
 
 #define EHTCAP_MAC_EHTOMCTRL_GET_FROM_IE(__eht_cap_mac) \
 			ehtcap_ie_get(__eht_cap_mac[EHTCAP_MACBYTE_IDX0], \
@@ -7370,6 +7371,25 @@ enum EHT_PER_BW_TXRX_MCS_NSS_MAP_IDX {
 				      EHTCAP_PHY_TB_SOUNDING_FEEDBACK_RL_IDX, \
 				      EHTCAP_PHY_TB_SOUNDING_FEEDBACK_RL_BITS, \
 				      value)
+#define EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_GET_FROM_IE(__eht_cap_phy) \
+		ehtcap_ie_get(__eht_cap_phy[EHTCAP_PHYBYTE_IDX8], \
+			      EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_IDX, \
+			      EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_BITS)
+#define EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_SET_TO_IE(__eht_cap_phy, value) \
+		ehtcap_ie_set(&__eht_cap_phy[EHTCAP_PHYBYTE_IDX8], \
+			      EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_IDX, \
+			      EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_BITS, \
+			      value)
+
+#define EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_GET_FROM_IE(__eht_cap_phy) \
+		ehtcap_ie_get(__eht_cap_phy[EHTCAP_PHYBYTE_IDX8], \
+			      EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_IDX, \
+			      EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_BITS)
+#define EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_SET_TO_IE(__eht_cap_phy, value) \
+		ehtcap_ie_set(&__eht_cap_phy[EHTCAP_PHYBYTE_IDX8], \
+			      EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_IDX, \
+			      EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_BITS, \
+			      value)
 static
 QDF_STATUS lim_ieee80211_unpack_ehtcap(const uint8_t *eht_cap_ie,
 				       tDot11fIEeht_cap *dot11f_eht_cap,
@@ -7389,8 +7409,8 @@ QDF_STATUS lim_ieee80211_unpack_ehtcap(const uint8_t *eht_cap_ie,
 	qdf_mem_zero(dot11f_eht_cap, (sizeof(tDot11fIEeht_cap)));
 
 	dot11f_eht_cap->present = 1;
-	dot11f_eht_cap->nsep_pri_access =
-		    EHTCAP_MAC_NSEPPRIACCESS_GET_FROM_IE(ehtcap->eht_mac_cap);
+	dot11f_eht_cap->epcs_pri_access =
+		    EHTCAP_MAC_EPCSPRIACCESS_GET_FROM_IE(ehtcap->eht_mac_cap);
 
 	dot11f_eht_cap->eht_om_ctl =
 		    EHTCAP_MAC_EHTOMCTRL_GET_FROM_IE(ehtcap->eht_mac_cap);
@@ -7568,6 +7588,14 @@ QDF_STATUS lim_ieee80211_unpack_ehtcap(const uint8_t *eht_cap_ie,
 			EHTCAP_PHY_TB_SOUNDING_FB_RL_GET_FROM_IE(
 					ehtcap->eht_phy_cap.phy_cap_bytes);
 
+	dot11f_eht_cap->rx_1k_qam_in_wider_bw_dl_ofdma =
+			EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_GET_FROM_IE(
+					ehtcap->eht_phy_cap.phy_cap_bytes);
+
+	dot11f_eht_cap->rx_4k_qam_in_wider_bw_dl_ofdma =
+			EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_GET_FROM_IE(
+					ehtcap->eht_phy_cap.phy_cap_bytes);
+
 	/* Fill EHT MCS and NSS set field */
 	if ((is_band_2g && !dot11f_he_cap.chan_width_0) ||
 	    (!is_band_2g && !dot11f_he_cap.chan_width_1 &&
@@ -7788,8 +7816,8 @@ void lim_ieee80211_pack_ehtcap(uint8_t *ie, tDot11fIEeht_cap dot11f_eht_cap,
 	 */
 	qdf_mem_copy(&ehtcap->elem_id_extn, EHT_CAP_OUI_TYPE, EHT_CAP_OUI_SIZE);
 
-	val = dot11f_eht_cap.nsep_pri_access;
-	EHTCAP_MAC_NSEPPRIACCESS_SET_TO_IE(ehtcap->eht_mac_cap, val);
+	val = dot11f_eht_cap.epcs_pri_access;
+	EHTCAP_MAC_EPCSPRIACCESS_SET_TO_IE(ehtcap->eht_mac_cap, val);
 
 	val = dot11f_eht_cap.eht_om_ctl;
 	EHTCAP_MAC_EHTOMCTRL_SET_TO_IE(ehtcap->eht_mac_cap, val);
@@ -7961,6 +7989,14 @@ void lim_ieee80211_pack_ehtcap(uint8_t *ie, tDot11fIEeht_cap dot11f_eht_cap,
 	EHTCAP_PHY_TB_SOUNDING_FB_RL_SET_TO_IE(
 				     ehtcap->eht_phy_cap.phy_cap_bytes,	val);
 
+	val = dot11f_eht_cap.rx_1k_qam_in_wider_bw_dl_ofdma;
+	EHTCAP_PHY_RX_1K_QAM_IN_WIDER_BW_DL_OFDMA_SET_TO_IE(
+				     ehtcap->eht_phy_cap.phy_cap_bytes, val);
+
+	val = dot11f_eht_cap.rx_4k_qam_in_wider_bw_dl_ofdma;
+	EHTCAP_PHY_RX_4K_QAM_IN_WIDER_BW_DL_OFDMA_SET_TO_IE(
+				     ehtcap->eht_phy_cap.phy_cap_bytes, val);
+
 	/* Fill EHT MCS and NSS set field */
 	if ((is_band_2g && !dot11f_he_cap.chan_width_0) ||
 	    (!is_band_2g && !dot11f_he_cap.chan_width_1 &&

+ 54 - 9
core/wma/src/wma_eht.c

@@ -45,10 +45,15 @@ static void wma_convert_eht_cap(tDot11fIEeht_cap *eht_cap, uint32_t *mac_cap,
 	eht_cap->present = true;
 
 	/* EHT MAC capabilities */
-	eht_cap->nsep_pri_access = WMI_EHTCAP_MAC_NSEPPRIACCESS_GET(mac_cap);
+	eht_cap->epcs_pri_access = WMI_EHTCAP_MAC_NSEPPRIACCESS_GET(mac_cap);
 	eht_cap->eht_om_ctl = WMI_EHTCAP_MAC_EHTOMCTRL_GET(mac_cap);
 	eht_cap->triggered_txop_sharing_mode1 =
-					WMI_EHTCAP_MAC_TRIGTXOP_GET(mac_cap);
+				WMI_EHTCAP_MAC_TRIGTXOPMODE1_GET(mac_cap);
+	eht_cap->triggered_txop_sharing_mode2 =
+				WMI_EHTCAP_MAC_TRIGTXOPMODE2_GET(mac_cap);
+	eht_cap->restricted_twt = WMI_EHTCAP_MAC_RESTRICTTWT_GET(mac_cap);
+	eht_cap->scs_traffic_desc = WMI_EHTCAP_MAC_SCSTRAFFICDESC_GET(mac_cap);
+	eht_cap->max_mpdu_len = WMI_EHTCAP_MAC_MAXMPDULEN_GET(mac_cap);
 
 	/* EHT PHY capabilities */
 	eht_cap->support_320mhz_6ghz = WMI_EHTCAP_PHY_320MHZIN6GHZ_GET(phy_cap);
@@ -110,6 +115,12 @@ static void wma_convert_eht_cap(tDot11fIEeht_cap *eht_cap, uint32_t *mac_cap,
 			phy_cap);
 	eht_cap->mu_bformer_160mhz = WMI_EHTCAP_PHY_MUBFMR160MHZ_GET(phy_cap);
 	eht_cap->mu_bformer_320mhz = WMI_EHTCAP_PHY_MUBFMR320MHZ_GET(phy_cap);
+	eht_cap->tb_sounding_feedback_rl =
+			WMI_EHTCAP_PHY_TBSUNDFBRATELIMIT_GET(phy_cap);
+	eht_cap->rx_1k_qam_in_wider_bw_dl_ofdma =
+			WMI_EHTCAP_PHY_RX1024QAMWIDERBWDLOFDMA_GET(phy_cap);
+	eht_cap->rx_4k_qam_in_wider_bw_dl_ofdma =
+			WMI_EHTCAP_PHY_RX4096QAMWIDERBWDLOFDMA_GET(phy_cap);
 
 	/* TODO: MCS map and PPET */
 }
@@ -222,11 +233,19 @@ void wma_print_eht_cap(tDot11fIEeht_cap *eht_cap)
 	wma_debug("EHT Capabilities:");
 
 	/* EHT MAC Capabilities */
-	wma_nofl_debug("\tNSEP Priority Access: 0x%01x",
-		       eht_cap->nsep_pri_access);
+	wma_nofl_debug("\tEPCS Priority Access: 0x%01x",
+		       eht_cap->epcs_pri_access);
 	wma_nofl_debug("\tOM Control: 0x%01x", eht_cap->eht_om_ctl);
 	wma_nofl_debug("\tTriggered TXOP Sharing mode-1: 0x%01x",
 		       eht_cap->triggered_txop_sharing_mode1);
+	wma_nofl_debug("\tTriggered TXOP Sharing mode-2: 0x%01x",
+		       eht_cap->triggered_txop_sharing_mode2);
+	wma_nofl_debug("\tRestricted TWT support: 0x%01x",
+		       eht_cap->restricted_twt);
+	wma_nofl_debug("\tSCS Traffic Description Support: 0x%01x",
+		       eht_cap->scs_traffic_desc);
+	wma_nofl_debug("\tMaximum MPDU Length: 0x%01x",
+		       eht_cap->max_mpdu_len);
 
 	/* EHT PHY Capabilities */
 	wma_nofl_debug("\t320 MHz In 6 GHz: 0x%01x",
@@ -302,6 +321,12 @@ void wma_print_eht_cap(tDot11fIEeht_cap *eht_cap)
 		       eht_cap->mu_bformer_160mhz);
 	wma_nofl_debug("\tMU Beamformer BW = 320 MHz: 0x%01x",
 		       eht_cap->mu_bformer_320mhz);
+	wma_nofl_debug("\tTB sounding feedback rate limit: 0x%01x",
+		       eht_cap->tb_sounding_feedback_rl);
+	wma_nofl_debug("\tRx 1024-QAM in wider bandwidth DL OFDMA support: 0x%01x",
+		       eht_cap->rx_1k_qam_in_wider_bw_dl_ofdma);
+	wma_nofl_debug("\tRx 4096-QAM in wider bandwidth DL OFDMA support: 0x%01x",
+		       eht_cap->rx_4k_qam_in_wider_bw_dl_ofdma);
 }
 
 void wma_print_eht_phy_cap(uint32_t *phy_cap)
@@ -385,18 +410,32 @@ void wma_print_eht_phy_cap(uint32_t *phy_cap)
 		       WMI_EHTCAP_PHY_MUBFMR160MHZ_GET(phy_cap));
 	wma_nofl_debug("\tMU Beamformer BW = 320 MHz: 0x%01x",
 		       WMI_EHTCAP_PHY_MUBFMR320MHZ_GET(phy_cap));
+	wma_nofl_debug("\tTB sounding feedback rate limit: 0x%01x",
+		       WMI_EHTCAP_PHY_TBSUNDFBRATELIMIT_GET(phy_cap));
+	wma_nofl_debug("\tRx 1024-QAM in wider bandwidth DL OFDMA support: 0x%01x",
+		       WMI_EHTCAP_PHY_RX1024QAMWIDERBWDLOFDMA_GET(phy_cap));
+	wma_nofl_debug("\tRx 4096-QAM in wider bandwidth DL OFDMA support: 0x%01x",
+		       WMI_EHTCAP_PHY_RX4096QAMWIDERBWDLOFDMA_GET(phy_cap));
 }
 
 void wma_print_eht_mac_cap(uint32_t *mac_cap)
 {
 	wma_debug("EHT MAC Capabilities:");
 
-	wma_nofl_debug("\tNSEP Priority Access: 0x%01x",
-		       WMI_EHTCAP_MAC_NSEPPRIACCESS_GET(mac_cap));
+	wma_nofl_debug("\tEPCS Priority Access: 0x%01x",
+		       WMI_EHTCAP_MAC_EPCSPRIACCESS_GET(mac_cap));
 	wma_nofl_debug("\tOM Control: 0x%01x",
 		       WMI_EHTCAP_MAC_EHTOMCTRL_GET(mac_cap));
-	wma_nofl_debug("\tTriggered TXOP Sharing: 0x%01x",
-		       WMI_EHTCAP_MAC_TRIGTXOP_GET(mac_cap));
+	wma_nofl_debug("\tTriggered TXOP Sharing mode 1 support: 0x%01x",
+		       WMI_EHTCAP_MAC_TRIGTXOPMODE1_GET(mac_cap));
+	wma_nofl_debug("\tTriggered TXOP Sharing mode 2 support: 0x%01x",
+		       WMI_EHTCAP_MAC_TRIGTXOPMODE2_GET(mac_cap));
+	wma_nofl_debug("\tRestricted TWT support: 0x%01x",
+		       WMI_EHTCAP_MAC_RESTRICTTWT_GET(mac_cap));
+	wma_nofl_debug("\tSCS Traffic Description Support: 0x%01x",
+		       WMI_EHTCAP_MAC_SCSTRAFFICDESC_GET(mac_cap));
+	wma_nofl_debug("\tMaximum MPDU Length: 0x%01x",
+		       WMI_EHTCAP_MAC_MAXMPDULEN_GET(mac_cap));
 }
 
 void wma_print_eht_op(tDot11fIEeht_op *eht_ops)
@@ -417,7 +456,7 @@ void wma_populate_peer_eht_cap(struct peer_assoc_params *peer,
 	peer->qos_flag = 1;
 
 	/* EHT MAC Capabilities */
-	WMI_EHTCAP_MAC_NSEPPRIACCESS_SET(mac_cap, eht_cap->nsep_pri_access);
+	WMI_EHTCAP_MAC_EPCSPRIACCESS_SET(mac_cap, eht_cap->epcs_pri_access);
 	WMI_EHTCAP_MAC_EHTOMCTRL_SET(mac_cap, eht_cap->eht_om_ctl);
 	WMI_EHTCAP_MAC_TRIGTXOP_SET(mac_cap,
 				    eht_cap->triggered_txop_sharing_mode1);
@@ -479,6 +518,12 @@ void wma_populate_peer_eht_cap(struct peer_assoc_params *peer,
 	WMI_EHTCAP_PHY_MUBFMRLT80MHZ_SET(phy_cap, eht_cap->mu_bformer_le_80mhz);
 	WMI_EHTCAP_PHY_MUBFMR160MHZ_SET(phy_cap, eht_cap->mu_bformer_160mhz);
 	WMI_EHTCAP_PHY_MUBFMR320MHZ_SET(phy_cap, eht_cap->mu_bformer_320mhz);
+	WMI_EHTCAP_PHY_TBSUNDFBRATELIMIT_SET(phy_cap,
+					eht_cap->tb_sounding_feedback_rl);
+	WMI_EHTCAP_PHY_RX1024QAMWIDERBWDLOFDMA_SET(phy_cap,
+				eht_cap->rx_1k_qam_in_wider_bw_dl_ofdma);
+	WMI_EHTCAP_PHY_RX4096QAMWIDERBWDLOFDMA_SET(phy_cap,
+				eht_cap->rx_4k_qam_in_wider_bw_dl_ofdma);
 
 	qdf_mem_copy(peer->peer_eht_rx_mcs_set, peer->peer_he_rx_mcs_set,
 		     sizeof(peer->peer_he_rx_mcs_set));