AM64x MCU+ SDK  08.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 
188 /* ========================================================================== */
189 /* Structures and Enums */
190 /* ========================================================================== */
191 
195 typedef enum Enet_Type_e
196 {
199 
202 
205 
208 
211 
214 
217 
220 
223 } Enet_Type;
224 
226 #define ENET_TYPE_NUM (ENET_TYPE_COUNT + 1U)
227 
231 typedef enum Enet_Magic_e
232 {
234  ENET_MAGIC = 0xABABABABU,
235 
238 } Enet_Magic;
239 
243 typedef enum Enet_CrcType_e
244 {
247 
250 } Enet_CrcType;
251 
261 typedef enum Enet_Event_e
262 {
265 
271 
274 
277 
280 
283 
286 
294 
297 
300 
303  ENET_EVT_ANY = 0xFFFFFFFFU,
304 } Enet_Event;
305 
315 typedef struct Enet_Version_s
316 {
318  uint32_t maj;
319 
321  uint32_t min;
322 
324  uint32_t rtl;
325 
327  uint32_t id;
328 
330  uint32_t other1;
331 
333  uint32_t other2;
334 } Enet_Version;
335 
339 typedef enum Enet_Speed_e
340 {
343 
346 
349 
352 } Enet_Speed;
353 
357 typedef enum Enet_Duplexity_e
358 {
361 
364 
368 
372 typedef enum Enet_VlanTagType_e
373 {
376 
380 
384 typedef struct Enet_VlanTag_s
385 {
387  uint16_t tpid;
388 
390  uint8_t pcp;
391 
393  uint8_t dei;
394 
396  uint16_t vlanId;
397 
400 } Enet_VlanTag;
401 
405 typedef enum Enet_MacPort_e
406 {
409 
412 
415 
418 
421 
424 
427 
430 
433 
436 } Enet_MacPort;
437 
448 typedef void (*Enet_EventCallback)(Enet_Event evt,
449  uint32_t evtNum,
450  void *evtCbArgs,
451  void *arg1,
452  void *arg2);
453 
455 #define ENET_MAC_PORT_NUM ((uint32_t)ENET_MAC_PORT_LAST + 1U)
456 
463 #define ENET_MACPORT_NORM(n) ((n) - ENET_MAC_PORT_FIRST)
464 
471 #define ENET_MACPORT_DENORM(n) ((Enet_MacPort)((n) + ENET_MAC_PORT_FIRST))
472 
480 #define ENET_MACPORT_ID(n) ((n) - ENET_MAC_PORT_FIRST + 1U)
481 
483 #define ENET_MAC_PORT_INV ((Enet_MacPort)0xFFFFU)
484 
486 #define ENET_TRAFFIC_CLASS_INV ((uint32_t)0xFFFFU)
487 
493 #define ENET_MACPORT_MASK(n) (ENET_BIT(ENET_MACPORT_NORM(n)))
494 
495 /* ========================================================================== */
496 /* Global Variables Declarations */
497 /* ========================================================================== */
498 
499 /* None */
500 
501 /* ========================================================================== */
502 /* Function Declarations */
503 /* ========================================================================== */
504 
512 static inline bool Enet_isCpswFamily(Enet_Type enetType);
513 
521 static inline bool Enet_isIcssFamily(Enet_Type enetType);
522 
523 /* ========================================================================== */
524 /* Deprecated Function Declarations */
525 /* ========================================================================== */
526 
527 /* None */
528 
529 /* ========================================================================== */
530 /* Static Function Definitions */
531 /* ========================================================================== */
532 
533 static inline bool Enet_isCpswFamily(Enet_Type enetType)
534 {
535  return ((enetType == ENET_GMAC_3G) ||
536  (enetType == ENET_CPSW_2G) ||
537  (enetType == ENET_CPSW_3G) ||
538  (enetType == ENET_CPSW_5G) ||
539  (enetType == ENET_CPSW_9G));
540 }
541 
542 static inline bool Enet_isIcssFamily(Enet_Type enetType)
543 {
544  return ((enetType == ENET_ICSSG_DUALMAC) ||
545  (enetType == ENET_ICSSG_SWITCH));
546 }
547 
548 #ifdef __cplusplus
549 }
550 #endif
551 
552 #endif /* ENET_TYPES_H_ */
553 
Enet_VlanTag::vlanId
uint16_t vlanId
Definition: enet_types.h:396
ENET_EVT_TIMESTAMP_TX
@ ENET_EVT_TIMESTAMP_TX
Definition: enet_types.h:293
ENET_MAC_PORT_3
@ ENET_MAC_PORT_3
Definition: enet_types.h:417
ENET_CPSW_5G
@ ENET_CPSW_5G
Definition: enet_types.h:216
ENET_VLAN_TAG_TYPE_INNER
@ ENET_VLAN_TAG_TYPE_INNER
Definition: enet_types.h:375
Enet_VlanTagType
Enet_VlanTagType
Double tagging VLAN type.
Definition: enet_types.h:373
Enet_Speed
Enet_Speed
MAC interface speed.
Definition: enet_types.h:340
ENET_CRC_ETHERNET
@ ENET_CRC_ETHERNET
Definition: enet_types.h:246
ENET_MAC_PORT_LAST
@ ENET_MAC_PORT_LAST
Definition: enet_types.h:435
ENET_MAC_PORT_4
@ ENET_MAC_PORT_4
Definition: enet_types.h:420
Enet_Version::other1
uint32_t other1
Definition: enet_types.h:330
ENET_EVT_TIMESTAMP_SWPUSH
@ ENET_EVT_TIMESTAMP_SWPUSH
Definition: enet_types.h:273
ENET_MAC_PORT_8
@ ENET_MAC_PORT_8
Definition: enet_types.h:432
Enet_isCpswFamily
static bool Enet_isCpswFamily(Enet_Type enetType)
Check if Ethernet peripheral type is part of CPSW family.
Definition: enet_types.h:533
ENET_MAC_PORT_1
@ ENET_MAC_PORT_1
Definition: enet_types.h:411
Enet_MacPort
Enet_MacPort
MAC port.
Definition: enet_types.h:406
Enet_Event
Enet_Event
Ethernet events.
Definition: enet_types.h:262
ENET_MAC_PORT_6
@ ENET_MAC_PORT_6
Definition: enet_types.h:426
ENET_DUPLEX_AUTO
@ ENET_DUPLEX_AUTO
Definition: enet_types.h:366
ENET_GMAC_3G
@ ENET_GMAC_3G
Definition: enet_types.h:207
ENET_ICSSG_SWITCH
@ ENET_ICSSG_SWITCH
Definition: enet_types.h:204
ENET_EVT_TIMESTAMP_ROLLOVER
@ ENET_EVT_TIMESTAMP_ROLLOVER
Definition: enet_types.h:279
ENET_EVT_ASYNC_CMD_RESP
@ ENET_EVT_ASYNC_CMD_RESP
Definition: enet_types.h:270
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:210
ENET_SPEED_10MBIT
@ ENET_SPEED_10MBIT
Definition: enet_types.h:342
ENET_MAGIC
@ ENET_MAGIC
Definition: enet_types.h:234
Enet_Magic
Enet_Magic
Enet driver magic value, used to indicate if driver is open or not.
Definition: enet_types.h:232
Enet_VlanTag
VLAN tag.
Definition: enet_types.h:385
ENET_DUPLEX_FULL
@ ENET_DUPLEX_FULL
Definition: enet_types.h:363
ENET_CPSW_3G
@ ENET_CPSW_3G
Definition: enet_types.h:213
Enet_VlanTag::tagType
Enet_VlanTagType tagType
Definition: enet_types.h:399
ENET_MAC_PORT_FIRST
@ ENET_MAC_PORT_FIRST
Definition: enet_types.h:408
ENET_CRC_CASTAGNOLI
@ ENET_CRC_CASTAGNOLI
Definition: enet_types.h:249
ENET_NULL
@ ENET_NULL
Definition: enet_types.h:198
Enet_Version::other2
uint32_t other2
Definition: enet_types.h:333
Enet_Duplexity
Enet_Duplexity
MAC interface duplexity.
Definition: enet_types.h:358
ENET_NO_MAGIC
@ ENET_NO_MAGIC
Definition: enet_types.h:237
Enet_VlanTag::dei
uint8_t dei
Definition: enet_types.h:393
Enet_isIcssFamily
static bool Enet_isIcssFamily(Enet_Type enetType)
Check if Ethernet peripheral type is part of ICSS family.
Definition: enet_types.h:542
Enet_Version
Version of a peripheral or module.
Definition: enet_types.h:316
Enet_Type
Enet_Type
Ethernet peripheral type.
Definition: enet_types.h:196
ENET_EVT_ANY
@ ENET_EVT_ANY
Definition: enet_types.h:303
ENET_SPEED_100MBIT
@ ENET_SPEED_100MBIT
Definition: enet_types.h:345
ENET_TYPE_COUNT
@ ENET_TYPE_COUNT
Definition: enet_types.h:222
Enet_Version::maj
uint32_t maj
Definition: enet_types.h:318
ENET_VLAN_TAG_TYPE_OUTER
@ ENET_VLAN_TAG_TYPE_OUTER
Definition: enet_types.h:378
ENET_DUPLEX_HALF
@ ENET_DUPLEX_HALF
Definition: enet_types.h:360
ENET_MAC_PORT_2
@ ENET_MAC_PORT_2
Definition: enet_types.h:414
ENET_ICSSG_DUALMAC
@ ENET_ICSSG_DUALMAC
Definition: enet_types.h:201
ENET_MAC_PORT_7
@ ENET_MAC_PORT_7
Definition: enet_types.h:429
ENET_SPEED_AUTO
@ ENET_SPEED_AUTO
Definition: enet_types.h:351
Enet_EventCallback
void(* Enet_EventCallback)(Enet_Event evt, uint32_t evtNum, void *evtCbArgs, void *arg1, void *arg2)
Event callback.
Definition: enet_types.h:448
ENET_SPEED_1GBIT
@ ENET_SPEED_1GBIT
Definition: enet_types.h:348
ENET_EVT_TIMESTAMP_HALFROLLOVER
@ ENET_EVT_TIMESTAMP_HALFROLLOVER
Definition: enet_types.h:282
Enet_Version::id
uint32_t id
Definition: enet_types.h:327
Enet_Version::rtl
uint32_t rtl
Definition: enet_types.h:324
ENET_EVT_TIMESTAMP_HWPUSH
@ ENET_EVT_TIMESTAMP_HWPUSH
Definition: enet_types.h:276
ENET_EVT_TIMESTAMP_RX
@ ENET_EVT_TIMESTAMP_RX
Definition: enet_types.h:285
ENET_CPSW_9G
@ ENET_CPSW_9G
Definition: enet_types.h:219
Enet_CrcType
Enet_CrcType
CRC type.
Definition: enet_types.h:244
ENET_EVT_NONE
@ ENET_EVT_NONE
Definition: enet_types.h:264
ENET_EVT_TIMESTAMP_HOSTTX
@ ENET_EVT_TIMESTAMP_HOSTTX
Definition: enet_types.h:299
ENET_MAC_PORT_5
@ ENET_MAC_PORT_5
Definition: enet_types.h:423
ENET_EVT_TIMESTAMP_COMP
@ ENET_EVT_TIMESTAMP_COMP
Definition: enet_types.h:296
Enet_Version::min
uint32_t min
Definition: enet_types.h:321
Enet_VlanTag::pcp
uint8_t pcp
Definition: enet_types.h:390
Enet_VlanTag::tpid
uint16_t tpid
Definition: enet_types.h:387