Bladeren bron

qcacmn: Add QCN IE to the scan entry IEs list

Add QCN IE to the scan entry IEs list to support
240 MHz on 5 GHz radio.

Change-Id: I7fafae518baf6b8633729f65810fbba663744ec6
CRs-Fixed: 3230190
Aakanksha Doda 3 jaren geleden
bovenliggende
commit
af7b3ad2cd

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

@@ -187,6 +187,7 @@
 #define SFA_OUI_TYPE 0x14
 /* QCA OUI (in little endian) */
 #define QCA_OUI 0xf0fd8c
+#define QCN_OUI_TYPE_CMN 0x01
 #define QCA_OUI_WHC_TYPE  0x00
 #define QCA_OUI_WHC_REPT_TYPE 0x01
 
@@ -3258,6 +3259,13 @@ is_wcn_oui(uint8_t *frm)
 		((WCN_OUI_TYPE << 24) | WCN_OUI));
 }
 
+static inline bool
+is_qcn_oui(uint8_t *frm)
+{
+	return ((frm[1] > 4) && (LE_READ_4(frm + 2) ==
+		((QCN_OUI_TYPE_CMN << 24) | QCA_OUI)));
+}
+
 #define WLAN_VENDOR_WME_IE_LEN 24
 /**
  * is_wme_param() - If vendor IE is WME param type

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

@@ -203,6 +203,13 @@ struct channel_info {
  * @ehtcap: pointer to ehtcap ie
  * @ehtop: pointer to eht op ie
  * @multi_link: pointer to multi lik IE
+ * @bwnss_map: pointer to NSS map IE
+ * @secchanoff: pointer to secondary chan IE
+ * @mdie: pointer to md IE
+ * @heop: pointer to HE op IE
+ * @muedca: pointer to muedca IE
+ * @extender: pointer to extended IE
+ * @qcn: pointer to QCN IE
  */
 struct ie_list {
 	uint8_t *tim;
@@ -264,6 +271,7 @@ struct ie_list {
 #ifdef WLAN_FEATURE_11BE_MLO
 	uint8_t *multi_link;
 #endif
+	uint8_t *qcn;
 
 /**
  * For any new IEs in this structre, add handling in

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

@@ -742,6 +742,7 @@ util_scan_copy_beacon_data(struct scan_cache_entry *new_entry,
 #ifdef WLAN_FEATURE_11BE_MLO
 	ie_lst->multi_link = conv_ptr(ie_lst->multi_link, old_ptr, new_ptr);
 #endif
+	ie_lst->qcn = conv_ptr(ie_lst->qcn, old_ptr, new_ptr);
 
 	return QDF_STATUS_SUCCESS;
 }

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

@@ -1144,7 +1144,10 @@ util_scan_parse_vendor_ie(struct scan_cache_entry *scan_params,
 		}
 		scan_params->ie_list.single_pmk = (uint8_t *)ie +
 						sizeof(struct ie_header);
+	} else if (is_qcn_oui((uint8_t *)ie)) {
+		scan_params->ie_list.qcn = (uint8_t *)ie;
 	}
+
 	return QDF_STATUS_SUCCESS;
 }