mac80211: sync with master branch as of 9edff13abd97
[openwrt/staging/nbd.git] / package / kernel / mac80211 / patches / 357-0003-brcmfmac-move-pno-helper-functions-in-separate-sourc.patch
diff --git a/package/kernel/mac80211/patches/357-0003-brcmfmac-move-pno-helper-functions-in-separate-sourc.patch b/package/kernel/mac80211/patches/357-0003-brcmfmac-move-pno-helper-functions-in-separate-sourc.patch
deleted file mode 100644 (file)
index 94f2e6b..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-From ac55136f43d3336c7b40238b779c404008229929 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <arend.vanspriel@broadcom.com>
-Date: Wed, 23 Nov 2016 10:25:22 +0000
-Subject: [PATCH] brcmfmac: move pno helper functions in separate source file
-
-Introducing new source file for pno related functionality. Moving
-existing pno functions.
-
-Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
-Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
-Reviewed-by: Franky Lin <franky.lin@broadcom.com>
-Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../wireless/broadcom/brcm80211/brcmfmac/Makefile  |   3 +-
- .../broadcom/brcm80211/brcmfmac/cfg80211.c         |  93 ++-----------------
- .../net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 100 +++++++++++++++++++++
- .../net/wireless/broadcom/brcm80211/brcmfmac/pno.h |  40 +++++++++
- 4 files changed, 150 insertions(+), 86 deletions(-)
- create mode 100644 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
- create mode 100644 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
-@@ -35,7 +35,8 @@ brcmfmac-objs += \
-               firmware.o \
-               feature.o \
-               btcoex.o \
--              vendor.o
-+              vendor.o \
-+              pno.o
- brcmfmac-$(CPTCFG_BRCMFMAC_PROTO_BCDC) += \
-               bcdc.o
- brcmfmac-$(CPTCFG_BRCMFMAC_PROTO_MSGBUF) += \
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -32,6 +32,7 @@
- #include "fwil_types.h"
- #include "p2p.h"
- #include "btcoex.h"
-+#include "pno.h"
- #include "cfg80211.h"
- #include "feature.h"
- #include "fwil.h"
-@@ -41,16 +42,6 @@
- #include "common.h"
- #define BRCMF_SCAN_IE_LEN_MAX         2048
--#define BRCMF_PNO_VERSION             2
--#define BRCMF_PNO_TIME                        30
--#define BRCMF_PNO_REPEAT              4
--#define BRCMF_PNO_FREQ_EXPO_MAX               3
--#define BRCMF_PNO_MAX_PFN_COUNT               16
--#define BRCMF_PNO_ENABLE_ADAPTSCAN_BIT        6
--#define BRCMF_PNO_HIDDEN_BIT          2
--#define BRCMF_PNO_WPA_AUTH_ANY                0xFFFFFFFF
--#define BRCMF_PNO_SCAN_COMPLETE               1
--#define BRCMF_PNO_SCAN_INCOMPLETE     0
- #define WPA_OUI                               "\x00\x50\xF2"  /* WPA OUI */
- #define WPA_OUI_TYPE                  1
-@@ -3323,76 +3314,6 @@ out_err:
-       return err;
- }
--static int brcmf_dev_pno_clean(struct net_device *ndev)
--{
--      int ret;
--
--      /* Disable pfn */
--      ret = brcmf_fil_iovar_int_set(netdev_priv(ndev), "pfn", 0);
--      if (ret == 0) {
--              /* clear pfn */
--              ret = brcmf_fil_iovar_data_set(netdev_priv(ndev), "pfnclear",
--                                             NULL, 0);
--      }
--      if (ret < 0)
--              brcmf_err("failed code %d\n", ret);
--
--      return ret;
--}
--
--static int brcmf_dev_pno_config(struct brcmf_if *ifp,
--                              struct cfg80211_sched_scan_request *request)
--{
--      struct brcmf_pno_param_le pfn_param;
--      struct brcmf_pno_macaddr_le pfn_mac;
--      s32 err;
--      u8 *mac_mask;
--      int i;
--
--      memset(&pfn_param, 0, sizeof(pfn_param));
--      pfn_param.version = cpu_to_le32(BRCMF_PNO_VERSION);
--
--      /* set extra pno params */
--      pfn_param.flags = cpu_to_le16(1 << BRCMF_PNO_ENABLE_ADAPTSCAN_BIT);
--      pfn_param.repeat = BRCMF_PNO_REPEAT;
--      pfn_param.exp = BRCMF_PNO_FREQ_EXPO_MAX;
--
--      /* set up pno scan fr */
--      pfn_param.scan_freq = cpu_to_le32(BRCMF_PNO_TIME);
--
--      err = brcmf_fil_iovar_data_set(ifp, "pfn_set", &pfn_param,
--                                     sizeof(pfn_param));
--      if (err) {
--              brcmf_err("pfn_set failed, err=%d\n", err);
--              return err;
--      }
--
--      /* Find out if mac randomization should be turned on */
--      if (!(request->flags & NL80211_SCAN_FLAG_RANDOM_ADDR))
--              return 0;
--
--      pfn_mac.version = BRCMF_PFN_MACADDR_CFG_VER;
--      pfn_mac.flags = BRCMF_PFN_MAC_OUI_ONLY | BRCMF_PFN_SET_MAC_UNASSOC;
--
--      memcpy(pfn_mac.mac, request->mac_addr, ETH_ALEN);
--      mac_mask = request->mac_addr_mask;
--      for (i = 0; i < ETH_ALEN; i++) {
--              pfn_mac.mac[i] &= mac_mask[i];
--              pfn_mac.mac[i] |= get_random_int() & ~(mac_mask[i]);
--      }
--      /* Clear multi bit */
--      pfn_mac.mac[0] &= 0xFE;
--      /* Set locally administered */
--      pfn_mac.mac[0] |= 0x02;
--
--      err = brcmf_fil_iovar_data_set(ifp, "pfn_macaddr", &pfn_mac,
--                                     sizeof(pfn_mac));
--      if (err)
--              brcmf_err("pfn_macaddr failed, err=%d\n", err);
--
--      return err;
--}
--
- static int
- brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy,
-                               struct net_device *ndev,
-@@ -3436,15 +3357,16 @@ brcmf_cfg80211_sched_scan_start(struct w
-       if (request->n_match_sets > 0) {
-               /* clean up everything */
--              ret = brcmf_dev_pno_clean(ndev);
-+              ret = brcmf_pno_clean(ifp);
-               if  (ret < 0) {
-                       brcmf_err("failed error=%d\n", ret);
-                       return ret;
-               }
-               /* configure pno */
--              if (brcmf_dev_pno_config(ifp, request))
--                      return -EINVAL;
-+              ret = brcmf_pno_config(ifp, request);
-+              if (ret < 0)
-+                      return ret;
-               /* configure each match set */
-               for (i = 0; i < request->n_match_sets; i++) {
-@@ -3486,11 +3408,12 @@ static int brcmf_cfg80211_sched_scan_sto
-                                         struct net_device *ndev)
- {
-       struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
-+      struct brcmf_if *ifp = netdev_priv(ndev);
-       brcmf_dbg(SCAN, "enter\n");
--      brcmf_dev_pno_clean(ndev);
-+      brcmf_pno_clean(ifp);
-       if (cfg->sched_escan)
--              brcmf_notify_escan_complete(cfg, netdev_priv(ndev), true, true);
-+              brcmf_notify_escan_complete(cfg, ifp, true, true);
-       return 0;
- }
---- /dev/null
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
-@@ -0,0 +1,100 @@
-+/*
-+ * Copyright (c) 2016 Broadcom
-+ *
-+ * Permission to use, copy, modify, and/or distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ */
-+#include <linux/netdevice.h>
-+#include <net/cfg80211.h>
-+
-+#include "core.h"
-+#include "debug.h"
-+#include "pno.h"
-+#include "fwil.h"
-+#include "fwil_types.h"
-+
-+#define BRCMF_PNO_VERSION             2
-+#define BRCMF_PNO_TIME                        30
-+#define BRCMF_PNO_REPEAT              4
-+#define BRCMF_PNO_FREQ_EXPO_MAX               3
-+#define BRCMF_PNO_ENABLE_ADAPTSCAN_BIT        6
-+#define BRCMF_PNO_SCAN_INCOMPLETE     0
-+
-+int brcmf_pno_clean(struct brcmf_if *ifp)
-+{
-+      int ret;
-+
-+      /* Disable pfn */
-+      ret = brcmf_fil_iovar_int_set(ifp, "pfn", 0);
-+      if (ret == 0) {
-+              /* clear pfn */
-+              ret = brcmf_fil_iovar_data_set(ifp, "pfnclear", NULL, 0);
-+      }
-+      if (ret < 0)
-+              brcmf_err("failed code %d\n", ret);
-+
-+      return ret;
-+}
-+
-+int brcmf_pno_config(struct brcmf_if *ifp,
-+                   struct cfg80211_sched_scan_request *request)
-+{
-+      struct brcmf_pno_param_le pfn_param;
-+      struct brcmf_pno_macaddr_le pfn_mac;
-+      s32 err;
-+      u8 *mac_mask;
-+      int i;
-+
-+      memset(&pfn_param, 0, sizeof(pfn_param));
-+      pfn_param.version = cpu_to_le32(BRCMF_PNO_VERSION);
-+
-+      /* set extra pno params */
-+      pfn_param.flags = cpu_to_le16(1 << BRCMF_PNO_ENABLE_ADAPTSCAN_BIT);
-+      pfn_param.repeat = BRCMF_PNO_REPEAT;
-+      pfn_param.exp = BRCMF_PNO_FREQ_EXPO_MAX;
-+
-+      /* set up pno scan fr */
-+      pfn_param.scan_freq = cpu_to_le32(BRCMF_PNO_TIME);
-+
-+      err = brcmf_fil_iovar_data_set(ifp, "pfn_set", &pfn_param,
-+                                     sizeof(pfn_param));
-+      if (err) {
-+              brcmf_err("pfn_set failed, err=%d\n", err);
-+              return err;
-+      }
-+
-+      /* Find out if mac randomization should be turned on */
-+      if (!(request->flags & NL80211_SCAN_FLAG_RANDOM_ADDR))
-+              return 0;
-+
-+      pfn_mac.version = BRCMF_PFN_MACADDR_CFG_VER;
-+      pfn_mac.flags = BRCMF_PFN_MAC_OUI_ONLY | BRCMF_PFN_SET_MAC_UNASSOC;
-+
-+      memcpy(pfn_mac.mac, request->mac_addr, ETH_ALEN);
-+      mac_mask = request->mac_addr_mask;
-+      for (i = 0; i < ETH_ALEN; i++) {
-+              pfn_mac.mac[i] &= mac_mask[i];
-+              pfn_mac.mac[i] |= get_random_int() & ~(mac_mask[i]);
-+      }
-+      /* Clear multi bit */
-+      pfn_mac.mac[0] &= 0xFE;
-+      /* Set locally administered */
-+      pfn_mac.mac[0] |= 0x02;
-+
-+      err = brcmf_fil_iovar_data_set(ifp, "pfn_macaddr", &pfn_mac,
-+                                     sizeof(pfn_mac));
-+      if (err)
-+              brcmf_err("pfn_macaddr failed, err=%d\n", err);
-+
-+      return err;
-+}
-+
---- /dev/null
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
-@@ -0,0 +1,40 @@
-+/*
-+ * Copyright (c) 2016 Broadcom
-+ *
-+ * Permission to use, copy, modify, and/or distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ */
-+#ifndef _BRCMF_PNO_H
-+#define _BRCMF_PNO_H
-+
-+#define BRCMF_PNO_SCAN_COMPLETE               1
-+#define BRCMF_PNO_WPA_AUTH_ANY                0xFFFFFFFF
-+#define BRCMF_PNO_HIDDEN_BIT          2
-+#define BRCMF_PNO_MAX_PFN_COUNT               16
-+
-+/**
-+ * brcmf_pno_clean - disable and clear pno in firmware.
-+ *
-+ * @ifp: interface object used.
-+ */
-+int brcmf_pno_clean(struct brcmf_if *ifp);
-+
-+/**
-+ * brcmf_pno_config - configure pno parameters.
-+ *
-+ * @ifp: interface object used.
-+ * @request: scheduled scan parameters.
-+ */
-+int brcmf_pno_config(struct brcmf_if *ifp,
-+                   struct cfg80211_sched_scan_request *request);
-+
-+#endif /* _BRCMF_PNO_H */