diff options
author | Rafał Miłecki <rafal@milecki.pl> | 2017-03-21 10:45:30 +0100 |
---|---|---|
committer | Rafał Miłecki <rafal@milecki.pl> | 2017-03-21 10:45:30 +0100 |
commit | 13006712eab665d606d217fccbb8f609287e2c8b (patch) | |
tree | a11f59d1699b1fd6cefd6afde667a145a2795a06 /package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch | |
parent | 8fae77fc9bb783fcaeb58d94e1ce05ef41fe193c (diff) | |
download | upstream-13006712eab665d606d217fccbb8f609287e2c8b.tar.gz upstream-13006712eab665d606d217fccbb8f609287e2c8b.tar.bz2 upstream-13006712eab665d606d217fccbb8f609287e2c8b.zip |
mac80211: brcmfmac: backport patches pushed on 2017-03-20
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch')
-rw-r--r-- | package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch b/package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch new file mode 100644 index 0000000000..9614e53e51 --- /dev/null +++ b/package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch @@ -0,0 +1,122 @@ +From 7b584396b7a760bc77bbde4625f83ef173159d3e Mon Sep 17 00:00:00 2001 +From: Franky Lin <franky.lin@broadcom.com> +Date: Fri, 10 Mar 2017 21:17:03 +0000 +Subject: [PATCH] brcmfmac: move brcmf_txcomplete to bcdc layer + +brcmf_txcomplete is invoked by sdio and usb bus module which are using +bcdc protocol. So move it from core module into bcdc layer. + +Signed-off-by: Franky Lin <franky.lin@broadcom.com> +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> +Signed-off-by: Kalle Valo <kvalo@codeaurora.org> +--- + .../net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 20 ++++++++++++++++++++ + .../net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h | 2 ++ + .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 3 --- + .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 18 ------------------ + .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 ++- + .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 2 +- + 6 files changed, 25 insertions(+), 23 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c +@@ -355,6 +355,26 @@ void brcmf_proto_bcdc_txflowblock(struct + 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) +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h +@@ -20,6 +20,8 @@ + int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr); + void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr); + void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state); ++void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp, ++ bool success); + #else + static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; } + static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {} +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h +@@ -230,9 +230,6 @@ void brcmf_detach(struct device *dev); + /* Indication from bus module that dongle should be reset */ + void brcmf_dev_reset(struct device *dev); + +-/* Notify the bus has transferred the tx packet to firmware */ +-void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success); +- + /* Configure the "global" bus state used by upper layers */ + void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state); + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -383,24 +383,6 @@ void brcmf_txfinalize(struct brcmf_if *i + brcmu_pkt_buf_free_skb(txp); + } + +-void brcmf_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_hdrpull(drvr, false, txp, &ifp)) +- brcmu_pkt_buf_free_skb(txp); +- else +- brcmf_txfinalize(ifp, txp, success); +- } +-} +- + static void brcmf_ethtool_get_drvinfo(struct net_device *ndev, + struct ethtool_drvinfo *info) + { +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +@@ -2266,7 +2266,8 @@ done: + bus->tx_seq = (bus->tx_seq + pktq->qlen) % SDPCM_SEQ_WRAP; + skb_queue_walk_safe(pktq, pkt_next, tmp) { + __skb_unlink(pkt_next, pktq); +- brcmf_txcomplete(bus->sdiodev->dev, pkt_next, ret == 0); ++ brcmf_proto_bcdc_txcomplete(bus->sdiodev->dev, pkt_next, ++ ret == 0); + } + return ret; + } +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +@@ -483,7 +483,7 @@ static void brcmf_usb_tx_complete(struct + req->skb); + brcmf_usb_del_fromq(devinfo, req); + +- brcmf_txcomplete(devinfo->dev, req->skb, urb->status == 0); ++ brcmf_proto_bcdc_txcomplete(devinfo->dev, req->skb, urb->status == 0); + req->skb = NULL; + brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, &devinfo->tx_freecount); + spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags); |