|
@@ -355,6 +355,26 @@ void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state)
|
|
|
brcmf_fws_bus_blocked(drvr, state);
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
|
|
+ bool success)
|
|
|
+{
|
|
|
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
|
|
+ struct brcmf_pub *drvr = bus_if->drvr;
|
|
|
+ struct brcmf_if *ifp;
|
|
|
+
|
|
|
+ /* await txstatus signal for firmware if active */
|
|
|
+ if (brcmf_fws_fc_active(drvr->fws)) {
|
|
|
+ if (!success)
|
|
|
+ brcmf_fws_bustxfail(drvr->fws, txp);
|
|
|
+ } else {
|
|
|
+ if (brcmf_proto_bcdc_hdrpull(drvr, false, txp, &ifp))
|
|
|
+ brcmu_pkt_buf_free_skb(txp);
|
|
|
+ else
|
|
|
+ brcmf_txfinalize(ifp, txp, success);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
brcmf_proto_bcdc_configure_addr_mode(struct brcmf_pub *drvr, int ifidx,
|
|
|
enum proto_addr_mode addr_mode)
|