123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- From 8f13c87ccc495e30de5f58bbda967f6edd5bec53 Mon Sep 17 00:00:00 2001
- From: Ian Molton <[email protected]>
- Date: Fri, 8 Dec 2017 13:10:26 +0100
- Subject: [PATCH] brcmfmac: Split brcmf_sdiod_buffrw function up.
- This function needs to be split up into separate read / write variants
- for clarity.
- Signed-off-by: Ian Molton <[email protected]>
- Reviewed-by: Arend van Spriel <[email protected]>
- Signed-off-by: Arend van Spriel <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 67 +++++++++++++++-------
- 1 file changed, 45 insertions(+), 22 deletions(-)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
- @@ -414,8 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- *ret = retval;
- }
-
- -static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn,
- - bool write, u32 addr, struct sk_buff *pkt)
- +static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev, uint fn,
- + u32 addr, struct sk_buff *pkt)
- {
- unsigned int req_sz;
- int err;
- @@ -424,18 +424,36 @@ static int brcmf_sdiod_buffrw(struct brc
- req_sz = pkt->len + 3;
- req_sz &= (uint)~3;
-
- - if (write)
- - err = sdio_memcpy_toio(sdiodev->func[fn], addr,
- - ((u8 *)(pkt->data)), req_sz);
- - else if (fn == 1)
- - err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)),
- - addr, req_sz);
- + if (fn == 1)
- + err = sdio_memcpy_fromio(sdiodev->func[fn],
- + ((u8 *)(pkt->data)), addr, req_sz);
- else
- /* function 2 read is FIFO operation */
- - err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr,
- - req_sz);
- + err = sdio_readsb(sdiodev->func[fn],
- + ((u8 *)(pkt->data)), addr, req_sz);
- +
- + if (err == -ENOMEDIUM)
- + brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
- +
- + return err;
- +}
- +
- +static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev, uint fn,
- + u32 addr, struct sk_buff *pkt)
- +{
- + unsigned int req_sz;
- + int err;
- +
- + /* Single skb use the standard mmc interface */
- + req_sz = pkt->len + 3;
- + req_sz &= (uint)~3;
- +
- + err = sdio_memcpy_toio(sdiodev->func[fn], addr,
- + ((u8 *)(pkt->data)), req_sz);
- +
- if (err == -ENOMEDIUM)
- brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
- +
- return err;
- }
-
- @@ -643,7 +661,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- if (err)
- goto done;
-
- - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt);
- + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt);
-
- done:
- return err;
- @@ -665,14 +683,14 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- goto done;
-
- if (pktq->qlen == 1)
- - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
- - pktq->next);
- + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
- + pktq->next);
- else if (!sdiodev->sg_support) {
- glom_skb = brcmu_pkt_buf_get_skb(totlen);
- if (!glom_skb)
- return -ENOMEM;
- - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
- - glom_skb);
- + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
- + glom_skb);
- if (err)
- goto done;
-
- @@ -707,8 +725,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- err = brcmf_sdiod_addrprep(sdiodev, &addr);
-
- if (!err)
- - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr,
- - mypkt);
- + err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
-
- brcmu_pkt_buf_free_skb(mypkt);
- return err;
- @@ -730,8 +747,8 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
-
- if (pktq->qlen == 1 || !sdiodev->sg_support)
- skb_queue_walk(pktq, skb) {
- - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true,
- - addr, skb);
- + err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
- + addr, skb);
- if (err)
- break;
- }
- @@ -783,10 +800,16 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-
- skb_put(pkt, dsize);
- - if (write)
- +
- + if (write) {
- memcpy(pkt->data, data, dsize);
- - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, sdaddr,
- - pkt);
- + err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_1,
- + sdaddr, pkt);
- + } else {
- + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_1,
- + sdaddr, pkt);
- + }
- +
- if (err) {
- brcmf_err("membytes transfer failed\n");
- break;
|