xref: /openbmc/libpldm/include/libpldm/pldm_types.h (revision fdf065b50a498b4581ee39ed5b90b23136916378)
1 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
2 #ifndef PLDM_TYPES_H
3 #define PLDM_TYPES_H
4 
5 #ifdef __cplusplus
6 #include <cstdint>
7 #else
8 #include <stdint.h>
9 #endif
10 
11 typedef union {
12 	uint8_t byte;
13 	struct bits8 {
14 		uint8_t bit0 : 1;
15 		uint8_t bit1 : 1;
16 		uint8_t bit2 : 1;
17 		uint8_t bit3 : 1;
18 		uint8_t bit4 : 1;
19 		uint8_t bit5 : 1;
20 		uint8_t bit6 : 1;
21 		uint8_t bit7 : 1;
22 	} __attribute__((packed)) bits;
23 } bitfield8_t;
24 
25 /** @struct pldm_version
26  *
27  *
28  */
29 typedef struct pldm_version {
30 	uint8_t alpha;
31 	uint8_t update;
32 	uint8_t minor;
33 	uint8_t major;
34 } __attribute__((packed)) ver32_t;
35 
36 typedef uint8_t bool8_t;
37 
38 typedef union {
39 	uint16_t value;
40 	struct bits16 {
41 		uint8_t bit0 : 1;
42 		uint8_t bit1 : 1;
43 		uint8_t bit2 : 1;
44 		uint8_t bit3 : 1;
45 		uint8_t bit4 : 1;
46 		uint8_t bit5 : 1;
47 		uint8_t bit6 : 1;
48 		uint8_t bit7 : 1;
49 		uint8_t bit8 : 1;
50 		uint8_t bit9 : 1;
51 		uint8_t bit10 : 1;
52 		uint8_t bit11 : 1;
53 		uint8_t bit12 : 1;
54 		uint8_t bit13 : 1;
55 		uint8_t bit14 : 1;
56 		uint8_t bit15 : 1;
57 	} __attribute__((packed)) bits;
58 } bitfield16_t;
59 
60 typedef union {
61 	uint32_t value;
62 	struct bits32 {
63 		uint8_t bit0 : 1;
64 		uint8_t bit1 : 1;
65 		uint8_t bit2 : 1;
66 		uint8_t bit3 : 1;
67 		uint8_t bit4 : 1;
68 		uint8_t bit5 : 1;
69 		uint8_t bit6 : 1;
70 		uint8_t bit7 : 1;
71 		uint8_t bit8 : 1;
72 		uint8_t bit9 : 1;
73 		uint8_t bit10 : 1;
74 		uint8_t bit11 : 1;
75 		uint8_t bit12 : 1;
76 		uint8_t bit13 : 1;
77 		uint8_t bit14 : 1;
78 		uint8_t bit15 : 1;
79 		uint8_t bit16 : 1;
80 		uint8_t bit17 : 1;
81 		uint8_t bit18 : 1;
82 		uint8_t bit19 : 1;
83 		uint8_t bit20 : 1;
84 		uint8_t bit21 : 1;
85 		uint8_t bit22 : 1;
86 		uint8_t bit23 : 1;
87 		uint8_t bit24 : 1;
88 		uint8_t bit25 : 1;
89 		uint8_t bit26 : 1;
90 		uint8_t bit27 : 1;
91 		uint8_t bit28 : 1;
92 		uint8_t bit29 : 1;
93 		uint8_t bit30 : 1;
94 		uint8_t bit31 : 1;
95 	} __attribute__((packed)) bits;
96 } bitfield32_t;
97 
98 typedef union {
99 	uint64_t value;
100 	struct bits64 {
101 		uint8_t bit0 : 1;
102 		uint8_t bit1 : 1;
103 		uint8_t bit2 : 1;
104 		uint8_t bit3 : 1;
105 		uint8_t bit4 : 1;
106 		uint8_t bit5 : 1;
107 		uint8_t bit6 : 1;
108 		uint8_t bit7 : 1;
109 		uint8_t bit8 : 1;
110 		uint8_t bit9 : 1;
111 		uint8_t bit10 : 1;
112 		uint8_t bit11 : 1;
113 		uint8_t bit12 : 1;
114 		uint8_t bit13 : 1;
115 		uint8_t bit14 : 1;
116 		uint8_t bit15 : 1;
117 		uint8_t bit16 : 1;
118 		uint8_t bit17 : 1;
119 		uint8_t bit18 : 1;
120 		uint8_t bit19 : 1;
121 		uint8_t bit20 : 1;
122 		uint8_t bit21 : 1;
123 		uint8_t bit22 : 1;
124 		uint8_t bit23 : 1;
125 		uint8_t bit24 : 1;
126 		uint8_t bit25 : 1;
127 		uint8_t bit26 : 1;
128 		uint8_t bit27 : 1;
129 		uint8_t bit28 : 1;
130 		uint8_t bit29 : 1;
131 		uint8_t bit30 : 1;
132 		uint8_t bit31 : 1;
133 		uint8_t bit32 : 1;
134 		uint8_t bit33 : 1;
135 		uint8_t bit34 : 1;
136 		uint8_t bit35 : 1;
137 		uint8_t bit36 : 1;
138 		uint8_t bit37 : 1;
139 		uint8_t bit38 : 1;
140 		uint8_t bit39 : 1;
141 		uint8_t bit40 : 1;
142 		uint8_t bit41 : 1;
143 		uint8_t bit42 : 1;
144 		uint8_t bit43 : 1;
145 		uint8_t bit44 : 1;
146 		uint8_t bit45 : 1;
147 		uint8_t bit46 : 1;
148 		uint8_t bit47 : 1;
149 		uint8_t bit48 : 1;
150 		uint8_t bit49 : 1;
151 		uint8_t bit50 : 1;
152 		uint8_t bit51 : 1;
153 		uint8_t bit52 : 1;
154 		uint8_t bit53 : 1;
155 		uint8_t bit54 : 1;
156 		uint8_t bit55 : 1;
157 		uint8_t bit56 : 1;
158 		uint8_t bit57 : 1;
159 		uint8_t bit58 : 1;
160 		uint8_t bit59 : 1;
161 		uint8_t bit60 : 1;
162 		uint8_t bit61 : 1;
163 		uint8_t bit62 : 1;
164 		uint8_t bit63 : 1;
165 	} __attribute__((packed)) bits;
166 } bitfield64_t;
167 
168 typedef float real32_t;
169 
170 typedef uint8_t pldm_uuid[16];
171 
172 #endif /* PLDM_TYPES_H */
173