qcacld-3.0: Set AMSDU/AMPDU caps per vdev from cli
In the case of EHT, if the mode is MLO then set AMSDU/AMPDU caps per vdev instead of setting it only on assoc vdev. Change-Id: Iaf480ee6a42cea83e30f412f663f688c0330d246 CRs-Fixed: 3392015
This commit is contained in:

committed by
Madan Koyyalamudi

parent
d595b21680
commit
8bb46df0d8
@@ -57,6 +57,27 @@ enum wlan_wds_mode {
|
|||||||
WLAN_WDS_MODE_MAX = WLAN_WDS_MODE_LAST - 1,
|
WLAN_WDS_MODE_MAX = WLAN_WDS_MODE_LAST - 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum wlan_eht_mode - EHT mode of operation
|
||||||
|
* @WLAN_EHT_MODE_DISABLED: EHT is disabled
|
||||||
|
* @WLAN_EHT_MODE_SLO: Single-link operation mode
|
||||||
|
* @WLAN_EHT_MODE_MLSR: Multi-link Single-Radio mode
|
||||||
|
* @WLAN_EHT_MODE_MLMR: Multi-link Multi-Radio mode
|
||||||
|
* @WLAN_EHT_MODE_LAST: last value in enum
|
||||||
|
* @WLAN_EHT_MODE_MAX: max value supported
|
||||||
|
*
|
||||||
|
* This is used for 'type' values in eht_mode
|
||||||
|
*/
|
||||||
|
enum wlan_eht_mode {
|
||||||
|
WLAN_EHT_MODE_DISABLED = 0,
|
||||||
|
WLAN_EHT_MODE_SLO = 1,
|
||||||
|
WLAN_EHT_MODE_MLSR = 2,
|
||||||
|
WLAN_EHT_MODE_MLMR = 3,
|
||||||
|
/* keep this last */
|
||||||
|
WLAN_EHT_MODE_LAST,
|
||||||
|
WLAN_EHT_MODE_MAX = WLAN_EHT_MODE_LAST - 1,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum debug_packet_log_type - Debug packet log type
|
* enum debug_packet_log_type - Debug packet log type
|
||||||
* @DEBUG_PKTLOG_TYPE_NONE: Debug packet log is disabled
|
* @DEBUG_PKTLOG_TYPE_NONE: Debug packet log is disabled
|
||||||
|
@@ -2510,6 +2510,27 @@ wlan_mlme_set_relaxed_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
/**
|
||||||
|
* wlan_mlme_get_eht_mode() - Get the EHT mode of operations
|
||||||
|
* @psoc: psoc context
|
||||||
|
* @value: EHT mode value ptr
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_get_eht_mode(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum wlan_eht_mode *value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_set_eht_mode() - Set the EHT mode of operation
|
||||||
|
* @psoc: psoc context
|
||||||
|
* @value: EHT mode value
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_set_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_mlme_get_emlsr_mode_enabled() - Get the eMLSR mode flag
|
* wlan_mlme_get_emlsr_mode_enabled() - Get the eMLSR mode flag
|
||||||
* @psoc: psoc context
|
* @psoc: psoc context
|
||||||
@@ -2575,6 +2596,19 @@ QDF_STATUS
|
|||||||
wlan_mlme_set_t2lm_negotiation_supported(struct wlan_objmgr_psoc *psoc,
|
wlan_mlme_set_t2lm_negotiation_supported(struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t value);
|
uint8_t value);
|
||||||
#else
|
#else
|
||||||
|
static inline QDF_STATUS
|
||||||
|
wlan_mlme_get_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode *value)
|
||||||
|
{
|
||||||
|
*value = WLAN_EHT_MODE_DISABLED;
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline QDF_STATUS
|
||||||
|
wlan_mlme_set_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode value)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static inline QDF_STATUS
|
static inline QDF_STATUS
|
||||||
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||||
{
|
{
|
||||||
|
@@ -1388,6 +1388,7 @@ struct wlan_user_mcc_quota {
|
|||||||
* @mgmt_hw_tx_retry_count: MGMT HW tx retry count for frames
|
* @mgmt_hw_tx_retry_count: MGMT HW tx retry count for frames
|
||||||
* @relaxed_6ghz_conn_policy: 6GHz relaxed connection policy
|
* @relaxed_6ghz_conn_policy: 6GHz relaxed connection policy
|
||||||
* @std_6ghz_conn_policy: 6GHz standard connection policy
|
* @std_6ghz_conn_policy: 6GHz standard connection policy
|
||||||
|
* @eht_mode: EHT mode of operation
|
||||||
* @t2lm_negotiation_support: T2LM negotiation supported enum value
|
* @t2lm_negotiation_support: T2LM negotiation supported enum value
|
||||||
* @enable_emlsr_mode: 11BE eMLSR mode support
|
* @enable_emlsr_mode: 11BE eMLSR mode support
|
||||||
* @safe_mode_enable: safe mode to bypass some strict 6 GHz checks for
|
* @safe_mode_enable: safe mode to bypass some strict 6 GHz checks for
|
||||||
@@ -1446,6 +1447,7 @@ struct wlan_mlme_generic {
|
|||||||
bool std_6ghz_conn_policy;
|
bool std_6ghz_conn_policy;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
enum wlan_eht_mode eht_mode;
|
||||||
bool enable_emlsr_mode;
|
bool enable_emlsr_mode;
|
||||||
enum t2lm_negotiation_support t2lm_negotiation_support;
|
enum t2lm_negotiation_support t2lm_negotiation_support;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2951,18 +2951,33 @@ ucfg_mlme_set_relaxed_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_mlme_get_emlsr_mode_enabled() - Get eMLSR mode flag
|
* ucfg_mlme_set_eht_mode() - Set EHT mode of operation
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
* @value: Value that needs to be set from the caller
|
* @value: EHT mode value that needs to be set from the caller
|
||||||
*
|
*
|
||||||
* Inline UCFG API to be used by HDD/OSIF callers
|
* Inline UCFG API to be used by HDD/OSIF callers
|
||||||
*
|
*
|
||||||
* Return: QDF Status
|
* Return: QDF Status
|
||||||
*/
|
*/
|
||||||
static inline QDF_STATUS
|
static inline QDF_STATUS
|
||||||
ucfg_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
ucfg_mlme_set_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode value)
|
||||||
{
|
{
|
||||||
return wlan_mlme_get_emlsr_mode_enabled(psoc, value);
|
return wlan_mlme_set_eht_mode(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_get_eht_mode() - Get EHT mode of operation
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: EHT mode value that is set by the user
|
||||||
|
*
|
||||||
|
* Inline UCFG API to be used by HDD/OSIF callers
|
||||||
|
*
|
||||||
|
* Return: QDF Status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
ucfg_mlme_get_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode *value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_get_eht_mode(psoc, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2980,6 +2995,21 @@ ucfg_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value)
|
|||||||
return wlan_mlme_set_emlsr_mode_enabled(psoc, value);
|
return wlan_mlme_set_emlsr_mode_enabled(psoc, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_get_emlsr_mode_enabled() - Get eMLSR mode flag
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: Value that is set by the user
|
||||||
|
*
|
||||||
|
* Inline UCFG API to be used by HDD/OSIF callers
|
||||||
|
*
|
||||||
|
* Return: QDF Status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
ucfg_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_get_emlsr_mode_enabled(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_mlme_get_opr_rate() - Get operational rate set
|
* ucfg_mlme_get_opr_rate() - Get operational rate set
|
||||||
* @vdev: pointer to vdev object
|
* @vdev: pointer to vdev object
|
||||||
|
@@ -3406,6 +3406,20 @@ wlan_mlme_set_relaxed_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_get_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode *value)
|
||||||
|
{
|
||||||
|
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||||
|
|
||||||
|
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||||
|
if (!mlme_obj)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
*value = mlme_obj->cfg.gen.eht_mode;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||||
{
|
{
|
||||||
@@ -3420,6 +3434,20 @@ wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_set_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode value)
|
||||||
|
{
|
||||||
|
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||||
|
|
||||||
|
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||||
|
if (!mlme_obj)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
mlme_obj->cfg.gen.eht_mode = value;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
wlan_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value)
|
wlan_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value)
|
||||||
{
|
{
|
||||||
|
@@ -120,6 +120,7 @@
|
|||||||
#include "wlan_fwol_ucfg_api.h"
|
#include "wlan_fwol_ucfg_api.h"
|
||||||
#include "wlan_tdls_api.h"
|
#include "wlan_tdls_api.h"
|
||||||
#include "wlan_twt_cfg_ext_api.h"
|
#include "wlan_twt_cfg_ext_api.h"
|
||||||
|
#include "wlan_mlo_mgr_sta.h"
|
||||||
|
|
||||||
#define WMA_LOG_COMPLETION_TIMER 500 /* 500 msecs */
|
#define WMA_LOG_COMPLETION_TIMER 500 /* 500 msecs */
|
||||||
#define WMI_TLV_HEADROOM 128
|
#define WMI_TLV_HEADROOM 128
|
||||||
@@ -1195,6 +1196,50 @@ static inline wmi_traffic_ac wma_convert_ac_value(uint32_t ac_value)
|
|||||||
return WMI_AC_MAX;
|
return WMI_AC_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
/**
|
||||||
|
* wma_set_per_link_amsdu_cap() - Set AMSDU/AMPDU capability per link to FW.
|
||||||
|
* @wma: wma handle
|
||||||
|
* @privcmd: pointer to set command parameters
|
||||||
|
* @aggr_type: aggregration type
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if set command is sent successfully, else
|
||||||
|
* QDF_STATUS_E_FAILURE
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
wma_set_per_link_amsdu_cap(tp_wma_handle wma, wma_cli_set_cmd_t *privcmd,
|
||||||
|
wmi_vdev_custom_aggr_type_t aggr_type)
|
||||||
|
{
|
||||||
|
uint8_t vdev_id;
|
||||||
|
uint8_t op_mode;
|
||||||
|
QDF_STATUS ret = QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
for (vdev_id = 0; vdev_id < WLAN_MAX_VDEVS; vdev_id++) {
|
||||||
|
op_mode = wlan_get_opmode_from_vdev_id(wma->pdev, vdev_id);
|
||||||
|
if (op_mode == QDF_STA_MODE) {
|
||||||
|
ret = wma_set_tx_rx_aggr_size(vdev_id,
|
||||||
|
privcmd->param_value,
|
||||||
|
privcmd->param_value,
|
||||||
|
aggr_type);
|
||||||
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
|
wma_err("set_aggr_size failed for vdev: %d, ret %d",
|
||||||
|
vdev_id, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline QDF_STATUS
|
||||||
|
wma_set_per_link_amsdu_cap(tp_wma_handle wma, wma_cli_set_cmd_t *privcmd,
|
||||||
|
wmi_vdev_custom_aggr_type_t aggr_type)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wma_process_cli_set_cmd() - set parameters to fw
|
* wma_process_cli_set_cmd() - set parameters to fw
|
||||||
* @wma: wma handle
|
* @wma: wma handle
|
||||||
@@ -1213,6 +1258,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
|
|||||||
struct pdev_params pdev_param = {0};
|
struct pdev_params pdev_param = {0};
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct target_psoc_info *tgt_hdl;
|
struct target_psoc_info *tgt_hdl;
|
||||||
|
enum wlan_eht_mode eht_mode;
|
||||||
|
|
||||||
if (!mac) {
|
if (!mac) {
|
||||||
wma_err("Failed to get mac");
|
wma_err("Failed to get mac");
|
||||||
@@ -1318,14 +1364,25 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
|
|||||||
WMI_VDEV_CUSTOM_AGGR_TYPE_AMPDU;
|
WMI_VDEV_CUSTOM_AGGR_TYPE_AMPDU;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = wma_set_tx_rx_aggr_size(vid,
|
wlan_mlme_get_eht_mode(wma->psoc, &eht_mode);
|
||||||
|
if (eht_mode == WLAN_EHT_MODE_MLSR ||
|
||||||
|
eht_mode == WLAN_EHT_MODE_MLMR) {
|
||||||
|
ret = wma_set_per_link_amsdu_cap(wma, privcmd,
|
||||||
|
aggr_type);
|
||||||
|
if (QDF_IS_STATUS_ERROR(ret))
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
ret = wma_set_tx_rx_aggr_size(
|
||||||
|
vid,
|
||||||
privcmd->param_value,
|
privcmd->param_value,
|
||||||
privcmd->param_value,
|
privcmd->param_value,
|
||||||
aggr_type);
|
aggr_type);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
wma_err("set_aggr_size failed ret %d", ret);
|
wma_err("set_aggr_size failed ret %d",
|
||||||
|
ret);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GEN_PARAM_CRASH_INJECT:
|
case GEN_PARAM_CRASH_INJECT:
|
||||||
if (QDF_GLOBAL_FTM_MODE == cds_get_conparam())
|
if (QDF_GLOBAL_FTM_MODE == cds_get_conparam())
|
||||||
|
Reference in New Issue
Block a user