qcacld-3.0: Handle SRG and NON-SRG pd threshold

Currently, only single pd_threshold is fetched and
treated as SRG and NON-SRG pd threshold instead of
handling both threshold separately.

Fix is to get SRG and NON-SRG pd threshold from
userspace instead of single pd threshold

Change-Id: I2a131ea9040c799bc12a17a9ce42be02da8a717b
CRs-Fixed: 3328189
This commit is contained in:
Sheenam Monga
2022-11-03 19:53:46 +05:30
committed by Madan Koyyalamudi
parent 1b32411a89
commit 45372b860a
6 changed files with 39 additions and 25 deletions

View File

@@ -127,16 +127,16 @@ QDF_STATUS wlan_spatial_reuse_he_siga_val15_allowed_set(
/**
* wlan_sr_setup_req() - Enable SR with provided pd threshold
*
* @vdev: objmgr vdev
* @pdev: objmgr pdev
* @is_sr_enable: sr enable/disable
* @pd_threshold: pd threshold
* @srg_pd_threshold: SRG pd threshold
* @non_srg_pd_threshold: NON SRG PD threshold
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_sr_setup_req(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev, bool is_sr_enable,
int32_t pd_threshold);
int32_t srg_pd_threshold, int32_t non_srg_pd_threshold);
#endif

View File

@@ -119,19 +119,21 @@ void ucfg_spatial_reuse_send_sr_prohibit(struct wlan_objmgr_vdev *vdev,
bool enable_he_siga_val15_prohibit);
/**
* ucfg_spatial_reuse_setup_req() - To enable/disable SR
*
* ucfg_spatial_reuse_setup_req() - To enable/disable SR (Spatial Reuse)
* vdev: object manager vdev
* pdev: object manager pdev
* is_sr_enable: sr enable/disable
* pd_threshold: pd threshold
* is_sr_enable: SR enable/disable
* srg_pd_threshold: SRG pd threshold
* non_srg_pd_threshold: NON SRG pd threshold
*
* Return: Success/Failure
*/
QDF_STATUS ucfg_spatial_reuse_setup_req(struct wlan_objmgr_vdev *vdev,
QDF_STATUS
ucfg_spatial_reuse_setup_req(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev,
bool is_sr_enable,
int32_t pd_threshold);
bool is_sr_enable, int32_t srg_pd_threshold,
int32_t non_srg_pd_threshold);
#else
static inline
void ucfg_spatial_reuse_register_cb(struct wlan_objmgr_psoc *psoc,

View File

@@ -68,7 +68,8 @@ QDF_STATUS wlan_spatial_reuse_he_siga_val15_allowed_set(
QDF_STATUS
wlan_sr_setup_req(struct wlan_objmgr_vdev *vdev, struct wlan_objmgr_pdev *pdev,
bool is_sr_enable, int32_t pd_threshold) {
bool is_sr_enable, int32_t srg_pd_threshold,
int32_t non_srg_pd_threshold) {
struct wlan_lmac_if_tx_ops *tx_ops;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
@@ -77,7 +78,8 @@ wlan_sr_setup_req(struct wlan_objmgr_vdev *vdev, struct wlan_objmgr_pdev *pdev,
tx_ops->spatial_reuse_tx_ops.target_if_set_sr_enable_disable) {
status =
tx_ops->spatial_reuse_tx_ops.target_if_set_sr_enable_disable(
vdev, pdev, is_sr_enable, pd_threshold);
vdev, pdev, is_sr_enable,
srg_pd_threshold, non_srg_pd_threshold);
return status;
}
return status;

View File

@@ -115,7 +115,9 @@ void ucfg_spatial_reuse_send_sr_prohibit(struct wlan_objmgr_vdev *vdev,
QDF_STATUS
ucfg_spatial_reuse_setup_req(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev,
bool is_sr_enable, int32_t pd_threshold)
bool is_sr_enable, int32_t srg_pd_threshold,
int32_t non_srg_pd_threshold)
{
return wlan_sr_setup_req(vdev, pdev, is_sr_enable, pd_threshold);
return wlan_sr_setup_req(vdev, pdev, is_sr_enable,
srg_pd_threshold, non_srg_pd_threshold);
}

View File

@@ -588,7 +588,8 @@ static int __wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
QDF_STATUS status;
uint32_t id;
bool is_sr_enable = false;
int32_t pd_threshold = 0;
int32_t srg_pd_threshold = 0;
int32_t non_srg_pd_threshold = 0;
uint8_t sr_he_siga_val15_allowed = true;
uint8_t pdev_id, mac_id, sr_ctrl, non_srg_max_pd_offset;
uint8_t srg_min_pd_offset = 0, srg_max_pd_offset = 0;
@@ -690,18 +691,25 @@ static int __wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
*/
if (is_sr_enable &&
tb2[QCA_WLAN_VENDOR_ATTR_SR_PARAMS_SRG_PD_THRESHOLD]) {
pd_threshold =
srg_pd_threshold =
nla_get_s32(
tb2[QCA_WLAN_VENDOR_ATTR_SR_PARAMS_SRG_PD_THRESHOLD]);
}
hdd_debug("setting sr enable %d with pd threshold %d",
is_sr_enable, pd_threshold);
if (is_sr_enable &&
tb2[QCA_WLAN_VENDOR_ATTR_SR_PARAMS_NON_SRG_PD_THRESHOLD]) {
non_srg_pd_threshold =
nla_get_s32(
tb2[QCA_WLAN_VENDOR_ATTR_SR_PARAMS_NON_SRG_PD_THRESHOLD]
);
}
hdd_debug("setting sr enable %d with pd threshold srg: %d non srg: %d",
is_sr_enable, srg_pd_threshold, non_srg_pd_threshold);
/* Set the variables */
ucfg_spatial_reuse_set_sr_enable(adapter->vdev, is_sr_enable);
status = ucfg_spatial_reuse_setup_req(adapter->vdev,
hdd_ctx->pdev,
is_sr_enable,
pd_threshold);
status = ucfg_spatial_reuse_setup_req(
adapter->vdev, hdd_ctx->pdev, is_sr_enable,
srg_pd_threshold, non_srg_pd_threshold);
if (status != QDF_STATUS_SUCCESS) {
hdd_err("failed to enable Spatial Reuse feature");
return -EINVAL;

View File

@@ -696,7 +696,7 @@ static void wma_sr_handle_conc(tp_wma_handle wma,
if ((!(sr_ctrl & NON_SRG_PD_SR_DISALLOWED) &&
(sr_ctrl & NON_SRG_OFFSET_PRESENT)) ||
(sr_ctrl & SRG_INFO_PRESENT)) {
wlan_mlme_update_sr_data(conc_vdev, &val, 0, true);
wlan_mlme_update_sr_data(conc_vdev, &val, 0, 0, true);
wma_sr_send_pd_threshold(wma, conc_vdev_id, val);
wlan_spatial_reuse_osif_event(conc_vdev,
SR_OPERATION_RESUME,
@@ -758,7 +758,7 @@ QDF_STATUS wma_sr_update(tp_wma_handle wma, uint8_t vdev_id, bool enable)
(sr_ctrl & NON_SRG_OFFSET_PRESENT)) ||
(sr_ctrl & SRG_INFO_PRESENT)) {
if (enable) {
wlan_mlme_update_sr_data(vdev, &val, 0, true);
wlan_mlme_update_sr_data(vdev, &val, 0, 0, true);
} else {
/* VDEV down, disable SR */
wlan_vdev_mlme_set_sr_ctrl(vdev, 0);