aboutsummaryrefslogtreecommitdiff
path: root/hikari/efi/services/runtime.zig
blob: add327759c82977829737be56833f8ebb84330da (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//! Hikari EFI Runtime Services

const types = @import("../types/types.zig");
const table = @import("../types/table.zig");
const time = @import("../types/time.zig");
const memory = @import("../types/memory.zig");
const reset = @import("../types/reset.zig");

pub const RuntimeServices = extern struct {
    header: table.TableHeader,

    get_time: *const fn (
        current_time: *time.Time,
        capabilities: ?*time.TimeCapabilities,
    ) callconv(.C) types.Status,

    set_time: *const fn (
        new_time: *const time.Time,
    ) callconv(.C) types.Status,

    get_wakeup_time: *const fn (
        enabled: *bool,
        pending: *bool,
        wakeup_time: *time.Time,
    ) callconv(.C) types.Status,

    set_wakeup_time: *const fn (
        enable: bool,
        wakeup_time: ?*const time.Time,
    ) callconv(.C) types.Status,

    set_virtual_address_map: *const fn (
        memory_map_size: usize,
        descriptor_size: usize,
        descriptor_version: u32,
        virtual_map: [*]memory.MemoryDescriptor,
    ) callconv(.C) types.Status,

    convert_pointer: *const fn (
        debug_disposition: usize,
        address: **anyopaque,
    ) callconv(.C) types.Status,

    get_variable: *const fn (
        variable_name: [*:0]const types.Char16,
        vendor_guid: *align(8) const types.Guid,
        attributes: ?*u32,
        data_size: *usize,
        data: ?[*]u8,
    ) callconv(.C) types.Status,

    get_next_variable_name: *const fn (
        variable_name_size: *usize,
        variable_name: [*:0]types.Char16,
        vendor_guid: *align(8) types.Guid,
    ) callconv(.C) types.Status,

    set_variable: *const fn (
        variable_name: [*:0]const types.Char16,
        vendor_guid: *align(8) const types.Guid,
        attributes: u32,
        data_size: usize,
        data: [*]const u8,
    ) callconv(.C) types.Status,

    get_next_high_monotonic_count: *const fn (
        high_count: *u32,
    ) callconv(.C) types.Status,

    reset_system: *const fn (
        reset_type: reset.ResetType,
        reset_status: types.Status,
        data_size: usize,
        reset_data: ?*const anyopaque,
    ) callconv(.C) noreturn,

    update_capsule: *const fn (
        capsule_header_array: **CapsuleHeader,
        capsule_count: usize,
        scatter_gather_list: types.PhysicalAddress,
    ) callconv(.C) types.Status,

    query_capsule_capabilities: *const fn (
        capsule_header_array: **CapsuleHeader,
        capsule_count: usize,
        maximum_capsule_size: *u64,
        reset_type: *reset.ResetType,
    ) callconv(.C) types.Status,

    query_variable_info: *const fn (
        attributes: u32,
        maximum_variable_storage_size: *u64,
        remaining_variable_storage_size: *u64,
        maximum_variable_size: *u64,
    ) callconv(.C) types.Status,
};

pub const CapsuleHeader = extern struct {
    capsule_guid: types.Guid,
    header_size: u32,
    flags: u32,
    capsule_image_size: u32,
};

pub const variable_non_volatile: u32 = 0x00000001;
pub const variable_bootservice_access: u32 = 0x00000002;
pub const variable_runtime_access: u32 = 0x00000004;
pub const variable_hardware_error_record: u32 = 0x00000008;
pub const variable_authenticated_write_access: u32 = 0x00000010;
pub const variable_time_based_authenticated_write_access: u32 = 0x00000020;
pub const variable_append_write: u32 = 0x00000040;
pub const variable_enhanced_authenticated_access: u32 = 0x00000080;

pub const capsule_flags_persist_across_reset: u32 = 0x00010000;
pub const capsule_flags_populate_system_table: u32 = 0x00020000;
pub const capsule_flags_initiate_reset: u32 = 0x00040000;