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