| mod device_path_gen; |
| |
| use crate::{guid, Char16, Guid}; |
| |
| pub use device_path_gen::{acpi, bios_boot_spec, end, hardware, media, messaging}; |
| |
| /// Device path protocol. |
| /// |
| /// A device path contains one or more device path instances made of up |
| /// variable-length nodes. |
| /// |
| /// Note that the fields in this struct define the header at the start of each |
| /// node; a device path is typically larger than these four bytes. |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct DevicePathProtocol { |
| pub major_type: DeviceType, |
| pub sub_type: DeviceSubType, |
| pub length: [u8; 2], |
| // followed by payload (dynamically sized) |
| } |
| |
| impl DevicePathProtocol { |
| pub const GUID: Guid = guid!("09576e91-6d3f-11d2-8e39-00a0c969723b"); |
| } |
| |
| newtype_enum! { |
| /// Type identifier for a device path node. |
| pub enum DeviceType: u8 => { |
| /// Hardware Device Path. |
| /// |
| /// This Device Path defines how a device is attached to the resource domain of a system, where resource domain is |
| /// simply the shared memory, memory mapped I/ O, and I/O space of the system. |
| HARDWARE = 0x01, |
| /// ACPI Device Path. |
| /// |
| /// This Device Path is used to describe devices whose enumeration is not described in an industry-standard fashion. |
| /// These devices must be described using ACPI AML in the ACPI namespace; this Device Path is a linkage to the ACPI |
| /// namespace. |
| ACPI = 0x02, |
| /// Messaging Device Path. |
| /// |
| /// This Device Path is used to describe the connection of devices outside the resource domain of the system. This |
| /// Device Path can describe physical messaging information such as a SCSI ID, or abstract information such as |
| /// networking protocol IP addresses. |
| MESSAGING = 0x03, |
| /// Media Device Path. |
| /// |
| /// This Device Path is used to describe the portion of a medium that is being abstracted by a boot service. |
| /// For example, a Media Device Path could define which partition on a hard drive was being used. |
| MEDIA = 0x04, |
| /// BIOS Boot Specification Device Path. |
| /// |
| /// This Device Path is used to point to boot legacy operating systems; it is based on the BIOS Boot Specification |
| /// Version 1.01. |
| BIOS_BOOT_SPEC = 0x05, |
| /// End of Hardware Device Path. |
| /// |
| /// Depending on the Sub-Type, this Device Path node is used to indicate the end of the Device Path instance or |
| /// Device Path structure. |
| END = 0x7F, |
| }} |
| |
| /// Sub-type identifier for a device path node. |
| #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] |
| #[repr(transparent)] |
| pub struct DeviceSubType(pub u8); |
| |
| impl DeviceSubType { |
| /// PCI Device Path. |
| pub const HARDWARE_PCI: Self = Self(1); |
| /// PCCARD Device Path. |
| pub const HARDWARE_PCCARD: Self = Self(2); |
| /// Memory-mapped Device Path. |
| pub const HARDWARE_MEMORY_MAPPED: Self = Self(3); |
| /// Vendor-Defined Device Path. |
| pub const HARDWARE_VENDOR: Self = Self(4); |
| /// Controller Device Path. |
| pub const HARDWARE_CONTROLLER: Self = Self(5); |
| /// BMC Device Path. |
| pub const HARDWARE_BMC: Self = Self(6); |
| |
| /// ACPI Device Path. |
| pub const ACPI: Self = Self(1); |
| /// Expanded ACPI Device Path. |
| pub const ACPI_EXPANDED: Self = Self(2); |
| /// ACPI _ADR Device Path. |
| pub const ACPI_ADR: Self = Self(3); |
| /// NVDIMM Device Path. |
| pub const ACPI_NVDIMM: Self = Self(4); |
| |
| /// ATAPI Device Path. |
| pub const MESSAGING_ATAPI: Self = Self(1); |
| /// SCSI Device Path. |
| pub const MESSAGING_SCSI: Self = Self(2); |
| /// Fibre Channel Device Path. |
| pub const MESSAGING_FIBRE_CHANNEL: Self = Self(3); |
| /// 1394 Device Path. |
| pub const MESSAGING_1394: Self = Self(4); |
| /// USB Device Path. |
| pub const MESSAGING_USB: Self = Self(5); |
| /// I2O Device Path. |
| pub const MESSAGING_I2O: Self = Self(6); |
| /// Infiniband Device Path. |
| pub const MESSAGING_INFINIBAND: Self = Self(9); |
| /// Vendor-Defined Device Path. |
| pub const MESSAGING_VENDOR: Self = Self(10); |
| /// MAC Address Device Path. |
| pub const MESSAGING_MAC_ADDRESS: Self = Self(11); |
| /// IPV4 Device Path. |
| pub const MESSAGING_IPV4: Self = Self(12); |
| /// IPV6 Device Path. |
| pub const MESSAGING_IPV6: Self = Self(13); |
| /// UART Device Path. |
| pub const MESSAGING_UART: Self = Self(14); |
| /// USB Class Device Path. |
| pub const MESSAGING_USB_CLASS: Self = Self(15); |
| /// USB WWID Device Path. |
| pub const MESSAGING_USB_WWID: Self = Self(16); |
| /// Device Logical Unit. |
| pub const MESSAGING_DEVICE_LOGICAL_UNIT: Self = Self(17); |
| /// SATA Device Path. |
| pub const MESSAGING_SATA: Self = Self(18); |
| /// iSCSI Device Path node (base information). |
| pub const MESSAGING_ISCSI: Self = Self(19); |
| /// VLAN Device Path node. |
| pub const MESSAGING_VLAN: Self = Self(20); |
| /// Fibre Channel Ex Device Path. |
| pub const MESSAGING_FIBRE_CHANNEL_EX: Self = Self(21); |
| /// Serial Attached SCSI (SAS) Ex Device Path. |
| pub const MESSAGING_SCSI_SAS_EX: Self = Self(22); |
| /// NVM Express Namespace Device Path. |
| pub const MESSAGING_NVME_NAMESPACE: Self = Self(23); |
| /// Uniform Resource Identifiers (URI) Device Path. |
| pub const MESSAGING_URI: Self = Self(24); |
| /// UFS Device Path. |
| pub const MESSAGING_UFS: Self = Self(25); |
| /// SD (Secure Digital) Device Path. |
| pub const MESSAGING_SD: Self = Self(26); |
| /// Bluetooth Device Path. |
| pub const MESSAGING_BLUETOOTH: Self = Self(27); |
| /// Wi-Fi Device Path. |
| pub const MESSAGING_WIFI: Self = Self(28); |
| /// eMMC (Embedded Multi-Media Card) Device Path. |
| pub const MESSAGING_EMMC: Self = Self(29); |
| /// BluetoothLE Device Path. |
| pub const MESSAGING_BLUETOOTH_LE: Self = Self(30); |
| /// DNS Device Path. |
| pub const MESSAGING_DNS: Self = Self(31); |
| /// NVDIMM Namespace Device Path. |
| pub const MESSAGING_NVDIMM_NAMESPACE: Self = Self(32); |
| /// REST Service Device Path. |
| pub const MESSAGING_REST_SERVICE: Self = Self(33); |
| /// NVME over Fabric (NVMe-oF) Namespace Device Path. |
| pub const MESSAGING_NVME_OF_NAMESPACE: Self = Self(34); |
| |
| /// Hard Drive Media Device Path. |
| pub const MEDIA_HARD_DRIVE: Self = Self(1); |
| /// CD-ROM Media Device Path. |
| pub const MEDIA_CD_ROM: Self = Self(2); |
| /// Vendor-Defined Media Device Path. |
| pub const MEDIA_VENDOR: Self = Self(3); |
| /// File Path Media Device Path. |
| pub const MEDIA_FILE_PATH: Self = Self(4); |
| /// Media Protocol Device Path. |
| pub const MEDIA_PROTOCOL: Self = Self(5); |
| /// PIWG Firmware File. |
| pub const MEDIA_PIWG_FIRMWARE_FILE: Self = Self(6); |
| /// PIWG Firmware Volume. |
| pub const MEDIA_PIWG_FIRMWARE_VOLUME: Self = Self(7); |
| /// Relative Offset Range. |
| pub const MEDIA_RELATIVE_OFFSET_RANGE: Self = Self(8); |
| /// RAM Disk Device Path. |
| pub const MEDIA_RAM_DISK: Self = Self(9); |
| |
| /// BIOS Boot Specification Device Path. |
| pub const BIOS_BOOT_SPECIFICATION: Self = Self(1); |
| |
| /// End this instance of a Device Path and start a new one. |
| pub const END_INSTANCE: Self = Self(0x01); |
| /// End entire Device Path. |
| pub const END_ENTIRE: Self = Self(0xff); |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct DevicePathToTextProtocol { |
| pub convert_device_node_to_text: unsafe extern "efiapi" fn( |
| device_node: *const DevicePathProtocol, |
| display_only: bool, |
| allow_shortcuts: bool, |
| ) -> *const Char16, |
| pub convert_device_path_to_text: unsafe extern "efiapi" fn( |
| device_path: *const DevicePathProtocol, |
| display_only: bool, |
| allow_shortcuts: bool, |
| ) -> *const Char16, |
| } |
| |
| impl DevicePathToTextProtocol { |
| pub const GUID: Guid = guid!("8b843e20-8132-4852-90cc-551a4e4a7f1c"); |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct DevicePathFromTextProtocol { |
| pub convert_text_to_device_node: |
| unsafe extern "efiapi" fn(text_device_node: *const Char16) -> *const DevicePathProtocol, |
| pub convert_text_to_device_path: |
| unsafe extern "efiapi" fn(text_device_path: *const Char16) -> *const DevicePathProtocol, |
| } |
| |
| impl DevicePathFromTextProtocol { |
| pub const GUID: Guid = guid!("05c99a21-c70f-4ad2-8a5f-35df3343f51e"); |
| } |