Browse Source

qcacmn: Add extract routines for WMI ext service ready event

Add helper routines to extract TLV params in WMI EXT service ready
event. These helper routines abstracts all TLV related information
providing APIs to extract ext serivce ready params.

Change-Id: Ic989331856ed2f9376965bdec4b658328f9e470b
CRs-Fixed: 1079237
Kiran Venkatappa 9 years ago
parent
commit
9c71b366e9
3 changed files with 185 additions and 0 deletions
  1. 15 0
      wmi_unified_api.h
  2. 151 0
      wmi_unified_param.h
  3. 19 0
      wmi_unified_priv.h

+ 15 - 0
wmi_unified_api.h

@@ -1270,4 +1270,19 @@ QDF_STATUS wmi_unified_peer_rx_reorder_queue_setup_send(void *wmi_hdl,
 					struct rx_reorder_queue_setup_params *param);
 QDF_STATUS wmi_unified_peer_rx_reorder_queue_remove_send(void *wmi_hdl,
 					struct rx_reorder_queue_remove_params *param);
+
+QDF_STATUS wmi_extract_service_ready_ext(void *wmi_hdl, uint8_t *evt_buf,
+		struct wmi_host_service_ext_param *param);
+QDF_STATUS wmi_extract_hw_mode_cap_service_ready_ext(
+			void *wmi_hdl,
+			uint8_t *evt_buf, uint8_t hw_mode_idx,
+			struct wmi_host_hw_mode_caps *param);
+QDF_STATUS wmi_extract_mac_phy_cap_service_ready_ext(
+			void *wmi_hdl,
+			uint8_t *evt_buf, uint8_t hw_mode_idx,
+			struct wmi_host_mac_phy_caps *param);
+QDF_STATUS wmi_extract_reg_cap_service_ready_ext(
+			void *wmi_hdl,
+			uint8_t *evt_buf, uint8_t phy_idx,
+			struct WMI_HOST_HAL_REG_CAPABILITIES_EXT *param);
 #endif /* _WMI_UNIFIED_API_H_ */

+ 151 - 0
wmi_unified_param.h

