From 4c8e0268657a71d0fefbf16a9d331e336829c3f9 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Sat, 6 Oct 2018 16:50:27 +0530 Subject: [PATCH] qcacld-3.0: ADD MLME INI items of WMM AC_VI Add the following WMM AC VI ini configs to MLME cfg: 1. CFG_QOS_WMM_INFRA_DIR_AC_VI_NAME 2. CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_NAME 3. CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_NAME 4. CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_NAME 5. CFG_QOS_WMM_INFRA_SBA_AC_VI_NAME 6. CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_NAME 7. CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_NAME Introduce the basic infra APIs related to these configs from mlme Change-Id: I320f49b216659937dc7f708fdbb7849ae415e249 CRs-Fixed: 2327687 --- components/mlme/core/src/wlan_mlme_main.c | 16 ++ .../mlme/dispatcher/inc/cfg_mlme_fe_wmm.h | 185 +++++++++++++++++- .../mlme/dispatcher/inc/wlan_mlme_api.h | 84 ++++++++ .../dispatcher/inc/wlan_mlme_public_struct.h | 23 +++ .../mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 118 +++++++++++ .../mlme/dispatcher/src/wlan_mlme_api.c | 116 +++++++++++ core/hdd/inc/wlan_hdd_cfg.h | 164 ---------------- core/hdd/src/wlan_hdd_cfg.c | 54 ----- core/hdd/src/wlan_hdd_wmm.c | 109 ++++++++--- 9 files changed, 624 insertions(+), 245 deletions(-) diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 4ddc666ad1..e47ed5d664 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1263,6 +1263,22 @@ static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV); wmm_params->ac_vo.uapsd_vo_sus_intv = cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV); + + wmm_params->ac_vi.dir_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VI); + wmm_params->ac_vi.nom_msdu_size_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI); + wmm_params->ac_vi.mean_data_rate_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI); + wmm_params->ac_vi.min_phy_rate_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VI); + wmm_params->ac_vi.sba_ac_vi = + cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VI); + wmm_params->ac_vi.uapsd_vi_srv_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SRV_INTV); + wmm_params->ac_vi.uapsd_vi_sus_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV); + } static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h b/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h index 60dcadda34..9ff49a9f36 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h @@ -179,6 +179,131 @@ 0x2001, \ CFG_VALUE_OR_DEFAULT, \ "surplus bandwidth allowance for VO") +/* + * + * InfraDirAcVi - Set TSPEC direction for VI + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * This ini is used to set TSPEC direction for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_DIR_AC_VI CFG_INI_UINT( \ + "InfraDirAcVi", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "TSPEC direction for VI") + +/* + * + * InfraNomMsduSizeAcVi - Set normal MSDU size for VI + * @Min: 0x0 + * @Max: 0xFFFF + * @Default: 0x85DC + * + * This ini is used to set normal MSDU size for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI CFG_INI_UINT( \ + "InfraNomMsduSizeAcVi", \ + 0x0, \ + 0xFFFF, \ + 0x85DC, \ + CFG_VALUE_OR_DEFAULT, \ + "MSDU size for VI") + +/* + * + * InfraMeanDataRateAcVi - Set mean data rate for VI + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x57E40 + * + * This ini is used to set mean data rate for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI CFG_INI_UINT( \ + "InfraMeanDataRateAcVi", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x57E40, \ + CFG_VALUE_OR_DEFAULT, \ + "data rate for VI") + +/* + * + * iInfraMinPhyRateAcVi - Set min PHY rate for VI + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x5B8D80 + * + * This ini is used to set min PHY rate for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MIN_PHY_RATE_AC_VI CFG_INI_UINT( \ + "InfraMinPhyRateAcVi", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x5B8D80, \ + CFG_VALUE_OR_DEFAULT, \ + "min PHY rate for VI") + +/* + * + * InfraSbaAcVi - Set surplus bandwidth allowance for VI + * @Min: 0x2001 + * @Max: 0xFFFF + * @Default: 0x2001 + * + * This ini is used to set surplus bandwidth allowance for VI + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ + +#define CFG_QOS_WMM_SBA_AC_VI CFG_INI_UINT( \ + "InfraSbaAcVi", \ + 0x2001, \ + 0xFFFF, \ + 0x2001, \ + CFG_VALUE_OR_DEFAULT, \ + "surplus bandwidth allowance for VI") /* * @@ -230,6 +355,57 @@ CFG_VALUE_OR_DEFAULT, \ "Infra uapsd vo sus intv") +/* + * + * InfraUapsdViSrvIntv - Set Uapsd service interval for video + * @Min: 0 + * @Max: 4294967295UL + * @Default: 300 + * + * This ini is used to set Uapsd service interval for video. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ + +#define CFG_QOS_WMM_UAPSD_VI_SRV_INTV CFG_INI_UINT( \ + "InfraUapsdViSrvIntv", \ + 0, \ + 4294967295UL, \ + 300, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vi srv intv") + +/* + * + * InfraUapsdViSuspIntv - Set Uapsd suspension interval for video + * @Min: 0 + * @Max: 4294967295UL + * @Default: 2000 + * + * This ini is used to set Uapsd suspension interval for video + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_VI_SUS_INTV CFG_INI_UINT( \ + "InfraUapsdViSuspIntv", \ + 0, \ + 4294967295UL, \ + 2000, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vi sus intv") + #define CFG_WMM_PARAMS_ALL \ CFG(CFG_QOS_ENABLED) \ CFG(CFG_WME_ENABLED) \ @@ -242,6 +418,13 @@ CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_VO) \ CFG(CFG_QOS_WMM_SBA_AC_VO) \ CFG(CFG_QOS_WMM_UAPSD_VO_SRV_INTV) \ - CFG(CFG_QOS_WMM_UAPSD_VO_SUS_INTV) + CFG(CFG_QOS_WMM_UAPSD_VO_SUS_INTV) \ + CFG(CFG_QOS_WMM_DIR_AC_VI) \ + CFG(CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI) \ + CFG(CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI) \ + CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_VI) \ + CFG(CFG_QOS_WMM_SBA_AC_VI) \ + CFG(CFG_QOS_WMM_UAPSD_VI_SRV_INTV) \ + CFG(CFG_QOS_WMM_UAPSD_VI_SUS_INTV) #endif /* __CFG_MLME_FE_WMM_H */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index 2fde35dc62..dd923010b2 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -638,6 +638,89 @@ QDF_STATUS wlan_mlme_get_fils_enabled_info(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc, bool value); +/** + * wlan_mlme_get_wmm_dir_ac_vi() - Get TSPEC direction + * for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_dir_ac_vi(struct wlan_objmgr_psoc *psoc, + uint8_t *value); + +/** + * wlan_mlme_get_wmm_nom_msdu_size_ac_vi() - Get normal + * MSDU size for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_nom_msdu_size_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value); + +/** + * wlan_mlme_get_wmm_mean_data_rate_ac_vi() - mean data + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_min_phy_rate_ac_vi() - min PHY + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_sba_ac_vi() - surplus bandwidth + * allowance for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_sba_ac_vi(struct wlan_objmgr_psoc *psoc, uint16_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_vi_srv_intv() - Get Uapsd service + * interval for video + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vi_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_vi_sus_intv() - Get Uapsd suspension + * interval for video + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + /** * wlan_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction * for VO @@ -726,6 +809,7 @@ wlan_mlme_get_wmm_uapsd_vo_srv_intv(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_get_wmm_uapsd_vo_sus_intv(struct wlan_objmgr_psoc *psoc, uint32_t *value); + /** * wlan_mlme_cfg_get_vht_max_mpdu_len() - gets vht max mpdu length from cfg item * @psoc: psoc context diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index e943477814..36594e4ac1 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1018,6 +1018,27 @@ struct wlan_mlme_wmm_ac_vo { uint32_t uapsd_vo_sus_intv; }; +/** + * struct wlan_mlme_wmm_ac_vi - Default TSPEC parameters + * for AC_VI + * @dir_ac_vi: TSPEC direction for VI + * @nom_msdu_size_ac_vi: normal MSDU size for VI + * @mean_data_rate_ac_vi: mean data rate for VI + * @min_phy_rate_ac_vi: min PHY rate for VI + * @sba_ac_vi: surplus bandwidth allowance for VI + * @uapsd_vo_srv_intv: Uapsd service interval for VI + * @uapsd_vo_sus_intv: Uapsd suspension interval for VI + */ +struct wlan_mlme_wmm_ac_vi { + uint8_t dir_ac_vi; + uint16_t nom_msdu_size_ac_vi; + uint32_t mean_data_rate_ac_vi; + uint32_t min_phy_rate_ac_vi; + uint16_t sba_ac_vi; + uint32_t uapsd_vi_srv_intv; + uint32_t uapsd_vi_sus_intv; +}; + /** * struct wlan_mlme_wmm_params - WMM CFG Items * @qos_enabled: AP is enabled with 11E @@ -1025,6 +1046,7 @@ struct wlan_mlme_wmm_ac_vo { * @max_sp_length: Maximum SP Length * @wsm_enabled: AP is enabled with WSM * @ac_vo: Default TSPEC parameters for AC_VO + * @ac_vi: Default TSPEC parameters for AC_VI */ struct wlan_mlme_wmm_params { bool qos_enabled; @@ -1033,6 +1055,7 @@ struct wlan_mlme_wmm_params { bool wsm_enabled; uint32_t edca_profile; struct wlan_mlme_wmm_ac_vo ac_vo; + struct wlan_mlme_wmm_ac_vi ac_vi; }; /** diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 11d54d2045..13f27d729a 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -1697,4 +1697,122 @@ ucfg_mlme_set_supported_mcs_set(struct wlan_objmgr_psoc *psoc, uint8_t *buf, QDF_STATUS ucfg_mlme_get_current_mcs_set(struct wlan_objmgr_psoc *psoc, uint8_t *buf, qdf_size_t *len); +/** + * ucfg_mlme_get_wmm_dir_ac_vi() - Get TSPEC direction + * for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_dir_ac_vi(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_wmm_dir_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_nom_msdu_size_ac_vi() - Get normal + * MSDU size for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_nom_msdu_size_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + return wlan_mlme_get_wmm_nom_msdu_size_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_mean_data_rate_ac_vi() - mean data + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_mean_data_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_mean_data_rate_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_min_phy_rate_ac_vi() - min PHY + * rate for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_min_phy_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_min_phy_rate_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_sba_ac_vi() - surplus bandwidth + * allowance for VI + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_sba_ac_vi(struct wlan_objmgr_psoc *psoc, uint16_t *value) +{ + return wlan_mlme_get_wmm_sba_ac_vi(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_vi_srv_intv() - Get Uapsd service + * interval for video + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_uapsd_vi_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_vi_srv_intv(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_vi_sus_intv() - Get Uapsd suspension + * interval for video + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_vi_sus_intv(psoc, value); +} + #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index cb483082c4..aef56c3d8b 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -678,6 +678,122 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_vo_sus_intv(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS wlan_mlme_get_wmm_dir_ac_vi(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.dir_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_nom_msdu_size_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = + mlme_obj->cfg.wmm_params.ac_vi.nom_msdu_size_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.mean_data_rate_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_vi(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.min_phy_rate_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_sba_ac_vi(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.sba_ac_vi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vi_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.uapsd_vi_srv_intv; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vi.uapsd_vi_sus_intv; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_listen_interval(struct wlan_objmgr_psoc *psoc, int value) { diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 0407ca1a9a..c85a63e8d0 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2741,50 +2741,6 @@ enum station_keepalive_method { #define CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX (1) #define CFG_QOS_IMPLICIT_SETUP_ENABLED_DEFAULT (0) -/* - * - * InfraUapsdViSrvIntv - Set Uapsd service interval for video - * @Min: 0 - * @Max: 4294967295UL - * @Default: 300 - * - * This ini is used to set Uapsd service interval for video. - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_NAME "InfraUapsdViSrvIntv" -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MAX (4294967295UL) -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_DEFAULT (300) - -/* - * - * InfraUapsdViSuspIntv - Set Uapsd suspension interval for video - * @Min: 0 - * @Max: 4294967295UL - * @Default: 2000 - * - * This ini is used to set Uapsd suspension interval for video - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_NAME "InfraUapsdViSuspIntv" -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_MAX (4294967295UL) -#define CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_DEFAULT (2000) - /* * * InfraUapsdBeSrvIntv - Set Uapsd service interval for BE @@ -2873,117 +2829,6 @@ enum station_keepalive_method { #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_MAX (4294967295UL) #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_DEFAULT (2000) - /* default TSPEC parameters for AC_VI */ -/* - * - * InfraDirAcVi - Set TSPEC direction for VI - * @Min: 0 - * @Max: 3 - * @Default: 3 - * - * This ini is used to set TSPEC direction for VI - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_DIR_AC_VI_NAME "InfraDirAcVi" -#define CFG_QOS_WMM_INFRA_DIR_AC_VI_MIN (0) -#define CFG_QOS_WMM_INFRA_DIR_AC_VI_MAX (3) -#define CFG_QOS_WMM_INFRA_DIR_AC_VI_DEFAULT (3) /*WLAN_QCT_CUST_WMM_TSDIR_BOTH*/ - -/* - * - * InfraNomMsduSizeAcVi - Set normal MSDU size for VI - * @Min: 0x0 - * @Max: 0xFFFF - * @Default: 0x85DC - * - * This ini is used to set normal MSDU size for VI - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_NAME "InfraNomMsduSizeAcVi" -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_MIN (0x0) -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_MAX (0xFFFF) -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_DEFAULT (0x85DC) - -/* - * - * InfraMeanDataRateAcVi - Set mean data rate for VI - * @Min: 0x0 - * @Max: 0xFFFFFFFF - * @Default: 0x57E40 - * - * This ini is used to set mean data rate for VI - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_NAME "InfraMeanDataRateAcVi" -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_MIN (0x0) -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_MAX (0xFFFFFFFF) -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_DEFAULT (0x57E40) - -/* - * - * iInfraMinPhyRateAcVi - Set min PHY rate for VI - * @Min: 0x0 - * @Max: 0xFFFFFFFF - * @Default: 0x5B8D80 - * - * This ini is used to set min PHY rate for VI - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_NAME "InfraMinPhyRateAcVi" -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_MIN (0x0) -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_MAX (0xFFFFFFFF) -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_DEFAULT (0x5B8D80) - -/* - * - * InfraSbaAcVi - Set surplus bandwidth allowance for VI - * @Min: 0x2001 - * @Max: 0xFFFF - * @Default: 0x2001 - * - * This ini is used to set surplus bandwidth allowance for VI - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ - #define CFG_QOS_WMM_INFRA_SBA_AC_VI_NAME "InfraSbaAcVi" - #define CFG_QOS_WMM_INFRA_SBA_AC_VI_MIN (0x2001) - #define CFG_QOS_WMM_INFRA_SBA_AC_VI_MAX (0xFFFF) - #define CFG_QOS_WMM_INFRA_SBA_AC_VI_DEFAULT (0x2001) - /* default TSPEC parameters for AC_BE*/ /* * @@ -7108,8 +6953,6 @@ struct hdd_config { enum hdd_wmm_user_mode WmmMode; bool b80211eIsEnabled; uint8_t UapsdMask; /* what ACs to setup U-APSD for at assoc */ - uint32_t InfraUapsdViSrvIntv; - uint32_t InfraUapsdViSuspIntv; uint32_t InfraUapsdBeSrvIntv; uint32_t InfraUapsdBeSuspIntv; uint32_t InfraUapsdBkSrvIntv; @@ -7126,13 +6969,6 @@ struct hdd_config { bool isRoamOffloadScanEnabled; bool bImplicitQosEnabled; - /* default TSPEC parameters for AC_VI */ - enum sme_qos_wmm_dir_type InfraDirAcVi; - uint16_t InfraNomMsduSizeAcVi; - uint32_t InfraMeanDataRateAcVi; - uint32_t InfraMinPhyRateAcVi; - uint16_t InfraSbaAcVi; - /* default TSPEC parameters for AC_BE */ enum sme_qos_wmm_dir_type InfraDirAcBe; uint16_t InfraNomMsduSizeAcBe; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index b22a5e46c8..c6ffd5c048 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -770,22 +770,6 @@ struct reg_table_entry g_registry_table[] = { CFG_QOS_WMM_UAPSD_MASK_MIN, CFG_QOS_WMM_UAPSD_MASK_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_NAME, - WLAN_PARAM_Integer, - struct hdd_config, InfraUapsdViSrvIntv, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MIN, - CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_NAME, - WLAN_PARAM_Integer, - struct hdd_config, InfraUapsdViSuspIntv, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_MIN, - CFG_QOS_WMM_INFRA_UAPSD_VI_SUS_INTV_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_NAME, WLAN_PARAM_Integer, struct hdd_config, InfraUapsdBeSrvIntv, @@ -899,44 +883,6 @@ struct reg_table_entry g_registry_table[] = { CFG_ROAM_SCAN_OFFLOAD_ENABLED_MAX, cb_notify_update_roam_scan_offload_enabled, 0), - REG_VARIABLE(CFG_QOS_WMM_INFRA_DIR_AC_VI_NAME, WLAN_PARAM_Integer, - struct hdd_config, InfraDirAcVi, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_DIR_AC_VI_DEFAULT, - CFG_QOS_WMM_INFRA_DIR_AC_VI_MIN, - CFG_QOS_WMM_INFRA_DIR_AC_VI_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraNomMsduSizeAcVi, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_DEFAULT, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_MIN, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VI_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraMeanDataRateAcVi, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_DEFAULT, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_MIN, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VI_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraMinPhyRateAcVi, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_DEFAULT, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_MIN, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VI_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_SBA_AC_VI_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, InfraSbaAcVi, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_SBA_AC_VI_DEFAULT, - CFG_QOS_WMM_INFRA_SBA_AC_VI_MIN, - CFG_QOS_WMM_INFRA_SBA_AC_VI_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_DIR_AC_BE_NAME, WLAN_PARAM_Integer, struct hdd_config, InfraDirAcBe, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, diff --git a/core/hdd/src/wlan_hdd_wmm.c b/core/hdd/src/wlan_hdd_wmm.c index e2d63991a2..a63bd9b147 100644 --- a/core/hdd/src/wlan_hdd_wmm.c +++ b/core/hdd/src/wlan_hdd_wmm.c @@ -1133,22 +1133,63 @@ static void __hdd_wmm_do_implicit_qos(struct work_struct *work) ((WLAN_HDD_GET_CTX(adapter))->config-> UapsdMask & SME_QOS_UAPSD_VI) ? 1 : 0; } - qosInfo.ts_info.direction = - (WLAN_HDD_GET_CTX(adapter))->config->InfraDirAcVi; + status = ucfg_mlme_get_wmm_dir_ac_vi( + hdd_ctx->psoc, &dir_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get infra_dir_ac_vi failed"); + return; + } + qosInfo.ts_info.direction = dir_ac; + qosInfo.ts_info.tid = 255; - qosInfo.mean_data_rate = - (WLAN_HDD_GET_CTX(adapter))->config-> - InfraMeanDataRateAcVi; - qosInfo.min_phy_rate = - (WLAN_HDD_GET_CTX(adapter))->config->InfraMinPhyRateAcVi; - qosInfo.min_service_interval = - (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdViSrvIntv; - qosInfo.nominal_msdu_size = - (WLAN_HDD_GET_CTX(adapter))->config->InfraNomMsduSizeAcVi; - qosInfo.surplus_bw_allowance = - (WLAN_HDD_GET_CTX(adapter))->config->InfraSbaAcVi; - qosInfo.suspension_interval = - (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdViSuspIntv; + status = ucfg_mlme_get_wmm_uapsd_vi_srv_intv( + hdd_ctx->psoc, &uapsd_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_srv_intv failed"); + return; + } + qosInfo.min_service_interval = uapsd_value; + + status = ucfg_mlme_get_wmm_uapsd_vi_sus_intv( + hdd_ctx->psoc, &uapsd_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_sus_intv failed"); + return; + } + qosInfo.suspension_interval = uapsd_value; + + status = ucfg_mlme_get_wmm_mean_data_rate_ac_vi( + hdd_ctx->psoc, &rate_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get mean_data_rate_ac_vi failed"); + return; + } + qosInfo.mean_data_rate = rate_ac; + + status = ucfg_mlme_get_wmm_min_phy_rate_ac_vi( + hdd_ctx->psoc, &rate_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get min_phy_rate_ac_vi failed"); + return; + } + qosInfo.min_phy_rate = rate_ac; + + status = ucfg_mlme_get_wmm_nom_msdu_size_ac_vi( + hdd_ctx->psoc, &nom_msdu_size_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get nom_msdu_size_ac_vi failed"); + return; + } + qosInfo.nominal_msdu_size = nom_msdu_size_ac; + + status = ucfg_mlme_get_wmm_sba_ac_vi( + hdd_ctx->psoc, &sba_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get sba_ac_vi failed"); + return; + } + qosInfo.surplus_bw_allowance = sba_ac; + break; default: case SME_AC_BE: @@ -1923,15 +1964,26 @@ QDF_STATUS hdd_wmm_assoc(struct hdd_adapter *adapter, } if (uapsdMask & HDD_AC_VI) { - status = - sme_enable_uapsd_for_ac((WLAN_HDD_GET_STATION_CTX_PTR - (adapter))->conn_info.staId[0], - SME_AC_VI, 5, 5, - hdd_ctx->config->InfraUapsdViSrvIntv, - hdd_ctx->config->InfraUapsdViSuspIntv, - SME_QOS_WMM_TS_DIR_BOTH, 1, - adapter->session_id, - hdd_ctx->config->DelayedTriggerFrmInt); + status = ucfg_mlme_get_wmm_uapsd_vi_srv_intv( + hdd_ctx->psoc, &srv_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_srv_intv failed"); + return QDF_STATUS_SUCCESS; + } + status = ucfg_mlme_get_wmm_uapsd_vi_sus_intv( + hdd_ctx->psoc, &sus_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_sus_intv failed"); + return QDF_STATUS_SUCCESS; + } + + status = sme_enable_uapsd_for_ac( + (WLAN_HDD_GET_STATION_CTX_PTR( + adapter))->conn_info.staId[0], + SME_AC_VI, 5, 5, srv_value, sus_value, + SME_QOS_WMM_TS_DIR_BOTH, 1, + adapter->session_id, + hdd_ctx->config->DelayedTriggerFrmInt); QDF_ASSERT(QDF_IS_STATUS_SUCCESS(status)); } @@ -2105,8 +2157,13 @@ QDF_STATUS hdd_wmm_get_uapsd_mask(struct hdd_adapter *adapter, if (uapsd_value == 0) uapsdMask &= ~HDD_AC_VO; - if ((WLAN_HDD_GET_CTX(adapter))->config-> - InfraUapsdViSrvIntv == 0) { + status = ucfg_mlme_get_wmm_uapsd_vi_srv_intv( + hdd_ctx->psoc, &uapsd_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_srv_intv failed"); + return QDF_STATUS_E_FAILURE; + } + if (uapsd_value == 0) { uapsdMask &= ~HDD_AC_VI; }