aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/374-0002-brcmfmac-Simplify-and-fix-usage-of-brcmf_ifname.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/374-0002-brcmfmac-Simplify-and-fix-usage-of-brcmf_ifname.patch')
-rw-r--r--package/kernel/mac80211/patches/374-0002-brcmfmac-Simplify-and-fix-usage-of-brcmf_ifname.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/374-0002-brcmfmac-Simplify-and-fix-usage-of-brcmf_ifname.patch b/package/kernel/mac80211/patches/374-0002-brcmfmac-Simplify-and-fix-usage-of-brcmf_ifname.patch
new file mode 100644
index 0000000000..331896b98d
--- /dev/null
+++ b/package/kernel/mac80211/patches/374-0002-brcmfmac-Simplify-and-fix-usage-of-brcmf_ifname.patch
@@ -0,0 +1,110 @@
+From: Hante Meuleman <meuleman@broadcom.com>
+Date: Thu, 29 Oct 2015 20:33:12 +0100
+Subject: [PATCH] brcmfmac: Simplify and fix usage of brcmf_ifname.
+
+brcmf_ifname is a debug function to return a name related to an ifp,
+but is using a rather complex implementation. It was also used
+wrongly from bcdc as it did not use the bsscfgidx as it was supposed
+to, but bssidx. This patch fixes that bug and simplifies
+brcmf_ifname.
+
+Reviewed-by: Arend Van Spriel <arend@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
+Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
+Signed-off-by: Arend van Spriel <arend@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+
+--- a/drivers/net/wireless/brcm80211/brcmfmac/bcdc.c
++++ b/drivers/net/wireless/brcm80211/brcmfmac/bcdc.c
+@@ -187,7 +187,8 @@ retry:
+ goto retry;
+ if (id != bcdc->reqid) {
+ brcmf_err("%s: unexpected request id %d (expected %d)\n",
+- brcmf_ifname(drvr, ifidx), id, bcdc->reqid);
++ brcmf_ifname(brcmf_get_ifp(drvr, ifidx)), id,
++ bcdc->reqid);
+ ret = -EINVAL;
+ goto done;
+ }
+@@ -234,7 +235,8 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
+
+ if (id != bcdc->reqid) {
+ brcmf_err("%s: unexpected request id %d (expected %d)\n",
+- brcmf_ifname(drvr, ifidx), id, bcdc->reqid);
++ brcmf_ifname(brcmf_get_ifp(drvr, ifidx)), id,
++ bcdc->reqid);
+ ret = -EINVAL;
+ goto done;
+ }
+@@ -298,13 +300,13 @@ brcmf_proto_bcdc_hdrpull(struct brcmf_pu
+ if (((h->flags & BCDC_FLAG_VER_MASK) >> BCDC_FLAG_VER_SHIFT) !=
+ BCDC_PROTO_VER) {
+ brcmf_err("%s: non-BCDC packet received, flags 0x%x\n",
+- brcmf_ifname(drvr, tmp_if->ifidx), h->flags);
++ brcmf_ifname(tmp_if), h->flags);
+ return -EBADE;
+ }
+
+ if (h->flags & BCDC_FLAG_SUM_GOOD) {
+ brcmf_dbg(BCDC, "%s: BDC rcv, good checksum, flags 0x%x\n",
+- brcmf_ifname(drvr, tmp_if->ifidx), h->flags);
++ brcmf_ifname(tmp_if), h->flags);
+ pktbuf->ip_summed = CHECKSUM_UNNECESSARY;
+ }
+
+--- a/drivers/net/wireless/brcm80211/brcmfmac/core.c
++++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c
+@@ -66,20 +66,13 @@ static int brcmf_p2p_enable;
+ module_param_named(p2pon, brcmf_p2p_enable, int, 0);
+ MODULE_PARM_DESC(p2pon, "enable legacy p2p management functionality");
+
+-char *brcmf_ifname(struct brcmf_pub *drvr, int ifidx)
++char *brcmf_ifname(struct brcmf_if *ifp)
+ {
+- if (ifidx < 0 || ifidx >= BRCMF_MAX_IFS) {
+- brcmf_err("ifidx %d out of range\n", ifidx);
+- return "<if_bad>";
+- }
+-
+- if (drvr->iflist[ifidx] == NULL) {
+- brcmf_err("null i/f %d\n", ifidx);
++ if (!ifp)
+ return "<if_null>";
+- }
+
+- if (drvr->iflist[ifidx]->ndev)
+- return drvr->iflist[ifidx]->ndev->name;
++ if (ifp->ndev)
++ return ifp->ndev->name;
+
+ return "<if_none>";
+ }
+@@ -237,14 +230,14 @@ static netdev_tx_t brcmf_netdev_start_xm
+ struct sk_buff *skb2;
+
+ brcmf_dbg(INFO, "%s: insufficient headroom\n",
+- brcmf_ifname(drvr, ifp->bssidx));
++ brcmf_ifname(ifp));
+ drvr->bus_if->tx_realloc++;
+ skb2 = skb_realloc_headroom(skb, drvr->hdrlen);
+ dev_kfree_skb(skb);
+ skb = skb2;
+ if (skb == NULL) {
+ brcmf_err("%s: skb_realloc_headroom failed\n",
+- brcmf_ifname(drvr, ifp->bssidx));
++ brcmf_ifname(ifp));
+ ret = -ENOMEM;
+ goto done;
+ }
+--- a/drivers/net/wireless/brcm80211/brcmfmac/core.h
++++ b/drivers/net/wireless/brcm80211/brcmfmac/core.h
+@@ -205,7 +205,7 @@ struct brcmf_skb_reorder_data {
+ int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp);
+
+ /* Return pointer to interface name */
+-char *brcmf_ifname(struct brcmf_pub *drvr, int idx);
++char *brcmf_ifname(struct brcmf_if *ifp);
+ struct brcmf_if *brcmf_get_ifp(struct brcmf_pub *drvr, int ifidx);
+ int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked);
+ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bssidx, s32 ifidx,