MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / sdio_read_cis

Function sdio_read_cis

components/drivers/sdio/dev_sdio.c:521–646  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

519}
520
521static rt_int32_t sdio_read_cis(struct rt_sdio_function *func)
522{
523 rt_int32_t ret;
524 struct rt_sdio_function_tuple *curr, **prev;
525 rt_uint32_t i, cisptr = 0;
526 rt_uint8_t data;
527 rt_uint8_t tpl_code, tpl_link;
528
529 struct rt_mmcsd_card *card = func->card;
530 struct rt_sdio_function *func0 = card->sdio_function[0];
531
532 RT_ASSERT(func0 != RT_NULL);
533
534 for (i = 0; i < 3; i++)
535 {
536 data = sdio_io_readb(func0,
537 SDIO_REG_FBR_BASE(func->num) + SDIO_REG_FBR_CIS + i, &ret);
538 if (ret)
539 return ret;
540 cisptr |= data << (i * 8);
541 }
542
543 prev = &func->tuples;
544
545 do {
546 tpl_code = sdio_io_readb(func0, cisptr++, &ret);
547 if (ret)
548 break;
549 tpl_link = sdio_io_readb(func0, cisptr++, &ret);
550 if (ret)
551 break;
552
553 if ((tpl_code == CISTPL_END) || (tpl_link == 0xff))
554 break;
555
556 if (tpl_code == CISTPL_NULL)
557 continue;
558
559
560 curr = rt_malloc(sizeof(struct rt_sdio_function_tuple) + tpl_link);
561 if (!curr)
562 return -RT_ENOMEM;
563 curr->data = (rt_uint8_t *)curr + sizeof(struct rt_sdio_function_tuple);
564
565 for (i = 0; i < tpl_link; i++)
566 {
567 curr->data[i] = sdio_io_readb(func0, cisptr + i, &ret);
568 if (ret)
569 break;
570 }
571 if (ret)
572 {
573 rt_free(curr);
574 break;
575 }
576
577 switch (tpl_code)
578 {

Callers 2

sdio_initialize_functionFunction · 0.70
sdio_init_cardFunction · 0.70

Calls 5

sdio_io_readbFunction · 0.85
rt_mallocFunction · 0.85
rt_freeFunction · 0.85
cistpl_funce_func0Function · 0.85
cistpl_funce_funcFunction · 0.70

Tested by

no test coverage detected