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