Lines Matching refs:host
63 rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host, in sdio_io_send_op_cond() argument
70 RT_ASSERT(host != RT_NULL); in sdio_io_send_op_cond()
80 err = mmcsd_send_cmd(host, &cmd, 0); in sdio_io_send_op_cond()
89 if (controller_is_spi(host)) in sdio_io_send_op_cond()
112 *cmd5_resp = cmd.resp[controller_is_spi(host) ? 1 : 0]; in sdio_io_send_op_cond()
144 err = mmcsd_send_cmd(card->host, &cmd, 0); in sdio_io_rw_direct()
148 if (!controller_is_spi(card->host)) in sdio_io_rw_direct()
160 if (controller_is_spi(card->host)) in sdio_io_rw_direct()
216 mmcsd_send_request(card->host, &req); in sdio_io_rw_extended()
223 if (!controller_is_spi(card->host)) in sdio_io_rw_extended()
238 rt_uint32_t size = MIN(func->card->host->max_seg_size, in sdio_max_block_size()
239 func->card->host->max_blk_size); in sdio_max_block_size()
264 max_blks = MIN(func->card->host->max_blk_count, in sdio_io_rw_extended_block()
265 func->card->host->max_seg_size / func->cur_blk_size); in sdio_io_rw_extended_block()
748 if (!(card->host->flags & MMCSD_SUP_HIGHSPEED)) in sdio_set_highspeed()
774 if (!(card->host->flags & MMCSD_BUSWIDTH_4)) in sdio_set_bus_wide()
790 mmcsd_set_bus_width(card->host, MMCSD_BUS_WIDTH_4); in sdio_set_bus_wide()
829 static rt_int32_t sdio_init_card(struct rt_mmcsd_host *host, rt_uint32_t ocr) in sdio_init_card() argument
836 err = sdio_io_send_op_cond(host, ocr, &cmd5_resp); in sdio_init_card()
840 if (controller_is_spi(host)) in sdio_init_card()
842 err = mmcsd_spi_use_crc(host, host->spi_use_crc); in sdio_init_card()
860 card->host = host; in sdio_init_card()
861 host->card = card; in sdio_init_card()
874 if (!controller_is_spi(host)) in sdio_init_card()
876 err = mmcsd_get_card_addr(host, &card->rca); in sdio_init_card()
880 mmcsd_set_bus_mode(host, MMCSD_BUSMODE_PUSHPULL); in sdio_init_card()
883 if (!controller_is_spi(host)) in sdio_init_card()
904 mmcsd_set_clock(host, card->host->freq_max > 50000000 ? 50000000 : card->host->freq_max); in sdio_init_card()
908 mmcsd_set_clock(host, card->cis.max_tran_speed); in sdio_init_card()
933 if (host->card) in sdio_init_card()
935 for (i = 1; i < host->card->sdio_function_num + 1; i++) in sdio_init_card()
937 if (host->card->sdio_function[i]) in sdio_init_card()
939 sdio_free_cis(host->card->sdio_function[i]); in sdio_init_card()
940 rt_free(host->card->sdio_function[i]); in sdio_init_card()
941 host->card->sdio_function[i] = RT_NULL; in sdio_init_card()
946 if (host->card && host->card->sdio_function[0]) in sdio_init_card()
948 sdio_free_cis(host->card->sdio_function[0]); in sdio_init_card()
949 rt_free(host->card->sdio_function[0]); in sdio_init_card()
950 host->card->sdio_function[0] = RT_NULL; in sdio_init_card()
953 if (host->card) in sdio_init_card()
955 rt_free(host->card); in sdio_init_card()
956 host->card = RT_NULL; in sdio_init_card()
964 rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr) in init_sdio() argument
969 RT_ASSERT(host != RT_NULL); in init_sdio()
983 current_ocr = mmcsd_select_voltage(host, ocr); in init_sdio()
991 err = sdio_init_card(host, current_ocr); in init_sdio()
1009 struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)param; in sdio_irq_thread() local
1010 RT_ASSERT(host != RT_NULL); in sdio_irq_thread()
1011 card = host->card; in sdio_irq_thread()
1016 if (rt_sem_take(host->sdio_irq_sem, RT_WAITING_FOREVER) == RT_EOK) in sdio_irq_thread()
1018 mmcsd_host_lock(host); in sdio_irq_thread()
1019 pending = sdio_io_readb(host->card->sdio_function[0], in sdio_irq_thread()
1050 mmcsd_host_unlock(host); in sdio_irq_thread()
1051 if (host->flags & MMCSD_SUP_SDIO_IRQ) in sdio_irq_thread()
1052 host->ops->enable_sdio_irq(host, 1); in sdio_irq_thread()
1060 struct rt_mmcsd_host *host = card->host; in sdio_irq_thread_create() local
1063 if (!host->sdio_irq_num) in sdio_irq_thread_create()
1065 host->sdio_irq_num++; in sdio_irq_thread_create()
1066 host->sdio_irq_sem = rt_sem_create("sdio_irq", 0, RT_IPC_FLAG_FIFO); in sdio_irq_thread_create()
1067 RT_ASSERT(host->sdio_irq_sem != RT_NULL); in sdio_irq_thread_create()
1069 host->sdio_irq_thread = rt_thread_create("sdio_irq", sdio_irq_thread, host, in sdio_irq_thread_create()
1071 if (host->sdio_irq_thread != RT_NULL) in sdio_irq_thread_create()
1073 rt_thread_startup(host->sdio_irq_thread); in sdio_irq_thread_create()
1082 struct rt_mmcsd_host *host = card->host; in sdio_irq_thread_delete() local
1084 RT_ASSERT(host->sdio_irq_num > 0); in sdio_irq_thread_delete()
1086 host->sdio_irq_num--; in sdio_irq_thread_delete()
1087 if (!host->sdio_irq_num) in sdio_irq_thread_delete()
1089 if (host->flags & MMCSD_SUP_SDIO_IRQ) in sdio_irq_thread_delete()
1090 host->ops->enable_sdio_irq(host, 0); in sdio_irq_thread_delete()
1091 rt_sem_delete(host->sdio_irq_sem); in sdio_irq_thread_delete()
1092 host->sdio_irq_sem = RT_NULL; in sdio_irq_thread_delete()
1093 rt_thread_delete(host->sdio_irq_thread); in sdio_irq_thread_delete()
1094 host->sdio_irq_thread = RT_NULL; in sdio_irq_thread_delete()
1178 void sdio_irq_wakeup(struct rt_mmcsd_host *host) in sdio_irq_wakeup() argument
1180 if (host->flags & MMCSD_SUP_SDIO_IRQ) in sdio_irq_wakeup()
1181 host->ops->enable_sdio_irq(host, 0); in sdio_irq_wakeup()
1182 if (host->sdio_irq_sem) in sdio_irq_wakeup()
1183 rt_sem_release(host->sdio_irq_sem); in sdio_irq_wakeup()
1281 if (blksize > func->card->host->max_blk_size) in sdio_set_block_size()
1286 blksize = MIN(func->max_blk_size, func->card->host->max_blk_size); in sdio_set_block_size()