VSF Documented
rng_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_RNG == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#if defined(VSF_RNG_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_RNG_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
24# define vsf_real_rng_t VSF_MCONNECT(VSF_RNG_CFG_IMP_DEVICE_PREFIX, _t)
25# define vsf_real_rng_capability VSF_MCONNECT(VSF_RNG_CFG_IMP_DEVICE_PREFIX, _capability)
26# define vsf_real_rng_ctrl VSF_MCONNECT(VSF_RNG_CFG_IMP_DEVICE_PREFIX, _ctrl)
27#else
28# define vsf_real_rng_t VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_t)
29# define vsf_real_rng_capability VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_capability)
30# define vsf_real_rng_ctrl VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_ctrl)
31#endif
32
33#ifndef VSF_RNG_CFG_REIMPLEMENT_API_CAPABILITY
34# define VSF_RNG_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
35#endif
36
37#ifndef VSF_RNG_CFG_REIMPLEMENT_API_CTRL
38# define VSF_RNG_CFG_REIMPLEMENT_API_CTRL DISABLED
39#endif
40
41#ifdef VSF_RNG_CFG_IMP_REMAP_PREFIX
42# undef VSF_RNG_CFG_REIMPLEMENT_API_CAPABILITY
43# define VSF_RNG_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
44# undef VSF_RNG_CFG_REIMPLEMENT_API_CTRL
45# define VSF_RNG_CFG_REIMPLEMENT_API_CTRL ENABLED
46#endif
47
48/*============================ MACROFIED FUNCTIONS ===========================*/
49/*============================ TYPES =========================================*/
50/*============================ GLOBAL VARIABLES ==============================*/
51/*============================ LOCAL VARIABLES ===============================*/
52/*============================ PROTOTYPES ====================================*/
53/*============================ IMPLEMENTATION ================================*/
54
55#if VSF_RNG_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
56vsf_rng_capability_t vsf_real_rng_capability(vsf_real_rng_t *rng_ptr)
57{
58 vsf_rng_capability_t rng_capability = {
59 0,
60 };
61
62 return rng_capability;
63}
64#endif
65
66#if VSF_RNG_CFG_REIMPLEMENT_API_CTRL == DISABLED
67vsf_err_t vsf_real_rng_ctrl(vsf_real_rng_t *rng_ptr, vsf_rng_ctrl_t ctrl, void *param)
68{
69 VSF_HAL_ASSERT(NULL != rng_ptr);
70
71 // Default implementation: not supported, trigger assertion
73
75}
76#endif
77
78/*============================ MACROS ========================================*/
79
80#undef VSF_RNG_CFG_REIMPLEMENT_TYPE_CAPABILITY
81#undef VSF_RNG_CFG_REIMPLEMENT_TYPE_CTRL
82#undef VSF_RNG_CFG_REIMPLEMENT_API_CAPABILITY
83#undef VSF_RNG_CFG_REIMPLEMENT_API_CTRL
84#undef vsf_real_rng_t
85#undef vsf_real_rng_capability
86#undef vsf_real_rng_ctrl
87
88/*============================ MACROS ========================================*/
89
90#ifdef VSF_RNG_CFG_IMP_REMAP_PREFIX
91
92# define vsf_imp_rng_t VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_t)
93# define vsf_imp_rng_init VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_init)
94# define vsf_imp_rng_fini VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_fini)
95# define vsf_imp_rng_capability VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_capability)
96# define vsf_imp_rng_generate_request VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_generate_request)
97# define vsf_imp_rng_ctrl VSF_MCONNECT(VSF_RNG_CFG_IMP_PREFIX, _rng_ctrl)
98
99# define vsf_remap_rng_t VSF_MCONNECT(VSF_RNG_CFG_IMP_REMAP_PREFIX, _rng_t)
100# define vsf_remap_rng_init VSF_MCONNECT(VSF_RNG_CFG_IMP_REMAP_PREFIX, _rng_init)
101# define vsf_remap_rng_fini VSF_MCONNECT(VSF_RNG_CFG_IMP_REMAP_PREFIX, _rng_fini)
102# define vsf_remap_rng_capability VSF_MCONNECT(VSF_RNG_CFG_IMP_REMAP_PREFIX, _rng_capability)
103# define vsf_remap_rng_generate_request VSF_MCONNECT(VSF_RNG_CFG_IMP_REMAP_PREFIX, _rng_generate_request)
104# define vsf_remap_rng_ctrl VSF_MCONNECT(VSF_RNG_CFG_IMP_REMAP_PREFIX, _rng_ctrl)
105
106# define VSF_RNG_CFG_IMP_REMAP_FUNCTIONS \
107 vsf_err_t vsf_imp_rng_init(vsf_imp_rng_t *rng_ptr) \
108 { \
109 VSF_HAL_ASSERT(rng_ptr != NULL); \
110 return vsf_remap_rng_init(rng_ptr); \
111 } \
112 void vsf_imp_rng_fini(vsf_imp_rng_t *rng_ptr) \
113 { \
114 VSF_HAL_ASSERT(rng_ptr != NULL); \
115 vsf_remap_rng_fini(rng_ptr); \
116 } \
117 vsf_err_t vsf_imp_rng_generate_request(vsf_imp_rng_t *rng_ptr, \
118 uint32_t *buffer, uint32_t num, void *param, \
119 vsf_rng_on_ready_callback_t * on_ready_cb) \
120 { \
121 VSF_HAL_ASSERT(rng_ptr != NULL); \
122 return vsf_remap_rng_generate_request(rng_ptr, buffer, num, param, on_ready_cb); \
123 } \
124 vsf_rng_capability_t vsf_imp_rng_capability(vsf_imp_rng_t *rng_ptr) \
125 { \
126 VSF_HAL_ASSERT(rng_ptr != NULL); \
127 return vsf_remap_rng_capability(rng_ptr); \
128 } \
129 vsf_err_t vsf_imp_rng_ctrl(vsf_imp_rng_t *rng_ptr, vsf_rng_ctrl_t ctrl, void *param) \
130 { \
131 VSF_HAL_ASSERT(rng_ptr != NULL); \
132 return vsf_remap_rng_ctrl(rng_ptr, ctrl, param); \
133 }
134#endif
135
136/*============================ GLOBAL VARIABLES ==============================*/
137
138#define VSF_HAL_TEMPLATE_IMP_NAME _rng
139#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _RNG
140
141#if !defined(VSF_RNG_CFG_IMP_PREFIX) && !defined(VSF_RNG_CFG_IMP_DEVICE_PREFIX)
142# error "Please define VSF_RNG_CFG_IMP_PREFIX in rng driver"
143#endif
144
145#if !defined(VSF_RNG_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_RNG_CFG_IMP_DEVICE_UPCASE_PREFIX)
146# error "Please define VSF_RNG_CFG_IMP_UPCASE_PREFIX in rng driver"
147#endif
148
149#ifndef VSF_RNG_CFG_IMP_COUNT_MASK_PREFIX
150# define VSF_RNG_CFG_IMP_COUNT_MASK_PREFIX VSF_RNG_CFG_IMP_UPCASE_PREFIX
151#endif
152
153#ifdef VSF_RNG_CFG_IMP_REMAP_FUNCTIONS
154# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_RNG_CFG_IMP_REMAP_FUNCTIONS
155#endif
156
158
159#undef VSF_RNG_CFG_IMP_PREFIX
160#undef VSF_RNG_CFG_IMP_COUNT_MASK_PREFIX
161#undef VSF_RNG_CFG_IMP_UPCASE_PREFIX
162#undef VSF_RNG_CFG_IMP_DEVICE_PREFIX
163#undef VSF_RNG_CFG_IMP_DEVICE_UPCASE_PREFIX
164#undef VSF_RNG_CFG_IMP_LV0
165
166#undef vsf_imp_rng_t
167#undef vsf_imp_rng_init
168#undef vsf_imp_rng_fini
169#undef vsf_imp_rng_capability
170#undef vsf_imp_rng_generate_request
171#undef vsf_imp_rng_ctrl
172
173#undef vsf_remap_rng_t
174#undef vsf_remap_rng_init
175#undef vsf_remap_rng_fini
176#undef vsf_remap_rng_capability
177#undef vsf_remap_rng_generate_request
178#undef vsf_remap_rng_ctrl
179
180#undef VSF_HAL_TEMPLATE_IMP_NAME
181#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
182
183/*============================ STATIC ASSERTIONS ==============================*/
184
185/* User-extensible macros for custom mode and IRQ mask values
186 * Users can define these macros before including this template to append
187 * their custom enum values to the uniqueness checks.
188 *
189 * Check modes for custom values:
190 * VSF_RNG_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
191 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
192 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
193 * VSF_RNG_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
194 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
195 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
196 *
197 * Example usage in vendor driver:
198 * #define VSF_RNG_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
199 * #define VSF_RNG_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
200 * #define VSF_RNG_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
201 * #define VSF_RNG_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
202 * #include "hal/driver/common/rng/rng_template.inc"
203 */
204
205
206#ifdef VSF_RNG_CFG_MODE_CHECK_UNIQUE
207/* Default mode lists - can be redefined by users before including this file */
208/* Note: RNG typically doesn't have mode enums, but custom modes can be added */
209
210#ifdef VSF_RNG_CUSTOM_MODE_VALUES
211/* Check uniqueness among custom mode values using user-specified check mode */
213#endif
214#endif /* VSF_RNG_CFG_MODE_CHECK_UNIQUE */
215
216/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
217
218#ifdef VSF_RNG_CFG_IRQ_MASK_CHECK_UNIQUE
219
220#ifdef VSF_RNG_CUSTOM_IRQ_MASK_VALUES
221/* Check uniqueness among custom IRQ mask values using user-specified check mode */
223#endif
224
225/* Note: RNG typically doesn't have a standard IRQ mask enum, but custom IRQ masks can be added */
226#endif /* VSF_RNG_CFG_IRQ_MASK_CHECK_UNIQUE */
227
228#undef VSF_RNG_CFG_MODE_CHECK_UNIQUE
229#undef VSF_RNG_CFG_IRQ_MASK_CHECK_UNIQUE
230#undef VSF_RNG_CUSTOM_MODE_VALUES
231#undef VSF_RNG_CUSTOM_IRQ_MASK_VALUES
232
233#endif /* VSF_HAL_USE_RNG */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define NULL
Definition lvgl.h:26
Definition vsf_template_rng.h:180
#define VSF_RNG_CFG_IRQ_MASK_CHECK_UNIQUE
Definition rng.c:152
#define VSF_RNG_CFG_MODE_CHECK_UNIQUE
Definition rng.c:151
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_rng_ctrl_t
Predefined VSF RNG control commands that can be reimplemented in specific HAL drivers.
Definition vsf_template_rng.h:154
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
Generated from commit: vsfteam/vsf@45cae1d