VSF Documented
sdio_template.inc
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#if VSF_HAL_USE_SDIO == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#if defined(VSF_SDIO_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_SDIO_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
24# define vsf_real_sdio_t VSF_MCONNECT(VSF_SDIO_CFG_IMP_DEVICE_PREFIX, _t)
25# define vsf_real_sdio_capability VSF_MCONNECT(VSF_SDIO_CFG_IMP_DEVICE_PREFIX, _capability)
26# define vsf_real_sdio_ctrl VSF_MCONNECT(VSF_SDIO_CFG_IMP_DEVICE_PREFIX, _ctrl)
27# define vsf_real_sdio_get_configuration VSF_MCONNECT(VSF_SDIO_CFG_IMP_DEVICE_PREFIX, _get_configuration)
28# define vsf_real_sdio_irq_clear VSF_MCONNECT(VSF_SDIO_CFG_IMP_DEVICE_PREFIX, _irq_clear)
29#else
30# define vsf_real_sdio_t VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_t)
31# define vsf_real_sdio_capability VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_capability)
32# define vsf_real_sdio_ctrl VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_ctrl)
33# define vsf_real_sdio_get_configuration VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_get_configuration)
34# define vsf_real_sdio_irq_clear VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_irq_clear)
35#endif
36
37#ifndef VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY
38# define VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
39#endif
40
41#ifndef VSF_SDIO_CFG_REIMPLEMENT_API_CTRL
42# define VSF_SDIO_CFG_REIMPLEMENT_API_CTRL DISABLED
43#endif
44
45#ifndef VSF_SDIO_CFG_REIMPLEMENT_API_GET_CONFIGURATION
46# define VSF_SDIO_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
47#endif
48
49#ifndef VSF_SDIO_CFG_REIMPLEMENT_API_IRQ_CLEAR
50# define VSF_SDIO_CFG_REIMPLEMENT_API_IRQ_CLEAR DISABLED
51#endif
52
53#ifdef VSF_SDIO_CFG_IMP_REMAP_PREFIX
54# undef VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY
55# define VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
56# undef VSF_SDIO_CFG_REIMPLEMENT_API_CTRL
57# define VSF_SDIO_CFG_REIMPLEMENT_API_CTRL ENABLED
58# undef VSF_SDIO_CFG_REIMPLEMENT_API_GET_CONFIGURATION
59# define VSF_SDIO_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
60# undef VSF_SDIO_CFG_REIMPLEMENT_API_IRQ_CLEAR
61# define VSF_SDIO_CFG_REIMPLEMENT_API_IRQ_CLEAR ENABLED
62#endif
63
64#if VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
65# ifndef VSF_SDIO_CFG_CAPCBILITY_MAX_FREQ_HZ
66# define VSF_SDIO_CFG_CAPCBILITY_MAX_FREQ_HZ (50 * 1000 * 1000)
67# endif
68# ifndef VSF_SDIO_CFG_CAPCBILITY_BUS_WIDTH
69# define VSF_SDIO_CFG_CAPCBILITY_BUS_WIDTH SDIO_CAP_BUS_WIDTH_8
70# endif
71#endif
72
73/*============================ LOCAL VARIABLES ===============================*/
74/*============================ IMPLEMENTATION ================================*/
75
76#if VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
77vsf_sdio_capability_t vsf_real_sdio_capability(vsf_real_sdio_t *sdio_ptr)
78{
79 return (vsf_sdio_capability_t){
80 .max_freq_hz = VSF_SDIO_CFG_CAPCBILITY_MAX_FREQ_HZ,
81 .bus_width = VSF_SDIO_CFG_CAPCBILITY_BUS_WIDTH,
82 };
83}
84#endif
85
86#if VSF_SDIO_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
87vsf_err_t vsf_real_sdio_get_configuration(vsf_real_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr)
88{
89 VSF_HAL_ASSERT(NULL != sdio_ptr);
90 VSF_HAL_ASSERT(NULL != cfg_ptr);
91
92 // Default implementation: not supported, trigger assertion
94
96}
97#endif
98
99#if VSF_SDIO_CFG_REIMPLEMENT_API_CTRL == DISABLED
100vsf_err_t vsf_real_sdio_ctrl(vsf_real_sdio_t *sdio_ptr, vsf_sdio_ctrl_t ctrl, void *param)
101{
102 VSF_HAL_ASSERT(NULL != sdio_ptr);
103
104 // Default implementation: not supported, trigger assertion
106
107 return VSF_ERR_NOT_SUPPORT;
108}
109#endif
110
111#if VSF_SDIO_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
112vsf_sdio_irq_mask_t vsf_real_sdio_irq_clear(vsf_real_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
113{
114 VSF_HAL_ASSERT(NULL != sdio_ptr);
115
116 // Default implementation: not supported, trigger assertion
118
119 return 0;
120}
121#endif
122
123/*============================ MACROS ========================================*/
124
125#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY
126#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG
127#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK
128#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE
129#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP
130#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS
131#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS
132#undef VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL
133#undef VSF_SDIO_CFG_REIMPLEMENT_API_CAPABILITY
134#undef VSF_SDIO_CFG_REIMPLEMENT_API_CTRL
135#undef VSF_SDIO_CFG_REIMPLEMENT_API_GET_CONFIGURATION
136#undef VSF_SDIO_CFG_REIMPLEMENT_API_IRQ_CLEAR
137#undef VSF_SDIO_CFG_CAPCBILITY_MAX_FREQ_HZ
138#undef VSF_SDIO_CFG_CAPCBILITY_BUS_WIDTH
139#undef vsf_real_sdio_t
140#undef vsf_real_sdio_capability
141#undef vsf_real_sdio_ctrl
142#undef vsf_real_sdio_get_configuration
143#undef vsf_real_sdio_irq_clear
144
145/*============================ MACROS ========================================*/
146
147#ifdef VSF_SDIO_CFG_IMP_REMAP_PREFIX
148
149# define vsf_imp_sdio_t VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_t)
150# define vsf_imp_sdio_init VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_init)
151# define vsf_imp_sdio_enable VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_enable)
152# define vsf_imp_sdio_disable VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_disable)
153# define vsf_imp_sdio_irq_enable VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_irq_enable)
154# define vsf_imp_sdio_irq_disable VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_irq_disable)
155# define vsf_imp_sdio_irq_clear VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_irq_clear)
156# define vsf_imp_sdio_status VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_status)
157# define vsf_imp_sdio_capability VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_capability)
158# define vsf_imp_sdio_set_clock VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_set_clock)
159# define vsf_imp_sdio_set_bus_width VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_set_bus_width)
160# define vsf_imp_sdio_host_request VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_host_request)
161# define vsf_imp_sdio_get_configuration VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_get_configuration)
162# define vsf_imp_sdio_ctrl VSF_MCONNECT(VSF_SDIO_CFG_IMP_PREFIX, _sdio_ctrl)
163
164# define vsf_remap_sdio_t VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_t)
165# define vsf_remap_sdio_init VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_init)
166# define vsf_remap_sdio_enable VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_enable)
167# define vsf_remap_sdio_disable VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_disable)
168# define vsf_remap_sdio_irq_enable VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_irq_enable)
169# define vsf_remap_sdio_irq_disable VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_irq_disable)
170# define vsf_remap_sdio_irq_clear VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_irq_clear)
171# define vsf_remap_sdio_status VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_status)
172# define vsf_remap_sdio_capability VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_capability)
173# define vsf_remap_sdio_set_clock VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_set_clock)
174# define vsf_remap_sdio_set_bus_width VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_set_bus_width)
175# define vsf_remap_sdio_host_request VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_host_request)
176# define vsf_remap_sdio_get_configuration VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_get_configuration)
177# define vsf_remap_sdio_ctrl VSF_MCONNECT(VSF_SDIO_CFG_IMP_REMAP_PREFIX, _sdio_ctrl)
178
179# define VSF_SDIO_CFG_IMP_REMAP_FUNCTIONS \
180 vsf_err_t vsf_imp_sdio_init(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
181 { \
182 VSF_HAL_ASSERT((sdio_ptr != NULL) && (cfg_ptr != NULL)); \
183 return vsf_remap_sdio_init(sdio_ptr, cfg_ptr); \
184 } \
185 void vsf_imp_sdio_fini(vsf_imp_sdio_t *sdio_ptr) \
186 { \
187 VSF_HAL_ASSERT(sdio_ptr != NULL); \
188 vsf_remap_sdio_fini(sdio_ptr); \
189 } \
190 void vsf_imp_sdio_irq_enable(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
191 { \
192 VSF_HAL_ASSERT(sdio_ptr != NULL); \
193 vsf_remap_sdio_irq_enable(sdio_ptr, irq_mask); \
194 } \
195 void vsf_imp_sdio_irq_disable(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
196 { \
197 VSF_HAL_ASSERT(sdio_ptr != NULL); \
198 vsf_remap_sdio_irq_disable(sdio_ptr, irq_mask); \
199 } \
200 vsf_sdio_irq_mask_t vsf_imp_sdio_irq_clear(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
201 { \
202 VSF_HAL_ASSERT(sdio_ptr != NULL); \
203 return vsf_remap_sdio_irq_clear(sdio_ptr, irq_mask); \
204 } \
205 vsf_sdio_status_t vsf_imp_sdio_status(vsf_imp_sdio_t *sdio_ptr) \
206 { \
207 VSF_HAL_ASSERT(sdio_ptr != NULL); \
208 return vsf_remap_sdio_status(sdio_ptr); \
209 } \
210 vsf_sdio_capability_t vsf_imp_sdio_capability(vsf_imp_sdio_t *sdio_ptr) \
211 { \
212 VSF_HAL_ASSERT(sdio_ptr != NULL); \
213 return vsf_remap_sdio_capability(sdio_ptr); \
214 } \
215 vsf_err_t vsf_imp_sdio_set_clock(vsf_imp_sdio_t *sdio_ptr, uint32_t clock_hz) \
216 { \
217 VSF_HAL_ASSERT(sdio_ptr != NULL); \
218 return vsf_remap_sdio_set_clock(sdio_ptr, clock_hz); \
219 } \
220 vsf_err_t vsf_imp_sdio_set_bus_width(vsf_imp_sdio_t *sdio_ptr, uint8_t bus_width) \
221 { \
222 VSF_HAL_ASSERT(sdio_ptr != NULL); \
223 return vsf_remap_sdio_set_bus_width(sdio_ptr, bus_width); \
224 } \
225 vsf_err_t vsf_imp_sdio_host_request(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_trans_t *trans) \
226 { \
227 VSF_HAL_ASSERT(sdio_ptr != NULL); \
228 return vsf_remap_sdio_host_request(sdio_ptr, trans); \
229 } \
230 vsf_err_t vsf_imp_sdio_get_configuration(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
231 { \
232 VSF_HAL_ASSERT(sdio_ptr != NULL); \
233 return vsf_remap_sdio_get_configuration(sdio_ptr, cfg_ptr); \
234 } \
235 vsf_err_t vsf_imp_sdio_ctrl(vsf_imp_sdio_t *sdio_ptr, vsf_sdio_ctrl_t ctrl, void *param)\
236 { \
237 VSF_HAL_ASSERT(sdio_ptr != NULL); \
238 return vsf_remap_sdio_ctrl(sdio_ptr, ctrl, param); \
239 }
240#endif
241
242/*============================ MACROFIED FUNCTIONS ===========================*/
243/*============================ LOCAL VARIABLES ===============================*/
244/*============================ IMPLEMENTATION ================================*/
245/*============================ GLOBAL VARIABLES ==============================*/
246
247#define VSF_HAL_TEMPLATE_IMP_NAME _sdio
248#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _SDIO
249
250#if !defined(VSF_SDIO_CFG_IMP_PREFIX) && !defined(VSF_SDIO_CFG_IMP_DEVICE_PREFIX)
251# error "Please define VSF_SDIO_CFG_IMP_PREFIX in sdio driver"
252#endif
253
254#if !defined(VSF_SDIO_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_SDIO_CFG_IMP_DEVICE_UPCASE_PREFIX)
255# error "Please define VSF_SDIO_CFG_IMP_UPCASE_PREFIX in sdio driver"
256#endif
257
258#ifndef VSF_SDIO_CFG_IMP_COUNT_MASK_PREFIX
259# define VSF_SDIO_CFG_IMP_COUNT_MASK_PREFIX VSF_SDIO_CFG_IMP_UPCASE_PREFIX
260#endif
261
262#ifdef VSF_SDIO_CFG_IMP_REMAP_FUNCTIONS
263# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_SDIO_CFG_IMP_REMAP_FUNCTIONS
264#endif
265
267
268#undef VSF_SDIO_CFG_IMP_PREFIX
269#undef VSF_SDIO_CFG_IMP_COUNT_MASK_PREFIX
270#undef VSF_SDIO_CFG_IMP_UPCASE_PREFIX
271#undef VSF_SDIO_CFG_IMP_DEVICE_PREFIX
272#undef VSF_SDIO_CFG_IMP_DEVICE_UPCASE_PREFIX
273#undef VSF_SDIO_CFG_IMP_LV0
274#undef VSF_SDIO_CFG_IMP_REMAP_FUNCTIONS
275#undef VSF_SDIO_CFG_IMP_HAS_OP
276#undef VSF_SDIO_CFG_IMP_EXTERN_OP
277#undef VSF_SDIO_CFG_IMP_RENAME_DEVICE_PREFIX
278
279#undef vsf_imp_sdio_t
280#undef vsf_imp_sdio_init
281#undef vsf_imp_sdio_enable
282#undef vsf_imp_sdio_disable
283#undef vsf_imp_sdio_irq_enable
284#undef vsf_imp_sdio_irq_disable
285#undef vsf_imp_sdio_irq_clear
286#undef vsf_imp_sdio_status
287#undef vsf_imp_sdio_capability
288#undef vsf_imp_sdio_set_clock
289#undef vsf_imp_sdio_set_bus_width
290#undef vsf_imp_sdio_host_request
291#undef vsf_imp_sdio_get_configuration
292#undef vsf_imp_sdio_ctrl
293
294#undef vsf_remap_sdio_t
295#undef vsf_remap_sdio_init
296#undef vsf_remap_sdio_enable
297#undef vsf_remap_sdio_disable
298#undef vsf_remap_sdio_irq_enable
299#undef vsf_remap_sdio_irq_disable
300#undef vsf_remap_sdio_irq_clear
301#undef vsf_remap_sdio_status
302#undef vsf_remap_sdio_capability
303#undef vsf_remap_sdio_set_clock
304#undef vsf_remap_sdio_set_bus_width
305#undef vsf_remap_sdio_host_request
306#undef vsf_remap_sdio_get_configuration
307#undef vsf_remap_sdio_ctrl
308
309#undef VSF_HAL_TEMPLATE_IMP_NAME
310#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
311
312/*============================ STATIC ASSERTIONS ==============================*/
313
314/* User-extensible macros for custom mode and IRQ mask values
315 * Users can define these macros before including this template to append
316 * their custom enum values to the uniqueness checks.
317 *
318 * Check modes for custom values:
319 * VSF_SDIO_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
320 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
321 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
322 * VSF_SDIO_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
323 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
324 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
325 *
326 * Example usage in vendor driver:
327 * #define VSF_SDIO_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
328 * #define VSF_SDIO_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
329 * #define VSF_SDIO_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
330 * #define VSF_SDIO_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
331 * #include "hal/driver/common/sdio/sdio_template.inc"
332 */
333
334
335#ifdef VSF_SDIO_CFG_MODE_CHECK_UNIQUE
336/* Default mode lists - can be redefined by users before including this file */
337#ifndef VSF_SDIO_CHECK_UNIQUE_MODE_MODES
338# define VSF_SDIO_CHECK_UNIQUE_MODE_MODES \
339 SDIO_MODE_HOST, \
340 SDIO_MODE_SLAVE
341#endif
342
343/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
344/* Check uniqueness within each functional group */
345
346/* Check mode uniqueness - all mode modes should have different values
347 * Mandatory: SDIO_MODE_HOST, SDIO_MODE_SLAVE
348 */
353);
354
355#ifdef VSF_SDIO_CUSTOM_MODE_VALUES
356/* Check uniqueness among custom mode values using user-specified check mode */
358#endif
359
362 /* Mandatory modes - always included */
364 /* User-defined modes - appended by user configuration */
365#ifdef VSF_SDIO_CUSTOM_MODE_VALUES
366 , VSF_SDIO_CUSTOM_MODE_VALUES
367#endif
368);
369
370#undef VSF_SDIO_CHECK_UNIQUE_MODE_MODES
371#endif /* VSF_SDIO_CFG_MODE_CHECK_UNIQUE */
372
373/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
374
375#ifdef VSF_SDIO_CFG_IRQ_MASK_CHECK_UNIQUE
376
377#ifdef VSF_SDIO_CUSTOM_IRQ_MASK_VALUES
378/* Check uniqueness among custom IRQ mask values using user-specified check mode */
380#endif
381
382/* Check uniqueness within vsf_sdio_irq_mask_t enum */
383
384/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
385 * Mandatory: SDIO_IRQ_MASK_HOST_RESP_DONE, SDIO_IRQ_MASK_HOST_DATA_DONE, SDIO_IRQ_MASK_HOST_DATA_ABORT
386 */
389 /* Mandatory IRQ masks - always included */
393 /* User-defined IRQ masks - appended by user configuration */
394#ifdef VSF_SDIO_CUSTOM_IRQ_MASK_VALUES
395 , VSF_SDIO_CUSTOM_IRQ_MASK_VALUES
396#endif
397);
398#endif /* VSF_SDIO_CFG_IRQ_MASK_CHECK_UNIQUE */
399
400/* ==================== REQOP UNIQUENESS CHECKS ==================== */
401
402#ifdef VSF_SDIO_CFG_REQOP_CHECK_UNIQUE
403/* Default reqop lists - can be redefined by users before including this file */
404#ifndef VSF_SDIO_CHECK_UNIQUE_REQOP_CMDOP_MODES
405# define VSF_SDIO_CHECK_UNIQUE_REQOP_CMDOP_MODES \
406 SDIO_CMDOP_BYTE, \
407 SDIO_CMDOP_STREAM, \
408 SDIO_CMDOP_SINGLE_BLOCK, \
409 SDIO_CMDOP_MULTI_BLOCK
410#endif
411
412#ifndef VSF_SDIO_CHECK_UNIQUE_REQOP_RW_MODES
413# define VSF_SDIO_CHECK_UNIQUE_REQOP_RW_MODES \
414 SDIO_CMDOP_WRITE, \
415 SDIO_CMDOP_READ
416#endif
417
418#ifndef VSF_SDIO_CHECK_UNIQUE_REQOP_RESP_MODES
419# define VSF_SDIO_CHECK_UNIQUE_REQOP_RESP_MODES \
420 SDIO_CMDOP_RESP_BUSY, \
421 __SDIO_CMDOP_RESP, \
422 __SDIO_CMDOP_RESP_SHORT, \
423 __SDIO_CMDOP_RESP_SHORT_CRC, \
424 __SDIO_CMDOP_RESP_LONG_CRC
425#endif
426
427#ifndef VSF_SDIO_CHECK_UNIQUE_REQOP_SPECIAL_MODES
428# define VSF_SDIO_CHECK_UNIQUE_REQOP_SPECIAL_MODES \
429 SDIO_CMDOP_CLKHOLD, \
430 SDIO_CMDOP_TRANS_STOP
431#endif
432
433/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
434/* Check uniqueness within each functional group */
435
436/* Check command operation mode uniqueness - all command operation modes should have different values
437 * Mandatory: SDIO_CMDOP_BYTE, SDIO_CMDOP_STREAM, SDIO_CMDOP_SINGLE_BLOCK, SDIO_CMDOP_MULTI_BLOCK
438 */
439VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_SDIO_CFG_REQOP_CHECK_UNIQUE, VSF_SDIO_CHECK_UNIQUE_REQOP_CMDOP_MODES);
440
441/* Check read/write mode uniqueness - all read/write modes should have different values
442 * Mandatory: SDIO_CMDOP_WRITE, SDIO_CMDOP_READ
443 */
444VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_SDIO_CFG_REQOP_CHECK_UNIQUE, VSF_SDIO_CHECK_UNIQUE_REQOP_RW_MODES);
445
446/* Check response mode uniqueness - all response modes should have different values
447 * Mandatory: SDIO_CMDOP_RESP_BUSY, __SDIO_CMDOP_RESP, __SDIO_CMDOP_RESP_SHORT,
448 * __SDIO_CMDOP_RESP_SHORT_CRC, __SDIO_CMDOP_RESP_LONG_CRC
449 */
450VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_SDIO_CFG_REQOP_CHECK_UNIQUE, VSF_SDIO_CHECK_UNIQUE_REQOP_RESP_MODES);
451
452/* Check special operation mode uniqueness - all special operation modes should have different values
453 * Mandatory: SDIO_CMDOP_CLKHOLD, SDIO_CMDOP_TRANS_STOP
454 */
455VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_SDIO_CFG_REQOP_CHECK_UNIQUE, VSF_SDIO_CHECK_UNIQUE_REQOP_SPECIAL_MODES);
456
457#ifdef VSF_SDIO_CUSTOM_REQOP_VALUES
458/* Check uniqueness among custom reqop values using user-specified check mode */
459VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_SDIO_CFG_REQOP_CHECK_UNIQUE, VSF_SDIO_CUSTOM_REQOP_VALUES);
460#endif
461
462/* Check reqop uniqueness - all reqop bits should have different values
463 * Mandatory: SDIO_CMDOP_BYTE, SDIO_CMDOP_STREAM, SDIO_CMDOP_SINGLE_BLOCK, SDIO_CMDOP_MULTI_BLOCK,
464 * SDIO_CMDOP_WRITE, SDIO_CMDOP_READ,
465 * SDIO_CMDOP_RESP_BUSY, __SDIO_CMDOP_RESP, __SDIO_CMDOP_RESP_SHORT,
466 * __SDIO_CMDOP_RESP_SHORT_CRC, __SDIO_CMDOP_RESP_LONG_CRC,
467 * SDIO_CMDOP_CLKHOLD, SDIO_CMDOP_TRANS_STOP
468 */
470 VSF_SDIO_CFG_REQOP_CHECK_UNIQUE,
471 /* Mandatory reqops - always included */
477 /* User-defined reqops - appended by user configuration */
478#ifdef VSF_SDIO_CUSTOM_REQOP_VALUES
479 , VSF_SDIO_CUSTOM_REQOP_VALUES
480#endif
481);
482
483#undef VSF_SDIO_CHECK_UNIQUE_REQOP_CMDOP_MODES
484#undef VSF_SDIO_CHECK_UNIQUE_REQOP_RW_MODES
485#undef VSF_SDIO_CHECK_UNIQUE_REQOP_RESP_MODES
486#undef VSF_SDIO_CHECK_UNIQUE_REQOP_SPECIAL_MODES
487#endif /* VSF_SDIO_CFG_REQOP_CHECK_UNIQUE */
488
489/* ==================== REQSTS UNIQUENESS CHECKS ==================== */
490
491#ifdef VSF_SDIO_CFG_REQSTS_CHECK_UNIQUE
492
493#ifdef VSF_SDIO_CUSTOM_REQSTS_VALUES
494/* Check uniqueness among custom reqsts values using user-specified check mode */
495VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_SDIO_CFG_REQSTS_CHECK_UNIQUE, VSF_SDIO_CUSTOM_REQSTS_VALUES);
496#endif
497
498/* Check reqsts uniqueness - all reqsts bits should have different values
499 * Mandatory: SDIO_REQSTS_DONE, SDIO_REQSTS_ERR_RESP_NONE, SDIO_REQSTS_ERR_RESP_CRC,
500 * SDIO_REQSTS_ERR_DATA_CRC, SDIO_REQSTS_DATA_BUSY, SDIO_REQSTS_BUSY
501 */
503 VSF_SDIO_CFG_REQSTS_CHECK_UNIQUE,
504 /* Mandatory reqstss - always included */
511 /* User-defined reqstss - appended by user configuration */
512#ifdef VSF_SDIO_CUSTOM_REQSTS_VALUES
513 , VSF_SDIO_CUSTOM_REQSTS_VALUES
514#endif
515);
516#endif /* VSF_SDIO_CFG_REQSTS_CHECK_UNIQUE */
517
518#undef VSF_SDIO_CFG_MODE_CHECK_UNIQUE
519#undef VSF_SDIO_CFG_IRQ_MASK_CHECK_UNIQUE
520#undef VSF_SDIO_CFG_REQOP_CHECK_UNIQUE
521#undef VSF_SDIO_CFG_REQSTS_CHECK_UNIQUE
522#undef VSF_SDIO_CUSTOM_MODE_VALUES
523#undef VSF_SDIO_CUSTOM_IRQ_MASK_VALUES
524#undef VSF_SDIO_CUSTOM_REQOP_VALUES
525#undef VSF_SDIO_CUSTOM_REQSTS_VALUES
526
527#endif /* VSF_HAL_USE_SDIO */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ SDIO_CMDOP_READ
Definition sdio.h:43
@ SDIO_CMDOP_SINGLE_BLOCK
Definition sdio.h:39
@ __SDIO_CMDOP_RESP
Definition sdio.h:46
@ SDIO_CMDOP_BYTE
Definition sdio.h:54
@ SDIO_CMDOP_STREAM
Definition sdio.h:55
@ SDIO_CMDOP_TRANS_STOP
Definition sdio.h:53
@ __SDIO_CMDOP_RESP_LONG_CRC
Definition sdio.h:49
@ SDIO_CMDOP_WRITE
Definition sdio.h:44
@ __SDIO_CMDOP_RESP_SHORT
Definition sdio.h:47
@ SDIO_CMDOP_CLKHOLD
Definition sdio.h:52
@ SDIO_CMDOP_MULTI_BLOCK
Definition sdio.h:40
@ __SDIO_CMDOP_RESP_SHORT_CRC
Definition sdio.h:48
vsf_sdio_irq_mask_t
Definition sdio.h:78
@ SDIO_IRQ_MASK_HOST_DATA_DONE
Definition sdio.h:80
@ SDIO_IRQ_MASK_HOST_RESP_DONE
Definition sdio.h:79
@ SDIO_REQSTS_BUSY
Definition sdio.h:91
@ SDIO_REQSTS_DATA_BUSY
Definition sdio.h:90
@ SDIO_REQSTS_DONE
Definition sdio.h:86
@ SDIO_REQSTS_ERR_RESP_CRC
Definition sdio.h:88
@ SDIO_REQSTS_ERR_RESP_NONE
Definition sdio.h:87
@ SDIO_REQSTS_ERR_DATA_CRC
Definition sdio.h:89
#define NULL
Definition lvgl.h:26
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
Definition vsf_template_sdio.h:787
uint32_t max_freq_hz
Definition vsf_template_sdio.h:796
sdio configuration
Definition vsf_template_sdio.h:901
#define VSF_SDIO_CFG_MODE_CHECK_UNIQUE
Definition sdio.c:285
#define VSF_SDIO_CFG_IRQ_MASK_CHECK_UNIQUE
Definition sdio.c:286
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
@ SDIO_CMDOP_RESP_BUSY
Definition vsf_template_sdio.h:715
@ SDIO_IRQ_MASK_HOST_DATA_ABORT
Definition vsf_template_sdio.h:755
@ SDIO_MODE_SLAVE
Definition vsf_template_sdio.h:691
@ SDIO_MODE_HOST
Definition vsf_template_sdio.h:690
vsf_sdio_ctrl_t
SDIO control commands for hardware-specific operations.
Definition vsf_template_sdio.h:813
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
Generated from commit: vsfteam/vsf@b2e9e8a