Browse Source

qcacld-3.0: Update EHT OP's IE as per draft 2.0

Update EHT OP's IE as per draft 2.0

Change-Id: If104e125f773bd88196ae7aec8ccf9862559e467
CRs-Fixed: 3221658
Paul Zhang 2 years ago
parent
commit
0ef59fbaa6
1 changed files with 122 additions and 2 deletions
  1. 122 2
      core/mac/src/sys/legacy/src/utils/src/parser_api.c

+ 122 - 2
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -7172,8 +7172,8 @@ const uint8_t *lim_get_ext_ie_ptr_from_ext_id(const uint8_t *ie,
 }
 
 /* EHT Opeartion */
-/* 1 byte ext id, 1 byte eht op params*/
-#define EHTOP_FIXED_LEN         2
+/* 1 byte ext id, 1 byte eht op params, 4 bytes basic EHT MCS and NSS set*/
+#define EHTOP_FIXED_LEN         6
 
 #define EHTOP_PARAMS_INFOP_IDX  0
 #define EHTOP_PARAMS_INFOP_BITS 1
@@ -7213,6 +7213,35 @@ const uint8_t *lim_get_ext_ie_ptr_from_ext_id(const uint8_t *ie,
 				     EHTOP_PARAMS_DISABLEDSUBCHANBITMAPP_BITS, \
 				     __value)
 
