mac80211: update brcmfmac including missing boardrev workaround
[openwrt.git] / package / kernel / mac80211 / patches / 349-0007-brcmfmac-revise-handling-events-in-receive-path.patch
1 From: Arend van Spriel <arend@broadcom.com>
2 Date: Mon, 11 Apr 2016 11:35:27 +0200
3 Subject: [PATCH] brcmfmac: revise handling events in receive path
4
5 Move event handling out of brcmf_netif_rx() avoiding the need
6 to pass a flag. This flag is only ever true for USB hosts as
7 other interface use separate brcmf_rx_event() function.
8
9 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
10 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
11 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
12 Signed-off-by: Arend van Spriel <arend@broadcom.com>
13 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
14 ---
15
16 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
17 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
18 @@ -216,7 +216,7 @@ bool brcmf_c_prec_enq(struct device *dev
19                       int prec);
20  
21  /* Receive frame for delivery to OS.  Callee disposes of rxp. */
22 -void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_evnt);
23 +void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_event);
24  /* Receive async event packet from firmware. Callee disposes of rxp. */
25  void brcmf_rx_event(struct device *dev, struct sk_buff *rxp);
26  
27 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
28 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
29 @@ -298,18 +298,11 @@ void brcmf_txflowblock(struct device *de
30         brcmf_fws_bus_blocked(drvr, state);
31  }
32  
33 -void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
34 -                   bool handle_event)
35 +void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
36  {
37 -       skb->protocol = eth_type_trans(skb, ifp->ndev);
38 -
39         if (skb->pkt_type == PACKET_MULTICAST)
40                 ifp->stats.multicast++;
41  
42 -       /* Process special event packets */
43 -       if (handle_event)
44 -               brcmf_fweh_process_skb(ifp->drvr, skb);
45 -
46         if (!(ifp->ndev->flags & IFF_UP)) {
47                 brcmu_pkt_buf_free_skb(skb);
48                 return;
49 @@ -329,7 +322,7 @@ void brcmf_netif_rx(struct brcmf_if *ifp
50                 netif_rx_ni(skb);
51  }
52  
53 -void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_evnt)
54 +void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
55  {
56         struct brcmf_if *ifp;
57         struct brcmf_bus *bus_if = dev_get_drvdata(dev);
58 @@ -348,10 +341,17 @@ void brcmf_rx_frame(struct device *dev,
59                 return;
60         }
61  
62 -       if (brcmf_proto_is_reorder_skb(skb))
63 +       skb->protocol = eth_type_trans(skb, ifp->ndev);
64 +
65 +       if (brcmf_proto_is_reorder_skb(skb)) {
66                 brcmf_proto_rxreorder(ifp, skb);
67 -       else
68 -               brcmf_netif_rx(ifp, skb, handle_evnt);
69 +       } else {
70 +               /* Process special event packets */
71 +               if (handle_event)
72 +                       brcmf_fweh_process_skb(ifp->drvr, skb);
73 +
74 +               brcmf_netif_rx(ifp, skb);
75 +       }
76  }
77  
78  void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
79 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
80 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
81 @@ -221,8 +221,7 @@ int brcmf_get_next_free_bsscfgidx(struct
82  void brcmf_txflowblock_if(struct brcmf_if *ifp,
83                           enum brcmf_netif_stop_reason reason, bool state);
84  void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
85 -void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
86 -                   bool handle_event);
87 +void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
88  void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
89  int __init brcmf_core_init(void);
90  void __exit brcmf_core_exit(void);
91 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
92 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
93 @@ -1668,7 +1668,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
94         /* validate flags and flow id */
95         if (flags == 0xFF) {
96                 brcmf_err("invalid flags...so ignore this packet\n");
97 -               brcmf_netif_rx(ifp, pkt, false);
98 +               brcmf_netif_rx(ifp, pkt);
99                 return;
100         }
101  
102 @@ -1680,7 +1680,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
103                 if (rfi == NULL) {
104                         brcmf_dbg(INFO, "received flags to cleanup, but no flow (%d) yet\n",
105                                   flow_id);
106 -                       brcmf_netif_rx(ifp, pkt, false);
107 +                       brcmf_netif_rx(ifp, pkt);
108                         return;
109                 }
110  
111 @@ -1705,7 +1705,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
112                 rfi = kzalloc(buf_size, GFP_ATOMIC);
113                 if (rfi == NULL) {
114                         brcmf_err("failed to alloc buffer\n");
115 -                       brcmf_netif_rx(ifp, pkt, false);
116 +                       brcmf_netif_rx(ifp, pkt);
117                         return;
118                 }
119  
120 @@ -1819,7 +1819,7 @@ void brcmf_fws_rxreorder(struct brcmf_if
121  netif_rx:
122         skb_queue_walk_safe(&reorder_list, pkt, pnext) {
123                 __skb_unlink(pkt, &reorder_list);
124 -               brcmf_netif_rx(ifp, pkt, false);
125 +               brcmf_netif_rx(ifp, pkt);
126         }
127  }
128  
129 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
130 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
131 @@ -1157,7 +1157,7 @@ brcmf_msgbuf_process_rx_complete(struct
132                 brcmu_pkt_buf_free_skb(skb);
133                 return;
134         }
135 -       brcmf_netif_rx(ifp, skb, false);
136 +       brcmf_netif_rx(ifp, skb);
137  }
138  
139