Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c462ebcd authored by Arend van Spriel's avatar Arend van Spriel Committed by Kalle Valo
Browse files

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: default avatarHante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: default avatarFranky Lin <franky.lin@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 9c349892
Loading
Loading
Loading
Loading
+21 −22
Original line number Diff line number Diff line
@@ -322,26 +322,35 @@ void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
		netif_rx_ni(skb);
}

void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
			    struct brcmf_if **ifp)
{
	struct brcmf_if *ifp;
	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
	struct brcmf_pub *drvr = bus_if->drvr;
	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, skb, &ifp);
	ret = brcmf_proto_hdrpull(drvr, true, skb, ifp);

	if (ret || !ifp || !ifp->ndev) {
	if (ret || !(*ifp) || !(*ifp)->ndev) {
		if (ret != -ENODATA && ifp)
			ifp->stats.rx_errors++;
			(*ifp)->stats.rx_errors++;
		brcmu_pkt_buf_free_skb(skb);
		return;
		return -ENODATA;
	}

	skb->protocol = eth_type_trans(skb, ifp->ndev);
	skb->protocol = eth_type_trans(skb, (*ifp)->ndev);
	return 0;
}

void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event)
{
	struct brcmf_if *ifp;
	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
	struct brcmf_pub *drvr = bus_if->drvr;

	brcmf_dbg(DATA, "Enter: %s: rxp=%p\n", dev_name(dev), skb);

	if (brcmf_rx_hdrpull(drvr, skb, &ifp))
		return;

	if (brcmf_proto_is_reorder_skb(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_bus *bus_if = dev_get_drvdata(dev);
	struct brcmf_pub *drvr = bus_if->drvr;
	int ret;

	brcmf_dbg(EVENT, "Enter: %s: rxp=%p\n", dev_name(dev), skb);

	/* 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);
	if (brcmf_rx_hdrpull(drvr, skb, &ifp))
		return;
	}

	skb->protocol = eth_type_trans(skb, ifp->ndev);

	brcmf_fweh_process_skb(ifp->drvr, skb);
	brcmu_pkt_buf_free_skb(skb);