VSF Documented
eth_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_ETH == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ ETHROS ========================================*/
22
23#if defined(VSF_ETH_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_ETH_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
24# define vsf_real_eth_t VSF_MCONNECT(VSF_ETH_CFG_IMP_DEVICE_PREFIX, _t)
25# define vsf_real_eth_capability VSF_MCONNECT(VSF_ETH_CFG_IMP_DEVICE_PREFIX, _capability)
26# define vsf_real_eth_get_configuration VSF_MCONNECT(VSF_ETH_CFG_IMP_DEVICE_PREFIX, _get_configuration)
27#else
28# define vsf_real_eth_t VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_t)
29# define vsf_real_eth_capability VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_capability)
30# define vsf_real_eth_get_configuration VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_get_configuration)
31#endif
32
33#ifndef VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY
34# define VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
35#endif
36
37#ifndef VSF_ETH_CFG_REIMPLEMENT_API_GET_CONFIGURATION
38# define VSF_ETH_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
39#endif
40
41#ifdef VSF_ETH_CFG_IMP_REMAP_PREFIX
42# undef VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY
43# define VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
44# undef VSF_ETH_CFG_REIMPLEMENT_API_GET_CONFIGURATION
45# define VSF_ETH_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
46# undef VSF_ETH_CFG_REIMPLEMENT_API_IRQ_CLEAR
47# define VSF_ETH_CFG_REIMPLEMENT_API_IRQ_CLEAR ENABLED
48#endif
49
50#if VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
51#endif
52
53/*============================ LOCAL VARIABLES ===============================*/
54/*============================ IMPLEMENTATION ================================*/
55
56#if VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
57vsf_eth_capability_t vsf_real_eth_capability(vsf_real_eth_t *eth_ptr)
58{
59 vsf_eth_capability_t eth_capability = {
60 0
61 };
62
63 return eth_capability;
64}
65#endif
66
67#if VSF_ETH_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
68vsf_err_t vsf_real_eth_get_configuration(vsf_real_eth_t *eth_ptr, vsf_eth_cfg_t *cfg_ptr)
69{
70 VSF_HAL_ASSERT(NULL != eth_ptr);
71 VSF_HAL_ASSERT(NULL != cfg_ptr);
72
73 // Default implementation: not supported, trigger assertion
75
77}
78#endif
79
80#if VSF_ETH_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
81vsf_eth_irq_mask_t vsf_real_eth_irq_clear(vsf_real_eth_t *eth_ptr, vsf_eth_irq_mask_t irq_mask)
82{
83 VSF_HAL_ASSERT(NULL != eth_ptr);
84
85 // Default implementation: not supported, trigger assertion
87
88 return 0;
89}
90#endif
91
92/*============================ ETHROS ========================================*/
93
94#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_BUF_DESC
95#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_BUF_MODE
96#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_CAPABILITY
97#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_CFG
98#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_CTRL
99#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_IRQ_MASK
100#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_MODE
101#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_PHY_MODE
102#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_RECV_BUF_DESC
103#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_SEND_BUF_DESC
104#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_SG_RECV_BUF
105#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_SG_SEND_BUF
106#undef VSF_ETH_CFG_REIMPLEMENT_TYPE_STATUS
107#undef VSF_ETH_CFG_REIMPLEMENT_API_CAPABILITY
108#undef VSF_ETH_CFG_REIMPLEMENT_API_GET_CONFIGURATION
109#undef VSF_ETH_CFG_REIMPLEMENT_API_IRQ_CLEAR
110
111#undef vsf_real_eth_t
112#undef vsf_real_eth_capability
113#undef vsf_real_eth_get_configuration
114#undef vsf_real_eth_irq_clear
115#undef vsf_real_eth_phy_read_reg
116#undef vsf_real_eth_phy_write_reg
117#undef vsf_real_eth_phy_set_mode
118#undef vsf_real_eth_phy_get_link_status
119
120/*============================ ETHROS ========================================*/
121
122#ifdef VSF_ETH_CFG_IMP_REMAP_PREFIX
123
124# define vsf_imp_eth_t VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_t)
125# define vsf_imp_eth_init VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_init)
126# define vsf_imp_eth_fini VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_fini)
127# define vsf_imp_eth_enable VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_enable)
128# define vsf_imp_eth_disable VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_disable)
129# define vsf_imp_eth_capability VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_capability)
130# define vsf_imp_eth_status VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_status)
131# define vsf_imp_eth_send_request VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_send_request)
132# define vsf_imp_eth_recv_request VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_recv_request)
133# define vsf_imp_eth_send_sg_request VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_send_sg_request)
134# define vsf_imp_eth_recv_sg_request VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_recv_sg_request)
135# define vsf_imp_eth_ctrl VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_ctrl)
136# define vsf_imp_eth_phy_read_reg VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_phy_read_reg)
137# define vsf_imp_eth_phy_write_reg VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_phy_write_reg)
138# define vsf_imp_eth_phy_set_mode VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_phy_set_mode)
139# define vsf_imp_eth_phy_get_link_status VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_phy_get_link_status)
140# define vsf_imp_eth_get_configuration VSF_MCONNECT(VSF_ETH_CFG_IMP_PREFIX, _eth_get_configuration)
141
142# define vsf_remap_eth_t VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_t)
143# define vsf_remap_eth_init VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_init)
144# define vsf_remap_eth_fini VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_fini)
145# define vsf_remap_eth_enable VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_enable)
146# define vsf_remap_eth_disable VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_disable)
147# define vsf_remap_eth_capability VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_capability)
148# define vsf_remap_eth_status VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_status)
149# define vsf_remap_eth_send_request VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_send_request)
150# define vsf_remap_eth_recv_request VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_recv_request)
151# define vsf_remap_eth_send_sg_request VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_send_sg_request)
152# define vsf_remap_eth_recv_sg_request VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_recv_sg_request)
153# define vsf_remap_eth_ctrl VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_ctrl)
154# define vsf_remap_eth_phy_read_reg VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_phy_read_reg)
155# define vsf_remap_eth_phy_write_reg VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_phy_write_reg)
156# define vsf_remap_eth_phy_set_mode VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_phy_set_mode)
157# define vsf_remap_eth_phy_get_link_status VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_phy_get_link_status)
158# define vsf_remap_eth_get_configuration VSF_MCONNECT(VSF_ETH_CFG_IMP_REMAP_PREFIX, _eth_get_configuration)
159
160# define VSF_ETH_CFG_IMP_REMAP_FUNCTIONS \
161 vsf_err_t vsf_imp_eth_init(vsf_imp_eth_t *eth_ptr, vsf_eth_cfg_t *cfg_ptr) \
162 { \
163 VSF_HAL_ASSERT(eth_ptr != NULL); \
164 return vsf_remap_eth_init(eth_ptr, cfg_ptr); \
165 } \
166 void vsf_imp_eth_fini(vsf_imp_eth_t *eth_ptr) \
167 { \
168 VSF_HAL_ASSERT(eth_ptr != NULL); \
169 vsf_remap_eth_fini(eth_ptr); \
170 } \
171 fsm_rt_t vsf_imp_eth_enable(vsf_imp_eth_t *eth_ptr) \
172 { \
173 VSF_HAL_ASSERT(eth_ptr != NULL); \
174 return vsf_remap_eth_enable(eth_ptr); \
175 } \
176 fsm_rt_t vsf_imp_eth_disable(vsf_imp_eth_t *eth_ptr) \
177 { \
178 VSF_HAL_ASSERT(eth_ptr != NULL); \
179 return vsf_remap_eth_disable(eth_ptr); \
180 } \
181 vsf_eth_status_t vsf_imp_eth_status(vsf_imp_eth_t *eth_ptr) \
182 { \
183 VSF_HAL_ASSERT(eth_ptr != NULL); \
184 return vsf_remap_eth_status(eth_ptr); \
185 } \
186 vsf_eth_capability_t vsf_imp_eth_capability(vsf_imp_eth_t *eth_ptr) \
187 { \
188 VSF_HAL_ASSERT(eth_ptr != NULL); \
189 return vsf_remap_eth_capability(eth_ptr); \
190 } \
191 vsf_err_t vsf_imp_eth_send_request(vsf_imp_eth_t *eth_ptr, \
192 vsf_eth_send_buf_desc_t *buf_ptr) \
193 { \
194 VSF_HAL_ASSERT(eth_ptr != NULL); \
195 return vsf_remap_eth_send_request(eth_ptr, buf_ptr); \
196 } \
197 vsf_err_t vsf_imp_eth_recv_request(vsf_imp_eth_t *eth_ptr, \
198 vsf_eth_recv_buf_desc_t *buf_ptr) \
199 { \
200 VSF_HAL_ASSERT(eth_ptr != NULL); \
201 return vsf_remap_eth_recv_request(eth_ptr, buf_ptr); \
202 } \
203 vsf_err_t vsf_imp_eth_send_sg_request(vsf_imp_eth_t *eth_ptr, \
204 vsf_eth_send_sg_buf_desc_t *buf_ptr, uint32_t sg_count) \
205 { \
206 VSF_HAL_ASSERT(eth_ptr != NULL); \
207 return vsf_remap_eth_send_sg_request(eth_ptr, buf_ptr, sg_count); \
208 } \
209 vsf_err_t vsf_imp_eth_recv_sg_request(vsf_imp_eth_t *eth_ptr, \
210 vsf_eth_recv_sg_buf_desc_t *buf_ptr, uint32_t sg_count) \
211 { \
212 VSF_HAL_ASSERT(eth_ptr != NULL); \
213 return vsf_remap_eth_recv_sg_request(eth_ptr, buf_ptr, sg_count); \
214 } \
215 vsf_err_t vsf_imp_eth_ctrl(vsf_imp_eth_t *eth_ptr, \
216 vsf_eth_ctrl_t ctrl, void *param) \
217 { \
218 VSF_HAL_ASSERT(eth_ptr != NULL); \
219 return vsf_remap_eth_ctrl(eth_ptr, ctrl, param); \
220 } \
221 vsf_eth_capability_t vsf_imp_eth_capability(vsf_imp_eth_t *eth_ptr) \
222 { \
223 VSF_HAL_ASSERT(eth_ptr != NULL); \
224 return vsf_remap_eth_capability(eth_ptr); \
225 } \
226 vsf_err_t vsf_imp_eth_phy_read_reg(vsf_imp_eth_t *eth_ptr, \
227 uint16_t reg_addr, uint32_t *value_ptr) \
228 { \
229 VSF_HAL_ASSERT(eth_ptr != NULL); \
230 return vsf_remap_eth_phy_read_reg(eth_ptr, reg_addr, value_ptr); \
231 } \
232 vsf_err_t vsf_imp_eth_phy_write_reg(vsf_imp_eth_t *eth_ptr, \
233 uint16_t reg_addr, uint32_t value) \
234 { \
235 VSF_HAL_ASSERT(eth_ptr != NULL); \
236 return vsf_remap_eth_phy_write_reg(eth_ptr, reg_addr, value); \
237 } \
238 vsf_err_t vsf_imp_eth_phy_set_mode(vsf_imp_eth_t *eth_ptr, \
239 vsf_eth_mode_t mode) \
240 { \
241 VSF_HAL_ASSERT(eth_ptr != NULL); \
242 return vsf_remap_eth_phy_set_mode(eth_ptr, mode); \
243 } \
244 vsf_err_t vsf_imp_eth_phy_get_link_status(vsf_imp_eth_t *eth_ptr, \
245 vsf_eth_mode_t * phy_mode_ptr) \
246 { \
247 VSF_HAL_ASSERT(eth_ptr != NULL); \
248 return vsf_remap_eth_phy_get_link_status(eth_ptr, phy_mode_ptr); \
249 } \
250 \
251 vsf_err_t vsf_imp_eth_get_configuration(vsf_imp_eth_t *eth_ptr, \
252 vsf_eth_cfg_t *cfg_ptr) \
253 { \
254 VSF_HAL_ASSERT(eth_ptr != NULL); \
255 return vsf_remap_eth_get_configuration(eth_ptr, cfg_ptr); \
256 }
257#endif
258
259/*============================ GLOBAL VARIABLES ==============================*/
260
261#define VSF_HAL_TEMPLATE_IMP_NAME _eth
262#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _ETH
263
264#if !defined(VSF_ETH_CFG_IMP_PREFIX) && !defined(VSF_ETH_CFG_IMP_DEVICE_PREFIX)
265# error "Please define VSF_ETH_CFG_IMP_PREFIX in eth driver"
266#endif
267
268#if !defined(VSF_ETH_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_ETH_CFG_IMP_DEVICE_UPCASE_PREFIX)
269# error "Please define VSF_ETH_CFG_IMP_UPCASE_PREFIX in eth driver"
270#endif
271
272#ifndef VSF_ETH_CFG_IMP_COUNT_MASK_PREFIX
273# define VSF_ETH_CFG_IMP_COUNT_MASK_PREFIX VSF_ETH_CFG_IMP_UPCASE_PREFIX
274#endif
275
276#ifdef VSF_ETH_CFG_IMP_REMAP_FUNCTIONS
277# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_ETH_CFG_IMP_REMAP_FUNCTIONS
278#endif
279
281
282#undef VSF_ETH_CFG_IMP_PREFIX
283#undef VSF_ETH_CFG_IMP_COUNT_MASK_PREFIX
284#undef VSF_ETH_CFG_IMP_UPCASE_PREFIX
285#undef VSF_ETH_CFG_IMP_DEVICE_PREFIX
286#undef VSF_ETH_CFG_IMP_DEVICE_UPCASE_PREFIX
287#undef VSF_ETH_CFG_IMP_LV0
288#undef VSF_ETH_CFG_IMP_REMAP_FUNCTIONS
289#undef VSF_ETH_CFG_IMP_RENAME_DEVICE_PREFIX
290#undef VSF_ETH_CFG_IMP_HAS_OP
291#undef VSF_ETH_CFG_IMP_EXTERN_OP
292
293#undef vsf_imp_eth_t
294#undef vsf_imp_eth_init
295#undef vsf_imp_eth_fini
296#undef vsf_imp_eth_enable
297#undef vsf_imp_eth_disable
298#undef vsf_imp_eth_status
299#undef vsf_imp_eth_capability
300#undef vsf_imp_eth_send_request
301#undef vsf_imp_eth_recv_request
302#undef vsf_imp_eth_send_sg_request
303#undef vsf_imp_eth_recv_sg_request
304#undef vsf_imp_eth_ctrl
305#undef vsf_imp_eth_phy_read_reg
306#undef vsf_imp_eth_phy_write_reg
307#undef vsf_imp_eth_phy_set_mode
308#undef vsf_imp_eth_phy_get_link_status
309#undef vsf_imp_eth_get_configuration
310
311#undef vsf_remap_eth_t
312#undef vsf_remap_eth_init
313#undef vsf_remap_eth_fini
314#undef vsf_remap_eth_enable
315#undef vsf_remap_eth_disable
316#undef vsf_remap_eth_status
317#undef vsf_remap_eth_capability
318#undef vsf_remap_eth_send_request
319#undef vsf_remap_eth_recv_request
320#undef vsf_remap_eth_send_sg_request
321#undef vsf_remap_eth_recv_sg_request
322#undef vsf_remap_eth_ctrl
323#undef vsf_remap_eth_phy_read_reg
324#undef vsf_remap_eth_phy_write_reg
325#undef vsf_remap_eth_phy_set_mode
326#undef vsf_remap_eth_phy_get_link_status
327#undef vsf_remap_eth_get_configuration
328
329#undef VSF_HAL_TEMPLATE_IMP_NAME
330#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
331
332/*============================ STATIC ASSERTIONS ==============================*/
333
334/* User-extensible macros for custom mode and IRQ mask values
335 * Users can define these macros before including this template to append
336 * their custom enum values to the uniqueness checks.
337 *
338 * Check modes for custom values:
339 * VSF_ETH_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
340 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
341 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
342 * VSF_ETH_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
343 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
344 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
345 *
346 * Example usage in vendor driver:
347 * #define VSF_ETH_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
348 * #define VSF_ETH_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
349 * #define VSF_ETH_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
350 * #define VSF_ETH_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
351 * #include "hal/driver/common/eth/eth_template.inc"
352 */
353
354
355#ifdef VSF_ETH_CFG_MODE_CHECK_UNIQUE
356/* Default mode lists - can be redefined by users before including this file */
357#ifndef VSF_ETH_CHECK_UNIQUE_MODE_OFFLOAD_MODES
358# define VSF_ETH_CHECK_UNIQUE_MODE_OFFLOAD_MODES \
359 VSF_ETH_MODE_TX_CHECKSUM_OFFLOAD, \
360 VSF_ETH_MODE_RX_CHECKSUM_OFFLOAD
361#endif
362
363/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
364/* Check uniqueness within each functional group */
365
366/* Check ETH offload mode uniqueness - all offload modes should have different values
367 * Mandatory: VSF_ETH_MODE_TX_CHECKSUM_OFFLOAD, VSF_ETH_MODE_RX_CHECKSUM_OFFLOAD
368 */
369VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_MODE_CHECK_UNIQUE, VSF_ETH_CHECK_UNIQUE_MODE_OFFLOAD_MODES);
370
371#ifdef VSF_ETH_CUSTOM_MODE_VALUES
372/* Check uniqueness among custom mode values using user-specified check mode */
374#endif
375
378 /* Mandatory modes - always included */
380 /* Standard Optional modes - conditionally included */
382#ifdef VSF_ETH_MODE_UNICAST_FILTER
383 , VSF_ETH_MODE_UNICAST_FILTER
384#endif
385#ifdef VSF_ETH_MODE_MULTICAST_FILTER
386 , VSF_ETH_MODE_MULTICAST_FILTER
387#endif
388#ifdef VSF_ETH_MODE_BROADCAST_FILTER
389 , VSF_ETH_MODE_BROADCAST_FILTER
390#endif
391#ifdef VSF_ETH_MODE_VLAN_TAGGING
392 , VSF_ETH_MODE_VLAN_TAGGING
393#endif
394#ifdef VSF_ETH_MODE_VLAN_FILTERING
395 , VSF_ETH_MODE_VLAN_FILTERING
396#endif
397#ifdef VSF_ETH_MODE_VLAN_STRIPPING
398 , VSF_ETH_MODE_VLAN_STRIPPING
399#endif
400#ifdef VSF_ETH_MODE_VLAN_INSERTION
401 , VSF_ETH_MODE_VLAN_INSERTION
402#endif
403#ifdef VSF_ETH_MODE_JUMBO_FRAME
404 , VSF_ETH_MODE_JUMBO_FRAME
405#endif
406#ifdef VSF_ETH_MODE_FLOW_CONTROL
407 , VSF_ETH_MODE_FLOW_CONTROL
408#endif
409#ifdef VSF_ETH_MODE_PAUSE_FRAME
410 , VSF_ETH_MODE_PAUSE_FRAME
411#endif
412#ifdef VSF_ETH_MODE_PRIORITY_QUEUE
413 , VSF_ETH_MODE_PRIORITY_QUEUE
414#endif
415#ifdef VSF_ETH_MODE_QOS
416 , VSF_ETH_MODE_QOS
417#endif
418#ifdef VSF_ETH_MODE_PTP_TIMESTAMP
419 , VSF_ETH_MODE_PTP_TIMESTAMP
420#endif
421#ifdef VSF_ETH_MODE_TCP_SEGMENTATION
422 , VSF_ETH_MODE_TCP_SEGMENTATION
423#endif
424#ifdef VSF_ETH_MODE_LARGE_RECEIVE
425 , VSF_ETH_MODE_LARGE_RECEIVE
426#endif
427#endif
428 /* User-defined modes - appended by user configuration */
429#ifdef VSF_ETH_CUSTOM_MODE_VALUES
430 , VSF_ETH_CUSTOM_MODE_VALUES
431#endif
432);
433
434#undef VSF_ETH_CHECK_UNIQUE_MODE_OFFLOAD_MODES
435#endif /* VSF_ETH_CFG_MODE_CHECK_UNIQUE */
436
437/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
438
439#ifdef VSF_ETH_CFG_IRQ_MASK_CHECK_UNIQUE
440
441#ifdef VSF_ETH_CUSTOM_IRQ_MASK_VALUES
442/* Check uniqueness among custom IRQ mask values using user-specified check mode */
444#endif
445
446/* Check uniqueness within vsf_eth_irq_mask_t enum */
447
448/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
449 * Mandatory: VSF_ETH_IRQ_MASK_RX_AVAILABLE, VSF_ETH_IRQ_MASK_TX_COMPLETE,
450 * VSF_ETH_IRQ_MASK_SG_RX_AVAILABLE, VSF_ETH_IRQ_MASK_SG_TX_COMPLETE,
451 * VSF_ETH_IRQ_MASK_PHY_LINK_CHANGE, VSF_ETH_IRQ_MASK_ERROR
452 */
455 /* Mandatory IRQ masks - always included */
462 /* User-defined IRQ masks - appended by user configuration */
463#ifdef VSF_ETH_CUSTOM_IRQ_MASK_VALUES
464 , VSF_ETH_CUSTOM_IRQ_MASK_VALUES
465#endif
466);
467#endif /* VSF_ETH_CFG_IRQ_MASK_CHECK_UNIQUE */
468
469#undef VSF_ETH_CFG_MODE_CHECK_UNIQUE
470#undef VSF_ETH_CFG_IRQ_MASK_CHECK_UNIQUE
471#undef VSF_ETH_CUSTOM_MODE_VALUES
472#undef VSF_ETH_CUSTOM_IRQ_MASK_VALUES
473
474/* ==================== PHY MODE UNIQUENESS CHECKS ==================== */
475
476#ifdef VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE
477/* Default PHY mode lists - can be redefined by users before including this file */
478#ifndef VSF_ETH_CHECK_UNIQUE_PHY_MODE_SPEED_MODES
479# define VSF_ETH_CHECK_UNIQUE_PHY_MODE_SPEED_MODES \
480 VSF_ETH_PHY_MODE_SPEED_10M, \
481 VSF_ETH_PHY_MODE_SPEED_100M, \
482 VSF_ETH_PHY_MODE_SPEED_1000M
483#endif
484
485#ifndef VSF_ETH_CHECK_UNIQUE_PHY_MODE_DUPLEX_MODES
486# define VSF_ETH_CHECK_UNIQUE_PHY_MODE_DUPLEX_MODES \
487 VSF_ETH_PHY_MODE_DUPLEX_HALF, \
488 VSF_ETH_PHY_MODE_DUPLEX_FULL
489#endif
490
491#ifndef VSF_ETH_CHECK_UNIQUE_PHY_MODE_LINK_MODES
492# define VSF_ETH_CHECK_UNIQUE_PHY_MODE_LINK_MODES \
493 VSF_ETH_PHY_MODE_LINK_UP
494#endif
495
496/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
497/* Check uniqueness within each functional group */
498
499/* Check PHY speed mode uniqueness - all speed modes should have different values
500 * Mandatory: VSF_ETH_PHY_MODE_SPEED_10M, VSF_ETH_PHY_MODE_SPEED_100M, VSF_ETH_PHY_MODE_SPEED_1000M
501 */
502VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE, VSF_ETH_CHECK_UNIQUE_PHY_MODE_SPEED_MODES);
503
504/* Check PHY duplex mode uniqueness - all duplex modes should have different values
505 * Mandatory: VSF_ETH_PHY_MODE_DUPLEX_HALF, VSF_ETH_PHY_MODE_DUPLEX_FULL
506 */
507VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE, VSF_ETH_CHECK_UNIQUE_PHY_MODE_DUPLEX_MODES);
508
509/* Check PHY link mode uniqueness - all link modes should have different values
510 * Mandatory: VSF_ETH_PHY_MODE_LINK_UP
511 */
512VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE, VSF_ETH_CHECK_UNIQUE_PHY_MODE_LINK_MODES);
513
514#ifdef VSF_ETH_CUSTOM_PHY_MODE_VALUES
515/* Check uniqueness among custom PHY mode values using user-specified check mode */
516VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE, VSF_ETH_CUSTOM_PHY_MODE_VALUES);
517#endif
518
520 VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE,
521 /* Mandatory PHY modes - always included */
525 /* User-defined PHY modes - appended by user configuration */
526#ifdef VSF_ETH_CUSTOM_PHY_MODE_VALUES
527 , VSF_ETH_CUSTOM_PHY_MODE_VALUES
528#endif
529);
530
531#undef VSF_ETH_CHECK_UNIQUE_PHY_MODE_SPEED_MODES
532#undef VSF_ETH_CHECK_UNIQUE_PHY_MODE_DUPLEX_MODES
533#undef VSF_ETH_CHECK_UNIQUE_PHY_MODE_LINK_MODES
534#endif /* VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE */
535
536/* ==================== BUF MODE UNIQUENESS CHECKS ==================== */
537
538#ifdef VSF_ETH_CFG_BUF_MODE_CHECK_UNIQUE
539/* Default buf mode lists - can be redefined by users before including this file */
540
541/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
542/* Check uniqueness within each functional group */
543
544/* Check buf mode uniqueness - all buf modes should have different values
545 * Mandatory: VSF_ETH_BUF_MODE_TX_CHECKSUM_OFFLOAD, VSF_ETH_BUF_MODE_RX_CHECKSUM_OFFLOAD
546 */
548 VSF_ETH_CFG_BUF_MODE_CHECK_UNIQUE,
551);
552
553#ifdef VSF_ETH_CUSTOM_BUF_MODE_VALUES
554/* Check uniqueness among custom buf mode values using user-specified check mode */
555VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_BUF_MODE_CHECK_UNIQUE, VSF_ETH_CUSTOM_BUF_MODE_VALUES);
556#endif
557
559 VSF_ETH_CFG_BUF_MODE_CHECK_UNIQUE,
560 /* Mandatory buf modes - always included */
562 /* User-defined buf modes - appended by user configuration */
563#ifdef VSF_ETH_CUSTOM_BUF_MODE_VALUES
564 , VSF_ETH_CUSTOM_BUF_MODE_VALUES
565#endif
566);
567#endif /* VSF_ETH_CFG_BUF_MODE_CHECK_UNIQUE */
568
569/* ==================== CTRL UNIQUENESS CHECKS ==================== */
570
571#ifdef VSF_ETH_CFG_CTRL_CHECK_UNIQUE
572
573#ifdef VSF_ETH_CUSTOM_CTRL_VALUES
574/* Check uniqueness among custom ctrl values using user-specified check mode */
575VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_ETH_CFG_CTRL_CHECK_UNIQUE, VSF_ETH_CUSTOM_CTRL_VALUES);
576#endif
577
578/* Check ctrl uniqueness - all ctrl values should have different values
579 * Mandatory: VSF_ETH_CTRL_GET_MAC_ADDRESS
580 */
582 VSF_ETH_CFG_CTRL_CHECK_UNIQUE,
583 /* Mandatory ctrls - always included */
585 /* User-defined ctrls - appended by user configuration */
586#ifdef VSF_ETH_CUSTOM_CTRL_VALUES
587 , VSF_ETH_CUSTOM_CTRL_VALUES
588#endif
589);
590#endif /* VSF_ETH_CFG_CTRL_CHECK_UNIQUE */
591
592#undef VSF_ETH_CFG_PHY_MODE_CHECK_UNIQUE
593#undef VSF_ETH_CFG_BUF_MODE_CHECK_UNIQUE
594#undef VSF_ETH_CFG_CTRL_CHECK_UNIQUE
595#undef VSF_ETH_CUSTOM_PHY_MODE_VALUES
596#undef VSF_ETH_CUSTOM_BUF_MODE_VALUES
597#undef VSF_ETH_CUSTOM_CTRL_VALUES
598
599#endif /* VSF_HAL_USE_ETH */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define VSF_ETH_CFG_IRQ_MASK_CHECK_UNIQUE
Definition eth.c:326
#define VSF_ETH_CFG_MODE_CHECK_UNIQUE
Definition eth.c:325
#define NULL
Definition lvgl.h:26
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
Predefined VSF ETH capability that can be reimplemented in specific hal drivers. The vsf_eth_capabili...
Definition vsf_template_eth.h:676
ETH configuration structure.
Definition vsf_template_eth.h:636
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_eth_irq_mask_t
Definition vsf_template_eth.h:577
@ VSF_ETH_IRQ_MASK_ERROR
Error interrupt mask.
Definition vsf_template_eth.h:586
@ VSF_ETH_IRQ_MASK_RX_AVAILABLE
RX data available interrupt mask.
Definition vsf_template_eth.h:578
@ VSF_ETH_IRQ_MASK_PHY_LINK_CHANGE
PHY link change interrupt mask.
Definition vsf_template_eth.h:584
@ VSF_ETH_IRQ_MASK_SG_TX_COMPLETE
Scatter-gather TX complete interrupt mask.
Definition vsf_template_eth.h:582
@ VSF_ETH_IRQ_MASK_SG_RX_AVAILABLE
Scatter-gather RX available interrupt mask.
Definition vsf_template_eth.h:581
@ VSF_ETH_IRQ_MASK_TX_COMPLETE
TX complete interrupt mask.
Definition vsf_template_eth.h:579
@ VSF_ETH_CTRL_GET_MAC_ADDRESS
Get MAC address (uint8_t *)
Definition vsf_template_eth.h:749
@ VSF_ETH_BUF_MODE_TX_CHECKSUM_OFFLOAD
TX checksum offload mode.
Definition vsf_template_eth.h:708
@ VSF_ETH_BUF_MODE_RX_CHECKSUM_OFFLOAD
RX checksum offload mode.
Definition vsf_template_eth.h:709
@ VSF_ETH_MODE_TX_CHECKSUM_OFFLOAD
TX checksum offload mode.
Definition vsf_template_eth.h:463
@ VSF_ETH_MODE_RX_CHECKSUM_OFFLOAD
RX checksum offload mode.
Definition vsf_template_eth.h:464
@ VSF_ETH_PHY_MODE_LINK_UP
Link up mode.
Definition vsf_template_eth.h:394
@ VSF_ETH_PHY_MODE_SPEED_1000M
1000M speed mode
Definition vsf_template_eth.h:389
@ VSF_ETH_PHY_MODE_SPEED_100M
100M speed mode
Definition vsf_template_eth.h:388
@ VSF_ETH_PHY_MODE_SPEED_10M
10M speed mode
Definition vsf_template_eth.h:387
@ VSF_ETH_PHY_MODE_DUPLEX_HALF
Half duplex mode.
Definition vsf_template_eth.h:391
@ VSF_ETH_PHY_MODE_DUPLEX_FULL
Full duplex mode.
Definition vsf_template_eth.h:392
#define __VSF_ETH_CFG_SUPPORT_STANDARD_OPTIONAL
Enable standard optional features support.
Definition vsf_template_eth.h:307
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
Generated from commit: vsfteam/vsf@b2e9e8a