From c19a2cd7932a819ae7402b1358a5eaa2a9e16dd6 Mon Sep 17 00:00:00 2001 From: Anirban Sirkhell Date: Mon, 3 Aug 2020 13:09:52 +0530 Subject: [PATCH] qcacmn: Get max user capabilities from WMI ready Retrieve the max users per-PPDU supported in Uplink and Downlink direction, from the fixed params of WMI service ready ext2 event. CRs-Fixed: 2747218 Change-Id: Ib9f9bd4313dd1955c607d4fe77b02e34761d1c20 --- target_if/core/inc/target_if.h | 42 +++++++++++++++++++ .../init_deinit/inc/service_ready_param.h | 8 ++++ wmi/src/wmi_unified_tlv.c | 8 ++++ 3 files changed, 58 insertions(+) diff --git a/target_if/core/inc/target_if.h b/target_if/core/inc/target_if.h index 543820f77b0e..e10bce7e034d 100644 --- a/target_if/core/inc/target_if.h +++ b/target_if/core/inc/target_if.h @@ -336,6 +336,20 @@ struct target_pdev_info { void *feature_ptr; }; +/** + * struct target_mu_caps - max number of users per-PPDU for OFDMA/MU-MIMO + * @ofdma_dl: max users for Downlink OFDMA transmissions + * @ofdma_ul: max users for Uplink OFDMA transmissions + * @mumimo_dl: max users for Downlink MU-MIMO transmissions + * @mumimo_ul: max users for Uplink MU-MIMO transmissions + */ +struct target_mu_caps { + uint16_t ofdma_dl; + uint16_t ofdma_ul; + uint16_t mumimo_dl; + uint16_t mumimo_ul; +}; + /** * target_if_init() - target_if Initialization @@ -2451,4 +2465,32 @@ static inline uint32_t target_psoc_get_preamble_puncture_cap( return psoc_info->info.service_ext2_param.preamble_puncture_bw_cap; } + +/** + * target_psoc_get_mu_max_users() - Get max users for MU transmissions + * @psoc_info: pointer to structure target_psoc_info + * @mu_caps: pointer to structure for max OFDMA/MU-MIMO users per-PPDU + * + * API to get the max number of users per-PPDU supported for Uplink/Downlink + * MU transmissions. + * + * Return: void + */ +static inline void target_psoc_get_mu_max_users( + struct target_psoc_info *psoc_info, + struct target_mu_caps *mu_caps) +{ + struct wlan_psoc_host_service_ext2_param *service_ext2_param; + + if (!psoc_info || !mu_caps) + return; + + service_ext2_param = &psoc_info->info.service_ext2_param; + + mu_caps->ofdma_dl = service_ext2_param->max_users_dl_ofdma; + mu_caps->ofdma_ul = service_ext2_param->max_users_ul_ofdma; + mu_caps->mumimo_dl = service_ext2_param->max_users_dl_mumimo; + mu_caps->mumimo_ul = service_ext2_param->max_users_ul_mumimo; +} + #endif diff --git a/target_if/init_deinit/inc/service_ready_param.h b/target_if/init_deinit/inc/service_ready_param.h index a53b8c93d3ac..641f8160427a 100644 --- a/target_if/init_deinit/inc/service_ready_param.h +++ b/target_if/init_deinit/inc/service_ready_param.h @@ -400,6 +400,10 @@ struct wlan_psoc_host_service_ext_param { * @max_ndp_sessions: Max number of ndp session fw supports * @preamble_puncture_bw_cap: Preamble Puncturing Tx support * @num_scan_radio_caps: Number of scan radio capabilities + * @max_users_dl_ofdma: Max number of users per-PPDU for Downlink OFDMA + * @max_users_ul_ofdma: Max number of users per-PPDU for Uplink OFDMA + * @max_users_dl_mumimo: Max number of users per-PPDU for Downlink MU-MIMO + * @max_users_ul_mumimo: Max number of users per-PPDU for Uplink MU-MIMO */ struct wlan_psoc_host_service_ext2_param { uint8_t reg_db_version_major; @@ -411,6 +415,10 @@ struct wlan_psoc_host_service_ext2_param { uint32_t max_ndp_sessions; uint32_t preamble_puncture_bw_cap; uint8_t num_scan_radio_caps; + uint16_t max_users_dl_ofdma; + uint16_t max_users_ul_ofdma; + uint16_t max_users_dl_mumimo; + uint16_t max_users_ul_mumimo; }; #endif /* _SERVICE_READY_PARAM_H_*/ diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index ddf3a6eae735..deabefa24aec 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -10644,6 +10644,14 @@ extract_service_ready_ext2_tlv(wmi_unified_t wmi_handle, uint8_t *event, param->preamble_puncture_bw_cap = ev->preamble_puncture_bw; param->num_scan_radio_caps = param_buf->num_wmi_scan_radio_caps; + param->max_users_dl_ofdma = WMI_MAX_USER_PER_PPDU_DL_OFDMA_GET( + ev->max_user_per_ppdu_ofdma); + param->max_users_ul_ofdma = WMI_MAX_USER_PER_PPDU_UL_OFDMA_GET( + ev->max_user_per_ppdu_ofdma); + param->max_users_dl_mumimo = WMI_MAX_USER_PER_PPDU_DL_MUMIMO_GET( + ev->max_user_per_ppdu_mumimo); + param->max_users_ul_mumimo = WMI_MAX_USER_PER_PPDU_UL_MUMIMO_GET( + ev->max_user_per_ppdu_mumimo); return QDF_STATUS_SUCCESS; }