Lines Matching refs:func

81 static void IRQHandler(struct sdio_func *func);
82 static void IRQHandlerF2(struct sdio_func *func);
148 int sdioh_sdmmc_card_regread(sdioh_info_t *sd, int func, uint32 regaddr, int regsize, uint32 *data);
151 sdioh_sdmmc_card_regwrite(sdioh_info_t *sd, int func, uint32 regaddr, int regsize, uint32 data);
156 void sdioh_sdmmc_card_enable_func_f3(sdioh_info_t *sd, struct sdio_func *func) in sdioh_sdmmc_card_enable_func_f3() argument
158 sd->func[3] = func; in sdioh_sdmmc_card_enable_func_f3()
159 sd_info(("%s sd->func[3] %p\n", __FUNCTION__, sd->func[3])); in sdioh_sdmmc_card_enable_func_f3()
172 uint8 func; in sdioh_sdmmc_card_enablefuncs() local
182 for (fbraddr = SDIOD_FBR_STARTADDR, func = 1; in sdioh_sdmmc_card_enablefuncs()
183 func <= sd->num_funcs; func++, fbraddr += SDIOD_FBR_SIZE) { in sdioh_sdmmc_card_enablefuncs()
184 sd->func_cis_ptr[func] = sdioh_sdmmc_get_cisaddr(sd, SDIOD_FBR_CISPTR_0 + fbraddr); in sdioh_sdmmc_card_enablefuncs()
186 __FUNCTION__, func, sd->func_cis_ptr[func])); in sdioh_sdmmc_card_enablefuncs()
193 sdio_claim_host(sd->func[1]); in sdioh_sdmmc_card_enablefuncs()
194 err_ret = sdio_enable_func(sd->func[1]); in sdioh_sdmmc_card_enablefuncs()
195 sdio_release_host(sd->func[1]); in sdioh_sdmmc_card_enablefuncs()
207 sdioh_attach(osl_t *osh, struct sdio_func *func) in sdioh_attach() argument
214 if (func == NULL) { in sdioh_attach()
234 sd->fake_func0.card = func->card; in sdioh_attach()
235 sd->func[0] = &sd->fake_func0; in sdioh_attach()
237 if (func->num == 2) in sdioh_attach()
238 sd->func[1] = gInstance->func[1]; in sdioh_attach()
240 sd->func[1] = func->card->sdio_func[0]; in sdioh_attach()
242 sd->func[2] = func->card->sdio_func[1]; in sdioh_attach()
244 sd->func[func->num] = func; in sdioh_attach()
248 sd->func[3] = NULL; in sdioh_attach()
256 if (sd->func[1] == NULL || sd->func[2] == NULL) { in sdioh_attach()
260 sdio_set_drvdata(sd->func[1], sd); in sdioh_attach()
262 sdio_claim_host(sd->func[1]); in sdioh_attach()
264 err_ret = sdio_set_block_size(sd->func[1], sd_f1_blocksize); in sdioh_attach()
265 sdio_release_host(sd->func[1]); in sdioh_attach()
271 sdio_claim_host(sd->func[2]); in sdioh_attach()
272 if ((func->device == BCM43362_CHIP_ID || func->device == BCM4330_CHIP_ID) && in sdioh_attach()
277 err_ret = sdio_set_block_size(sd->func[2], sd_f2_blocksize); in sdioh_attach()
278 sdio_release_host(sd->func[2]); in sdioh_attach()
311 if (sd->func[2]) { in sdioh_detach()
312 sdio_claim_host(sd->func[2]); in sdioh_detach()
313 sdio_disable_func(sd->func[2]); in sdioh_detach()
314 sdio_release_host(sd->func[2]); in sdioh_detach()
318 if (sd->func[1]) { in sdioh_detach()
319 sdio_claim_host(sd->func[1]); in sdioh_detach()
320 sdio_disable_func(sd->func[1]); in sdioh_detach()
321 sdio_release_host(sd->func[1]); in sdioh_detach()
324 sd->func[1] = NULL; in sdioh_detach()
325 sd->func[2] = NULL; in sdioh_detach()
343 if (sd->func[0] == NULL) { in sdioh_enable_func_intr()
348 sdio_claim_host(sd->func[0]); in sdioh_enable_func_intr()
349 reg = sdio_readb(sd->func[0], SDIOD_CCCR_INTEN, &err); in sdioh_enable_func_intr()
352 sdio_release_host(sd->func[0]); in sdioh_enable_func_intr()
361 sdio_writeb(sd->func[0], reg, SDIOD_CCCR_INTEN, &err); in sdioh_enable_func_intr()
362 sdio_release_host(sd->func[0]); in sdioh_enable_func_intr()
378 if (sd->func[0] == NULL) { in sdioh_disable_func_intr()
383 sdio_claim_host(sd->func[0]); in sdioh_disable_func_intr()
384 reg = sdio_readb(sd->func[0], SDIOD_CCCR_INTEN, &err); in sdioh_disable_func_intr()
387 sdio_release_host(sd->func[0]); in sdioh_disable_func_intr()
397 sdio_writeb(sd->func[0], reg, SDIOD_CCCR_INTEN, &err); in sdioh_disable_func_intr()
398 sdio_release_host(sd->func[0]); in sdioh_disable_func_intr()
424 if (sd->func[2]) { in sdioh_interrupt_register()
425 sdio_claim_host(sd->func[2]); in sdioh_interrupt_register()
426 sdio_claim_irq(sd->func[2], IRQHandlerF2); in sdioh_interrupt_register()
427 sdio_release_host(sd->func[2]); in sdioh_interrupt_register()
430 if (sd->func[1]) { in sdioh_interrupt_register()
431 sdio_claim_host(sd->func[1]); in sdioh_interrupt_register()
432 sdio_claim_irq(sd->func[1], IRQHandler); in sdioh_interrupt_register()
433 sdio_release_host(sd->func[1]); in sdioh_interrupt_register()
448 if (sd->func[1]) { in sdioh_interrupt_deregister()
450 sdio_claim_host(sd->func[1]); in sdioh_interrupt_deregister()
451 sdio_release_irq(sd->func[1]); in sdioh_interrupt_deregister()
452 sdio_release_host(sd->func[1]); in sdioh_interrupt_deregister()
455 if (sd->func[2]) { in sdioh_interrupt_deregister()
457 sdio_claim_host(sd->func[2]); in sdioh_interrupt_deregister()
458 sdio_release_irq(sd->func[2]); in sdioh_interrupt_deregister()
460 sdio_release_host(sd->func[2]); in sdioh_interrupt_deregister()
618 uint func = ((uint32)int_val >> 16); in sdioh_iovar_op() local
622 if (func > si->num_funcs) { in sdioh_iovar_op()
628 switch (func) { in sdioh_iovar_op()
643 si->client_block_size[func] = blksize; in sdioh_iovar_op()
646 if (si->func[func] == NULL) { in sdioh_iovar_op()
651 sdio_claim_host(si->func[func]); in sdioh_iovar_op()
652 bcmerror = sdio_set_block_size(si->func[func], blksize); in sdioh_iovar_op()
655 __FUNCTION__, func, blksize, bcmerror)); in sdioh_iovar_op()
656 sdio_release_host(si->func[func]); in sdioh_iovar_op()
799 if ((uint)sd_ptr->func > si->num_funcs) { in sdioh_iovar_op()
804 if (sdioh_cfg_read(si, sd_ptr->func, sd_ptr->offset, &data)) { in sdioh_iovar_op()
820 if ((uint)sd_ptr->func > si->num_funcs) { in sdioh_iovar_op()
825 if (sdioh_cfg_write(si, sd_ptr->func, sd_ptr->offset, &data)) { in sdioh_iovar_op()
903 sdioh_cis_read(sdioh_info_t *sd, uint func, uint8 *cisd, uint32 length) in sdioh_cis_read() argument
910 sd_trace(("%s: Func = %d\n", __FUNCTION__, func)); in sdioh_cis_read()
912 if (!sd->func_cis_ptr[func]) { in sdioh_cis_read()
914 sd_err(("%s: no func_cis_ptr[%d]\n", __FUNCTION__, func)); in sdioh_cis_read()
918 sd_err(("%s: func_cis_ptr[%d]=0x%04x\n", __FUNCTION__, func, sd->func_cis_ptr[func])); in sdioh_cis_read()
921 offset = sd->func_cis_ptr[func] + count; in sdioh_cis_read()
935 sdioh_cisaddr_read(sdioh_info_t *sd, uint func, uint8 *cisd, uint32 offset) in sdioh_cisaddr_read() argument
939 sd_trace(("%s: Func = %d\n", __FUNCTION__, func)); in sdioh_cisaddr_read()
941 if (!sd->func_cis_ptr[func]) { in sdioh_cisaddr_read()
942 sd_err(("%s: no func_cis_ptr[%d]\n", __FUNCTION__, func)); in sdioh_cisaddr_read()
946 if (sdioh_sdmmc_card_regread (sd, 0, sd->func_cis_ptr[func]+offset, 1, &foo) < 0) { in sdioh_cisaddr_read()
957 sdioh_request_byte(sdioh_info_t *sd, uint rw, uint func, uint regaddr, uint8 *byte) in sdioh_request_byte() argument
968 sd_info(("%s: rw=%d, func=%d, addr=0x%05x\n", __FUNCTION__, rw, func, regaddr)); in sdioh_request_byte()
973 if (func == 0) { in sdioh_request_byte()
980 if (sd->func[3]) { in sdioh_request_byte()
984 sdio_claim_host(sd->func[3]); in sdioh_request_byte()
987 err_ret = sdio_set_block_size(sd->func[3], in sdioh_request_byte()
996 sd->func[3])); in sdioh_request_byte()
997 err_ret = sdio_enable_func(sd->func[3]); in sdioh_request_byte()
1003 sdio_release_host(sd->func[3]); in sdioh_request_byte()
1007 sdio_claim_host(sd->func[3]); in sdioh_request_byte()
1011 sd->func[3])); in sdioh_request_byte()
1012 err_ret = sdio_disable_func(sd->func[3]); in sdioh_request_byte()
1017 sdio_release_host(sd->func[3]); in sdioh_request_byte()
1018 sd->func[3] = NULL; in sdioh_request_byte()
1024 if (sd->func[2]) { in sdioh_request_byte()
1025 sdio_claim_host(sd->func[2]); in sdioh_request_byte()
1028 err_ret = sdio_enable_func(sd->func[2]); in sdioh_request_byte()
1035 err_ret = sdio_disable_func(sd->func[2]); in sdioh_request_byte()
1041 sdio_release_host(sd->func[2]); in sdioh_request_byte()
1055 if (sd->func[func]) { in sdioh_request_byte()
1056 sdio_claim_host(sd->func[func]); in sdioh_request_byte()
1062 sdio_writeb(sd->func[func], in sdioh_request_byte()
1064 sdio_release_host(sd->func[func]); in sdioh_request_byte()
1074 if (sd->func[func]) { in sdioh_request_byte()
1075 sdio_claim_host(sd->func[func]); in sdioh_request_byte()
1081 sdio_writeb(sd->func[func], in sdioh_request_byte()
1083 sdio_release_host(sd->func[func]); in sdioh_request_byte()
1094 if (sd->func[func]) { in sdioh_request_byte()
1095 sdio_claim_host(sd->func[func]); in sdioh_request_byte()
1096 sdio_f0_writeb(sd->func[func], in sdioh_request_byte()
1098 sdio_release_host(sd->func[func]); in sdioh_request_byte()
1103 if (sd->func[func]) { in sdioh_request_byte()
1104 sdio_claim_host(sd->func[func]); in sdioh_request_byte()
1105 sdio_writeb(sd->func[func], *byte, regaddr, &err_ret); in sdioh_request_byte()
1106 sdio_release_host(sd->func[func]); in sdioh_request_byte()
1111 if (sd->func[func]) { in sdioh_request_byte()
1112 sdio_claim_host(sd->func[func]); in sdioh_request_byte()
1113 if (func == 0) { in sdioh_request_byte()
1114 *byte = sdio_f0_readb(sd->func[func], regaddr, &err_ret); in sdioh_request_byte()
1116 *byte = sdio_readb(sd->func[func], regaddr, &err_ret); in sdioh_request_byte()
1118 sdio_release_host(sd->func[func]); in sdioh_request_byte()
1132 rw ? "Write" : "Read", func, regaddr, *byte, err_ret)); in sdioh_request_byte()
1167 sdioh_request_word(sdioh_info_t *sd, uint cmd_type, uint rw, uint func, uint addr, in sdioh_request_word() argument
1180 if (func == 0) { in sdioh_request_word()
1186 __FUNCTION__, cmd_type, rw, func, addr, nbytes)); in sdioh_request_word()
1191 sdio_claim_host(sd->func[func]); in sdioh_request_word()
1195 sdio_writel(sd->func[func], *word, addr, &err_ret); in sdioh_request_word()
1197 sdio_writew(sd->func[func], (*word & 0xFFFF), addr, &err_ret); in sdioh_request_word()
1203 *word = sdio_readl(sd->func[func], addr, &err_ret); in sdioh_request_word()
1205 *word = sdio_readw(sd->func[func], addr, &err_ret) & 0xFFFF; in sdioh_request_word()
1212 sdio_release_host(sd->func[func]); in sdioh_request_word()
1218 if (sd->func[0]) { in sdioh_request_word()
1219 sdio_claim_host(sd->func[0]); in sdioh_request_word()
1225 sdio_writeb(sd->func[0], in sdioh_request_word()
1226 func, SDIOD_CCCR_IOABORT, &err_ret2); in sdioh_request_word()
1227 sdio_release_host(sd->func[0]); in sdioh_request_word()
1236 rw ? "Write" : "Read", func, addr, *word, err_ret)); in sdioh_request_word()
1253 sdioh_request_packet_chain(sdioh_info_t *sd, uint fix_inc, uint write, uint func, in sdioh_request_packet_chain() argument
1268 struct sdio_func *sdio_func = sd->func[func]; in sdioh_request_packet_chain()
1285 blk_size = sd->client_block_size[func]; in sdioh_request_packet_chain()
1362 mmc_cmd.arg |= (func & 0x7) << 28; in sdioh_request_packet_chain()
1391 sdio_claim_host(sd->func[func]); in sdioh_request_packet_chain()
1424 err_ret = sdio_memcpy_toio(sd->func[func], addr, buf, pkt_len); in sdioh_request_packet_chain()
1426 err_ret = sdio_memcpy_toio(sd->func[func], addr, buf, pkt_len); in sdioh_request_packet_chain()
1428 err_ret = sdio_readsb(sd->func[func], buf, addr, pkt_len); in sdioh_request_packet_chain()
1430 err_ret = sdio_memcpy_fromio(sd->func[func], buf, addr, pkt_len); in sdioh_request_packet_chain()
1447 sdio_release_host(sd->func[func]); in sdioh_request_packet_chain()
1468 if (write && (func == 2)) in sdioh_request_packet_chain()
1479 sdioh_buffer_tofrom_bus(sdioh_info_t *sd, uint fix_inc, uint write, uint func, in sdioh_buffer_tofrom_bus() argument
1501 sdio_claim_host(sd->func[func]); in sdioh_buffer_tofrom_bus()
1504 err_ret = sdio_memcpy_toio(sd->func[func], addr, buf, len); in sdioh_buffer_tofrom_bus()
1506 err_ret = sdio_memcpy_toio(sd->func[func], addr, buf, len); in sdioh_buffer_tofrom_bus()
1508 err_ret = sdio_readsb(sd->func[func], buf, addr, len); in sdioh_buffer_tofrom_bus()
1510 err_ret = sdio_memcpy_fromio(sd->func[func], buf, addr, len); in sdioh_buffer_tofrom_bus()
1512 sdio_release_host(sd->func[func]); in sdioh_buffer_tofrom_bus()
1546 sdioh_request_buffer(sdioh_info_t *sd, uint pio_dma, uint fix_inc, uint write, uint func, in sdioh_request_buffer() argument
1567 return sdioh_request_packet_chain(sd, fix_inc, write, func, addr, pkt); in sdioh_request_buffer()
1584 return sdioh_buffer_tofrom_bus(sd, fix_inc, write, func, addr, buffer, buf_len); in sdioh_request_buffer()
1605 status = sdioh_buffer_tofrom_bus(sd, fix_inc, write, func, addr, in sdioh_request_buffer()
1626 sdioh_abort(sdioh_info_t *sd, uint func) in sdioh_abort() argument
1629 char t_func = (char) func; in sdioh_abort()
1669 sdioh_sdmmc_card_regread(sdioh_info_t *sd, int func, uint32 regaddr, int regsize, uint32 *data) in sdioh_sdmmc_card_regread() argument
1672 if ((func == 0) || (regsize == 1)) { in sdioh_sdmmc_card_regread()
1675 sdioh_request_byte(sd, SDIOH_READ, func, regaddr, &temp); in sdioh_sdmmc_card_regread()
1681 if (sdioh_request_word(sd, 0, SDIOH_READ, func, regaddr, data, regsize)) { in sdioh_sdmmc_card_regread()
1712 static void IRQHandler(struct sdio_func *func) in IRQHandler() argument
1716 sd = sdio_get_drvdata(func); in IRQHandler()
1727 sdio_release_host(sd->func[0]); in IRQHandler()
1744 sdio_claim_host(sd->func[0]); in IRQHandler()
1749 static void IRQHandlerF2(struct sdio_func *func) in IRQHandlerF2() argument
1758 sdioh_sdmmc_card_regwrite(sdioh_info_t *sd, int func, uint32 regaddr, int regsize, uint32 data) in sdioh_sdmmc_card_regwrite() argument
1761 if ((func == 0) || (regsize == 1)) { in sdioh_sdmmc_card_regwrite()
1765 sdioh_request_byte(sd, SDIOH_READ, func, regaddr, &temp); in sdioh_sdmmc_card_regwrite()
1772 sdioh_request_word(sd, 0, SDIOH_READ, func, regaddr, &data, regsize); in sdioh_sdmmc_card_regwrite()
1785 struct mmc_card *card = sd->func[0]->card; in sdio_sw_reset()
1791 sdio_claim_host(sd->func[0]); in sdio_sw_reset()
1797 sdio_release_host(sd->func[0]); in sdio_sw_reset()
1801 sdio_claim_host(sd->func[0]); in sdio_sw_reset()
1812 sdio_release_host(sd->func[0]); in sdio_sw_reset()
1840 if (sd->func[0]) { in sdioh_start()
1863 if (sd->func[1]) { in sdioh_start()
1865 sdio_claim_host(sd->func[1]); in sdioh_start()
1868 ret = sdio_set_block_size(sd->func[1], 64); in sdioh_start()
1875 sdio_release_host(sd->func[1]); in sdioh_start()
1878 if (sd->func[2]) { in sdioh_start()
1880 sdio_claim_host(sd->func[2]); in sdioh_start()
1884 ret = sdio_set_block_size(sd->func[2], sd_f2_blocksize); in sdioh_start()
1891 sdio_release_host(sd->func[2]); in sdioh_start()
1898 sdio_claim_host(sd->func[0]); in sdioh_start()
1899 if (sd->func[2]) in sdioh_start()
1900 sdio_claim_irq(sd->func[2], IRQHandlerF2); in sdioh_start()
1901 if (sd->func[1]) in sdioh_start()
1902 sdio_claim_irq(sd->func[1], IRQHandler); in sdioh_start()
1903 sdio_release_host(sd->func[0]); in sdioh_start()
1932 if (sd->func[0]) { in sdioh_stop()
1934 sdio_claim_host(sd->func[0]); in sdioh_stop()
1935 if (sd->func[1]) in sdioh_stop()
1936 sdio_release_irq(sd->func[1]); in sdioh_stop()
1937 if (sd->func[2]) in sdioh_stop()
1938 sdio_release_irq(sd->func[2]); in sdioh_stop()
1939 sdio_release_host(sd->func[0]); in sdioh_stop()
2000 struct sdio_func *sdio_func = sd->func[0]; in sdmmc_get_clock_rate()
2012 struct sdio_func *sdio_func = sd->func[0]; in sdmmc_set_clock_rate()