qcacld-3.0: Vendor command support for MLO and EHT config
Add vendor command support to configure MLO and EHT capability support. Change-Id: I10f4fffb1fc7382bad7feb4cd82d2f4f3c366e1b CRs-Fixed: 3271417
This commit is contained in:

committed by
Madan Koyyalamudi

szülő
0deb4831e8
commit
31bc110c0d
@@ -8024,6 +8024,14 @@ const struct nla_policy wlan_hdd_wifi_config_policy[
|
||||
.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_WFC_STATE] = {
|
||||
.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_EML_CAPABILITY] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_SIMULTANEOUS_LINKS] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_NUM_LINKS] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MODE] = {
|
||||
.type = NLA_U8},
|
||||
};
|
||||
|
||||
static const struct nla_policy
|
||||
@@ -8148,6 +8156,20 @@ wlan_hdd_wifi_test_config_policy[
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_BEAMFORMER_PERIODIC_SOUNDING] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_BEAMFORMEE_SS_80MHZ] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_BEAMFORMEE_SS_160MHZ] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_BEAMFORMEE_SS_320MHZ] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EXCLUDE_STA_PROF_IN_PROBE_REQ] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_SET_EHT_TESTBED_DEFAULTS] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_MCS] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_TB_SOUNDING_FB_RL] = {
|
||||
.type = NLA_U8},
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -10646,6 +10668,97 @@ static int hdd_set_wfc_state(struct hdd_adapter *adapter,
|
||||
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
/**
|
||||
* hdd_set_eht_max_simultaneous_links() - Set EHT maximum number of
|
||||
* simultaneous links
|
||||
* @adapter: hdd adapter
|
||||
* @attr: pointer to nla attr
|
||||
*
|
||||
* Return: 0 on success, negative on failure
|
||||
*/
|
||||
static int hdd_set_eht_max_simultaneous_links(struct hdd_adapter *adapter,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
uint8_t cfg_val;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
|
||||
cfg_val = nla_get_u8(attr);
|
||||
if (cfg_val < 0 || cfg_val > MAX_SIMULTANEOUS_STA_ML_LINKS)
|
||||
return -EINVAL;
|
||||
|
||||
sme_set_mlo_max_simultaneous_links(hdd_ctx->mac_handle,
|
||||
adapter->vdev_id, cfg_val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_set_eht_max_num_links() - Set EHT maximum number of links
|
||||
* @adapter: hdd adapter
|
||||
* @attr: pointer to nla attr
|
||||
*
|
||||
* Return: 0 on success, negative on failure
|
||||
*/
|
||||
static int hdd_set_eht_max_num_links(struct hdd_adapter *adapter,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
uint8_t cfg_val;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
|
||||
cfg_val = nla_get_u8(attr);
|
||||
if (cfg_val < 0 || cfg_val > MAX_NUM_STA_ML_lINKS)
|
||||
return -EINVAL;
|
||||
|
||||
sme_set_mlo_max_links(hdd_ctx->mac_handle, adapter->vdev_id, cfg_val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_set_eht_mlo_mode() - Set EHT MLO mode of operation
|
||||
* @adapter: hdd adapter
|
||||
* @attr: pointer to nla attr
|
||||
*
|
||||
* Return: 0 on success, negative on failure
|
||||
*/
|
||||
static int hdd_set_eht_mlo_mode(struct hdd_adapter *adapter,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
uint8_t cfg_val;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
|
||||
cfg_val = nla_get_u8(attr);
|
||||
hdd_debug("Configure EHT mode of operation: %d", cfg_val);
|
||||
if (cfg_val < WLAN_EHT_MODE_SLO || cfg_val > WLAN_EHT_MODE_MLMR)
|
||||
return -EINVAL;
|
||||
|
||||
ucfg_mlme_set_eht_mode(hdd_ctx->psoc, cfg_val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
int hdd_set_eht_max_simultaneous_links(struct hdd_adapter *adapter,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int hdd_set_eht_max_num_links(struct hdd_adapter *adapter,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int hdd_set_eht_mlo_mode(struct hdd_adapter *adapter, const struct nlattr *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* typedef independent_setter_fn - independent attribute handler
|
||||
* @adapter: The adapter being configured
|
||||
@@ -10775,6 +10888,12 @@ static const struct independent_setters independent_setters[] = {
|
||||
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_WFC_STATE,
|
||||
hdd_set_wfc_state},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_SIMULTANEOUS_LINKS,
|
||||
hdd_set_eht_max_simultaneous_links},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_NUM_LINKS,
|
||||
hdd_set_eht_max_num_links},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MODE,
|
||||
hdd_set_eht_mlo_mode},
|
||||
};
|
||||
|
||||
#ifdef WLAN_FEATURE_ELNA
|
||||
@@ -12054,13 +12173,20 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
||||
goto send_err;
|
||||
}
|
||||
|
||||
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ENABLE_TX_BEAMFORMEE]) {
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ENABLE_TX_BEAMFORMEE;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[
|
||||
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ENABLE_TX_BEAMFORMEE]);
|
||||
hdd_debug("Set Tx beamformee to %d", cfg_val);
|
||||
ret_val = sme_update_tx_bfee_supp(mac_handle,
|
||||
adapter->vdev_id,
|
||||
cfg_val);
|
||||
if (ret_val)
|
||||
sme_err("Failed to update Tx beamformee support");
|
||||
|
||||
ret_val = sme_update_eht_caps(mac_handle, adapter->vdev_id,
|
||||
cfg_val, EHT_TX_BFEE_ENABLE,
|
||||
adapter->device_mode);
|
||||
if (ret_val)
|
||||
sme_err("Failed to set Tx beamformee cap");
|
||||
|
||||
@@ -12647,6 +12773,100 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
||||
set_val, PDEV_CMD);
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_BEAMFORMEE_SS_80MHZ;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
hdd_debug("Configure Tx BF < 80 MHz: %d", cfg_val);
|
||||
|
||||
ret_val = sme_update_eht_caps(mac_handle, adapter->vdev_id,
|
||||
cfg_val, EHT_TX_BFEE_SS_80MHZ,
|
||||
adapter->device_mode);
|
||||
if (ret_val)
|
||||
sme_err("Failed to update EHT Tx BFEE cap");
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_BEAMFORMEE_SS_160MHZ;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
hdd_debug("Configure Tx BF for 160 MHz: %d", cfg_val);
|
||||
|
||||
ret_val = sme_update_eht_caps(mac_handle, adapter->vdev_id,
|
||||
cfg_val, EHT_TX_BFEE_SS_160MHZ,
|
||||
adapter->device_mode);
|
||||
if (ret_val)
|
||||
sme_err("Failed to update EHT Tx BFEE cap");
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_BEAMFORMEE_SS_320MHZ;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
hdd_debug("Configure Tx BF for 320 MHz: %d", cfg_val);
|
||||
|
||||
ret_val = sme_update_eht_caps(mac_handle, adapter->vdev_id,
|
||||
cfg_val, EHT_TX_BFEE_SS_320MHZ,
|
||||
adapter->device_mode);
|
||||
if (ret_val)
|
||||
sme_err("Failed to update EHT Tx BFEE cap");
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EXCLUDE_STA_PROF_IN_PROBE_REQ;
|
||||
if (tb[cmd_id] && adapter->device_mode == QDF_STA_MODE) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
|
||||
if (cfg_val) {
|
||||
wlan_vdev_obj_lock(adapter->vdev);
|
||||
wlan_vdev_mlme_cap_set(
|
||||
adapter->vdev,
|
||||
WLAN_VDEV_C_EXCL_STA_PROF_PRB_REQ);
|
||||
wlan_vdev_obj_unlock(adapter->vdev);
|
||||
} else {
|
||||
wlan_vdev_obj_lock(adapter->vdev);
|
||||
wlan_vdev_mlme_cap_clear(
|
||||
adapter->vdev,
|
||||
WLAN_VDEV_C_EXCL_STA_PROF_PRB_REQ);
|
||||
wlan_vdev_obj_unlock(adapter->vdev);
|
||||
}
|
||||
hdd_debug("Sta profile in Probe req frame: %d", cfg_val);
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_SET_EHT_TESTBED_DEFAULTS;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
hdd_debug("Configure EHT testbed defaults %d", cfg_val);
|
||||
if (!cfg_val)
|
||||
sme_reset_eht_caps(hdd_ctx->mac_handle,
|
||||
adapter->vdev_id);
|
||||
else
|
||||
sme_set_eht_testbed_def(hdd_ctx->mac_handle,
|
||||
adapter->vdev_id);
|
||||
|
||||
sme_set_vdev_ies_per_band(hdd_ctx->mac_handle, adapter->vdev_id,
|
||||
adapter->device_mode);
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_MCS;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
sme_update_eht_cap_mcs(hdd_ctx->mac_handle, adapter->vdev_id,
|
||||
cfg_val);
|
||||
sme_set_vdev_ies_per_band(hdd_ctx->mac_handle, adapter->vdev_id,
|
||||
adapter->device_mode);
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_TB_SOUNDING_FB_RL;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
hdd_debug("Configure TB sounding feedback rate limit: %d",
|
||||
cfg_val);
|
||||
|
||||
ret_val = sme_update_eht_caps(
|
||||
mac_handle, adapter->vdev_id,
|
||||
cfg_val,
|
||||
EHT_TX_BFEE_SOUNDING_FEEDBACK_RATELIMIT,
|
||||
adapter->device_mode);
|
||||
if (ret_val)
|
||||
sme_err("Failed to update EHT Tx BFEE cap");
|
||||
}
|
||||
if (update_sme_cfg)
|
||||
sme_update_config(mac_handle, sme_config);
|
||||
|
||||
|
Reference in New Issue
Block a user