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
26#ifndef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
27# define VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
28#endif
29
30#ifdef VSF_DMA_CFG_IMP_REMAP_PREFIX
31# undef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
32# define VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
33#endif
34
35#if VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
36# ifndef VSF_DMA_CFG_CAPABILITY_IRQ_MASK
37# define VSF_DMA_CFG_CAPABILITY_IRQ_MASK VSF_DMA_IRQ_ALL_BITS_MASK
38# endif
39# ifndef VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT
40# define VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT 0xFFFFFFFF
41# endif
42# ifndef VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT
43# define VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT 8
44# endif
45#endif
46
47/*============================ LOCAL VARIABLES ===============================*/
48/*============================ IMPLEMENTATION ================================*/
49
50#if VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
51vsf_dma_capability_t vsf_real_dma_capability(vsf_real_dma_t *dma_ptr)
52{
53 vsf_dma_capability_t dma_capability = {
54 .irq_mask = VSF_DMA_CFG_CAPABILITY_IRQ_MASK,
55 .max_request_count = VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT,
56 .channel_count = VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT,
57 };
58
59 return dma_capability;
60}
61#endif
62
63/*============================ MACROS ========================================*/
64
65#undef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
66#undef VSF_DMA_CFG_CAPABILITY_IRQ_MASK
67#undef VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT
68#undef VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT
69#undef vsf_real_dma_t
70#undef vsf_real_dma_capability
71
72/*============================ LOCAL VARIABLES ===============================*/
73/*============================ IMPLEMENTATION ================================*/
74/*============================ MACROS ========================================*/
75
76
77#ifdef VSF_DMA_CFG_IMP_REMAP_PREFIX
78# define vsf_imp_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_t)
79# define vsf_imp_dma_init VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_init)
80# define vsf_imp_dma_fini VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_fini)
81# define vsf_imp_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_capability)
82# define vsf_imp_dma_channel_request VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_request)
83# define vsf_imp_dma_channel_release VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_release)
84# define vsf_imp_dma_channel_config VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_config)
85# define vsf_imp_dma_channel_start VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_start)
86# define vsf_imp_dma_channel_cancel VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_cancel)
87# define vsf_imp_dma_channel_get_transferred_count VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_get_transferred_count)
88# define vsf_imp_dma_channel_status VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_status)
89
90# define vsf_remap_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_t)
91# define vsf_remap_dma_init VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_init)
92# define vsf_remap_dma_fini VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_fini)
93# define vsf_remap_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_capability)
94# define vsf_remap_dma_channel_request VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_request)
95# define vsf_remap_dma_channel_release VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_release)
96# define vsf_remap_dma_channel_config VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_config)
97# define vsf_remap_dma_channel_start VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_start)
98# define vsf_remap_dma_channel_cancel VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_cancel)
99# define vsf_remap_dma_channel_get_transferred_count VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_get_transferred_count)
100# define vsf_remap_dma_channel_status VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_status)
101
102# define VSF_DMA_CFG_IMP_REMAP_FUNCTIONS \
103 vsf_err_t vsf_imp_dma_init(vsf_imp_dma_t *dma_ptr) \
104 { \
105 VSF_HAL_ASSERT(dma_ptr != NULL); \
106 return vsf_remap_dma_init(dma_ptr); \
107 } \
108 void vsf_imp_dma_fini(vsf_imp_dma_t *dma_ptr) \
109 { \
110 VSF_HAL_ASSERT(dma_ptr != NULL); \
111 vsf_remap_dma_fini(dma_ptr); \
112 } \
113 vsf_dma_capability_t vsf_imp_dma_capability(vsf_imp_dma_t *dma_ptr) \
114 { \
115 VSF_HAL_ASSERT(dma_ptr != NULL); \
116 return vsf_remap_dma_capability(dma_ptr); \
117 } \
118 int8_t vsf_imp_dma_channel_request(vsf_imp_dma_t *dma_ptr, void *filter_param) \
119 { \
120 VSF_HAL_ASSERT(dma_ptr != NULL); \
121 return vsf_remap_dma_channel_request(dma_ptr, filter_param); \
122 } \
123 void vsf_imp_dma_channel_release(vsf_imp_dma_t *dma_ptr, int8_t channel) \
124 { \
125 VSF_HAL_ASSERT(dma_ptr != NULL); \
126 vsf_remap_dma_channel_release(dma_ptr, channel); \
127 } \
128 vsf_err_t vsf_imp_dma_channel_config(vsf_imp_dma_t *dma_ptr, int8_t channel, \
129 vsf_dma_channel_cfg_t *cfg_ptr) \
130 { \
131 VSF_HAL_ASSERT(dma_ptr != NULL); \
132 return vsf_remap_dma_channel_config(dma_ptr, channel, cfg_ptr); \
133 } \
134 vsf_err_t vsf_imp_dma_channel_start(vsf_imp_dma_t *dma_ptr, int8_t channel, \
135 uint32_t src_address, uint32_t dst_address, \
136 uint32_t count) \
137 { \
138 VSF_HAL_ASSERT(dma_ptr != NULL); \
139 return vsf_remap_dma_channel_start(dma_ptr, channel, src_address, \
140 dst_address, count); \
141 } \
142 vsf_err_t vsf_imp_dma_channel_cancel(vsf_imp_dma_t *dma_ptr, int8_t channel) \
143 { \
144 VSF_HAL_ASSERT(dma_ptr != NULL); \
145 return vsf_remap_dma_channel_cancel(dma_ptr, channel); \
146 } \
147 vsf_err_t vsf_imp_dma_channel_get_transferred_count(vsf_imp_dma_t *dma_ptr, \
148 int8_t channel) \
149 { \
150 VSF_HAL_ASSERT(dma_ptr != NULL); \
151 return vsf_remap_dma_channel_get_transferred_count(dma_ptr, channel); \
152 } \
153 vsf_dma_channel_status_t vsf_imp_dma_channel_status(vsf_imp_dma_t *dma_ptr, \
154 int8_t channel) \
155 { \
156 VSF_HAL_ASSERT(dma_ptr != NULL); \
157 return vsf_remap_dma_channel_status(dma_ptr, channel); \
158 }
159#endif
160
161
162/*============================ GLOBAL VARIABLES ==============================*/
163
164#define VSF_HAL_TEMPLATE_IMP_NAME _dma
165#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _DMA
166
167#ifndef VSF_DMA_CFG_IMP_PREFIX
168# error "Please define VSF_DMA_CFG_IMP_PREFIX in dma driver"
169#endif
170
171#ifndef VSF_DMA_CFG_IMP_UPCASE_PREFIX
172# error "Please define VSF_DMA_CFG_IMP_UPCASE_PREFIX in dma driver"
173#endif
174
175#ifndef VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX
176# define VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX VSF_DMA_CFG_IMP_UPCASE_PREFIX
177#endif
178
179#ifdef VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
180# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
181#endif
182
184
185#undef VSF_DMA_CFG_IMP_PREFIX
186#undef VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX
187#undef VSF_DMA_CFG_IMP_UPCASE_PREFIX
188#undef VSF_DMA_CFG_IMP_LV0
189#undef VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
190#undef VSF_DMA_CFG_IMP_HAS_OP
191#undef VSF_DMA_CFG_IMP_EXTERN_OP
192
193#undef vsf_imp_dma_t
194#undef vsf_imp_dma_init
195#undef vsf_imp_dma_fini
196#undef vsf_imp_dma_capability
197#undef vsf_imp_dma_channel_request
198#undef vsf_imp_dma_channel_release
199#undef vsf_imp_dma_channel_config
200#undef vsf_imp_dma_channel_start
201#undef vsf_imp_dma_channel_cancel
202#undef vsf_imp_dma_channel_get_transferred_count
203#undef vsf_imp_dma_channel_status
204
205#undef vsf_remap_dma_t
206#undef vsf_remap_dma_init
207#undef vsf_remap_dma_fini
208#undef vsf_remap_dma_capability
209#undef vsf_remap_dma_channel_request
210#undef vsf_remap_dma_channel_release
211#undef vsf_remap_dma_channel_config
212#undef vsf_remap_dma_channel_start
213#undef vsf_remap_dma_channel_cancel
214#undef vsf_remap_dma_channel_get_transferred_count
215#undef vsf_remap_dma_channel_status
216
217#endif /* VSF_HAL_USE_DMA */
Definition vsf_template_dma.h:281
uint32_t max_request_count
Definition vsf_template_dma.h:287