diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h index 6cd14aa655..af7e9c036a 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h @@ -30,6 +30,7 @@ */ #define OBJMGR_SERVICE_BM_SIZE ((128 + sizeof(uint32_t) - 1) / sizeof(uint32_t)) #define OBJMGR_HOST_MAX_NUM_SS (8) +#define OBJMGR_HOST_MAX_PHY_SIZE (3) #define OBJMGR_MAX_HW_MODE (2) #define OBJMGR_MAX_MAC_PHY_CAP (5) #define OBJMGR_MAX_PHY_REG_CAP (3) @@ -164,6 +165,25 @@ struct wlan_psoc_host_hal_reg_capabilities_ext { uint32_t high_5ghz_chan; }; +/** + * struct wlan_objmgr_host_ppe_threshold - PPE threshold + * @numss_m1: NSS - 1 + * @ru_count: Max RU count + * @ppet16_ppet8_ru3_ru0: ppet8 and ppet16 for max num ss + * + * wlan_objmgr_host_ppe_threshold is derived from wmi_host_ppe_threshold + * because of WIN direct attach limitation which blocks WMI data structures and + * WMI APIs direct usage in common code. So whenever wmi_host_ppe_threshold + * changes wlan_objmgr_host_ppe_threshold also needs to be updated + * accordingly. + */ +struct wlan_objmgr_host_ppe_threshold { + uint32_t numss_m1; + uint32_t ru_count; + uint32_t ppet16_ppet8_ru3_ru0[OBJMGR_HOST_MAX_NUM_SS]; +}; + + /** * struct wlan_psoc_host_mac_phy_caps - Phy caps recvd in EXT service * @hw_mode_id: identify a particular set of HW characteristics, @@ -208,6 +228,10 @@ struct wlan_psoc_host_hal_reg_capabilities_ext { * @he_supp_mcs_5G: HE Supported MCS Set field Rx/Tx same * @tx_chain_mask_5G: Valid Transmit chain mask * @rx_chain_mask_5G: Valid Receive chain mask + * @he_cap_phy_info_2G: 2G HE capability phy field + * @he_cap_phy_info_5G: 5G HE capability phy field + * @he_ppet2G: 2G HE PPET info + * @he_ppet5G: 5G HE PPET info * * wlan_psoc_host_mac_phy_caps is derived from wmi_host_mac_phy_caps * because of WIN direct attach limitation which blocks WMI data structures and @@ -243,6 +267,10 @@ struct wlan_psoc_host_mac_phy_caps { uint32_t he_supp_mcs_5G; uint32_t tx_chain_mask_5G; uint32_t rx_chain_mask_5G; + uint32_t he_cap_phy_info_2G[OBJMGR_HOST_MAX_PHY_SIZE]; + uint32_t he_cap_phy_info_5G[OBJMGR_HOST_MAX_PHY_SIZE]; + struct wlan_objmgr_host_ppe_threshold he_ppet2G; + struct wlan_objmgr_host_ppe_threshold he_ppet5G; }; /** @@ -258,23 +286,7 @@ struct wlan_psoc_host_hw_mode_caps { uint32_t hw_mode_config_type; }; -/** - * struct wlan_objmgr_host_ppe_threshold - PPE threshold - * @numss_m1: NSS - 1 - * @ru_count: Max RU count - * @ppet16_ppet8_ru3_ru0: ppet8 and ppet16 for max num ss - * - * wlan_objmgr_host_ppe_threshold is derived from wmi_host_ppe_threshold - * because of WIN direct attach limitation which blocks WMI data structures and - * WMI APIs direct usage in common code. So whenever wmi_host_ppe_threshold - * changes wlan_objmgr_host_ppe_threshold also needs to be updated - * accordingly. - */ -struct wlan_objmgr_host_ppe_threshold { - uint32_t numss_m1; - uint32_t ru_count; - uint32_t ppet16_ppet8_ru3_ru0[OBJMGR_HOST_MAX_NUM_SS]; -}; + /** * struct wlan_psoc_host_service_ext_param - EXT service base params in event diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 651124d00a..9d10763b5e 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -940,6 +940,23 @@ typedef struct { uint32_t rates[(WMI_MAX_SUPPORTED_RATES / 4) + 1]; } target_rate_set; + +#define WMI_HOST_MAX_NUM_SS 8 +#define WMI_MAX_HECAP_PHY_SIZE 3 + +/** + * struct wmi_host_ppe_threshold -PPE threshold + * @numss_m1: NSS - 1 + * @ru_count: Max RU count + * @ppet16_ppet8_ru3_ru0: ppet8 and ppet16 for max num ss + */ +struct wmi_host_ppe_threshold { + uint32_t numss_m1; + uint32_t ru_count; + uint32_t ppet16_ppet8_ru3_ru0[WMI_HOST_MAX_NUM_SS]; +}; + + /** * struct wmi_host_mac_addr - host mac addr 2 word representation of MAC addr * @mac_addr31to0: upper 4 bytes of MAC address @@ -996,6 +1013,11 @@ typedef struct { * @safe_mode_enabled: Safe enabled for this peer * @amsdu_disable: AMSDU disble * @peer_mac: Peer mac address + * @peer_he_cap_macinfo: Peer HE Cap MAC info + * @peer_he_ops: Peer HE operation info + * @peer_he_cap_phyinfo: Peer HE Cap PHY info + * @peer_he_mcs: Peer HE MCS MAP + * @peer_ppet: Peer HE PPET info */ struct peer_assoc_params { wmi_host_mac_addr peer_macaddr; @@ -1046,6 +1068,11 @@ struct peer_assoc_params { /* Use common structure */ uint8_t peer_mac[IEEE80211_ADDR_LEN]; #endif + uint32_t peer_he_cap_macinfo; + uint32_t peer_he_ops; + uint32_t peer_he_cap_phyinfo[WMI_MAX_HECAP_PHY_SIZE]; + uint32_t peer_he_mcs; + struct wmi_host_ppe_threshold peer_ppet; }; /** @@ -7064,19 +7091,6 @@ struct encrypt_decrypt_req_params { uint8_t *data; }; -/** - * struct wmi_host_ppe_threshold -PPE threshold - * @numss_m1: NSS - 1 - * @ru_count: Max RU count - * @ppet16_ppet8_ru3_ru0: ppet8 and ppet16 for max num ss - */ -#define WMI_HOST_MAX_NUM_SS 8 -struct wmi_host_ppe_threshold { - uint32_t numss_m1; - uint32_t ru_count; - uint32_t ppet16_ppet8_ru3_ru0[WMI_HOST_MAX_NUM_SS]; -}; - /* * HW mode config type replicated from FW header * @WMI_HOST_HW_MODE_SINGLE: Only one PHY is active. @@ -7186,6 +7200,10 @@ struct wmi_host_hw_mode_caps { * @he_supp_mcs_5G: HE Supported MCS Set field Rx/Tx same * @tx_chain_mask_5G: Valid Transmit chain mask * @rx_chain_mask_5G: Valid Receive chain mask + * @he_cap_phy_info_2G: 2G HE capability phy field + * @he_cap_phy_info_5G: 5G HE capability phy field + * @he_ppet2G: 2G HE PPET info + * @he_ppet5G: 5G HE PPET info */ struct wmi_host_mac_phy_caps { uint32_t hw_mode_id; @@ -7215,6 +7233,10 @@ struct wmi_host_mac_phy_caps { uint32_t he_supp_mcs_5G; uint32_t tx_chain_mask_5G; uint32_t rx_chain_mask_5G; + uint32_t he_cap_phy_info_2G[WMI_MAX_HECAP_PHY_SIZE]; + uint32_t he_cap_phy_info_5G[WMI_MAX_HECAP_PHY_SIZE]; + struct wmi_host_ppe_threshold he_ppet2G; + struct wmi_host_ppe_threshold he_ppet5G; }; /** diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 284fed091d..f9ab0be5c3 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -1802,6 +1802,14 @@ static QDF_STATUS send_peer_assoc_cmd_tlv(wmi_unified_t wmi_handle, mcs->tx_max_rate = param->tx_max_rate; mcs->tx_mcs_set = param->tx_mcs_set; } + /* Update 11ax capabilities */ + cmd->peer_he_cap_info = param->peer_he_cap_macinfo; + cmd->peer_he_ops = param->peer_he_ops; + cmd->peer_he_mcs = param->peer_he_mcs; + qdf_mem_copy(&cmd->peer_he_cap_phy, ¶m->peer_he_cap_phyinfo, + sizeof(param->peer_he_cap_phyinfo)); + qdf_mem_copy(&cmd->peer_ppet, ¶m->peer_ppet, + sizeof(param->peer_ppet)); WMI_LOGD("%s: vdev_id %d associd %d peer_flags %x rate_caps %x " "peer_caps %x listen_intval %d ht_caps %x max_mpdu %d " @@ -13519,6 +13527,16 @@ static QDF_STATUS extract_mac_phy_cap_service_ready_ext_tlv( param->he_supp_mcs_5G = mac_phy_caps->he_supp_mcs_5G; param->tx_chain_mask_5G = mac_phy_caps->tx_chain_mask_5G; param->rx_chain_mask_5G = mac_phy_caps->rx_chain_mask_5G; + qdf_mem_copy(¶m->he_cap_phy_info_2G, + &mac_phy_caps->he_cap_phy_info_2G, + sizeof(param->he_cap_phy_info_2G)); + qdf_mem_copy(¶m->he_cap_phy_info_5G, + &mac_phy_caps->he_cap_phy_info_5G, + sizeof(param->he_cap_phy_info_5G)); + qdf_mem_copy(¶m->he_ppet2G, &mac_phy_caps->he_ppet2G, + sizeof(param->he_ppet2G)); + qdf_mem_copy(¶m->he_ppet5G, &mac_phy_caps->he_ppet5G, + sizeof(param->he_ppet5G)); return QDF_STATUS_SUCCESS; }