浏览代码

qcacmn: Add Bandwidth Indication Element support

Adding Bandwidth Indication Element Sub IE structure and other support

Change-Id: Iae761582e8c5d2b12af231e58c6dcbb23421e9dd
CRs-Fixed: 3444254
Guru Pratap Sharma 2 年之前
父节点
当前提交
08131c79a1

+ 32 - 0
umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h

@@ -311,6 +311,11 @@ enum qcn_attribute_id {
  */
 #define WLAN_TPE_IE_MAX_LEN                      9
 
+#ifdef WLAN_FEATURE_11BE
+/* Bandwidth indication element IE minimum length */
+#define WLAN_BW_IND_IE_MIN_LEN              3
+#endif
+
 /* Max channel switch time IE length */
 #define WLAN_MAX_CHAN_SWITCH_TIME_IE_LEN         4
 
@@ -657,6 +662,7 @@ enum element_ie {
  * @WLAN_EXTN_ELEMID_EHTCAP: EHT Capabilities IE
  * @WLAN_EXTN_ELEMID_T2LM: TID-to-link mapping IE
  * @WLAN_EXTN_ELEMID_MULTI_LINK_TRAFFIC_IND: Multi-link Traffic Indication IE
+ * @WLAN_EXTN_ELEMID_BW_IND: Bandwidth Indication Element Sub IE
  */
 enum extn_element_ie {
 	WLAN_EXTN_ELEMID_ESP         = 11,
@@ -680,6 +686,9 @@ enum extn_element_ie {
 #endif
 	WLAN_EXTN_ELEMID_T2LM        = 109,
 	WLAN_EXTN_ELEMID_MULTI_LINK_TRAFFIC_IND = 110,
+#ifdef WLAN_FEATURE_11BE
+	WLAN_EXTN_ELEMID_BW_IND = 135,
+#endif
 };
 
 /**
@@ -1931,6 +1940,29 @@ struct wlan_ie_ehtops {
 	uint8_t disabled_sub_chan_bitmap[2];
 } qdf_packed;
 
+/**
+ * struct wlan_ie_bw_ind - Bandwidth Indication Element
+ * @elem_id: Element ID
+ * @elem_len: Element length
+ * @elem_id_extn: Element ID extension
+ * @bw_ind_param: bw indication element parameters
+ * @control: Control field in bw_ind Operation Information
+ * @ccfs0: EHT Channel Centre Frequency Segment0 information
+ * @ccfs1: EHT Channel Centre Frequency Segment1 information
+ * @disabled_sub_chan_bitmap: Bitmap to indicate 20MHz subchannel
+ *                            is punctured or not
+ */
+struct wlan_ie_bw_ind {
+	uint8_t elem_id;
+	uint8_t elem_len;
+	uint8_t elem_id_extn;
+	uint8_t bw_ind_param;
+	uint8_t control;
+	uint8_t ccfs0;
+	uint8_t ccfs1;
+	uint8_t disabled_sub_chan_bitmap[2];
+} qdf_packed;
+
 #ifdef WLAN_FEATURE_11BE_MLO
 #define WLAN_MLO_MAX_VDEVS 2
 

+ 2 - 0
umac/scan/dispatcher/inc/wlan_scan_public_structs.h

@@ -209,6 +209,7 @@ struct channel_info {
  * @rsnxe: Pointer to rsnxe IE
  * @ehtcap: pointer to ehtcap ie
  * @ehtop: pointer to eht op ie
+ * @bw_ind: pointer to bandwidth indication element sub ie
  * @multi_link_bv: pointer to multi link basic variant IE
  * @multi_link_rv: pointer to multi link reconfig IE
  * @t2lm: array of pointers to t2lm op ie
@@ -276,6 +277,7 @@ struct ie_list {
 #ifdef WLAN_FEATURE_11BE
 	uint8_t *ehtcap;
 	uint8_t *ehtop;
+	uint8_t *bw_ind;
 #endif
 #ifdef WLAN_FEATURE_11BE_MLO
 	uint8_t *multi_link_bv;

+ 14 - 0
umac/scan/dispatcher/inc/wlan_scan_utils_api.h

@@ -741,6 +741,8 @@ util_scan_copy_beacon_data(struct scan_cache_entry *new_entry,
 	/* This macro will be removed once 11be is enabled */
 	ie_lst->ehtcap = conv_ptr(ie_lst->ehtcap, old_ptr, new_ptr);
 	ie_lst->ehtop = conv_ptr(ie_lst->ehtop, old_ptr, new_ptr);
+	ie_lst->bw_ind =
+		conv_ptr(ie_lst->bw_ind, old_ptr, new_ptr);
 #endif
 #ifdef WLAN_FEATURE_11BE_MLO
 	ie_lst->multi_link_bv =
@@ -1590,6 +1592,12 @@ util_scan_entry_ehtop(struct scan_cache_entry *scan_entry)
 {
 	return scan_entry->ie_list.ehtop;
 }
+
+static inline uint8_t*
+util_scan_entry_bw_ind(struct scan_cache_entry *scan_entry)
+{
+	return scan_entry->ie_list.bw_ind;
+}
 #else
 
 static inline uint8_t*
@@ -1597,6 +1605,12 @@ util_scan_entry_ehtcap(struct scan_cache_entry *scan_entry)
 {
 	return NULL;
 }
+
+static inline uint8_t*
+util_scan_entry_bw_ind(struct scan_cache_entry *scan_entry)
+{
+	return NULL;
+}
 #endif
 
 #ifdef WLAN_FEATURE_11BE_MLO

+ 7 - 0
umac/scan/dispatcher/src/wlan_scan_utils_api.c

@@ -953,6 +953,13 @@ util_scan_parse_chan_switch_wrapper_ie(struct scan_cache_entry *scan_params,
 				return QDF_STATUS_E_INVAL;
 			scan_params->ie_list.txpwrenvlp = (uint8_t *)sub_ie;
 			break;
+#ifdef WLAN_FEATURE_11BE
+		case WLAN_EXTN_ELEMID_BW_IND:
+			if (sub_ie->ie_len < WLAN_BW_IND_IE_MIN_LEN)
+				return QDF_STATUS_E_INVAL;
+			scan_params->ie_list.bw_ind = (uint8_t *)sub_ie;
+			break;
+#endif
 		}
 		/* Consume sub info element */
 		sub_ie_len -= sub_ie->ie_len;