aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/376-0006-brcmfmac-Cleanup-roaming-configuration.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/376-0006-brcmfmac-Cleanup-roaming-configuration.patch')
-rw-r--r--package/kernel/mac80211/patches/376-0006-brcmfmac-Cleanup-roaming-configuration.patch180
1 files changed, 180 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/376-0006-brcmfmac-Cleanup-roaming-configuration.patch b/package/kernel/mac80211/patches/376-0006-brcmfmac-Cleanup-roaming-configuration.patch
new file mode 100644
index 0000000000..41b8770dbd
--- /dev/null
+++ b/package/kernel/mac80211/patches/376-0006-brcmfmac-Cleanup-roaming-configuration.patch
@@ -0,0 +1,180 @@
+From: Hante Meuleman <meuleman@broadcom.com>
+Date: Wed, 25 Nov 2015 11:32:42 +0100
+Subject: [PATCH] brcmfmac: Cleanup roaming configuration.
+
+Put all roaming configuration related code in one place and
+configure timeout based upon roaming setting.
+
+Reviewed-by: Arend Van Spriel <arend@broadcom.com>
+Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
+Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
+Signed-off-by: Arend van Spriel <arend@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+
+--- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
+@@ -4755,7 +4755,6 @@ struct brcmf_cfg80211_vif *brcmf_alloc_v
+ vif->wdev.iftype = type;
+
+ vif->pm_block = pm_block;
+- vif->roam_off = -1;
+
+ brcmf_init_prof(&vif->profile);
+
+@@ -5305,35 +5304,33 @@ static void init_vif_event(struct brcmf_
+ mutex_init(&event->vif_event_lock);
+ }
+
+-static s32
+-brcmf_dongle_roam(struct brcmf_if *ifp, u32 bcn_timeout)
++static s32 brcmf_dongle_roam(struct brcmf_if *ifp)
+ {
+- s32 err = 0;
++ s32 err;
++ u32 bcn_timeout;
+ __le32 roamtrigger[2];
+ __le32 roam_delta[2];
+
+- /*
+- * Setup timeout if Beacons are lost and roam is
+- * off to report link down
+- */
+- if (brcmf_roamoff) {
+- err = brcmf_fil_iovar_int_set(ifp, "bcn_timeout", bcn_timeout);
+- if (err) {
+- brcmf_err("bcn_timeout error (%d)\n", err);
+- goto dongle_rom_out;
+- }
++ /* Configure beacon timeout value based upon roaming setting */
++ if (brcmf_roamoff)
++ bcn_timeout = BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_OFF;
++ else
++ bcn_timeout = BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_ON;
++ err = brcmf_fil_iovar_int_set(ifp, "bcn_timeout", bcn_timeout);
++ if (err) {
++ brcmf_err("bcn_timeout error (%d)\n", err);
++ goto roam_setup_done;
+ }
+
+- /*
+- * Enable/Disable built-in roaming to allow supplicant
+- * to take care of roaming
++ /* Enable/Disable built-in roaming to allow supplicant to take care of
++ * roaming.
+ */
+ brcmf_dbg(INFO, "Internal Roaming = %s\n",
+ brcmf_roamoff ? "Off" : "On");
+ err = brcmf_fil_iovar_int_set(ifp, "roam_off", !!(brcmf_roamoff));
+ if (err) {
+ brcmf_err("roam_off error (%d)\n", err);
+- goto dongle_rom_out;
++ goto roam_setup_done;
+ }
+
+ roamtrigger[0] = cpu_to_le32(WL_ROAM_TRIGGER_LEVEL);
+@@ -5342,7 +5339,7 @@ brcmf_dongle_roam(struct brcmf_if *ifp,
+ (void *)roamtrigger, sizeof(roamtrigger));
+ if (err) {
+ brcmf_err("WLC_SET_ROAM_TRIGGER error (%d)\n", err);
+- goto dongle_rom_out;
++ goto roam_setup_done;
+ }
+
+ roam_delta[0] = cpu_to_le32(WL_ROAM_DELTA);
+@@ -5351,10 +5348,10 @@ brcmf_dongle_roam(struct brcmf_if *ifp,
+ (void *)roam_delta, sizeof(roam_delta));
+ if (err) {
+ brcmf_err("WLC_SET_ROAM_DELTA error (%d)\n", err);
+- goto dongle_rom_out;
++ goto roam_setup_done;
+ }
+
+-dongle_rom_out:
++roam_setup_done:
+ return err;
+ }
+
+@@ -6069,7 +6066,7 @@ static s32 brcmf_config_dongle(struct br
+ brcmf_dbg(INFO, "power save set to %s\n",
+ (power_mode ? "enabled" : "disabled"));
+
+- err = brcmf_dongle_roam(ifp, WL_BEACON_TIMEOUT);
++ err = brcmf_dongle_roam(ifp);
+ if (err)
+ goto default_conf_out;
+ err = brcmf_cfg80211_change_iface(wdev->wiphy, ndev, wdev->iftype,
+--- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
++++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
+@@ -28,7 +28,6 @@
+ #define WL_EXTRA_BUF_MAX 2048
+ #define WL_ROAM_TRIGGER_LEVEL -75
+ #define WL_ROAM_DELTA 20
+-#define WL_BEACON_TIMEOUT 3
+
+ #define WL_SCAN_CHANNEL_TIME 40
+ #define WL_SCAN_UNASSOC_TIME 40
+@@ -77,6 +76,9 @@
+
+ #define BRCMF_MAX_DEFAULT_KEYS 4
+
++/* beacon loss timeout defaults */
++#define BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_ON 2
++#define BRCMF_DEFAULT_BCN_TIMEOUT_ROAM_OFF 4
+
+ /**
+ * enum brcmf_scan_status - scan engine status
+@@ -178,7 +180,6 @@ struct vif_saved_ie {
+ * @ifp: lower layer interface pointer
+ * @wdev: wireless device.
+ * @profile: profile information.
+- * @roam_off: roaming state.
+ * @sme_state: SME state using enum brcmf_vif_status bits.
+ * @pm_block: power-management blocked.
+ * @list: linked list.
+@@ -189,7 +190,6 @@ struct brcmf_cfg80211_vif {
+ struct brcmf_if *ifp;
+ struct wireless_dev wdev;
+ struct brcmf_cfg80211_profile profile;
+- s32 roam_off;
+ unsigned long sme_state;
+ bool pm_block;
+ struct vif_saved_ie saved_ie;
+--- a/drivers/net/wireless/brcm80211/brcmfmac/common.c
++++ b/drivers/net/wireless/brcm80211/brcmfmac/common.c
+@@ -29,7 +29,6 @@
+
+ const u8 ALLFFMAC[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+
+-#define BRCMF_DEFAULT_BCN_TIMEOUT 3
+ #define BRCMF_DEFAULT_SCAN_CHANNEL_TIME 40
+ #define BRCMF_DEFAULT_SCAN_UNASSOC_TIME 40
+
+@@ -107,26 +106,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
+ goto done;
+ }
+
+- /*
+- * Setup timeout if Beacons are lost and roam is off to report
+- * link down
+- */
+- err = brcmf_fil_iovar_int_set(ifp, "bcn_timeout",
+- BRCMF_DEFAULT_BCN_TIMEOUT);
+- if (err) {
+- brcmf_err("bcn_timeout error (%d)\n", err);
+- goto done;
+- }
+-
+- /* Enable/Disable build-in roaming to allowed ext supplicant to take
+- * of romaing
+- */
+- err = brcmf_fil_iovar_int_set(ifp, "roam_off", 1);
+- if (err) {
+- brcmf_err("roam_off error (%d)\n", err);
+- goto done;
+- }
+-
+ /* Setup join_pref to select target by RSSI(with boost on 5GHz) */
+ join_pref_params[0].type = BRCMF_JOIN_PREF_RSSI_DELTA;
+ join_pref_params[0].len = 2;