wifi: ath12k: parse WMI service ready ext2 event
authorAloka Dixit <quic_alokad@quicinc.com>
Wed, 2 Aug 2023 17:04:06 +0000 (20:04 +0300)
committerKalle Valo <quic_kvalo@quicinc.com>
Thu, 3 Aug 2023 09:12:00 +0000 (12:12 +0300)
Parse WMI service ready ext2 event.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230725224034.14045-11-quic_alokad@quicinc.com
drivers/net/wireless/ath/ath12k/wmi.c
drivers/net/wireless/ath/ath12k/wmi.h

index 24f6c1d..35f65b7 100644 (file)
@@ -62,7 +62,23 @@ struct ath12k_wmi_svc_rdy_ext_parse {
        bool dma_ring_cap_done;
 };
 
+struct ath12k_wmi_svc_rdy_ext2_arg {
+       u32 reg_db_version;
+       u32 hw_min_max_tx_power_2ghz;
+       u32 hw_min_max_tx_power_5ghz;
+       u32 chwidth_num_peer_caps;
+       u32 preamble_puncture_bw;
+       u32 max_user_per_ppdu_ofdma;
+       u32 max_user_per_ppdu_mumimo;
+       u32 target_cap_flags;
+       u32 eht_cap_mac_info[WMI_MAX_EHTCAP_MAC_SIZE];
+       u32 max_num_linkview_peers;
+       u32 max_num_msduq_supported_per_tid;
+       u32 default_num_msduq_supported_per_tid;
+};
+
 struct ath12k_wmi_svc_rdy_ext2_parse {
+       struct ath12k_wmi_svc_rdy_ext2_arg arg;
        struct ath12k_wmi_dma_ring_caps_parse dma_caps_parse;
        bool dma_ring_cap_done;
        bool spectral_bin_scaling_done;
@@ -4102,6 +4118,26 @@ err:
        return ret;
 }
 
+static int ath12k_pull_svc_ready_ext2(struct ath12k_wmi_pdev *wmi_handle,
+                                     const void *ptr,
+                                     struct ath12k_wmi_svc_rdy_ext2_arg *arg)
+{
+       const struct wmi_service_ready_ext2_event *ev = ptr;
+
+       if (!ev)
+               return -EINVAL;
+
+       arg->reg_db_version = le32_to_cpu(ev->reg_db_version);
+       arg->hw_min_max_tx_power_2ghz = le32_to_cpu(ev->hw_min_max_tx_power_2ghz);
+       arg->hw_min_max_tx_power_5ghz = le32_to_cpu(ev->hw_min_max_tx_power_5ghz);
+       arg->chwidth_num_peer_caps = le32_to_cpu(ev->chwidth_num_peer_caps);
+       arg->preamble_puncture_bw = le32_to_cpu(ev->preamble_puncture_bw);
+       arg->max_user_per_ppdu_ofdma = le32_to_cpu(ev->max_user_per_ppdu_ofdma);
+       arg->max_user_per_ppdu_mumimo = le32_to_cpu(ev->max_user_per_ppdu_mumimo);
+       arg->target_cap_flags = le32_to_cpu(ev->target_cap_flags);
+       return 0;
+}
+
 static void ath12k_wmi_eht_caps_parse(struct ath12k_pdev *pdev, u32 band,
                                      const __le32 cap_mac_info[],
                                      const __le32 cap_phy_info[],
@@ -4225,10 +4261,22 @@ static int ath12k_wmi_svc_rdy_ext2_parse(struct ath12k_base *ab,
                                         u16 tag, u16 len,
                                         const void *ptr, void *data)
 {
+       struct ath12k_wmi_pdev *wmi_handle = &ab->wmi_ab.wmi[0];
        struct ath12k_wmi_svc_rdy_ext2_parse *parse = data;
        int ret;
 
        switch (tag) {
+       case WMI_TAG_SERVICE_READY_EXT2_EVENT:
+               ret = ath12k_pull_svc_ready_ext2(wmi_handle, ptr,
+                                                &parse->arg);
+               if (ret) {
+                       ath12k_warn(ab,
+                                   "failed to extract wmi service ready ext2 parameters: %d\n",
+                                   ret);
+                       return ret;
+               }
+               break;
+
        case WMI_TAG_ARRAY_STRUCT:
                if (!parse->dma_ring_cap_done) {
                        ret = ath12k_wmi_dma_ring_caps(ab, len, ptr,
index 93a7042..fdb7912 100644 (file)
@@ -1925,6 +1925,7 @@ enum wmi_tlv_tag {
        /* TODO add all the missing cmds */
        WMI_TAG_PDEV_PEER_PKTLOG_FILTER_CMD = 0x301,
        WMI_TAG_PDEV_PEER_PKTLOG_FILTER_INFO,
+       WMI_TAG_SERVICE_READY_EXT2_EVENT = 0x334,
        WMI_TAG_FILS_DISCOVERY_TMPL_CMD = 0x344,
        WMI_TAG_MAC_PHY_CAPABILITIES_EXT = 0x36F,
        WMI_TAG_REGULATORY_RULE_EXT_STRUCT = 0x3A9,
@@ -2612,6 +2613,21 @@ struct ath12k_wmi_soc_hal_reg_caps_params {
 #define WMI_EHT_MCS_NSS_10_11  GENMASK(11, 8)
 #define WMI_EHT_MCS_NSS_12_13  GENMASK(15, 12)
 
+struct wmi_service_ready_ext2_event {
+       __le32 reg_db_version;
+       __le32 hw_min_max_tx_power_2ghz;
+       __le32 hw_min_max_tx_power_5ghz;
+       __le32 chwidth_num_peer_caps;
+       __le32 preamble_puncture_bw;
+       __le32 max_user_per_ppdu_ofdma;
+       __le32 max_user_per_ppdu_mumimo;
+       __le32 target_cap_flags;
+       __le32 eht_cap_mac_info[WMI_MAX_EHTCAP_MAC_SIZE];
+       __le32 max_num_linkview_peers;
+       __le32 max_num_msduq_supported_per_tid;
+       __le32 default_num_msduq_supported_per_tid;
+} __packed;
+
 struct ath12k_wmi_caps_ext_params {
        __le32 hw_mode_id;
        union {