From a4773eb81e21a10f8cce290194ab44ee12e8bec5 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Sun, 19 Aug 2018 13:49:52 +0530 Subject: [PATCH] qcacld-3.0: ADD MLME INI items of WMM AC_BK Add the following WMM BE VO ini configs to MLME cfg: 1. CFG_QOS_WMM_INFRA_DIR_AC_BK_NAME 2. CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BK_NAME 3. CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BK_NAME 4. CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BK_NAME 5. CFG_QOS_WMM_INFRA_SBA_AC_BK_NAME 6. CFG_QOS_WMM_INFRA_UAPSD_BK_SRV_INTV_NAME 7. CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_NAME Introduce the basic infra APIs related to these configs from mlme. Change-Id: I1f8e6f0fa1ff15eda36a20ee06772c4a1ddd9ca8 CRs-Fixed: 2327690 --- mlme/core/src/wlan_mlme_main.c | 15 ++ mlme/dispatcher/inc/cfg_mlme_fe_wmm.h | 184 +++++++++++++++++- mlme/dispatcher/inc/wlan_mlme_api.h | 82 ++++++++ mlme/dispatcher/inc/wlan_mlme_public_struct.h | 23 +++ mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 117 +++++++++++ mlme/dispatcher/src/wlan_mlme_api.c | 116 +++++++++++ 6 files changed, 536 insertions(+), 1 deletion(-) diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 0424f34c79..6a2f32da89 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -1293,6 +1293,21 @@ static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SRV_INTV); wmm_params->ac_be.uapsd_be_sus_intv = cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SUS_INTV); + + wmm_params->ac_bk.dir_ac_bk = + cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BK); + wmm_params->ac_bk.nom_msdu_size_ac_bk = + cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK); + wmm_params->ac_bk.mean_data_rate_ac_bk = + cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK); + wmm_params->ac_bk.min_phy_rate_ac_bk = + cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BK); + wmm_params->ac_bk.sba_ac_bk = + cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BK); + wmm_params->ac_bk.uapsd_bk_srv_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SRV_INTV); + wmm_params->ac_bk.uapsd_bk_sus_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SUS_INTV); } static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h b/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h index 678ad48ca3..872ac5ed5e 100644 --- a/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h +++ b/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h @@ -581,6 +581,181 @@ CFG_VALUE_OR_DEFAULT, \ "Infra uapsd vi sus intv") +/* + * + * InfraDirAcBk - Set TSPEC direction for BK + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * This ini is used to set TSPEC direction for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_DIR_AC_BK CFG_INI_UINT( \ + "InfraDirAcBk", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "TSPEC direction for BK") + +/* + * + * InfraNomMsduSizeAcBk - Set normal MSDU size for BK + * @Min: 0x0 + * @Max: 0xFFFF + * @Default: 0x85DC + * + * This ini is used to set normal MSDU size for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK CFG_INI_UINT( \ + "InfraNomMsduSizeAcBk", \ + 0x0, \ + 0xFFFF, \ + 0x85DC, \ + CFG_VALUE_OR_DEFAULT, \ + "MSDU size for BK") + +/* + * + * InfraMeanDataRateAcBk - Set mean data rate for BK + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x493E0 + * + * This ini is used to set mean data rate for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK CFG_INI_UINT( \ + "InfraMeanDataRateAcBk", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x493E0, \ + CFG_VALUE_OR_DEFAULT, \ + "data rate for BK") + +/* + * + * InfraMinPhyRateAcBke - Set min PHY rate for BK + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x5B8D80 + * + * This ini is used to set min PHY rate for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MIN_PHY_RATE_AC_BK CFG_INI_UINT( \ + "InfraMinPhyRateAcBk", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x5B8D80, \ + CFG_VALUE_OR_DEFAULT, \ + "min PHY rate for BK") + +/* + * + * InfraSbaAcBk - Set surplus bandwidth allowance for BK + * @Min: 0x2001 + * @Max: 0xFFFF + * @Default: 0x2001 + * + * This ini is used to set surplus bandwidth allowance for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_SBA_AC_BK CFG_INI_UINT( \ + "InfraSbaAcBk", \ + 0x2001, \ + 0xFFFF, \ + 0x2001, \ + CFG_VALUE_OR_DEFAULT, \ + "surplus bandwidth allowance for BK") + +/* + * + * InfraUapsdBkSrvIntv - Set Uapsd service interval for BK + * @Min: 0 + * @Max: 4294967295UL + * @Default: 300 + * + * This ini is used to set Uapsd service interval for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_BK_SRV_INTV CFG_INI_UINT( \ + "InfraUapsdBkSrvIntv", \ + 0, \ + 4294967295UL, \ + 300, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd bk srv intv") + +/* + * + * InfraUapsdBkSuspIntv - Set Uapsd suspension interval for BK + * @Min: 0 + * @Max: 4294967295UL + * @Default: 2000 + * + * This ini is used to set Uapsd suspension interval for BK + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_BK_SUS_INTV CFG_INI_UINT( \ + "InfraUapsdBkSuspIntv", \ + 0, \ + 4294967295UL, \ + 2000, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd bk sus intv") + #define CFG_WMM_PARAMS_ALL \ CFG(CFG_QOS_ENABLED) \ CFG(CFG_WME_ENABLED) \ @@ -607,6 +782,13 @@ CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_BE) \ CFG(CFG_QOS_WMM_SBA_AC_BE) \ CFG(CFG_QOS_WMM_UAPSD_BE_SRV_INTV) \ - CFG(CFG_QOS_WMM_UAPSD_BE_SUS_INTV) + CFG(CFG_QOS_WMM_UAPSD_BE_SUS_INTV) \ + CFG(CFG_QOS_WMM_DIR_AC_BK) \ + CFG(CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK) \ + CFG(CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK) \ + CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_BK) \ + CFG(CFG_QOS_WMM_SBA_AC_BK) \ + CFG(CFG_QOS_WMM_UAPSD_BK_SRV_INTV) \ + CFG(CFG_QOS_WMM_UAPSD_BK_SUS_INTV) #endif /* __CFG_MLME_FE_WMM_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_api.h b/mlme/dispatcher/inc/wlan_mlme_api.h index dab0de03f4..0010f1a166 100644 --- a/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_api.h @@ -801,6 +801,88 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_be_srv_intv(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_get_wmm_uapsd_be_sus_intv(struct wlan_objmgr_psoc *psoc, uint32_t *value); +/** + * wlan_mlme_get_wmm_dir_ac_bk() - Get TSPEC direction + * for BK + * @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_bk(struct wlan_objmgr_psoc *psoc, uint8_t *value); + +/** + * wlan_mlme_get_wmm_nom_msdu_size_ac_bk() - Get normal + * MSDU size for BK + * @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_bk(struct wlan_objmgr_psoc *psoc, + uint16_t *value); + +/** + * wlan_mlme_get_wmm_mean_data_rate_ac_bk() - mean data + * rate for BK + * @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_bk(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_min_phy_rate_ac_bk() - min PHY + * rate for BK + * @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_bk(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_sba_ac_bk() - surplus bandwidth + * allowance for BE + * @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_bk(struct wlan_objmgr_psoc *psoc, uint16_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_bk_srv_intv() - Get Uapsd service + * interval for BK + * @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_bk_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_bk_sus_intv() - Get Uapsd suspension + * interval for BK + * @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_bk_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + /** * wlan_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction * for VO diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 66def29914..f734d1fbe9 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1062,6 +1062,27 @@ struct wlan_mlme_wmm_ac_be { }; +/** + * struct wlan_mlme_wmm_ac_bk - Default TSPEC parameters + * for AC_BK + * @dir_ac_bk: TSPEC direction for BK + * @nom_msdu_size_ac_bk: normal MSDU size for BK + * @mean_data_rate_ac_bk: mean data rate for BK + * @min_phy_rate_ac_bk: min PHY rate for BK + * @sba_ac_bk: surplus bandwidth allowance for BK + * @uapsd_bk_srv_intv: Uapsd service interval for BK + * @uapsd_bk_sus_intv: Uapsd suspension interval for BK + */ +struct wlan_mlme_wmm_ac_bk { + uint8_t dir_ac_bk; + uint16_t nom_msdu_size_ac_bk; + uint32_t mean_data_rate_ac_bk; + uint32_t min_phy_rate_ac_bk; + uint16_t sba_ac_bk; + uint32_t uapsd_bk_srv_intv; + uint32_t uapsd_bk_sus_intv; +}; + /** * struct wlan_mlme_wmm_params - WMM CFG Items * @qos_enabled: AP is enabled with 11E @@ -1071,6 +1092,7 @@ struct wlan_mlme_wmm_ac_be { * @ac_vo: Default TSPEC parameters for AC_VO * @ac_vi: Default TSPEC parameters for AC_VI * @ac_be: Default TSPEC parameters for AC_BE + * @ac_bk: Default TSPEC parameters for AC_BK */ struct wlan_mlme_wmm_params { bool qos_enabled; @@ -1081,6 +1103,7 @@ struct wlan_mlme_wmm_params { struct wlan_mlme_wmm_ac_vo ac_vo; struct wlan_mlme_wmm_ac_vi ac_vi; struct wlan_mlme_wmm_ac_be ac_be; + struct wlan_mlme_wmm_ac_bk ac_bk; }; /** diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 4c1deae775..abee54832c 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -1932,4 +1932,121 @@ ucfg_mlme_get_wmm_uapsd_be_sus_intv(struct wlan_objmgr_psoc *psoc, return wlan_mlme_get_wmm_uapsd_be_sus_intv(psoc, value); } +/** + * ucfg_mlme_get_wmm_dir_ac_bk() - Get TSPEC direction + * for BK + * @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_bk(struct wlan_objmgr_psoc *psoc, uint8_t *value) +{ + return wlan_mlme_get_wmm_dir_ac_bk(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_nom_msdu_size_ac_be() - Get normal + * MSDU size for BE + * @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_bk(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + return wlan_mlme_get_wmm_nom_msdu_size_ac_bk(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_mean_data_rate_ac_bk() - mean data + * rate for BK + * @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_bk(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_mean_data_rate_ac_bk(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_min_phy_rate_ac_bk() - min PHY + * rate for BE + * @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_bk(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_min_phy_rate_ac_bk(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_sba_ac_bk() - surplus bandwidth + * allowance for BE + * @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_bk(struct wlan_objmgr_psoc *psoc, uint16_t *value) +{ + return wlan_mlme_get_wmm_sba_ac_bk(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_bk_srv_intv() - Get Uapsd service + * interval for BK + * @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_bk_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_bk_srv_intv(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_bk_sus_intv() - Get Uapsd suspension + * interval for BK + * @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_bk_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_bk_sus_intv(psoc, value); +} + #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/mlme/dispatcher/src/wlan_mlme_api.c b/mlme/dispatcher/src/wlan_mlme_api.c index c0bd5a64f6..76841212a9 100644 --- a/mlme/dispatcher/src/wlan_mlme_api.c +++ b/mlme/dispatcher/src/wlan_mlme_api.c @@ -908,6 +908,122 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_be_sus_intv(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +wlan_mlme_get_wmm_dir_ac_bk(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_bk.dir_ac_bk; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_nom_msdu_size_ac_bk(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_bk.nom_msdu_size_ac_bk; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_bk(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_bk.mean_data_rate_ac_bk; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_bk(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_bk.min_phy_rate_ac_bk; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_sba_ac_bk(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_bk.sba_ac_bk; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_uapsd_bk_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_bk.uapsd_bk_srv_intv; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_uapsd_bk_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_bk.uapsd_bk_sus_intv; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_listen_interval(struct wlan_objmgr_psoc *psoc, int value) {