1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
module uefi::protocol::boot_services;
import uefi::protocol::mem;
alias AllocatePagesFn = fn EfiStatus (AllocateType, MemoryType, usz, void**);
alias AllocatePoolFn = fn EfiStatus (MemoryType, usz, void**);
alias FreePagesFn = fn EfiStatus (uptr, usz);
alias FreePoolFn = fn EfiStatus (void*);
alias GetMemoryMapFn = fn EfiStatus (usz*, MemoryDescriptor*, usz*, usz*, uint*);
alias HandleProtocolFn = fn EfiStatus (EfiHandle, EfiGuid*, void**);
alias ExitBootServicesFn = fn EfiStatus (EfiHandle, usz);
alias CopyMemFn = fn void (void* dst, void* src, usz);
alias SetMemFn = fn void (void* buf, usz, char);
module uefi;
import uefi::protocol::boot_services;
struct BootServices @packed {
inline TableHeader header;
// Task priority services
void* raise_tpl;
void* restore_tpl;
// Memory services (uefi::protocol::mem)
AllocatePagesFn allocate_pages;
FreePagesFn free_pages;
GetMemoryMapFn get_memory_map;
AllocatePoolFn allocate_pool;
FreePoolFn free_pool;
// Event and Timer services
void* create_event;
void* set_timer;
void* wait_for_event;
void* signal_event;
void* close_event;
void* check_event;
// Protocol Handler services
void* install_protocol_interface;
void* reinstall_protocol_interface;
void* uninstall_protocol_interface;
HandleProtocolFn handle_protocol;
void* _reserved;
void* register_protocol_notify;
void* locate_handle;
void* locate_device_path;
void* install_configuration_table;
// Image services
void* load_image;
void* start_image;
void* exit_image;
void* unload_image;
ExitBootServicesFn exit_boot_services;
// Misc services
void* get_next_monotonic_count;
void* stall;
void* set_watchdog_timer;
// Driver Support services
void* connect_controller;
void* disconnect_controller;
// Open/Close Protocol services
void* open_protocol;
void* close_protocol;
void* open_protocol_information;
// Library services
void* protocols_per_handle;
void* locate_handle_buffer;
void* locate_protocol;
void* install_multiple_protocol_interfaces;
void* uninstall_multiple_protocol_interfaces;
// 32-bit CRC services
void* calculate_crc32;
// More misc services
CopyMemFn copy_mem;
SetMemFn set_mem;
void* create_event_ex;
}
|