Lines Matching refs:func

236 rt_inline rt_uint32_t sdio_max_block_size(struct rt_sdio_function *func)  in sdio_max_block_size()  argument
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()
240 size = MIN(size, func->max_blk_size); in sdio_max_block_size()
245 rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func, in sdio_io_rw_extended_block() argument
256 RT_ASSERT(func != RT_NULL); in sdio_io_rw_extended_block()
257 RT_ASSERT(func->card != RT_NULL); in sdio_io_rw_extended_block()
262 if (func->card->cccr.multi_block && (len > sdio_max_block_size(func))) in sdio_io_rw_extended_block()
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()
268 while (left_size > func->cur_blk_size) in sdio_io_rw_extended_block()
270 blks = left_size / func->cur_blk_size; in sdio_io_rw_extended_block()
273 len = blks * func->cur_blk_size; in sdio_io_rw_extended_block()
275 ret = sdio_io_rw_extended(func->card, rw, func->num, in sdio_io_rw_extended_block()
276 addr, op_code, buf, blks, func->cur_blk_size); in sdio_io_rw_extended_block()
289 len = MIN(left_size, sdio_max_block_size(func)); in sdio_io_rw_extended_block()
291 ret = sdio_io_rw_extended(func->card, rw, func->num, in sdio_io_rw_extended_block()
305 rt_uint8_t sdio_io_readb(struct rt_sdio_function *func, in sdio_io_readb() argument
312 ret = sdio_io_rw_direct(func->card, 0, func->num, reg, &data, 0); in sdio_io_readb()
322 rt_int32_t sdio_io_writeb(struct rt_sdio_function *func, in sdio_io_writeb() argument
326 return sdio_io_rw_direct(func->card, 1, func->num, reg, &data, 0); in sdio_io_writeb()
329 rt_uint16_t sdio_io_readw(struct rt_sdio_function *func, in sdio_io_readw() argument
339 ret = sdio_io_rw_extended_block(func, 0, addr, 1, (rt_uint8_t *)&dmabuf, 2); in sdio_io_readw()
349 rt_int32_t sdio_io_writew(struct rt_sdio_function *func, in sdio_io_writew() argument
355 return sdio_io_rw_extended_block(func, 1, addr, 1, (rt_uint8_t *)&dmabuf, 2); in sdio_io_writew()
358 rt_uint32_t sdio_io_readl(struct rt_sdio_function *func, in sdio_io_readl() argument
368 ret = sdio_io_rw_extended_block(func, 0, addr, 1, (rt_uint8_t *)&dmabuf, 4); in sdio_io_readl()
378 rt_int32_t sdio_io_writel(struct rt_sdio_function *func, in sdio_io_writel() argument
384 return sdio_io_rw_extended_block(func, 1, addr, 1, (rt_uint8_t *)&dmabuf, 4); in sdio_io_writel()
387 rt_int32_t sdio_io_read_multi_fifo_b(struct rt_sdio_function *func, in sdio_io_read_multi_fifo_b() argument
392 return sdio_io_rw_extended_block(func, 0, addr, 0, buf, len); in sdio_io_read_multi_fifo_b()
395 rt_int32_t sdio_io_write_multi_fifo_b(struct rt_sdio_function *func, in sdio_io_write_multi_fifo_b() argument
400 return sdio_io_rw_extended_block(func, 1, addr, 0, buf, len); in sdio_io_write_multi_fifo_b()
403 rt_int32_t sdio_io_read_multi_incr_b(struct rt_sdio_function *func, in sdio_io_read_multi_incr_b() argument
408 return sdio_io_rw_extended_block(func, 0, addr, 1, buf, len); in sdio_io_read_multi_incr_b()
411 rt_int32_t sdio_io_write_multi_incr_b(struct rt_sdio_function *func, in sdio_io_write_multi_incr_b() argument
416 return sdio_io_rw_extended_block(func, 1, addr, 1, buf, len); in sdio_io_write_multi_incr_b()
496 static rt_int32_t cistpl_funce_func(struct rt_sdio_function *func, in cistpl_funce_func() argument
503 version = func->card->cccr.sdio_version; in cistpl_funce_func()
510 func->max_blk_size = buf[12] | (buf[13] << 8); in cistpl_funce_func()
514 func->enable_timeout_val = (buf[28] | (buf[29] << 8)) * 10; in cistpl_funce_func()
516 func->enable_timeout_val = 1000; /* 1000ms */ in cistpl_funce_func()
521 static rt_int32_t sdio_read_cis(struct rt_sdio_function *func) in sdio_read_cis() argument
529 struct rt_mmcsd_card *card = func->card; in sdio_read_cis()
537 SDIO_REG_FBR_BASE(func->num) + SDIO_REG_FBR_CIS + i, &ret); in sdio_read_cis()
543 prev = &func->tuples; in sdio_read_cis()
586 if (func->num != 0) in sdio_read_cis()
588 func->manufacturer = curr->data[0]; in sdio_read_cis()
589 func->manufacturer |= curr->data[1] << 8; in sdio_read_cis()
590 func->product = curr->data[2]; in sdio_read_cis()
591 func->product |= curr->data[3] << 8; in sdio_read_cis()
605 if (func->num != 0) in sdio_read_cis()
606 ret = cistpl_funce_func(func, curr->data, tpl_link); in sdio_read_cis()
631 func->num, tpl_code, tpl_link); in sdio_read_cis()
642 if (func->num != 0) in sdio_read_cis()
649 void sdio_free_cis(struct rt_sdio_function *func) in sdio_free_cis() argument
652 struct rt_mmcsd_card *card = func->card; in sdio_free_cis()
654 tuple = func->tuples; in sdio_free_cis()
656 while (tuple && ((tuple != card->sdio_function[0]->tuples) || (!func->num))) in sdio_free_cis()
663 func->tuples = RT_NULL; in sdio_free_cis()
666 static rt_int32_t sdio_read_fbr(struct rt_sdio_function *func) in sdio_read_fbr() argument
670 struct rt_sdio_function *func0 = func->card->sdio_function[0]; in sdio_read_fbr()
673 SDIO_REG_FBR_BASE(func->num) + SDIO_REG_FBR_STD_FUNC_IF, &ret); in sdio_read_fbr()
682 SDIO_REG_FBR_BASE(func->num) + SDIO_REG_FBR_STD_IF_EXT, &ret); in sdio_read_fbr()
687 func->func_code = data; in sdio_read_fbr()
697 struct rt_sdio_function *func; in sdio_initialize_function() local
701 func = rt_malloc(sizeof(struct rt_sdio_function)); in sdio_initialize_function()
702 if (!func) in sdio_initialize_function()
708 rt_memset(func, 0, sizeof(struct rt_sdio_function)); in sdio_initialize_function()
710 func->card = card; in sdio_initialize_function()
711 func->num = func_num; in sdio_initialize_function()
713 ret = sdio_read_fbr(func); in sdio_initialize_function()
717 ret = sdio_read_cis(func); in sdio_initialize_function()
725 if (func->product == 0) in sdio_initialize_function()
727 func->manufacturer = card->cis.manufacturer; in sdio_initialize_function()
728 func->product = card->cis.product; in sdio_initialize_function()
731 card->sdio_function[func_num] = func; in sdio_initialize_function()
736 sdio_free_cis(func); in sdio_initialize_function()
737 rt_free(func); in sdio_initialize_function()
1031 struct rt_sdio_function *func = card->sdio_function[i]; in sdio_irq_thread() local
1032 if (!func) in sdio_irq_thread()
1037 else if (func->irq_handler) in sdio_irq_thread()
1039 func->irq_handler(func); in sdio_irq_thread()
1100 rt_int32_t sdio_attach_irq(struct rt_sdio_function *func, in sdio_attach_irq() argument
1107 RT_ASSERT(func != RT_NULL); in sdio_attach_irq()
1108 RT_ASSERT(func->card != RT_NULL); in sdio_attach_irq()
1110 func0 = func->card->sdio_function[0]; in sdio_attach_irq()
1112 mmcsd_dbg("SDIO: enabling IRQ for function %d\n", func->num); in sdio_attach_irq()
1114 if (func->irq_handler) in sdio_attach_irq()
1125 reg |= 1 << func->num; in sdio_attach_irq()
1133 func->irq_handler = handler; in sdio_attach_irq()
1135 ret = sdio_irq_thread_create(func->card); in sdio_attach_irq()
1137 func->irq_handler = RT_NULL; in sdio_attach_irq()
1142 rt_int32_t sdio_detach_irq(struct rt_sdio_function *func) in sdio_detach_irq() argument
1148 RT_ASSERT(func != RT_NULL); in sdio_detach_irq()
1149 RT_ASSERT(func->card != RT_NULL); in sdio_detach_irq()
1151 func0 = func->card->sdio_function[0]; in sdio_detach_irq()
1153 mmcsd_dbg("SDIO: disabling IRQ for function %d\n", func->num); in sdio_detach_irq()
1155 if (func->irq_handler) in sdio_detach_irq()
1157 func->irq_handler = RT_NULL; in sdio_detach_irq()
1158 sdio_irq_thread_delete(func->card); in sdio_detach_irq()
1165 reg &= ~(1 << func->num); in sdio_detach_irq()
1186 rt_int32_t sdio_enable_func(struct rt_sdio_function *func) in sdio_enable_func() argument
1193 RT_ASSERT(func != RT_NULL); in sdio_enable_func()
1194 RT_ASSERT(func->card != RT_NULL); in sdio_enable_func()
1196 func0 = func->card->sdio_function[0]; in sdio_enable_func()
1198 mmcsd_dbg("SDIO: enabling function %d\n", func->num); in sdio_enable_func()
1204 reg |= 1 << func->num; in sdio_enable_func()
1210 timeout = rt_tick_get() + func->enable_timeout_val * RT_TICK_PER_SECOND / 1000; in sdio_enable_func()
1217 if (reg & (1 << func->num)) in sdio_enable_func()
1229 mmcsd_dbg("SDIO: failed to enable function %d\n", func->num); in sdio_enable_func()
1233 rt_int32_t sdio_disable_func(struct rt_sdio_function *func) in sdio_disable_func() argument
1239 RT_ASSERT(func != RT_NULL); in sdio_disable_func()
1240 RT_ASSERT(func->card != RT_NULL); in sdio_disable_func()
1242 func0 = func->card->sdio_function[0]; in sdio_disable_func()
1244 mmcsd_dbg("SDIO: disabling function %d\n", func->num); in sdio_disable_func()
1250 reg &= ~(1 << func->num); in sdio_disable_func()
1261 mmcsd_dbg("SDIO: failed to disable function %d\n", func->num); in sdio_disable_func()
1265 void sdio_set_drvdata(struct rt_sdio_function *func, void *data) in sdio_set_drvdata() argument
1267 func->priv = data; in sdio_set_drvdata()
1270 void* sdio_get_drvdata(struct rt_sdio_function *func) in sdio_get_drvdata() argument
1272 return func->priv; in sdio_get_drvdata()
1275 rt_int32_t sdio_set_block_size(struct rt_sdio_function *func, in sdio_set_block_size() argument
1279 struct rt_sdio_function *func0 = func->card->sdio_function[0]; in sdio_set_block_size()
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()
1290 ret = sdio_io_writeb(func0, SDIO_REG_FBR_BASE(func->num) + SDIO_REG_FBR_BLKSIZE, in sdio_set_block_size()
1294 ret = sdio_io_writeb(func0, SDIO_REG_FBR_BASE(func->num) + SDIO_REG_FBR_BLKSIZE + 1, in sdio_set_block_size()
1298 func->cur_blk_size = blksize; in sdio_set_block_size()