summaryrefslogtreecommitdiff
path: root/lib/uefi.c3l/uefi/protocol/services/boot.c3i
blob: c5b8e06b94cdb7dfadf4d572a09044492da29e1c (plain)
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;
}