Searched refs:sdiodev (Results 1 - 5 of 5) sorted by relevance

/linux-4.4.14/drivers/net/wireless/brcm80211/brcmfmac/
H A Dbcmsdh.c78 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 Dof.c27 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 Dsdio.c434 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 Dsdio.h295 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 Dof.h17 void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev);
19 static void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev) brcmf_of_probe() argument

Completed in 141 milliseconds