mac80211: update to wireless-testing 2015-10-26
[openwrt.git] / package / kernel / mac80211 / patches / 320-brcmfmac-make-brcmf_proto_hdrpull-return-struct-brcm.patch
diff --git a/package/kernel/mac80211/patches/320-brcmfmac-make-brcmf_proto_hdrpull-return-struct-brcm.patch b/package/kernel/mac80211/patches/320-brcmfmac-make-brcmf_proto_hdrpull-return-struct-brcm.patch
deleted file mode 100644 (file)
index 632714c..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-From: Arend van Spriel <arend@broadcom.com>
-Date: Wed, 26 Aug 2015 22:14:54 +0200
-Subject: [PATCH] brcmfmac: make brcmf_proto_hdrpull() return struct
- brcmf_if instance
-
-Avoid spreading the ifidx in the driver, but have it return the
-struct brcmf_if instance.
-
-Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
-Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
-Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
-Signed-off-by: Arend van Spriel <arend@broadcom.com>
----
-
---- a/drivers/net/wireless/brcm80211/brcmfmac/bcdc.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcdc.c
-@@ -272,11 +272,11 @@ brcmf_proto_bcdc_hdrpush(struct brcmf_pu
- }
- static int
--brcmf_proto_bcdc_hdrpull(struct brcmf_pub *drvr, bool do_fws, u8 *ifidx,
--                       struct sk_buff *pktbuf)
-+brcmf_proto_bcdc_hdrpull(struct brcmf_pub *drvr, bool do_fws,
-+                       struct sk_buff *pktbuf, struct brcmf_if **ifp)
- {
-       struct brcmf_proto_bcdc_header *h;
--      struct brcmf_if *ifp;
-+      struct brcmf_if *tmp_if;
-       brcmf_dbg(BCDC, "Enter\n");
-@@ -290,21 +290,21 @@ brcmf_proto_bcdc_hdrpull(struct brcmf_pu
-       trace_brcmf_bcdchdr(pktbuf->data);
-       h = (struct brcmf_proto_bcdc_header *)(pktbuf->data);
--      ifp = brcmf_get_ifp(drvr, BCDC_GET_IF_IDX(h));
--      if (IS_ERR_OR_NULL(ifp)) {
-+      tmp_if = brcmf_get_ifp(drvr, BCDC_GET_IF_IDX(h));
-+      if (!tmp_if) {
-               brcmf_dbg(INFO, "no matching ifp found\n");
-               return -EBADE;
-       }
-       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, ifp->ifidx), h->flags);
-+                        brcmf_ifname(drvr, tmp_if->ifidx), 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, ifp->ifidx), h->flags);
-+                        brcmf_ifname(drvr, tmp_if->ifidx), h->flags);
-               pktbuf->ip_summed = CHECKSUM_UNNECESSARY;
-       }
-@@ -312,7 +312,7 @@ brcmf_proto_bcdc_hdrpull(struct brcmf_pu
-       skb_pull(pktbuf, BCDC_HEADER_LEN);
-       if (do_fws)
--              brcmf_fws_hdrpull(drvr, ifp->ifidx, h->data_offset << 2,
-+              brcmf_fws_hdrpull(drvr, tmp_if->ifidx, h->data_offset << 2,
-                                 pktbuf);
-       else
-               skb_pull(pktbuf, h->data_offset << 2);
-@@ -320,7 +320,7 @@ brcmf_proto_bcdc_hdrpull(struct brcmf_pu
-       if (pktbuf->len == 0)
-               return -ENODATA;
--      *ifidx = ifp->ifidx;
-+      *ifp = tmp_if;
-       return 0;
- }
---- a/drivers/net/wireless/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c
-@@ -87,7 +87,7 @@ struct brcmf_if *brcmf_get_ifp(struct br
- {
-       if (ifidx < 0 || ifidx >= BRCMF_MAX_IFS) {
-               brcmf_err("ifidx %d out of range\n", ifidx);
--              return ERR_PTR(-ERANGE);
-+              return NULL;
-       }
-       /* The ifidx is the idx to map to matching netdev/ifp. When receiving
-@@ -539,17 +539,15 @@ void brcmf_rx_frame(struct device *dev,
-       struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-       struct brcmf_pub *drvr = bus_if->drvr;
-       struct brcmf_skb_reorder_data *rd;
--      u8 ifidx;
-       int ret;
-       brcmf_dbg(DATA, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
-       /* process and remove protocol-specific header */
--      ret = brcmf_proto_hdrpull(drvr, true, &ifidx, skb);
--      ifp = drvr->iflist[ifidx];
-+      ret = brcmf_proto_hdrpull(drvr, true, skb, &ifp);
-       if (ret || !ifp || !ifp->ndev) {
--              if ((ret != -ENODATA) && ifp)
-+              if (ret != -ENODATA && ifp)
-                       ifp->stats.rx_errors++;
-               brcmu_pkt_buf_free_skb(skb);
-               return;
-@@ -592,17 +590,17 @@ void brcmf_txcomplete(struct device *dev
- {
-       struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-       struct brcmf_pub *drvr = bus_if->drvr;
--      u8 ifidx;
-+      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, &ifidx, txp))
-+              if (brcmf_proto_hdrpull(drvr, false, txp, &ifp))
-                       brcmu_pkt_buf_free_skb(txp);
-               else
--                      brcmf_txfinalize(drvr, txp, ifidx, success);
-+                      brcmf_txfinalize(drvr, txp, ifp->ifidx, success);
-       }
- }
---- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
-@@ -1448,7 +1448,7 @@ brcmf_fws_txs_process(struct brcmf_fws_i
-       struct sk_buff *skb;
-       struct brcmf_skbuff_cb *skcb;
-       struct brcmf_fws_mac_descriptor *entry = NULL;
--      u8 ifidx;
-+      struct brcmf_if *ifp;
-       brcmf_dbg(DATA, "flags %d\n", flags);
-@@ -1497,15 +1497,16 @@ brcmf_fws_txs_process(struct brcmf_fws_i
-       }
-       brcmf_fws_macdesc_return_req_credit(skb);
--      if (brcmf_proto_hdrpull(fws->drvr, false, &ifidx, skb)) {
-+      ret = brcmf_proto_hdrpull(fws->drvr, false, skb, &ifp);
-+      if (ret) {
-               brcmu_pkt_buf_free_skb(skb);
-               return -EINVAL;
-       }
-       if (!remove_from_hanger)
--              ret = brcmf_fws_txstatus_suppressed(fws, fifo, skb, ifidx,
-+              ret = brcmf_fws_txstatus_suppressed(fws, fifo, skb, ifp->ifidx,
-                                                   genbit, seq);
-       if (remove_from_hanger || ret)
--              brcmf_txfinalize(fws->drvr, skb, ifidx, true);
-+              brcmf_txfinalize(fws->drvr, skb, ifp->ifidx, true);
-       return 0;
- }
-@@ -1848,7 +1849,7 @@ static int brcmf_fws_commit_skb(struct b
-               entry->transit_count--;
-               if (entry->suppressed)
-                       entry->suppr_transit_count--;
--              brcmf_proto_hdrpull(fws->drvr, false, &ifidx, skb);
-+              (void)brcmf_proto_hdrpull(fws->drvr, false, skb, NULL);
-               goto rollback;
-       }
---- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c
-@@ -522,7 +522,7 @@ static int brcmf_msgbuf_set_dcmd(struct
- static int brcmf_msgbuf_hdrpull(struct brcmf_pub *drvr, bool do_fws,
--                              u8 *ifidx, struct sk_buff *skb)
-+                              struct sk_buff *skb, struct brcmf_if **ifp)
- {
-       return -ENODEV;
- }
-@@ -1082,7 +1082,7 @@ brcmf_msgbuf_rx_skb(struct brcmf_msgbuf
-       struct brcmf_if *ifp;
-       ifp = brcmf_get_ifp(msgbuf->drvr, ifidx);
--      if (IS_ERR_OR_NULL(ifp) || !ifp->ndev) {
-+      if (!ifp || !ifp->ndev) {
-               brcmf_err("Received pkt for invalid ifidx %d\n", ifidx);
-               brcmu_pkt_buf_free_skb(skb);
-               return;
---- a/drivers/net/wireless/brcm80211/brcmfmac/proto.h
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/proto.h
-@@ -24,8 +24,8 @@ enum proto_addr_mode {
- struct brcmf_proto {
--      int (*hdrpull)(struct brcmf_pub *drvr, bool do_fws, u8 *ifidx,
--                     struct sk_buff *skb);
-+      int (*hdrpull)(struct brcmf_pub *drvr, bool do_fws,
-+                     struct sk_buff *skb, struct brcmf_if **ifp);
-       int (*query_dcmd)(struct brcmf_pub *drvr, int ifidx, uint cmd,
-                         void *buf, uint len);
-       int (*set_dcmd)(struct brcmf_pub *drvr, int ifidx, uint cmd, void *buf,
-@@ -46,9 +46,19 @@ int brcmf_proto_attach(struct brcmf_pub
- void brcmf_proto_detach(struct brcmf_pub *drvr);
- static inline int brcmf_proto_hdrpull(struct brcmf_pub *drvr, bool do_fws,
--                                    u8 *ifidx, struct sk_buff *skb)
-+                                    struct sk_buff *skb,
-+                                    struct brcmf_if **ifp)
- {
--      return drvr->proto->hdrpull(drvr, do_fws, ifidx, skb);
-+      struct brcmf_if *tmp = NULL;
-+
-+      /* assure protocol is always called with
-+       * non-null initialized pointer.
-+       */
-+      if (ifp)
-+              *ifp = NULL;
-+      else
-+              ifp = &tmp;
-+      return drvr->proto->hdrpull(drvr, do_fws, skb, ifp);
- }
- static inline int brcmf_proto_query_dcmd(struct brcmf_pub *drvr, int ifidx,
-                                        uint cmd, void *buf, uint len)