VSF Documented
dma_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_DMA == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#define vsf_real_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_t)
24#define vsf_real_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_capability)
25#define vsf_real_dma_get_configuration VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_get_configuration)
26#define vsf_real_dma_channel_get_configuration VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_get_configuration)
27#define vsf_real_dma_channel_sg_config_desc VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_sg_config_desc)
28#define vsf_real_dma_channel_sg_start VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_sg_start)
29
30#ifndef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
31# define VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
32#endif
33
34#ifndef VSF_DMA_CFG_REIMPLEMENT_API_SG_CONFIG_DESC
35# define VSF_DMA_CFG_REIMPLEMENT_API_SG_CONFIG_DESC DISABLED
36#endif
37
38#ifndef VSF_DMA_CFG_REIMPLEMENT_API_SG_START
39# define VSF_DMA_CFG_REIMPLEMENT_API_SG_START DISABLED
40#endif
41
42#ifndef VSF_DMA_CFG_REIMPLEMENT_API_GET_CONFIGURATION
43# define VSF_DMA_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
44#endif
45
46#ifndef VSF_DMA_CFG_REIMPLEMENT_API_CHANNEL_GET_CONFIGURATION
47# define VSF_DMA_CFG_REIMPLEMENT_API_CHANNEL_GET_CONFIGURATION DISABLED
48#endif
49
50#ifdef VSF_DMA_CFG_IMP_REMAP_PREFIX
51# undef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
52# define VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
53# undef VSF_DMA_CFG_REIMPLEMENT_API_GET_CONFIGURATION
54# define VSF_DMA_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
55# undef VSF_DMA_CFG_REIMPLEMENT_API_CHANNEL_GET_CONFIGURATION
56# define VSF_DMA_CFG_REIMPLEMENT_API_CHANNEL_GET_CONFIGURATION ENABLED
57#endif
58
59#if VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
60# ifndef VSF_DMA_CFG_CAPABILITY_IRQ_MASK
61# define VSF_DMA_CFG_CAPABILITY_IRQ_MASK VSF_DMA_IRQ_ALL_BITS_MASK
62# endif
63# ifndef VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT
64# define VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT 0xFFFFFFFF
65# endif
66# ifndef VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT
67# define VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT 8
68# endif
69#endif
70
71/*============================ LOCAL VARIABLES ===============================*/
72/*============================ IMPLEMENTATION ================================*/
73
74#if VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
75vsf_dma_capability_t vsf_real_dma_capability(vsf_real_dma_t *dma_ptr)
76{
77 vsf_dma_capability_t dma_capability = {
78 .irq_mask = VSF_DMA_CFG_CAPABILITY_IRQ_MASK,
79 .max_request_count = VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT,
80 .channel_count = VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT,
81 };
82
83 return dma_capability;
84}
85#endif
86
87#if VSF_DMA_CFG_REIMPLEMENT_API_SG_CONFIG == DISABLED
88vsf_err_t vsf_real_dma_channel_sg_config_desc(vsf_real_dma_t *dma_ptr, uint8_t channel, vsf_dma_isr_t isr,
89 vsf_dma_channel_sg_desc_t *sg_desc_ptr, uint32_t sg_count)
90{
91 VSF_HAL_ASSERT(dma_ptr != NULL);
92 VSF_HAL_ASSERT(sg_desc_ptr != NULL);
93 VSF_HAL_ASSERT(sg_count > 0);
94
95 if ((NULL == dma_ptr) || (NULL == sg_desc_ptr) || (sg_count == 0)) {
97 }
98
99 // TODO
100 return VSF_ERR_NOT_SUPPORT;
101}
102#endif
103
104#if VSF_DMA_CFG_REIMPLEMENT_API_SG_START == DISABLED
105vsf_err_t vsf_real_dma_channel_sg_start(vsf_real_dma_t *dma_ptr, uint8_t channel)
106{
107 VSF_HAL_ASSERT(dma_ptr != NULL);
108
109 if (NULL == dma_ptr) {
111 }
112
113 // TODO
114 return VSF_ERR_NOT_SUPPORT;
115}
116#endif
117
118#if VSF_DMA_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
119vsf_err_t vsf_real_dma_get_configuration(vsf_real_dma_t *dma_ptr, vsf_dma_cfg_t *cfg_ptr)
120{
121 VSF_HAL_ASSERT(NULL != dma_ptr);
122 VSF_HAL_ASSERT(NULL != cfg_ptr);
123
124 // Default implementation: not supported, trigger assertion
126
127 return VSF_ERR_NOT_SUPPORT;
128}
129#endif
130
131#if VSF_DMA_CFG_REIMPLEMENT_API_CHANNEL_GET_CONFIGURATION == DISABLED
132vsf_err_t vsf_real_dma_channel_get_configuration(vsf_real_dma_t *dma_ptr, uint8_t channel, vsf_dma_channel_cfg_t *cfg_ptr)
133{
134 VSF_HAL_ASSERT(NULL != dma_ptr);
135 VSF_HAL_ASSERT(NULL != cfg_ptr);
136
137 // Default implementation: not supported, trigger assertion
139
140 return VSF_ERR_NOT_SUPPORT;
141}
142#endif
143
144/*============================ MACROS ========================================*/
145
146#undef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
147#undef VSF_DMA_CFG_REIMPLEMENT_API_GET_CONFIGURATION
148#undef VSF_DMA_CFG_REIMPLEMENT_API_CHANNEL_GET_CONFIGURATION
149#undef VSF_DMA_CFG_CAPABILITY_IRQ_MASK
150#undef VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT
151#undef VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT
152#undef vsf_real_dma_t
153#undef vsf_real_dma_capability
154#undef vsf_real_dma_get_configuration
155#undef vsf_real_dma_channel_get_configuration
156
157/*============================ LOCAL VARIABLES ===============================*/
158/*============================ IMPLEMENTATION ================================*/
159/*============================ MACROS ========================================*/
160
161
162#ifdef VSF_DMA_CFG_IMP_REMAP_PREFIX
163# define vsf_imp_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_t)
164# define vsf_imp_dma_init VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_init)
165# define vsf_imp_dma_fini VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_fini)
166# define vsf_imp_dma_get_configuration VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_get_configuration)
167# define vsf_imp_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_capability)
168# define vsf_imp_dma_channel_request VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_request)
169# define vsf_imp_dma_channel_release VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_release)
170# define vsf_imp_dma_channel_config VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_config)
171# define vsf_imp_dma_channel_get_configuration VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_get_configuration)
172# define vsf_imp_dma_channel_start VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_start)
173# define vsf_imp_dma_channel_cancel VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_cancel)
174# define vsf_imp_dma_channel_get_transferred_count VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_get_transferred_count)
175# define vsf_imp_dma_channel_status VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_status)
176
177# define vsf_remap_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_t)
178# define vsf_remap_dma_init VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_init)
179# define vsf_remap_dma_fini VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_fini)
180# define vsf_remap_dma_get_configuration VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_get_configuration)
181# define vsf_remap_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_capability)
182# define vsf_remap_dma_channel_request VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_request)
183# define vsf_remap_dma_channel_release VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_release)
184# define vsf_remap_dma_channel_config VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_config)
185# define vsf_remap_dma_channel_get_configuration VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_get_configuration)
186# define vsf_remap_dma_channel_start VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_start)
187# define vsf_remap_dma_channel_cancel VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_cancel)
188# define vsf_remap_dma_channel_get_transferred_count VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_get_transferred_count)
189# define vsf_remap_dma_channel_status VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_status)
190
191# define VSF_DMA_CFG_IMP_REMAP_FUNCTIONS \
192 vsf_err_t vsf_imp_dma_init(vsf_imp_dma_t *dma_ptr) \
193 { \
194 VSF_HAL_ASSERT(dma_ptr != NULL); \
195 return vsf_remap_dma_init(dma_ptr); \
196 } \
197 void vsf_imp_dma_fini(vsf_imp_dma_t *dma_ptr) \
198 { \
199 VSF_HAL_ASSERT(dma_ptr != NULL); \
200 vsf_remap_dma_fini(dma_ptr); \
201 } \
202 vsf_err_t vsf_imp_dma_get_configuration(vsf_imp_dma_t *dma_ptr, vsf_dma_cfg_t *cfg_ptr) \
203 { \
204 VSF_HAL_ASSERT(dma_ptr != NULL); \
205 VSF_HAL_ASSERT(cfg_ptr != NULL); \
206 return vsf_remap_dma_get_configuration(dma_ptr, cfg_ptr); \
207 } \
208 vsf_dma_capability_t vsf_imp_dma_capability(vsf_imp_dma_t *dma_ptr) \
209 { \
210 VSF_HAL_ASSERT(dma_ptr != NULL); \
211 return vsf_remap_dma_capability(dma_ptr); \
212 } \
213 int8_t vsf_imp_dma_channel_request(vsf_imp_dma_t *dma_ptr, void *filter_param) \
214 { \
215 VSF_HAL_ASSERT(dma_ptr != NULL); \
216 return vsf_remap_dma_channel_request(dma_ptr, filter_param); \
217 } \
218 void vsf_imp_dma_channel_release(vsf_imp_dma_t *dma_ptr, int8_t channel) \
219 { \
220 VSF_HAL_ASSERT(dma_ptr != NULL); \
221 vsf_remap_dma_channel_release(dma_ptr, channel); \
222 } \
223 vsf_err_t vsf_imp_dma_channel_config(vsf_imp_dma_t *dma_ptr, int8_t channel, \
224 vsf_dma_channel_cfg_t *cfg_ptr) \
225 { \
226 VSF_HAL_ASSERT(dma_ptr != NULL); \
227 return vsf_remap_dma_channel_config(dma_ptr, channel, cfg_ptr); \
228 } \
229 vsf_err_t vsf_imp_dma_channel_get_configuration(vsf_imp_dma_t *dma_ptr, int8_t channel, \
230 vsf_dma_channel_cfg_t *cfg_ptr) \
231 { \
232 VSF_HAL_ASSERT(dma_ptr != NULL); \
233 VSF_HAL_ASSERT(cfg_ptr != NULL); \
234 return vsf_remap_dma_channel_get_configuration(dma_ptr, channel, cfg_ptr); \
235 } \
236 vsf_err_t vsf_imp_dma_channel_start(vsf_imp_dma_t *dma_ptr, int8_t channel, \
237 uint32_t src_address, uint32_t dst_address, \
238 uint32_t count) \
239 { \
240 VSF_HAL_ASSERT(dma_ptr != NULL); \
241 return vsf_remap_dma_channel_start(dma_ptr, channel, src_address, \
242 dst_address, count); \
243 } \
244 vsf_err_t vsf_imp_dma_channel_cancel(vsf_imp_dma_t *dma_ptr, int8_t channel) \
245 { \
246 VSF_HAL_ASSERT(dma_ptr != NULL); \
247 return vsf_remap_dma_channel_cancel(dma_ptr, channel); \
248 } \
249 vsf_err_t vsf_imp_dma_channel_get_transferred_count(vsf_imp_dma_t *dma_ptr, \
250 int8_t channel) \
251 { \
252 VSF_HAL_ASSERT(dma_ptr != NULL); \
253 return vsf_remap_dma_channel_get_transferred_count(dma_ptr, channel); \
254 } \
255 vsf_dma_channel_status_t vsf_imp_dma_channel_status(vsf_imp_dma_t *dma_ptr, \
256 int8_t channel) \
257 { \
258 VSF_HAL_ASSERT(dma_ptr != NULL); \
259 return vsf_remap_dma_channel_status(dma_ptr, channel); \
260 }
261#endif
262
263
264/*============================ GLOBAL VARIABLES ==============================*/
265
266#define VSF_HAL_TEMPLATE_IMP_NAME _dma
267#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _DMA
268
269#if !defined(VSF_DMA_CFG_IMP_PREFIX) && !defined(VSF_DMA_CFG_IMP_DEVICE_PREFIX)
270# error "Please define VSF_DMA_CFG_IMP_PREFIX in dma driver"
271#endif
272
273#if !defined(VSF_DMA_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_DMA_CFG_IMP_DEVICE_UPCASE_PREFIX)
274# error "Please define VSF_DMA_CFG_IMP_UPCASE_PREFIX in dma driver"
275#endif
276
277#ifndef VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX
278# define VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX VSF_DMA_CFG_IMP_UPCASE_PREFIX
279#endif
280
281#ifdef VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
282# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
283#endif
284
286
287#undef VSF_DMA_CFG_IMP_PREFIX
288#undef VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX
289#undef VSF_DMA_CFG_IMP_UPCASE_PREFIX
290#undef VSF_DMA_CFG_IMP_DEVICE_PREFIX
291#undef VSF_DMA_CFG_IMP_DEVICE_UPCASE_PREFIX
292#undef VSF_DMA_CFG_IMP_LV0
293#undef VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
294#undef VSF_DMA_CFG_IMP_HAS_OP
295#undef VSF_DMA_CFG_IMP_EXTERN_OP
296
297#undef vsf_imp_dma_t
298#undef vsf_imp_dma_init
299#undef vsf_imp_dma_fini
300#undef vsf_imp_dma_get_configuration
301#undef vsf_imp_dma_capability
302#undef vsf_imp_dma_channel_request
303#undef vsf_imp_dma_channel_release
304#undef vsf_imp_dma_channel_config
305#undef vsf_imp_dma_channel_get_configuration
306#undef vsf_imp_dma_channel_start
307#undef vsf_imp_dma_channel_cancel
308#undef vsf_imp_dma_channel_get_transferred_count
309#undef vsf_imp_dma_channel_status
310
311#undef vsf_remap_dma_t
312#undef vsf_remap_dma_init
313#undef vsf_remap_dma_fini
314#undef vsf_remap_dma_get_configuration
315#undef vsf_remap_dma_capability
316#undef vsf_remap_dma_channel_request
317#undef vsf_remap_dma_channel_release
318#undef vsf_remap_dma_channel_config
319#undef vsf_remap_dma_channel_get_configuration
320#undef vsf_remap_dma_channel_start
321#undef vsf_remap_dma_channel_cancel
322#undef vsf_remap_dma_channel_get_transferred_count
323#undef vsf_remap_dma_channel_status
324
325#endif /* VSF_HAL_USE_DMA */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_ERR_INVALID_PARAMETER
invalid parameter
Definition __type.h:52
#define NULL
Definition lvgl.h:26
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_dma.h:480
uint32_t max_request_count
Definition vsf_template_dma.h:486
Configuration structure for DMA.
Definition vsf_template_dma.h:399
dma configuration
Definition vsf_template_dma.h:435
DMA scatter-gather descriptor structure.
Definition vsf_template_dma.h:459
Definition vsf_template_dma.h:429
vsf_adc_isr_t isr
Definition adc.h:107
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
Generated from commit: vsfteam/vsf@74aa6ce