Commit 9211df5c authored by Aloka Dixit's avatar Aloka Dixit Committed by Kalle Valo

wifi: ath12k: parse WMI service ready ext2 event

Parse WMI service ready ext2 event.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Signed-off-by: default avatarAloka Dixit <quic_alokad@quicinc.com>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230725224034.14045-11-quic_alokad@quicinc.com
parent 22e1d116
...@@ -62,7 +62,23 @@ struct ath12k_wmi_svc_rdy_ext_parse { ...@@ -62,7 +62,23 @@ struct ath12k_wmi_svc_rdy_ext_parse {
bool dma_ring_cap_done; 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_parse {
struct ath12k_wmi_svc_rdy_ext2_arg arg;
struct ath12k_wmi_dma_ring_caps_parse dma_caps_parse; struct ath12k_wmi_dma_ring_caps_parse dma_caps_parse;
bool dma_ring_cap_done; bool dma_ring_cap_done;
bool spectral_bin_scaling_done; bool spectral_bin_scaling_done;
...@@ -4102,6 +4118,26 @@ static int ath12k_service_ready_ext_event(struct ath12k_base *ab, ...@@ -4102,6 +4118,26 @@ static int ath12k_service_ready_ext_event(struct ath12k_base *ab,
return ret; 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, static void ath12k_wmi_eht_caps_parse(struct ath12k_pdev *pdev, u32 band,
const __le32 cap_mac_info[], const __le32 cap_mac_info[],
const __le32 cap_phy_info[], const __le32 cap_phy_info[],
...@@ -4225,10 +4261,22 @@ static int ath12k_wmi_svc_rdy_ext2_parse(struct ath12k_base *ab, ...@@ -4225,10 +4261,22 @@ static int ath12k_wmi_svc_rdy_ext2_parse(struct ath12k_base *ab,
u16 tag, u16 len, u16 tag, u16 len,
const void *ptr, void *data) 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; struct ath12k_wmi_svc_rdy_ext2_parse *parse = data;
int ret; int ret;
switch (tag) { 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: case WMI_TAG_ARRAY_STRUCT:
if (!parse->dma_ring_cap_done) { if (!parse->dma_ring_cap_done) {
ret = ath12k_wmi_dma_ring_caps(ab, len, ptr, ret = ath12k_wmi_dma_ring_caps(ab, len, ptr,
......
...@@ -1925,6 +1925,7 @@ enum wmi_tlv_tag { ...@@ -1925,6 +1925,7 @@ enum wmi_tlv_tag {
/* TODO add all the missing cmds */ /* TODO add all the missing cmds */
WMI_TAG_PDEV_PEER_PKTLOG_FILTER_CMD = 0x301, WMI_TAG_PDEV_PEER_PKTLOG_FILTER_CMD = 0x301,
WMI_TAG_PDEV_PEER_PKTLOG_FILTER_INFO, WMI_TAG_PDEV_PEER_PKTLOG_FILTER_INFO,
WMI_TAG_SERVICE_READY_EXT2_EVENT = 0x334,
WMI_TAG_FILS_DISCOVERY_TMPL_CMD = 0x344, WMI_TAG_FILS_DISCOVERY_TMPL_CMD = 0x344,
WMI_TAG_MAC_PHY_CAPABILITIES_EXT = 0x36F, WMI_TAG_MAC_PHY_CAPABILITIES_EXT = 0x36F,
WMI_TAG_REGULATORY_RULE_EXT_STRUCT = 0x3A9, WMI_TAG_REGULATORY_RULE_EXT_STRUCT = 0x3A9,
...@@ -2612,6 +2613,21 @@ struct ath12k_wmi_soc_hal_reg_caps_params { ...@@ -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_10_11 GENMASK(11, 8)
#define WMI_EHT_MCS_NSS_12_13 GENMASK(15, 12) #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 { struct ath12k_wmi_caps_ext_params {
__le32 hw_mode_id; __le32 hw_mode_id;
union { union {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment