Compare commits
15 Commits
v17.01.7
...
lede-17.01
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beaa2ecc10 | ||
|
|
0d38db6aab | ||
|
|
4f6837180e | ||
|
|
0082e90e4f | ||
|
|
21cc21e9ec | ||
|
|
128366e1a8 | ||
|
|
0b8ca9c275 | ||
|
|
9d95a218de | ||
|
|
d9300b721f | ||
|
|
b55dd9be3f | ||
|
|
b5b5b23b30 | ||
|
|
7da50e5f62 | ||
|
|
a63907b3bb | ||
|
|
1592815b2c | ||
|
|
fab672cc7a |
@@ -1,4 +1,4 @@
|
||||
src-git packages https://git.lede-project.org/feed/packages.git^545d2fadd7245783e40f235fe2c5d8c3ab1549cd
|
||||
src-git luci https://git.lede-project.org/project/luci.git^71e2af4f51567061600840040508d642120a8532
|
||||
src-git routing https://git.lede-project.org/feed/routing.git^af18086ba8de36e7fbc696cb39f634f6a7ea34de
|
||||
src-git telephony https://git.lede-project.org/feed/telephony.git^31398a3759c99bdb2dca359b78e25c17b6dd434a
|
||||
src-git packages https://git.lede-project.org/feed/packages.git;lede-17.01
|
||||
src-git luci https://git.lede-project.org/project/luci.git;lede-17.01
|
||||
src-git routing https://git.lede-project.org/feed/routing.git;lede-17.01
|
||||
src-git telephony https://git.lede-project.org/feed/telephony.git;lede-17.01
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
LINUX_RELEASE?=1
|
||||
|
||||
LINUX_VERSION-3.18 = .43
|
||||
LINUX_VERSION-4.4 = .182
|
||||
LINUX_VERSION-4.4 = .194
|
||||
|
||||
LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c
|
||||
LINUX_KERNEL_HASH-4.4.182 = c409d88f61cd9a37cbba36d5d9c8162263eb1e5c9380efaf880a3ec10cd88527
|
||||
LINUX_KERNEL_HASH-4.4.194 = 7f63e893f1a178c25646a302ae7425423a3f1b72fc5d6895a2716e4bb6b8744f
|
||||
|
||||
ifdef KERNEL_PATCHVER
|
||||
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
||||
|
||||
@@ -31,16 +31,16 @@ qstrip_escape=$(subst ','\'',$(call qstrip,$(1)))
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip_escape,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),17.01.7)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),17.01-SNAPSHOT)
|
||||
|
||||
VERSION_CODE:=$(call qstrip_escape,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r4030-6028f00df0)
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION))
|
||||
|
||||
VERSION_NICK:=$(call qstrip_escape,$(CONFIG_VERSION_NICK))
|
||||
VERSION_NICK:=$(if $(VERSION_NICK),$(VERSION_NICK),$(RELEASE))
|
||||
|
||||
VERSION_REPO:=$(call qstrip_escape,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/releases/17.01.7)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/releases/17.01-SNAPSHOT)
|
||||
|
||||
VERSION_DIST:=$(call qstrip_escape,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),LEDE)
|
||||
|
||||
@@ -80,8 +80,12 @@ $(curdir)/index: FORCE
|
||||
mkdir -p $$d; \
|
||||
cd $$d || continue; \
|
||||
$(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages.manifest; \
|
||||
grep -vE '^(Maintainer|LicenseFiles|Source|Require)' Packages.manifest > Packages && \
|
||||
gzip -9nc Packages > Packages.gz; \
|
||||
grep -vE '^(Maintainer|LicenseFiles|Source|Require)' Packages.manifest > Packages; \
|
||||
case "$$(((64 + $$(stat -L -c%s Packages)) % 128))" in 110|111) \
|
||||
$(call ERROR_MESSAGE,WARNING: Applying padding in $$d/Packages to workaround usign SHA-512 bug!); \
|
||||
{ echo ""; echo ""; } >> Packages;; \
|
||||
esac; \
|
||||
gzip -9nc Packages > Packages.gz; \
|
||||
); done
|
||||
ifdef CONFIG_SIGNED_PACKAGES
|
||||
@echo Signing package index...
|
||||
|
||||
@@ -190,7 +190,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "http://downloads.lede-project.org/releases/17.01.7"
|
||||
default "http://downloads.lede-project.org/releases/17.01-SNAPSHOT"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
@@ -262,7 +262,7 @@ if VERSIONOPT
|
||||
config VERSION_CODE_FILENAMES
|
||||
bool
|
||||
prompt "Revision code in filenames"
|
||||
default n
|
||||
default y
|
||||
help
|
||||
Enable this to include the revision identifier or the configured
|
||||
version code into the firmware image, SDK- and Image Builder archive
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
From 20ec4f57498f8770c7a1a3e2a316fa752a424178 Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Fri, 10 Mar 2017 21:17:02 +0000
|
||||
Subject: [PATCH] brcmfmac: move brcmf_txflowblock to bcdc layer
|
||||
|
||||
brcmf_txflowblock is invoked by sdio and usb bus module which are using
|
||||
bcdc protocol. This patch makes it a bcdc API instead of a core module
|
||||
function.
|
||||
|
||||
Reviewed-by: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-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>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 10 ++++++++++
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h | 1 +
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 2 --
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 10 ----------
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 5 +++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 5 +++--
|
||||
6 files changed, 17 insertions(+), 16 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -345,6 +345,16 @@ brcmf_proto_bcdc_txdata(struct brcmf_pub
|
||||
return brcmf_bus_txdata(drvr->bus_if, pktbuf);
|
||||
}
|
||||
|
||||
+void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state)
|
||||
+{
|
||||
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
+ struct brcmf_pub *drvr = bus_if->drvr;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Enter\n");
|
||||
+
|
||||
+ brcmf_fws_bus_blocked(drvr, state);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
brcmf_proto_bcdc_configure_addr_mode(struct brcmf_pub *drvr, int ifidx,
|
||||
enum proto_addr_mode addr_mode)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
@@ -19,6 +19,7 @@
|
||||
#ifdef CPTCFG_BRCMFMAC_PROTO_BCDC
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
||||
#else
|
||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -229,8 +229,6 @@ int brcmf_attach(struct device *dev, str
|
||||
void brcmf_detach(struct device *dev);
|
||||
/* Indication from bus module that dongle should be reset */
|
||||
void brcmf_dev_reset(struct device *dev);
|
||||
-/* Indication from bus module to change flow-control state */
|
||||
-void brcmf_txflowblock(struct device *dev, bool state);
|
||||
|
||||
/* Notify the bus has transferred the tx packet to firmware */
|
||||
void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -283,16 +283,6 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
spin_unlock_irqrestore(&ifp->netif_stop_lock, flags);
|
||||
}
|
||||
|
||||
-void brcmf_txflowblock(struct device *dev, bool state)
|
||||
-{
|
||||
- struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_pub *drvr = bus_if->drvr;
|
||||
-
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
-
|
||||
- brcmf_fws_bus_blocked(drvr, state);
|
||||
-}
|
||||
-
|
||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||
{
|
||||
if (skb->pkt_type == PACKET_MULTICAST)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "firmware.h"
|
||||
#include "core.h"
|
||||
#include "common.h"
|
||||
+#include "bcdc.h"
|
||||
|
||||
#define DCMD_RESP_TIMEOUT msecs_to_jiffies(2500)
|
||||
#define CTL_DONE_TIMEOUT msecs_to_jiffies(2500)
|
||||
@@ -2328,7 +2329,7 @@ static uint brcmf_sdio_sendfromq(struct
|
||||
if ((bus->sdiodev->state == BRCMF_SDIOD_DATA) &&
|
||||
bus->txoff && (pktq_len(&bus->txq) < TXLOW)) {
|
||||
bus->txoff = false;
|
||||
- brcmf_txflowblock(bus->sdiodev->dev, false);
|
||||
+ brcmf_proto_bcdc_txflowblock(bus->sdiodev->dev, false);
|
||||
}
|
||||
|
||||
return cnt;
|
||||
@@ -2753,7 +2754,7 @@ static int brcmf_sdio_bus_txdata(struct
|
||||
|
||||
if (pktq_len(&bus->txq) >= TXHI) {
|
||||
bus->txoff = true;
|
||||
- brcmf_txflowblock(dev, true);
|
||||
+ brcmf_proto_bcdc_txflowblock(dev, true);
|
||||
}
|
||||
spin_unlock_bh(&bus->txq_lock);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "usb.h"
|
||||
#include "core.h"
|
||||
#include "common.h"
|
||||
+#include "bcdc.h"
|
||||
|
||||
|
||||
#define IOCTL_RESP_TIMEOUT msecs_to_jiffies(2000)
|
||||
@@ -488,7 +489,7 @@ static void brcmf_usb_tx_complete(struct
|
||||
spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
|
||||
if (devinfo->tx_freecount > devinfo->tx_high_watermark &&
|
||||
devinfo->tx_flowblock) {
|
||||
- brcmf_txflowblock(devinfo->dev, false);
|
||||
+ brcmf_proto_bcdc_txflowblock(devinfo->dev, false);
|
||||
devinfo->tx_flowblock = false;
|
||||
}
|
||||
spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags);
|
||||
@@ -635,7 +636,7 @@ static int brcmf_usb_tx(struct device *d
|
||||
spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
|
||||
if (devinfo->tx_freecount < devinfo->tx_low_watermark &&
|
||||
!devinfo->tx_flowblock) {
|
||||
- brcmf_txflowblock(dev, true);
|
||||
+ brcmf_proto_bcdc_txflowblock(dev, true);
|
||||
devinfo->tx_flowblock = true;
|
||||
}
|
||||
spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags);
|
||||
@@ -0,0 +1,122 @@
|
||||
From 7b584396b7a760bc77bbde4625f83ef173159d3e Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Fri, 10 Mar 2017 21:17:03 +0000
|
||||
Subject: [PATCH] brcmfmac: move brcmf_txcomplete to bcdc layer
|
||||
|
||||
brcmf_txcomplete is invoked by sdio and usb bus module which are using
|
||||
bcdc protocol. So move it from core module into bcdc layer.
|
||||
|
||||
Signed-off-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>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/bcdc.c | 20 +++++++++++++++++++
|
||||
.../broadcom/brcm80211/brcmfmac/bcdc.h | 2 ++
|
||||
.../broadcom/brcm80211/brcmfmac/bus.h | 3 ---
|
||||
.../broadcom/brcm80211/brcmfmac/core.c | 18 -----------------
|
||||
.../broadcom/brcm80211/brcmfmac/sdio.c | 3 ++-
|
||||
.../broadcom/brcm80211/brcmfmac/usb.c | 2 +-
|
||||
6 files changed, 25 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -355,6 +355,26 @@ void brcmf_proto_bcdc_txflowblock(struct
|
||||
brcmf_fws_bus_blocked(drvr, state);
|
||||
}
|
||||
|
||||
+void
|
||||
+brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||
+ bool success)
|
||||
+{
|
||||
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
+ struct brcmf_pub *drvr = bus_if->drvr;
|
||||
+ struct brcmf_if *ifp;
|
||||
+
|
||||
+ /* await txstatus signal for firmware if active */
|
||||
+ if (brcmf_fws_fc_active(drvr->fws)) {
|
||||
+ if (!success)
|
||||
+ brcmf_fws_bustxfail(drvr->fws, txp);
|
||||
+ } else {
|
||||
+ if (brcmf_proto_bcdc_hdrpull(drvr, false, txp, &ifp))
|
||||
+ brcmu_pkt_buf_free_skb(txp);
|
||||
+ else
|
||||
+ brcmf_txfinalize(ifp, txp, success);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void
|
||||
brcmf_proto_bcdc_configure_addr_mode(struct brcmf_pub *drvr, int ifidx,
|
||||
enum proto_addr_mode addr_mode)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
@@ -20,6 +20,8 @@
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
||||
+void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||
+ bool success);
|
||||
#else
|
||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -230,9 +230,6 @@ void brcmf_detach(struct device *dev);
|
||||
/* Indication from bus module that dongle should be reset */
|
||||
void brcmf_dev_reset(struct device *dev);
|
||||
|
||||
-/* Notify the bus has transferred the tx packet to firmware */
|
||||
-void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||
-
|
||||
/* Configure the "global" bus state used by upper layers */
|
||||
void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -383,24 +383,6 @@ void brcmf_txfinalize(struct brcmf_if *i
|
||||
brcmu_pkt_buf_free_skb(txp);
|
||||
}
|
||||
|
||||
-void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success)
|
||||
-{
|
||||
- struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_pub *drvr = bus_if->drvr;
|
||||
- struct brcmf_if *ifp;
|
||||
-
|
||||
- /* await txstatus signal for firmware if active */
|
||||
- if (brcmf_fws_fc_active(drvr->fws)) {
|
||||
- if (!success)
|
||||
- brcmf_fws_bustxfail(drvr->fws, txp);
|
||||
- } else {
|
||||
- if (brcmf_proto_hdrpull(drvr, false, txp, &ifp))
|
||||
- brcmu_pkt_buf_free_skb(txp);
|
||||
- else
|
||||
- brcmf_txfinalize(ifp, txp, success);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static struct net_device_stats *brcmf_netdev_get_stats(struct net_device *ndev)
|
||||
{
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -2266,7 +2266,8 @@ done:
|
||||
bus->tx_seq = (bus->tx_seq + pktq->qlen) % SDPCM_SEQ_WRAP;
|
||||
skb_queue_walk_safe(pktq, pkt_next, tmp) {
|
||||
__skb_unlink(pkt_next, pktq);
|
||||
- brcmf_txcomplete(bus->sdiodev->dev, pkt_next, ret == 0);
|
||||
+ brcmf_proto_bcdc_txcomplete(bus->sdiodev->dev, pkt_next,
|
||||
+ ret == 0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -483,7 +483,7 @@ static void brcmf_usb_tx_complete(struct
|
||||
req->skb);
|
||||
brcmf_usb_del_fromq(devinfo, req);
|
||||
|
||||
- brcmf_txcomplete(devinfo->dev, req->skb, urb->status == 0);
|
||||
+ brcmf_proto_bcdc_txcomplete(devinfo->dev, req->skb, urb->status == 0);
|
||||
req->skb = NULL;
|
||||
brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, &devinfo->tx_freecount);
|
||||
spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
|
||||
@@ -0,0 +1,95 @@
|
||||
From 9fdc64bbdbe7bd546e0fbcedd2f1c03448c6df42 Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Fri, 10 Mar 2017 21:17:04 +0000
|
||||
Subject: [PATCH] brcmfmac: wrap brcmf_fws_add_interface into bcdc layer
|
||||
|
||||
fwsignal is only used by bcdc. Create a new protocol interface function
|
||||
brcmf_proto_add_if for core module to notify protocol layer upon a new
|
||||
interface is created.
|
||||
|
||||
Signed-off-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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 2 +-
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 3 ++-
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
|
||||
4 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -399,6 +399,12 @@ static void brcmf_proto_bcdc_rxreorder(s
|
||||
brcmf_fws_rxreorder(ifp, skb);
|
||||
}
|
||||
|
||||
+static void
|
||||
+brcmf_proto_bcdc_add_if(struct brcmf_if *ifp)
|
||||
+{
|
||||
+ brcmf_fws_add_interface(ifp);
|
||||
+}
|
||||
+
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc;
|
||||
@@ -422,6 +428,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
drvr->proto->delete_peer = brcmf_proto_bcdc_delete_peer;
|
||||
drvr->proto->add_tdls_peer = brcmf_proto_bcdc_add_tdls_peer;
|
||||
drvr->proto->rxreorder = brcmf_proto_bcdc_rxreorder;
|
||||
+ drvr->proto->add_if = brcmf_proto_bcdc_add_if;
|
||||
drvr->proto->pd = bcdc;
|
||||
|
||||
drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1000,7 +1000,7 @@ int brcmf_bus_started(struct device *dev
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
- brcmf_fws_add_interface(ifp);
|
||||
+ brcmf_proto_add_if(drvr, ifp);
|
||||
|
||||
drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
|
||||
drvr->settings->p2p_enable);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "fwsignal.h"
|
||||
#include "fweh.h"
|
||||
#include "fwil.h"
|
||||
+#include "proto.h"
|
||||
|
||||
/**
|
||||
* struct brcmf_fweh_queue_item - event item on event queue.
|
||||
@@ -172,7 +173,7 @@ static void brcmf_fweh_handle_if_event(s
|
||||
if (IS_ERR(ifp))
|
||||
return;
|
||||
if (!is_p2pdev)
|
||||
- brcmf_fws_add_interface(ifp);
|
||||
+ brcmf_proto_add_if(drvr, ifp);
|
||||
if (!drvr->fweh.evt_handler[BRCMF_E_IF])
|
||||
if (brcmf_net_attach(ifp, false) < 0)
|
||||
return;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -44,6 +44,7 @@ struct brcmf_proto {
|
||||
void (*add_tdls_peer)(struct brcmf_pub *drvr, int ifidx,
|
||||
u8 peer[ETH_ALEN]);
|
||||
void (*rxreorder)(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
+ void (*add_if)(struct brcmf_if *ifp);
|
||||
void *pd;
|
||||
};
|
||||
|
||||
@@ -118,4 +119,12 @@ brcmf_proto_rxreorder(struct brcmf_if *i
|
||||
ifp->drvr->proto->rxreorder(ifp, skb);
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+brcmf_proto_add_if(struct brcmf_pub *drvr, struct brcmf_if *ifp)
|
||||
+{
|
||||
+ if (!drvr->proto->add_if)
|
||||
+ return;
|
||||
+ drvr->proto->add_if(ifp);
|
||||
+}
|
||||
+
|
||||
#endif /* BRCMFMAC_PROTO_H */
|
||||
@@ -0,0 +1,83 @@
|
||||
From c02a5eb82056f75615cb48aa540bfd245f489b99 Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Fri, 10 Mar 2017 21:17:05 +0000
|
||||
Subject: [PATCH] brcmfmac: wrap brcmf_fws_del_interface into bcdc layer
|
||||
|
||||
Create a new protocol interface function brcmf_proto_del_if for core
|
||||
module to notify protocol layer upon interface deletion.
|
||||
|
||||
Signed-off-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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 4 ++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
|
||||
3 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -405,6 +405,12 @@ brcmf_proto_bcdc_add_if(struct brcmf_if
|
||||
brcmf_fws_add_interface(ifp);
|
||||
}
|
||||
|
||||
+static void
|
||||
+brcmf_proto_bcdc_del_if(struct brcmf_if *ifp)
|
||||
+{
|
||||
+ brcmf_fws_del_interface(ifp);
|
||||
+}
|
||||
+
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc;
|
||||
@@ -429,6 +435,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
drvr->proto->add_tdls_peer = brcmf_proto_bcdc_add_tdls_peer;
|
||||
drvr->proto->rxreorder = brcmf_proto_bcdc_rxreorder;
|
||||
drvr->proto->add_if = brcmf_proto_bcdc_add_if;
|
||||
+ drvr->proto->del_if = brcmf_proto_bcdc_del_if;
|
||||
drvr->proto->pd = bcdc;
|
||||
|
||||
drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -716,7 +716,7 @@ void brcmf_remove_interface(struct brcmf
|
||||
return;
|
||||
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d, ifidx=%d\n", ifp->bsscfgidx,
|
||||
ifp->ifidx);
|
||||
- brcmf_fws_del_interface(ifp);
|
||||
+ brcmf_proto_del_if(ifp->drvr, ifp);
|
||||
brcmf_del_if(ifp->drvr, ifp->bsscfgidx, rtnl_locked);
|
||||
}
|
||||
|
||||
@@ -1045,7 +1045,7 @@ fail:
|
||||
drvr->config = NULL;
|
||||
}
|
||||
if (drvr->fws) {
|
||||
- brcmf_fws_del_interface(ifp);
|
||||
+ brcmf_proto_del_if(ifp->drvr, ifp);
|
||||
brcmf_fws_deinit(drvr);
|
||||
}
|
||||
brcmf_net_detach(ifp->ndev, false);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -45,6 +45,7 @@ struct brcmf_proto {
|
||||
u8 peer[ETH_ALEN]);
|
||||
void (*rxreorder)(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
void (*add_if)(struct brcmf_if *ifp);
|
||||
+ void (*del_if)(struct brcmf_if *ifp);
|
||||
void *pd;
|
||||
};
|
||||
|
||||
@@ -127,4 +128,12 @@ brcmf_proto_add_if(struct brcmf_pub *drv
|
||||
drvr->proto->add_if(ifp);
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+brcmf_proto_del_if(struct brcmf_pub *drvr, struct brcmf_if *ifp)
|
||||
+{
|
||||
+ if (!drvr->proto->del_if)
|
||||
+ return;
|
||||
+ drvr->proto->del_if(ifp);
|
||||
+}
|
||||
+
|
||||
#endif /* BRCMFMAC_PROTO_H */
|
||||
@@ -0,0 +1,82 @@
|
||||
From 66ded1f8b33cdd9d6d3e20f5f8dd23615a110e70 Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Fri, 10 Mar 2017 21:17:06 +0000
|
||||
Subject: [PATCH] brcmfmac: wrap brcmf_fws_reset_interface into bcdc layer
|
||||
|
||||
Create a new protocol interface function brcmf_proto_reset_if for core
|
||||
module to notify protocol layer when interface role changes.
|
||||
|
||||
Signed-off-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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 3 +--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
|
||||
3 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -411,6 +411,12 @@ brcmf_proto_bcdc_del_if(struct brcmf_if
|
||||
brcmf_fws_del_interface(ifp);
|
||||
}
|
||||
|
||||
+static void
|
||||
+brcmf_proto_bcdc_reset_if(struct brcmf_if *ifp)
|
||||
+{
|
||||
+ brcmf_fws_reset_interface(ifp);
|
||||
+}
|
||||
+
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc;
|
||||
@@ -436,6 +442,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
drvr->proto->rxreorder = brcmf_proto_bcdc_rxreorder;
|
||||
drvr->proto->add_if = brcmf_proto_bcdc_add_if;
|
||||
drvr->proto->del_if = brcmf_proto_bcdc_del_if;
|
||||
+ drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
|
||||
drvr->proto->pd = bcdc;
|
||||
|
||||
drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
|
||||
@@ -22,7 +22,6 @@
|
||||
#include "core.h"
|
||||
#include "debug.h"
|
||||
#include "tracepoint.h"
|
||||
-#include "fwsignal.h"
|
||||
#include "fweh.h"
|
||||
#include "fwil.h"
|
||||
#include "proto.h"
|
||||
@@ -180,7 +179,7 @@ static void brcmf_fweh_handle_if_event(s
|
||||
}
|
||||
|
||||
if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
|
||||
- brcmf_fws_reset_interface(ifp);
|
||||
+ brcmf_proto_reset_if(drvr, ifp);
|
||||
|
||||
err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -46,6 +46,7 @@ struct brcmf_proto {
|
||||
void (*rxreorder)(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
void (*add_if)(struct brcmf_if *ifp);
|
||||
void (*del_if)(struct brcmf_if *ifp);
|
||||
+ void (*reset_if)(struct brcmf_if *ifp);
|
||||
void *pd;
|
||||
};
|
||||
|
||||
@@ -136,4 +137,12 @@ brcmf_proto_del_if(struct brcmf_pub *drv
|
||||
drvr->proto->del_if(ifp);
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+brcmf_proto_reset_if(struct brcmf_pub *drvr, struct brcmf_if *ifp)
|
||||
+{
|
||||
+ if (!drvr->proto->reset_if)
|
||||
+ return;
|
||||
+ drvr->proto->reset_if(ifp);
|
||||
+}
|
||||
+
|
||||
#endif /* BRCMFMAC_PROTO_H */
|
||||
@@ -0,0 +1,76 @@
|
||||
From 62c50a34883c6b821d816b6a661e5d47c09d42b2 Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Tue, 28 Mar 2017 11:43:24 +0100
|
||||
Subject: [PATCH] brcmfmac: wrap brcmf_fws_init into bcdc layer
|
||||
|
||||
Create a new protocol layer interface brcmf_proto_init_cb for protocol
|
||||
layer to finish initialzation after core module components(fweh and
|
||||
etc.) are initialized.
|
||||
|
||||
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Reviewed-by: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 2 +-
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
|
||||
3 files changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -417,6 +417,12 @@ brcmf_proto_bcdc_reset_if(struct brcmf_i
|
||||
brcmf_fws_reset_interface(ifp);
|
||||
}
|
||||
|
||||
+static int
|
||||
+brcmf_proto_bcdc_init_done(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ return brcmf_fws_init(drvr);
|
||||
+}
|
||||
+
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc;
|
||||
@@ -443,6 +449,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
drvr->proto->add_if = brcmf_proto_bcdc_add_if;
|
||||
drvr->proto->del_if = brcmf_proto_bcdc_del_if;
|
||||
drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
|
||||
+ drvr->proto->init_done = brcmf_proto_bcdc_init_done;
|
||||
drvr->proto->pd = bcdc;
|
||||
|
||||
drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -996,7 +996,7 @@ int brcmf_bus_started(struct device *dev
|
||||
}
|
||||
brcmf_feat_attach(drvr);
|
||||
|
||||
- ret = brcmf_fws_init(drvr);
|
||||
+ ret = brcmf_proto_init_done(drvr);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -47,6 +47,7 @@ struct brcmf_proto {
|
||||
void (*add_if)(struct brcmf_if *ifp);
|
||||
void (*del_if)(struct brcmf_if *ifp);
|
||||
void (*reset_if)(struct brcmf_if *ifp);
|
||||
+ int (*init_done)(struct brcmf_pub *drvr);
|
||||
void *pd;
|
||||
};
|
||||
|
||||
@@ -145,4 +146,12 @@ brcmf_proto_reset_if(struct brcmf_pub *d
|
||||
drvr->proto->reset_if(ifp);
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+brcmf_proto_init_done(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ if (!drvr->proto->init_done)
|
||||
+ return 0;
|
||||
+ return drvr->proto->init_done(drvr);
|
||||
+}
|
||||
+
|
||||
#endif /* BRCMFMAC_PROTO_H */
|
||||
@@ -0,0 +1,57 @@
|
||||
From 8f9dd1a974380ebe2d7bf82df4e6ba6bfb89c575 Mon Sep 17 00:00:00 2001
|
||||
From: Franky Lin <franky.lin@broadcom.com>
|
||||
Date: Tue, 28 Mar 2017 11:43:25 +0100
|
||||
Subject: [PATCH] brcmfmac: move brcmf_fws_deinit to bcdc layer
|
||||
|
||||
Move brcmf_fws_deinit into brcmf_proto_bcdc_detach since it is a bcdc
|
||||
exclusive feature.
|
||||
|
||||
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Reviewed-by: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 1 +
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 7 -------
|
||||
2 files changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -464,6 +464,7 @@ fail:
|
||||
|
||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
+ brcmf_fws_deinit(drvr);
|
||||
kfree(drvr->proto->pd);
|
||||
drvr->proto->pd = NULL;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -32,7 +32,6 @@
|
||||
#include "p2p.h"
|
||||
#include "cfg80211.h"
|
||||
#include "fwil.h"
|
||||
-#include "fwsignal.h"
|
||||
#include "feature.h"
|
||||
#include "proto.h"
|
||||
#include "pcie.h"
|
||||
@@ -1044,10 +1043,6 @@ fail:
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
drvr->config = NULL;
|
||||
}
|
||||
- if (drvr->fws) {
|
||||
- brcmf_proto_del_if(ifp->drvr, ifp);
|
||||
- brcmf_fws_deinit(drvr);
|
||||
- }
|
||||
brcmf_net_detach(ifp->ndev, false);
|
||||
if (p2p_ifp)
|
||||
brcmf_net_detach(p2p_ifp->ndev, false);
|
||||
@@ -1113,8 +1108,6 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
|
||||
- brcmf_fws_deinit(drvr);
|
||||
-
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
brcmf_proto_detach(drvr);
|
||||
@@ -0,0 +1,88 @@
|
||||
From 0cc0236cf713a9ecfcf902e35bd098bc179265a8 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 28 Mar 2017 11:43:26 +0100
|
||||
Subject: [PATCH] brcmfmac: add support to move wiphy instance into network
|
||||
namespace
|
||||
|
||||
To support network namespace the driver must assure all created
|
||||
network interfaces are in the same namespace as the wiphy instance
|
||||
and flag the support using WIPHY_FLAG_NETNS_OK.
|
||||
|
||||
Verified using two terminals:
|
||||
|
||||
Terminal 1 Terminal 2
|
||||
-------------------------- ---------------------------------
|
||||
# ip netns add brcm-wifi # iw dev
|
||||
phy#0
|
||||
Interface wlan3
|
||||
ifindex 11
|
||||
wdev 0x1
|
||||
# ip netns exec brcm-wifi bash
|
||||
# iw dev
|
||||
# echo $$
|
||||
20337 # iw phy0 set netns 20337
|
||||
# iw dev
|
||||
phy#0
|
||||
Interface wlan3
|
||||
ifindex 11
|
||||
wdev 0x2
|
||||
# iw phy0 interface add wl3.ap type __ap
|
||||
# iw dev
|
||||
phy#0
|
||||
Interface wl3.ap
|
||||
ifindex 2
|
||||
wdev 0x3
|
||||
Interface wlan3
|
||||
ifindex 11
|
||||
wdev 0x2
|
||||
# iw dev
|
||||
# iw phy0 set netns 1
|
||||
# iw dev
|
||||
# iw dev
|
||||
phy#0
|
||||
Interface wl3.ap
|
||||
ifindex 2
|
||||
wdev 0x5
|
||||
Interface wlan3
|
||||
ifindex 11
|
||||
wdev 0x4
|
||||
|
||||
Note:
|
||||
increasing wdev identifier above indicates issue in
|
||||
cfg80211 which is addressed separately.
|
||||
|
||||
Tested-by: Mark Asselstine <mark.asselstine@windriver.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 ++-
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 3 ++-
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6453,7 +6453,8 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
BIT(NL80211_BSS_SELECT_ATTR_BAND_PREF) |
|
||||
BIT(NL80211_BSS_SELECT_ATTR_RSSI_ADJUST);
|
||||
|
||||
- wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT |
|
||||
+ wiphy->flags |= WIPHY_FLAG_NETNS_OK |
|
||||
+ WIPHY_FLAG_PS_ON_BY_DEFAULT |
|
||||
WIPHY_FLAG_OFFCHAN_TX |
|
||||
WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
|
||||
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_TDLS))
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -485,8 +485,9 @@ int brcmf_net_attach(struct brcmf_if *if
|
||||
ndev->needed_headroom += drvr->hdrlen;
|
||||
ndev->ethtool_ops = &brcmf_ethtool_ops;
|
||||
|
||||
- /* set the mac address */
|
||||
+ /* set the mac address & netns */
|
||||
memcpy(ndev->dev_addr, ifp->mac_addr, ETH_ALEN);
|
||||
+ dev_net_set(ndev, wiphy_net(cfg_to_wiphy(drvr->config)));
|
||||
|
||||
INIT_WORK(&ifp->multicast_work, _brcmf_set_multicast_list);
|
||||
INIT_WORK(&ifp->ndoffload_work, _brcmf_update_ndtable);
|
||||
@@ -0,0 +1,37 @@
|
||||
From 78b9ccb81377ba908b2c18daf6e1a7beddc281e3 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 28 Mar 2017 11:43:28 +0100
|
||||
Subject: [PATCH] brcmfmac: no need for d11inf instance in
|
||||
brcmf_pno_start_sched_scan()
|
||||
|
||||
In brcmf_pno_start_sched_scan() a local variable is declared and
|
||||
assigned for struct brcmu_d11inf. However, there is no other reference
|
||||
to it so it is unnecessary.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
|
||||
@@ -182,7 +182,6 @@ int brcmf_pno_clean(struct brcmf_if *ifp
|
||||
int brcmf_pno_start_sched_scan(struct brcmf_if *ifp,
|
||||
struct cfg80211_sched_scan_request *req)
|
||||
{
|
||||
- struct brcmu_d11inf *d11inf;
|
||||
struct brcmf_pno_config_le pno_cfg;
|
||||
struct cfg80211_ssid *ssid;
|
||||
u16 chan;
|
||||
@@ -209,7 +208,6 @@ int brcmf_pno_start_sched_scan(struct br
|
||||
}
|
||||
|
||||
/* configure channels to use */
|
||||
- d11inf = &ifp->drvr->config->d11inf;
|
||||
for (i = 0; i < req->n_channels; i++) {
|
||||
chan = req->channels[i]->hw_value;
|
||||
pno_cfg.channel_list[i] = cpu_to_le16(chan);
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -539,7 +539,11 @@ static int qcount[NUMPRIO];
|
||||
@@ -540,7 +540,11 @@ static int qcount[NUMPRIO];
|
||||
/* Limit on rounding up frames */
|
||||
static const uint max_roundup = 512;
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
From ffb9f18ad8f0e5e1d88c56478bf24e6464c96eee Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 6 Apr 2017 13:14:37 +0100
|
||||
Subject: [PATCH] brcmfmac: rename brcmf_fws_{de,}init to brcmf_fws{at,de}tach
|
||||
|
||||
This is a non-functional change to align the fwsignal module to
|
||||
the naming pattern used throughout the driver.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 4 ++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 6 +++---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h | 4 ++--
|
||||
3 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -420,7 +420,7 @@ brcmf_proto_bcdc_reset_if(struct brcmf_i
|
||||
static int
|
||||
brcmf_proto_bcdc_init_done(struct brcmf_pub *drvr)
|
||||
{
|
||||
- return brcmf_fws_init(drvr);
|
||||
+ return brcmf_fws_attach(drvr);
|
||||
}
|
||||
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
@@ -464,7 +464,7 @@ fail:
|
||||
|
||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
- brcmf_fws_deinit(drvr);
|
||||
+ brcmf_fws_detach(drvr);
|
||||
kfree(drvr->proto->pd);
|
||||
drvr->proto->pd = NULL;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -2308,7 +2308,7 @@ static int brcmf_debugfs_fws_stats_read(
|
||||
}
|
||||
#endif
|
||||
|
||||
-int brcmf_fws_init(struct brcmf_pub *drvr)
|
||||
+int brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_fws_info *fws;
|
||||
struct brcmf_if *ifp;
|
||||
@@ -2408,11 +2408,11 @@ int brcmf_fws_init(struct brcmf_pub *drv
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
- brcmf_fws_deinit(drvr);
|
||||
+ brcmf_fws_detach(drvr);
|
||||
return rc;
|
||||
}
|
||||
|
||||
-void brcmf_fws_deinit(struct brcmf_pub *drvr)
|
||||
+void brcmf_fws_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_fws_info *fws = drvr->fws;
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
@@ -18,8 +18,8 @@
|
||||
#ifndef FWSIGNAL_H_
|
||||
#define FWSIGNAL_H_
|
||||
|
||||
-int brcmf_fws_init(struct brcmf_pub *drvr);
|
||||
-void brcmf_fws_deinit(struct brcmf_pub *drvr);
|
||||
+int brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||
+void brcmf_fws_detach(struct brcmf_pub *drvr);
|
||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
||||
@@ -0,0 +1,30 @@
|
||||
From fc0471e3e884a13d293afae53917ef8ff33b8ae5 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 6 Apr 2017 13:14:38 +0100
|
||||
Subject: [PATCH] brcmfmac: ignore interfaces when fwsignal is disabled
|
||||
|
||||
When brcmf_fws_add_interface() is called the struct brcmf_if::fws_desc
|
||||
field is initialized regardless the state of the fwsignal functionality,
|
||||
ie. the fcmode. This is not needed when fcmode is NONE, which is the
|
||||
default mode.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -2145,7 +2145,7 @@ void brcmf_fws_add_interface(struct brcm
|
||||
struct brcmf_fws_info *fws = ifp->drvr->fws;
|
||||
struct brcmf_fws_mac_descriptor *entry;
|
||||
|
||||
- if (!ifp->ndev)
|
||||
+ if (!ifp->ndev || fws->fcmode == BRCMF_FWS_FCMODE_NONE)
|
||||
return;
|
||||
|
||||
entry = &fws->desc.iface[ifp->ifidx];
|
||||
@@ -0,0 +1,313 @@
|
||||
From acf8ac41dd733508b9e77483f96e53610c87fa64 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 6 Apr 2017 13:14:39 +0100
|
||||
Subject: [PATCH] brcmfmac: remove reference to fwsignal data from struct
|
||||
brcmf_pub
|
||||
|
||||
The fwsignal module is part of the bcdc protocol and as such does
|
||||
its instance data is not needed in core structure. Moving it into
|
||||
struct brcmf_bcdc instead.
|
||||
|
||||
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>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/bcdc.c | 35 ++++++++++---
|
||||
.../broadcom/brcm80211/brcmfmac/bcdc.h | 1 +
|
||||
.../broadcom/brcm80211/brcmfmac/core.h | 2 -
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 51 +++++++++----------
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.h | 4 +-
|
||||
5 files changed, 54 insertions(+), 39 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -103,9 +103,17 @@ struct brcmf_bcdc {
|
||||
u8 bus_header[BUS_HEADER_LEN];
|
||||
struct brcmf_proto_bcdc_dcmd msg;
|
||||
unsigned char buf[BRCMF_DCMD_MAXLEN];
|
||||
+ struct brcmf_fws_info *fws;
|
||||
};
|
||||
|
||||
|
||||
+struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
+
|
||||
+ return bcdc->fws;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
brcmf_proto_bcdc_msg(struct brcmf_pub *drvr, int ifidx, uint cmd, void *buf,
|
||||
uint len, bool set)
|
||||
@@ -330,8 +338,9 @@ static int brcmf_proto_bcdc_tx_queue_dat
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct brcmf_if *ifp = brcmf_get_ifp(drvr, ifidx);
|
||||
+ struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
|
||||
- if (!brcmf_fws_queue_skbs(drvr->fws))
|
||||
+ if (!brcmf_fws_queue_skbs(bcdc->fws))
|
||||
return brcmf_proto_txdata(drvr, ifidx, 0, skb);
|
||||
|
||||
return brcmf_fws_process_skb(ifp, skb);
|
||||
@@ -360,15 +369,15 @@ brcmf_proto_bcdc_txcomplete(struct devic
|
||||
bool success)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_pub *drvr = bus_if->drvr;
|
||||
+ struct brcmf_bcdc *bcdc = bus_if->drvr->proto->pd;
|
||||
struct brcmf_if *ifp;
|
||||
|
||||
/* await txstatus signal for firmware if active */
|
||||
- if (brcmf_fws_fc_active(drvr->fws)) {
|
||||
+ if (brcmf_fws_fc_active(bcdc->fws)) {
|
||||
if (!success)
|
||||
- brcmf_fws_bustxfail(drvr->fws, txp);
|
||||
+ brcmf_fws_bustxfail(bcdc->fws, txp);
|
||||
} else {
|
||||
- if (brcmf_proto_bcdc_hdrpull(drvr, false, txp, &ifp))
|
||||
+ if (brcmf_proto_bcdc_hdrpull(bus_if->drvr, false, txp, &ifp))
|
||||
brcmu_pkt_buf_free_skb(txp);
|
||||
else
|
||||
brcmf_txfinalize(ifp, txp, success);
|
||||
@@ -420,7 +429,15 @@ brcmf_proto_bcdc_reset_if(struct brcmf_i
|
||||
static int
|
||||
brcmf_proto_bcdc_init_done(struct brcmf_pub *drvr)
|
||||
{
|
||||
- return brcmf_fws_attach(drvr);
|
||||
+ struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
+ struct brcmf_fws_info *fws;
|
||||
+
|
||||
+ fws = brcmf_fws_attach(drvr);
|
||||
+ if (IS_ERR(fws))
|
||||
+ return PTR_ERR(fws);
|
||||
+
|
||||
+ bcdc->fws = fws;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
@@ -464,7 +481,9 @@ fail:
|
||||
|
||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
- brcmf_fws_detach(drvr);
|
||||
- kfree(drvr->proto->pd);
|
||||
+ struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
+
|
||||
drvr->proto->pd = NULL;
|
||||
+ brcmf_fws_detach(bcdc->fws);
|
||||
+ kfree(bcdc);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
@@ -22,6 +22,7 @@ void brcmf_proto_bcdc_detach(struct brcm
|
||||
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
||||
void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||
bool success);
|
||||
+struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr);
|
||||
#else
|
||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -127,8 +127,6 @@ struct brcmf_pub {
|
||||
|
||||
struct brcmf_fweh_info fweh;
|
||||
|
||||
- struct brcmf_fws_info *fws;
|
||||
-
|
||||
struct brcmf_ampdu_rx_reorder
|
||||
*reorder_flows[BRCMF_AMPDU_RX_REORDER_MAXFLOWS];
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "p2p.h"
|
||||
#include "cfg80211.h"
|
||||
#include "proto.h"
|
||||
+#include "bcdc.h"
|
||||
#include "common.h"
|
||||
|
||||
/**
|
||||
@@ -1586,7 +1587,7 @@ static int brcmf_fws_notify_credit_map(s
|
||||
const struct brcmf_event_msg *e,
|
||||
void *data)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = ifp->drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
int i;
|
||||
u8 *credits = data;
|
||||
|
||||
@@ -1617,7 +1618,7 @@ static int brcmf_fws_notify_bcmc_credit_
|
||||
const struct brcmf_event_msg *e,
|
||||
void *data)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = ifp->drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
|
||||
if (fws) {
|
||||
brcmf_fws_lock(fws);
|
||||
@@ -1826,7 +1827,7 @@ netif_rx:
|
||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb)
|
||||
{
|
||||
struct brcmf_skb_reorder_data *rd;
|
||||
- struct brcmf_fws_info *fws = ifp->drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
u8 *signal_data;
|
||||
s16 data_len;
|
||||
u8 type;
|
||||
@@ -2091,8 +2092,7 @@ static int brcmf_fws_assign_htod(struct
|
||||
|
||||
int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||
{
|
||||
- struct brcmf_pub *drvr = ifp->drvr;
|
||||
- struct brcmf_fws_info *fws = drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
struct brcmf_skbuff_cb *skcb = brcmf_skbcb(skb);
|
||||
struct ethhdr *eh = (struct ethhdr *)(skb->data);
|
||||
int fifo = BRCMF_FWS_FIFO_BCMC;
|
||||
@@ -2142,7 +2142,7 @@ void brcmf_fws_reset_interface(struct br
|
||||
|
||||
void brcmf_fws_add_interface(struct brcmf_if *ifp)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = ifp->drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
struct brcmf_fws_mac_descriptor *entry;
|
||||
|
||||
if (!ifp->ndev || fws->fcmode == BRCMF_FWS_FCMODE_NONE)
|
||||
@@ -2160,16 +2160,17 @@ void brcmf_fws_add_interface(struct brcm
|
||||
void brcmf_fws_del_interface(struct brcmf_if *ifp)
|
||||
{
|
||||
struct brcmf_fws_mac_descriptor *entry = ifp->fws_desc;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
- brcmf_fws_lock(ifp->drvr->fws);
|
||||
+ brcmf_fws_lock(fws);
|
||||
ifp->fws_desc = NULL;
|
||||
brcmf_dbg(TRACE, "deleting %s\n", entry->name);
|
||||
brcmf_fws_macdesc_deinit(entry);
|
||||
- brcmf_fws_cleanup(ifp->drvr->fws, ifp->ifidx);
|
||||
- brcmf_fws_unlock(ifp->drvr->fws);
|
||||
+ brcmf_fws_cleanup(fws, ifp->ifidx);
|
||||
+ brcmf_fws_unlock(fws);
|
||||
}
|
||||
|
||||
static void brcmf_fws_dequeue_worker(struct work_struct *worker)
|
||||
@@ -2243,7 +2244,7 @@ static void brcmf_fws_dequeue_worker(str
|
||||
static int brcmf_debugfs_fws_stats_read(struct seq_file *seq, void *data)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
|
||||
- struct brcmf_fws_stats *fwstats = &bus_if->drvr->fws->stats;
|
||||
+ struct brcmf_fws_stats *fwstats = &(drvr_to_fws(bus_if->drvr)->stats);
|
||||
|
||||
seq_printf(seq,
|
||||
"header_pulls: %u\n"
|
||||
@@ -2308,7 +2309,7 @@ static int brcmf_debugfs_fws_stats_read(
|
||||
}
|
||||
#endif
|
||||
|
||||
-int brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||
+struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_fws_info *fws;
|
||||
struct brcmf_if *ifp;
|
||||
@@ -2316,17 +2317,15 @@ int brcmf_fws_attach(struct brcmf_pub *d
|
||||
int rc;
|
||||
u32 mode;
|
||||
|
||||
- drvr->fws = kzalloc(sizeof(*(drvr->fws)), GFP_KERNEL);
|
||||
- if (!drvr->fws) {
|
||||
+ fws = kzalloc(sizeof(*fws), GFP_KERNEL);
|
||||
+ if (!fws) {
|
||||
rc = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- fws = drvr->fws;
|
||||
-
|
||||
spin_lock_init(&fws->spinlock);
|
||||
|
||||
- /* set linkage back */
|
||||
+ /* store drvr reference */
|
||||
fws->drvr = drvr;
|
||||
fws->fcmode = drvr->settings->fcmode;
|
||||
|
||||
@@ -2334,7 +2333,7 @@ int brcmf_fws_attach(struct brcmf_pub *d
|
||||
(fws->fcmode == BRCMF_FWS_FCMODE_NONE)) {
|
||||
fws->avoid_queueing = true;
|
||||
brcmf_dbg(INFO, "FWS queueing will be avoided\n");
|
||||
- return 0;
|
||||
+ return fws;
|
||||
}
|
||||
|
||||
fws->fws_wq = create_singlethread_workqueue("brcmf_fws_wq");
|
||||
@@ -2396,6 +2395,7 @@ int brcmf_fws_attach(struct brcmf_pub *d
|
||||
brcmf_fws_hanger_init(&fws->hanger);
|
||||
brcmf_fws_macdesc_init(&fws->desc.other, NULL, 0);
|
||||
brcmf_fws_macdesc_set_name(fws, &fws->desc.other);
|
||||
+ brcmf_dbg(INFO, "added %s\n", fws->desc.other.name);
|
||||
brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
|
||||
BRCMF_FWS_PSQ_LEN);
|
||||
|
||||
@@ -2405,27 +2405,24 @@ int brcmf_fws_attach(struct brcmf_pub *d
|
||||
|
||||
brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
|
||||
fws->fw_signals ? "enabled" : "disabled", tlv);
|
||||
- return 0;
|
||||
+ return fws;
|
||||
|
||||
fail:
|
||||
- brcmf_fws_detach(drvr);
|
||||
- return rc;
|
||||
+ brcmf_fws_detach(fws);
|
||||
+ return ERR_PTR(rc);
|
||||
}
|
||||
|
||||
-void brcmf_fws_detach(struct brcmf_pub *drvr)
|
||||
+void brcmf_fws_detach(struct brcmf_fws_info *fws)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = drvr->fws;
|
||||
-
|
||||
if (!fws)
|
||||
return;
|
||||
|
||||
- if (drvr->fws->fws_wq)
|
||||
- destroy_workqueue(drvr->fws->fws_wq);
|
||||
+ if (fws->fws_wq)
|
||||
+ destroy_workqueue(fws->fws_wq);
|
||||
|
||||
/* cleanup */
|
||||
brcmf_fws_lock(fws);
|
||||
brcmf_fws_cleanup(fws, -1);
|
||||
- drvr->fws = NULL;
|
||||
brcmf_fws_unlock(fws);
|
||||
|
||||
/* free top structure */
|
||||
@@ -2461,7 +2458,7 @@ void brcmf_fws_bustxfail(struct brcmf_fw
|
||||
|
||||
void brcmf_fws_bus_blocked(struct brcmf_pub *drvr, bool flow_blocked)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(drvr);
|
||||
struct brcmf_if *ifp;
|
||||
int i;
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
@@ -18,8 +18,8 @@
|
||||
#ifndef FWSIGNAL_H_
|
||||
#define FWSIGNAL_H_
|
||||
|
||||
-int brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_fws_detach(struct brcmf_pub *drvr);
|
||||
+struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||
+void brcmf_fws_detach(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
||||
@@ -13,7 +13,7 @@ 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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++++++--
|
||||
1 file changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -13,7 +13,7 @@ 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/cfg80211.c | 20 ++++++++++++++++----
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 20 +++++++++++++++----
|
||||
1 file changed, 16 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -0,0 +1,36 @@
|
||||
From 26ecfe01790381c4caa65ec9cce484c623f092c4 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Fri, 14 Apr 2017 22:27:37 +0100
|
||||
Subject: [PATCH] brcmfmac: only build fwsignal module for
|
||||
CONFIG_BRCMFMAC_PROTO_BCDC
|
||||
|
||||
The fwsignal module is only referenced by the bcdc module and part of the
|
||||
bcdc protocol. So only build it when CONFIG_BRCMFMAC_PROTO_BCDC is selected.
|
||||
|
||||
Fixes: acf8ac41dd73 ("brcmfmac: remove reference to fwsignal data from struct brcmf_pub")
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
|
||||
@@ -25,7 +25,6 @@ brcmfmac-objs += \
|
||||
chip.o \
|
||||
fwil.o \
|
||||
fweh.o \
|
||||
- fwsignal.o \
|
||||
p2p.o \
|
||||
proto.o \
|
||||
common.o \
|
||||
@@ -36,7 +35,8 @@ brcmfmac-objs += \
|
||||
vendor.o \
|
||||
pno.o
|
||||
brcmfmac-$(CPTCFG_BRCMFMAC_PROTO_BCDC) += \
|
||||
- bcdc.o
|
||||
+ bcdc.o \
|
||||
+ fwsignal.o
|
||||
brcmfmac-$(CPTCFG_BRCMFMAC_PROTO_MSGBUF) += \
|
||||
commonring.o \
|
||||
flowring.o \
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -198,7 +198,7 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
@@ -197,7 +197,7 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
int ret;
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
struct brcmf_pub *drvr = ifp->drvr;
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
brcmf_dbg(DATA, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx);
|
||||
|
||||
@@ -236,6 +236,8 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
@@ -235,6 +235,8 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -211,22 +211,13 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
@@ -210,22 +210,13 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -3420,7 +3420,7 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
@@ -3422,7 +3422,7 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
/* otherwise, set txglomalign */
|
||||
value = sdiodev->settings->bus.sdio.sd_sgentry_align;
|
||||
/* SDIO ADMA requires at least 32 bit alignment */
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -611,7 +611,9 @@ BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340
|
||||
@@ -612,7 +612,9 @@ BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340
|
||||
BRCMF_FW_NVRAM_DEF(4335, "brcmfmac4335-sdio.bin", "brcmfmac4335-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(43362, "brcmfmac43362-sdio.bin", "brcmfmac43362-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4339, "brcmfmac4339-sdio.bin", "brcmfmac4339-sdio.txt");
|
||||
@@ -33,7 +33,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-sdio.bin", "brcmfmac4356-sdio.txt");
|
||||
@@ -629,7 +631,8 @@ static struct brcmf_firmware_mapping brc
|
||||
@@ -630,7 +632,8 @@ static struct brcmf_firmware_mapping brc
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6842,7 +6842,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6843,7 +6843,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
wiphy = wiphy_new(ops, sizeof(struct brcmf_cfg80211_info));
|
||||
if (!wiphy) {
|
||||
brcmf_err("Could not allocate wiphy device\n");
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
memcpy(wiphy->perm_addr, drvr->mac, ETH_ALEN);
|
||||
set_wiphy_dev(wiphy, busdev);
|
||||
@@ -6985,6 +6985,7 @@ priv_out:
|
||||
@@ -6986,6 +6986,7 @@ priv_out:
|
||||
ifp->vif = NULL;
|
||||
wiphy_out:
|
||||
brcmf_free_wiphy(wiphy);
|
||||
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
break;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -617,6 +617,7 @@ BRCMF_FW_NVRAM_DEF(43430A1, "brcmfmac434
|
||||
@@ -618,6 +618,7 @@ BRCMF_FW_NVRAM_DEF(43430A1, "brcmfmac434
|
||||
BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-sdio.bin", "brcmfmac4356-sdio.txt");
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
||||
@@ -635,7 +636,8 @@ static struct brcmf_firmware_mapping brc
|
||||
@@ -636,7 +637,8 @@ static struct brcmf_firmware_mapping brc
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
static void pkt_align(struct sk_buff *p, int len, int align)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -49,6 +49,7 @@ BRCMF_FW_DEF(43143, "brcmfmac43143.bin")
|
||||
@@ -50,6 +50,7 @@ BRCMF_FW_DEF(43143, "brcmfmac43143.bin")
|
||||
BRCMF_FW_DEF(43236B, "brcmfmac43236b.bin");
|
||||
BRCMF_FW_DEF(43242A, "brcmfmac43242a.bin");
|
||||
BRCMF_FW_DEF(43569, "brcmfmac43569.bin");
|
||||
@@ -70,7 +70,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
||||
@@ -57,7 +58,8 @@ static struct brcmf_firmware_mapping brc
|
||||
@@ -58,7 +59,8 @@ static struct brcmf_firmware_mapping brc
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43238_CHIP_ID, 0x00000008, 43236B),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43242_CHIP_ID, 0xFFFFFFFF, 43242A),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43566_CHIP_ID, 0xFFFFFFFF, 43569),
|
||||
@@ -80,7 +80,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
};
|
||||
|
||||
#define TRX_MAGIC 0x30524448 /* "HDR0" */
|
||||
@@ -1461,15 +1463,20 @@ static int brcmf_usb_reset_resume(struct
|
||||
@@ -1462,15 +1464,20 @@ static int brcmf_usb_reset_resume(struct
|
||||
#define LINKSYS_USB_DEVICE(dev_id) \
|
||||
{ USB_DEVICE(BRCM_USB_VENDOR_ID_LINKSYS, dev_id) }
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -259,10 +259,11 @@ struct rte_console {
|
||||
@@ -260,10 +260,11 @@ struct rte_console {
|
||||
#define I_HMB_HOST_INT I_HMB_SW3 /* Miscellaneous Interrupt */
|
||||
|
||||
/* tohostmailboxdata */
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
#define HMB_DATA_FCDATA_MASK 0xff000000
|
||||
#define HMB_DATA_FCDATA_SHIFT 24
|
||||
@@ -1093,6 +1094,10 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
@@ -1094,6 +1095,10 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
offsetof(struct sdpcmd_regs, tosbmailbox));
|
||||
bus->sdcnt.f1regdata += 2;
|
||||
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
/* Dongle recomposed rx frames, accept them again */
|
||||
if (hmb_data & HMB_DATA_NAKHANDLED) {
|
||||
brcmf_dbg(SDIO, "Dongle reports NAK handled, expect rtx of %d\n",
|
||||
@@ -1150,6 +1155,7 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
@@ -1151,6 +1156,7 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
HMB_DATA_NAKHANDLED |
|
||||
HMB_DATA_FC |
|
||||
HMB_DATA_FWREADY |
|
||||
|
||||
@@ -77,7 +77,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
union {
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -192,6 +192,37 @@ static void brcmf_netdev_set_multicast_l
|
||||
@@ -191,6 +191,37 @@ static void brcmf_netdev_set_multicast_l
|
||||
schedule_work(&ifp->multicast_work);
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *ndev)
|
||||
{
|
||||
@@ -211,6 +242,23 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
@@ -210,6 +241,23 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
/* Make sure there's enough writable headroom*/
|
||||
ret = skb_cow_head(skb, drvr->hdrlen);
|
||||
if (ret < 0) {
|
||||
@@ -288,6 +336,15 @@ void brcmf_txflowblock(struct device *de
|
||||
@@ -277,6 +325,15 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
|
||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6775,7 +6775,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6776,7 +6776,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
return;
|
||||
|
||||
/* ignore non-ISO3166 country codes */
|
||||
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1058,6 +1058,11 @@ int brcmf_bus_started(struct device *dev
|
||||
@@ -1030,6 +1030,11 @@ int brcmf_bus_started(struct device *dev
|
||||
/* signal bus ready */
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_UP);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -961,55 +961,6 @@ static int brcmf_inet6addr_changed(struc
|
||||
@@ -933,55 +933,6 @@ static int brcmf_inet6addr_changed(struc
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -72,7 +72,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
static int brcmf_revinfo_read(struct seq_file *s, void *data)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(s->private);
|
||||
@@ -1141,6 +1092,55 @@ fail:
|
||||
@@ -1109,6 +1060,55 @@ fail:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
u32 nmode = 0;
|
||||
u32 vhtmode = 0;
|
||||
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
|
||||
@@ -6764,8 +6768,8 @@ static s32 brcmf_translate_country_code(
|
||||
@@ -6765,8 +6769,8 @@ static s32 brcmf_translate_country_code(
|
||||
static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
|
||||
struct regulatory_request *req)
|
||||
{
|
||||
@@ -150,7 +150,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct brcmf_fil_country_le ccreq;
|
||||
s32 err;
|
||||
int i;
|
||||
@@ -6800,7 +6804,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6801,7 +6805,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
brcmf_err("Firmware rejected country setting\n");
|
||||
return;
|
||||
}
|
||||
@@ -159,7 +159,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
|
||||
static void brcmf_free_wiphy(struct wiphy *wiphy)
|
||||
@@ -6827,17 +6831,15 @@ static void brcmf_free_wiphy(struct wiph
|
||||
@@ -6828,17 +6832,15 @@ static void brcmf_free_wiphy(struct wiph
|
||||
if (wiphy->wowlan != &brcmf_wowlan_support)
|
||||
kfree(wiphy->wowlan);
|
||||
#endif
|
||||
@@ -179,7 +179,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_if *ifp;
|
||||
s32 err = 0;
|
||||
@@ -6849,26 +6851,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6850,26 +6852,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
cfg->pub = drvr;
|
||||
init_vif_event(&cfg->vif_event);
|
||||
INIT_LIST_HEAD(&cfg->vif_list);
|
||||
@@ -6877,6 +6866,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6878,6 +6867,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
if (IS_ERR(vif))
|
||||
goto wiphy_out;
|
||||
|
||||
@@ -217,7 +217,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
vif->ifp = ifp;
|
||||
vif->wdev.netdev = ndev;
|
||||
ndev->ieee80211_ptr = &vif->wdev;
|
||||
@@ -6903,6 +6893,11 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6904,6 +6894,11 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
if (err < 0)
|
||||
goto priv_out;
|
||||
|
||||
@@ -229,7 +229,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_dbg(INFO, "Registering custom regulatory\n");
|
||||
wiphy->reg_notifier = brcmf_cfg80211_reg_notifier;
|
||||
wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG;
|
||||
@@ -6916,13 +6911,17 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6917,13 +6912,17 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
cap = &wiphy->bands[NL80211_BAND_2GHZ]->ht_cap.cap;
|
||||
*cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
|
||||
}
|
||||
@@ -248,7 +248,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (err) {
|
||||
brcmf_err("Setting wiphy bands failed (%d)\n", err);
|
||||
goto wiphy_unreg_out;
|
||||
@@ -6939,12 +6938,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6940,12 +6939,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
else
|
||||
*cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
|
||||
}
|
||||
@@ -262,7 +262,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
brcmf_err("FWEH activation failed (%d)\n", err);
|
||||
@@ -7004,8 +6998,7 @@ priv_out:
|
||||
@@ -7005,8 +6999,7 @@ priv_out:
|
||||
ifp->vif = NULL;
|
||||
wiphy_out:
|
||||
brcmf_free_wiphy(wiphy);
|
||||
@@ -272,7 +272,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -7016,7 +7009,8 @@ void brcmf_cfg80211_detach(struct brcmf_
|
||||
@@ -7017,7 +7010,8 @@ void brcmf_cfg80211_detach(struct brcmf_
|
||||
|
||||
brcmf_btcoex_detach(cfg);
|
||||
wiphy_unregister(cfg->wiphy);
|
||||
@@ -349,16 +349,16 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1036,7 +1036,7 @@ int brcmf_bus_started(struct device *dev
|
||||
@@ -1008,7 +1008,7 @@ int brcmf_bus_started(struct device *dev
|
||||
|
||||
brcmf_fws_add_interface(ifp);
|
||||
brcmf_proto_add_if(drvr, ifp);
|
||||
|
||||
- drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
|
||||
+ drvr->config = brcmf_cfg80211_attach(drvr, drvr->cfg80211_ops,
|
||||
drvr->settings->p2p_enable);
|
||||
if (drvr->config == NULL) {
|
||||
ret = -ENOMEM;
|
||||
@@ -1095,17 +1095,26 @@ fail:
|
||||
@@ -1063,17 +1063,26 @@ fail:
|
||||
|
||||
int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
{
|
||||
@@ -388,7 +388,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
|
||||
@@ -1134,10 +1143,12 @@ int brcmf_attach(struct device *dev, str
|
||||
@@ -1102,10 +1111,12 @@ int brcmf_attach(struct device *dev, str
|
||||
/* attach firmware event handler */
|
||||
brcmf_fweh_attach(drvr);
|
||||
|
||||
@@ -401,15 +401,15 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1195,6 +1206,7 @@ void brcmf_detach(struct device *dev)
|
||||
@@ -1163,6 +1174,7 @@ void brcmf_detach(struct device *dev)
|
||||
brcmf_remove_interface(drvr->iflist[i], false);
|
||||
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
+ drvr->config = NULL;
|
||||
|
||||
brcmf_fws_deinit(drvr);
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
@@ -1204,7 +1216,7 @@ void brcmf_detach(struct device *dev)
|
||||
@@ -1170,7 +1182,7 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_debug_detach(drvr);
|
||||
bus_if->drvr = NULL;
|
||||
@@ -428,7 +428,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct brcmf_cfg80211_info *config;
|
||||
|
||||
/* Internal brcmf items */
|
||||
@@ -143,6 +144,9 @@ struct brcmf_pub {
|
||||
@@ -141,6 +142,9 @@ struct brcmf_pub {
|
||||
struct notifier_block inetaddr_notifier;
|
||||
struct notifier_block inet6addr_notifier;
|
||||
struct brcmf_mp_device *settings;
|
||||
|
||||
@@ -24,10 +24,10 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -6489,6 +6489,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
BIT(NL80211_BSS_SELECT_ATTR_RSSI_ADJUST);
|
||||
@@ -6490,6 +6490,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
|
||||
wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT |
|
||||
wiphy->flags |= WIPHY_FLAG_NETNS_OK |
|
||||
WIPHY_FLAG_PS_ON_BY_DEFAULT |
|
||||
+ WIPHY_FLAG_HAVE_AP_SME |
|
||||
WIPHY_FLAG_OFFCHAN_TX |
|
||||
WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
|
||||
|
||||
@@ -34,18 +34,18 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -231,6 +231,8 @@ void brcmf_detach(struct device *dev);
|
||||
@@ -229,6 +229,8 @@ int brcmf_attach(struct device *dev, str
|
||||
void brcmf_detach(struct device *dev);
|
||||
/* Indication from bus module that dongle should be reset */
|
||||
void brcmf_dev_reset(struct device *dev);
|
||||
/* Indication from bus module to change flow-control state */
|
||||
void brcmf_txflowblock(struct device *dev, bool state);
|
||||
+/* Request from bus module to initiate a coredump */
|
||||
+void brcmf_dev_coredump(struct device *dev);
|
||||
|
||||
/* Notify the bus has transferred the tx packet to firmware */
|
||||
void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||
/* Configure the "global" bus state used by upper layers */
|
||||
void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1175,6 +1175,14 @@ void brcmf_dev_reset(struct device *dev)
|
||||
@@ -1143,6 +1143,14 @@ void brcmf_dev_reset(struct device *dev)
|
||||
brcmf_fil_cmd_int_set(drvr->iflist[0], BRCMF_C_TERMINATED, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1078,6 +1078,7 @@ static void brcmf_sdio_get_console_addr(
|
||||
@@ -1079,6 +1079,7 @@ static void brcmf_sdio_get_console_addr(
|
||||
|
||||
static u32 brcmf_sdio_hostmail(struct brcmf_sdio *bus)
|
||||
{
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
u32 intstatus = 0;
|
||||
u32 hmb_data;
|
||||
u8 fcbits;
|
||||
@@ -1095,8 +1096,10 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
@@ -1096,8 +1097,10 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
bus->sdcnt.f1regdata += 2;
|
||||
|
||||
/* dongle indicates the firmware has halted/crashed */
|
||||
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
#include <net/ipv6.h>
|
||||
#include <brcmu_utils.h>
|
||||
#include <brcmu_wifi.h>
|
||||
@@ -367,6 +368,34 @@ void brcmf_netif_rx(struct brcmf_if *ifp
|
||||
@@ -356,6 +357,34 @@ void brcmf_netif_rx(struct brcmf_if *ifp
|
||||
netif_rx_ni(skb);
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
struct mutex proto_block;
|
||||
unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
|
||||
@@ -219,6 +220,7 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
@@ -217,6 +218,7 @@ void brcmf_txflowblock_if(struct brcmf_i
|
||||
enum brcmf_netif_stop_reason reason, bool state);
|
||||
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
|
||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||
|
||||
@@ -57,7 +57,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1132,7 +1132,7 @@ int brcmf_attach(struct device *dev, str
|
||||
@@ -1100,7 +1100,7 @@ int brcmf_attach(struct device *dev, str
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
|
||||
@@ -1815,7 +1815,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
wiphy->wowlan = &brcmf_wowlan_support;
|
||||
return;
|
||||
}
|
||||
@@ -6528,7 +6575,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
@@ -6529,7 +6576,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BANDLIST, &bandlist,
|
||||
sizeof(bandlist));
|
||||
if (err) {
|
||||
@@ -1824,7 +1824,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return err;
|
||||
}
|
||||
/* first entry in bandlist is number of bands */
|
||||
@@ -6800,8 +6847,8 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6801,8 +6848,8 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
/* ignore non-ISO3166 country codes */
|
||||
for (i = 0; i < 2; i++)
|
||||
if (req->alpha2[i] < 'A' || req->alpha2[i] > 'Z') {
|
||||
@@ -1835,7 +1835,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6810,7 +6857,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6811,7 +6858,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
|
||||
err = brcmf_fil_iovar_data_get(ifp, "country", &ccreq, sizeof(ccreq));
|
||||
if (err) {
|
||||
@@ -1844,7 +1844,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6820,7 +6867,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6821,7 +6868,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
|
||||
err = brcmf_fil_iovar_data_set(ifp, "country", &ccreq, sizeof(ccreq));
|
||||
if (err) {
|
||||
@@ -1853,7 +1853,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return;
|
||||
}
|
||||
brcmf_setup_wiphybands(cfg);
|
||||
@@ -6866,13 +6913,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6867,13 +6914,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
u16 *cap = NULL;
|
||||
|
||||
if (!ndev) {
|
||||
@@ -1869,7 +1869,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -6893,7 +6940,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6894,7 +6941,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
|
||||
err = wl_init_priv(cfg);
|
||||
if (err) {
|
||||
@@ -1878,7 +1878,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_free_vif(vif);
|
||||
goto wiphy_out;
|
||||
}
|
||||
@@ -6902,7 +6949,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6903,7 +6950,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
/* determine d11 io type before wiphy setup */
|
||||
err = brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_VERSION, &io_type);
|
||||
if (err) {
|
||||
@@ -1887,7 +1887,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto priv_out;
|
||||
}
|
||||
cfg->d11inf.io_type = (u8)io_type;
|
||||
@@ -6936,13 +6983,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6937,13 +6984,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
#endif
|
||||
err = wiphy_register(wiphy);
|
||||
if (err < 0) {
|
||||
@@ -1903,7 +1903,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto wiphy_unreg_out;
|
||||
}
|
||||
|
||||
@@ -6960,18 +7007,18 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6961,18 +7008,18 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
@@ -1925,7 +1925,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_p2p_detach(&cfg->p2p);
|
||||
goto wiphy_unreg_out;
|
||||
}
|
||||
@@ -6990,7 +7037,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6991,7 +7038,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
/* (re-) activate FWEH event handling */
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -43,6 +43,36 @@
|
||||
@@ -42,6 +42,36 @@
|
||||
|
||||
#define BRCMF_BSSIDX_INVALID -1
|
||||
|
||||
@@ -76,7 +76,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
char *brcmf_ifname(struct brcmf_if *ifp)
|
||||
{
|
||||
if (!ifp)
|
||||
@@ -372,6 +402,35 @@ void brcmf_netif_mon_rx(struct brcmf_if
|
||||
@@ -361,6 +391,35 @@ void brcmf_netif_mon_rx(struct brcmf_if
|
||||
{
|
||||
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MONITOR_FMT_RADIOTAP)) {
|
||||
/* Do nothing */
|
||||
|
||||
@@ -2079,7 +2079,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
wiphy->wowlan = &brcmf_wowlan_support;
|
||||
return;
|
||||
}
|
||||
@@ -6585,7 +6634,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
@@ -6586,7 +6635,7 @@ static int brcmf_setup_wiphy(struct wiph
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BANDLIST, &bandlist,
|
||||
sizeof(bandlist));
|
||||
if (err) {
|
||||
@@ -2088,7 +2088,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return err;
|
||||
}
|
||||
/* first entry in bandlist is number of bands */
|
||||
@@ -6846,6 +6895,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6847,6 +6896,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
{
|
||||
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
@@ -2096,7 +2096,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct brcmf_fil_country_le ccreq;
|
||||
s32 err;
|
||||
int i;
|
||||
@@ -6857,7 +6907,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6858,7 +6908,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
/* ignore non-ISO3166 country codes */
|
||||
for (i = 0; i < 2; i++)
|
||||
if (req->alpha2[i] < 'A' || req->alpha2[i] > 'Z') {
|
||||
@@ -2105,7 +2105,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
req->alpha2[0], req->alpha2[1]);
|
||||
return;
|
||||
}
|
||||
@@ -6867,7 +6917,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6868,7 +6918,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
|
||||
err = brcmf_fil_iovar_data_get(ifp, "country", &ccreq, sizeof(ccreq));
|
||||
if (err) {
|
||||
@@ -2114,7 +2114,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6877,7 +6927,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
@@ -6878,7 +6928,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
|
||||
err = brcmf_fil_iovar_data_set(ifp, "country", &ccreq, sizeof(ccreq));
|
||||
if (err) {
|
||||
@@ -2123,7 +2123,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return;
|
||||
}
|
||||
brcmf_setup_wiphybands(cfg);
|
||||
@@ -6923,13 +6973,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6924,13 +6974,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
u16 *cap = NULL;
|
||||
|
||||
if (!ndev) {
|
||||
@@ -2139,7 +2139,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -6950,7 +7000,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6951,7 +7001,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
|
||||
err = wl_init_priv(cfg);
|
||||
if (err) {
|
||||
@@ -2148,7 +2148,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_free_vif(vif);
|
||||
goto wiphy_out;
|
||||
}
|
||||
@@ -6959,7 +7009,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6960,7 +7010,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
/* determine d11 io type before wiphy setup */
|
||||
err = brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_VERSION, &io_type);
|
||||
if (err) {
|
||||
@@ -2157,7 +2157,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto priv_out;
|
||||
}
|
||||
cfg->d11inf.io_type = (u8)io_type;
|
||||
@@ -6993,13 +7043,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -6994,13 +7044,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
#endif
|
||||
err = wiphy_register(wiphy);
|
||||
if (err < 0) {
|
||||
@@ -2173,7 +2173,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto wiphy_unreg_out;
|
||||
}
|
||||
|
||||
@@ -7017,18 +7067,18 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -7018,18 +7068,18 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
@@ -2195,7 +2195,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_p2p_detach(&cfg->p2p);
|
||||
goto wiphy_unreg_out;
|
||||
}
|
||||
@@ -7047,7 +7097,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
@@ -7048,7 +7098,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
/* (re-) activate FWEH event handling */
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -169,8 +169,8 @@ brcmf_proto_bcdc_query_dcmd(struct brcmf
|
||||
@@ -177,8 +177,8 @@ brcmf_proto_bcdc_query_dcmd(struct brcmf
|
||||
|
||||
ret = brcmf_proto_bcdc_msg(drvr, ifidx, cmd, buf, len, false);
|
||||
if (ret < 0) {
|
||||
@@ -40,7 +40,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -186,9 +186,9 @@ retry:
|
||||
@@ -194,9 +194,9 @@ retry:
|
||||
if ((id < bcdc->reqid) && (++retries < RETRIES))
|
||||
goto retry;
|
||||
if (id != bcdc->reqid) {
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
@@ -234,9 +234,9 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
|
||||
@@ -242,9 +242,9 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
|
||||
id = (flags & BCDC_DCMD_ID_MASK) >> BCDC_DCMD_ID_SHIFT;
|
||||
|
||||
if (id != bcdc->reqid) {
|
||||
@@ -66,7 +66,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
@@ -299,8 +299,8 @@ brcmf_proto_bcdc_hdrpull(struct brcmf_pu
|
||||
@@ -307,8 +307,8 @@ brcmf_proto_bcdc_hdrpull(struct brcmf_pu
|
||||
}
|
||||
if (((h->flags & BCDC_FLAG_VER_MASK) >> BCDC_FLAG_VER_SHIFT) !=
|
||||
BCDC_PROTO_VER) {
|
||||
@@ -77,7 +77,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return -EBADE;
|
||||
}
|
||||
|
||||
@@ -379,7 +379,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
@@ -450,7 +450,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
|
||||
/* ensure that the msg buf directly follows the cdc msg struct */
|
||||
if ((unsigned long)(&bcdc->msg + 1) != (unsigned long)bcdc->buf) {
|
||||
@@ -189,7 +189,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -90,7 +90,7 @@ struct brcmf_if *brcmf_get_ifp(struct br
|
||||
@@ -89,7 +89,7 @@ struct brcmf_if *brcmf_get_ifp(struct br
|
||||
s32 bsscfgidx;
|
||||
|
||||
if (ifidx < 0 || ifidx >= BRCMF_MAX_IFS) {
|
||||
@@ -198,7 +198,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,9 @@ struct brcmf_if *brcmf_get_ifp(struct br
|
||||
@@ -103,7 +103,9 @@ struct brcmf_if *brcmf_get_ifp(struct br
|
||||
|
||||
static void _brcmf_set_multicast_list(struct work_struct *work)
|
||||
{
|
||||
@@ -209,7 +209,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct net_device *ndev;
|
||||
struct netdev_hw_addr *ha;
|
||||
u32 cmd_value, cnt;
|
||||
@@ -113,8 +115,6 @@ static void _brcmf_set_multicast_list(st
|
||||
@@ -112,8 +114,6 @@ static void _brcmf_set_multicast_list(st
|
||||
u32 buflen;
|
||||
s32 err;
|
||||
|
||||
@@ -218,7 +218,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx);
|
||||
|
||||
ndev = ifp->ndev;
|
||||
@@ -144,7 +144,7 @@ static void _brcmf_set_multicast_list(st
|
||||
@@ -143,7 +143,7 @@ static void _brcmf_set_multicast_list(st
|
||||
|
||||
err = brcmf_fil_iovar_data_set(ifp, "mcast_list", buf, buflen);
|
||||
if (err < 0) {
|
||||
@@ -227,7 +227,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
cmd_value = cnt ? true : cmd_value;
|
||||
}
|
||||
|
||||
@@ -157,24 +157,24 @@ static void _brcmf_set_multicast_list(st
|
||||
@@ -156,24 +156,24 @@ static void _brcmf_set_multicast_list(st
|
||||
*/
|
||||
err = brcmf_fil_iovar_int_set(ifp, "allmulti", cmd_value);
|
||||
if (err < 0)
|
||||
@@ -258,7 +258,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
/* clear the table in firmware */
|
||||
ret = brcmf_fil_iovar_data_set(ifp, "nd_hostip_clear", NULL, 0);
|
||||
if (ret) {
|
||||
@@ -187,7 +187,7 @@ static void _brcmf_update_ndtable(struct
|
||||
@@ -186,7 +186,7 @@ static void _brcmf_update_ndtable(struct
|
||||
&ifp->ipv6_addr_tbl[i],
|
||||
sizeof(struct in6_addr));
|
||||
if (ret)
|
||||
@@ -267,7 +267,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
}
|
||||
#else
|
||||
@@ -200,6 +200,7 @@ static int brcmf_netdev_set_mac_address(
|
||||
@@ -199,6 +199,7 @@ static int brcmf_netdev_set_mac_address(
|
||||
{
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
struct sockaddr *sa = (struct sockaddr *)addr;
|
||||
@@ -275,7 +275,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int err;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx);
|
||||
@@ -207,7 +208,7 @@ static int brcmf_netdev_set_mac_address(
|
||||
@@ -206,7 +207,7 @@ static int brcmf_netdev_set_mac_address(
|
||||
err = brcmf_fil_iovar_data_set(ifp, "cur_etheraddr", sa->sa_data,
|
||||
ETH_ALEN);
|
||||
if (err < 0) {
|
||||
@@ -284,7 +284,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
} else {
|
||||
brcmf_dbg(TRACE, "updated to %pM\n", sa->sa_data);
|
||||
memcpy(ifp->mac_addr, sa->sa_data, ETH_ALEN);
|
||||
@@ -266,7 +267,7 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
@@ -265,7 +266,7 @@ static netdev_tx_t brcmf_netdev_start_xm
|
||||
|
||||
/* Can the device send data? */
|
||||
if (drvr->bus_if->state != BRCMF_BUS_UP) {
|
||||
@@ -293,7 +293,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
netif_stop_queue(ndev);
|
||||
dev_kfree_skb(skb);
|
||||
ret = -ENODEV;
|
||||
@@ -604,7 +605,7 @@ static int brcmf_netdev_open(struct net_
|
||||
@@ -575,7 +576,7 @@ static int brcmf_netdev_open(struct net_
|
||||
|
||||
/* If bus is not ready, can't continue */
|
||||
if (bus_if->state != BRCMF_BUS_UP) {
|
||||
@@ -302,7 +302,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@@ -618,7 +619,7 @@ static int brcmf_netdev_open(struct net_
|
||||
@@ -589,7 +590,7 @@ static int brcmf_netdev_open(struct net_
|
||||
ndev->features &= ~NETIF_F_IP_CSUM;
|
||||
|
||||
if (brcmf_cfg80211_up(ndev)) {
|
||||
@@ -311,7 +311,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@@ -663,7 +664,7 @@ int brcmf_net_attach(struct brcmf_if *if
|
||||
@@ -635,7 +636,7 @@ int brcmf_net_attach(struct brcmf_if *if
|
||||
else
|
||||
err = register_netdev(ndev);
|
||||
if (err != 0) {
|
||||
@@ -320,7 +320,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -739,6 +740,7 @@ static const struct net_device_ops brcmf
|
||||
@@ -711,6 +712,7 @@ static const struct net_device_ops brcmf
|
||||
|
||||
static int brcmf_net_p2p_attach(struct brcmf_if *ifp)
|
||||
{
|
||||
@@ -328,7 +328,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct net_device *ndev;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d mac=%pM\n", ifp->bsscfgidx,
|
||||
@@ -751,7 +753,7 @@ static int brcmf_net_p2p_attach(struct b
|
||||
@@ -723,7 +725,7 @@ static int brcmf_net_p2p_attach(struct b
|
||||
memcpy(ndev->dev_addr, ifp->mac_addr, ETH_ALEN);
|
||||
|
||||
if (register_netdev(ndev) != 0) {
|
||||
@@ -337,7 +337,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -781,8 +783,8 @@ struct brcmf_if *brcmf_add_if(struct brc
|
||||
@@ -753,8 +755,8 @@ struct brcmf_if *brcmf_add_if(struct brc
|
||||
*/
|
||||
if (ifp) {
|
||||
if (ifidx) {
|
||||
@@ -348,7 +348,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
netif_stop_queue(ifp->ndev);
|
||||
brcmf_net_detach(ifp->ndev, false);
|
||||
drvr->iflist[bsscfgidx] = NULL;
|
||||
@@ -840,7 +842,7 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
@@ -812,7 +814,7 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
ifp = drvr->iflist[bsscfgidx];
|
||||
drvr->iflist[bsscfgidx] = NULL;
|
||||
if (!ifp) {
|
||||
@@ -357,7 +357,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return;
|
||||
}
|
||||
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d, ifidx=%d\n", bsscfgidx,
|
||||
@@ -890,16 +892,17 @@ static int brcmf_psm_watchdog_notify(str
|
||||
@@ -862,16 +864,17 @@ static int brcmf_psm_watchdog_notify(str
|
||||
const struct brcmf_event_msg *evtmsg,
|
||||
void *data)
|
||||
{
|
||||
@@ -377,7 +377,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -943,7 +946,7 @@ static int brcmf_inetaddr_changed(struct
|
||||
@@ -915,7 +918,7 @@ static int brcmf_inetaddr_changed(struct
|
||||
ret = brcmf_fil_iovar_data_get(ifp, "arp_hostip", addr_table,
|
||||
sizeof(addr_table));
|
||||
if (ret) {
|
||||
@@ -386,7 +386,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
@@ -960,7 +963,7 @@ static int brcmf_inetaddr_changed(struct
|
||||
@@ -932,7 +935,7 @@ static int brcmf_inetaddr_changed(struct
|
||||
ret = brcmf_fil_iovar_data_set(ifp, "arp_hostip",
|
||||
&ifa->ifa_address, sizeof(ifa->ifa_address));
|
||||
if (ret)
|
||||
@@ -395,7 +395,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
break;
|
||||
case NETDEV_DOWN:
|
||||
@@ -972,8 +975,8 @@ static int brcmf_inetaddr_changed(struct
|
||||
@@ -944,8 +947,8 @@ static int brcmf_inetaddr_changed(struct
|
||||
ret = brcmf_fil_iovar_data_set(ifp, "arp_hostip_clear",
|
||||
NULL, 0);
|
||||
if (ret) {
|
||||
@@ -406,7 +406,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
for (i = 0; i < ARPOL_MAX_ENTRIES; i++) {
|
||||
@@ -983,8 +986,8 @@ static int brcmf_inetaddr_changed(struct
|
||||
@@ -955,8 +958,8 @@ static int brcmf_inetaddr_changed(struct
|
||||
&addr_table[i],
|
||||
sizeof(addr_table[i]));
|
||||
if (ret)
|
||||
@@ -417,7 +417,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1161,7 +1164,7 @@ int brcmf_bus_started(struct device *dev
|
||||
@@ -1133,7 +1136,7 @@ int brcmf_bus_started(struct device *dev
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
@@ -426,7 +426,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (drvr->config) {
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
drvr->config = NULL;
|
||||
@@ -1220,7 +1223,7 @@ int brcmf_attach(struct device *dev, str
|
||||
@@ -1188,7 +1191,7 @@ int brcmf_attach(struct device *dev, str
|
||||
/* Attach and link in the protocol */
|
||||
ret = brcmf_proto_attach(drvr);
|
||||
if (ret != 0) {
|
||||
@@ -435,7 +435,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -1330,6 +1333,7 @@ static int brcmf_get_pend_8021x_cnt(stru
|
||||
@@ -1296,6 +1299,7 @@ static int brcmf_get_pend_8021x_cnt(stru
|
||||
|
||||
int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp)
|
||||
{
|
||||
@@ -443,7 +443,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int err;
|
||||
|
||||
err = wait_event_timeout(ifp->pend_8021x_wait,
|
||||
@@ -1337,7 +1341,7 @@ int brcmf_netdev_wait_pend8021x(struct b
|
||||
@@ -1303,7 +1307,7 @@ int brcmf_netdev_wait_pend8021x(struct b
|
||||
MAX_WAIT_FOR_8021X_TX);
|
||||
|
||||
if (!err)
|
||||
@@ -523,7 +523,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
@@ -181,7 +182,8 @@ static void brcmf_fweh_handle_if_event(s
|
||||
if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
|
||||
brcmf_fws_reset_interface(ifp);
|
||||
brcmf_proto_reset_if(drvr, ifp);
|
||||
|
||||
- err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
|
||||
+ err = brcmf_fweh_call_event_handler(drvr, ifp, emsg->event_code, emsg,
|
||||
@@ -622,7 +622,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
ifp->bsscfgidx, name, len);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -1250,6 +1250,7 @@ static int brcmf_fws_enq(struct brcmf_fw
|
||||
@@ -1251,6 +1251,7 @@ static int brcmf_fws_enq(struct brcmf_fw
|
||||
enum brcmf_fws_skb_state state, int fifo,
|
||||
struct sk_buff *p)
|
||||
{
|
||||
@@ -630,7 +630,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int prec = 2 * fifo;
|
||||
u32 *qfull_stat = &fws->stats.delayq_full_error;
|
||||
struct brcmf_fws_mac_descriptor *entry;
|
||||
@@ -1262,7 +1263,7 @@ static int brcmf_fws_enq(struct brcmf_fw
|
||||
@@ -1263,7 +1264,7 @@ static int brcmf_fws_enq(struct brcmf_fw
|
||||
|
||||
entry = brcmf_skbcb(p)->mac;
|
||||
if (entry == NULL) {
|
||||
@@ -639,7 +639,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
@@ -1452,6 +1453,7 @@ static int
|
||||
@@ -1453,6 +1454,7 @@ static int
|
||||
brcmf_fws_txs_process(struct brcmf_fws_info *fws, u8 flags, u32 hslot,
|
||||
u32 genbit, u16 seq)
|
||||
{
|
||||
@@ -647,7 +647,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
u32 fifo;
|
||||
int ret;
|
||||
bool remove_from_hanger = true;
|
||||
@@ -1475,12 +1477,12 @@ brcmf_fws_txs_process(struct brcmf_fws_i
|
||||
@@ -1476,12 +1478,12 @@ brcmf_fws_txs_process(struct brcmf_fws_i
|
||||
else if (flags == BRCMF_FWS_TXSTATUS_HOST_TOSSED)
|
||||
fws->stats.txs_host_tossed++;
|
||||
else
|
||||
@@ -662,13 +662,13 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1586,12 +1588,13 @@ static int brcmf_fws_notify_credit_map(s
|
||||
@@ -1587,12 +1589,13 @@ static int brcmf_fws_notify_credit_map(s
|
||||
const struct brcmf_event_msg *e,
|
||||
void *data)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = ifp->drvr->fws;
|
||||
- struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
+ struct brcmf_pub *drvr = ifp->drvr;
|
||||
+ struct brcmf_fws_info *fws = drvr->fws;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(drvr);
|
||||
int i;
|
||||
u8 *credits = data;
|
||||
|
||||
@@ -678,7 +678,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return -EINVAL;
|
||||
}
|
||||
if (fws->creditmap_received)
|
||||
@@ -1653,6 +1656,7 @@ static void brcmf_rxreorder_get_skb_list
|
||||
@@ -1654,6 +1657,7 @@ static void brcmf_rxreorder_get_skb_list
|
||||
|
||||
void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
|
||||
{
|
||||
@@ -686,7 +686,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
u8 *reorder_data;
|
||||
u8 flow_id, max_idx, cur_idx, exp_idx, end_idx;
|
||||
struct brcmf_ampdu_rx_reorder *rfi;
|
||||
@@ -1667,7 +1671,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
|
||||
@@ -1668,7 +1672,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
|
||||
|
||||
/* validate flags and flow id */
|
||||
if (flags == 0xFF) {
|
||||
@@ -695,7 +695,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_netif_rx(ifp, pkt);
|
||||
return;
|
||||
}
|
||||
@@ -1704,7 +1708,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
|
||||
@@ -1705,7 +1709,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
|
||||
flow_id, max_idx);
|
||||
rfi = kzalloc(buf_size, GFP_ATOMIC);
|
||||
if (rfi == NULL) {
|
||||
@@ -704,7 +704,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_netif_rx(ifp, pkt);
|
||||
return;
|
||||
}
|
||||
@@ -1969,6 +1973,7 @@ static u8 brcmf_fws_precommit_skb(struct
|
||||
@@ -1970,6 +1974,7 @@ static u8 brcmf_fws_precommit_skb(struct
|
||||
static void brcmf_fws_rollback_toq(struct brcmf_fws_info *fws,
|
||||
struct sk_buff *skb, int fifo)
|
||||
{
|
||||
@@ -712,7 +712,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct brcmf_fws_mac_descriptor *entry;
|
||||
struct sk_buff *pktout;
|
||||
int qidx, hslot;
|
||||
@@ -1982,11 +1987,11 @@ static void brcmf_fws_rollback_toq(struc
|
||||
@@ -1983,11 +1988,11 @@ static void brcmf_fws_rollback_toq(struc
|
||||
|
||||
pktout = brcmu_pktq_penq_head(&entry->psq, qidx, skb);
|
||||
if (pktout == NULL) {
|
||||
@@ -726,7 +726,17 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
rc = -ENOENT;
|
||||
}
|
||||
|
||||
@@ -2120,7 +2125,7 @@ int brcmf_fws_process_skb(struct brcmf_i
|
||||
@@ -2092,7 +2097,8 @@ static int brcmf_fws_assign_htod(struct
|
||||
|
||||
int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||
{
|
||||
- struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||
+ struct brcmf_pub *drvr = ifp->drvr;
|
||||
+ struct brcmf_fws_info *fws = drvr_to_fws(drvr);
|
||||
struct brcmf_skbuff_cb *skcb = brcmf_skbcb(skb);
|
||||
struct ethhdr *eh = (struct ethhdr *)(skb->data);
|
||||
int fifo = BRCMF_FWS_FIFO_BCMC;
|
||||
@@ -2120,7 +2126,7 @@ int brcmf_fws_process_skb(struct brcmf_i
|
||||
brcmf_fws_enq(fws, BRCMF_FWS_SKBSTATE_DELAYED, fifo, skb);
|
||||
brcmf_fws_schedule_deq(fws);
|
||||
} else {
|
||||
@@ -735,7 +745,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_txfinalize(ifp, skb, false);
|
||||
rc = -ENOMEM;
|
||||
}
|
||||
@@ -2339,7 +2344,7 @@ int brcmf_fws_init(struct brcmf_pub *drv
|
||||
@@ -2338,7 +2344,7 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
||||
|
||||
fws->fws_wq = create_singlethread_workqueue("brcmf_fws_wq");
|
||||
if (fws->fws_wq == NULL) {
|
||||
@@ -744,7 +754,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
rc = -EBADF;
|
||||
goto fail;
|
||||
}
|
||||
@@ -2355,13 +2360,13 @@ int brcmf_fws_init(struct brcmf_pub *drv
|
||||
@@ -2354,13 +2360,13 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
||||
rc = brcmf_fweh_register(drvr, BRCMF_E_FIFO_CREDIT_MAP,
|
||||
brcmf_fws_notify_credit_map);
|
||||
if (rc < 0) {
|
||||
@@ -760,7 +770,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
brcmf_fweh_unregister(drvr, BRCMF_E_FIFO_CREDIT_MAP);
|
||||
goto fail;
|
||||
}
|
||||
@@ -2373,7 +2378,7 @@ int brcmf_fws_init(struct brcmf_pub *drv
|
||||
@@ -2372,7 +2378,7 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
||||
fws->fw_signals = true;
|
||||
ifp = brcmf_get_ifp(drvr, 0);
|
||||
if (brcmf_fil_iovar_int_set(ifp, "tlv", tlv)) {
|
||||
@@ -1549,10 +1559,10 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
struct cfg80211_sched_scan_request *req)
|
||||
{
|
||||
+ struct brcmf_pub *drvr = ifp->drvr;
|
||||
struct brcmu_d11inf *d11inf;
|
||||
struct brcmf_pno_config_le pno_cfg;
|
||||
struct cfg80211_ssid *ssid;
|
||||
@@ -191,7 +195,7 @@ int brcmf_pno_start_sched_scan(struct br
|
||||
u16 chan;
|
||||
@@ -190,7 +194,7 @@ int brcmf_pno_start_sched_scan(struct br
|
||||
/* clean up everything */
|
||||
ret = brcmf_pno_clean(ifp);
|
||||
if (ret < 0) {
|
||||
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
/* Data struct for the MSGBUF_TYPE_RING_STATUS */
|
||||
struct msgbuf_ring_status {
|
||||
struct msgbuf_common_hdr msg;
|
||||
@@ -1194,6 +1202,18 @@ brcmf_msgbuf_process_rx_complete(struct
|
||||
@@ -1192,6 +1200,18 @@ brcmf_msgbuf_process_rx_complete(struct
|
||||
brcmf_netif_rx(ifp, skb);
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf,
|
||||
void *buf)
|
||||
{
|
||||
@@ -1273,6 +1293,10 @@ static void brcmf_msgbuf_process_msgtype
|
||||
@@ -1271,6 +1291,10 @@ static void brcmf_msgbuf_process_msgtype
|
||||
|
||||
msg = (struct msgbuf_common_hdr *)buf;
|
||||
switch (msg->msgtype) {
|
||||
|
||||
@@ -25,18 +25,18 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -233,6 +233,8 @@ void brcmf_dev_reset(struct device *dev)
|
||||
void brcmf_txflowblock(struct device *dev, bool state);
|
||||
@@ -231,6 +231,8 @@ void brcmf_detach(struct device *dev);
|
||||
void brcmf_dev_reset(struct device *dev);
|
||||
/* Request from bus module to initiate a coredump */
|
||||
void brcmf_dev_coredump(struct device *dev);
|
||||
+/* Indication that firmware has halted or crashed */
|
||||
+void brcmf_fw_crashed(struct device *dev);
|
||||
|
||||
/* Notify the bus has transferred the tx packet to firmware */
|
||||
void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||
/* Configure the "global" bus state used by upper layers */
|
||||
void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1274,6 +1274,16 @@ void brcmf_dev_coredump(struct device *d
|
||||
@@ -1242,6 +1242,16 @@ void brcmf_dev_coredump(struct device *d
|
||||
brcmf_dbg(TRACE, "failed to create coredump\n");
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1097,8 +1097,8 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
@@ -1098,8 +1098,8 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||
|
||||
/* dongle indicates the firmware has halted/crashed */
|
||||
if (hmb_data & HMB_DATA_FWHALT) {
|
||||
|
||||
@@ -49,7 +49,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
*/
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1080,6 +1080,14 @@ static int brcmf_revinfo_read(struct seq
|
||||
@@ -1052,6 +1052,14 @@ static int brcmf_revinfo_read(struct seq
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int brcmf_bus_started(struct device *dev)
|
||||
{
|
||||
int ret = -1;
|
||||
@@ -1161,6 +1169,8 @@ int brcmf_bus_started(struct device *dev
|
||||
@@ -1133,6 +1141,8 @@ int brcmf_bus_started(struct device *dev
|
||||
#endif
|
||||
#endif /* CONFIG_INET */
|
||||
|
||||
@@ -73,7 +73,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
@@ -1282,6 +1292,8 @@ void brcmf_fw_crashed(struct device *dev
|
||||
@@ -1250,6 +1260,8 @@ void brcmf_fw_crashed(struct device *dev
|
||||
bphy_err(drvr, "Firmware has halted or crashed\n");
|
||||
|
||||
brcmf_dev_coredump(dev);
|
||||
@@ -84,7 +84,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
void brcmf_detach(struct device *dev)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -146,6 +146,8 @@ struct brcmf_pub {
|
||||
@@ -144,6 +144,8 @@ struct brcmf_pub {
|
||||
struct notifier_block inet6addr_notifier;
|
||||
struct brcmf_mp_device *settings;
|
||||
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
From c80d26e81ef1802f30364b4ad1955c1443a592b9 Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Date: Mon, 4 Mar 2019 15:42:49 +0000
|
||||
Subject: [PATCH] brcmfmac: fix WARNING during USB disconnect in case of
|
||||
unempty psq
|
||||
|
||||
brcmu_pkt_buf_free_skb emits WARNING when attempting to free a sk_buff
|
||||
which is part of any queue. After USB disconnect this may have happened
|
||||
when brcmf_fws_hanger_cleanup() is called as per-interface psq was never
|
||||
cleaned when removing the interface.
|
||||
Change brcmf_fws_macdesc_cleanup() in a way that it removes the
|
||||
corresponding packets from hanger table (to avoid double-free when
|
||||
brcmf_fws_hanger_cleanup() is called) and add a call to clean-up the
|
||||
interface specific packet queue.
|
||||
|
||||
Below is a WARNING during USB disconnect with Raspberry Pi WiFi dongle
|
||||
running in AP mode. This was reproducible when the interface was
|
||||
transmitting during the disconnect and is fixed with this commit.
|
||||
|
||||
------------[ cut here ]------------
|
||||
WARNING: CPU: 0 PID: 1171 at drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c:49 brcmu_pkt_buf_free_skb+0x3c/0x40
|
||||
Modules linked in: nf_log_ipv4 nf_log_common xt_LOG xt_limit iptable_mangle xt_connmark xt_tcpudp xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter ip_tables x_tables usb_f_mass_storage usb_f_rndis u_ether cdc_acm smsc95xx usbnet ci_hdrc_imx ci_hdrc ulpi usbmisc_imx 8250_exar 8250_pci 8250 8250_base libcomposite configfs udc_core
|
||||
CPU: 0 PID: 1171 Comm: kworker/0:0 Not tainted 4.19.23-00075-gde33ed8 #99
|
||||
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
|
||||
Workqueue: usb_hub_wq hub_event
|
||||
[<8010ff84>] (unwind_backtrace) from [<8010bb64>] (show_stack+0x10/0x14)
|
||||
[<8010bb64>] (show_stack) from [<80840278>] (dump_stack+0x88/0x9c)
|
||||
[<80840278>] (dump_stack) from [<8011f5ec>] (__warn+0xfc/0x114)
|
||||
[<8011f5ec>] (__warn) from [<8011f71c>] (warn_slowpath_null+0x40/0x48)
|
||||
[<8011f71c>] (warn_slowpath_null) from [<805a476c>] (brcmu_pkt_buf_free_skb+0x3c/0x40)
|
||||
[<805a476c>] (brcmu_pkt_buf_free_skb) from [<805bb6c4>] (brcmf_fws_cleanup+0x1e4/0x22c)
|
||||
[<805bb6c4>] (brcmf_fws_cleanup) from [<805bc854>] (brcmf_fws_del_interface+0x58/0x68)
|
||||
[<805bc854>] (brcmf_fws_del_interface) from [<805b66ac>] (brcmf_remove_interface+0x40/0x150)
|
||||
[<805b66ac>] (brcmf_remove_interface) from [<805b6870>] (brcmf_detach+0x6c/0xb0)
|
||||
[<805b6870>] (brcmf_detach) from [<805bdbb8>] (brcmf_usb_disconnect+0x30/0x4c)
|
||||
[<805bdbb8>] (brcmf_usb_disconnect) from [<805e5d64>] (usb_unbind_interface+0x5c/0x1e0)
|
||||
[<805e5d64>] (usb_unbind_interface) from [<804aab10>] (device_release_driver_internal+0x154/0x1ec)
|
||||
[<804aab10>] (device_release_driver_internal) from [<804a97f4>] (bus_remove_device+0xcc/0xf8)
|
||||
[<804a97f4>] (bus_remove_device) from [<804a6fc0>] (device_del+0x118/0x308)
|
||||
[<804a6fc0>] (device_del) from [<805e488c>] (usb_disable_device+0xa0/0x1c8)
|
||||
[<805e488c>] (usb_disable_device) from [<805dcf98>] (usb_disconnect+0x70/0x1d8)
|
||||
[<805dcf98>] (usb_disconnect) from [<805ddd84>] (hub_event+0x464/0xf50)
|
||||
[<805ddd84>] (hub_event) from [<80135a70>] (process_one_work+0x138/0x3f8)
|
||||
[<80135a70>] (process_one_work) from [<80135d5c>] (worker_thread+0x2c/0x554)
|
||||
[<80135d5c>] (worker_thread) from [<8013b1a0>] (kthread+0x124/0x154)
|
||||
[<8013b1a0>] (kthread) from [<801010e8>] (ret_from_fork+0x14/0x2c)
|
||||
Exception stack(0xecf8dfb0 to 0xecf8dff8)
|
||||
dfa0: 00000000 00000000 00000000 00000000
|
||||
dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
|
||||
---[ end trace 38d234018e9e2a90 ]---
|
||||
------------[ cut here ]------------
|
||||
|
||||
Signed-off-by: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 42 +++++++++++--------
|
||||
1 file changed, 24 insertions(+), 18 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -579,24 +579,6 @@ static bool brcmf_fws_ifidx_match(struct
|
||||
return ifidx == *(int *)arg;
|
||||
}
|
||||
|
||||
-static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q,
|
||||
- int ifidx)
|
||||
-{
|
||||
- bool (*matchfn)(struct sk_buff *, void *) = NULL;
|
||||
- struct sk_buff *skb;
|
||||
- int prec;
|
||||
-
|
||||
- if (ifidx != -1)
|
||||
- matchfn = brcmf_fws_ifidx_match;
|
||||
- for (prec = 0; prec < q->num_prec; prec++) {
|
||||
- skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
|
||||
- while (skb) {
|
||||
- brcmu_pkt_buf_free_skb(skb);
|
||||
- skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static void brcmf_fws_hanger_init(struct brcmf_fws_hanger *hanger)
|
||||
{
|
||||
int i;
|
||||
@@ -668,6 +650,28 @@ static inline int brcmf_fws_hanger_poppk
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q,
|
||||
+ int ifidx)
|
||||
+{
|
||||
+ bool (*matchfn)(struct sk_buff *, void *) = NULL;
|
||||
+ struct sk_buff *skb;
|
||||
+ int prec;
|
||||
+ u32 hslot;
|
||||
+
|
||||
+ if (ifidx != -1)
|
||||
+ matchfn = brcmf_fws_ifidx_match;
|
||||
+ for (prec = 0; prec < q->num_prec; prec++) {
|
||||
+ skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
|
||||
+ while (skb) {
|
||||
+ hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
|
||||
+ brcmf_fws_hanger_poppkt(&fws->hanger, hslot, &skb,
|
||||
+ true);
|
||||
+ brcmu_pkt_buf_free_skb(skb);
|
||||
+ skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int brcmf_fws_hanger_mark_suppressed(struct brcmf_fws_hanger *h,
|
||||
u32 slot_id)
|
||||
{
|
||||
@@ -2174,6 +2178,8 @@ void brcmf_fws_del_interface(struct brcm
|
||||
brcmf_fws_lock(fws);
|
||||
ifp->fws_desc = NULL;
|
||||
brcmf_dbg(TRACE, "deleting %s\n", entry->name);
|
||||
+ brcmf_fws_macdesc_cleanup(fws, &fws->desc.iface[ifp->ifidx],
|
||||
+ ifp->ifidx);
|
||||
brcmf_fws_macdesc_deinit(entry);
|
||||
brcmf_fws_cleanup(fws, ifp->ifidx);
|
||||
brcmf_fws_unlock(fws);
|
||||
@@ -0,0 +1,217 @@
|
||||
From 5cdb0ef6144f47440850553579aa923c20a63f23 Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Date: Mon, 4 Mar 2019 15:42:52 +0000
|
||||
Subject: [PATCH] brcmfmac: fix NULL pointer derefence during USB disconnect
|
||||
|
||||
In case USB disconnect happens at the moment transmitting workqueue is in
|
||||
progress the underlying interface may be gone causing a NULL pointer
|
||||
dereference. Add synchronization of the workqueue destruction with the
|
||||
detach implementation in core so that the transmitting workqueue is stopped
|
||||
during detach before the interfaces are removed.
|
||||
|
||||
Fix following Oops:
|
||||
|
||||
Unable to handle kernel NULL pointer dereference at virtual address 00000008
|
||||
pgd = 9e6a802d
|
||||
[00000008] *pgd=00000000
|
||||
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
|
||||
Modules linked in: nf_log_ipv4 nf_log_common xt_LOG xt_limit iptable_mangle
|
||||
xt_connmark xt_tcpudp xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4
|
||||
iptable_filter ip_tables x_tables usb_f_mass_storage usb_f_rndis u_ether
|
||||
usb_serial_simple usbserial cdc_acm brcmfmac brcmutil smsc95xx usbnet
|
||||
ci_hdrc_imx ci_hdrc ulpi usbmisc_imx 8250_exar 8250_pci 8250 8250_base
|
||||
libcomposite configfs udc_core
|
||||
CPU: 0 PID: 7 Comm: kworker/u8:0 Not tainted 4.19.23-00076-g03740aa-dirty #102
|
||||
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
|
||||
Workqueue: brcmf_fws_wq brcmf_fws_dequeue_worker [brcmfmac]
|
||||
PC is at brcmf_txfinalize+0x34/0x90 [brcmfmac]
|
||||
LR is at brcmf_fws_dequeue_worker+0x218/0x33c [brcmfmac]
|
||||
pc : [<7f0dee64>] lr : [<7f0e4140>] psr: 60010093
|
||||
sp : ee8abef0 ip : 00000000 fp : edf38000
|
||||
r10: ffffffed r9 : edf38970 r8 : edf38004
|
||||
r7 : edf3e970 r6 : 00000000 r5 : ede69000 r4 : 00000000
|
||||
r3 : 00000a97 r2 : 00000000 r1 : 0000888e r0 : ede69000
|
||||
Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment none
|
||||
Control: 10c5387d Table: 7d03c04a DAC: 00000051
|
||||
Process kworker/u8:0 (pid: 7, stack limit = 0x24ec3e04)
|
||||
Stack: (0xee8abef0 to 0xee8ac000)
|
||||
bee0: ede69000 00000000 ed56c3e0 7f0e4140
|
||||
bf00: 00000001 00000000 edf38004 edf3e99c ed56c3e0 80d03d00 edfea43a edf3e970
|
||||
bf20: ee809880 ee804200 ee971100 00000000 edf3e974 00000000 ee804200 80135a70
|
||||
bf40: 80d03d00 ee804218 ee809880 ee809894 ee804200 80d03d00 ee804218 ee8aa000
|
||||
bf60: 00000088 80135d5c 00000000 ee829f00 ee829dc0 00000000 ee809880 80135d30
|
||||
bf80: ee829f1c ee873eac 00000000 8013b1a0 ee829dc0 8013b07c 00000000 00000000
|
||||
bfa0: 00000000 00000000 00000000 801010e8 00000000 00000000 00000000 00000000
|
||||
bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
|
||||
[<7f0dee64>] (brcmf_txfinalize [brcmfmac]) from [<7f0e4140>] (brcmf_fws_dequeue_worker+0x218/0x33c [brcmfmac])
|
||||
[<7f0e4140>] (brcmf_fws_dequeue_worker [brcmfmac]) from [<80135a70>] (process_one_work+0x138/0x3f8)
|
||||
[<80135a70>] (process_one_work) from [<80135d5c>] (worker_thread+0x2c/0x554)
|
||||
[<80135d5c>] (worker_thread) from [<8013b1a0>] (kthread+0x124/0x154)
|
||||
[<8013b1a0>] (kthread) from [<801010e8>] (ret_from_fork+0x14/0x2c)
|
||||
Exception stack(0xee8abfb0 to 0xee8abff8)
|
||||
bfa0: 00000000 00000000 00000000 00000000
|
||||
bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
||||
bfe0: 00000000 00000000 00000000 00000000 00000013 00000000
|
||||
Code: e1530001 0a000007 e3560000 e1a00005 (05942008)
|
||||
---[ end trace 079239dd31c86e90 ]---
|
||||
|
||||
Signed-off-by: Piotr Figiel <p.figiel@camlintechnologies.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 11 +++++++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.h | 6 ++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 4 +++-
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 16 ++++++++++++----
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.h | 3 ++-
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/proto.c | 10 ++++++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/proto.h | 3 ++-
|
||||
7 files changed, 40 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -479,11 +479,18 @@ fail:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
-void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
||||
+void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
+
|
||||
+ brcmf_fws_detach_pre_delif(bcdc->fws);
|
||||
+}
|
||||
+
|
||||
+void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
|
||||
drvr->proto->pd = NULL;
|
||||
- brcmf_fws_detach(bcdc->fws);
|
||||
+ brcmf_fws_detach_post_delif(bcdc->fws);
|
||||
kfree(bcdc);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
@@ -18,14 +18,16 @@
|
||||
|
||||
#ifdef CPTCFG_BRCMFMAC_PROTO_BCDC
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
||||
void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||
bool success);
|
||||
struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr);
|
||||
#else
|
||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||
-static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||
+static void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr) {};
|
||||
+static inline void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr) {}
|
||||
#endif
|
||||
|
||||
#endif /* BRCMFMAC_BCDC_H */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1290,6 +1290,8 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
|
||||
|
||||
+ brcmf_proto_detach_pre_delif(drvr);
|
||||
+
|
||||
/* make sure primary interface removed last */
|
||||
for (i = BRCMF_MAX_IFS-1; i > -1; i--)
|
||||
brcmf_remove_interface(drvr->iflist[i], false);
|
||||
@@ -1299,7 +1301,7 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
- brcmf_proto_detach(drvr);
|
||||
+ brcmf_proto_detach_post_delif(drvr);
|
||||
|
||||
brcmf_debug_detach(drvr);
|
||||
bus_if->drvr = NULL;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -2420,17 +2420,25 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
||||
return fws;
|
||||
|
||||
fail:
|
||||
- brcmf_fws_detach(fws);
|
||||
+ brcmf_fws_detach_pre_delif(fws);
|
||||
+ brcmf_fws_detach_post_delif(fws);
|
||||
return ERR_PTR(rc);
|
||||
}
|
||||
|
||||
-void brcmf_fws_detach(struct brcmf_fws_info *fws)
|
||||
+void brcmf_fws_detach_pre_delif(struct brcmf_fws_info *fws)
|
||||
{
|
||||
if (!fws)
|
||||
return;
|
||||
-
|
||||
- if (fws->fws_wq)
|
||||
+ if (fws->fws_wq) {
|
||||
destroy_workqueue(fws->fws_wq);
|
||||
+ fws->fws_wq = NULL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void brcmf_fws_detach_post_delif(struct brcmf_fws_info *fws)
|
||||
+{
|
||||
+ if (!fws)
|
||||
+ return;
|
||||
|
||||
/* cleanup */
|
||||
brcmf_fws_lock(fws);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
@@ -19,7 +19,8 @@
|
||||
#define FWSIGNAL_H_
|
||||
|
||||
struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_fws_detach(struct brcmf_fws_info *fws);
|
||||
+void brcmf_fws_detach_pre_delif(struct brcmf_fws_info *fws);
|
||||
+void brcmf_fws_detach_post_delif(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
||||
@@ -66,16 +66,22 @@ fail:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
-void brcmf_proto_detach(struct brcmf_pub *drvr)
|
||||
+void brcmf_proto_detach_post_delif(struct brcmf_pub *drvr)
|
||||
{
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
if (drvr->proto) {
|
||||
if (drvr->bus_if->proto_type == BRCMF_PROTO_BCDC)
|
||||
- brcmf_proto_bcdc_detach(drvr);
|
||||
+ brcmf_proto_bcdc_detach_post_delif(drvr);
|
||||
else if (drvr->bus_if->proto_type == BRCMF_PROTO_MSGBUF)
|
||||
brcmf_proto_msgbuf_detach(drvr);
|
||||
kfree(drvr->proto);
|
||||
drvr->proto = NULL;
|
||||
}
|
||||
}
|
||||
+
|
||||
+void brcmf_proto_detach_pre_delif(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ if (drvr->proto && drvr->bus_if->proto_type == BRCMF_PROTO_BCDC)
|
||||
+ brcmf_proto_bcdc_detach_pre_delif(drvr);
|
||||
+}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -53,7 +53,8 @@ struct brcmf_proto {
|
||||
|
||||
|
||||
int brcmf_proto_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_proto_detach(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_detach_pre_delif(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_detach_post_delif(struct brcmf_pub *drvr);
|
||||
|
||||
static inline int brcmf_proto_hdrpull(struct brcmf_pub *drvr, bool do_fws,
|
||||
struct sk_buff *skb,
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -838,17 +838,17 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
@@ -810,17 +810,17 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
bool rtnl_locked)
|
||||
{
|
||||
struct brcmf_if *ifp;
|
||||
@@ -110,7 +110,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
if (ifp->ndev) {
|
||||
if (bsscfgidx == 0) {
|
||||
if (ifp->ndev->netdev_ops == &brcmf_netdev_ops_pri) {
|
||||
@@ -876,6 +876,10 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
@@ -848,6 +848,10 @@ static void brcmf_del_if(struct brcmf_pu
|
||||
brcmf_p2p_ifp_removed(ifp, rtnl_locked);
|
||||
kfree(ifp);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -616,6 +616,7 @@ BRCMF_FW_NVRAM_DEF(43430A0, "brcmfmac434
|
||||
@@ -617,6 +617,7 @@ BRCMF_FW_NVRAM_DEF(43430A0, "brcmfmac434
|
||||
/* Note the names are not postfixed with a1 for backward compatibility */
|
||||
BRCMF_FW_NVRAM_DEF(43430A1, "brcmfmac43430-sdio.bin", "brcmfmac43430-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-sdio.bin", "brcmfmac4356-sdio.txt");
|
||||
BRCMF_FW_NVRAM_DEF(4373, "brcmfmac4373-sdio.bin", "brcmfmac4373-sdio.txt");
|
||||
@@ -635,7 +636,8 @@ static struct brcmf_firmware_mapping brc
|
||||
@@ -636,7 +637,8 @@ static struct brcmf_firmware_mapping brc
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
|
||||
BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
From bbfab331e3abd9fa8767eea6bf5c4684cdd4b934 Mon Sep 17 00:00:00 2001
|
||||
From: Neo Jou <neojou@gmail.com>
|
||||
Date: Tue, 21 May 2019 17:12:20 +0800
|
||||
Subject: [PATCH] brcmfmac: use strlcpy() instead of strcpy()
|
||||
|
||||
The function strcpy() is inherently not safe. Though the function
|
||||
works without problems here, it would be better to use other safer
|
||||
function, e.g. strlcpy(), to replace strcpy() still.
|
||||
|
||||
Signed-off-by: Neo Jou <neojou@gmail.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -157,7 +157,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
|
||||
/* query for 'ver' to get version info from firmware */
|
||||
memset(buf, 0, sizeof(buf));
|
||||
- strcpy(buf, "ver");
|
||||
+ strlcpy(buf, "ver", sizeof(buf));
|
||||
err = brcmf_fil_iovar_data_get(ifp, "ver", buf, sizeof(buf));
|
||||
if (err < 0) {
|
||||
bphy_err(drvr, "Retrieving version information failed, %d\n",
|
||||
@@ -0,0 +1,56 @@
|
||||
From f491645f039420fb7e14283e21b90772571c807c Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 10:45:30 +0200
|
||||
Subject: [PATCH] brcmfmac: add 160MHz in chandef_to_chanspec()
|
||||
|
||||
The function chandef_to_chanspec() was not handling 160MHz bandwidth
|
||||
resulting in wrong encoding of the channel. That resulting in firmware
|
||||
rejecting the provided channel specification.
|
||||
|
||||
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>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 21 ++++++++++++++++++-
|
||||
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -287,8 +287,26 @@ static u16 chandef_to_chanspec(struct br
|
||||
else
|
||||
ch_inf.sb = BRCMU_CHAN_SB_UU;
|
||||
break;
|
||||
- case NL80211_CHAN_WIDTH_80P80:
|
||||
case NL80211_CHAN_WIDTH_160:
|
||||
+ ch_inf.bw = BRCMU_CHAN_BW_160;
|
||||
+ if (primary_offset == -70)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_LLL;
|
||||
+ else if (primary_offset == -50)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_LLU;
|
||||
+ else if (primary_offset == -30)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_LUL;
|
||||
+ else if (primary_offset == -10)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_LUU;
|
||||
+ else if (primary_offset == 10)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_ULL;
|
||||
+ else if (primary_offset == 30)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_ULU;
|
||||
+ else if (primary_offset == 50)
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_UUL;
|
||||
+ else
|
||||
+ ch_inf.sb = BRCMU_CHAN_SB_UUU;
|
||||
+ break;
|
||||
+ case NL80211_CHAN_WIDTH_80P80:
|
||||
case NL80211_CHAN_WIDTH_5:
|
||||
case NL80211_CHAN_WIDTH_10:
|
||||
default:
|
||||
@@ -307,6 +325,7 @@ static u16 chandef_to_chanspec(struct br
|
||||
}
|
||||
d11inf->encchspec(&ch_inf);
|
||||
|
||||
+ brcmf_dbg(TRACE, "chanspec: 0x%x\n", ch_inf.chspec);
|
||||
return ch_inf.chspec;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
From a84a60ccdd65278485fb495f468a5ab91a75c649 Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:06 +0200
|
||||
Subject: [PATCH] Revert "brcmfmac: fix NULL pointer derefence during USB
|
||||
disconnect"
|
||||
|
||||
This reverts commit 5cdb0ef6144f47440850553579aa923c20a63f23. Subsequent
|
||||
changes make rework the driver code fixing the issue differently.
|
||||
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 11 ++---------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.h | 6 ++----
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 4 +---
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 16 ++++------------
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.h | 3 +--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/proto.c | 10 ++--------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/proto.h | 3 +--
|
||||
7 files changed, 13 insertions(+), 40 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -479,18 +479,11 @@ fail:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
-void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr)
|
||||
-{
|
||||
- struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
-
|
||||
- brcmf_fws_detach_pre_delif(bcdc->fws);
|
||||
-}
|
||||
-
|
||||
-void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr)
|
||||
+void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||
|
||||
drvr->proto->pd = NULL;
|
||||
- brcmf_fws_detach_post_delif(bcdc->fws);
|
||||
+ brcmf_fws_detach(bcdc->fws);
|
||||
kfree(bcdc);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
|
||||
@@ -18,16 +18,14 @@
|
||||
|
||||
#ifdef CPTCFG_BRCMFMAC_PROTO_BCDC
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr);
|
||||
-void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
||||
void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||
bool success);
|
||||
struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr);
|
||||
#else
|
||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||
-static void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr) {};
|
||||
-static inline void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr) {}
|
||||
+static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||
#endif
|
||||
|
||||
#endif /* BRCMFMAC_BCDC_H */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1294,8 +1294,6 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
|
||||
|
||||
- brcmf_proto_detach_pre_delif(drvr);
|
||||
-
|
||||
/* make sure primary interface removed last */
|
||||
for (i = BRCMF_MAX_IFS-1; i > -1; i--)
|
||||
brcmf_remove_interface(drvr->iflist[i], false);
|
||||
@@ -1305,7 +1303,7 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
- brcmf_proto_detach_post_delif(drvr);
|
||||
+ brcmf_proto_detach(drvr);
|
||||
|
||||
brcmf_debug_detach(drvr);
|
||||
bus_if->drvr = NULL;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -2420,25 +2420,17 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
||||
return fws;
|
||||
|
||||
fail:
|
||||
- brcmf_fws_detach_pre_delif(fws);
|
||||
- brcmf_fws_detach_post_delif(fws);
|
||||
+ brcmf_fws_detach(fws);
|
||||
return ERR_PTR(rc);
|
||||
}
|
||||
|
||||
-void brcmf_fws_detach_pre_delif(struct brcmf_fws_info *fws)
|
||||
+void brcmf_fws_detach(struct brcmf_fws_info *fws)
|
||||
{
|
||||
if (!fws)
|
||||
return;
|
||||
- if (fws->fws_wq) {
|
||||
- destroy_workqueue(fws->fws_wq);
|
||||
- fws->fws_wq = NULL;
|
||||
- }
|
||||
-}
|
||||
|
||||
-void brcmf_fws_detach_post_delif(struct brcmf_fws_info *fws)
|
||||
-{
|
||||
- if (!fws)
|
||||
- return;
|
||||
+ if (fws->fws_wq)
|
||||
+ destroy_workqueue(fws->fws_wq);
|
||||
|
||||
/* cleanup */
|
||||
brcmf_fws_lock(fws);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
@@ -19,8 +19,7 @@
|
||||
#define FWSIGNAL_H_
|
||||
|
||||
struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_fws_detach_pre_delif(struct brcmf_fws_info *fws);
|
||||
-void brcmf_fws_detach_post_delif(struct brcmf_fws_info *fws);
|
||||
+void brcmf_fws_detach(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
||||
@@ -66,22 +66,16 @@ fail:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
-void brcmf_proto_detach_post_delif(struct brcmf_pub *drvr)
|
||||
+void brcmf_proto_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
if (drvr->proto) {
|
||||
if (drvr->bus_if->proto_type == BRCMF_PROTO_BCDC)
|
||||
- brcmf_proto_bcdc_detach_post_delif(drvr);
|
||||
+ brcmf_proto_bcdc_detach(drvr);
|
||||
else if (drvr->bus_if->proto_type == BRCMF_PROTO_MSGBUF)
|
||||
brcmf_proto_msgbuf_detach(drvr);
|
||||
kfree(drvr->proto);
|
||||
drvr->proto = NULL;
|
||||
}
|
||||
}
|
||||
-
|
||||
-void brcmf_proto_detach_pre_delif(struct brcmf_pub *drvr)
|
||||
-{
|
||||
- if (drvr->proto && drvr->bus_if->proto_type == BRCMF_PROTO_BCDC)
|
||||
- brcmf_proto_bcdc_detach_pre_delif(drvr);
|
||||
-}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -53,8 +53,7 @@ struct brcmf_proto {
|
||||
|
||||
|
||||
int brcmf_proto_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_proto_detach_pre_delif(struct brcmf_pub *drvr);
|
||||
-void brcmf_proto_detach_post_delif(struct brcmf_pub *drvr);
|
||||
+void brcmf_proto_detach(struct brcmf_pub *drvr);
|
||||
|
||||
static inline int brcmf_proto_hdrpull(struct brcmf_pub *drvr, bool do_fws,
|
||||
struct sk_buff *skb,
|
||||
@@ -0,0 +1,69 @@
|
||||
From 14fcfd1cc0c05ea58f47dd693fdd13f25dfe995e Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:07 +0200
|
||||
Subject: [PATCH] brcmfmac: change the order of things in brcmf_detach()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When brcmf_detach() from the bus layer upon rmmod we can no longer
|
||||
communicate. Hence we will set the bus state to DOWN and cleanup
|
||||
the event and protocol layer. The network interfaces need to be
|
||||
deleted before brcmf_cfg80211_detach() because the latter does the
|
||||
wiphy_unregister() which issues a warning if there are still network
|
||||
devices linked to the wiphy instance.
|
||||
|
||||
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>
|
||||
Tested-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/core.c | 27 ++++++++++---------
|
||||
1 file changed, 14 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1287,26 +1287,27 @@ void brcmf_detach(struct device *dev)
|
||||
unregister_inet6addr_notifier(&drvr->inet6addr_notifier);
|
||||
#endif
|
||||
|
||||
- /* stop firmware event handling */
|
||||
- brcmf_fweh_detach(drvr);
|
||||
- if (drvr->config)
|
||||
- brcmf_p2p_detach(&drvr->config->p2p);
|
||||
-
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
|
||||
-
|
||||
- /* make sure primary interface removed last */
|
||||
- for (i = BRCMF_MAX_IFS-1; i > -1; i--)
|
||||
- brcmf_remove_interface(drvr->iflist[i], false);
|
||||
-
|
||||
- brcmf_cfg80211_detach(drvr->config);
|
||||
- drvr->config = NULL;
|
||||
-
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
+ brcmf_fweh_detach(drvr);
|
||||
brcmf_proto_detach(drvr);
|
||||
-
|
||||
brcmf_debug_detach(drvr);
|
||||
+
|
||||
+ /* make sure primary interface removed last */
|
||||
+ for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
|
||||
+ if (drvr->iflist[i])
|
||||
+ brcmf_del_if(drvr, drvr->iflist[i]->bsscfgidx, false);
|
||||
+ }
|
||||
+
|
||||
+ if (drvr->config) {
|
||||
+ brcmf_p2p_detach(&drvr->config->p2p);
|
||||
+ brcmf_cfg80211_detach(drvr->config);
|
||||
+ drvr->config = NULL;
|
||||
+ }
|
||||
+
|
||||
bus_if->drvr = NULL;
|
||||
+
|
||||
wiphy_free(drvr->wiphy);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From c613085b74941024194e41b200601b9aa6ee388f Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:08 +0200
|
||||
Subject: [PATCH] brcmfmac: avoid firmware command in brcmf_netdev_open() when
|
||||
bus is down
|
||||
|
||||
No point in sending a firmware command when bus is down so make it
|
||||
conditional checking the state.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -558,7 +558,8 @@ static int brcmf_netdev_stop(struct net_
|
||||
|
||||
brcmf_cfg80211_down(ndev);
|
||||
|
||||
- brcmf_fil_iovar_data_set(ifp, "arp_hostip_clear", NULL, 0);
|
||||
+ if (ifp->drvr->bus_if->state == BRCMF_BUS_UP)
|
||||
+ brcmf_fil_iovar_data_set(ifp, "arp_hostip_clear", NULL, 0);
|
||||
|
||||
brcmf_net_setcarrier(ifp, false);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From c33330ac06fe863289643e7a13ecdb6a2502dad7 Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:09 +0200
|
||||
Subject: [PATCH] brcmfmac: clear events in brcmf_fweh_detach() will always
|
||||
fail
|
||||
|
||||
Clearing firmware events in brcmf_fweh_detach() is always failing
|
||||
because it is called only upon driver remove and communication
|
||||
with firmware is no longer possible.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 9 ---------
|
||||
1 file changed, 9 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
|
||||
@@ -319,16 +319,7 @@ void brcmf_fweh_attach(struct brcmf_pub
|
||||
void brcmf_fweh_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_fweh_info *fweh = &drvr->fweh;
|
||||
- struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
|
||||
- s8 eventmask[BRCMF_EVENTING_MASK_LEN];
|
||||
|
||||
- if (ifp) {
|
||||
- /* clear all events */
|
||||
- memset(eventmask, 0, BRCMF_EVENTING_MASK_LEN);
|
||||
- (void)brcmf_fil_iovar_data_set(ifp, "event_msgs",
|
||||
- eventmask,
|
||||
- BRCMF_EVENTING_MASK_LEN);
|
||||
- }
|
||||
/* cancel the worker */
|
||||
cancel_work_sync(&fweh->event_work);
|
||||
WARN_ON(!list_empty(&fweh->event_q));
|
||||
@@ -0,0 +1,69 @@
|
||||
From 1ac11ae949dd883854f4523ef8e3a32aabfd6256 Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:10 +0200
|
||||
Subject: [PATCH] brcmfmac: avoid firmware commands when bus is down
|
||||
|
||||
Upon rmmod a few attempts are made to inform firmware, but there is
|
||||
no point as the bus is down and these will fail. Avoid them to keep
|
||||
the logs clean.
|
||||
|
||||
Reported-by: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
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>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 23 +++++++++++--------
|
||||
1 file changed, 13 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -1388,17 +1388,21 @@ static void brcmf_link_down(struct brcmf
|
||||
{
|
||||
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
|
||||
struct brcmf_pub *drvr = cfg->pub;
|
||||
+ bool bus_up = drvr->bus_if->state == BRCMF_BUS_UP;
|
||||
s32 err = 0;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
if (test_and_clear_bit(BRCMF_VIF_STATUS_CONNECTED, &vif->sme_state)) {
|
||||
- brcmf_dbg(INFO, "Call WLC_DISASSOC to stop excess roaming\n ");
|
||||
- err = brcmf_fil_cmd_data_set(vif->ifp,
|
||||
- BRCMF_C_DISASSOC, NULL, 0);
|
||||
- if (err) {
|
||||
- bphy_err(drvr, "WLC_DISASSOC failed (%d)\n", err);
|
||||
+ if (bus_up) {
|
||||
+ brcmf_dbg(INFO, "Call WLC_DISASSOC to stop excess roaming\n");
|
||||
+ err = brcmf_fil_cmd_data_set(vif->ifp,
|
||||
+ BRCMF_C_DISASSOC, NULL, 0);
|
||||
+ if (err)
|
||||
+ bphy_err(drvr, "WLC_DISASSOC failed (%d)\n",
|
||||
+ err);
|
||||
}
|
||||
+
|
||||
if ((vif->wdev.iftype == NL80211_IFTYPE_STATION) ||
|
||||
(vif->wdev.iftype == NL80211_IFTYPE_P2P_CLIENT))
|
||||
cfg80211_disconnected(vif->wdev.netdev, reason, NULL, 0,
|
||||
@@ -5041,18 +5045,16 @@ static int brcmf_cfg80211_get_channel(st
|
||||
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct net_device *ndev = wdev->netdev;
|
||||
struct brcmf_pub *drvr = cfg->pub;
|
||||
- struct brcmf_if *ifp;
|
||||
struct brcmu_chan ch;
|
||||
enum nl80211_band band = 0;
|
||||
enum nl80211_chan_width width = 0;
|
||||
u32 chanspec;
|
||||
int freq, err;
|
||||
|
||||
- if (!ndev)
|
||||
+ if (!ndev || drvr->bus_if->state != BRCMF_BUS_UP)
|
||||
return -ENODEV;
|
||||
- ifp = netdev_priv(ndev);
|
||||
|
||||
- err = brcmf_fil_iovar_int_get(ifp, "chanspec", &chanspec);
|
||||
+ err = brcmf_fil_iovar_int_get(netdev_priv(ndev), "chanspec", &chanspec);
|
||||
if (err) {
|
||||
bphy_err(drvr, "chanspec failed (%d)\n", err);
|
||||
return err;
|
||||
@@ -0,0 +1,33 @@
|
||||
From e0bfb9601d4812719167cc4124a0d6db1e2f55e4 Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:11 +0200
|
||||
Subject: [PATCH] brcmfmac: simply remove flowring if bus is down
|
||||
|
||||
When the bus is down, eg. due to rmmod, there is no need to
|
||||
attempt to inform firmware about it.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -1406,6 +1406,13 @@ void brcmf_msgbuf_delete_flowring(struct
|
||||
u8 ifidx;
|
||||
int err;
|
||||
|
||||
+ /* no need to submit if firmware can not be reached */
|
||||
+ if (drvr->bus_if->state != BRCMF_BUS_UP) {
|
||||
+ brcmf_dbg(MSGBUF, "bus down, flowring will be removed\n");
|
||||
+ brcmf_msgbuf_remove_flowring(msgbuf, flowid);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
commonring = msgbuf->commonrings[BRCMF_H2D_MSGRING_CONTROL_SUBMIT];
|
||||
brcmf_commonring_lock(commonring);
|
||||
ret_ptr = brcmf_commonring_reserve_for_write(commonring);
|
||||
@@ -0,0 +1,28 @@
|
||||
From 4b11c915f00caeef3292ed0429acc579b9da762a Mon Sep 17 00:00:00 2001
|
||||
From: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 11 Jul 2019 11:05:12 +0200
|
||||
Subject: [PATCH] brcmfmac: remove unnecessary strlcpy() upon obtaining "ver"
|
||||
iovar
|
||||
|
||||
Recently a strcpy() was replaced by strlcpy(). However, the strcpy()
|
||||
was not needed in the first place. So removing that line of code.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -157,7 +157,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
|
||||
/* query for 'ver' to get version info from firmware */
|
||||
memset(buf, 0, sizeof(buf));
|
||||
- strlcpy(buf, "ver", sizeof(buf));
|
||||
err = brcmf_fil_iovar_data_get(ifp, "ver", buf, sizeof(buf));
|
||||
if (err < 0) {
|
||||
bphy_err(drvr, "Retrieving version information failed, %d\n",
|
||||
@@ -0,0 +1,54 @@
|
||||
From cddecd92d1ec2fd05ed1123455e7c6cf6906b5a5 Mon Sep 17 00:00:00 2001
|
||||
From: YueHaibing <yuehaibing@huawei.com>
|
||||
Date: Wed, 24 Jul 2019 22:12:01 +0800
|
||||
Subject: [PATCH] brcmfmac: remove set but not used variable 'dtim_period'
|
||||
|
||||
Fixes gcc '-Wunused-but-set-variable' warning:
|
||||
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c: In function brcmf_update_bss_info:
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:2962:5: warning: variable dtim_period set but not used [-Wunused-but-set-variable]
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c: In function brcmf_update_bss_info:
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:2961:6: warning: variable beacon_interval set but not used [-Wunused-but-set-variable]
|
||||
|
||||
They are never used so can be removed.
|
||||
|
||||
Reported-by: Hulk Robot <hulkci@huawei.com>
|
||||
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 8 +-------
|
||||
1 file changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -3033,8 +3033,6 @@ static s32 brcmf_update_bss_info(struct
|
||||
struct brcmf_pub *drvr = cfg->pub;
|
||||
struct brcmf_bss_info_le *bi;
|
||||
const struct brcmf_tlv *tim;
|
||||
- u16 beacon_interval;
|
||||
- u8 dtim_period;
|
||||
size_t ie_len;
|
||||
u8 *ie;
|
||||
s32 err = 0;
|
||||
@@ -3058,12 +3056,9 @@ static s32 brcmf_update_bss_info(struct
|
||||
|
||||
ie = ((u8 *)bi) + le16_to_cpu(bi->ie_offset);
|
||||
ie_len = le32_to_cpu(bi->ie_length);
|
||||
- beacon_interval = le16_to_cpu(bi->beacon_period);
|
||||
|
||||
tim = brcmf_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
|
||||
- if (tim)
|
||||
- dtim_period = tim->data[1];
|
||||
- else {
|
||||
+ if (!tim) {
|
||||
/*
|
||||
* active scan was done so we could not get dtim
|
||||
* information out of probe response.
|
||||
@@ -3075,7 +3070,6 @@ static s32 brcmf_update_bss_info(struct
|
||||
bphy_err(drvr, "wl dtim_assoc failed (%d)\n", err);
|
||||
goto update_bss_info_out;
|
||||
}
|
||||
- dtim_period = (u8)var;
|
||||
}
|
||||
|
||||
update_bss_info_out:
|
||||
@@ -0,0 +1,26 @@
|
||||
From 73c742bb9c9ba30871fdd5c730d5ca8b6712833a Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.king@canonical.com>
|
||||
Date: Fri, 9 Aug 2019 18:22:17 +0100
|
||||
Subject: [PATCH] brcmfmac: remove redundant assignment to pointer hash
|
||||
|
||||
The pointer hash is being initialized with a value that is never read
|
||||
and is being re-assigned a little later on. The assignment is
|
||||
redundant and hence can be removed.
|
||||
|
||||
Addresses-Coverity: ("Unused value")
|
||||
Signed-off-by: Colin Ian King <colin.king@canonical.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -1476,7 +1476,6 @@ static int brcmf_msgbuf_stats_read(struc
|
||||
seq_printf(seq, "\nh2d_flowrings: depth %u\n",
|
||||
BRCMF_H2D_TXFLOWRING_MAX_ITEM);
|
||||
seq_puts(seq, "Active flowrings:\n");
|
||||
- hash = msgbuf->flow->hash;
|
||||
for (i = 0; i < msgbuf->flow->nrofrings; i++) {
|
||||
if (!msgbuf->flow->rings[i])
|
||||
continue;
|
||||
@@ -0,0 +1,36 @@
|
||||
From 5f42b382ead278c1f6c3854765c97eb20491aa2a Mon Sep 17 00:00:00 2001
|
||||
From: Xulin Sun <xulin.sun@windriver.com>
|
||||
Date: Fri, 23 Aug 2019 15:47:08 +0800
|
||||
Subject: [PATCH] brcmfmac: replace strncpy() by strscpy()
|
||||
|
||||
The strncpy() may truncate the copied string,
|
||||
replace it by the safer strscpy().
|
||||
|
||||
To avoid below compile warning with gcc 8.2:
|
||||
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:In function 'brcmf_vndr_ie':
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:4227:2:
|
||||
warning: 'strncpy' output truncated before terminating nul copying 3 bytes from a string of the same length [-Wstringop-truncation]
|
||||
strncpy(iebuf, add_del_cmd, VNDR_IE_CMD_LEN - 1);
|
||||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Signed-off-by: Xulin Sun <xulin.sun@windriver.com>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -4280,9 +4280,7 @@ next:
|
||||
static u32
|
||||
brcmf_vndr_ie(u8 *iebuf, s32 pktflag, u8 *ie_ptr, u32 ie_len, s8 *add_del_cmd)
|
||||
{
|
||||
-
|
||||
- strncpy(iebuf, add_del_cmd, VNDR_IE_CMD_LEN - 1);
|
||||
- iebuf[VNDR_IE_CMD_LEN - 1] = '\0';
|
||||
+ strscpy(iebuf, add_del_cmd, VNDR_IE_CMD_LEN);
|
||||
|
||||
put_unaligned_le32(1, &iebuf[VNDR_IE_COUNT_OFFSET]);
|
||||
|
||||
@@ -1,19 +1,29 @@
|
||||
From 82f93cf46d6007ffa003b2d4a2834563b6b84d21 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Subject: [PATCH] brcmfmac: get RAM info right before downloading PCIe firmware
|
||||
Date: Thu, 29 Aug 2019 10:27:01 +0200
|
||||
Subject: [PATCH] brcmfmac: get chip's default RAM info during PCIe setup
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's important as brcmf_chip_get_raminfo() also makes sure that memory
|
||||
is properly setup. Without it the firmware could report invalid RAM
|
||||
address like 0x04000001.
|
||||
Getting RAM info just once per driver's lifetime (during chip
|
||||
recognition) is not enough as it may get adjusted later (depending on
|
||||
the used firmware). Subsequent inits may load different firmwares so a
|
||||
full RAM recognition is required on every PCIe setup. This is especially
|
||||
important since implementing hardware reset on a firmware crash.
|
||||
|
||||
During a normal brcmfmac lifetime brcmf_chip_get_raminfo() is called on
|
||||
probe by the brcmf_chip_recognition(). This change allows implementing
|
||||
further improvements like handling errors by resetting a device with
|
||||
the brcmf_pcie_reset_device() and redownloading a firmware afterwards.
|
||||
Moreover calling brcmf_chip_get_raminfo() makes sure that RAM core is
|
||||
up. It's important as having BCMA_CORE_SYS_MEM down on BCM4366 was
|
||||
resulting in firmware failing to initialize and following error:
|
||||
[ 65.657546] brcmfmac 0000:01:00.0: brcmf_pcie_download_fw_nvram: Invalid shared RAM address 0x04000001
|
||||
|
||||
This change makes brcmf_chip_get_raminfo() call during chip recognition
|
||||
redundant for PCIe devices but SDIO and USB still need it and it's a
|
||||
very small overhead anyway.
|
||||
|
||||
Fixes: 4684997d9eea ("brcmfmac: reset PCIe bus on a firmware crash")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 6 ++++--
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h | 1 +
|
||||
@@ -0,0 +1,31 @@
|
||||
From cb34212b1c25f7656a315f956d72696777e88340 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sun, 1 Sep 2019 13:34:35 +0200
|
||||
Subject: [PATCH] brcmfmac: add stub version of brcmf_debugfs_get_devdir()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In case of compiling driver without DEBUG expose a stub function to make
|
||||
writing debug code much simpler (no extra conditions). This will allow
|
||||
e.g. using debugfs_create_file() without any magic if or #ifdef.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
@@ -147,6 +147,10 @@ static inline int brcmf_debug_attach(str
|
||||
static inline void brcmf_debug_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
}
|
||||
+static inline struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+}
|
||||
static inline
|
||||
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
||||
int (*read_fn)(struct seq_file *seq, void *data))
|
||||
@@ -0,0 +1,59 @@
|
||||
From 2f8c8e62cd50d72ac68de884a09c6f5a969a269c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sun, 1 Sep 2019 13:34:36 +0200
|
||||
Subject: [PATCH] brcmfmac: add "reset" debugfs entry for testing reset
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is a trivial debugfs entry for triggering reset just like in case
|
||||
of firmware crash. It works by writing 1 to it:
|
||||
echo 1 > reset
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/core.c | 25 +++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1065,6 +1065,29 @@ static void brcmf_core_bus_reset(struct
|
||||
brcmf_bus_reset(drvr->bus_if);
|
||||
}
|
||||
|
||||
+static ssize_t bus_reset_write(struct file *file, const char __user *user_buf,
|
||||
+ size_t count, loff_t *ppos)
|
||||
+{
|
||||
+ struct brcmf_pub *drvr = file->private_data;
|
||||
+ u8 value;
|
||||
+
|
||||
+ if (kstrtou8_from_user(user_buf, count, 0, &value))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (value != 1)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ schedule_work(&drvr->bus_reset);
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
+static const struct file_operations bus_reset_fops = {
|
||||
+ .open = simple_open,
|
||||
+ .llseek = no_llseek,
|
||||
+ .write = bus_reset_write,
|
||||
+};
|
||||
+
|
||||
int brcmf_bus_started(struct device *dev)
|
||||
{
|
||||
int ret = -1;
|
||||
@@ -1096,6 +1119,8 @@ int brcmf_bus_started(struct device *dev
|
||||
goto fail;
|
||||
|
||||
brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
||||
+ debugfs_create_file("reset", 0600, brcmf_debugfs_get_devdir(drvr), drvr,
|
||||
+ &bus_reset_fops);
|
||||
|
||||
/* assure we have chipid before feature attach */
|
||||
if (!bus_if->chip) {
|
||||
@@ -0,0 +1,58 @@
|
||||
From 0e48b86d9a8f5c695bb02c9c02f6dc7d2ec8f2e2 Mon Sep 17 00:00:00 2001
|
||||
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Date: Wed, 4 Sep 2019 20:50:52 +0300
|
||||
Subject: [PATCH] brcmfmac: use %*ph to print small buffer
|
||||
|
||||
Use %*ph format to print small buffer as hex string.
|
||||
|
||||
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 18 ++++++------------
|
||||
1 file changed, 6 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -4258,10 +4258,8 @@ brcmf_parse_vndr_ies(const u8 *vndr_ie_b
|
||||
|
||||
vndr_ies->count++;
|
||||
|
||||
- brcmf_dbg(TRACE, "** OUI %02x %02x %02x, type 0x%02x\n",
|
||||
- parsed_info->vndrie.oui[0],
|
||||
- parsed_info->vndrie.oui[1],
|
||||
- parsed_info->vndrie.oui[2],
|
||||
+ brcmf_dbg(TRACE, "** OUI %3ph, type 0x%02x\n",
|
||||
+ parsed_info->vndrie.oui,
|
||||
parsed_info->vndrie.oui_type);
|
||||
|
||||
if (vndr_ies->count >= VNDR_IE_PARSE_LIMIT)
|
||||
@@ -4385,12 +4383,10 @@ s32 brcmf_vif_set_mgmt_ie(struct brcmf_c
|
||||
for (i = 0; i < old_vndr_ies.count; i++) {
|
||||
vndrie_info = &old_vndr_ies.ie_info[i];
|
||||
|
||||
- brcmf_dbg(TRACE, "DEL ID : %d, Len: %d , OUI:%02x:%02x:%02x\n",
|
||||
+ brcmf_dbg(TRACE, "DEL ID : %d, Len: %d , OUI:%3ph\n",
|
||||
vndrie_info->vndrie.id,
|
||||
vndrie_info->vndrie.len,
|
||||
- vndrie_info->vndrie.oui[0],
|
||||
- vndrie_info->vndrie.oui[1],
|
||||
- vndrie_info->vndrie.oui[2]);
|
||||
+ vndrie_info->vndrie.oui);
|
||||
|
||||
del_add_ie_buf_len = brcmf_vndr_ie(curr_ie_buf, pktflag,
|
||||
vndrie_info->ie_ptr,
|
||||
@@ -4422,12 +4418,10 @@ s32 brcmf_vif_set_mgmt_ie(struct brcmf_c
|
||||
remained_buf_len -= (vndrie_info->ie_len +
|
||||
VNDR_IE_VSIE_OFFSET);
|
||||
|
||||
- brcmf_dbg(TRACE, "ADDED ID : %d, Len: %d, OUI:%02x:%02x:%02x\n",
|
||||
+ brcmf_dbg(TRACE, "ADDED ID : %d, Len: %d, OUI:%3ph\n",
|
||||
vndrie_info->vndrie.id,
|
||||
vndrie_info->vndrie.len,
|
||||
- vndrie_info->vndrie.oui[0],
|
||||
- vndrie_info->vndrie.oui[1],
|
||||
- vndrie_info->vndrie.oui[2]);
|
||||
+ vndrie_info->vndrie.oui);
|
||||
|
||||
del_add_ie_buf_len = brcmf_vndr_ie(curr_ie_buf, pktflag,
|
||||
vndrie_info->ie_ptr,
|
||||
@@ -0,0 +1,38 @@
|
||||
From e3b1d879ccda9ffd5332777bb1beeb2cc913faa8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sun, 21 Jul 2019 21:52:17 +0200
|
||||
Subject: [PATCH] brcmfmac: don't net_ratelimit() CONSOLE messages on firmware
|
||||
crash
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Firmware crash is a pretty rare event and can't happen too frequently as
|
||||
it has to be followed by a hardware reinitialization and config reload.
|
||||
It should be safe to don't use net_ratelimit() when it happens.
|
||||
|
||||
For reporting & debugging purposes it's important to provide a complete
|
||||
log as the last lines are actually the most important. This change
|
||||
modifies brcmfmac to print all messages in an unlimited way in that
|
||||
specific case. With this change there should be finally a backtrace of
|
||||
firmware finally visible after a crash.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -800,7 +800,8 @@ static void brcmf_pcie_bus_console_read(
|
||||
if (ch == '\n') {
|
||||
console->log_str[console->log_idx] = 0;
|
||||
if (error)
|
||||
- brcmf_err(bus, "CONSOLE: %s", console->log_str);
|
||||
+ __brcmf_err(bus, __func__, "CONSOLE: %s",
|
||||
+ console->log_str);
|
||||
else
|
||||
pr_debug("CONSOLE: %s", console->log_str);
|
||||
console->log_idx = 0;
|
||||
@@ -0,0 +1,54 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 18 Nov 2019 11:52:41 +0100
|
||||
Subject: [PATCH FIX] brcmfmac: disable PCIe interrupts before bus reset
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Keeping interrupts on could result in brcmfmac freeing some resources
|
||||
and then IRQ handlers trying to use them. That was obviously a straight
|
||||
path for crashing a kernel.
|
||||
|
||||
Example:
|
||||
CPU0 CPU1
|
||||
---- ----
|
||||
brcmf_pcie_reset
|
||||
brcmf_pcie_bus_console_read
|
||||
brcmf_detach
|
||||
...
|
||||
brcmf_fweh_detach
|
||||
brcmf_proto_detach
|
||||
brcmf_pcie_isr_thread
|
||||
...
|
||||
brcmf_proto_msgbuf_rx_trigger
|
||||
...
|
||||
drvr->proto->pd
|
||||
brcmf_pcie_release_irq
|
||||
|
||||
[ 363.789218] Unable to handle kernel NULL pointer dereference at virtual address 00000038
|
||||
[ 363.797339] pgd = c0004000
|
||||
[ 363.800050] [00000038] *pgd=00000000
|
||||
[ 363.803635] Internal error: Oops: 17 [#1] SMP ARM
|
||||
(...)
|
||||
[ 364.029209] Backtrace:
|
||||
[ 364.031725] [<bf243838>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf2471dc>] (brcmf_pcie_isr_thread+0x228/0x274 [brcmfmac])
|
||||
[ 364.043662] r7:00000001 r6:c8ca0000 r5:00010000 r4:c7b4f800
|
||||
|
||||
Fixes: 4684997d9eea ("brcmfmac: reset PCIe bus on a firmware crash")
|
||||
Cc: stable@vger.kernel.org # v5.2+
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1409,6 +1409,8 @@ static int brcmf_pcie_reset(struct devic
|
||||
u16 bus_nr;
|
||||
int err;
|
||||
|
||||
+ brcmf_pcie_intr_disable(devinfo);
|
||||
+
|
||||
brcmf_pcie_bus_console_read(devinfo, true);
|
||||
|
||||
brcmf_detach(dev);
|
||||
@@ -0,0 +1,30 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 18 Nov 2019 13:35:20 +0100
|
||||
Subject: [PATCH 5.5] brcmfmac: remove monitor interface when detaching
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This fixes a minor WARNING in the cfg80211:
|
||||
[ 130.658034] ------------[ cut here ]------------
|
||||
[ 130.662805] WARNING: CPU: 1 PID: 610 at net/wireless/core.c:954 wiphy_unregister+0xb4/0x198 [cfg80211]
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1320,6 +1320,11 @@ void brcmf_detach(struct device *dev)
|
||||
brcmf_proto_detach(drvr);
|
||||
brcmf_debug_detach(drvr);
|
||||
|
||||
+ if (drvr->mon_if) {
|
||||
+ brcmf_net_detach(drvr->mon_if->ndev, false);
|
||||
+ drvr->mon_if = NULL;
|
||||
+ }
|
||||
+
|
||||
/* make sure primary interface removed last */
|
||||
for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
|
||||
if (drvr->iflist[i])
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1411,6 +1411,7 @@ int __init brcmf_core_init(void)
|
||||
@@ -1409,6 +1409,7 @@ int __init brcmf_core_init(void)
|
||||
{
|
||||
if (!schedule_work(&brcmf_driver_work))
|
||||
return -EBUSY;
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -662,8 +662,36 @@ static struct wireless_dev *brcmf_cfg802
|
||||
@@ -681,8 +681,36 @@ static struct wireless_dev *brcmf_cfg802
|
||||
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_pub *drvr = cfg->pub;
|
||||
struct wireless_dev *wdev;
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -2823,6 +2823,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
||||
@@ -2846,6 +2846,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
||||
* preference in cfg struct to apply this to
|
||||
* FW later while initializing the dongle
|
||||
*/
|
||||
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=openssl
|
||||
PKG_BASE:=1.0.2
|
||||
PKG_BUGFIX:=s
|
||||
PKG_BUGFIX:=t
|
||||
PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
|
||||
PKG_RELEASE:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
@@ -18,15 +18,17 @@ PKG_BUILD_PARALLEL:=0
|
||||
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://www.openssl.org/source/ \
|
||||
ftp://ftp.openssl.org/source/ \
|
||||
http://www.openssl.org/source/old/$(PKG_BASE)/ \
|
||||
ftp://ftp.funet.fi/pub/crypt/mirrors/ftp.openssl.org/source \
|
||||
ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/
|
||||
PKG_HASH:=cabd5c9492825ce5bd23f3c3aeed6a97f8142f606d893df216411f07d1abab96
|
||||
PKG_SOURCE_URL:= \
|
||||
http://ftp.fi.muni.cz/pub/openssl/source/ \
|
||||
http://ftp.linux.hr/pub/openssl/source/ \
|
||||
http://gd.tuwien.ac.at/infosys/security/openssl/source/ \
|
||||
http://www.openssl.org/source/ \
|
||||
http://www.openssl.org/source/old/$(PKG_BASE)/
|
||||
PKG_HASH:=14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc
|
||||
|
||||
PKG_LICENSE:=OpenSSL
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Eneas U de Queiroz <cotequeiroz@gmail.com>
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_OPENSSL_ENGINE_CRYPTO \
|
||||
CONFIG_OPENSSL_ENGINE_DIGEST \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/Configure
|
||||
+++ b/Configure
|
||||
@@ -2144,6 +2144,11 @@ EOF
|
||||
@@ -2145,6 +2145,11 @@ EOF
|
||||
close(OUT);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ PKG_NAME:=usign
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/usign.git
|
||||
PKG_SOURCE_DATE:=2015-07-04
|
||||
PKG_SOURCE_VERSION:=ef6419142a3b0fbcddcccf536e3c1880302c6f89
|
||||
PKG_MIRROR_HASH:=9499ed7e40889b364e446a428e185c40986b75087888bd7e1496542457a6dbaa
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/usign.git
|
||||
PKG_SOURCE_DATE:=2019-08-06
|
||||
PKG_SOURCE_VERSION:=5a52b379902471cef495687547c7b568142f66d2
|
||||
PKG_MIRROR_HASH:=9779f6d6718a7f7cd3e28aa7feefc9b3f4b0c7a85cb58ff18afbeb6b4372177a
|
||||
CMAKE_INSTALL:=1
|
||||
PKG_CHECK_FORMAT_SECURITY:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
@@ -240,7 +240,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
|
||||
#define PPC4XX_SEC_VERSION_STR "0.5"
|
||||
|
||||
@@ -1230,6 +1231,7 @@ static int crypto4xx_probe(struct platfo
|
||||
@@ -1221,6 +1222,7 @@ static int crypto4xx_probe(struct platfo
|
||||
if (rc)
|
||||
goto err_start_dev;
|
||||
|
||||
@@ -248,7 +248,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
return 0;
|
||||
|
||||
err_start_dev:
|
||||
@@ -1256,6 +1258,8 @@ static int crypto4xx_remove(struct platf
|
||||
@@ -1247,6 +1249,8 @@ static int crypto4xx_remove(struct platf
|
||||
struct device *dev = &ofdev->dev;
|
||||
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
|
||||
|
||||
@@ -257,7 +257,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
free_irq(core_dev->irq, dev);
|
||||
irq_dispose_mapping(core_dev->irq);
|
||||
|
||||
@@ -1276,7 +1280,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
|
||||
@@ -1267,7 +1271,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
|
||||
|
||||
static struct platform_driver crypto4xx_driver = {
|
||||
.driver = {
|
||||
@@ -266,7 +266,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
.of_match_table = crypto4xx_match,
|
||||
},
|
||||
.probe = crypto4xx_probe,
|
||||
@@ -1288,4 +1292,3 @@ module_platform_driver(crypto4xx_driver)
|
||||
@@ -1279,4 +1283,3 @@ module_platform_driver(crypto4xx_driver)
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
|
||||
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
From 8d9f1b2c4ad8b86c4a5af5e4787ea4eae7853f6d Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Thu, 20 Jun 2019 11:29:15 +0200
|
||||
Subject: Revert "crypto: crypto4xx - properly set IV after de- and encrypt"
|
||||
|
||||
This reverts commit e9a60ab1609a7d975922adad1bf9c46ac6954584.
|
||||
|
||||
This fixes a compile problem in upstream kernel 4.4.
|
||||
---
|
||||
drivers/crypto/amcc/crypto4xx_alg.c | 3 +--
|
||||
drivers/crypto/amcc/crypto4xx_core.c | 9 ---------
|
||||
2 files changed, 1 insertion(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/crypto/amcc/crypto4xx_alg.c
|
||||
+++ b/drivers/crypto/amcc/crypto4xx_alg.c
|
||||
@@ -138,8 +138,7 @@ static int crypto4xx_setkey_aes(struct c
|
||||
sa = (struct dynamic_sa_ctl *) ctx->sa_in;
|
||||
ctx->hash_final = 0;
|
||||
|
||||
- set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, (cm == CRYPTO_MODE_CBC ?
|
||||
- SA_SAVE_IV : SA_NOT_SAVE_IV),
|
||||
+ set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, SA_NOT_SAVE_IV,
|
||||
SA_LOAD_HASH_FROM_SA, SA_LOAD_IV_FROM_STATE,
|
||||
SA_NO_HEADER_PROC, SA_HASH_ALG_NULL,
|
||||
SA_CIPHER_ALG_AES, SA_PAD_TYPE_ZERO,
|
||||
--- a/drivers/crypto/amcc/crypto4xx_core.c
|
||||
+++ b/drivers/crypto/amcc/crypto4xx_core.c
|
||||
@@ -646,15 +646,6 @@ static u32 crypto4xx_ablkcipher_done(str
|
||||
addr = dma_map_page(dev->core_dev->device, sg_page(dst),
|
||||
dst->offset, dst->length, DMA_FROM_DEVICE);
|
||||
}
|
||||
-
|
||||
- if (pd_uinfo->sa_va->sa_command_0.bf.save_iv == SA_SAVE_IV) {
|
||||
- struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
|
||||
-
|
||||
- crypto4xx_memcpy_from_le32((u32 *)req->iv,
|
||||
- pd_uinfo->sr_va->save_iv,
|
||||
- crypto_skcipher_ivsize(skcipher));
|
||||
- }
|
||||
-
|
||||
crypto4xx_ret_sg_desc(dev, pd_uinfo);
|
||||
if (ablk_req->base.complete != NULL)
|
||||
ablk_req->base.complete(&ablk_req->base, 0);
|
||||
@@ -47,7 +47,7 @@ Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
@@ -4946,6 +4947,9 @@ void ata_qc_complete(struct ata_queued_c
|
||||
@@ -4949,6 +4950,9 @@ void ata_qc_complete(struct ata_queued_c
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
|
||||
--- a/lib/Makefile
|
||||
+++ b/lib/Makefile
|
||||
@@ -108,6 +108,7 @@ obj-$(CONFIG_XZ_DEC) += xz/
|
||||
@@ -109,6 +109,7 @@ obj-$(CONFIG_XZ_DEC) += xz/
|
||||
obj-$(CONFIG_RAID6_PQ) += raid6/
|
||||
obj-$(CONFIG_LZMA_COMPRESS) += lzma/
|
||||
obj-$(CONFIG_LZMA_DECOMPRESS) += lzma/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/gpio/Kconfig
|
||||
+++ b/drivers/gpio/Kconfig
|
||||
@@ -1040,4 +1040,12 @@ config GPIO_VIPERBOARD
|
||||
@@ -1041,4 +1041,12 @@ config GPIO_VIPERBOARD
|
||||
|
||||
endmenu
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
+#endif
|
||||
--- a/drivers/gpio/Kconfig
|
||||
+++ b/drivers/gpio/Kconfig
|
||||
@@ -991,7 +991,6 @@ menu "SPI GPIO expanders"
|
||||
@@ -992,7 +992,6 @@ menu "SPI GPIO expanders"
|
||||
|
||||
config GPIO_74X164
|
||||
tristate "74x164 serial-in/parallel-out 8-bits shift register"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/gpio/Kconfig
|
||||
+++ b/drivers/gpio/Kconfig
|
||||
@@ -1047,4 +1047,9 @@ config GPIO_NXP_74HC153
|
||||
@@ -1048,4 +1048,9 @@ config GPIO_NXP_74HC153
|
||||
Platform driver for NXP 74HC153 Dual 4-input Multiplexer. This
|
||||
provides a GPIO interface supporting input mode only.
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1121,6 +1121,9 @@ config MIPS_MSC
|
||||
@@ -1119,6 +1119,9 @@ config MIPS_MSC
|
||||
config MIPS_NILE4
|
||||
bool
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
+subsys_initcall(ar5312_gpio_init);
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -118,6 +118,7 @@ config ATH25
|
||||
@@ -119,6 +119,7 @@ config ATH25
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/spi/spi-bcm2835.c
|
||||
+++ b/drivers/spi/spi-bcm2835.c
|
||||
@@ -686,6 +686,8 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -687,6 +687,8 @@ static int bcm2835_spi_setup(struct spi_
|
||||
{
|
||||
int err;
|
||||
struct gpio_chip *chip;
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/*
|
||||
* sanity checking the native-chipselects
|
||||
*/
|
||||
@@ -702,15 +704,42 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -703,15 +705,42 @@ static int bcm2835_spi_setup(struct spi_
|
||||
"setup: only two native chip-selects are supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -659,7 +659,7 @@ dwc_otg: Remove duplicate gadget probe/unregister function
|
||||
}
|
||||
--- a/drivers/usb/core/hub.c
|
||||
+++ b/drivers/usb/core/hub.c
|
||||
@@ -5014,7 +5014,7 @@ static void port_event(struct usb_hub *h
|
||||
@@ -5021,7 +5021,7 @@ static void port_event(struct usb_hub *h
|
||||
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
|
||||
u16 status = 0, unused;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||
|
||||
--- a/kernel/cgroup.c
|
||||
+++ b/kernel/cgroup.c
|
||||
@@ -5315,7 +5315,7 @@ int __init cgroup_init_early(void)
|
||||
@@ -5321,7 +5321,7 @@ int __init cgroup_init_early(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||
|
||||
/**
|
||||
* cgroup_init - cgroup initialization
|
||||
@@ -5811,6 +5811,27 @@ static int __init cgroup_disable(char *s
|
||||
@@ -5817,6 +5817,27 @@ static int __init cgroup_disable(char *s
|
||||
}
|
||||
__setup("cgroup_disable=", cgroup_disable);
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
struct config_item * item = NULL;
|
||||
--- a/fs/configfs/dir.c
|
||||
+++ b/fs/configfs/dir.c
|
||||
@@ -255,6 +255,12 @@ static void configfs_init_file(struct in
|
||||
@@ -253,6 +253,12 @@ static void configfs_init_file(struct in
|
||||
inode->i_fop = &configfs_file_operations;
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
static void init_symlink(struct inode * inode)
|
||||
{
|
||||
inode->i_op = &configfs_symlink_inode_operations;
|
||||
@@ -423,7 +429,9 @@ static int configfs_attach_attr(struct c
|
||||
@@ -421,7 +427,9 @@ static int configfs_attach_attr(struct c
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
|
||||
error = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG,
|
||||
@@ -188,7 +188,7 @@ Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
if (error) {
|
||||
configfs_put(sd);
|
||||
return error;
|
||||
@@ -583,6 +591,7 @@ static int populate_attrs(struct config_
|
||||
@@ -581,6 +589,7 @@ static int populate_attrs(struct config_
|
||||
{
|
||||
struct config_item_type *t = item->ci_type;
|
||||
struct configfs_attribute *attr;
|
||||
@@ -196,7 +196,7 @@ Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
int error = 0;
|
||||
int i;
|
||||
|
||||
@@ -594,6 +603,13 @@ static int populate_attrs(struct config_
|
||||
@@ -592,6 +601,13 @@ static int populate_attrs(struct config_
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
i2c0: i2c@7e205000 {
|
||||
--- a/drivers/spi/spi-bcm2835.c
|
||||
+++ b/drivers/spi/spi-bcm2835.c
|
||||
@@ -705,6 +705,7 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -706,6 +706,7 @@ static int bcm2835_spi_setup(struct spi_
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/* now translate native cs to GPIO */
|
||||
/* first look for chip select pins in the devices pin groups */
|
||||
for (pingroup_index = 0;
|
||||
@@ -759,6 +760,7 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -760,6 +761,7 @@ static int bcm2835_spi_setup(struct spi_
|
||||
* so we are setting it here explicitly
|
||||
*/
|
||||
gpio_set_value(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
|
||||
|
||||
@@ -9,7 +9,7 @@ Subject: [PATCH] spi-bcm2835: Remove unused code
|
||||
|
||||
--- a/drivers/spi/spi-bcm2835.c
|
||||
+++ b/drivers/spi/spi-bcm2835.c
|
||||
@@ -677,17 +677,8 @@ static void bcm2835_spi_set_cs(struct sp
|
||||
@@ -678,17 +678,8 @@ static void bcm2835_spi_set_cs(struct sp
|
||||
bcm2835_wr(bs, BCM2835_SPI_CS, cs);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ Subject: [PATCH] spi-bcm2835: Remove unused code
|
||||
/*
|
||||
* sanity checking the native-chipselects
|
||||
*/
|
||||
@@ -705,63 +696,6 @@ static int bcm2835_spi_setup(struct spi_
|
||||
@@ -706,63 +697,6 @@ static int bcm2835_spi_setup(struct spi_
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -207,6 +207,9 @@ config BCM63XX
|
||||
@@ -208,6 +208,9 @@ config BCM63XX
|
||||
select SYNC_R4K
|
||||
select DMA_NONCOHERENT
|
||||
select IRQ_MIPS_CPU
|
||||
|
||||
@@ -1754,6 +1754,7 @@ CONFIG_IP_ROUTE_VERBOSE=y
|
||||
# CONFIG_IR_STREAMZAP is not set
|
||||
# CONFIG_IR_TTUSBIR is not set
|
||||
# CONFIG_ISCSI_BOOT_SYSFS is not set
|
||||
# CONFIG_ISCSI_IBFT is not set
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
CONFIG_ISDN=y
|
||||
# CONFIG_ISDN_AUDIO is not set
|
||||
@@ -4105,6 +4106,7 @@ CONFIG_TCP_CONG_CUBIC=y
|
||||
# CONFIG_TERANETICS_PHY is not set
|
||||
# CONFIG_TEST_BPF is not set
|
||||
# CONFIG_TEST_FIRMWARE is not set
|
||||
# CONFIG_TEST_HASH is not set
|
||||
# CONFIG_TEST_HEXDUMP is not set
|
||||
# CONFIG_TEST_KSTRTOX is not set
|
||||
# CONFIG_TEST_LIST_SORT is not set
|
||||
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -2756,10 +2756,10 @@ choice
|
||||
@@ -2754,10 +2754,10 @@ choice
|
||||
the documented boot protocol using a device tree.
|
||||
|
||||
config MIPS_RAW_APPENDED_DTB
|
||||
@@ -40,7 +40,7 @@ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
|
||||
(e.g. cat vmlinux.bin <filename>.dtb > vmlinux_w_dtb).
|
||||
|
||||
This is meant as a backward compatibility convenience for those
|
||||
@@ -2771,24 +2771,6 @@ choice
|
||||
@@ -2769,24 +2769,6 @@ choice
|
||||
look like a DTB header after a reboot if no actual DTB is appended
|
||||
to vmlinux.bin. Do not leave this option active in a production kernel
|
||||
if you don't intend to always append a DTB.
|
||||
|
||||
@@ -82,7 +82,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* Gobi 1000 QMI/wwan interface number is 3 according to qcserial */
|
||||
#define QMI_GOBI1K_DEVICE(vend, prod) \
|
||||
QMI_FIXED_INTF(vend, prod, 3)
|
||||
@@ -916,6 +940,8 @@ static const struct usb_device_id produc
|
||||
@@ -917,6 +941,8 @@ static const struct usb_device_id produc
|
||||
{QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */
|
||||
{QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
|
||||
{QMI_FIXED_INTF(0x1e0e, 0x9001, 5)}, /* SIMCom 7230E */
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1622,6 +1622,7 @@ config CPU_CAVIUM_OCTEON
|
||||
@@ -1620,6 +1620,7 @@ config CPU_CAVIUM_OCTEON
|
||||
select USB_EHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
|
||||
select USB_OHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
|
||||
select MIPS_L1_CACHE_SHIFT_7
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
The Cavium Octeon processor is a highly integrated chip containing
|
||||
many ethernet hardware widgets for networking tasks. The processor
|
||||
@@ -1917,6 +1918,9 @@ config MIPS_MALTA_PM
|
||||
@@ -1915,6 +1916,9 @@ config MIPS_MALTA_PM
|
||||
bool
|
||||
default y
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -639,12 +639,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni
|
||||
@@ -640,12 +640,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias)
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
static int absolute_percpu = 0;
|
||||
static char symbol_prefix_char = '\0';
|
||||
static unsigned long long kernel_start_addr = 0;
|
||||
@@ -403,6 +404,9 @@ static void write_src(void)
|
||||
@@ -406,6 +407,9 @@ static void write_src(void)
|
||||
|
||||
free(markers);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
output_label("kallsyms_token_table");
|
||||
off = 0;
|
||||
for (i = 0; i < 256; i++) {
|
||||
@@ -461,6 +465,9 @@ static void *find_token(unsigned char *s
|
||||
@@ -464,6 +468,9 @@ static void *find_token(unsigned char *s
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
for (i = 0; i < len - 1; i++) {
|
||||
if (str[i] == token[0] && str[i+1] == token[1])
|
||||
return &str[i];
|
||||
@@ -533,6 +540,9 @@ static void optimize_result(void)
|
||||
@@ -536,6 +543,9 @@ static void optimize_result(void)
|
||||
{
|
||||
int i, best;
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/* using the '\0' symbol last allows compress_symbols to use standard
|
||||
* fast string functions */
|
||||
for (i = 255; i >= 0; i--) {
|
||||
@@ -703,7 +713,9 @@ int main(int argc, char **argv)
|
||||
@@ -706,7 +716,9 @@ int main(int argc, char **argv)
|
||||
} else if (strncmp(argv[i], "--page-offset=", 14) == 0) {
|
||||
const char *p = &argv[i][14];
|
||||
kernel_start_addr = strtoull(p, NULL, 16);
|
||||
|
||||
@@ -4,7 +4,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/arch/mips/vdso/Makefile
|
||||
+++ b/arch/mips/vdso/Makefile
|
||||
@@ -28,11 +28,11 @@ aflags-vdso := $(ccflags-vdso) \
|
||||
@@ -30,11 +30,11 @@ aflags-vdso := $(ccflags-vdso) \
|
||||
# the comments on that file.
|
||||
#
|
||||
ifndef CONFIG_CPU_MIPSR6
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/vdso/Makefile
|
||||
+++ b/arch/mips/vdso/Makefile
|
||||
@@ -77,7 +77,7 @@ $(obj-vdso): KBUILD_AFLAGS := $(aflags-v
|
||||
@@ -79,7 +79,7 @@ $(obj-vdso): KBUILD_AFLAGS := $(aflags-v
|
||||
|
||||
$(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) $(native-abi)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
$(call if_changed,vdsold)
|
||||
|
||||
$(obj)/vdso-image.c: $(obj)/vdso.so.dbg $(obj)/genvdso FORCE
|
||||
@@ -111,7 +111,7 @@ $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS :=
|
||||
@@ -113,7 +113,7 @@ $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS :=
|
||||
$(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE
|
||||
$(call if_changed_dep,cpp_lds_S)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
$(call if_changed,vdsold)
|
||||
|
||||
$(obj)/vdso-o32-image.c: VDSO_NAME := o32
|
||||
@@ -147,7 +147,7 @@ $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS :=
|
||||
@@ -149,7 +149,7 @@ $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS :=
|
||||
$(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE
|
||||
$(call if_changed_dep,cpp_lds_S)
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user