driver: wifi: siwx91x: Add roaming configuration
- Defined Kconfig macros for Roam config - Added set roam configuration API call after BGSCAN Signed-off-by: Nitin Pandey <nitin.pandey@silabs.com>
This commit is contained in:
parent
bf22b61540
commit
50e36095dd
3 changed files with 59 additions and 0 deletions
|
@ -45,6 +45,44 @@ config NET_MGMT_EVENT_STACK_SIZE
|
||||||
config NET_MGMT_EVENT_QUEUE_SIZE
|
config NET_MGMT_EVENT_QUEUE_SIZE
|
||||||
default 10
|
default 10
|
||||||
|
|
||||||
|
config WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||||
|
bool "WiFi roaming support"
|
||||||
|
help
|
||||||
|
Enable this option to configure roaming parameters.
|
||||||
|
Roaming will be enabled automatically when the
|
||||||
|
background scan is active, improving connectivity
|
||||||
|
and performance during transitions between access points.
|
||||||
|
|
||||||
|
config WIFI_SILABS_SIWX91X_ROAMING_USE_DEAUTH
|
||||||
|
bool "Use deauth frames for roaming"
|
||||||
|
depends on WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||||
|
help
|
||||||
|
Enable this option to allow roaming using
|
||||||
|
deauthentication frames. By default, roaming
|
||||||
|
is performed using Null data packets.
|
||||||
|
|
||||||
|
config WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL
|
||||||
|
int "Default value of roam trigger level (in dBm)"
|
||||||
|
default -70
|
||||||
|
range -10 -100
|
||||||
|
depends on WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||||
|
help
|
||||||
|
Sets the default roam trigger level. Higher values trigger
|
||||||
|
earlier roaming; lower values delay it. It determines
|
||||||
|
when to start searching for a new AP.
|
||||||
|
|
||||||
|
config WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL_CHANGE
|
||||||
|
int "Default value of roam trigger level change (in dBm)"
|
||||||
|
default 5
|
||||||
|
range 0 90
|
||||||
|
depends on WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||||
|
help
|
||||||
|
Configure the default trigger level change for WiFi roaming.
|
||||||
|
This value determines the change in signal strength (in dBm)
|
||||||
|
required to initiate a roaming event. A smaller value may result
|
||||||
|
in more sensitive roaming behavior, while a larger value can
|
||||||
|
reduce the frequency of roaming events. It determines
|
||||||
|
the signal difference needed to switch to a new AP.
|
||||||
|
|
||||||
config WIFI_SILABS_SIWX91X_ADV_SCAN_THRESHOLD
|
config WIFI_SILABS_SIWX91X_ADV_SCAN_THRESHOLD
|
||||||
int "Advanced scan threshold (in dBm)"
|
int "Advanced scan threshold (in dBm)"
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "sl_net_default_values.h"
|
#include "sl_net_default_values.h"
|
||||||
#include "sl_wifi.h"
|
#include "sl_wifi.h"
|
||||||
#include "sl_net.h"
|
#include "sl_net.h"
|
||||||
|
#include "sl_wifi_constants.h"
|
||||||
|
|
||||||
#define SIWX91X_DRIVER_VERSION KERNEL_VERSION_STRING
|
#define SIWX91X_DRIVER_VERSION KERNEL_VERSION_STRING
|
||||||
|
|
||||||
|
@ -537,6 +538,15 @@ static int siwx91x_scan(const struct device *dev, struct wifi_scan_params *z_sca
|
||||||
.enable_multi_probe = CONFIG_WIFI_SILABS_SIWX91X_ADV_MULTIPROBE,
|
.enable_multi_probe = CONFIG_WIFI_SILABS_SIWX91X_ADV_MULTIPROBE,
|
||||||
.enable_instant_scan = CONFIG_WIFI_SILABS_SIWX91X_ENABLE_INSTANT_SCAN,
|
.enable_instant_scan = CONFIG_WIFI_SILABS_SIWX91X_ENABLE_INSTANT_SCAN,
|
||||||
};
|
};
|
||||||
|
sl_wifi_roam_configuration_t roam_configuration = {
|
||||||
|
#ifdef CONFIG_WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||||
|
.trigger_level = CONFIG_WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL,
|
||||||
|
.trigger_level_change = CONFIG_WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL_CHANGE,
|
||||||
|
#else
|
||||||
|
.trigger_level = SL_WIFI_NEVER_ROAM,
|
||||||
|
.trigger_level_change = 0,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
struct siwx91x_dev *sidev = dev->data;
|
struct siwx91x_dev *sidev = dev->data;
|
||||||
sl_wifi_interface_t interface;
|
sl_wifi_interface_t interface;
|
||||||
sl_wifi_ssid_t ssid = { };
|
sl_wifi_ssid_t ssid = { };
|
||||||
|
@ -573,6 +583,12 @@ static int siwx91x_scan(const struct device *dev, struct wifi_scan_params *z_sca
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = sl_wifi_set_roam_configuration(interface, &roam_configuration);
|
||||||
|
if (ret != SL_STATUS_OK) {
|
||||||
|
LOG_ERR("roaming configuration failed with status %x", ret);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
sl_scan_config.type = SL_WIFI_SCAN_TYPE_ADV_SCAN;
|
sl_scan_config.type = SL_WIFI_SCAN_TYPE_ADV_SCAN;
|
||||||
sl_scan_config.periodic_scan_interval =
|
sl_scan_config.periodic_scan_interval =
|
||||||
CONFIG_WIFI_SILABS_SIWX91X_ADV_SCAN_PERIODICITY;
|
CONFIG_WIFI_SILABS_SIWX91X_ADV_SCAN_PERIODICITY;
|
||||||
|
|
|
@ -45,6 +45,11 @@ int siwg91x_get_nwp_config(int wifi_oper_mode, sl_wifi_device_configuration_t *g
|
||||||
if (wifi_oper_mode == SL_SI91X_CLIENT_MODE) {
|
if (wifi_oper_mode == SL_SI91X_CLIENT_MODE) {
|
||||||
boot_config->oper_mode = SL_SI91X_CLIENT_MODE;
|
boot_config->oper_mode = SL_SI91X_CLIENT_MODE;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_WIFI_SILABS_SIWX91X_ROAMING_USE_DEAUTH)) {
|
||||||
|
boot_config->custom_feature_bit_map |=
|
||||||
|
SL_SI91X_CUSTOM_FEAT_ROAM_WITH_DEAUTH_OR_NULL_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_WIFI_SILABS_SIWX91X) &&
|
if (IS_ENABLED(CONFIG_WIFI_SILABS_SIWX91X) &&
|
||||||
IS_ENABLED(CONFIG_BT_SILABS_SIWX91X)) {
|
IS_ENABLED(CONFIG_BT_SILABS_SIWX91X)) {
|
||||||
boot_config->coex_mode = SL_SI91X_WLAN_BLE_MODE;
|
boot_config->coex_mode = SL_SI91X_WLAN_BLE_MODE;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue