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 <ian@mnementh.co.uk> Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
18907f20ea
commit
8f13c87ccc
|
@ -414,8 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr,
|
|||
*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 brcmf_sdio_dev *sdiodev, uint fn,
|
|||
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_sdio_dev *sdiodev, struct sk_buff *pkt)
|
|||
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_sdio_dev *sdiodev,
|
|||
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_sdio_dev *sdiodev, u8 *buf, uint nbytes)
|
|||
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_sdio_dev *sdiodev,
|
|||
|
||||
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 *sdiodev, bool write, u32 address,
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue