qcacmn: Update missing HE MAC/PHY WMI capabilities

Add HE Mac, PHY , MCS , OP & PPET in peer_assoc_params
structure. Add HE PHY & PPET in wmi_host_mac_phy_caps
structure. Populate HE params while sending WMI Peer
assoc commands.Parse HE Phy & PPET while parsing Mac
Phy TLV in Service ready extension event.Add required
changes in psoc_service_ready header files.

Change-Id: Ia2fc7f54634a7a0c98996e361e38b11b3b74a7a0
CRs-Fixed: 2009118
This commit is contained in:
Kris Muthusamy
2017-02-20 02:35:47 -08:00
committed by qcabuildsw
parent 3abe2eef8a
commit 199b72d9bb
3 changed files with 82 additions and 30 deletions

View File

@@ -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

View File

@@ -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;
};
/**

View File

@@ -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, &param->peer_he_cap_phyinfo,
sizeof(param->peer_he_cap_phyinfo));
qdf_mem_copy(&cmd->peer_ppet, &param->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(&param->he_cap_phy_info_2G,
&mac_phy_caps->he_cap_phy_info_2G,
sizeof(param->he_cap_phy_info_2G));
qdf_mem_copy(&param->he_cap_phy_info_5G,
&mac_phy_caps->he_cap_phy_info_5G,
sizeof(param->he_cap_phy_info_5G));
qdf_mem_copy(&param->he_ppet2G, &mac_phy_caps->he_ppet2G,
sizeof(param->he_ppet2G));
qdf_mem_copy(&param->he_ppet5G, &mac_phy_caps->he_ppet5G,
sizeof(param->he_ppet5G));
return QDF_STATUS_SUCCESS;
}