18#ifndef __VSF_TEMPLATE_SDIO_H__
19#define __VSF_TEMPLATE_SDIO_H__
39#ifndef VSF_SDIO_CFG_MULTI_CLASS
40# define VSF_SDIO_CFG_MULTI_CLASS ENABLED
50#if defined(VSF_HW_SDIO_COUNT) && !defined(VSF_HW_SDIO_MASK)
51# define VSF_HW_SDIO_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_SDIO_COUNT)
61#if defined(VSF_HW_SDIO_MASK) && !defined(VSF_HW_SDIO_COUNT)
62# define VSF_HW_SDIO_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_SDIO_MASK)
73#ifndef VSF_SDIO_CFG_PREFIX
74# if VSF_SDIO_CFG_MULTI_CLASS == ENABLED
75# define VSF_SDIO_CFG_PREFIX vsf
76# elif defined(VSF_HW_SDIO_COUNT) && (VSF_HW_SDIO_COUNT != 0)
77# define VSF_SDIO_CFG_PREFIX vsf_hw
79# define VSF_SDIO_CFG_PREFIX vsf
92#ifndef VSF_SDIO_CFG_FUNCTION_RENAME
93# define VSF_SDIO_CFG_FUNCTION_RENAME ENABLED
105#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE
106# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE DISABLED
119#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK
120# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
133#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS
134# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
149#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG
150# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG DISABLED
165#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY
166# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
179#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP
180# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP DISABLED
193#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS
194# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS DISABLED
207#ifndef VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY
208# define VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY ENABLED
214#define SD_SEND_RELATIVE_ADDR 3
215#define SD_SEND_RELATIVE_ADDR_OP (SDIO_RESP_R6)
216#define SD_SEND_IF_COND 8
217#define SD_SEND_IF_COND_OP (SDIO_RESP_R7)
218#define SD_SWITCH_VOLTAGE 11
219#define SD_SWITCH_VOLTAGE_OP (SDIO_RESP_R1 | SDIO_CMDOP_CLKHOLD)
223#define SD_SWITCH_OP (SDIO_RESP_R1)
226#define SD_ERASE_WR_BLK_START 32
227#define SD_ERASE_WR_BLK_START_OP (SDIO_RESP_R1)
228#define SD_ERASE_WR_BLK_END 33
229#define SD_ERASE_WR_BLK_END_OP (SDIO_RESP_R1)
232#define SD_APP_SET_BUS_WIDTH 6
233#define SD_APP_SET_BUS_WIDTH_OP (SDIO_RESP_R1)
234# define SD_BUS_WIDTH_1 0
235# define SD_BUS_WIDTH_4 2
236# define SD_BUS_WIDTH_8 3
237#define SD_APP_SD_STATUS 13
238#define SD_APP_SD_STATUS_OP (SDIO_RESP_R1)
239#define SD_APP_SEND_NUM_WR_BLKS 22
240#define SD_APP_SEND_NUM_WR_BLKS_OP (SDIO_RESP_R1)
241#define SD_APP_OP_COND 41
242#define SD_APP_OP_COND_OP (SDIO_RESP_R3)
243#define SD_APP_SEND_SCR 51
244#define SD_APP_SEND_SCR_OP (SDIO_RESP_R1)
247#define SD_READ_EXTR_SINGLE 48
248#define SD_READ_EXTR_SINGLE_OP (SDIO_RESP_R1)
249#define SD_WRITE_EXTR_SINGLE 49
250#define SD_WRITE_EXTR_SINGLE_OP (SDIO_RESP_R1)
253#define SD_OCR_VDD_165_195 0x00000080
254#define SD_OCR_VDD_20_21 0x00000100
255#define SD_OCR_VDD_21_22 0x00000200
256#define SD_OCR_VDD_22_23 0x00000400
257#define SD_OCR_VDD_23_24 0x00000800
258#define SD_OCR_VDD_24_25 0x00001000
259#define SD_OCR_VDD_25_26 0x00002000
260#define SD_OCR_VDD_26_27 0x00004000
261#define SD_OCR_VDD_27_28 0x00008000
262#define SD_OCR_VDD_28_29 0x00010000
263#define SD_OCR_VDD_29_30 0x00020000
264#define SD_OCR_VDD_30_31 0x00040000
265#define SD_OCR_VDD_31_32 0x00080000
266#define SD_OCR_VDD_32_33 0x00100000
267#define SD_OCR_VDD_33_34 0x00200000
268#define SD_OCR_VDD_34_35 0x00400000
269#define SD_OCR_VDD_35_36 0x00800000
270#define SD_OCR_VDD_HIGH 0x00FF8000
271#define SD_OCR_VDD_LOW 0x00007F80
272#define SD_OCR_VDD (SD_OCR_VDD_HIGH | SD_OCR_VDD_LOW)
273#define SD_OCR_S18R (1 << 24)
274#define SD_ROCR_S18A SD_OCR_S18R
275#define SD_OCR_XPC (1 << 28)
276#define SD_OCR_CCS (1 << 30)
280#define MMC_GO_IDLE_STATE 0
281#define MMC_GO_IDLE_STATE_OP (SDIO_RESP_NONE)
282#define MMC_SEND_OP_COND 1
283#define MMC_SEND_OP_COND_OP (SDIO_RESP_R3)
284#define MMC_ALL_SEND_CID 2
285#define MMC_ALL_SEND_CID_OP (SDIO_RESP_R2)
286#define MMC_SET_RELATIVE_ADDR 3
287#define MMC_SET_RELATIVE_ADDR_OP (SDIO_RESP_R1)
289#define MMC_SET_DSR_OP (SDIO_RESP_NONE)
290#define MMC_SLEEP_AWAKE 5
291#define MMC_SLEEP_AWAKE_OP (SDIO_RESP_R1B)
293#define MMC_SWITCH_OP (SDIO_RESP_R1B)
294#define MMC_SELECT_CARD 7
295#define MMC_SELECT_CARD_OP (SDIO_RESP_R1)
296#define MMC_SEND_EXT_CSD 8
297#define MMC_SEND_EXT_CSD_OP (SDIO_RESP_R1)
298#define MMC_SEND_CSD 9
299#define MMC_SEND_CSD_OP (SDIO_RESP_R2)
300#define MMC_SEND_CID 10
301#define MMC_SEND_CID_OP (SDIO_RESP_R2)
302#define MMC_READ_DAT_UNTIL_STOP 11
303#define MMC_READ_DAT_UNTIL_STOP_OP (SDIO_RESP_R1)
304#define MMC_STOP_TRANSMISSION 12
305#define MMC_STOP_TRANSMISSION_OP (SDIO_RESP_R1B | SDIO_CMDOP_TRANS_STOP)
306#define MMC_SEND_STATUS 13
307#define MMC_SEND_STATUS_OP (SDIO_RESP_R1)
308#define MMC_BUS_TEST_R 14
309#define MMC_BUS_TEST_R_OP (SDIO_RESP_R1)
310#define MMC_GO_INACTIVE_STATE 15
311#define MMC_BUS_TEST_W 19
312#define MMC_BUS_TEST_W_OP (SDIO_RESP_R1)
313#define MMC_SPI_READ_OCR 58
314#define MMC_SPI_READ_OCR_OP (SDIO_RESP_SPI_R3)
315#define MMC_SPI_CRC_ON_OFF 59
316#define MMC_SPI_CRC_ON_OFF_OP (SDIO_RESP_SPI_R1)
319#define MMC_SET_BLOCKLEN 16
320#define MMC_SET_BLOCKLEN_OP (SDIO_RESP_R1)
321#define MMC_READ_SINGLE_BLOCK 17
322#define MMC_READ_SINGLE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_READ)
323#define MMC_READ_MULTIPLE_BLOCK 18
324#define MMC_READ_MULTIPLE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_READ)
325#define MMC_SEND_TUNING_BLOCK 19
326#define MMC_SEND_TUNING_BLOCK_OP (SDIO_RESP_R1)
327#define MMC_SEND_TUNING_BLOCK_HS200 21
328#define MMC_SEND_TUNING_BLOCK_HS200_OP (SDIO_RESP_R1)
331#define MMC_WRITE_DAT_UNTIL_STOP 20
332#define MMC_WRITE_DAT_UNTIL_STOP_OP (SDIO_RESP_R1)
335#define MMC_SET_BLOCK_COUNT 23
336#define MMC_SET_BLOCK_COUNT_OP (SDIO_RESP_R1)
337#define MMC_WRITE_BLOCK 24
338#define MMC_WRITE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_WRITE)
339#define MMC_WRITE_MULTIPLE_BLOCK 25
340#define MMC_WRITE_MULTIPLE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_WRITE)
341#define MMC_PROGRAM_CID 26
342#define MMC_PROGRAM_CID_OP (SDIO_RESP_R1)
343#define MMC_PROGRAM_CSD 27
344#define MMC_PROGRAM_CSD_OP (SDIO_RESP_R1)
347#define MMC_SET_WRITE_PROT 28
348#define MMC_SET_WRITE_PROT_OP (SDIO_RESP_R1B)
349#define MMC_CLR_WRITE_PROT 29
350#define MMC_CLR_WRITE_PROT_OP (SDIO_RESP_R1B)
351#define MMC_SEND_WRITE_PROT 30
352#define MMC_SEND_WRITE_PROT_OP (SDIO_RESP_R1)
355#define MMC_ERASE_GROUP_START 35
356#define MMC_ERASE_GROUP_START_OP (SDIO_RESP_R1)
357#define MMC_ERASE_GROUP_END 36
358#define MMC_ERASE_GROUP_END_OP (SDIO_RESP_R1)
360#define MMC_ERASE_OP (SDIO_RESP_R1B)
363#define MMC_FAST_IO 39
364#define MMC_FAST_IO_OP (SDIO_RESP_R4)
365#define MMC_GO_IRQ_STATE 40
366#define MMC_GO_IRQ_STATE_OP (SDIO_RESP_R5)
369#define MMC_LOCK_UNLOCK 42
370#define MMC_LOCK_UNLOCK_OP (SDIO_RESP_R1B)
373#define MMC_APP_CMD 55
374#define MMC_APP_CMD_OP (SDIO_RESP_R1)
375#define MMC_GEN_CMD 56
376#define MMC_GEN_CMD_OP (SDIO_RESP_R1)
379#define MMC_QUE_TASK_PARAMS 44
380#define MMC_QUE_TASK_PARAMS_OP (SDIO_RESP_R1)
381#define MMC_QUE_TASK_ADDR 45
382#define MMC_QUE_TASK_ADDR_OP (SDIO_RESP_R1)
383#define MMC_EXECUTE_READ_TASK 46
384#define MMC_EXECUTE_READ_TASK_OP (SDIO_RESP_R1)
385#define MMC_EXECUTE_WRITE_TASK 47
386#define MMC_EXECUTE_WRITE_TASK_OP (SDIO_RESP_R1)
387#define MMC_CMDQ_TASK_MGMT 48
388#define MMC_CMDQ_TASK_MGMT_OP (SDIO_RESP_R1B)
391#define SD_VERSION_SD (1U << 31)
392#define MMC_VERSION_MMC (1U << 30)
394#define MAKE_SDMMC_VERSION(a, b, c) \
395 ((((uint32_t)(a)) << 16) | ((uint32_t)(b) << 8) | (uint32_t)(c))
396#define MAKE_SD_VERSION(a, b, c) \
397 (SD_VERSION_SD | MAKE_SDMMC_VERSION(a, b, c))
398#define MAKE_MMC_VERSION(a, b, c) \
399 (MMC_VERSION_MMC | MAKE_SDMMC_VERSION(a, b, c))
401#define EXTRACT_SDMMC_MAJOR_VERSION(x) \
402 (((uint32_t)(x) >> 16) & 0xff)
403#define EXTRACT_SDMMC_MINOR_VERSION(x) \
404 (((uint32_t)(x) >> 8) & 0xff)
405#define EXTRACT_SDMMC_CHANGE_VERSION(x) \
406 ((uint32_t)(x) & 0xff)
408#define SD_VERSION_3 MAKE_SD_VERSION(3, 0, 0)
409#define SD_VERSION_2 MAKE_SD_VERSION(2, 0, 0)
410#define SD_VERSION_1_0 MAKE_SD_VERSION(1, 0, 0)
411#define SD_VERSION_1_10 MAKE_SD_VERSION(1, 10, 0)
413#define MMC_VERSION_UNKNOWN MAKE_MMC_VERSION(0, 0, 0)
414#define MMC_VERSION_1_2 MAKE_MMC_VERSION(1, 2, 0)
415#define MMC_VERSION_1_4 MAKE_MMC_VERSION(1, 4, 0)
416#define MMC_VERSION_2_2 MAKE_MMC_VERSION(2, 2, 0)
417#define MMC_VERSION_3 MAKE_MMC_VERSION(3, 0, 0)
418#define MMC_VERSION_4 MAKE_MMC_VERSION(4, 0, 0)
419#define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0)
420#define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0)
421#define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0)
422#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0)
423#define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1)
424#define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0)
425#define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
426#define MMC_VERSION_5_1 MAKE_MMC_VERSION(5, 1, 0)
428#define IS_SD(x) ((x) & SD_VERSION_SD)
429#define IS_MMC(x) ((x) & MMC_VERSION_MMC)
432#define R1_OUT_OF_RANGE (1 << 31)
433#define R1_ADDRESS_ERROR (1 << 30)
434#define R1_BLOCK_LEN_ERROR (1 << 29)
435#define R1_ERASE_SEQ_ERROR (1 << 28)
436#define R1_ERASE_PARAM (1 << 27)
437#define R1_WP_VIOLATION (1 << 26)
438#define R1_CARD_IS_LOCKED (1 << 25)
439#define R1_LOCK_UNLOCK_FAILED (1 << 24)
440#define R1_COM_CRC_ERROR (1 << 23)
441#define R1_ILLEGAL_COMMAND (1 << 22)
442#define R1_CARD_ECC_FAILED (1 << 21)
443#define R1_CC_ERROR (1 << 20)
444#define R1_ERROR (1 << 19)
445#define R1_UNDERRUN (1 << 18)
446#define R1_OVERRUN (1 << 17)
447#define R1_CID_CSD_OVERWRITE (1 << 16)
448#define R1_WP_ERASE_SKIP (1 << 15)
449#define R1_CARD_ECC_DISABLED (1 << 14)
450#define R1_ERASE_RESET (1 << 13)
451#define R1_STATUS(x) (x & 0xFFF9A000)
452#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9)
453#define R1_READY_FOR_DATA (1 << 8)
454#define R1_SWITCH_ERROR (1 << 7)
455#define R1_EXCEPTION_EVENT (1 << 6)
456#define R1_APP_CMD (1 << 5)
458#define R1_STATE_IDLE 0
459#define R1_STATE_READY 1
460#define R1_STATE_IDENT 2
461#define R1_STATE_STBY 3
462#define R1_STATE_TRAN 4
463#define R1_STATE_DATA 5
464#define R1_STATE_RCV 6
465#define R1_STATE_PRG 7
466#define R1_STATE_DIS 8
467#define R1_STATE_MASK 0x0FUL
469#define R1_CUR_STATE(__S) ((__S) << 9)
482#define VSF_SDIO_APIS(__prefix_name) \
483 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, init, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
484 __VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, fini, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
485 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, get_configuration, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
486 __VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, irq_enable, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
487 __VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, irq_disable, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
488 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_status_t, sdio, status, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
489 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_capability_t, sdio, capability, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
490 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, set_clock, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, uint32_t clock_hz, bool is_ddr) \
491 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, set_bus_width, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, uint8_t bus_width) \
492 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, host_request, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_req_t *req)
672#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
689#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP == DISABLED
708#define SDIO_RESP_R1B (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC | SDIO_CMDOP_RESP_BUSY)
709#define SDIO_RESP_R2 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_LONG_CRC)
710#define SDIO_RESP_R3 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)
711#define SDIO_RESP_R4 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)
712#define SDIO_RESP_R5 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
713#define SDIO_RESP_R6 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
714#define SDIO_RESP_R7 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
734#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
746#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS == DISABLED
760#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
770#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
772#if VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY == ENABLED
776 SDIO_CAP_BUS_WIDTH_1 = (0x1ul << 0),
777 SDIO_CAP_BUS_WIDTH_4 = (0x1ul << 1),
778 SDIO_CAP_BUS_WIDTH_8 = (0x1ul << 2),
788#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
864#undef __VSF_HAL_TEMPLATE_API
865#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
871#if VSF_SDIO_CFG_MULTI_CLASS == ENABLED
1060#if VSF_SDIO_CFG_FUNCTION_RENAME == ENABLED
1061# define __vsf_sdio_t VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_t)
1062# define vsf_sdio_init(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_init) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1063# define vsf_sdio_get_configuration(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_get_configuration) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1064# define vsf_sdio_enable(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_enable) ((__vsf_sdio_t *)(__SDIO))
1065# define vsf_sdio_disable(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_disable) ((__vsf_sdio_t *)(__SDIO))
1066# define vsf_sdio_irq_enable(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_enable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1067# define vsf_sdio_irq_disable(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_disable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1068# define vsf_sdio_status(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_status) ((__vsf_sdio_t *)(__SDIO))
1069# define vsf_sdio_capability(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_capability) ((__vsf_sdio_t *)(__SDIO))
1070# define vsf_sdio_set_clock(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_clock) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1071# define vsf_sdio_set_bus_width(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_bus_width) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1072# define vsf_sdio_host_request(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_host_request) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
vsf_err_t
Definition __type.h:42
vsf_sdio_reqop_t
Definition sdio.h:38
vsf_sdio_irq_mask_t
Definition sdio.h:78
vsf_sdio_reqsts_t
Definition sdio.h:85
vsf_arch_prio_t
Definition cortex_a_generic.h:88
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned long long uint64_t
Definition stdint.h:11
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
Definition vsf_template_sdio.h:771
bus_width
Definition vsf_template_sdio.h:779
bool support_ddr
Definition vsf_template_sdio.h:784
uint16_t data_size_alignment
Definition vsf_template_sdio.h:783
uint32_t max_freq_hz
Definition vsf_template_sdio.h:780
uint16_t data_ptr_alignment
Definition vsf_template_sdio.h:782
inherit(vsf_peripheral_capability_t) enum
Definition vsf_template_sdio.h:773
sdio configuration
Definition vsf_template_sdio.h:854
vsf_sdio_isr_t isr
Definition vsf_template_sdio.h:857
vsf_sdio_mode_t mode
Definition vsf_template_sdio.h:855
Definition vsf_template_sdio.h:659
uint64_t MDT
Definition vsf_template_sdio.h:663
uint64_t PRV
Definition vsf_template_sdio.h:666
uint64_t PNM
Definition vsf_template_sdio.h:667
uint64_t MID
Definition vsf_template_sdio.h:669
uint64_t PSN
Definition vsf_template_sdio.h:665
uint64_t OID
Definition vsf_template_sdio.h:668
uint64_t CRC
Definition vsf_template_sdio.h:662
sdio interrupt configuration
Definition vsf_template_sdio.h:838
vsf_sdio_isr_handler_t * handler_fn
Definition vsf_template_sdio.h:839
void * target_ptr
Definition vsf_template_sdio.h:841
vsf_arch_prio_t prio
Definition vsf_template_sdio.h:843
Definition vsf_template_sdio.h:862
Definition vsf_template_sdio.h:723
uint8_t cmd
Definition vsf_template_sdio.h:724
vsf_sdio_reqop_t op
Definition vsf_template_sdio.h:726
uint32_t arg
Definition vsf_template_sdio.h:725
uint8_t block_size_bits
Definition vsf_template_sdio.h:729
uint8_t * buffer
Definition vsf_template_sdio.h:730
uint32_t count
Definition vsf_template_sdio.h:731
Definition vsf_template_sdio.h:761
vsf_sdio_irq_mask_t irq_status
Definition vsf_template_sdio.h:765
Definition vsf_template_sdio.h:872
const vsf_sdio_op_t * op
Definition vsf_template_sdio.h:873
void vsf_sdio_isr_handler_t(void *target_ptr, vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask, vsf_sdio_reqsts_t status, uint32_t resp[4])
Definition sdio.h:191
vsf_sdio_irq_mask_t
Definition sdio.h:152
vsf_sdio_mode_t
Definition sdio.h:117
vsf_sdio_reqsts_t
Definition sdio.h:164
Definition vsf_template_sdio.h:496
uint32_t WRITE_BL_LEN
Definition vsf_template_sdio.h:516
uint32_t TAAC
Definition vsf_template_sdio.h:544
uint32_t CONTENT_PROT_APP
Definition vsf_template_sdio.h:615
uint32_t READ_BL_PARTIAL
Definition vsf_template_sdio.h:539
uint32_t WP_GRP_SIZE
Definition vsf_template_sdio.h:523
uint32_t ERASE_GRP_SIZE
Definition vsf_template_sdio.h:630
uint32_t READ_BLK_MISALIGN
Definition vsf_template_sdio.h:537
uint32_t ECC
Definition vsf_template_sdio.h:606
uint32_t ERASE_GRP_MULT
Definition vsf_template_sdio.h:629
uint32_t SECTOR_SIZE
Definition vsf_template_sdio.h:524
uint32_t R2W_FACTOR
Definition vsf_template_sdio.h:517
uint32_t ALWAY1
Definition vsf_template_sdio.h:500
uint32_t WP_GRP_ENABLE
Definition vsf_template_sdio.h:522
struct vsf_sdio_csd_t::@614 sd_v2
uint32_t NSAC
Definition vsf_template_sdio.h:543
uint32_t ERASE_BLK_EN
Definition vsf_template_sdio.h:525
uint32_t FILE_FORMAT
Definition vsf_template_sdio.h:506
uint32_t READ_BL_LEN
Definition vsf_template_sdio.h:540
uint32_t COPY
Definition vsf_template_sdio.h:509
struct vsf_sdio_csd_t::@615 mmc
uint32_t CCC
Definition vsf_template_sdio.h:541
uint32_t VDD_R_CURR_MAX
Definition vsf_template_sdio.h:531
struct vsf_sdio_csd_t::@613 sd_v1
uint32_t WRITE_BL_PARTIAL
Definition vsf_template_sdio.h:515
uint32_t CSD_STRUCTURE
Definition vsf_template_sdio.h:549
uint32_t FILE_FORMAT_GRP
Definition vsf_template_sdio.h:510
uint32_t VDD_W_CURR_MIN
Definition vsf_template_sdio.h:530
uint32_t DSR_IMP
Definition vsf_template_sdio.h:536
uint32_t VDD_R_CURR_MIN
Definition vsf_template_sdio.h:532
uint32_t SPEC_VERS
Definition vsf_template_sdio.h:653
uint32_t CRC
Definition vsf_template_sdio.h:501
uint32_t TRANS_SPEED
Definition vsf_template_sdio.h:542
uint32_t DEFAULT_ECC
Definition vsf_template_sdio.h:623
uint32_t C_SIZE
Definition vsf_template_sdio.h:533
uint32_t C_SIZE_MULT
Definition vsf_template_sdio.h:528
uint32_t TMP_WRITE_PROTECT
Definition vsf_template_sdio.h:507
uint32_t PERM_WRITE_PROTECT
Definition vsf_template_sdio.h:508
uint32_t WRITE_BLK_MISALIGN
Definition vsf_template_sdio.h:538
uint32_t VDD_W_CURR_MAX
Definition vsf_template_sdio.h:529
struct vk_romfs_header_t VSF_CAL_PACKED
vsf_sdio_reqop_t
flags of sdio request operations
Definition vsf_template_sdio.h:690
@ SDIO_CMDOP_READ
Definition vsf_template_sdio.h:697
@ SDIO_CMDOP_RESP_BUSY
Definition vsf_template_sdio.h:699
@ SDIO_CMDOP_SINGLE_BLOCK
Definition vsf_template_sdio.h:693
@ __SDIO_CMDOP_RESP
Definition vsf_template_sdio.h:701
@ SDIO_CMDOP_BYTE
Definition vsf_template_sdio.h:691
@ SDIO_CMDOP_STREAM
Definition vsf_template_sdio.h:692
@ SDIO_CMDOP_TRANS_STOP
Definition vsf_template_sdio.h:719
@ __SDIO_CMDOP_RESP_LONG_CRC
Definition vsf_template_sdio.h:704
@ SDIO_CMDOP_WRITE
Definition vsf_template_sdio.h:696
@ __SDIO_CMDOP_RESP_SHORT
Definition vsf_template_sdio.h:702
@ SDIO_CMDOP_CLKHOLD
Definition vsf_template_sdio.h:717
@ SDIO_CMDOP_MULTI_BLOCK
Definition vsf_template_sdio.h:694
@ __SDIO_CMDOP_RESP_SHORT_CRC
Definition vsf_template_sdio.h:703
void vsf_sdio_isr_handler_t(void *target_ptr, vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask, vsf_sdio_reqsts_t status, uint32_t resp[4])
sdio interrupt callback function prototype.
Definition vsf_template_sdio.h:825
#define VSF_SDIO_APIS(__prefix_name)
SDIO API template, used to generate SDIO type, specific prefix function declarations,...
Definition vsf_template_sdio.h:482
vsf_sdio_irq_mask_t
Definition vsf_template_sdio.h:735
@ SDIO_IRQ_MASK_HOST_DATA_DONE
Definition vsf_template_sdio.h:738
@ SDIO_IRQ_MASK_HOST_RESP_DONE
Definition vsf_template_sdio.h:737
@ SDIO_IRQ_MASK_HOST_ALL
Definition vsf_template_sdio.h:740
@ SDIO_IRQ_MASK_HOST_DATA_ABORT
Definition vsf_template_sdio.h:739
struct vsf_sdio_capability_t vsf_sdio_capability_t
vsf_err_t vsf_sdio_host_request(vsf_sdio_t *sdio_ptr, vsf_sdio_req_t *req)
Start a new request for sdio instance.
Definition sdio_common.c:108
vsf_err_t vsf_sdio_set_bus_width(vsf_sdio_t *sdio_ptr, uint8_t bus_width)
Set the bus width of sdio instance.
Definition sdio_common.c:99
void vsf_sdio_irq_enable(vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
Enable interrupt masks of sdio instance.
Definition sdio_common.c:54
vsf_sdio_capability_t vsf_sdio_capability(vsf_sdio_t *sdio_ptr)
Get the capability of sdio instance.
Definition sdio_common.c:81
vsf_sdio_mode_t
Definition vsf_template_sdio.h:673
@ SDIO_MODE_MASK
Definition vsf_template_sdio.h:676
@ SDIO_MODE_SLAVE
Definition vsf_template_sdio.h:675
@ SDIO_MODE_HOST
Definition vsf_template_sdio.h:674
#define SDIO_RESP_NONE
Definition vsf_template_sdio.h:706
void vsf_sdio_fini(vsf_sdio_t *sdio_ptr)
Finalize a sdio instance.
Definition sdio_common.c:45
vsf_err_t vsf_sdio_set_clock(vsf_sdio_t *sdio_ptr, uint32_t clock_hz, bool is_ddr)
Set the clock of sdio instance.
Definition sdio_common.c:90
struct vsf_sdio_isr_t vsf_sdio_isr_t
sdio interrupt configuration
struct vsf_sdio_status_t vsf_sdio_status_t
vsf_err_t vsf_sdio_single_voltage(vsf_sdio_t *sdio_ptr, uint8_t bus_width)
Set the single voltage mode of sdio instance.
vsf_err_t vsf_sdio_get_configuration(vsf_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr)
Get the current configuration of an SDIO instance.
Definition sdio_common.c:117
vsf_err_t vsf_sdio_init(vsf_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr)
Initialize a sdio instance.
Definition sdio_common.c:36
void vsf_sdio_irq_disable(vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
Disable interrupt masks of sdio instance.
Definition sdio_common.c:63
vsf_sdio_status_t vsf_sdio_status(vsf_sdio_t *sdio_ptr)
Get the status of sdio instance.
Definition sdio_common.c:72
#define SDIO_RESP_R1
Definition vsf_template_sdio.h:707
struct vsf_sdio_cfg_t vsf_sdio_cfg_t
sdio configuration
vsf_sdio_reqsts_t
Definition vsf_template_sdio.h:747
@ SDIO_REQSTS_ERR_MASK
Definition vsf_template_sdio.h:754
@ SDIO_REQSTS_BUSY
Definition vsf_template_sdio.h:753
@ SDIO_REQSTS_DATA_BUSY
Definition vsf_template_sdio.h:752
@ SDIO_REQSTS_DONE
Definition vsf_template_sdio.h:748
@ SDIO_REQSTS_ERR_RESP_CRC
Definition vsf_template_sdio.h:750
@ SDIO_REQSTS_ERR_RESP_NONE
Definition vsf_template_sdio.h:749
@ SDIO_REQSTS_ERR_DATA_CRC
Definition vsf_template_sdio.h:751
uint8_t status
Definition vsf_tgui.h:144