image.mk: fix emitting profiles for targets that have no subtargets
[openwrt/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);