qcacld-3.0: Update linkspeed state to F/W for roaming protocol part
To avoid unmeaningful roaming, when low RSSI trigger, only roam when rx linkspeed is also bad. Steps: 1. F/W indicates feature supported by: wmi_service_linkspeed_roam_trigger_support 2. App sets vdev rx link speed threshold by vendor cmd. 3. Bus_bw_work gets rx link speed from data path periodically. 4. If found rx link speed change from good to poor, or poor to good, send to F/W. 5. F/W low rssi roaming is triggered only when both RSSI and link speed are poor. Change-Id: I56829e42b26e407dd8e989a870aee2b3ea406232 CRs-Fixed: 3261996
This commit is contained in:

committed by
Madan Koyyalamudi

parent
ebfe40c98a
commit
5a9556bf4b
@@ -184,6 +184,46 @@ target_if_cm_roam_rt_stats_config(struct wlan_objmgr_vdev *vdev,
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
|
||||
/**
|
||||
* target_if_cm_roam_linkspeed_state() - Send link speed state for roaming
|
||||
* commands to wmi
|
||||
* @vdev: vdev object
|
||||
* @vdev_id: vdev id
|
||||
* @is_linkspeed_good: true, don't need low rssi roaming
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_linkspeed_state(struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t vdev_id, bool is_linkspeed_good)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return status;
|
||||
|
||||
status = target_if_roam_set_param(wmi_handle,
|
||||
vdev_id,
|
||||
WMI_ROAM_PARAM_LINKSPEED_STATE,
|
||||
is_linkspeed_good);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
target_if_err("Failed to set WMI_ROAM_PARAM_LINKSPEED_STATE");
|
||||
|
||||
return status;
|
||||
}
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
target_if_cm_roam_linkspeed_state(struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t vdev_id, bool is_linkspeed_good)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_VENDOR_HANDOFF_CONTROL
|
||||
/**
|
||||
* target_if_cm_roam_vendor_handoff_config() - Send vendor handoff config
|
||||
@@ -228,6 +268,27 @@ static inline void target_if_cm_roam_register_vendor_handoff_ops(
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
|
||||
/**
|
||||
* target_if_cm_roam_register_linkspeed_state() - Register tx ops to send
|
||||
* roam link speed state command to fw
|
||||
* @tx_ops: structure of tx function pointers for roaming related commands
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
target_if_cm_roam_register_linkspeed_state(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
{
|
||||
tx_ops->send_roam_linkspeed_state =
|
||||
target_if_cm_roam_linkspeed_state;
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
target_if_cm_roam_register_linkspeed_state(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
{
|
||||
@@ -236,6 +297,7 @@ target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
tx_ops->send_roam_sync_complete_cmd = target_if_cm_roam_send_roam_sync_complete;
|
||||
tx_ops->send_roam_rt_stats_config = target_if_cm_roam_rt_stats_config;
|
||||
target_if_cm_roam_register_vendor_handoff_ops(tx_ops);
|
||||
target_if_cm_roam_register_linkspeed_state(tx_ops);
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
|
Reference in New Issue
Block a user