VSF Documented
vsf_template_sdio.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_TEMPLATE_SDIO_H__
19#define __VSF_TEMPLATE_SDIO_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31
39#ifndef VSF_SDIO_CFG_MULTI_CLASS
40# define VSF_SDIO_CFG_MULTI_CLASS ENABLED
41#endif
42
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)
52#endif
53
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)
63#endif
64
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
78# else
79# define VSF_SDIO_CFG_PREFIX vsf
80# endif
81#endif
82
92#ifndef VSF_SDIO_CFG_FUNCTION_RENAME
93# define VSF_SDIO_CFG_FUNCTION_RENAME ENABLED
94#endif
95
105#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE
106# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE DISABLED
107#endif
108
119#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK
120# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
121#endif
122
133#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS
134# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
135#endif
136
149#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG
150# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG DISABLED
151#endif
152
165#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY
166# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
167#endif
168
179#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP
180# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP DISABLED
181#endif
182
193#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS
194# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS DISABLED
195#endif
196
207#ifndef VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY
208# define VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY ENABLED
209#endif
210
221#ifndef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL
222# define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL DISABLED
223#endif
224
225/* SD commands type argument response */
226 /* class 0 */
227/* This is basically the same command as for MMC with some quirks. */
228#define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */
229#define SD_SEND_RELATIVE_ADDR_OP (SDIO_RESP_R6)
230#define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */
231#define SD_SEND_IF_COND_OP (SDIO_RESP_R7)
232#define SD_SWITCH_VOLTAGE 11 /* ac R1 */
233#define SD_SWITCH_VOLTAGE_OP (SDIO_RESP_R1 | SDIO_CMDOP_CLKHOLD)
234
235 /* class 10 */
236#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
237#define SD_SWITCH_OP (SDIO_RESP_R1)
238
239 /* class 5 */
240#define SD_ERASE_WR_BLK_START 32 /* ac [31:0] data addr R1 */
241#define SD_ERASE_WR_BLK_START_OP (SDIO_RESP_R1)
242#define SD_ERASE_WR_BLK_END 33 /* ac [31:0] data addr R1 */
243#define SD_ERASE_WR_BLK_END_OP (SDIO_RESP_R1)
244
245 /* Application commands */
246#define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */
247#define SD_APP_SET_BUS_WIDTH_OP (SDIO_RESP_R1)
248# define SD_BUS_WIDTH_1 0
249# define SD_BUS_WIDTH_4 2
250# define SD_BUS_WIDTH_8 3
251#define SD_APP_SD_STATUS 13 /* adtc R1 */
252#define SD_APP_SD_STATUS_OP (SDIO_RESP_R1)
253#define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */
254#define SD_APP_SEND_NUM_WR_BLKS_OP (SDIO_RESP_R1)
255#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
256#define SD_APP_OP_COND_OP (SDIO_RESP_R3)
257#define SD_APP_SEND_SCR 51 /* adtc R1 */
258#define SD_APP_SEND_SCR_OP (SDIO_RESP_R1)
259
260 /* class 11 */
261#define SD_READ_EXTR_SINGLE 48 /* adtc [31:0] R1 */
262#define SD_READ_EXTR_SINGLE_OP (SDIO_RESP_R1)
263#define SD_WRITE_EXTR_SINGLE 49 /* adtc [31:0] R1 */
264#define SD_WRITE_EXTR_SINGLE_OP (SDIO_RESP_R1)
265
266/* OCR bit definitions */
267#define SD_OCR_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */
268#define SD_OCR_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */
269#define SD_OCR_VDD_21_22 0x00000200 /* VDD voltage 2.1 ~ 2.2 */
270#define SD_OCR_VDD_22_23 0x00000400 /* VDD voltage 2.2 ~ 2.3 */
271#define SD_OCR_VDD_23_24 0x00000800 /* VDD voltage 2.3 ~ 2.4 */
272#define SD_OCR_VDD_24_25 0x00001000 /* VDD voltage 2.4 ~ 2.5 */
273#define SD_OCR_VDD_25_26 0x00002000 /* VDD voltage 2.5 ~ 2.6 */
274#define SD_OCR_VDD_26_27 0x00004000 /* VDD voltage 2.6 ~ 2.7 */
275#define SD_OCR_VDD_27_28 0x00008000 /* VDD voltage 2.7 ~ 2.8 */
276#define SD_OCR_VDD_28_29 0x00010000 /* VDD voltage 2.8 ~ 2.9 */
277#define SD_OCR_VDD_29_30 0x00020000 /* VDD voltage 2.9 ~ 3.0 */
278#define SD_OCR_VDD_30_31 0x00040000 /* VDD voltage 3.0 ~ 3.1 */
279#define SD_OCR_VDD_31_32 0x00080000 /* VDD voltage 3.1 ~ 3.2 */
280#define SD_OCR_VDD_32_33 0x00100000 /* VDD voltage 3.2 ~ 3.3 */
281#define SD_OCR_VDD_33_34 0x00200000 /* VDD voltage 3.3 ~ 3.4 */
282#define SD_OCR_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */
283#define SD_OCR_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */
284#define SD_OCR_VDD_HIGH 0x00FF8000 /* VDD voltage 2.7 ~ 3.6 */
285#define SD_OCR_VDD_LOW 0x00007F80 /* VDD voltage 1.65 ~ 2.7 */
286#define SD_OCR_VDD (SD_OCR_VDD_HIGH | SD_OCR_VDD_LOW)
287#define SD_OCR_S18R (1 << 24) /* 1.8V switching request */
288#define SD_ROCR_S18A SD_OCR_S18R /* 1.8V switching accepted by card */
289#define SD_OCR_XPC (1 << 28) /* SDXC power control */
290#define SD_OCR_CCS (1 << 30) /* Card Capacity Status */
291
292/* Standard MMC commands (4.1) type argument response */
293 /* class 1 */
294#define MMC_GO_IDLE_STATE 0 /* bc */
295#define MMC_GO_IDLE_STATE_OP (SDIO_RESP_NONE)
296#define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */
297#define MMC_SEND_OP_COND_OP (SDIO_RESP_R3)
298#define MMC_ALL_SEND_CID 2 /* bcr R2 */
299#define MMC_ALL_SEND_CID_OP (SDIO_RESP_R2)
300#define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */
301#define MMC_SET_RELATIVE_ADDR_OP (SDIO_RESP_R1)
302#define MMC_SET_DSR 4 /* bc [31:16] RCA */
303#define MMC_SET_DSR_OP (SDIO_RESP_NONE)
304#define MMC_SLEEP_AWAKE 5 /* ac [31:16] RCA 15:flg R1b */
305#define MMC_SLEEP_AWAKE_OP (SDIO_RESP_R1B)
306#define MMC_SWITCH 6 /* ac [31:0] See below R1b */
307#define MMC_SWITCH_OP (SDIO_RESP_R1B)
308#define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */
309#define MMC_SELECT_CARD_OP (SDIO_RESP_R1)
310#define MMC_SEND_EXT_CSD 8 /* adtc R1 */
311#define MMC_SEND_EXT_CSD_OP (SDIO_RESP_R1)
312#define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */
313#define MMC_SEND_CSD_OP (SDIO_RESP_R2)
314#define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */
315#define MMC_SEND_CID_OP (SDIO_RESP_R2)
316#define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */
317#define MMC_READ_DAT_UNTIL_STOP_OP (SDIO_RESP_R1)
318#define MMC_STOP_TRANSMISSION 12 /* ac R1b */
319#define MMC_STOP_TRANSMISSION_OP (SDIO_RESP_R1B | SDIO_CMDOP_TRANS_STOP)
320#define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */
321#define MMC_SEND_STATUS_OP (SDIO_RESP_R1)
322#define MMC_BUS_TEST_R 14 /* adtc R1 */
323#define MMC_BUS_TEST_R_OP (SDIO_RESP_R1)
324#define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */
325#define MMC_BUS_TEST_W 19 /* adtc R1 */
326#define MMC_BUS_TEST_W_OP (SDIO_RESP_R1)
327#define MMC_SPI_READ_OCR 58 /* spi spi_R3 */
328#define MMC_SPI_READ_OCR_OP (SDIO_RESP_SPI_R3)
329#define MMC_SPI_CRC_ON_OFF 59 /* spi [0:0] flag spi_R1 */
330#define MMC_SPI_CRC_ON_OFF_OP (SDIO_RESP_SPI_R1)
331
332 /* class 2 */
333#define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */
334#define MMC_SET_BLOCKLEN_OP (SDIO_RESP_R1)
335#define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */
336#define MMC_READ_SINGLE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_READ)
337#define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */
338#define MMC_READ_MULTIPLE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_READ)
339#define MMC_SEND_TUNING_BLOCK 19 /* adtc R1 */
340#define MMC_SEND_TUNING_BLOCK_OP (SDIO_RESP_R1)
341#define MMC_SEND_TUNING_BLOCK_HS200 21 /* adtc R1 */
342#define MMC_SEND_TUNING_BLOCK_HS200_OP (SDIO_RESP_R1)
343
344 /* class 3 */
345#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */
346#define MMC_WRITE_DAT_UNTIL_STOP_OP (SDIO_RESP_R1)
347
348 /* class 4 */
349#define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */
350#define MMC_SET_BLOCK_COUNT_OP (SDIO_RESP_R1)
351#define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */
352#define MMC_WRITE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_WRITE)
353#define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */
354#define MMC_WRITE_MULTIPLE_BLOCK_OP (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_WRITE)
355#define MMC_PROGRAM_CID 26 /* adtc R1 */
356#define MMC_PROGRAM_CID_OP (SDIO_RESP_R1)
357#define MMC_PROGRAM_CSD 27 /* adtc R1 */
358#define MMC_PROGRAM_CSD_OP (SDIO_RESP_R1)
359
360 /* class 6 */
361#define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */
362#define MMC_SET_WRITE_PROT_OP (SDIO_RESP_R1B)
363#define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */
364#define MMC_CLR_WRITE_PROT_OP (SDIO_RESP_R1B)
365#define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */
366#define MMC_SEND_WRITE_PROT_OP (SDIO_RESP_R1)
367
368 /* class 5 */
369#define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */
370#define MMC_ERASE_GROUP_START_OP (SDIO_RESP_R1)
371#define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */
372#define MMC_ERASE_GROUP_END_OP (SDIO_RESP_R1)
373#define MMC_ERASE 38 /* ac R1b */
374#define MMC_ERASE_OP (SDIO_RESP_R1B)
375
376 /* class 9 */
377#define MMC_FAST_IO 39 /* ac <Complex> R4 */
378#define MMC_FAST_IO_OP (SDIO_RESP_R4)
379#define MMC_GO_IRQ_STATE 40 /* bcr R5 */
380#define MMC_GO_IRQ_STATE_OP (SDIO_RESP_R5)
381
382 /* class 7 */
383#define MMC_LOCK_UNLOCK 42 /* adtc R1b */
384#define MMC_LOCK_UNLOCK_OP (SDIO_RESP_R1B)
385
386 /* class 8 */
387#define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */
388#define MMC_APP_CMD_OP (SDIO_RESP_R1)
389#define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */
390#define MMC_GEN_CMD_OP (SDIO_RESP_R1)
391
392 /* class 11 */
393#define MMC_QUE_TASK_PARAMS 44 /* ac [20:16] task id R1 */
394#define MMC_QUE_TASK_PARAMS_OP (SDIO_RESP_R1)
395#define MMC_QUE_TASK_ADDR 45 /* ac [31:0] data addr R1 */
396#define MMC_QUE_TASK_ADDR_OP (SDIO_RESP_R1)
397#define MMC_EXECUTE_READ_TASK 46 /* adtc [20:16] task id R1 */
398#define MMC_EXECUTE_READ_TASK_OP (SDIO_RESP_R1)
399#define MMC_EXECUTE_WRITE_TASK 47 /* adtc [20:16] task id R1 */
400#define MMC_EXECUTE_WRITE_TASK_OP (SDIO_RESP_R1)
401#define MMC_CMDQ_TASK_MGMT 48 /* ac [20:16] task id R1b */
402#define MMC_CMDQ_TASK_MGMT_OP (SDIO_RESP_R1B)
403
404/* SD/MMC version bits; 8 flags, 8 major, 8 minor, 8 change */
405#define SD_VERSION_SD (1U << 31)
406#define MMC_VERSION_MMC (1U << 30)
407
408#define MAKE_SDMMC_VERSION(a, b, c) \
409 ((((uint32_t)(a)) << 16) | ((uint32_t)(b) << 8) | (uint32_t)(c))
410#define MAKE_SD_VERSION(a, b, c) \
411 (SD_VERSION_SD | MAKE_SDMMC_VERSION(a, b, c))
412#define MAKE_MMC_VERSION(a, b, c) \
413 (MMC_VERSION_MMC | MAKE_SDMMC_VERSION(a, b, c))
414
415#define EXTRACT_SDMMC_MAJOR_VERSION(x) \
416 (((uint32_t)(x) >> 16) & 0xff)
417#define EXTRACT_SDMMC_MINOR_VERSION(x) \
418 (((uint32_t)(x) >> 8) & 0xff)
419#define EXTRACT_SDMMC_CHANGE_VERSION(x) \
420 ((uint32_t)(x) & 0xff)
421
422#define SD_VERSION_3 MAKE_SD_VERSION(3, 0, 0)
423#define SD_VERSION_2 MAKE_SD_VERSION(2, 0, 0)
424#define SD_VERSION_1_0 MAKE_SD_VERSION(1, 0, 0)
425#define SD_VERSION_1_10 MAKE_SD_VERSION(1, 10, 0)
426
427#define MMC_VERSION_UNKNOWN MAKE_MMC_VERSION(0, 0, 0)
428#define MMC_VERSION_1_2 MAKE_MMC_VERSION(1, 2, 0)
429#define MMC_VERSION_1_4 MAKE_MMC_VERSION(1, 4, 0)
430#define MMC_VERSION_2_2 MAKE_MMC_VERSION(2, 2, 0)
431#define MMC_VERSION_3 MAKE_MMC_VERSION(3, 0, 0)
432#define MMC_VERSION_4 MAKE_MMC_VERSION(4, 0, 0)
433#define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0)
434#define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0)
435#define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0)
436#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0)
437#define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1)
438#define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0)
439#define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
440#define MMC_VERSION_5_1 MAKE_MMC_VERSION(5, 1, 0)
441
442#define IS_SD(x) ((x) & SD_VERSION_SD)
443#define IS_MMC(x) ((x) & MMC_VERSION_MMC)
444
445// r1 response card status
446#define R1_OUT_OF_RANGE (1 << 31) /* er, c */
447#define R1_ADDRESS_ERROR (1 << 30) /* erx, c */
448#define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */
449#define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */
450#define R1_ERASE_PARAM (1 << 27) /* ex, c */
451#define R1_WP_VIOLATION (1 << 26) /* erx, c */
452#define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */
453#define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */
454#define R1_COM_CRC_ERROR (1 << 23) /* er, b */
455#define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */
456#define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */
457#define R1_CC_ERROR (1 << 20) /* erx, c */
458#define R1_ERROR (1 << 19) /* erx, c */
459#define R1_UNDERRUN (1 << 18) /* ex, c */
460#define R1_OVERRUN (1 << 17) /* ex, c */
461#define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */
462#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */
463#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */
464#define R1_ERASE_RESET (1 << 13) /* sr, c */
465#define R1_STATUS(x) (x & 0xFFF9A000)
466#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
467#define R1_READY_FOR_DATA (1 << 8) /* sx, a */
468#define R1_SWITCH_ERROR (1 << 7) /* sx, c */
469#define R1_EXCEPTION_EVENT (1 << 6) /* sr, a */
470#define R1_APP_CMD (1 << 5) /* sr, c */
471
472#define R1_STATE_IDLE 0
473#define R1_STATE_READY 1
474#define R1_STATE_IDENT 2
475#define R1_STATE_STBY 3
476#define R1_STATE_TRAN 4
477#define R1_STATE_DATA 5
478#define R1_STATE_RCV 6
479#define R1_STATE_PRG 7
480#define R1_STATE_DIS 8
481#define R1_STATE_MASK 0x0FUL
482
483#define R1_CUR_STATE(__S) ((__S) << 9)
484
485/*============================ MACROFIED FUNCTIONS ===========================*/
486
496#define VSF_SDIO_APIS(__prefix_name) \
497 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, init, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
498 __VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, fini, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
499 __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) \
500 __VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, irq_enable, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
501 __VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, irq_disable, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
502 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_irq_mask_t, sdio, irq_clear, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
503 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_status_t, sdio, status, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
504 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_capability_t, sdio, capability, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
505 __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) \
506 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, set_bus_width, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, uint8_t bus_width) \
507 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, host_request, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_req_t *req) \
508 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, ctrl, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_ctrl_t ctrl, void* param)
509
510/*============================ TYPES =========================================*/
511
512typedef union vsf_sdio_csd_t {
513// name bitlen offset
514// refer to: Part_1_Physical_Layer_Specification_Ver3.01_Final_100218.pdf
515 struct {
516 uint32_t ALWAY1 : 1; // 0
517 uint32_t CRC : 7; // 1
518
519 // different part from mmc
520 uint32_t : 2; // 8
521
525 uint32_t COPY : 1; // 14
527
528 // different part from mmc
529 uint32_t : 5; // 16
530
534
535 // different part from mmc
536 uint32_t : 2; // 29
537
542
543 // different part from sd_v2
549 uint32_t C_SIZE : 12; // 62
550 uint32_t : 2; // 74
551
552 uint32_t DSR_IMP : 1; // 76
557 uint32_t CCC : 12; // 84
559 uint32_t NSAC : 8; // 104
560 uint32_t TAAC : 8; // 112
561
562 // different part from mmc
563 uint32_t : 6; // 120
564
567// refer to: Part_1_Physical_Layer_Specification_Ver3.01_Final_100218.pdf
568 struct {
569 uint32_t : 1; // 0
570 uint32_t CRC : 7; // 1
571
572 // different part from mmc
573 uint32_t : 2; // 8
574
575 uint32_t FILE_FORMAT : 2; // 10
576 uint32_t TMP_WRITE_PROTECT : 1; // 12
578 uint32_t COPY : 1; // 14
579 uint32_t FILE_FORMAT_GRP : 1; // 15
580
581 // different part from mmc
582 uint32_t : 5; // 16
583
584 uint32_t WRITE_BL_PARTIAL : 1; // 21
585 uint32_t WRITE_BL_LEN : 4; // 22
586 uint32_t R2W_FACTOR : 3; // 26
587
588 // different part from mmc
589 uint32_t : 2; // 29
590
591 uint32_t WP_GRP_ENABLE : 1; // 31
592 uint32_t WP_GRP_SIZE : 7; // 32
593 uint32_t SECTOR_SIZE : 7; // 39
594 uint32_t ERASE_BLK_EN : 1; // 46
595
596 // different part from sd_v1 and mmc
597 uint32_t : 1; // 47
598 uint32_t C_SIZE : 22; // 48
599 uint32_t : 6; // 70
600
601 uint32_t DSR_IMP : 1; // 76
602 uint32_t READ_BLK_MISALIGN : 1; // 77
604 uint32_t READ_BL_PARTIAL : 1; // 79
605 uint32_t READ_BL_LEN : 4; // 80
606 uint32_t CCC : 12; // 84
607 uint32_t TRANS_SPEED : 8; // 96
608 uint32_t NSAC : 8; // 104
609 uint32_t TAAC : 8; // 112
610
611 // different part from mmc
612 uint32_t : 2; // 120
613
614 uint32_t CSD_STRUCTURE : 2; // 126
616// refer to: mmc specification
617 struct {
618 uint32_t : 1; // 0
619 uint32_t CRC : 7; // 1
620
621 // different part from sd_v1 and sd_v2
622 uint32_t ECC : 2; // 8
623
624 uint32_t FILE_FORMAT : 2; // 10
625 uint32_t TMP_WRITE_PROTECT : 1; // 12
627 uint32_t COPY : 1; // 14
628 uint32_t FILE_FORMAT_GRP : 1; // 15
629
630 // different part from sd_v1 and sd_v2
632 uint32_t : 4; // 17
633
634 uint32_t WRITE_BL_PARTIAL : 1; // 21
635 uint32_t WRITE_BL_LEN : 4; // 22
636 uint32_t R2W_FACTOR : 3; // 26
637
638 // different part from sd_v1 and sd_v2
640
641 uint32_t WP_GRP_ENABLE : 1; // 31
642
643 // different part from sd_v1 and sd_v2
644 uint32_t WP_GRP_SIZE : 5; // 32
647
648 // different part from sd_v2
649 uint32_t C_SIZE_MULT : 3; // 47
650 uint32_t VDD_W_CURR_MAX : 3; // 50
651 uint32_t VDD_W_CURR_MIN : 3; // 53
652 uint32_t VDD_R_CURR_MAX : 3; // 56
653 uint32_t VDD_R_CURR_MIN : 3; // 59
654 uint32_t C_SIZE : 12; // 62
655 uint32_t : 2; // 74
656
657 uint32_t DSR_IMP : 1; // 76
658 uint32_t READ_BLK_MISALIGN : 1; // 77
660 uint32_t READ_BL_PARTIAL : 1; // 79
661 uint32_t READ_BL_LEN : 4; // 80
662 uint32_t CCC : 12; // 84
663 uint32_t TRANS_SPEED : 8; // 96
664 uint32_t NSAC : 8; // 104
665 uint32_t TAAC : 8; // 112
666
667 // different part from sd_v1 and sd_v2
668 uint32_t : 2; // 120
669 uint32_t SPEC_VERS : 4; // 122
670
671 uint32_t CSD_STRUCTURE : 2; // 126
674
675typedef struct vsf_sdio_cid_t {
676// refer to: Part_1_Physical_Layer_Specification_Ver3.01_Final_100218.pdf
677 uint64_t : 1; // 0
678 uint64_t CRC : 7; // 1
679 uint64_t MDT : 12; // 8 Manufacturing date
680 uint64_t : 4; // 20
681 uint64_t PSN : 32; // 24 Product serial number
682 uint64_t PRV : 8; // 56 Product revision
683 uint64_t PNM : 40; // 64 Product name
684 uint64_t OID : 16; // 104 OEM/Application ID
685 uint64_t MID : 8; // 120 Manufacturer ID
687
688#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
689typedef enum vsf_sdio_mode_t {
690 SDIO_MODE_HOST = (0x1ul << 0), // select host mode
691 SDIO_MODE_SLAVE = (0x0ul << 0), // select slave mode
692 SDIO_MODE_MASK = (0x1ul << 0),
694#endif
695
705#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP == DISABLED
706typedef enum vsf_sdio_reqop_t {
707 SDIO_CMDOP_BYTE = (0ul << 0),
708 SDIO_CMDOP_STREAM = (1ul << 0),
711
712 SDIO_CMDOP_WRITE = (1ul << 2),
713 SDIO_CMDOP_READ = (0ul << 2),
714
716 // prefix __ means private, not mandatory, different names can be used according to different hw
717 __SDIO_CMDOP_RESP = (1ul << 4),
721 // SDIO_RESP_R1 etc are mandatory
724#define SDIO_RESP_R1B (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC | SDIO_CMDOP_RESP_BUSY)
725#define SDIO_RESP_R2 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_LONG_CRC)
726#define SDIO_RESP_R3 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)
727#define SDIO_RESP_R4 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)
728#define SDIO_RESP_R5 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
729#define SDIO_RESP_R6 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
730#define SDIO_RESP_R7 (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
731
732 // used for CMD11(SD_SWITCH_VOLTAGE) only, hold clock after resp, ignore if no resp
733 SDIO_CMDOP_CLKHOLD = (1ul << 7),
734 // used for CMD12(MMC_STOP_TRANSMISSION) only
737#endif
738
739typedef struct vsf_sdio_req_t {
743
744 // block_size will be 1 << block_size_bits
749
750#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
752 // TODO: add irq mask for stream mode
755 SDIO_IRQ_MASK_HOST_DATA_ABORT = (0x1ul << 2), // aborted by CMD12
760#endif
761
762#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS == DISABLED
763typedef enum vsf_sdio_reqsts_t {
768 SDIO_REQSTS_DATA_BUSY = (0x1ul << 3),
769 SDIO_REQSTS_BUSY = (0x1ul << 4),
774#endif
775
776#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
777typedef struct vsf_sdio_status_t {
778 union {
780 vsf_sdio_reqsts_t req_status;
782 };
784#endif
785
786#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
787typedef struct vsf_sdio_capability_t {
788#if VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY == ENABLED
790#endif
791 enum {
792 SDIO_CAP_BUS_WIDTH_1 = (0x1ul << 0),
793 SDIO_CAP_BUS_WIDTH_4 = (0x1ul << 1),
794 SDIO_CAP_BUS_WIDTH_8 = (0x1ul << 2),
797 // data alignment(address and size) in bytes
798 uint16_t data_ptr_alignment; // alignment of data pointer
799 uint16_t data_size_alignment; // alignment of data size
802#endif
803
804#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
813typedef enum vsf_sdio_ctrl_t {
833#endif
834
835#if VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
836typedef struct vsf_sdio_t vsf_sdio_t;
837
872typedef void vsf_sdio_isr_handler_t(void *target_ptr,
873 vsf_sdio_t *sdio_ptr,
876 uint32_t resp[4]);
877
885typedef struct vsf_sdio_isr_t {
893
901typedef struct vsf_sdio_cfg_t {
907#endif
908
909typedef struct vsf_sdio_op_t {
911#undef __VSF_HAL_TEMPLATE_API
912#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
914
915 VSF_SDIO_APIS(vsf_sdio)
917
918#if VSF_SDIO_CFG_MULTI_CLASS == ENABLED
921};
922#endif
923
924/*============================ GLOBAL VARIABLES ==============================*/
925/*============================ PROTOTYPES ====================================*/
926
946extern vsf_err_t vsf_sdio_init(vsf_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr);
947
959extern void vsf_sdio_fini(vsf_sdio_t *sdio_ptr);
960
981
998
1013
1040
1053
1066
1082extern vsf_err_t vsf_sdio_set_clock(vsf_sdio_t *sdio_ptr, uint32_t clock_hz, bool is_ddr);
1083
1097extern vsf_err_t vsf_sdio_set_bus_width(vsf_sdio_t *sdio_ptr, uint8_t bus_width);
1098
1113
1128
1139
1162extern vsf_err_t vsf_sdio_ctrl(vsf_sdio_t *sdio_ptr, vsf_sdio_ctrl_t ctrl, void *param);
1163
1164// TODO: add APIs for stream mode
1165
1166/*============================ MACROFIED FUNCTIONS ===========================*/
1167
1169#if VSF_SDIO_CFG_FUNCTION_RENAME == ENABLED
1170# define __vsf_sdio_t VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_t)
1171# define vsf_sdio_init(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_init) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1172# define vsf_sdio_get_configuration(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_get_configuration) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1173# define vsf_sdio_enable(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_enable) ((__vsf_sdio_t *)(__SDIO))
1174# define vsf_sdio_disable(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_disable) ((__vsf_sdio_t *)(__SDIO))
1175# define vsf_sdio_irq_enable(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_enable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1176# define vsf_sdio_irq_disable(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_disable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1177# define vsf_sdio_irq_clear(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_clear) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1178# define vsf_sdio_status(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_status) ((__vsf_sdio_t *)(__SDIO))
1179# define vsf_sdio_capability(__SDIO) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_capability) ((__vsf_sdio_t *)(__SDIO))
1180# define vsf_sdio_set_clock(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_clock) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1181# define vsf_sdio_set_bus_width(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_bus_width) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1182# define vsf_sdio_host_request(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_host_request) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1183# define vsf_sdio_ctrl(__SDIO, ...) VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_ctrl) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
1184#endif
1186
1187#ifdef __cplusplus
1188}
1189#endif
1190
1191#endif /*__VSF_TEMPLATE_SDIO_H__*/
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:204
Definition vsf_template_hal_driver.h:197
Definition vsf_template_sdio.h:787
bus_width
Definition vsf_template_sdio.h:795
bool support_ddr
Definition vsf_template_sdio.h:800
uint16_t data_size_alignment
Definition vsf_template_sdio.h:799
uint32_t max_freq_hz
Definition vsf_template_sdio.h:796
uint16_t data_ptr_alignment
Definition vsf_template_sdio.h:798
inherit(vsf_peripheral_capability_t) enum
Definition vsf_template_sdio.h:789
sdio configuration
Definition vsf_template_sdio.h:901
vsf_sdio_isr_t isr
Definition vsf_template_sdio.h:904
vsf_sdio_mode_t mode
Definition vsf_template_sdio.h:902
Definition vsf_template_sdio.h:675
uint64_t MDT
Definition vsf_template_sdio.h:679
uint64_t PRV
Definition vsf_template_sdio.h:682
uint64_t PNM
Definition vsf_template_sdio.h:683
uint64_t MID
Definition vsf_template_sdio.h:685
uint64_t PSN
Definition vsf_template_sdio.h:681
uint64_t OID
Definition vsf_template_sdio.h:684
uint64_t CRC
Definition vsf_template_sdio.h:678
sdio interrupt configuration
Definition vsf_template_sdio.h:885
vsf_sdio_isr_handler_t * handler_fn
Definition vsf_template_sdio.h:886
void * target_ptr
Definition vsf_template_sdio.h:888
vsf_arch_prio_t prio
Definition vsf_template_sdio.h:890
Definition vsf_template_sdio.h:909
Definition vsf_template_sdio.h:739
uint8_t cmd
Definition vsf_template_sdio.h:740
vsf_sdio_reqop_t op
Definition vsf_template_sdio.h:742
uint32_t arg
Definition vsf_template_sdio.h:741
uint8_t block_size_bits
Definition vsf_template_sdio.h:745
uint8_t * buffer
Definition vsf_template_sdio.h:746
uint32_t count
Definition vsf_template_sdio.h:747
Definition vsf_template_sdio.h:777
vsf_sdio_irq_mask_t irq_status
Definition vsf_template_sdio.h:781
Definition vsf_template_sdio.h:919
const vsf_sdio_op_t * op
Definition vsf_template_sdio.h:920
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:193
vsf_sdio_irq_mask_t
Definition sdio.h:154
vsf_sdio_mode_t
Definition sdio.h:119
vsf_sdio_reqsts_t
Definition sdio.h:166
Definition vsf_template_sdio.h:512
uint32_t WRITE_BL_LEN
Definition vsf_template_sdio.h:532
uint32_t TAAC
Definition vsf_template_sdio.h:560
uint32_t CONTENT_PROT_APP
Definition vsf_template_sdio.h:631
uint32_t READ_BL_PARTIAL
Definition vsf_template_sdio.h:555
struct vsf_sdio_csd_t::@614 sd_v1
uint32_t WP_GRP_SIZE
Definition vsf_template_sdio.h:539
uint32_t ERASE_GRP_SIZE
Definition vsf_template_sdio.h:646
uint32_t READ_BLK_MISALIGN
Definition vsf_template_sdio.h:553
uint32_t ECC
Definition vsf_template_sdio.h:622
uint32_t ERASE_GRP_MULT
Definition vsf_template_sdio.h:645
uint32_t SECTOR_SIZE
Definition vsf_template_sdio.h:540
uint32_t R2W_FACTOR
Definition vsf_template_sdio.h:533
uint32_t ALWAY1
Definition vsf_template_sdio.h:516
uint32_t WP_GRP_ENABLE
Definition vsf_template_sdio.h:538
uint32_t NSAC
Definition vsf_template_sdio.h:559
struct vsf_sdio_csd_t::@615 sd_v2
uint32_t ERASE_BLK_EN
Definition vsf_template_sdio.h:541
uint32_t FILE_FORMAT
Definition vsf_template_sdio.h:522
uint32_t READ_BL_LEN
Definition vsf_template_sdio.h:556
uint32_t COPY
Definition vsf_template_sdio.h:525
uint32_t CCC
Definition vsf_template_sdio.h:557
uint32_t VDD_R_CURR_MAX
Definition vsf_template_sdio.h:547
uint32_t WRITE_BL_PARTIAL
Definition vsf_template_sdio.h:531
uint32_t CSD_STRUCTURE
Definition vsf_template_sdio.h:565
uint32_t FILE_FORMAT_GRP
Definition vsf_template_sdio.h:526
uint32_t VDD_W_CURR_MIN
Definition vsf_template_sdio.h:546
uint32_t DSR_IMP
Definition vsf_template_sdio.h:552
uint32_t VDD_R_CURR_MIN
Definition vsf_template_sdio.h:548
uint32_t SPEC_VERS
Definition vsf_template_sdio.h:669
uint32_t CRC
Definition vsf_template_sdio.h:517
uint32_t TRANS_SPEED
Definition vsf_template_sdio.h:558
struct vsf_sdio_csd_t::@616 mmc
uint32_t DEFAULT_ECC
Definition vsf_template_sdio.h:639
uint32_t C_SIZE
Definition vsf_template_sdio.h:549
uint32_t C_SIZE_MULT
Definition vsf_template_sdio.h:544
uint32_t TMP_WRITE_PROTECT
Definition vsf_template_sdio.h:523
uint32_t PERM_WRITE_PROTECT
Definition vsf_template_sdio.h:524
uint32_t WRITE_BLK_MISALIGN
Definition vsf_template_sdio.h:554
uint32_t VDD_W_CURR_MAX
Definition vsf_template_sdio.h:545
struct vk_romfs_header_t VSF_CAL_PACKED
vsf_sdio_reqop_t
flags of sdio request operations
Definition vsf_template_sdio.h:706
@ SDIO_CMDOP_READ
Definition vsf_template_sdio.h:713
@ SDIO_CMDOP_RESP_BUSY
Definition vsf_template_sdio.h:715
@ SDIO_CMDOP_SINGLE_BLOCK
Definition vsf_template_sdio.h:709
@ __SDIO_CMDOP_RESP
Definition vsf_template_sdio.h:717
@ SDIO_CMDOP_BYTE
Definition vsf_template_sdio.h:707
@ SDIO_CMDOP_STREAM
Definition vsf_template_sdio.h:708
@ SDIO_CMDOP_TRANS_STOP
Definition vsf_template_sdio.h:735
@ __SDIO_CMDOP_RESP_LONG_CRC
Definition vsf_template_sdio.h:720
@ SDIO_CMDOP_WRITE
Definition vsf_template_sdio.h:712
@ __SDIO_CMDOP_RESP_SHORT
Definition vsf_template_sdio.h:718
@ SDIO_CMDOP_CLKHOLD
Definition vsf_template_sdio.h:733
@ SDIO_CMDOP_MULTI_BLOCK
Definition vsf_template_sdio.h:710
@ __SDIO_CMDOP_RESP_SHORT_CRC
Definition vsf_template_sdio.h:719
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:872
#define VSF_SDIO_APIS(__prefix_name)
SDIO API template, used to generate SDIO type, specific prefix function declarations,...
Definition vsf_template_sdio.h:496
vsf_sdio_irq_mask_t
Definition vsf_template_sdio.h:751
@ SDIO_IRQ_MASK_HOST_DATA_DONE
Definition vsf_template_sdio.h:754
@ SDIO_IRQ_MASK_HOST_RESP_DONE
Definition vsf_template_sdio.h:753
@ SDIO_IRQ_MASK_HOST_ALL
Definition vsf_template_sdio.h:756
@ SDIO_IRQ_MASK_HOST_DATA_ABORT
Definition vsf_template_sdio.h:755
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:117
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:108
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_err_t vsf_sdio_ctrl(vsf_sdio_t *sdio_ptr, vsf_sdio_ctrl_t ctrl, void *param)
Execute a control command on an SDIO instance.
Definition sdio_common.c:136
vsf_sdio_capability_t vsf_sdio_capability(vsf_sdio_t *sdio_ptr)
Get the capability of sdio instance.
Definition sdio_common.c:90
vsf_sdio_mode_t
Definition vsf_template_sdio.h:689
@ SDIO_MODE_MASK
Definition vsf_template_sdio.h:692
@ SDIO_MODE_SLAVE
Definition vsf_template_sdio.h:691
@ SDIO_MODE_HOST
Definition vsf_template_sdio.h:690
#define SDIO_RESP_NONE
Definition vsf_template_sdio.h:722
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:99
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:126
vsf_sdio_irq_mask_t vsf_sdio_irq_clear(vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
Clear interrupt flags of SDIO instance and return previous state.
Definition sdio_common.c:72
vsf_sdio_ctrl_t
SDIO control commands for hardware-specific operations.
Definition vsf_template_sdio.h:813
@ __VSF_SDIO_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_sdio.h:831
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_host_transact_stop(vsf_sdio_t *sdio_ptr)
Stop the host transaction of sdio instance.
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:81
#define SDIO_RESP_R1
Definition vsf_template_sdio.h:723
struct vsf_sdio_cfg_t vsf_sdio_cfg_t
sdio configuration
vsf_sdio_reqsts_t
Definition vsf_template_sdio.h:763
@ SDIO_REQSTS_ERR_MASK
Definition vsf_template_sdio.h:770
@ SDIO_REQSTS_BUSY
Definition vsf_template_sdio.h:769
@ SDIO_REQSTS_DATA_BUSY
Definition vsf_template_sdio.h:768
@ SDIO_REQSTS_DONE
Definition vsf_template_sdio.h:764
@ SDIO_REQSTS_ERR_RESP_CRC
Definition vsf_template_sdio.h:766
@ SDIO_REQSTS_ERR_RESP_NONE
Definition vsf_template_sdio.h:765
@ SDIO_REQSTS_ERR_DATA_CRC
Definition vsf_template_sdio.h:767
uint8_t status
Definition vsf_tgui.h:144
Generated from commit: vsfteam/vsf@b2e9e8a