brcmfmac: create common function for handling brcmf_proto_hdrpull()
In receive path brcmf_proto_hdrpull() needs to be called and handled similar in brcmf_rx_frame() and brcmf_rx_event(). Move that duplicated code in separate function. Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> Reviewed-by: Franky Lin <franky.lin@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
9c349892cc
commit
c462ebcdfe
1 changed files with 21 additions and 22 deletions
|
@ -322,26 +322,35 @@ void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||||
netif_rx_ni(skb);
|
netif_rx_ni(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
|
||||||
|
struct brcmf_if **ifp)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* process and remove protocol-specific header */
|
||||||
|
ret = brcmf_proto_hdrpull(drvr, true, skb, ifp);
|
||||||
|
|
||||||
|
if (ret || !(*ifp) || !(*ifp)->ndev) {
|
||||||
|
if (ret != -ENODATA && ifp)
|
||||||
|
(*ifp)->stats.rx_errors++;
|
||||||
|
brcmu_pkt_buf_free_skb(skb);
|
||||||
|
return -ENODATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
skb->protocol = eth_type_trans(skb, (*ifp)->ndev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
|
void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
|
||||||
{
|
{
|
||||||
struct brcmf_if *ifp;
|
struct brcmf_if *ifp;
|
||||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||||
struct brcmf_pub *drvr = bus_if->drvr;
|
struct brcmf_pub *drvr = bus_if->drvr;
|
||||||
int ret;
|
|
||||||
|
|
||||||
brcmf_dbg(DATA, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
|
brcmf_dbg(DATA, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
|
||||||
|
|
||||||
/* process and remove protocol-specific header */
|
if (brcmf_rx_hdrpull(drvr, skb, &ifp))
|
||||||
ret = brcmf_proto_hdrpull(drvr, true, skb, &ifp);
|
|
||||||
|
|
||||||
if (ret || !ifp || !ifp->ndev) {
|
|
||||||
if (ret != -ENODATA && ifp)
|
|
||||||
ifp->stats.rx_errors++;
|
|
||||||
brcmu_pkt_buf_free_skb(skb);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
skb->protocol = eth_type_trans(skb, ifp->ndev);
|
|
||||||
|
|
||||||
if (brcmf_proto_is_reorder_skb(skb)) {
|
if (brcmf_proto_is_reorder_skb(skb)) {
|
||||||
brcmf_proto_rxreorder(ifp, skb);
|
brcmf_proto_rxreorder(ifp, skb);
|
||||||
|
@ -359,21 +368,11 @@ void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
|
||||||
struct brcmf_if *ifp;
|
struct brcmf_if *ifp;
|
||||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||||
struct brcmf_pub *drvr = bus_if->drvr;
|
struct brcmf_pub *drvr = bus_if->drvr;
|
||||||
int ret;
|
|
||||||
|
|
||||||
brcmf_dbg(EVENT, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
|
brcmf_dbg(EVENT, "Enter: %s: rxp=%p\n", dev_name(dev), skb);
|
||||||
|
|
||||||
/* process and remove protocol-specific header */
|
if (brcmf_rx_hdrpull(drvr, skb, &ifp))
|
||||||
ret = brcmf_proto_hdrpull(drvr, true, skb, &ifp);
|
|
||||||
|
|
||||||
if (ret || !ifp || !ifp->ndev) {
|
|
||||||
if (ret != -ENODATA && ifp)
|
|
||||||
ifp->stats.rx_errors++;
|
|
||||||
brcmu_pkt_buf_free_skb(skb);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
skb->protocol = eth_type_trans(skb, ifp->ndev);
|
|
||||||
|
|
||||||
brcmf_fweh_process_skb(ifp->drvr, skb);
|
brcmf_fweh_process_skb(ifp->drvr, skb);
|
||||||
brcmu_pkt_buf_free_skb(skb);
|
brcmu_pkt_buf_free_skb(skb);
|
||||||
|
|
Loading…
Add table
Reference in a new issue