Browse Source

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
Kris Muthusamy 8 years ago
parent
commit
199b72d9bb

+ 29 - 17
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

+ 35 - 13
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;
 };
 
 /**

+ 18 - 0
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, &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;
 }