diff options
author | Ian Molton <ian@mnementh.co.uk> | 2017-12-08 07:10:26 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2017-12-14 07:40:58 -0500 |
commit | 8f13c87ccc495e30de5f58bbda967f6edd5bec53 (patch) | |
tree | b7bafec46aee05dd6ac5240b9e8eca62f4aa112d | |
parent | 18907f20ea71b17b3cac91049b415b95cde5fa9c (diff) |
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>
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 67 |
1 files changed, 45 insertions, 22 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index 30ab0aa7a240..d9ecc69fe739 100644 --- 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_dev *sdiodev, u32 addr, | |||
414 | *ret = retval; | 414 | *ret = retval; |
415 | } | 415 | } |
416 | 416 | ||
417 | static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, | 417 | static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev, uint fn, |
418 | bool write, u32 addr, struct sk_buff *pkt) | 418 | u32 addr, struct sk_buff *pkt) |
419 | { | 419 | { |
420 | unsigned int req_sz; | 420 | unsigned int req_sz; |
421 | int err; | 421 | int err; |
@@ -424,18 +424,36 @@ static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, | |||
424 | req_sz = pkt->len + 3; | 424 | req_sz = pkt->len + 3; |
425 | req_sz &= (uint)~3; | 425 | req_sz &= (uint)~3; |
426 | 426 | ||
427 | if (write) | 427 | if (fn == 1) |
428 | err = sdio_memcpy_toio(sdiodev->func[fn], addr, | 428 | err = sdio_memcpy_fromio(sdiodev->func[fn], |
429 | ((u8 *)(pkt->data)), req_sz); | 429 | ((u8 *)(pkt->data)), addr, req_sz); |
430 | else if (fn == 1) | ||
431 | err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)), | ||
432 | addr, req_sz); | ||
433 | else | 430 | else |
434 | /* function 2 read is FIFO operation */ | 431 | /* function 2 read is FIFO operation */ |
435 | err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr, | 432 | err = sdio_readsb(sdiodev->func[fn], |
436 | req_sz); | 433 | ((u8 *)(pkt->data)), addr, req_sz); |
434 | |||
435 | if (err == -ENOMEDIUM) | ||
436 | brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); | ||
437 | |||
438 | return err; | ||
439 | } | ||
440 | |||
441 | static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev, uint fn, | ||
442 | u32 addr, struct sk_buff *pkt) | ||
443 | { | ||
444 | unsigned int req_sz; | ||
445 | int err; | ||
446 | |||
447 | /* Single skb use the standard mmc interface */ | ||
448 | req_sz = pkt->len + 3; | ||
449 | req_sz &= (uint)~3; | ||
450 | |||
451 | err = sdio_memcpy_toio(sdiodev->func[fn], addr, | ||
452 | ((u8 *)(pkt->data)), req_sz); | ||
453 | |||
437 | if (err == -ENOMEDIUM) | 454 | if (err == -ENOMEDIUM) |
438 | brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); | 455 | brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); |
456 | |||
439 | return err; | 457 | return err; |
440 | } | 458 | } |
441 | 459 | ||
@@ -643,7 +661,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) | |||
643 | if (err) | 661 | if (err) |
644 | goto done; | 662 | goto done; |
645 | 663 | ||
646 | err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt); | 664 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt); |
647 | 665 | ||
648 | done: | 666 | done: |
649 | return err; | 667 | return err; |
@@ -665,14 +683,14 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, | |||
665 | goto done; | 683 | goto done; |
666 | 684 | ||
667 | if (pktq->qlen == 1) | 685 | if (pktq->qlen == 1) |
668 | err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, | 686 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, |
669 | pktq->next); | 687 | pktq->next); |
670 | else if (!sdiodev->sg_support) { | 688 | else if (!sdiodev->sg_support) { |
671 | glom_skb = brcmu_pkt_buf_get_skb(totlen); | 689 | glom_skb = brcmu_pkt_buf_get_skb(totlen); |
672 | if (!glom_skb) | 690 | if (!glom_skb) |
673 | return -ENOMEM; | 691 | return -ENOMEM; |
674 | err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, | 692 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, |
675 | glom_skb); | 693 | glom_skb); |
676 | if (err) | 694 | if (err) |
677 | goto done; | 695 | goto done; |
678 | 696 | ||
@@ -707,8 +725,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) | |||
707 | err = brcmf_sdiod_addrprep(sdiodev, &addr); | 725 | err = brcmf_sdiod_addrprep(sdiodev, &addr); |
708 | 726 | ||
709 | if (!err) | 727 | if (!err) |
710 | err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr, | 728 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt); |
711 | mypkt); | ||
712 | 729 | ||
713 | brcmu_pkt_buf_free_skb(mypkt); | 730 | brcmu_pkt_buf_free_skb(mypkt); |
714 | return err; | 731 | return err; |
@@ -730,8 +747,8 @@ int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, | |||
730 | 747 | ||
731 | if (pktq->qlen == 1 || !sdiodev->sg_support) | 748 | if (pktq->qlen == 1 || !sdiodev->sg_support) |
732 | skb_queue_walk(pktq, skb) { | 749 | skb_queue_walk(pktq, skb) { |
733 | err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, | 750 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, |
734 | addr, skb); | 751 | addr, skb); |
735 | if (err) | 752 | if (err) |
736 | break; | 753 | break; |
737 | } | 754 | } |
@@ -783,10 +800,16 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, | |||
783 | sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG; | 800 | sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG; |
784 | 801 | ||
785 | skb_put(pkt, dsize); | 802 | skb_put(pkt, dsize); |
786 | if (write) | 803 | |
804 | if (write) { | ||
787 | memcpy(pkt->data, data, dsize); | 805 | memcpy(pkt->data, data, dsize); |
788 | err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, sdaddr, | 806 | err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_1, |
789 | pkt); | 807 | sdaddr, pkt); |
808 | } else { | ||
809 | err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_1, | ||
810 | sdaddr, pkt); | ||
811 | } | ||
812 | |||
790 | if (err) { | 813 | if (err) { |
791 | brcmf_err("membytes transfer failed\n"); | 814 | brcmf_err("membytes transfer failed\n"); |
792 | break; | 815 | break; |