+#define EHTOP_PARAMS_EHT_DEF_PE_DURATION_GET_FROM_IE(__eht_op_params) \
+			ehtop_ie_get(__eht_op_params, \
+				     EHTOP_DEFAULT_PE_DURATION_IDX, \
+				     EHTOP_DEFAULT_PE_DURATION_BITS)
+#define EHTOP_PARAMS_EHT_DEF_PE_DURATION_SET_TO_IE(__eht_op_params, __value) \
+			ehtop_ie_set(&__eht_op_params, \
+				     EHTOP_DEFAULT_PE_DURATION_IDX, \
+				     EHTOP_DEFAULT_PE_DURATION_BITS, __value)
+
+#define EHTOP_PARAMS_GROUP_ADDR_BU_IND_LIMIT_GET_FROM_IE(__eht_op_params) \
+			ehtop_ie_get(__eht_op_params, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_LIMIT_IDX, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_LIMIT_BITS)
+#define EHTOP_PARAMS_GROUP_ADDR_BU_IND_LIMIT_SET_TO_IE(__eht_op_params, __value) \
+			ehtop_ie_set(&__eht_op_params, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_LIMIT_IDX, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_LIMIT_BITS, \
+				     __value)
+
+#define EHTOP_PARAMS_GROUP_ADDR_BU_IND_EXPONENT_GET_FROM_IE(__eht_op_params) \
+			ehtop_ie_get(__eht_op_params, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_EXPONENT_IDX, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_EXPONENT_BITS)
+#define EHTOP_PARAMS_GROUP_ADDR_BU_IND_EXPONENT_SET_TO_IE(__eht_op_params, __value) \
+			ehtop_ie_set(&__eht_op_params, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_EXPONENT_IDX, \
+				     EHTOP_GRP_ADDRESSED_BU_IND_EXPONENT_BITS, \
+				     __value)
+
 #define EHTOP_INFO_CHANWIDTH_GET_FROM_IE(__eht_op_control) \
 			ehtop_ie_get(__eht_op_control, \
 				     EHTOP_INFO_CHANWIDTH_IDX, \
@@ -7816,6 +7845,51 @@ QDF_STATUS lim_ieee80211_unpack_ehtop(const uint8_t *eht_op_ie,
 		EHTOP_PARAMS_DISABLEDSUBCHANBITMAPP_GET_FROM_IE(
 							ehtop->ehtop_param);
 
+	dot11f_eht_op->eht_default_pe_duration =
+		EHTOP_PARAMS_EHT_DEF_PE_DURATION_GET_FROM_IE(
+							ehtop->ehtop_param);
+
+	dot11f_eht_op->group_addr_bu_indication_limit =
+		EHTOP_PARAMS_GROUP_ADDR_BU_IND_LIMIT_GET_FROM_IE(
+							ehtop->ehtop_param);
+
+	dot11f_eht_op->group_addr_bu_indication_exponent =
+		EHTOP_PARAMS_GROUP_ADDR_BU_IND_EXPONENT_GET_FROM_IE(
+							ehtop->ehtop_param);
+
+	dot11f_eht_op->basic_rx_max_nss_for_mcs_0_to_7 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_0_7,
+			     EHTOP_RX_MCS_NSS_MAP_IDX,
+			     EHTOP_RX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_tx_max_nss_for_mcs_0_to_7 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_0_7,
+			     EHTOP_TX_MCS_NSS_MAP_IDX,
+			     EHTOP_TX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_rx_max_nss_for_mcs_8_and_9 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_8_9,
+			     EHTOP_RX_MCS_NSS_MAP_IDX,
+			     EHTOP_RX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_tx_max_nss_for_mcs_8_and_9 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_8_9,
+			     EHTOP_TX_MCS_NSS_MAP_IDX,
+			     EHTOP_TX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_rx_max_nss_for_mcs_10_and_11 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_10_11,
+			     EHTOP_RX_MCS_NSS_MAP_IDX,
+			     EHTOP_RX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_tx_max_nss_for_mcs_10_and_11 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_10_11,
+			     EHTOP_TX_MCS_NSS_MAP_IDX,
+			     EHTOP_TX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_rx_max_nss_for_mcs_12_and_13 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_12_13,
+			     EHTOP_RX_MCS_NSS_MAP_IDX,
+			     EHTOP_RX_MCS_NSS_MAP_BITS);
+	dot11f_eht_op->basic_tx_max_nss_for_mcs_12_and_13 =
+		ehtop_ie_get(ehtop->basic_mcs_nss_set.max_nss_mcs_12_13,
+			     EHTOP_TX_MCS_NSS_MAP_IDX,
+			     EHTOP_TX_MCS_NSS_MAP_BITS);
+
 	if (dot11f_eht_op->eht_op_information_present) {
 		dot11f_eht_op->channel_width =
 			EHTOP_INFO_CHANWIDTH_GET_FROM_IE(ehtop->control);
@@ -8728,6 +8802,52 @@ void lim_ieee80211_pack_ehtop(uint8_t *ie, tDot11fIEeht_op dot11f_eht_op,
 		EHTOP_PARAMS_INFOP_SET_TO_IE(ehtop->ehtop_param, val);
 	}
 
+	val = dot11f_eht_op.eht_default_pe_duration;
+	EHTOP_PARAMS_EHT_DEF_PE_DURATION_SET_TO_IE(ehtop->ehtop_param, val);
+
+	val = dot11f_eht_op.group_addr_bu_indication_limit;
+	EHTOP_PARAMS_GROUP_ADDR_BU_IND_LIMIT_SET_TO_IE(ehtop->ehtop_param, val);
+
+	val = dot11f_eht_op.group_addr_bu_indication_exponent;
+	EHTOP_PARAMS_GROUP_ADDR_BU_IND_EXPONENT_SET_TO_IE(ehtop->ehtop_param,
+							  val);
+
+	val = dot11f_eht_op.basic_rx_max_nss_for_mcs_0_to_7;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_0_7,
+		     EHTOP_RX_MCS_NSS_MAP_IDX,
+		     EHTOP_RX_MCS_NSS_MAP_BITS, val);
+	val = dot11f_eht_op.basic_tx_max_nss_for_mcs_0_to_7;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_0_7,
+		     EHTOP_TX_MCS_NSS_MAP_IDX,
+		     EHTOP_TX_MCS_NSS_MAP_BITS, val);
+
+	val = dot11f_eht_op.basic_rx_max_nss_for_mcs_8_and_9;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_8_9,
+		     EHTOP_RX_MCS_NSS_MAP_IDX,
+		     EHTOP_RX_MCS_NSS_MAP_BITS, val);
+	val = dot11f_eht_op.basic_tx_max_nss_for_mcs_8_and_9;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_8_9,
+		     EHTOP_TX_MCS_NSS_MAP_IDX,
+		     EHTOP_TX_MCS_NSS_MAP_BITS, val);
+
+	val = dot11f_eht_op.basic_rx_max_nss_for_mcs_10_and_11;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_10_11,
+		     EHTOP_RX_MCS_NSS_MAP_IDX,
+		     EHTOP_RX_MCS_NSS_MAP_BITS, val);
+	val = dot11f_eht_op.basic_tx_max_nss_for_mcs_10_and_11;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_10_11,
+		     EHTOP_TX_MCS_NSS_MAP_IDX,
+		     EHTOP_TX_MCS_NSS_MAP_BITS, val);
+
+	val = dot11f_eht_op.basic_rx_max_nss_for_mcs_12_and_13;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_12_13,
+		     EHTOP_RX_MCS_NSS_MAP_IDX,
+		     EHTOP_RX_MCS_NSS_MAP_BITS, val);
+	val = dot11f_eht_op.basic_tx_max_nss_for_mcs_12_and_13;
+	ehtop_ie_set(&ehtop->basic_mcs_nss_set.max_nss_mcs_12_13,
+		     EHTOP_TX_MCS_NSS_MAP_IDX,
+		     EHTOP_TX_MCS_NSS_MAP_BITS, val);
+
 	if (EHTOP_PARAMS_INFOP_GET_FROM_IE(ehtop->ehtop_param)) {
 		val = dot11f_eht_op.channel_width;
 		EHTOP_INFO_CHANWIDTH_SET_TO_IE(ehtop->control, val);