Commit 50e36095 authored by Nitin Pandey's avatar Nitin Pandey Committed by Benjamin Cabé
Browse files

driver: wifi: siwx91x: Add roaming configuration

- Defined Kconfig macros for Roam config
- Added set roam configuration API call
  after BGSCAN

Signed-off-by: default avatarNitin Pandey <nitin.pandey@silabs.com>
parent bf22b615
Loading
Loading
Loading
Loading
+38 −0
Changes for drivers/wifi/siwx91x/Kconfig.siwx91x: 38 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -45,6 +45,44 @@ config NET_MGMT_EVENT_STACK_SIZE
config NET_MGMT_EVENT_QUEUE_SIZE
	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
	int "Advanced scan threshold (in dBm)"
+16 −0
Changes for drivers/wifi/siwx91x/siwx91x_wifi.c: 16 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include "sl_net_default_values.h"
#include "sl_wifi.h"
#include "sl_net.h"
#include "sl_wifi_constants.h"

#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_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;
	sl_wifi_interface_t interface;
	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;
		}

		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.periodic_scan_interval =
			CONFIG_WIFI_SILABS_SIWX91X_ADV_SCAN_PERIODICITY;
+5 −0
Changes for soc/silabs/silabs_siwx91x/siwg917/nwp.c: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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) {
		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) &&
		    IS_ENABLED(CONFIG_BT_SILABS_SIWX91X)) {
			boot_config->coex_mode = SL_SI91X_WLAN_BLE_MODE;