ena: Amazon Elastic Network Adapter (ENA) native driver
[vpp.git] / src / plugins / dev_ena / ena_aenq_defs.h
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright(c) 2023 Cisco Systems, Inc.
3  */
4
5 #ifndef _ENA_AENQ_DEFS_H_
6 #define _ENA_AENQ_DEFS_H_
7
8 #include <vppinfra/clib.h>
9 #include <vppinfra/error_bootstrap.h>
10
11 #define foreach_aenq_group                                                    \
12   _ (0, LINK_CHANGE)                                                          \
13   _ (1, FATAL_ERROR)                                                          \
14   _ (2, WARNING)                                                              \
15   _ (3, NOTIFICATION)                                                         \
16   _ (4, KEEP_ALIVE)                                                           \
17   _ (5, REFRESH_CAPABILITIES)                                                 \
18   _ (6, CONF_NOTIFICATIONS)
19
20 #define foreach_aenq_syndrome                                                 \
21   _ (0, SUSPEND)                                                              \
22   _ (1, RESUME)                                                               \
23   _ (2, UPDATE_HINTS)
24
25 typedef enum
26 {
27 #define _(v, n) ENA_AENQ_GROUP_##n = (v),
28   foreach_aenq_group
29 #undef _
30 } ena_aenq_group_t;
31
32 typedef enum
33 {
34 #define _(v, n) ENA_AENQ_SYNDROME_##n = (v),
35   foreach_aenq_syndrome
36 #undef _
37 } ena_aenq_syndrome_t;
38
39 typedef struct
40 {
41   ena_aenq_group_t group : 16;
42   ena_aenq_syndrome_t syndrome : 16;
43
44   union
45   {
46     struct
47     {
48       u8 phase : 1;
49     };
50     u8 flags;
51   };
52   u8 reserved1[3];
53
54   union
55   {
56     u64 timestamp;
57     struct
58     {
59       u32 timestamp_low;
60       u32 timestamp_high;
61     };
62   };
63
64   union
65   {
66     u32 data[12];
67
68     struct
69     {
70       union
71       {
72         struct
73         {
74           u32 link_status : 1;
75         };
76         u32 flags;
77       };
78     } link_change;
79
80     struct
81     {
82       union
83       {
84         u64 rx_drops;
85         struct
86         {
87           u32 rx_drops_low;
88           u32 rx_drops_high;
89         };
90       };
91
92       union
93       {
94         u64 tx_drops;
95         struct
96         {
97           u32 tx_drops_low;
98           u32 tx_drops_high;
99         };
100       };
101     } keep_alive;
102   };
103 } __clib_packed ena_aenq_entry_t;
104
105 STATIC_ASSERT_SIZEOF (ena_aenq_entry_t, 64);
106
107 #endif /* _ENA_AENQ_DEFS_H_ */