/linux-4.4.14/drivers/net/wireless/brcm80211/brcmfmac/ |
H A D | bcmsdh.c | 78 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdiod_oob_irqhandler() local 85 if (sdiodev->irq_en) { brcmf_sdiod_oob_irqhandler() 87 sdiodev->irq_en = false; brcmf_sdiod_oob_irqhandler() 90 brcmf_sdio_isr(sdiodev->bus); brcmf_sdiod_oob_irqhandler() 98 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdiod_ib_irqhandler() local 102 brcmf_sdio_isr(sdiodev->bus); brcmf_sdiod_ib_irqhandler() 110 int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_intr_register() argument 117 if ((sdiodev->pdata) && (sdiodev->pdata->oob_irq_supported)) { brcmf_sdiod_intr_register() 119 sdiodev->pdata->oob_irq_nr); brcmf_sdiod_intr_register() 120 ret = request_irq(sdiodev->pdata->oob_irq_nr, brcmf_sdiod_intr_register() 122 sdiodev->pdata->oob_irq_flags, brcmf_sdiod_intr_register() 124 &sdiodev->func[1]->dev); brcmf_sdiod_intr_register() 129 sdiodev->oob_irq_requested = true; brcmf_sdiod_intr_register() 130 spin_lock_init(&sdiodev->irq_en_lock); brcmf_sdiod_intr_register() 131 spin_lock_irqsave(&sdiodev->irq_en_lock, flags); brcmf_sdiod_intr_register() 132 sdiodev->irq_en = true; brcmf_sdiod_intr_register() 133 spin_unlock_irqrestore(&sdiodev->irq_en_lock, flags); brcmf_sdiod_intr_register() 135 ret = enable_irq_wake(sdiodev->pdata->oob_irq_nr); brcmf_sdiod_intr_register() 140 sdiodev->irq_wake = true; brcmf_sdiod_intr_register() 142 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_intr_register() 144 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) { brcmf_sdiod_intr_register() 147 gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr, &ret); brcmf_sdiod_intr_register() 149 brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol, &ret); brcmf_sdiod_intr_register() 151 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_SELECT, 0xf, brcmf_sdiod_intr_register() 153 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret); brcmf_sdiod_intr_register() 154 brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret); brcmf_sdiod_intr_register() 158 data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx, &ret); brcmf_sdiod_intr_register() 160 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret); brcmf_sdiod_intr_register() 164 if (sdiodev->pdata->oob_irq_flags & IRQF_TRIGGER_HIGH) brcmf_sdiod_intr_register() 166 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret); brcmf_sdiod_intr_register() 168 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_intr_register() 171 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_intr_register() 172 sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler); brcmf_sdiod_intr_register() 173 sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler); brcmf_sdiod_intr_register() 174 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_intr_register() 180 int brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_intr_unregister() argument 184 if ((sdiodev->pdata) && (sdiodev->pdata->oob_irq_supported)) { brcmf_sdiod_intr_unregister() 185 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_intr_unregister() 186 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL); brcmf_sdiod_intr_unregister() 187 brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL); brcmf_sdiod_intr_unregister() 188 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_intr_unregister() 190 if (sdiodev->oob_irq_requested) { brcmf_sdiod_intr_unregister() 191 sdiodev->oob_irq_requested = false; brcmf_sdiod_intr_unregister() 192 if (sdiodev->irq_wake) { brcmf_sdiod_intr_unregister() 193 disable_irq_wake(sdiodev->pdata->oob_irq_nr); brcmf_sdiod_intr_unregister() 194 sdiodev->irq_wake = false; brcmf_sdiod_intr_unregister() 196 free_irq(sdiodev->pdata->oob_irq_nr, brcmf_sdiod_intr_unregister() 197 &sdiodev->func[1]->dev); brcmf_sdiod_intr_unregister() 198 sdiodev->irq_en = false; brcmf_sdiod_intr_unregister() 201 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_intr_unregister() 202 sdio_release_irq(sdiodev->func[2]); brcmf_sdiod_intr_unregister() 203 sdio_release_irq(sdiodev->func[1]); brcmf_sdiod_intr_unregister() 204 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_intr_unregister() 210 void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev, brcmf_sdiod_change_state() argument 213 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM || brcmf_sdiod_change_state() 214 state == sdiodev->state) brcmf_sdiod_change_state() 217 brcmf_dbg(TRACE, "%d -> %d\n", sdiodev->state, state); brcmf_sdiod_change_state() 218 switch (sdiodev->state) { brcmf_sdiod_change_state() 221 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN); brcmf_sdiod_change_state() 226 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_UP); brcmf_sdiod_change_state() 231 sdiodev->state = state; brcmf_sdiod_change_state() 253 static int brcmf_sdiod_request_data(struct brcmf_sdio_dev *sdiodev, u8 fn, brcmf_sdiod_request_data() argument 265 func = sdiodev->func[fn]; brcmf_sdiod_request_data() 306 static int brcmf_sdiod_regrw_helper(struct brcmf_sdio_dev *sdiodev, u32 addr, brcmf_sdiod_regrw_helper() argument 313 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) brcmf_sdiod_regrw_helper() 333 ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz, brcmf_sdiod_regrw_helper() 339 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); brcmf_sdiod_regrw_helper() 357 brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address) brcmf_sdiod_set_sbaddr_window() argument 362 if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM) brcmf_sdiod_set_sbaddr_window() 370 err = brcmf_sdiod_regrw_helper(sdiodev, brcmf_sdiod_set_sbaddr_window() 384 brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, uint width, u32 *addr) brcmf_sdiod_addrprep() argument 389 if (bar0 != sdiodev->sbwad) { brcmf_sdiod_addrprep() 390 err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0); brcmf_sdiod_addrprep() 394 sdiodev->sbwad = bar0; brcmf_sdiod_addrprep() 405 u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) brcmf_sdiod_regrb() argument 411 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, brcmf_sdiod_regrb() 421 u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) brcmf_sdiod_regrl() argument 427 retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr); brcmf_sdiod_regrl() 430 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, brcmf_sdiod_regrl() 441 void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, brcmf_sdiod_regwb() argument 447 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, brcmf_sdiod_regwb() 453 void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, brcmf_sdiod_regwl() argument 459 retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr); brcmf_sdiod_regwl() 462 retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data, brcmf_sdiod_regwl() 470 static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn, brcmf_sdiod_buffrw() argument 481 err = sdio_memcpy_toio(sdiodev->func[fn], addr, brcmf_sdiod_buffrw() 484 err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)), brcmf_sdiod_buffrw() 488 err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr, brcmf_sdiod_buffrw() 491 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); brcmf_sdiod_buffrw() 497 * @sdiodev: brcmfmac sdio device 507 static int brcmf_sdiod_sglist_rw(struct brcmf_sdio_dev *sdiodev, uint fn, brcmf_sdiod_sglist_rw() argument 529 if (sdiodev->pdata && sdiodev->pdata->broken_sg_support && !write) { brcmf_sdiod_sglist_rw() 533 req_sz = ALIGN(req_sz, sdiodev->func[fn]->cur_blksize); brcmf_sdiod_sglist_rw() 552 func_blk_sz = sdiodev->func[fn]->cur_blksize; brcmf_sdiod_sglist_rw() 553 max_req_sz = sdiodev->max_request_size; brcmf_sdiod_sglist_rw() 554 max_seg_cnt = min_t(unsigned short, sdiodev->max_segment_count, brcmf_sdiod_sglist_rw() 564 mmc_dat.sg = sdiodev->sgtable.sgl; brcmf_sdiod_sglist_rw() 580 sgl = sdiodev->sgtable.sgl; brcmf_sdiod_sglist_rw() 585 if (sg_data_sz > sdiodev->max_segment_size) brcmf_sdiod_sglist_rw() 586 sg_data_sz = sdiodev->max_segment_size; brcmf_sdiod_sglist_rw() 621 mmc_set_data_timeout(&mmc_dat, sdiodev->func[fn]->card); brcmf_sdiod_sglist_rw() 622 mmc_wait_for_req(sdiodev->func[fn]->card->host, &mmc_req); brcmf_sdiod_sglist_rw() 626 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM); brcmf_sdiod_sglist_rw() 636 if (sdiodev->pdata && sdiodev->pdata->broken_sg_support && !write) { brcmf_sdiod_sglist_rw() 661 sg_init_table(sdiodev->sgtable.sgl, sdiodev->sgtable.orig_nents); 668 int brcmf_sdiod_recv_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) brcmf_sdiod_recv_buf() argument 680 err = brcmf_sdiod_recv_pkt(sdiodev, mypkt); brcmf_sdiod_recv_buf() 688 int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt) brcmf_sdiod_recv_pkt() argument 690 u32 addr = sdiodev->sbwad; brcmf_sdiod_recv_pkt() 695 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); brcmf_sdiod_recv_pkt() 699 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt); brcmf_sdiod_recv_pkt() 705 int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, brcmf_sdiod_recv_chain() argument 710 u32 addr = sdiodev->sbwad; brcmf_sdiod_recv_chain() 716 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); brcmf_sdiod_recv_chain() 721 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, brcmf_sdiod_recv_chain() 723 else if (!sdiodev->sg_support) { brcmf_sdiod_recv_chain() 727 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, brcmf_sdiod_recv_chain() 737 err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, false, addr, 744 int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes) brcmf_sdiod_send_buf() argument 747 u32 addr = sdiodev->sbwad; brcmf_sdiod_send_buf() 759 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); brcmf_sdiod_send_buf() 762 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr, brcmf_sdiod_send_buf() 770 int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, brcmf_sdiod_send_pkt() argument 774 u32 addr = sdiodev->sbwad; brcmf_sdiod_send_pkt() 779 err = brcmf_sdiod_addrprep(sdiodev, 4, &addr); brcmf_sdiod_send_pkt() 783 if (pktq->qlen == 1 || !sdiodev->sg_support) skb_queue_walk() 785 err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, skb_queue_walk() 791 err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, true, addr, 798 brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, brcmf_sdiod_ramrw() argument 821 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_ramrw() 826 bcmerror = brcmf_sdiod_set_sbaddr_window(sdiodev, address); brcmf_sdiod_ramrw() 840 bcmerror = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, brcmf_sdiod_ramrw() 863 if (brcmf_sdiod_set_sbaddr_window(sdiodev, sdiodev->sbwad)) brcmf_sdiod_ramrw() 865 sdiodev->sbwad); brcmf_sdiod_ramrw() 867 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_ramrw() 872 int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, uint fn) brcmf_sdiod_abort() argument 878 brcmf_sdiod_request_data(sdiodev, SDIO_FUNC_0, SDIO_CCCR_ABORT, brcmf_sdiod_abort() 885 static void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_sgtable_alloc() argument 890 if (!sdiodev->sg_support) brcmf_sdiod_sgtable_alloc() 896 WARN_ON(nents > sdiodev->max_segment_count); brcmf_sdiod_sgtable_alloc() 899 err = sg_alloc_table(&sdiodev->sgtable, nents, GFP_KERNEL); brcmf_sdiod_sgtable_alloc() 902 sdiodev->sg_support = false; brcmf_sdiod_sgtable_alloc() 905 sdiodev->txglomsz = brcmf_sdiod_txglomsz; brcmf_sdiod_sgtable_alloc() 909 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_attach() argument 911 sdiodev->freezer = kzalloc(sizeof(*sdiodev->freezer), GFP_KERNEL); brcmf_sdiod_freezer_attach() 912 if (!sdiodev->freezer) brcmf_sdiod_freezer_attach() 914 atomic_set(&sdiodev->freezer->thread_count, 0); brcmf_sdiod_freezer_attach() 915 atomic_set(&sdiodev->freezer->freezing, 0); brcmf_sdiod_freezer_attach() 916 init_waitqueue_head(&sdiodev->freezer->thread_freeze); brcmf_sdiod_freezer_attach() 917 init_completion(&sdiodev->freezer->resumed); brcmf_sdiod_freezer_attach() 921 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_detach() argument 923 if (sdiodev->freezer) { brcmf_sdiod_freezer_detach() 924 WARN_ON(atomic_read(&sdiodev->freezer->freezing)); brcmf_sdiod_freezer_detach() 925 kfree(sdiodev->freezer); brcmf_sdiod_freezer_detach() 929 static int brcmf_sdiod_freezer_on(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_on() argument 931 atomic_t *expect = &sdiodev->freezer->thread_count; brcmf_sdiod_freezer_on() 934 sdiodev->freezer->frozen_count = 0; brcmf_sdiod_freezer_on() 935 reinit_completion(&sdiodev->freezer->resumed); brcmf_sdiod_freezer_on() 936 atomic_set(&sdiodev->freezer->freezing, 1); brcmf_sdiod_freezer_on() 937 brcmf_sdio_trigger_dpc(sdiodev->bus); brcmf_sdiod_freezer_on() 938 wait_event(sdiodev->freezer->thread_freeze, brcmf_sdiod_freezer_on() 939 atomic_read(expect) == sdiodev->freezer->frozen_count); brcmf_sdiod_freezer_on() 940 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_freezer_on() 941 res = brcmf_sdio_sleep(sdiodev->bus, true); brcmf_sdiod_freezer_on() 942 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_freezer_on() 946 static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_off() argument 948 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_freezer_off() 949 brcmf_sdio_sleep(sdiodev->bus, false); brcmf_sdiod_freezer_off() 950 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_freezer_off() 951 atomic_set(&sdiodev->freezer->freezing, 0); brcmf_sdiod_freezer_off() 952 complete_all(&sdiodev->freezer->resumed); brcmf_sdiod_freezer_off() 955 bool brcmf_sdiod_freezing(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezing() argument 957 return atomic_read(&sdiodev->freezer->freezing); brcmf_sdiod_freezing() 960 void brcmf_sdiod_try_freeze(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_try_freeze() argument 962 if (!brcmf_sdiod_freezing(sdiodev)) brcmf_sdiod_try_freeze() 964 sdiodev->freezer->frozen_count++; brcmf_sdiod_try_freeze() 965 wake_up(&sdiodev->freezer->thread_freeze); brcmf_sdiod_try_freeze() 966 wait_for_completion(&sdiodev->freezer->resumed); brcmf_sdiod_try_freeze() 969 void brcmf_sdiod_freezer_count(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_count() argument 971 atomic_inc(&sdiodev->freezer->thread_count); brcmf_sdiod_freezer_count() 974 void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_uncount() argument 976 atomic_dec(&sdiodev->freezer->thread_count); brcmf_sdiod_freezer_uncount() 979 static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_attach() argument 984 static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_detach() argument 989 static int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_remove() argument 991 sdiodev->state = BRCMF_SDIOD_DOWN; brcmf_sdiod_remove() 992 if (sdiodev->bus) { brcmf_sdiod_remove() 993 brcmf_sdio_remove(sdiodev->bus); brcmf_sdiod_remove() 994 sdiodev->bus = NULL; brcmf_sdiod_remove() 997 brcmf_sdiod_freezer_detach(sdiodev); brcmf_sdiod_remove() 1000 sdio_claim_host(sdiodev->func[2]); brcmf_sdiod_remove() 1001 sdio_disable_func(sdiodev->func[2]); brcmf_sdiod_remove() 1002 sdio_release_host(sdiodev->func[2]); brcmf_sdiod_remove() 1005 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_remove() 1006 sdio_disable_func(sdiodev->func[1]); brcmf_sdiod_remove() 1007 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_remove() 1009 sg_free_table(&sdiodev->sgtable); brcmf_sdiod_remove() 1010 sdiodev->sbwad = 0; brcmf_sdiod_remove() 1012 pm_runtime_allow(sdiodev->func[1]->card->host->parent); brcmf_sdiod_remove() 1024 static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_probe() argument 1031 sdiodev->num_funcs = 2; brcmf_sdiod_probe() 1033 sdio_claim_host(sdiodev->func[1]); brcmf_sdiod_probe() 1035 ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE); brcmf_sdiod_probe() 1038 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_probe() 1041 ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE); brcmf_sdiod_probe() 1044 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_probe() 1049 sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY; brcmf_sdiod_probe() 1052 ret = sdio_enable_func(sdiodev->func[1]); brcmf_sdiod_probe() 1053 sdio_release_host(sdiodev->func[1]); brcmf_sdiod_probe() 1064 func = sdiodev->func[2]; brcmf_sdiod_probe() 1066 sdiodev->sg_support = host->max_segs > 1; brcmf_sdiod_probe() 1068 sdiodev->max_request_size = min_t(uint, host->max_req_size, brcmf_sdiod_probe() 1070 sdiodev->max_segment_count = min_t(uint, host->max_segs, brcmf_sdiod_probe() 1072 sdiodev->max_segment_size = host->max_seg_size; brcmf_sdiod_probe() 1077 brcmf_sdiod_sgtable_alloc(sdiodev); brcmf_sdiod_probe() 1079 ret = brcmf_sdiod_freezer_attach(sdiodev); brcmf_sdiod_probe() 1084 sdiodev->bus = brcmf_sdio_probe(sdiodev); brcmf_sdiod_probe() 1085 if (!sdiodev->bus) { brcmf_sdiod_probe() 1092 brcmf_sdiod_remove(sdiodev); brcmf_sdiod_probe() 1137 struct brcmf_sdio_dev *sdiodev; brcmf_ops_sdio_probe() local 1162 sdiodev = kzalloc(sizeof(struct brcmf_sdio_dev), GFP_KERNEL); brcmf_ops_sdio_probe() 1163 if (!sdiodev) { brcmf_ops_sdio_probe() 1171 sdiodev->func[0] = kmemdup(func, sizeof(*func), GFP_KERNEL); brcmf_ops_sdio_probe() 1172 sdiodev->func[0]->num = 0; brcmf_ops_sdio_probe() 1173 sdiodev->func[1] = func->card->sdio_func[0]; brcmf_ops_sdio_probe() 1174 sdiodev->func[2] = func; brcmf_ops_sdio_probe() 1176 sdiodev->bus_if = bus_if; brcmf_ops_sdio_probe() 1177 bus_if->bus_priv.sdio = sdiodev; brcmf_ops_sdio_probe() 1180 dev_set_drvdata(&sdiodev->func[1]->dev, bus_if); brcmf_ops_sdio_probe() 1181 sdiodev->dev = &sdiodev->func[1]->dev; brcmf_ops_sdio_probe() 1182 sdiodev->pdata = brcmfmac_sdio_pdata; brcmf_ops_sdio_probe() 1184 if (!sdiodev->pdata) brcmf_ops_sdio_probe() 1185 brcmf_of_probe(sdiodev); brcmf_ops_sdio_probe() 1191 if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) && brcmf_ops_sdio_probe() 1192 ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) || brcmf_ops_sdio_probe() 1193 (sdiodev->pdata && sdiodev->pdata->oob_irq_supported))) brcmf_ops_sdio_probe() 1197 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN); brcmf_ops_sdio_probe() 1200 err = brcmf_sdiod_probe(sdiodev); brcmf_ops_sdio_probe() 1211 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); brcmf_ops_sdio_probe() 1212 kfree(sdiodev->func[0]); brcmf_ops_sdio_probe() 1213 kfree(sdiodev); brcmf_ops_sdio_probe() 1221 struct brcmf_sdio_dev *sdiodev; brcmf_ops_sdio_remove() local 1233 sdiodev = bus_if->bus_priv.sdio; brcmf_ops_sdio_remove() 1234 brcmf_sdiod_remove(sdiodev); brcmf_ops_sdio_remove() 1236 dev_set_drvdata(&sdiodev->func[1]->dev, NULL); brcmf_ops_sdio_remove() 1237 dev_set_drvdata(&sdiodev->func[2]->dev, NULL); brcmf_ops_sdio_remove() 1240 kfree(sdiodev->func[0]); brcmf_ops_sdio_remove() 1241 kfree(sdiodev); brcmf_ops_sdio_remove() 1250 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_wowl_config() local 1253 sdiodev->wowl_enabled = enabled; brcmf_sdio_wowl_config() 1261 struct brcmf_sdio_dev *sdiodev; brcmf_ops_sdio_suspend() local 1271 sdiodev = bus_if->bus_priv.sdio; brcmf_ops_sdio_suspend() 1273 brcmf_sdiod_freezer_on(sdiodev); brcmf_ops_sdio_suspend() 1274 brcmf_sdio_wd_timer(sdiodev->bus, 0); brcmf_ops_sdio_suspend() 1277 if (sdiodev->wowl_enabled) { brcmf_ops_sdio_suspend() 1278 if (sdiodev->pdata->oob_irq_supported) brcmf_ops_sdio_suspend() 1279 enable_irq_wake(sdiodev->pdata->oob_irq_nr); brcmf_ops_sdio_suspend() 1283 if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags)) brcmf_ops_sdio_suspend() 1291 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_ops_sdio_resume() local 1298 brcmf_sdiod_freezer_off(sdiodev); brcmf_ops_sdio_resume()
|
H A D | of.c | 27 void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev) brcmf_of_probe() argument 29 struct device *dev = sdiodev->dev; brcmf_of_probe() 38 sdiodev->pdata = devm_kzalloc(dev, sizeof(*sdiodev->pdata), GFP_KERNEL); brcmf_of_probe() 39 if (!sdiodev->pdata) brcmf_of_probe() 43 sdiodev->pdata->drive_strength = val; brcmf_of_probe() 56 sdiodev->pdata->oob_irq_supported = true; brcmf_of_probe() 57 sdiodev->pdata->oob_irq_nr = irq; brcmf_of_probe() 58 sdiodev->pdata->oob_irq_flags = irqf; brcmf_of_probe()
|
H A D | sdio.c | 434 struct brcmf_sdio_dev *sdiodev; /* sdio device handler */ member in struct:brcmf_sdio 691 struct brcmf_sdio_dev *sdiodev) brcmf_sdio_get_fwnames() 709 strlcpy(sdiodev->fw_name, brcmf_firmware_path, brcmf_sdio_get_fwnames() 710 sizeof(sdiodev->fw_name)); brcmf_sdio_get_fwnames() 711 strlcpy(sdiodev->nvram_name, brcmf_firmware_path, brcmf_sdio_get_fwnames() 712 sizeof(sdiodev->nvram_name)); brcmf_sdio_get_fwnames() 716 strlcat(sdiodev->fw_name, "/", brcmf_sdio_get_fwnames() 717 sizeof(sdiodev->fw_name)); brcmf_sdio_get_fwnames() 718 strlcat(sdiodev->nvram_name, "/", brcmf_sdio_get_fwnames() 719 sizeof(sdiodev->nvram_name)); brcmf_sdio_get_fwnames() 722 strlcat(sdiodev->fw_name, brcmf_fwname_data[i].bin, brcmf_sdio_get_fwnames() 723 sizeof(sdiodev->fw_name)); brcmf_sdio_get_fwnames() 724 strlcat(sdiodev->nvram_name, brcmf_fwname_data[i].nv, brcmf_sdio_get_fwnames() 725 sizeof(sdiodev->nvram_name)); brcmf_sdio_get_fwnames() 757 *regvar = brcmf_sdiod_regrl(bus->sdiodev, core->base + offset, &ret); r_sdreg32() 768 brcmf_sdiod_regwl(bus->sdiodev, core->base + reg_offset, regval, &ret); w_sdreg32() 784 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, brcmf_sdio_kso_control() 811 rd_val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, brcmf_sdio_kso_control() 817 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, brcmf_sdio_kso_control() 854 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_htclk() 862 clkctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_htclk() 872 devctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_htclk() 881 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, brcmf_sdio_htclk() 889 devctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_htclk() 892 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, brcmf_sdio_htclk() 900 clkctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_htclk() 934 devctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_htclk() 937 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, brcmf_sdio_htclk() 942 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_htclk() 1033 clkcsr = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_bus_sleep() 1038 brcmf_sdiod_regwb(bus->sdiodev, brcmf_sdio_bus_sleep() 1086 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_readshared() 1096 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, shaddr, brcmf_sdio_readshared() 1115 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, (u8 *)&sh_le, brcmf_sdio_readshared() 1120 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readshared() 1142 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readshared() 1253 brcmf_sdiod_abort(bus->sdiodev, SDIO_FUNC_2); brcmf_sdio_rxfail() 1255 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, brcmf_sdio_rxfail() 1261 hi = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_rxfail() 1263 lo = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_rxfail() 1298 struct brcmf_sdio_dev *sdiodev = bus->sdiodev; brcmf_sdio_txfail() local 1305 brcmf_sdiod_abort(sdiodev, SDIO_FUNC_2); brcmf_sdio_txfail() 1306 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL); brcmf_sdio_txfail() 1310 hi = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL); brcmf_sdio_txfail() 1311 lo = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL); brcmf_sdio_txfail() 1651 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1652 errcode = brcmf_sdiod_recv_chain(bus->sdiodev, brcmf_sdio_rxglom() 1654 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1662 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1671 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1681 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1684 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1700 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1703 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1713 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1724 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_rxglom() 1757 brcmf_rx_frame(bus->sdiodev->dev, pfirst); brcmf_sdio_rxglom() 1824 ((len + pad) < bus->sdiodev->bus_if->maxctl)) brcmf_sdio_read_control() 1831 if ((rdlen + BRCMF_FIRSTREAD) > bus->sdiodev->bus_if->maxctl) { brcmf_sdio_read_control() 1833 rdlen, bus->sdiodev->bus_if->maxctl); brcmf_sdio_read_control() 1838 if ((len - doff) > bus->sdiodev->bus_if->maxctl) { brcmf_sdio_read_control() 1840 len, len - doff, bus->sdiodev->bus_if->maxctl); brcmf_sdio_read_control() 1847 sdret = brcmf_sdiod_recv_buf(bus->sdiodev, rbuf, rdlen); brcmf_sdio_read_control() 1912 !bus->rxskip && rxleft && bus->sdiodev->state == BRCMF_SDIOD_DATA; brcmf_sdio_readframes() 1929 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1931 ret = brcmf_sdiod_recv_buf(bus->sdiodev, brcmf_sdio_readframes() 1939 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1949 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1965 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1982 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1988 ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt); brcmf_sdio_readframes() 1990 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1996 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 1999 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2010 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2023 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2027 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2043 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2045 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2068 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2070 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_readframes() 2095 brcmf_rx_frame(bus->sdiodev->dev, pkt); brcmf_sdio_readframes() 2131 bus->sdiodev->bus_if->tx_realloc++; brcmf_sdio_txpkt_hdalign() 2156 struct brcmf_sdio_dev *sdiodev; brcmf_sdio_txpkt_prep_sg() local 2163 sdiodev = bus->sdiodev; brcmf_sdio_txpkt_prep_sg() 2164 blksize = sdiodev->func[SDIO_FUNC_2]->cur_blksize; brcmf_sdio_txpkt_prep_sg() 2343 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_txpkt() 2344 ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq); brcmf_sdio_txpkt() 2350 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_txpkt() 2358 brcmf_txcomplete(bus->sdiodev->dev, pkt_next, ret == 0); skb_queue_walk_safe() 2381 bus->sdiodev->txglomsz); brcmf_sdio_sendfromq() 2404 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_sendfromq() 2408 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_sendfromq() 2418 if ((bus->sdiodev->state == BRCMF_SDIOD_DATA) && brcmf_sdio_sendfromq() 2421 brcmf_txflowblock(bus->sdiodev->dev, false); brcmf_sdio_sendfromq() 2478 ret = brcmf_sdiod_send_buf(bus->sdiodev, frame, len); brcmf_sdio_tx_ctrlframe() 2495 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_stop() local 2496 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_stop() 2506 if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) { brcmf_sdio_bus_stop() 2507 sdio_claim_host(sdiodev->func[1]); brcmf_sdio_bus_stop() 2518 saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_bus_stop() 2521 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_bus_stop() 2529 sdio_disable_func(sdiodev->func[SDIO_FUNC_2]); brcmf_sdio_bus_stop() 2535 sdio_release_host(sdiodev->func[1]); brcmf_sdio_bus_stop() 2559 if (bus->sdiodev->oob_irq_requested) { brcmf_sdio_clrintr() 2560 spin_lock_irqsave(&bus->sdiodev->irq_en_lock, flags); brcmf_sdio_clrintr() 2561 if (!bus->sdiodev->irq_en && !atomic_read(&bus->ipend)) { brcmf_sdio_clrintr() 2562 enable_irq(bus->sdiodev->pdata->oob_irq_nr); brcmf_sdio_clrintr() 2563 bus->sdiodev->irq_en = true; brcmf_sdio_clrintr() 2565 spin_unlock_irqrestore(&bus->sdiodev->irq_en_lock, flags); brcmf_sdio_clrintr() 2579 val = brcmf_sdiod_regrl(bus->sdiodev, addr, &ret); brcmf_sdio_intr_rstatus() 2589 brcmf_sdiod_regwl(bus->sdiodev, addr, val, &ret); brcmf_sdio_intr_rstatus() 2607 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_dpc() 2615 devctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_dpc() 2620 clkctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_dpc() 2627 devctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_dpc() 2630 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, brcmf_sdio_dpc() 2671 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_dpc() 2714 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_dpc() 2722 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_dpc() 2734 if ((bus->sdiodev->state != BRCMF_SDIOD_DATA) || (err != 0)) { brcmf_sdio_dpc() 2738 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_dpc() 2745 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_dpc() 2759 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_gettxq() local 2760 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_gettxq() 2812 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_txdata() local 2813 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_txdata() 2816 if (sdiodev->state != BRCMF_SDIOD_DATA) brcmf_sdio_bus_txdata() 2873 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, (u8 *)&c->log_le, brcmf_sdio_readconsole() 2899 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, c->buf, c->bufsize); brcmf_sdio_readconsole() 2941 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_txctl() local 2942 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_txctl() 2946 if (sdiodev->state != BRCMF_SDIOD_DATA) brcmf_sdio_bus_txctl() 2960 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_bus_txctl() 2966 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_bus_txctl() 2994 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, brcmf_sdio_dump_console() 3001 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, brcmf_sdio_dump_console() 3008 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, brcmf_sdio_dump_console() 3023 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, console_ptr, (u8 *)conbuf, brcmf_sdio_dump_console() 3052 error = brcmf_sdiod_ramrw(bus->sdiodev, false, sh->trap_addr, (u8 *)&tr, brcmf_sdio_trap_info() 3090 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_assert_info() 3092 error = brcmf_sdiod_ramrw(bus->sdiodev, false, brcmf_sdio_assert_info() 3098 error = brcmf_sdiod_ramrw(bus->sdiodev, false, brcmf_sdio_assert_info() 3103 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_assert_info() 3165 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_debugfs_sdio_count_read() local 3166 struct brcmf_sdio_count *sdcnt = &sdiodev->bus->sdcnt; brcmf_debugfs_sdio_count_read() 3203 struct brcmf_pub *drvr = bus->sdiodev->bus_if->drvr; brcmf_sdio_debugfs_create() 3236 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_rxctl() local 3237 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_rxctl() 3240 if (sdiodev->state != BRCMF_SDIOD_DATA) brcmf_sdio_bus_rxctl() 3280 brcmf_sdio_verifymemory(struct brcmf_sdio_dev *sdiodev, u32 ram_addr, brcmf_sdio_verifymemory() argument 3303 err = brcmf_sdiod_ramrw(sdiodev, false, address, ram_cmp, len); brcmf_sdio_verifymemory() 3325 brcmf_sdio_verifymemory(struct brcmf_sdio_dev *sdiodev, u32 ram_addr, brcmf_sdio_verifymemory() argument 3339 err = brcmf_sdiod_ramrw(bus->sdiodev, true, bus->ci->rambase, brcmf_sdio_download_code_file() 3344 else if (!brcmf_sdio_verifymemory(bus->sdiodev, bus->ci->rambase, brcmf_sdio_download_code_file() 3360 err = brcmf_sdiod_ramrw(bus->sdiodev, true, address, vars, varsz); brcmf_sdio_download_nvram() 3364 else if (!brcmf_sdio_verifymemory(bus->sdiodev, address, vars, varsz)) brcmf_sdio_download_nvram() 3377 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_download_firmware() 3405 brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA); brcmf_sdio_download_firmware() 3410 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_download_firmware() 3421 val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err); brcmf_sdio_sr_init() 3428 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err); brcmf_sdio_sr_init() 3435 brcmf_sdiod_regwb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP, brcmf_sdio_sr_init() 3444 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_sr_init() 3468 val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err); brcmf_sdio_kso_init() 3477 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, brcmf_sdio_kso_init() 3492 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_preinit() local 3493 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_preinit() 3510 if (sdiodev->pdata) brcmf_sdio_bus_preinit() 3511 value = sdiodev->pdata->sd_sgentry_align; brcmf_sdio_bus_preinit() 3522 if (sdiodev->sg_support) { brcmf_sdio_bus_preinit() 3525 pad_size = bus->sdiodev->func[2]->cur_blksize << 1; brcmf_sdio_bus_preinit() 3526 err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom", brcmf_sdio_bus_preinit() 3536 brcmf_bus_add_txhdrlen(bus->sdiodev->dev, bus->tx_hdrlen); brcmf_sdio_bus_preinit() 3545 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_get_ramsize() local 3546 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_get_ramsize() 3555 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_bus_get_memdump() local 3556 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_bus_get_memdump() 3567 sdio_claim_host(sdiodev->func[1]); brcmf_sdio_bus_get_memdump() 3571 err = brcmf_sdiod_ramrw(sdiodev, false, address, data, len); brcmf_sdio_bus_get_memdump() 3583 sdio_release_host(sdiodev->func[1]); brcmf_sdio_bus_get_memdump() 3640 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_bus_watchdog() 3641 devpend = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_bus_watchdog() 3644 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_bus_watchdog() 3665 if (bus->sdiodev->state == BRCMF_SDIOD_DATA && BRCMF_FWCON_ON() && brcmf_sdio_bus_watchdog() 3670 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_bus_watchdog() 3676 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_bus_watchdog() 3689 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_bus_watchdog() 3693 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_bus_watchdog() 3716 if (brcmf_sdiod_freezing(bus->sdiodev)) { brcmf_sdio_dataworker() 3717 brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DOWN); brcmf_sdio_dataworker() 3718 brcmf_sdiod_try_freeze(bus->sdiodev); brcmf_sdio_dataworker() 3719 brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA); brcmf_sdio_dataworker() 3724 brcmf_sdio_drivestrengthinit(struct brcmf_sdio_dev *sdiodev, brcmf_sdio_drivestrengthinit() argument 3781 brcmf_sdiod_regwl(sdiodev, addr, 1, NULL); brcmf_sdio_drivestrengthinit() 3782 cc_data_temp = brcmf_sdiod_regrl(sdiodev, addr, NULL); brcmf_sdio_drivestrengthinit() 3786 brcmf_sdiod_regwl(sdiodev, addr, cc_data_temp, NULL); brcmf_sdio_drivestrengthinit() 3795 struct brcmf_sdio_dev *sdiodev = ctx; brcmf_sdio_buscoreprep() local 3801 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err); brcmf_sdio_buscoreprep() 3809 clkval = brcmf_sdiod_regrb(sdiodev, brcmf_sdio_buscoreprep() 3818 SPINWAIT(((clkval = brcmf_sdiod_regrb(sdiodev, brcmf_sdio_buscoreprep() 3829 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err); brcmf_sdio_buscoreprep() 3833 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL); brcmf_sdio_buscoreprep() 3841 struct brcmf_sdio_dev *sdiodev = ctx; brcmf_sdio_buscore_activate() local 3848 brcmf_sdiod_regwl(sdiodev, reg_addr, 0xFFFFFFFF, NULL); brcmf_sdio_buscore_activate() 3852 brcmf_sdiod_ramrw(sdiodev, true, 0, (void *)&rstvec, brcmf_sdio_buscore_activate() 3858 struct brcmf_sdio_dev *sdiodev = ctx; brcmf_sdio_buscore_read32() local 3861 val = brcmf_sdiod_regrl(sdiodev, addr, NULL); brcmf_sdio_buscore_read32() 3862 if (sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 && brcmf_sdio_buscore_read32() 3875 struct brcmf_sdio_dev *sdiodev = ctx; brcmf_sdio_buscore_write32() local 3877 brcmf_sdiod_regwl(sdiodev, addr, val, NULL); brcmf_sdio_buscore_write32() 3896 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_probe_attach() 3899 brcmf_sdiod_regrl(bus->sdiodev, SI_ENUM_BASE, NULL)); brcmf_sdio_probe_attach() 3906 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_probe_attach() 3909 clkctl = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_probe_attach() 3918 bus->ci = brcmf_chip_attach(bus->sdiodev, &brcmf_sdio_buscore_ops); brcmf_sdio_probe_attach() 3930 if ((bus->sdiodev->pdata) && (bus->sdiodev->pdata->drive_strength)) brcmf_sdio_probe_attach() 3931 drivestrength = bus->sdiodev->pdata->drive_strength; brcmf_sdio_probe_attach() 3934 brcmf_sdio_drivestrengthinit(bus->sdiodev, bus->ci, drivestrength); brcmf_sdio_probe_attach() 3937 reg_val = brcmf_sdiod_regrb(bus->sdiodev, brcmf_sdio_probe_attach() 3944 brcmf_sdiod_regwb(bus->sdiodev, brcmf_sdio_probe_attach() 3952 reg_val = brcmf_sdiod_regrl(bus->sdiodev, reg_addr, &err); brcmf_sdio_probe_attach() 3958 brcmf_sdiod_regwl(bus->sdiodev, reg_addr, reg_val, &err); brcmf_sdio_probe_attach() 3962 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_probe_attach() 3983 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_probe_attach() 3995 brcmf_sdiod_freezer_count(bus->sdiodev); brcmf_sdio_watchdog_thread() 3999 brcmf_sdiod_freezer_uncount(bus->sdiodev); brcmf_sdio_watchdog_thread() 4001 brcmf_sdiod_freezer_count(bus->sdiodev); brcmf_sdio_watchdog_thread() 4002 brcmf_sdiod_try_freeze(bus->sdiodev); brcmf_sdio_watchdog_thread() 4045 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; brcmf_sdio_firmware_callback() local 4046 struct brcmf_sdio *bus = sdiodev->bus; brcmf_sdio_firmware_callback() 4066 sdio_claim_host(sdiodev->func[1]); brcmf_sdio_firmware_callback() 4074 saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err); brcmf_sdio_firmware_callback() 4076 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_firmware_callback() 4087 err = sdio_enable_func(sdiodev->func[SDIO_FUNC_2]); brcmf_sdio_firmware_callback() 4099 brcmf_sdiod_regwb(sdiodev, SBSDIO_WATERMARK, 8, &err); brcmf_sdio_firmware_callback() 4102 sdio_disable_func(sdiodev->func[SDIO_FUNC_2]); brcmf_sdio_firmware_callback() 4110 brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, brcmf_sdio_firmware_callback() 4115 err = brcmf_sdiod_intr_register(sdiodev); brcmf_sdio_firmware_callback() 4124 sdio_release_host(sdiodev->func[1]); brcmf_sdio_firmware_callback() 4134 sdio_release_host(sdiodev->func[1]); brcmf_sdio_firmware_callback() 4140 struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) brcmf_sdio_probe() argument 4153 bus->sdiodev = sdiodev; brcmf_sdio_probe() 4154 sdiodev->bus = bus; brcmf_sdio_probe() 4166 if (sdiodev->pdata) { brcmf_sdio_probe() 4167 if (sdiodev->pdata->sd_head_align > ALIGNMENT) brcmf_sdio_probe() 4168 bus->head_align = sdiodev->pdata->sd_head_align; brcmf_sdio_probe() 4169 if (sdiodev->pdata->sd_sgentry_align > ALIGNMENT) brcmf_sdio_probe() 4170 bus->sgentry_align = sdiodev->pdata->sd_sgentry_align; brcmf_sdio_probe() 4175 dev_name(&sdiodev->func[1]->dev)); brcmf_sdio_probe() 4180 brcmf_sdiod_freezer_count(sdiodev); brcmf_sdio_probe() 4204 dev_name(&sdiodev->func[1]->dev)); brcmf_sdio_probe() 4214 bus->sdiodev->bus_if->dev = bus->sdiodev->dev; brcmf_sdio_probe() 4215 bus->sdiodev->bus_if->ops = &brcmf_sdio_bus_ops; brcmf_sdio_probe() 4216 bus->sdiodev->bus_if->chip = bus->ci->chip; brcmf_sdio_probe() 4217 bus->sdiodev->bus_if->chiprev = bus->ci->chiprev; brcmf_sdio_probe() 4223 ret = brcmf_attach(bus->sdiodev->dev); brcmf_sdio_probe() 4230 bus->blocksize = bus->sdiodev->func[2]->cur_blksize; brcmf_sdio_probe() 4234 if (bus->sdiodev->bus_if->maxctl) { brcmf_sdio_probe() 4235 bus->sdiodev->bus_if->maxctl += bus->roundup; brcmf_sdio_probe() 4237 roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN), brcmf_sdio_probe() 4246 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_probe() 4249 sdio_disable_func(bus->sdiodev->func[SDIO_FUNC_2]); brcmf_sdio_probe() 4254 brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL); brcmf_sdio_probe() 4256 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_probe() 4269 ret = brcmf_sdio_get_fwnames(bus->ci, sdiodev); brcmf_sdio_probe() 4273 ret = brcmf_fw_get_firmwares(sdiodev->dev, BRCMF_FW_REQUEST_NVRAM, brcmf_sdio_probe() 4274 sdiodev->fw_name, sdiodev->nvram_name, brcmf_sdio_probe() 4295 brcmf_sdiod_intr_unregister(bus->sdiodev); brcmf_sdio_remove() 4297 brcmf_detach(bus->sdiodev->dev); brcmf_sdio_remove() 4304 if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) { brcmf_sdio_remove() 4305 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_remove() 4315 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_remove() 4339 if (bus->sdiodev->state != BRCMF_SDIOD_DATA) brcmf_sdio_wd_timer() 4370 sdio_claim_host(bus->sdiodev->func[1]); brcmf_sdio_sleep() 4372 sdio_release_host(bus->sdiodev->func[1]); brcmf_sdio_sleep() 690 brcmf_sdio_get_fwnames(struct brcmf_chip *ci, struct brcmf_sdio_dev *sdiodev) brcmf_sdio_get_fwnames() argument
|
H A D | sdio.h | 295 int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev); 296 int brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev); 299 u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret); 300 u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret); 301 void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, u8 data, 303 void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data, 317 int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev, 319 int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes); 321 int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt); 322 int brcmf_sdiod_recv_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes); 323 int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev, 340 int brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address, 344 int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, uint fn); 345 void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev, 348 bool brcmf_sdiod_freezing(struct brcmf_sdio_dev *sdiodev); 349 void brcmf_sdiod_try_freeze(struct brcmf_sdio_dev *sdiodev); 350 void brcmf_sdiod_freezer_count(struct brcmf_sdio_dev *sdiodev); 351 void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev); 353 static inline bool brcmf_sdiod_freezing(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezing() argument 357 static inline void brcmf_sdiod_try_freeze(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_try_freeze() argument 360 static inline void brcmf_sdiod_freezer_count(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_count() argument 363 static inline void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev) brcmf_sdiod_freezer_uncount() argument 368 struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev);
|
H A D | of.h | 17 void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev); 19 static void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev) brcmf_of_probe() argument
|