Commit 8f13c87c authored by Ian Molton's avatar Ian Molton Committed by Kalle Valo

brcmfmac: Split brcmf_sdiod_buffrw function up.

This function needs to be split up into separate read / write variants
for clarity.
Signed-off-by: default avatarIan Molton <ian@mnementh.co.uk>
Reviewed-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 18907f20
...@@ -414,8 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, ...@@ -414,8 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr,
*ret = retval; *ret = retval;
} }
static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev, uint fn,
bool write, u32 addr, struct sk_buff *pkt) u32 addr, struct sk_buff *pkt)
{ {
unsigned int req_sz; unsigned int req_sz;
int err; int err;
...@@ -424,18 +424,36 @@ static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, ...@@ -424,18 +424,36 @@ static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn,
req_sz = pkt->len + 3; req_sz = pkt->len + 3;
req_sz &= (uint)~3; req_sz &= (uint)~3;
if (write) if (fn == 1)
err = sdio_memcpy_toio(sdiodev->func[fn], addr, err = sdio_memcpy_fromio(sdiodev->func[fn],
((u8 *)(pkt->data)), req_sz); ((u8 *)(pkt->data)), addr, req_sz);
else if (fn == 1)
err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)),
addr, req_sz);
else else
/* function 2 read is FIFO operation */ /* function 2 read is FIFO operation */
err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr, err = sdio_readsb(sdiodev->func[fn],
req_sz); ((u8 *)(pkt->data)), addr, req_sz);
if (err == -ENOMEDIUM) if (err == -ENOMEDIUM)
brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); 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; return err;
} }
...@@ -643,7 +661,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) ...@@ -643,7 +661,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt)
if (err) if (err)
goto done; 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: done:
return err; return err;
...@@ -665,13 +683,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, ...@@ -665,13 +683,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev,
goto done; goto done;
if (pktq->qlen == 1) if (pktq->qlen == 1)
err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
pktq->next); pktq->next);
else if (!sdiodev->sg_support) { else if (!sdiodev->sg_support) {
glom_skb = brcmu_pkt_buf_get_skb(totlen); glom_skb = brcmu_pkt_buf_get_skb(totlen);
if (!glom_skb) if (!glom_skb)
return -ENOMEM; return -ENOMEM;
err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
glom_skb); glom_skb);
if (err) if (err)
goto done; goto done;
...@@ -707,8 +725,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) ...@@ -707,8 +725,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes)
err = brcmf_sdiod_addrprep(sdiodev, &addr); err = brcmf_sdiod_addrprep(sdiodev, &addr);
if (!err) if (!err)
err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr, err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
mypkt);
brcmu_pkt_buf_free_skb(mypkt); brcmu_pkt_buf_free_skb(mypkt);
return err; return err;
...@@ -730,7 +747,7 @@ int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, ...@@ -730,7 +747,7 @@ int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev,
if (pktq->qlen == 1 || !sdiodev->sg_support) if (pktq->qlen == 1 || !sdiodev->sg_support)
skb_queue_walk(pktq, skb) { skb_queue_walk(pktq, skb) {
err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
addr, skb); addr, skb);
if (err) if (err)
break; break;
...@@ -783,10 +800,16 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, ...@@ -783,10 +800,16 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address,
sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG; sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
skb_put(pkt, dsize); skb_put(pkt, dsize);
if (write)
if (write) {
memcpy(pkt->data, data, dsize); memcpy(pkt->data, data, dsize);
err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, sdaddr, err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_1,
pkt); sdaddr, pkt);
} else {
err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_1,
sdaddr, pkt);
}
if (err) { if (err) {
brcmf_err("membytes transfer failed\n"); brcmf_err("membytes transfer failed\n");
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment