qcacld-3.0: Add support to send roam scan scheme for the triggers

Add support to handle the nl80211 attribute -
QCA_ATTR_ROAM_CONTROL_TRIGGERS_SCAN_SCHEME. Send RSO update to
firmware if roam scan scheme value is received via the nl80211
attribute QCA_ATTR_ROAM_CONTROL_TRIGGERS_SCAN_SCHEME over the
QCA_WLAN_VENDOR_ATTR_ROAMING_SUBCMD subcommand.

Change-Id: If21281245097648380990b9218a722691279f598
CRs-Fixed: 2785256
This commit is contained in:
Pragaspathi Thilagaraj
2020-09-25 00:53:15 +05:30
committed by snandini
orang tua adbc4f7d5b
melakukan cd22d076ab
8 mengubah file dengan 223 tambahan dan 2 penghapusan

Melihat File

@@ -1558,6 +1558,7 @@ static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
lfr->idle_roam_min_rssi = cfg_get(psoc, CFG_LFR_IDLE_ROAM_MIN_RSSI);
lfr->roam_trigger_bitmap =
cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP);
lfr->idle_roam_band = cfg_get(psoc, CFG_LFR_IDLE_ROAM_BAND);
lfr->sta_roam_disable = cfg_get(psoc, CFG_STA_DISABLE_ROAM);
mlme_init_sae_single_pmk_cfg(psoc, lfr);

Melihat File

@@ -3010,4 +3010,5 @@ QDF_STATUS mlme_get_ext_opr_rate(struct wlan_objmgr_vdev *vdev, uint8_t *dst,
*/
QDF_STATUS mlme_set_ext_opr_rate(struct wlan_objmgr_vdev *vdev, uint8_t *src,
qdf_size_t len);
#endif /* _WLAN_MLME_API_H_ */

Melihat File

@@ -513,6 +513,31 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_cm_roam_vendor_btm_params
*param);
/**
* wlan_cm_update_roam_scan_scheme_bitmap() - Set roam scan scheme bitmap for
* each vdev
* @psoc: PSOC pointer
* @vdev_id: VDEV id
* @roam_scan_scheme_bitmap: bitmap of roam triggers for which partial roam
* scan needs to be enabled
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint32_t roam_scan_scheme_bitmap);
/**
* wlan_cm_get_roam_scan_scheme_bitmap() - Get roam scan scheme bitmap value
* @psoc: PSOC pointer
* @vdev_id: VDEV id
*
* Return: Roam scan scheme bitmap value
*/
uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
#else
static inline
void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
@@ -570,5 +595,20 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_cm_roam_vendor_btm_params *param)
{}
static inline QDF_STATUS
wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint32_t roam_scan_scheme_bitmap)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline
uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
return 0;
}
#endif /* FEATURE_ROAM_OFFLOAD */
#endif /* WLAN_CM_ROAM_API_H__ */

Melihat File

@@ -94,6 +94,7 @@
#define WLAN_FILS_FT_MAX_LEN 48
#define WLAN_MAX_PMK_DUMP_BYTES 6
#define DEFAULT_ROAM_SCAN_SCHEME_BITMAP 0
/**
* enum roam_cfg_param - Type values for roaming parameters used as index
@@ -1312,12 +1313,18 @@ enum roam_scan_freq_scheme {
* @beacon_rssi_weight: Number of beacons to be used to calculate the average
* rssi of the AP.
* @hi_rssi_scan_delay: Roam scan delay in ms for High RSSI roam trigger.
* @roam_scan_scheme_bitmap: Bitmap of roam triggers for which partial channel
* map scan scheme needs to be enabled. Each bit in the bitmap corresponds to
* the bit position in the order provided by the enum roam_trigger_reason
* Ex: roam_scan_scheme_bitmap - 0x00110 will enable partial scan for below
* triggers:
* ROAM_TRIGGER_REASON_PER, ROAM_TRIGGER_REASON_BMISS
*/
struct wlan_cm_rso_configs {
uint8_t rescan_rssi_delta;
uint8_t beacon_rssi_weight;
uint32_t hi_rssi_scan_delay;
uint32_t roam_scan_scheme_bitmap;
};
/**

Melihat File

@@ -135,5 +135,24 @@ ucfg_cm_roaming_in_progress(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
return wlan_cm_roaming_in_progress(pdev, vdev_id);
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
static inline QDF_STATUS
ucfg_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint32_t roam_scan_scheme_bitmap)
{
return wlan_cm_update_roam_scan_scheme_bitmap(psoc, vdev_id,
roam_scan_scheme_bitmap);
}
#else
static inline QDF_STATUS
ucfg_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint32_t roam_scan_scheme_bitmap)
{
return QDF_STATUS_SUCCESS;
}
#endif
#endif

Melihat File

@@ -674,3 +674,65 @@ QDF_STATUS wlan_cm_update_fils_ft(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
QDF_STATUS
wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint32_t roam_scan_scheme_bitmap)
{
struct wlan_objmgr_vdev *vdev;
struct mlme_legacy_priv *mlme_priv;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev) {
mlme_err("vdev%d: vdev object is NULL", vdev_id);
return QDF_STATUS_E_FAILURE;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_err("vdev%d: vdev legacy private object is NULL", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_FAILURE;
}
mlme_priv->cm_roam.vdev_rso_config.roam_scan_scheme_bitmap =
roam_scan_scheme_bitmap;
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_SUCCESS;
}
uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
struct wlan_objmgr_vdev *vdev;
struct mlme_legacy_priv *mlme_priv;
uint32_t roam_scan_scheme_bitmap;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev) {
mlme_err("vdev%d: vdev object is NULL", vdev_id);
return 0;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_err("vdev%d: vdev legacy private object is NULL", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return 0;
}
roam_scan_scheme_bitmap =
mlme_priv->cm_roam.vdev_rso_config.roam_scan_scheme_bitmap;
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return roam_scan_scheme_bitmap;
}
#endif