diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index b29cbffea95b..deec56a07d14 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/dp/inc/cdp_txrx_cmn.h @@ -1738,6 +1738,37 @@ cdp_pdev_set_ctrl_pdev(ol_txrx_soc_handle soc, struct cdp_pdev *dp_pdev, ctrl_pdev); } +/* cdp_txrx_classify_and_update() - To classify the packet and update stats + * @soc: opaque soc handle + * @vdev: opaque dp vdev handle + * @skb: data + * @dir: rx or tx packet + * @nbuf_classify: packet classification object + * + * Return: 1 on success else return 0 + */ +static inline int +cdp_txrx_classify_and_update(ol_txrx_soc_handle soc, + struct cdp_vdev *vdev, qdf_nbuf_t skb, + enum txrx_direction dir, + struct ol_txrx_nbuf_classify *nbuf_class) +{ + if (!soc || !soc->ops) { + QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG, + "%s: Invalid Instance", __func__); + QDF_BUG(0); + return 0; + } + + if (!soc->ops->cmn_drv_ops || + !soc->ops->cmn_drv_ops->txrx_classify_update) + return 0; + + return soc->ops->cmn_drv_ops->txrx_classify_update(vdev, + skb, + dir, nbuf_class); +} + #ifdef RECEIVE_OFFLOAD /** * cdp_register_rx_offld_flush_cb() - register LRO/GRO flush cb function pointer diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index e1e8982cc66f..5e5e6811830b 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -360,6 +360,52 @@ typedef struct cdp_soc_t *ol_txrx_soc_handle; */ typedef void (*ol_txrx_vdev_delete_cb)(void *context); +/** + * ol_txrx_pkt_direction - Packet Direction + * @rx_direction: rx path packet + * @tx_direction: tx path packet + */ +enum txrx_direction { + rx_direction = 1, + tx_direction = 0, +}; + +/** + * ol_txrx_nbuf_classify - Packet classification object + * @peer_id: unique peer identifier from fw + * @tid: traffic identifier(could be overridden) + * @pkt_tid: traffic identifier(cannot be overridden) + * @pkt_tos: ip header tos value + * @pkt_dscp: ip header dscp value + * @tos: index value in map + * @dscp: DSCP_TID map index + * @is_mcast: multicast pkt check + * @is_eap: eapol pkt check + * @is_arp: arp pkt check + * @is_tcp: tcp pkt check + * @is_dhcp: dhcp pkt check + * @is_igmp: igmp pkt check + * @is_ipv4: ip version 4 pkt check + * @is_ipv6: ip version 6 pkt check + */ +struct ol_txrx_nbuf_classify { + uint16_t peer_id; + uint8_t tid; + uint8_t pkt_tid; + uint8_t pkt_tos; + uint8_t pkt_dscp; + uint8_t tos; + uint8_t dscp; + uint8_t is_mcast; + uint8_t is_eap; + uint8_t is_arp; + uint8_t is_tcp; + uint8_t is_dhcp; + uint8_t is_igmp; + uint8_t is_ipv4; + uint8_t is_ipv6; +}; + /** * ol_osif_vdev_handle - paque handle for OS shim virtual device * object @@ -625,7 +671,6 @@ struct ol_txrx_ops { ol_txrx_stats_rx_fp stats_rx; ol_txrx_rsim_rx_decap_fp rsim_rx_decap; } rx; - /* proxy arp function pointer - specified by OS shim, stored by txrx */ ol_txrx_proxy_arp_fp proxy_arp; ol_txrx_mcast_me_fp me_convert; @@ -758,7 +803,6 @@ enum cdp_vdev_param_type { #define PER_RADIO_FW_STATS_REQUEST 0 #define PER_VDEV_FW_STATS_REQUEST 1 - /** * enum data_stall_log_event_indicator - Module triggering data stall * @DATA_STALL_LOG_INDICATOR_UNUSED: Unused diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 5c1d0271999a..ada8d7cceebb 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -337,7 +337,6 @@ struct cdp_cmn_ops { struct cdp_ctrl_objmgr_pdev *ctrl_pdev); ol_txrx_tx_fp tx_send; - /** * txrx_get_os_rx_handles_from_vdev() - Return function, osif vdev * to deliver pkt to stack. @@ -349,6 +348,9 @@ struct cdp_cmn_ops { (struct cdp_vdev *vdev, ol_txrx_rx_fp *stack_fn, ol_osif_vdev_handle *osif_vdev); + int (*txrx_classify_update) + (struct cdp_vdev *vdev, qdf_nbuf_t skb, + enum txrx_direction, struct ol_txrx_nbuf_classify *nbuf_class); }; struct cdp_ctrl_ops { diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 127cc925fa48..5816a5562aff 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -62,6 +62,31 @@ #define CDP_MAX_RX_RINGS 4 +/* TID level VoW stats macros + * to add and get stats + */ +#define PFLOW_TXRX_TIDQ_STATS_ADD(_peer, _tid, _var, _val) \ + (((_peer)->tidq_stats[_tid]).stats[_var]) += _val +#define PFLOW_TXRX_TIDQ_STATS_GET(_peer, _tid, _var, _val) \ + ((_peer)->tidq_stats[_tid].stats[_var]) +/* + * Video only stats + */ +#define PFLOW_CTRL_PDEV_VIDEO_STATS_SET(_pdev, _var, _val) \ + (((_pdev)->vow.vistats[_var]).value) = _val +#define PFLOW_CTRL_PDEV_VIDEO_STATS_GET(_pdev, _var) \ + ((_pdev)->vow.vistats[_var].value) +#define PFLOW_CTRL_PDEV_VIDEO_STATS_ADD(_pdev, _var, _val) \ + (((_pdev)->vow.vistats[_var]).value) += _val +/* + * video delay stats + */ +#define PFLOW_CTRL_PDEV_DELAY_VIDEO_STATS_SET(_pdev, _var, _val) \ + (((_pdev)->vow.delaystats[_var]).value) = _val +#define PFLOW_CTRL_PDEV_DELAY_VIDEO_STATS_GET(_pdev, _var) \ + ((_pdev)->vow.delaystats[_var].value) +#define PFLOW_CTRL_PDEV_DELAY_VIDEO_STATS_ADD(_pdev, _var, _val) \ + (((_pdev)->vow.delaystats[_var]).value) += _val /* * Number of TLVs sent by FW. Needs to reflect * HTT_PPDU_STATS_MAX_TAG declared in FW @@ -78,6 +103,47 @@ enum cdp_packet_type { DOT11_MAX = 5, }; +/* TID level Tx/Rx stats + * + */ +enum cdp_txrx_tidq_stats { + /* Tx Counters */ + TX_MSDU_TOTAL_LINUX_SUBSYSTEM, + TX_MSDU_TOTAL_FROM_OSIF, + TX_MSDU_TX_COMP_PKT_CNT, + /* Rx Counters */ + RX_MSDU_TOTAL_FROM_FW, + RX_MSDU_MCAST_FROM_FW, + RX_TID_MISMATCH_FROM_FW, + RX_MSDU_MISC_PKTS, + RX_MSDU_IS_ARP, + RX_MSDU_IS_EAP, + RX_MSDU_IS_DHCP, + RX_AGGREGATE_10, + RX_AGGREGATE_20, + RX_AGGREGATE_30, + RX_AGGREGATE_40, + RX_AGGREGATE_50, + RX_AGGREGATE_60, + RX_AGGREGATE_MORE, + RX_AMSDU_1, + RX_AMSDU_2, + RX_AMSDU_3, + RX_AMSDU_4, + RX_AMSDU_MORE, + RX_MSDU_CHAINED_FROM_FW, + RX_MSDU_REORDER_FAILED_FROM_FW, + RX_MSDU_REORDER_FLUSHED_FROM_FW, + RX_MSDU_DISCARD_FROM_FW, + RX_MSDU_DUPLICATE_FROM_FW, + RX_MSDU_DELIVERED_TO_STACK, + TIDQ_STATS_MAX, +}; + +struct cdp_tidq_stats { + uint32_t stats[TIDQ_STATS_MAX]; +}; + /* struct cdp_pkt_info - packet info * @num: no of packets * @bytes: total no of bytes @@ -1433,6 +1499,9 @@ enum _ol_ath_param_t { OL_ATH_PARAM_CHAN_AP_TX_UTIL = 391, OL_ATH_PARAM_CHAN_OBSS_RX_UTIL = 392, OL_ATH_PARAM_CHAN_NON_WIFI = 393, +#if PEER_FLOW_CONTROL + OL_ATH_PARAM_VIDEO_STATS_FC = 394, +#endif }; /* Enumeration of PDEV Configuration parameter */ diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 5eb2d38381e0..534d63b58e4d 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -51,6 +51,8 @@ #define QDF_NBUF_TRAC_EAPOL_ETH_TYPE 0x888E #define QDF_NBUF_TRAC_WAPI_ETH_TYPE 0x88b4 #define QDF_NBUF_TRAC_ARP_ETH_TYPE 0x0806 +#define QDF_NBUF_PKT_IPV4_DSCP_MASK 0xFC +#define QDF_NBUF_PKT_IPV4_DSCP_SHIFT 0x02 #define QDF_NBUF_TRAC_TDLS_ETH_TYPE 0x890D #define QDF_NBUF_TRAC_IPV4_ETH_TYPE 0x0800 #define QDF_NBUF_TRAC_IPV6_ETH_TYPE 0x86dd diff --git a/qdf/inc/qdf_net_types.h b/qdf/inc/qdf_net_types.h index 7acde8aa2197..bbce5f036f9a 100644 --- a/qdf/inc/qdf_net_types.h +++ b/qdf/inc/qdf_net_types.h @@ -51,7 +51,10 @@ typedef __in6_addr_t in6_addr_t; #define QDF_NET_ETH_LEN QDF_NET_MAC_ADDR_MAX_LEN #define QDF_NET_MAX_MCAST_ADDR 64 #define QDF_NET_IPV4_LEN 4 - +#define QDF_TID_VI 5 +#define QDF_TID_VO 6 +#define QDF_TID_BE 0 +#define QDF_TID_BK 1 /* Extended Traffic ID passed to target if the TID is unknown */ #define QDF_NBUF_TX_EXT_TID_INVALID 0x1f diff --git a/qdf/inc/qdf_types.h b/qdf/inc/qdf_types.h index ab1fc4b412b6..ffbe03f8f9b4 100644 --- a/qdf/inc/qdf_types.h +++ b/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; diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index 0f492f0d6797..bf66e6235802 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/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, }; diff --git a/target_if/init_deinit/inc/service_ready_param.h b/target_if/init_deinit/inc/service_ready_param.h index 4687cd5c4fee..2f4f032e9980 100644 --- a/target_if/init_deinit/inc/service_ready_param.h +++ b/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; diff --git a/target_if/init_deinit/src/init_event_handler.c b/target_if/init_deinit/src/init_event_handler.c index 024413c824d0..3d2786eacd80 100644 --- a/target_if/init_deinit/src/init_event_handler.c +++ b/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; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h index 6ca96efa8e80..58271b1b795a 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h +++ b/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 */ diff --git a/umac/regulatory/core/src/reg_priv.h b/umac/regulatory/core/src/reg_priv.h index 89f6dbb2f9f4..5966fcce30b0 100644 --- a/umac/regulatory/core/src/reg_priv.h +++ b/umac/regulatory/core/src/reg_priv.h @@ -88,6 +88,7 @@ struct wlan_regulatory_psoc_priv_obj { reg_cap[PSOC_MAX_PHY_REG_CAP]; bool force_ssc_disable_indoor_channel; bool enable_srd_chan_in_master_mode; + bool enable_11d_in_world_mode; qdf_spinlock_t cbk_list_lock; }; diff --git a/umac/regulatory/core/src/reg_services.c b/umac/regulatory/core/src/reg_services.c index 1afa81ea1d24..26b3b9dcec32 100644 --- a/umac/regulatory/core/src/reg_services.c +++ b/umac/regulatory/core/src/reg_services.c @@ -2962,6 +2962,7 @@ static void reg_run_11d_state_machine(struct wlan_objmgr_psoc *psoc) { bool temp_11d_support; struct wlan_regulatory_psoc_priv_obj *psoc_priv_obj; + bool world_mode; psoc_priv_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_REGULATORY); @@ -2970,10 +2971,14 @@ static void reg_run_11d_state_machine(struct wlan_objmgr_psoc *psoc) return; } + world_mode = reg_is_world_alpha2(psoc_priv_obj->cur_country); + temp_11d_support = psoc_priv_obj->enable_11d_supp; - if (((psoc_priv_obj->user_ctry_set) && - (psoc_priv_obj->user_ctry_priority)) || - (psoc_priv_obj->master_vdev_cnt)) + if ((psoc_priv_obj->enable_11d_in_world_mode) && (world_mode)) + psoc_priv_obj->enable_11d_supp = true; + else if (((psoc_priv_obj->user_ctry_set) && + (psoc_priv_obj->user_ctry_priority)) || + (psoc_priv_obj->master_vdev_cnt)) psoc_priv_obj->enable_11d_supp = false; else psoc_priv_obj->enable_11d_supp = @@ -3142,15 +3147,19 @@ QDF_STATUS reg_process_master_chan_list(struct cur_regulatory_info soc_reg->new_11d_ctry_pending = false; soc_reg->cc_src = SOURCE_11D; soc_reg->user_ctry_set = false; + reg_run_11d_state_machine(psoc); } else if (soc_reg->world_country_pending == true) { soc_reg->world_country_pending = false; soc_reg->cc_src = SOURCE_CORE; soc_reg->user_ctry_set = false; + reg_run_11d_state_machine(psoc); } else { soc_reg->cc_src = SOURCE_DRIVER; - if (reg_is_world_alpha2(regulat_info->alpha2)) + if (reg_is_world_alpha2(regulat_info->alpha2)) { soc_reg->cc_src = SOURCE_CORE; + reg_run_11d_state_machine(psoc); + } qdf_mem_copy(soc_reg->mas_chan_params[phy_id].default_country, regulat_info->alpha2, @@ -3216,6 +3225,7 @@ QDF_STATUS wlan_regulatory_psoc_obj_created_notification( soc_reg_obj->vdev_cnt_11d = 0; soc_reg_obj->restart_beaconing = CH_AVOID_RULE_RESTART; soc_reg_obj->enable_srd_chan_in_master_mode = false; + soc_reg_obj->enable_11d_in_world_mode = true; for (i = 0; i < MAX_STA_VDEV_CNT; i++) soc_reg_obj->vdev_ids_11d[i] = INVALID_VDEV_ID; @@ -3954,6 +3964,8 @@ QDF_STATUS reg_set_config_vars(struct wlan_objmgr_psoc *psoc, psoc_priv_obj->restart_beaconing = config_vars.restart_beaconing; psoc_priv_obj->enable_srd_chan_in_master_mode = config_vars.enable_srd_chan_in_master_mode; + psoc_priv_obj->enable_11d_in_world_mode = + config_vars.enable_11d_in_world_mode; status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_REGULATORY_SB_ID); if (QDF_IS_STATUS_ERROR(status)) { diff --git a/umac/regulatory/dispatcher/inc/reg_services_public_struct.h b/umac/regulatory/dispatcher/inc/reg_services_public_struct.h index 69d55350cf31..86f653929847 100644 --- a/umac/regulatory/dispatcher/inc/reg_services_public_struct.h +++ b/umac/regulatory/dispatcher/inc/reg_services_public_struct.h @@ -857,6 +857,7 @@ enum restart_beaconing_on_ch_avoid_rule { * @restart_beaconing: control the beaconing entity to move * away from active LTE channels * @enable_srd_chan_in_master_mode: SRD channel support in master mode + * @enable_11d_in_world_mode: enable 11d in world mode */ struct reg_config_vars { uint32_t enable_11d_support; @@ -868,6 +869,7 @@ struct reg_config_vars { uint32_t force_ssc_disable_indoor_channel; enum restart_beaconing_on_ch_avoid_rule restart_beaconing; bool enable_srd_chan_in_master_mode; + bool enable_11d_in_world_mode; }; /** diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 4bd8a37aafef..432af09fc420 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/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_ */ diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 8472ee023056..3295568eedbb 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/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(¶m->ppet, &ev->ppet, sizeof(param->ppet)); hw_caps = param_buf->soc_hw_mode_caps;