Răsfoiți Sursa

qcacmn: Initial support for 11ax MBSSID IE

1. Service ready ext includes a parameter for max
BSSID indicator.
2. Beacon template includes MBSSID IE offset.
3. Vdev create and up cmds include more parameters.

Change-Id: I71214eacdaa886725b7ea8f61db3a743ba6597e9
CRs-Fixed: 2306638
Manoj Ekbote 6 ani în urmă
părinte
comite
b8de937cc4

+ 2 - 0
qdf/inc/qdf_types.h

@@ -358,6 +358,7 @@ typedef void (*qdf_timer_func_t)(void *);
  * @QDF_MODULE_ID_CP_STATS: Control Plane Statistics ID
  * @QDF_MODULE_ID_ACTION_OUI: ACTION OUI module ID
  * @QDF_MODULE_ID_TARGET: Target module ID
+ * @QDF_MODULE_ID_MBSSIE: MBSS IE ID
  * @QDF_MODULE_ID_ANY: anything
  * @QDF_MODULE_ID_MAX: Max place holder module ID
  */
@@ -463,6 +464,7 @@ typedef enum {
 	QDF_MODULE_ID_CP_STATS,
 	QDF_MODULE_ID_ACTION_OUI,
 	QDF_MODULE_ID_TARGET,
+	QDF_MODULE_ID_MBSSIE,
 	QDF_MODULE_ID_ANY,
 	QDF_MODULE_ID_MAX,
 } QDF_MODULE_ID;

+ 2 - 0
qdf/linux/src/qdf_trace.c

@@ -2832,6 +2832,7 @@ struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = {
 	[QDF_MODULE_ID_CP_STATS] = {"CP_STATS"},
 	[QDF_MODULE_ID_ACTION_OUI] = {"action_oui"},
 	[QDF_MODULE_ID_TARGET] = {"TARGET"},
+	[QDF_MODULE_ID_MBSSIE] = {"MBSSIE"},
 	[QDF_MODULE_ID_ANY] = {"ANY"},
 };
 qdf_export_symbol(g_qdf_category_name);
@@ -3279,6 +3280,7 @@ static void set_default_trace_levels(struct category_info *cinfo)
 		[QDF_MODULE_ID_IPA] = QDF_TRACE_LEVEL_NONE,
 		[QDF_MODULE_ID_ACTION_OUI] = QDF_TRACE_LEVEL_NONE,
 		[QDF_MODULE_ID_CP_STATS] = QDF_TRACE_LEVEL_ERROR,
+		[QDF_MODULE_ID_MBSSIE] = QDF_TRACE_LEVEL_INFO,
 		[QDF_MODULE_ID_ANY] = QDF_TRACE_LEVEL_INFO,
 	};
 

+ 2 - 0
target_if/init_deinit/inc/service_ready_param.h

