morrownr 2023-06-24 13:00:21 -05:00
commit dc9ee6c6a8
5 changed files with 41 additions and 18 deletions

View File

@ -12799,14 +12799,15 @@ void linked_status_chk(_adapter *padapter, u8 from_timer)
#elif defined(CONFIG_LAYER2_ROAMING)
if (rtw_chk_roam_flags(padapter, RTW_ROAM_ACTIVE)) {
RTW_INFO("signal_strength_data.avg_val = %d\n", precvpriv->signal_strength_data.avg_val);
if ((precvpriv->signal_strength_data.avg_val < pmlmepriv->roam_rssi_threshold)
&& (rtw_get_passing_time_ms(pmlmepriv->last_roaming) >= pmlmepriv->roam_scan_int*2000)) {
if (precvpriv->signal_strength_data.avg_val < pmlmepriv->roam_rssi_threshold) {
if (rtw_get_passing_time_ms(pmlmepriv->last_roaming) >= pmlmepriv->roam_scan_int*2000) {
#ifdef CONFIG_RTW_80211K
rtw_roam_nb_discover(padapter, _FALSE);
rtw_roam_nb_discover(padapter, _FALSE);
#endif
pmlmepriv->need_to_roam = _TRUE;
rtw_drv_scan_by_self(padapter, RTW_AUTO_SCAN_REASON_ROAM);
pmlmepriv->last_roaming = rtw_get_current_time();
pmlmepriv->need_to_roam = _TRUE;
rtw_drv_scan_by_self(padapter, RTW_AUTO_SCAN_REASON_ROAM);
pmlmepriv->last_roaming = rtw_get_current_time();
}
} else
pmlmepriv->need_to_roam = _FALSE;
}

View File

@ -79,6 +79,11 @@ uint loadparam(_adapter *adapter);
#ifdef PLATFORM_LINUX
int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && defined(CONFIG_MP_INCLUDED))
int rtw_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
void __user *data, int cmd);
#endif
int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
struct net_device *rtw_init_netdev(_adapter *padapter);

View File

@ -539,9 +539,9 @@ struct tdls_txmgmt {
/* used for mlme_priv.roam_flags */
enum {
RTW_ROAM_ON_EXPIRED = BIT0,
RTW_ROAM_ON_RESUME = BIT1,
RTW_ROAM_ACTIVE = BIT2,
RTW_ROAM_ON_EXPIRED = BIT0, /* roam when AP is expired */
RTW_ROAM_ON_RESUME = BIT1, /* roam when device is resumed (after being suspended) */
RTW_ROAM_ACTIVE = BIT2, /* active roam when current rssi (signal strength) is too low */
};
#define UNASOC_STA_SRC_RX_BMC 0
@ -568,22 +568,22 @@ struct unassoc_sta_info {
#endif
struct mlme_priv {
_lock lock;
sint fw_state; /* shall we protect this variable? maybe not necessarily... */
u8 to_join; /* flag */
u16 join_status;
#ifdef CONFIG_LAYER2_ROAMING
u8 to_roam; /* roaming trying times */
u8 to_roam; /* internal counter for #roaming scans */
struct wlan_network *roam_network; /* the target of active roam */
u8 roam_flags;
u8 roam_rssi_diff_th; /* rssi difference threshold for active scan candidate selection */
u32 roam_scan_int; /* scan interval for active roam (Unit:2 second)*/
u32 roam_scanr_exp_ms; /* scan result expire time in ms for roam */
u8 roam_flags; /* defines roam types - check enum above */
u8 roam_rssi_diff_th; /* during network scan/survey: the rssi difference between the current network and
* the candidate network must be above this threshold to withhold the candidate */
u32 roam_scan_int; /* minimum interval (unit: 2 seconds) between roaming scans */
u32 roam_scanr_exp_ms; /* expire time in ms: only withhold candidate if last seen within expire time */
u8 roam_tgt_addr[ETH_ALEN]; /* request to roam to speicific target without other consideration */
u8 roam_rssi_threshold;
systime last_roaming;
bool need_to_roam;
u8 roam_rssi_threshold; /* rssi (signal strength) must be below this threshold to start a roaming scan */
systime last_roaming; /* time of start of last roaming scan */
bool need_to_roam; /* flag to check if roaming is (still) necessary */
#endif
u32 defs_lmt_sta;

View File

@ -13058,3 +13058,14 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
return ret;
}
#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && defined(CONFIG_MP_INCLUDED))
int rtw_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
void __user *data, int cmd)
{
if (cmd != SIOCDEVPRIVATE)
return -EOPNOTSUPP;
return rtw_ioctl_standard_wext_private(dev, ifr);
}
#endif

View File

@ -1849,6 +1849,9 @@ static const struct net_device_ops rtw_netdev_ops = {
.ndo_set_mac_address = rtw_net_set_mac_address,
.ndo_get_stats = rtw_net_get_stats,
.ndo_do_ioctl = rtw_ioctl,
#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && defined(CONFIG_MP_INCLUDED))
.ndo_siocdevprivate = rtw_siocdevprivate,
#endif
};
#endif
@ -3347,6 +3350,9 @@ static const struct net_device_ops rtw_netdev_vir_if_ops = {
.ndo_set_mac_address = rtw_net_set_mac_address,
.ndo_get_stats = rtw_net_get_stats,
.ndo_do_ioctl = rtw_ioctl,
#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && defined(CONFIG_MP_INCLUDED))
.ndo_siocdevprivate = rtw_siocdevprivate,
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
.ndo_select_queue = rtw_select_queue,
#endif