@@ -6685,5 +6685,156 @@ 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];
+};
+
+/**
+ * struct wmi_host_service_ext_param - EXT service base params in event
+ * @default_conc_scan_config_bits: Default concurrenct scan config
+ * @default_fw_config_bits: Default HW config bits
+ * @wmi_host_ppe_threshold ppet: Host PPE threshold struct
+ * @he_cap_info: HE capabality info
+ * @mpdu_density: units are microseconds
+ * @max_bssid_rx_filters: Maximum no of BSSID based RX filters host can program
+ *                        Value 0 means FW hasn't given any limit to host.
+ * @num_hw_modes: Number of HW modes in event
+ * @num_phy: Number of Phy mode.
+ */
+struct wmi_host_service_ext_param {
+	uint32_t default_conc_scan_config_bits;
+	uint32_t default_fw_config_bits;
+	struct wmi_host_ppe_threshold ppet;
+	uint32_t he_cap_info;
+	uint32_t mpdu_density;
+	uint32_t max_bssid_rx_filters;
+	uint32_t num_hw_modes;
+	uint32_t num_phy;
+};
+
+/**
+ * struct wmi_host_hw_mode_caps - HW mode capabilities in EXT event
+ * @hw_mode_id: identify a particular set of HW characteristics,
+ *              as specified by the subsequent fields
+ * @phy_id_map: BIT0 represents phy_id 0, BIT1 represent phy_id 1 and so on
+ */
+struct wmi_host_hw_mode_caps {
+	uint32_t hw_mode_id;
+	uint32_t phy_id_map;
+};
+
+/**
+ * struct wmi_host_mac_phy_caps - Phy caps recvd in EXT service
+ *  @hw_mode_id: identify a particular set of HW characteristics,
+ *        as specified by the subsequent fields. WMI_MAC_PHY_CAPABILITIES
+ *        element must be mapped to its parent WMI_HW_MODE_CAPABILITIES
+ *        element using hw_mode_id. No particular ordering of
+ *        WMI_MAC_PHY_CAPABILITIES elements should be
+ *        assumed, though in practice the elements may always be ordered
+ *        by hw_mode_id.
+ * @pdev_id: pdev_id starts with 1. pdev_id 1 => phy_id 0, pdev_id 2 => phy_id 1
+ * @phy_id: Starts with 0
+ * @union of supported modulations
+ * @supported_bands: supported bands, enum WLAN_BAND_CAPABILITY
+ * @ampdu_density: ampdu density 0 for no restriction, 1 for 1/4 us,
+ *        2 for 1/2 us, 3 for 1 us,4 for 2 us, 5 for 4 us,
+ *        6 for 8 us,7 for 16 us
+ * @max_bw_supported_2G: max bw supported 2G, enum wmi_channel_width
+ * @ht_cap_info_2G: WMI HT Capability, WMI_HT_CAP defines
+ * @vht_cap_info_2G: VHT capability info field of 802.11ac, WMI_VHT_CAP defines
+ * @vht_supp_mcs_2G: VHT Supported MCS Set field Rx/Tx same
+ *        The max VHT-MCS for n SS subfield (where n = 1,...,8) is encoded as
+ *        follows
+ *         - 0 indicates support for VHT-MCS 0-7 for n spatial streams
+ *         - 1 indicates support for VHT-MCS 0-8 for n spatial streams
+ *         - 2 indicates support for VHT-MCS 0-9 for n spatial streams
+ *         - 3 indicates that n spatial streams is not supported
+ * @he_cap_info_2G: HE capability info field of 802.11ax, WMI_HE_CAP defines
+ * @he_supp_mcs_2G: HE Supported MCS Set field Rx/Tx same
+ * @tx_chain_mask_2G: Valid Transmit chain mask
+ * @rx_chain_mask_2G: Valid Receive chain mask
+ * @max_bw_supported_5G: max bw supported 5G, enum wmi_channel_width
+ * @ht_cap_info_5G: WMI HT Capability, WMI_HT_CAP defines
+ * @vht_cap_info_5G: VHT capability info field of 802.11ac, WMI_VHT_CAP defines
+ * @vht_supp_mcs_5G: VHT Supported MCS Set field Rx/Tx same
+ *        The max VHT-MCS for n SS subfield (where n = 1,...,8) is encoded as
+ *        follows
+ *        - 0 indicates support for VHT-MCS 0-7 for n spatial streams
+ *        - 1 indicates support for VHT-MCS 0-8 for n spatial streams
+ *        - 2 indicates support for VHT-MCS 0-9 for n spatial streams
+ *        - 3 indicates that n spatial streams is not supported
+ * @he_cap_info_5G: HE capability info field of 802.11ax, WMI_HE_CAP defines
+ * @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
+ */
+struct wmi_host_mac_phy_caps {
+	uint32_t hw_mode_id;
+	uint32_t pdev_id;
+	uint32_t phy_id;
+	union {
+		uint32_t supports_11b:1,
+			 supports_11g:1,
+			 supports_11a:1,
+			 supports_11n:1,
+			 supports_11ac:1,
+			 supports_11ax:1;
+		uint32_t supported_flags;
+	};
+	uint32_t supported_bands;
+	uint32_t ampdu_density;
+	uint32_t max_bw_supported_2G;
+	uint32_t ht_cap_info_2G;
+	uint32_t vht_cap_info_2G;
+	uint32_t vht_supp_mcs_2G;
+	uint32_t he_cap_info_2G;
+	uint32_t he_supp_mcs_2G;
+	uint32_t tx_chain_mask_2G;
+	uint32_t rx_chain_mask_2G;
+	uint32_t max_bw_supported_5G;
+	uint32_t ht_cap_info_5G;
+	uint32_t vht_cap_info_5G;
+	uint32_t vht_supp_mcs_5G;
+	uint32_t he_cap_info_5G;
+	uint32_t he_supp_mcs_5G;
+	uint32_t tx_chain_mask_5G;
+	uint32_t rx_chain_mask_5G;
+};
+
+/**
+ * struct WMI_HOST_HAL_REG_CAPABILITIES_EXT: Below are Reg caps per PHY.
+ *                       Please note PHY ID starts with 0.
+ * @phy_id: phy id starts with 0.
+ * @eeprom_reg_domain: regdomain value specified in EEPROM
+ * @eeprom_reg_domain_ext: regdomain
+ * @regcap1: CAP1 capabilities bit map, see REGDMN_CAP1_ defines
+ * @regcap2: REGDMN EEPROM CAP, see REGDMN_EEPROM_EEREGCAP_ defines
+ * @wireless_modes: REGDMN MODE, see REGDMN_MODE_ enum
+ * @low_2ghz_chan: 2G channel low
+ * @high_2ghz_chan: 2G channel High
+ * @low_5ghz_chan: 5G channel low
+ * @high_5ghz_chan: 5G channel High
+ */
+struct WMI_HOST_HAL_REG_CAPABILITIES_EXT {
+	uint32_t phy_id;
+	uint32_t eeprom_reg_domain;
+	uint32_t eeprom_reg_domain_ext;
+	uint32_t regcap1;
+	uint32_t regcap2;
+	uint32_t wireless_modes;
+	uint32_t low_2ghz_chan;
+	uint32_t high_2ghz_chan;
+	uint32_t low_5ghz_chan;
+	uint32_t high_5ghz_chan;
+};
 #endif /* _WMI_UNIFIED_PARAM_H_ */
 

+ 19 - 0
wmi_unified_priv.h

@@ -1142,6 +1142,25 @@ QDF_STATUS (*send_peer_rx_reorder_queue_setup_cmd)(wmi_unified_t wmi_handle,
 
 QDF_STATUS (*send_peer_rx_reorder_queue_remove_cmd)(wmi_unified_t wmi_handle,
 		struct rx_reorder_queue_remove_params *param);
+
+QDF_STATUS (*extract_service_ready_ext)(wmi_unified_t wmi_handle,
+			uint8_t *evt_buf,
+			struct wmi_host_service_ext_param *param);
+
+QDF_STATUS (*extract_hw_mode_cap_service_ready_ext)(
+			wmi_unified_t wmi_handle,
+			uint8_t *evt_buf, uint8_t hw_mode_idx,
+			struct wmi_host_hw_mode_caps *param);
+
+QDF_STATUS (*extract_mac_phy_cap_service_ready_ext)(
+			wmi_unified_t wmi_handle,
+			uint8_t *evt_buf, uint8_t hw_mode_idx,
+			struct wmi_host_mac_phy_caps *param);
+
+QDF_STATUS (*extract_reg_cap_service_ready_ext)(
+			wmi_unified_t wmi_handle,
+			uint8_t *evt_buf, uint8_t phy_idx,
+			struct WMI_HOST_HAL_REG_CAPABILITIES_EXT *param);
 };
 
 struct target_abi_version {