1use guid::Guid;
7use zerocopy::FromBytes;
8use zerocopy::Immutable;
9use zerocopy::IntoBytes;
10use zerocopy::KnownLayout;
11
12open_enum::open_enum! {
13 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
15 pub enum EfiMemoryType: u32 {
16 EFI_RESERVED_MEMORY_TYPE = 0,
17 EFI_LOADER_CODE = 1,
18 EFI_LOADER_DATA = 2,
19 EFI_BOOT_SERVICES_CODE = 3,
20 EFI_BOOT_SERVICES_DATA = 4,
21 EFI_RUNTIME_SERVICES_CODE = 5,
22 EFI_RUNTIME_SERVICES_DATA = 6,
23 EFI_CONVENTIONAL_MEMORY = 7,
24 EFI_UNUSABLE_MEMORY = 8,
25 EFI_ACPI_RECLAIM_MEMORY = 9,
26 EFI_ACPI_MEMORY_NVS = 10,
27 EFI_MEMORY_MAPPED_IO = 11,
28 EFI_MEMORY_MAPPED_IOPORT_SPACE = 12,
29 EFI_PAL_CODE = 13,
30 EFI_PERSISTENT_MEMORY = 14,
31 EFI_UNACCEPTED_MEMORY_TYPE = 15,
32 EFI_MAX_MEMORY_TYPE = 16,
33 }
34}
35
36#[repr(C, packed)]
38#[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
39pub struct EfiDevicePathProtocol {
40 pub device_type: EfiDeviceType,
41 pub sub_type: u8,
42 pub length: [u8; 2],
43}
44
45#[repr(C, packed)]
47#[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
48pub struct EfiLoadOption {
49 pub attributes: u32,
50 pub file_path_list_length: u16,
51}
52
53open_enum::open_enum! {
54 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
55 pub enum EfiDeviceType: u8 {
56 HARDWARE = 0x01,
57 ACPI = 0x02,
58 MESSAGING = 0x03,
59 MEDIA = 0x04,
60 BIOS_BOOT_SPEC = 0x05,
61 END = 0x7F,
62 }
63}
64
65open_enum::open_enum! {
66 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
67 pub enum EfiEndDeviceSubType: u8 {
68 INSTANCE = 0x01,
69 ENTIRE = 0xFF,
70 }
71}
72
73open_enum::open_enum! {
74 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
75 pub enum EfiHardwareDeviceSubType: u8 {
76 PCI = 1,
77 PCCARD = 2,
78 MEMORY_MAPPED = 3,
79 VENDOR = 4,
80 CONTROLLER = 5,
81 BMC = 6,
82 }
83}
84
85open_enum::open_enum! {
86 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
87 pub enum EfiAcpiDeviceSubType: u8 {
88 ACPI = 1,
89 EXPANDED_ACPI = 2,
90 ADR = 3,
91 NVDIMM = 4,
92 }
93}
94
95open_enum::open_enum! {
96 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
97 pub enum EfiMessagingDeviceSubType: u8 {
98 ATAPI = 1,
99 SCSI = 2,
100 FIBRE_CHANNEL = 3,
101 FIBRE_CHANNEL_EX = 21,
102 IEEE_1394 = 4,
103 USB = 5,
104 SATA = 18,
105 USB_WWID = 16,
106 LOGICAL_UNIT = 17,
107 USB_CLASS = 15,
108 I20_RANDOM_BLOCK_STORAGE_CLASS = 6,
109 MAC_ADDRESS = 11,
110 IPV4 = 12,
111 IPV6 = 13,
112 VLAN = 20,
113 INFINIBAND = 9,
114 UART = 14,
115 SAS = 10,
116 SAS_EX = 22,
117 ISCSI = 19,
118 NVME_NAMESPACE = 23,
119 URI = 24,
120 UFS = 25,
121 SD = 26,
122 BLUETOOTH = 27,
123 WIFI = 28,
124 EMMC = 29,
125 BLUETOOTH_LE = 30,
126 DNS = 31,
127 NVDIMM = 32,
128 REST_SERVICE = 33,
129 NVME_OF = 34,
130 }
131}
132
133open_enum::open_enum! {
134 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
135 pub enum EfiMediaDeviceSubType: u8 {
136 HARD_DRIVE = 0x01,
137 CD_ROM = 0x02,
138 VENDOR = 0x03,
139 FILE = 0x04,
140 MEDIA_PROTOCOL = 0x05,
141 PIWG_FIRMWARE_FILE = 0x06,
142 PIWG_FIRMWARE_VOLUME = 0x07,
143 RELATIVE_OFFSET_RANGE = 0x08,
144 RAM_DISK = 0x09,
145 }
146}
147
148open_enum::open_enum! {
149 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
150 pub enum EfiPartitionFormat: u8 {
151 MBR = 0x01,
152 GUID = 0x02,
153 }
154}
155
156open_enum::open_enum! {
157 #[derive(IntoBytes, FromBytes, Immutable, KnownLayout)]
158 pub enum EfiSignatureType: u8 {
159 NONE = 0x00,
160 MBR = 0x01,
161 GUID = 0x02,
162 }
163}
164
165#[repr(C, packed)]
166#[derive(IntoBytes, FromBytes, Immutable, KnownLayout, Debug, PartialEq)]
167pub struct EfiHardDriveDevice {
168 pub partition_number: u32,
169 pub partition_start: u64,
170 pub partition_size: u64,
171 pub partition_signature: Guid,
172 pub partition_format: EfiPartitionFormat,
173 pub partition_type: EfiSignatureType,
174}
175
176#[repr(C, packed)]
177#[derive(IntoBytes, FromBytes, Immutable, KnownLayout, Debug, PartialEq)]
178pub struct EfiScsiDevice {
179 pub target_id: u16,
180 pub logical_unit_num: u16,
181}
182
183#[repr(C, packed)]
184#[derive(IntoBytes, FromBytes, Immutable, KnownLayout, Debug, PartialEq)]
185pub struct EfiMemoryMappedDevice {
186 pub memory_type: EfiMemoryType,
187 pub start_address: u64,
188 pub end_address: u64,
189}
190
191#[repr(C, packed)]
192#[derive(IntoBytes, FromBytes, Immutable, KnownLayout, Debug, PartialEq)]
193pub struct EfiExpandedAcpiDevice {
194 pub hid: u32,
195 pub cid: u32,
196 pub uid: u32,
197}