brcmfmac: revise handling events in receive path
Move event handling out of brcmf_netif_rx() avoiding the need to pass a flag. This flag is only ever true for USB hosts as other interface use separate brcmf_rx_event() 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
bbd1f932e7
commit
9c349892cc
|
@ -216,7 +216,7 @@ bool brcmf_c_prec_enq(struct device *dev, struct pktq *q, struct sk_buff *pkt,
|
||||||
int prec);
|
int prec);
|
||||||
|
|
||||||
/* Receive frame for delivery to OS. Callee disposes of rxp. */
|
/* Receive frame for delivery to OS. Callee disposes of rxp. */
|
||||||
void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_evnt);
|
void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_event);
|
||||||
/* Receive async event packet from firmware. Callee disposes of rxp. */
|
/* Receive async event packet from firmware. Callee disposes of rxp. */
|
||||||
void brcmf_rx_event(struct device *dev, struct sk_buff *rxp);
|
void brcmf_rx_event(struct device *dev, struct sk_buff *rxp);
|
||||||
|
|
||||||
|
|
|
@ -298,18 +298,11 @@ void brcmf_txflowblock(struct device *dev, bool state)
|
||||||
brcmf_fws_bus_blocked(drvr, state);
|
brcmf_fws_bus_blocked(drvr, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
|
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||||
bool handle_event)
|
|
||||||
{
|
{
|
||||||
skb->protocol = eth_type_trans(skb, ifp->ndev);
|
|
||||||
|
|
||||||
if (skb->pkt_type == PACKET_MULTICAST)
|
if (skb->pkt_type == PACKET_MULTICAST)
|
||||||
ifp->stats.multicast++;
|
ifp->stats.multicast++;
|
||||||
|
|
||||||
/* Process special event packets */
|
|
||||||
if (handle_event)
|
|
||||||
brcmf_fweh_process_skb(ifp->drvr, skb);
|
|
||||||
|
|
||||||
if (!(ifp->ndev->flags & IFF_UP)) {
|
if (!(ifp->ndev->flags & IFF_UP)) {
|
||||||
brcmu_pkt_buf_free_skb(skb);
|
brcmu_pkt_buf_free_skb(skb);
|
||||||
return;
|
return;
|
||||||
|
@ -329,7 +322,7 @@ void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
|
||||||
netif_rx_ni(skb);
|
netif_rx_ni(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_evnt)
|
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);
|
||||||
|
@ -348,10 +341,17 @@ void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_evnt)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (brcmf_proto_is_reorder_skb(skb))
|
skb->protocol = eth_type_trans(skb, ifp->ndev);
|
||||||
|
|
||||||
|
if (brcmf_proto_is_reorder_skb(skb)) {
|
||||||
brcmf_proto_rxreorder(ifp, skb);
|
brcmf_proto_rxreorder(ifp, skb);
|
||||||
else
|
} else {
|
||||||
brcmf_netif_rx(ifp, skb, handle_evnt);
|
/* Process special event packets */
|
||||||
|
if (handle_event)
|
||||||
|
brcmf_fweh_process_skb(ifp->drvr, skb);
|
||||||
|
|
||||||
|
brcmf_netif_rx(ifp, skb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
|
void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
|
||||||
|
|
|
@ -221,8 +221,7 @@ int brcmf_get_next_free_bsscfgidx(struct brcmf_pub *drvr);
|
||||||
void brcmf_txflowblock_if(struct brcmf_if *ifp,
|
void brcmf_txflowblock_if(struct brcmf_if *ifp,
|
||||||
enum brcmf_netif_stop_reason reason, bool state);
|
enum brcmf_netif_stop_reason reason, bool state);
|
||||||
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
|
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
|
||||||
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb,
|
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
||||||
bool handle_event);
|
|
||||||
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
|
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
|
||||||
int __init brcmf_core_init(void);
|
int __init brcmf_core_init(void);
|
||||||
void __exit brcmf_core_exit(void);
|
void __exit brcmf_core_exit(void);
|
||||||
|
|
|
@ -1668,7 +1668,7 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
|
||||||
/* validate flags and flow id */
|
/* validate flags and flow id */
|
||||||
if (flags == 0xFF) {
|
if (flags == 0xFF) {
|
||||||
brcmf_err("invalid flags...so ignore this packet\n");
|
brcmf_err("invalid flags...so ignore this packet\n");
|
||||||
brcmf_netif_rx(ifp, pkt, false);
|
brcmf_netif_rx(ifp, pkt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1680,7 +1680,7 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
|
||||||
if (rfi == NULL) {
|
if (rfi == NULL) {
|
||||||
brcmf_dbg(INFO, "received flags to cleanup, but no flow (%d) yet\n",
|
brcmf_dbg(INFO, "received flags to cleanup, but no flow (%d) yet\n",
|
||||||
flow_id);
|
flow_id);
|
||||||
brcmf_netif_rx(ifp, pkt, false);
|
brcmf_netif_rx(ifp, pkt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1705,7 +1705,7 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
|
||||||
rfi = kzalloc(buf_size, GFP_ATOMIC);
|
rfi = kzalloc(buf_size, GFP_ATOMIC);
|
||||||
if (rfi == NULL) {
|
if (rfi == NULL) {
|
||||||
brcmf_err("failed to alloc buffer\n");
|
brcmf_err("failed to alloc buffer\n");
|
||||||
brcmf_netif_rx(ifp, pkt, false);
|
brcmf_netif_rx(ifp, pkt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1819,7 +1819,7 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
|
||||||
netif_rx:
|
netif_rx:
|
||||||
skb_queue_walk_safe(&reorder_list, pkt, pnext) {
|
skb_queue_walk_safe(&reorder_list, pkt, pnext) {
|
||||||
__skb_unlink(pkt, &reorder_list);
|
__skb_unlink(pkt, &reorder_list);
|
||||||
brcmf_netif_rx(ifp, pkt, false);
|
brcmf_netif_rx(ifp, pkt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1157,7 +1157,7 @@ brcmf_msgbuf_process_rx_complete(struct brcmf_msgbuf *msgbuf, void *buf)
|
||||||
brcmu_pkt_buf_free_skb(skb);
|
brcmu_pkt_buf_free_skb(skb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
brcmf_netif_rx(ifp, skb, false);
|
brcmf_netif_rx(ifp, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue