rpcd: iwinfo plugin fixes
[openwrt.git] / package / kernel / mac80211 / patches / 349-0008-brcmfmac-create-common-function-for-handling-brcmf_p.patch
1 From: Arend van Spriel <arend@broadcom.com>
2 Date: Mon, 11 Apr 2016 11:35:28 +0200
3 Subject: [PATCH] brcmfmac: create common function for handling
4  brcmf_proto_hdrpull()
5
6 In receive path brcmf_proto_hdrpull() needs to be called and handled
7 similar in brcmf_rx_frame() and brcmf_rx_event(). Move that duplicated
8 code in separate function.
9
10 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
11 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
12 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
13 Signed-off-by: Arend van Spriel <arend@broadcom.com>
14 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 ---
16
17 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
18 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
19 @@ -322,26 +322,35 @@ void brcmf_netif_rx(struct brcmf_if *ifp
20                 netif_rx_ni(skb);
21  }
22  
23 -void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
24 +static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
25 +                           struct brcmf_if **ifp)
26  {
27 -       struct brcmf_if *ifp;
28 -       struct brcmf_bus *bus_if = dev_get_drvdata(dev);
29 -       struct brcmf_pub *drvr = bus_if->drvr;
30         int ret;
31  
32 -       brcmf_dbg(DATA, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
33 -
34         /* process and remove protocol-specific header */
35 -       ret = brcmf_proto_hdrpull(drvr, true, skb, &ifp);
36 +       ret = brcmf_proto_hdrpull(drvr, true, skb, ifp);
37  
38 -       if (ret || !ifp || !ifp->ndev) {
39 +       if (ret || !(*ifp) || !(*ifp)->ndev) {
40                 if (ret != -ENODATA && ifp)
41 -                       ifp->stats.rx_errors++;
42 +                       (*ifp)->stats.rx_errors++;
43                 brcmu_pkt_buf_free_skb(skb);
44 -               return;
45 +               return -ENODATA;
46         }
47  
48 -       skb->protocol = eth_type_trans(skb, ifp->ndev);
49 +       skb->protocol = eth_type_trans(skb, (*ifp)->ndev);
50 +       return 0;
51 +}
52 +
53 +void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
54 +{
55 +       struct brcmf_if *ifp;
56 +       struct brcmf_bus *bus_if = dev_get_drvdata(dev);
57 +       struct brcmf_pub *drvr = bus_if->drvr;
58 +
59 +       brcmf_dbg(DATA, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
60 +
61 +       if (brcmf_rx_hdrpull(drvr, skb, &ifp))
62 +               return;
63  
64         if (brcmf_proto_is_reorder_skb(skb)) {
65                 brcmf_proto_rxreorder(ifp, skb);
66 @@ -359,21 +368,11 @@ void brcmf_rx_event(struct device *dev,
67         struct brcmf_if *ifp;
68         struct brcmf_bus *bus_if = dev_get_drvdata(dev);
69         struct brcmf_pub *drvr = bus_if->drvr;
70 -       int ret;
71  
72         brcmf_dbg(EVENT, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
73  
74 -       /* process and remove protocol-specific header */
75 -       ret = brcmf_proto_hdrpull(drvr, true, skb, &ifp);
76 -
77 -       if (ret || !ifp || !ifp->ndev) {
78 -               if (ret != -ENODATA && ifp)
79 -                       ifp->stats.rx_errors++;
80 -               brcmu_pkt_buf_free_skb(skb);
81 +       if (brcmf_rx_hdrpull(drvr, skb, &ifp))
82                 return;
83 -       }
84 -
85 -       skb->protocol = eth_type_trans(skb, ifp->ndev);
86  
87         brcmf_fweh_process_skb(ifp->drvr, skb);
88         brcmu_pkt_buf_free_skb(skb);