@@ -279,6 +279,7 @@ struct wlan_psoc_host_chainmask_table {
  * @num_phy: Number of Phy mode.
  * @num_chainmask_tables: Number of chain mask tables.
  * @num_dbr_ring_caps: Number of direct buf rx ring capabilities
+ * @max_bssid_indicator: Maximum number of VAPs in MBSS IE
  * @chainmask_table: Available chain mask tables.
  * @sar_version: SAR version info
  */
@@ -294,6 +295,7 @@ struct wlan_psoc_host_service_ext_param {
 	uint32_t num_phy;
 	uint32_t num_chainmask_tables;
 	uint32_t num_dbr_ring_caps;
+	uint32_t max_bssid_indicator;
 	struct wlan_psoc_host_chainmask_table
 		chainmask_table[PSOC_MAX_CHAINMASK_TABLES];
 	uint32_t sar_version;

+ 2 - 0
target_if/init_deinit/src/init_event_handler.c

@@ -254,6 +254,8 @@ static int init_deinit_service_ext_ready_event_handler(ol_scn_t scn_handle,
 	info->wlan_res_cfg.beacon_tx_offload_max_vdev =
 				(target_psoc_get_num_radios(tgt_hdl) *
 				info->wlan_res_cfg.beacon_tx_offload_max_vdev);
+	info->wlan_res_cfg.max_bssid_indicator =
+				info->service_ext_param.max_bssid_indicator;
 
 	info->wmi_service_ready = TRUE;
 

+ 2 - 0
umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h

@@ -177,6 +177,8 @@
 #define WLAN_SOC_F_BTCOEX_SUPPORT      0x00200000
 	/* HOST 80211 enable*/
 #define WLAN_SOC_F_HOST_80211_ENABLE   0x00400000
+	/* MBSS IE enable */
+#define WLAN_SOC_F_MBSS_IE_ENABLE      0x00800000
 
 /* PSOC op flags */
 

+ 22 - 0
wmi/inc/wmi_unified_param.h

@@ -613,6 +613,8 @@ typedef enum {
  * @nss_2g: NSS for 2G
  * @nss_5g: NSS for 5G
  * @pdev_id: pdev id on pdev for this vdev
+ * @mbssid-flags: MBSS IE flags indicating vdev type
+ * @vdevid_trans: id of transmitting vdev for MBSS IE
  */
 struct vdev_create_params {
 	uint8_t if_id;
@@ -621,6 +623,8 @@ struct vdev_create_params {
 	uint8_t nss_2g;
 	uint8_t nss_5g;
 	uint32_t pdev_id;
+	uint32_t mbssid_flags;
+	uint8_t vdevid_trans;
 };
 
 /**
@@ -689,10 +693,18 @@ struct vdev_stop_params {
  * struct vdev_up_params - vdev up cmd parameter
  * @vdev_id: vdev id
  * @assoc_id: association id
+ * @profile_idx: profile index of the connected non-trans ap (mbssid case).
+ *		0  means invalid.
+ * @profile_num: the total profile numbers of non-trans aps (mbssid case).
+ *		0 means non-MBSS AP.
+ * @trans_bssid: bssid of transmitted AP (MBSS IE case)
  */
 struct vdev_up_params {
 	uint8_t vdev_id;
 	uint16_t assoc_id;
+	uint32_t profile_idx;
+	uint32_t profile_num;
+	uint8_t trans_bssid[IEEE80211_ADDR_LEN];
 };
 
 /**
@@ -1046,6 +1058,7 @@ struct pdev_params {
  * struct beacon_tmpl_params - beacon template cmd parameter
  * @vdev_id: vdev id
  * @tim_ie_offset: tim ie offset
+ * @mbssid_ie_offset: mbssid ie offset
  * @tmpl_len: beacon template length
  * @tmpl_len_aligned: beacon template alignment
  * @csa_switch_count_offset: CSA swith count offset in beacon frame
@@ -1056,6 +1069,7 @@ struct pdev_params {
 struct beacon_tmpl_params {
 	uint8_t vdev_id;
 	uint32_t tim_ie_offset;
+	uint32_t mbssid_ie_offset;
 	uint32_t tmpl_len;
 	uint32_t tmpl_len_aligned;
 	uint32_t csa_switch_count_offset;
@@ -6041,6 +6055,7 @@ typedef enum {
 #ifdef OL_ATH_SMART_LOGGING
 	wmi_service_smart_logging_support,
 #endif
+	wmi_service_infra_mbssid,
 	wmi_services_max,
 } wmi_conv_service_ids;
 #define WMI_SERVICE_UNAVAILABLE 0xFFFF
@@ -6158,6 +6173,7 @@ struct wmi_host_fw_abi_ver {
  * @twt_ap_pdev_count: Number of MAC on which AP TWT feature is supported
  * @twt_ap_sta_count: Max no of STA with which TWT sessions can be formed
  *                    by the AP
+ * @max_bssid_indicator: max number of MBSS VAPs
  */
 typedef struct {
 	uint32_t num_vdevs;
@@ -6232,6 +6248,7 @@ typedef struct {
 	bool cce_disable;
 	uint32_t twt_ap_pdev_count;
 	uint32_t twt_ap_sta_count;
+	uint32_t max_bssid_indicator;
 } target_resource_config;
 
 /**
@@ -8722,4 +8739,9 @@ struct wmi_apf_read_memory_resp_event_params {
 };
 #endif /* FEATURE_WLAN_APF */
 
+/* vdev control flags (per bits) */
+#define WMI_HOST_VDEV_FLAGS_NON_MBSSID_AP      0x00000001
+#define WMI_HOST_VDEV_FLAGS_TRANSMIT_AP        0x00000002
+#define WMI_HOST_VDEV_FLAGS_NON_TRANSMIT_AP    0x00000004
+
 #endif /* _WMI_UNIFIED_PARAM_H_ */

+ 8 - 1
wmi/src/wmi_unified_tlv.c

@@ -177,6 +177,8 @@ static QDF_STATUS send_vdev_create_cmd_tlv(wmi_unified_t wmi_handle,
 	cmd->vdev_id = param->if_id;
 	cmd->vdev_type = param->type;
 	cmd->vdev_subtype = param->subtype;
+	cmd->flags = param->mbssid_flags;
+	cmd->vdevid_trans = param->vdevid_trans;
 	cmd->num_cfg_txrx_streams = num_bands;
 	copy_vdev_create_pdev_id(wmi_handle, cmd, param);
 	WMI_CHAR_ARRAY_TO_MAC_ADDR(macaddr, &cmd->vdev_macaddr);
@@ -852,6 +854,9 @@ static QDF_STATUS send_vdev_up_cmd_tlv(wmi_unified_t wmi,
 		       WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_up_cmd_fixed_param));
 	cmd->vdev_id = params->vdev_id;
 	cmd->vdev_assoc_id = params->assoc_id;
+	cmd->profile_idx = params->profile_idx;
+	cmd->profile_num = params->profile_num;
+	WMI_CHAR_ARRAY_TO_MAC_ADDR(params->trans_bssid, &cmd->trans_bssid);
 	WMI_CHAR_ARRAY_TO_MAC_ADDR(bssid, &cmd->vdev_bssid);
 	if (wmi_unified_cmd_send(wmi, buf, len, WMI_VDEV_UP_CMDID)) {
 		WMI_LOGP("%s: Failed to send vdev up command", __func__);
@@ -2195,6 +2200,7 @@ static QDF_STATUS send_beacon_tmpl_send_cmd_tlv(wmi_unified_t wmi_handle,
 		       WMITLV_GET_STRUCT_TLVLEN(wmi_bcn_tmpl_cmd_fixed_param));
 	cmd->vdev_id = param->vdev_id;
 	cmd->tim_ie_offset = param->tim_ie_offset;
+	cmd->mbssid_ie_offset = param->mbssid_ie_offset;
 	cmd->csa_switch_count_offset = param->csa_switch_count_offset;
 	cmd->ext_csa_switch_count_offset = param->ext_csa_switch_count_offset;
 	cmd->esp_ie_offset = param->esp_ie_offset;
@@ -12676,7 +12682,7 @@ void wmi_copy_resource_config(wmi_resource_config *resource_cfg,
 	resource_cfg->sched_params = tgt_res_cfg->scheduler_params;
 	resource_cfg->num_packet_filters = tgt_res_cfg->num_packet_filters;
 	resource_cfg->num_max_sta_vdevs = tgt_res_cfg->num_max_sta_vdevs;
-
+	resource_cfg->max_bssid_indicator = tgt_res_cfg->max_bssid_indicator;
 	if (tgt_res_cfg->atf_config)
 		WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_SET(resource_cfg->flag1, 1);
 	if (tgt_res_cfg->mgmt_comp_evt_bundle_support)
@@ -19318,6 +19324,7 @@ static QDF_STATUS extract_service_ready_ext_tlv(wmi_unified_t wmi_handle,
 	param->max_bssid_rx_filters = ev->max_bssid_rx_filters;
 	param->fw_build_vers_ext = ev->fw_build_vers_ext;
 	param->num_dbr_ring_caps = param_buf->num_dma_ring_caps;
+	param->max_bssid_indicator = ev->max_bssid_indicator;
 	qdf_mem_copy(&param->ppet, &ev->ppet, sizeof(param->ppet));
 
 	hw_caps = param_buf->soc_hw_mode_caps;