mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
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: 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
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user