123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- From 4b5adc736828dc25ca33e263ad8c0b9dcd3bf325 Mon Sep 17 00:00:00 2001
- From: Arend Van Spriel <[email protected]>
- Date: Tue, 20 Feb 2018 00:14:19 +0100
- Subject: [PATCH] brcmfmac: move allocation of control rx buffer to
- brcmf_sdio_bus_preinit()
- Allocate the control rx buffer needed for firmware control interface
- during brcmf_sdio_bus_preinit(). This relies on common layer setting
- struct brcmf_bus::maxctl during brcmf_attach(). By moving the allocation
- we can move brcmf_attach() in subsequent change.
- Reviewed-by: Hante Meuleman <[email protected]>
- Reviewed-by: Pieter-Paul Giesberts <[email protected]>
- Reviewed-by: Franky Lin <[email protected]>
- Signed-off-by: Arend van Spriel <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 26 ++++++++++------------
- 1 file changed, 12 insertions(+), 14 deletions(-)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
- @@ -1707,7 +1707,6 @@ brcmf_sdio_read_control(struct brcmf_sdi
- int sdret;
-
- brcmf_dbg(TRACE, "Enter\n");
- -
- if (bus->rxblen)
- buf = vzalloc(bus->rxblen);
- if (!buf)
- @@ -3411,6 +3410,18 @@ static int brcmf_sdio_bus_preinit(struct
- u32 value;
- int err;
-
- + /* maxctl provided by common layer */
- + if (WARN_ON(!bus_if->maxctl))
- + return -EINVAL;
- +
- + /* Allocate control receive buffer */
- + bus_if->maxctl += bus->roundup;
- + value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
- + value += bus->head_align;
- + bus->rxbuf = kmalloc(value, GFP_ATOMIC);
- + if (bus->rxbuf)
- + bus->rxblen = value;
- +
- /* the commands below use the terms tx and rx from
- * a device perspective, ie. bus:txglom affects the
- * bus transfers from device to host.
- @@ -4209,19 +4220,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- bus->blocksize = bus->sdiodev->func2->cur_blksize;
- bus->roundup = min(max_roundup, bus->blocksize);
-
- - /* Allocate buffers */
- - if (bus->sdiodev->bus_if->maxctl) {
- - bus->sdiodev->bus_if->maxctl += bus->roundup;
- - bus->rxblen =
- - roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN),
- - ALIGNMENT) + bus->head_align;
- - bus->rxbuf = kmalloc(bus->rxblen, GFP_ATOMIC);
- - if (!(bus->rxbuf)) {
- - brcmf_err("rxbuf allocation failed\n");
- - goto fail;
- - }
- - }
- -
- sdio_claim_host(bus->sdiodev->func1);
-
- /* Disable F2 to clear any intermediate frame state on the dongle */
|