aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/uefi/tables/boot_services.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/os/uefi/tables/boot_services.zig')
-rw-r--r--lib/std/os/uefi/tables/boot_services.zig125
1 files changed, 125 insertions, 0 deletions
diff --git a/lib/std/os/uefi/tables/boot_services.zig b/lib/std/os/uefi/tables/boot_services.zig
new file mode 100644
index 0000000000..55b0de3478
--- /dev/null
+++ b/lib/std/os/uefi/tables/boot_services.zig
@@ -0,0 +1,125 @@
+const uefi = @import("std").os.uefi;
+const Event = uefi.Event;
+const Guid = uefi.Guid;
+const Handle = uefi.Handle;
+const TableHeader = uefi.tables.TableHeader;
+
+/// UEFI Specification, Version 2.8, 4.4
+///
+/// As the boot_services table may grow with new UEFI versions, it is important to check hdr.header_size.
+///
+/// Boot Services must not be used after exitBootServices has been called. The only exception is
+/// getMemoryMap, which may be used after the first unsuccessful call to exitBootServices.
+/// After successfully calling exitBootServices, system_table.console_in_handle, system_table.con_in,
+/// system_table.console_out_handle, system_table.con_out, system_table.standard_error_handle,
+/// system_table.std_err, and system_table.boot_services should be set to null. After setting these
+/// attributes to null, system_table.hdr.crc32 must be recomputed. See UEFI Specification, Version 2.8, 7.4.
+pub const BootServices = extern struct {
+ hdr: TableHeader,
+ raiseTpl: usize, // TODO
+ restoreTpl: usize, // TODO
+ allocatePages: usize, // TODO
+ freePages: usize, // TODO
+ getMemoryMap: extern fn (*usize, [*]MemoryDescriptor, *usize, *usize, *u32) usize,
+ allocatePool: usize, // TODO
+ freePool: usize, // TODO
+ createEvent: extern fn (u32, usize, ?extern fn (Event, ?*const c_void) void, ?*const c_void, *Event) usize,
+ setTimer: extern fn (Event, TimerDelay, u64) usize,
+ waitForEvent: extern fn (usize, [*]const Event, *usize) usize,
+ signalEvent: extern fn (Event) usize,
+ closeEvent: extern fn (Event) usize,
+ checkEvent: usize, // TODO
+ installProtocolInterface: usize, // TODO
+ reinstallProtocolInterface: usize, // TODO
+ uninstallProtocolInterface: usize, // TODO
+ handleProtocol: usize, // TODO
+ reserved: *c_void,
+ registerProtocolNotify: usize, // TODO
+ locateHandle: usize, // TODO
+ locateDevicePath: usize, // TODO
+ installConfigurationTable: usize, // TODO
+ imageLoad: usize, // TODO
+ imageStart: usize, // TODO
+ exit: extern fn (Handle, usize, usize, ?*const c_void) usize,
+ imageUnload: usize, // TODO
+ exitBootServices: usize, // TODO
+ getNextMonotonicCount: usize, // TODO
+ stall: extern fn (usize) usize,
+ setWatchdogTimer: extern fn (usize, u64, usize, ?[*]const u16) usize,
+ connectController: usize, // TODO
+ disconnectController: usize, // TODO
+ openProtocol: usize, // TODO
+ closeProtocol: usize, // TODO
+ openProtocolInformation: usize, // TODO
+ protocolsPerHandle: usize, // TODO
+ locateHandleBuffer: usize, // TODO
+ locateProtocol: extern fn (*align(8) const Guid, ?*const c_void, *?*c_void) usize,
+ installMultipleProtocolInterfaces: usize, // TODO
+ uninstallMultipleProtocolInterfaces: usize, // TODO
+ calculateCrc32: usize, // TODO
+ copyMem: usize, // TODO
+ setMem: usize, // TODO
+ createEventEx: usize, // TODO
+
+ pub const signature: u64 = 0x56524553544f4f42;
+
+ pub const event_timer: u32 = 0x80000000;
+ pub const event_runtime: u32 = 0x40000000;
+ pub const event_notify_wait: u32 = 0x00000100;
+ pub const event_notify_signal: u32 = 0x00000200;
+ pub const event_signal_exit_boot_services: u32 = 0x00000201;
+ pub const event_signal_virtual_address_change: u32 = 0x00000202;
+
+ pub const tpl_application: usize = 4;
+ pub const tpl_callback: usize = 8;
+ pub const tpl_notify: usize = 16;
+ pub const tpl_high_level: usize = 31;
+};
+
+pub const TimerDelay = extern enum(u32) {
+ TimerCancel,
+ TimerPeriodic,
+ TimerRelative,
+};
+
+pub const MemoryDescriptor = extern struct {
+ type: extern enum(u32) {
+ ReservedMemoryType,
+ LoaderCode,
+ LoaderData,
+ BootServicesCode,
+ BootServicesData,
+ RuntimeServicesCode,
+ RuntimeServicesData,
+ ConventionalMemory,
+ UnusableMemory,
+ ACPIReclaimMemory,
+ ACPIMemoryNVS,
+ MemoryMappedIO,
+ MemoryMappedIOPortSpace,
+ PalCode,
+ PersistentMemory,
+ MaxMemoryType,
+ },
+ physical_start: u64,
+ virtual_start: u64,
+ number_of_pages: usize,
+ attribute: packed struct {
+ uc: bool,
+ wc: bool,
+ wt: bool,
+ wb: bool,
+ uce: bool,
+ _pad1: u7,
+ wp: bool,
+ rp: bool,
+ xp: bool,
+ nv: bool,
+ more_reliable: bool,
+ ro: bool,
+ sp: bool,
+ cpu_crypto: bool,
+ _pad2: u43,
+ memory_runtime: bool,
+ },
+};