AM243x MCU+ SDK  09.02.00
enet_types.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) Texas Instruments Incorporated 2020
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
45 #ifndef ENET_TYPES_H_
46 #define ENET_TYPES_H_
47 
48 /* ========================================================================== */
49 /* Include Files */
50 /* ========================================================================== */
51 
52 #include <stdint.h>
53 #include <stdbool.h>
54 #include <drivers/hw_include/csl_types.h>
55 
56 #ifdef __cplusplus
57 extern "C" {
58 #endif
59 
60 /* ========================================================================== */
61 /* Macros */
62 /* ========================================================================== */
63 
73 /* Enet driver error codes are same as CSL's to maintain consistency */
74 
76 #define ENET_SOK (CSL_PASS)
77 
79 #define ENET_SINPROGRESS (1)
80 
82 #define ENET_EFAIL (CSL_EFAIL)
83 
85 #define ENET_EBADARGS (CSL_EBADARGS)
86 
88 #define ENET_EINVALIDPARAMS (CSL_EINVALID_PARAMS)
89 
91 #define ENET_ETIMEOUT (CSL_ETIMEOUT)
92 
94 #define ENET_EALLOC (CSL_EALLOC)
95 
97 #define ENET_EUNEXPECTED (CSL_EALLOC - 1)
98 
100 #define ENET_EBUSY (CSL_EALLOC - 2)
101 
103 #define ENET_EALREADYOPEN (CSL_EALLOC - 3)
104 
106 #define ENET_EPERM (CSL_EALLOC - 4)
107 
109 #define ENET_ENOTSUPPORTED (CSL_EALLOC - 5)
110 
112 #define ENET_ENOTFOUND (CSL_EALLOC - 6)
113 
115 #define ENET_EUNKNOWNIOCTL (CSL_EALLOC - 7)
116 
118 #define ENET_EMALFORMEDIOCTL (CSL_EALLOC - 8)
119 
123 #define ENET_ARRAYSIZE(x) (sizeof(x) / sizeof(x[0]))
124 
126 #define ENET_BIT(n) (1U << (n))
127 
129 #define ENET_GET_BIT(val, n) (((val) & ENET_BIT(n)) >> (n))
130 
132 #define ENET_IS_BIT_SET(val, n) (((val) & ENET_BIT(n)) != 0U)
133 
135 #define ENET_NOT_ZERO(val) ((uint32_t)0U != (uint32_t)(val))
136 
138 #define ENET_FEXT(reg, PER_REG_FIELD) \
139  (((reg) & PER_REG_FIELD##_MASK) >> PER_REG_FIELD##_SHIFT)
140 
142 #define ENET_FINS(reg, PER_REG_FIELD, val) \
143  ((reg) = ((reg) & ~PER_REG_FIELD##_MASK) \
144  | (((val) << PER_REG_FIELD##_SHIFT) & PER_REG_FIELD##_MASK))
145 
147 #define ENET_DIV_ROUNDUP(val, div) (((val) + (div) - 1) / (div))
148 
150 #define ENET_VERSION_NONE (0xFFFFFFFFU)
151 
153 #define ENET_MAC_ADDR_LEN (6U)
154 
156 #define ENET_OUI_ADDR_LEN (3U)
157 
159 #define ENET_IPv4_ADDR_LEN (4U)
160 
162 #define ENET_IPv6_ADDR_LEN (16U)
163 
165 #define ENET_PRI_NUM (8U)
166 
168 #define ENET_PRI_MIN (0U)
169 
171 #define ENET_PRI_MAX (ENET_PRI_NUM - 1U)
172 
174 #define ENET_TOS_PRI_NUM (64U)
175 
177 #define ENET_TOS_PRI_MIN (0U)
178 
180 #define ENET_TOS_PRI_MAX (ENET_TOS_PRI_NUM - 1U)
181 
183 #define ENET_VLAN_ID_MAX (4095U)
184 
186 #define ENET_ETHERTYPE_PTP (0x88F7U)
187 
189 #define ENET_RX_MTU_MAX (2016U)
190 
191 /* ========================================================================== */
192 /* Structures and Enums */
193 /* ========================================================================== */
194 
198 typedef enum Enet_Type_e
199 {
202 
205 
208 
211 
214 
217 
220 
223 
226 } Enet_Type;
227 
229 #define ENET_TYPE_NUM (ENET_TYPE_COUNT + 1U)
230 
234 typedef enum Enet_Magic_e
235 {
237  ENET_MAGIC = 0xABABABABU,
238 
241 } Enet_Magic;
242 
246 typedef enum Enet_CrcType_e
247 {
250 
253 } Enet_CrcType;
254 
264 typedef enum Enet_Event_e
265 {
268 
274 
277 
280 
283 
286 
289 
297 
300 
303 
306  ENET_EVT_ANY = 0xFFFFFFFFU,
307 } Enet_Event;
308 
318 typedef struct Enet_Version_s
319 {
321  uint32_t maj;
322 
324  uint32_t min;
325 
327  uint32_t rtl;
328 
330  uint32_t id;
331 
333  uint32_t other1;
334 
336  uint32_t other2;
337 } Enet_Version;
338 
342 typedef enum Enet_Speed_e
343 {
346 
349 
352 
355 } Enet_Speed;
356 
360 typedef enum Enet_Duplexity_e
361 {
364 
367 
371 
375 typedef enum Enet_VlanTagType_e
376 {
379 
383 
387 typedef struct Enet_VlanTag_s
388 {
390  uint16_t tpid;
391 
393  uint8_t pcp;
394 
396  uint8_t dei;
397 
399  uint16_t vlanId;
400 
403 } Enet_VlanTag;
404 
408 typedef enum Enet_MacPort_e
409 {
412 
415 
418 
421 
424 
427 
430 
433 
436 
439 } Enet_MacPort;
440 
451 typedef void (*Enet_EventCallback)(Enet_Event evt,
452  uint32_t evtNum,
453  void *evtCbArgs,
454  void *arg1,
455  void *arg2);
456 
457 typedef void (*Enet_notifyCallback)(void *pArg);
458 
459 typedef struct Enet_notify_t
460 {
462  void* cbArg;
463 } Enet_notify_t;
464 
466 #define ENET_MAC_PORT_NUM ((uint32_t)ENET_MAC_PORT_LAST + 1U)
467 
474 #define ENET_MACPORT_NORM(n) ((n) - ENET_MAC_PORT_FIRST)
475 
482 #define ENET_MACPORT_DENORM(n) ((Enet_MacPort)((n) + ENET_MAC_PORT_FIRST))
483 
491 #define ENET_MACPORT_ID(n) ((n) - ENET_MAC_PORT_FIRST + 1U)
492 
494 #define ENET_MAC_PORT_INV ((Enet_MacPort)0xFFFFU)
495 
497 #define ENET_TRAFFIC_CLASS_INV ((uint32_t)0xFFFFU)
498 
504 #define ENET_MACPORT_MASK(n) (ENET_BIT(ENET_MACPORT_NORM(n)))
505 
506 /* ========================================================================== */
507 /* Global Variables Declarations */
508 /* ========================================================================== */
509 
510 /* None */
511 
512 /* ========================================================================== */
513 /* Function Declarations */
514 /* ========================================================================== */
515 
523 static inline bool Enet_isCpswFamily(Enet_Type enetType);
524 
532 static inline bool Enet_isIcssFamily(Enet_Type enetType);
533 
534 /* ========================================================================== */
535 /* Deprecated Function Declarations */
536 /* ========================================================================== */
537 
538 /* None */
539 
540 /* ========================================================================== */
541 /* Static Function Definitions */
542 /* ========================================================================== */
543 
544 static inline bool Enet_isCpswFamily(Enet_Type enetType)
545 {
546  return ((enetType == ENET_GMAC_3G) ||
547  (enetType == ENET_CPSW_2G) ||
548  (enetType == ENET_CPSW_3G) ||
549  (enetType == ENET_CPSW_5G) ||
550  (enetType == ENET_CPSW_9G));
551 }
552 
553 static inline bool Enet_isIcssFamily(Enet_Type enetType)
554 {
555  return ((enetType == ENET_ICSSG_DUALMAC) ||
556  (enetType == ENET_ICSSG_SWITCH));
557 }
558 
559 #ifdef __cplusplus
560 }
561 #endif
562 
563 #endif /* ENET_TYPES_H_ */
564 
Enet_notify_t::cbArg
void * cbArg
Definition: enet_types.h:462
Enet_VlanTag::vlanId
uint16_t vlanId
Definition: enet_types.h:399
ENET_EVT_TIMESTAMP_TX
@ ENET_EVT_TIMESTAMP_TX
Definition: enet_types.h:296
ENET_MAC_PORT_3
@ ENET_MAC_PORT_3
Definition: enet_types.h:420
ENET_CPSW_5G
@ ENET_CPSW_5G
Definition: enet_types.h:219
ENET_VLAN_TAG_TYPE_INNER
@ ENET_VLAN_TAG_TYPE_INNER
Definition: enet_types.h:378
Enet_VlanTagType
Enet_VlanTagType
Double tagging VLAN type.
Definition: enet_types.h:376
Enet_Speed
Enet_Speed
MAC interface speed.
Definition: enet_types.h:343
ENET_CRC_ETHERNET
@ ENET_CRC_ETHERNET
Definition: enet_types.h:249
ENET_MAC_PORT_LAST
@ ENET_MAC_PORT_LAST
Definition: enet_types.h:438
ENET_MAC_PORT_4
@ ENET_MAC_PORT_4
Definition: enet_types.h:423
Enet_Version::other1
uint32_t other1
Definition: enet_types.h:333
ENET_EVT_TIMESTAMP_SWPUSH
@ ENET_EVT_TIMESTAMP_SWPUSH
Definition: enet_types.h:276
ENET_MAC_PORT_8
@ ENET_MAC_PORT_8
Definition: enet_types.h:435
Enet_isCpswFamily
static bool Enet_isCpswFamily(Enet_Type enetType)
Check if Ethernet peripheral type is part of CPSW family.
Definition: enet_types.h:544
ENET_MAC_PORT_1
@ ENET_MAC_PORT_1
Definition: enet_types.h:414
Enet_MacPort
Enet_MacPort
MAC port.
Definition: enet_types.h:409
Enet_Event
Enet_Event
Ethernet events.
Definition: enet_types.h:265
ENET_MAC_PORT_6
@ ENET_MAC_PORT_6
Definition: enet_types.h:429
Enet_notify_t
Definition: enet_types.h:460
ENET_DUPLEX_AUTO
@ ENET_DUPLEX_AUTO
Definition: enet_types.h:369
ENET_GMAC_3G
@ ENET_GMAC_3G
Definition: enet_types.h:210
ENET_ICSSG_SWITCH
@ ENET_ICSSG_SWITCH
Definition: enet_types.h:207
ENET_EVT_TIMESTAMP_ROLLOVER
@ ENET_EVT_TIMESTAMP_ROLLOVER
Definition: enet_types.h:282
ENET_EVT_ASYNC_CMD_RESP
@ ENET_EVT_ASYNC_CMD_RESP
Definition: enet_types.h:273
ENET_BIT
#define ENET_BIT(n)
Macro to set bit at given bit position.
Definition: enet_types.h:126
ENET_CPSW_2G
@ ENET_CPSW_2G
Definition: enet_types.h:213
ENET_SPEED_10MBIT
@ ENET_SPEED_10MBIT
Definition: enet_types.h:345
ENET_MAGIC
@ ENET_MAGIC
Definition: enet_types.h:237
Enet_Magic
Enet_Magic
Enet driver magic value, used to indicate if driver is open or not.
Definition: enet_types.h:235
Enet_VlanTag
VLAN tag.
Definition: enet_types.h:388
ENET_DUPLEX_FULL
@ ENET_DUPLEX_FULL
Definition: enet_types.h:366
ENET_CPSW_3G
@ ENET_CPSW_3G
Definition: enet_types.h:216
Enet_VlanTag::tagType
Enet_VlanTagType tagType
Definition: enet_types.h:402
ENET_MAC_PORT_FIRST
@ ENET_MAC_PORT_FIRST
Definition: enet_types.h:411
ENET_CRC_CASTAGNOLI
@ ENET_CRC_CASTAGNOLI
Definition: enet_types.h:252
ENET_NULL
@ ENET_NULL
Definition: enet_types.h:201
Enet_Version::other2
uint32_t other2
Definition: enet_types.h:336
Enet_Duplexity
Enet_Duplexity
MAC interface duplexity.
Definition: enet_types.h:361
ENET_NO_MAGIC
@ ENET_NO_MAGIC
Definition: enet_types.h:240
Enet_VlanTag::dei
uint8_t dei
Definition: enet_types.h:396
Enet_isIcssFamily
static bool Enet_isIcssFamily(Enet_Type enetType)
Check if Ethernet peripheral type is part of ICSS family.
Definition: enet_types.h:553
Enet_Version
Version of a peripheral or module.
Definition: enet_types.h:319
Enet_Type
Enet_Type
Ethernet peripheral type.
Definition: enet_types.h:199
ENET_EVT_ANY
@ ENET_EVT_ANY
Definition: enet_types.h:306
ENET_SPEED_100MBIT
@ ENET_SPEED_100MBIT
Definition: enet_types.h:348
ENET_TYPE_COUNT
@ ENET_TYPE_COUNT
Definition: enet_types.h:225
Enet_Version::maj
uint32_t maj
Definition: enet_types.h:321
ENET_VLAN_TAG_TYPE_OUTER
@ ENET_VLAN_TAG_TYPE_OUTER
Definition: enet_types.h:381
ENET_DUPLEX_HALF
@ ENET_DUPLEX_HALF
Definition: enet_types.h:363
ENET_MAC_PORT_2
@ ENET_MAC_PORT_2
Definition: enet_types.h:417
ENET_ICSSG_DUALMAC
@ ENET_ICSSG_DUALMAC
Definition: enet_types.h:204
Enet_notify_t::cbFxn
Enet_notifyCallback cbFxn
Definition: enet_types.h:461
ENET_MAC_PORT_7
@ ENET_MAC_PORT_7
Definition: enet_types.h:432
ENET_SPEED_AUTO
@ ENET_SPEED_AUTO
Definition: enet_types.h:354
Enet_EventCallback
void(* Enet_EventCallback)(Enet_Event evt, uint32_t evtNum, void *evtCbArgs, void *arg1, void *arg2)
Event callback.
Definition: enet_types.h:451
ENET_SPEED_1GBIT
@ ENET_SPEED_1GBIT
Definition: enet_types.h:351
ENET_EVT_TIMESTAMP_HALFROLLOVER
@ ENET_EVT_TIMESTAMP_HALFROLLOVER
Definition: enet_types.h:285
Enet_Version::id
uint32_t id
Definition: enet_types.h:330
Enet_Version::rtl
uint32_t rtl
Definition: enet_types.h:327
ENET_EVT_TIMESTAMP_HWPUSH
@ ENET_EVT_TIMESTAMP_HWPUSH
Definition: enet_types.h:279
ENET_EVT_TIMESTAMP_RX
@ ENET_EVT_TIMESTAMP_RX
Definition: enet_types.h:288
ENET_CPSW_9G
@ ENET_CPSW_9G
Definition: enet_types.h:222
Enet_notifyCallback
void(* Enet_notifyCallback)(void *pArg)
Definition: enet_types.h:457
Enet_CrcType
Enet_CrcType
CRC type.
Definition: enet_types.h:247
ENET_EVT_NONE
@ ENET_EVT_NONE
Definition: enet_types.h:267
ENET_EVT_TIMESTAMP_HOSTTX
@ ENET_EVT_TIMESTAMP_HOSTTX
Definition: enet_types.h:302
ENET_MAC_PORT_5
@ ENET_MAC_PORT_5
Definition: enet_types.h:426
ENET_EVT_TIMESTAMP_COMP
@ ENET_EVT_TIMESTAMP_COMP
Definition: enet_types.h:299
Enet_Version::min
uint32_t min
Definition: enet_types.h:324
Enet_VlanTag::pcp
uint8_t pcp
Definition: enet_types.h:393
Enet_VlanTag::tpid
uint16_t tpid
Definition: enet_types.h:390