1 From 8f13c87ccc495e30de5f58bbda967f6edd5bec53 Mon Sep 17 00:00:00 2001
2 From: Ian Molton <ian@mnementh.co.uk>
3 Date: Fri, 8 Dec 2017 13:10:26 +0100
4 Subject: [PATCH] brcmfmac: Split brcmf_sdiod_buffrw function up.
6 This function needs to be split up into separate read / write variants
9 Signed-off-by: Ian Molton <ian@mnementh.co.uk>
10 Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
11 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
14 .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 67 +++++++++++++++-------
15 1 file changed, 45 insertions(+), 22 deletions(-)
17 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
18 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
19 @@ -414,8 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
23 -static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn,
24 - bool write, u32 addr, struct sk_buff *pkt)
25 +static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev, uint fn,
26 + u32 addr, struct sk_buff *pkt)
30 @@ -424,18 +424,36 @@ static int brcmf_sdiod_buffrw(struct brc
31 req_sz = pkt->len + 3;
35 - err = sdio_memcpy_toio(sdiodev->func[fn], addr,
36 - ((u8 *)(pkt->data)), req_sz);
38 - err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)),
41 + err = sdio_memcpy_fromio(sdiodev->func[fn],
42 + ((u8 *)(pkt->data)), addr, req_sz);
44 /* function 2 read is FIFO operation */
45 - err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr,
47 + err = sdio_readsb(sdiodev->func[fn],
48 + ((u8 *)(pkt->data)), addr, req_sz);
50 + if (err == -ENOMEDIUM)
51 + brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
56 +static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev, uint fn,
57 + u32 addr, struct sk_buff *pkt)
59 + unsigned int req_sz;
62 + /* Single skb use the standard mmc interface */
63 + req_sz = pkt->len + 3;
66 + err = sdio_memcpy_toio(sdiodev->func[fn], addr,
67 + ((u8 *)(pkt->data)), req_sz);
69 if (err == -ENOMEDIUM)
70 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
75 @@ -643,7 +661,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
79 - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt);
80 + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt);
84 @@ -665,14 +683,14 @@ int brcmf_sdiod_recv_chain(struct brcmf_
88 - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
90 + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
92 else if (!sdiodev->sg_support) {
93 glom_skb = brcmu_pkt_buf_get_skb(totlen);
96 - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
98 + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
103 @@ -707,8 +725,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
104 err = brcmf_sdiod_addrprep(sdiodev, &addr);
107 - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr,
109 + err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
111 brcmu_pkt_buf_free_skb(mypkt);
113 @@ -730,8 +747,8 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
115 if (pktq->qlen == 1 || !sdiodev->sg_support)
116 skb_queue_walk(pktq, skb) {
117 - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true,
119 + err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
124 @@ -783,10 +800,16 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
125 sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
131 memcpy(pkt->data, data, dsize);
132 - err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, sdaddr,
134 + err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_1,
137 + err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_1,
142 brcmf_err("membytes transfer failed\n");