uefi_raw/table/
system.rs

1use crate::protocol::console::{SimpleTextInputProtocol, SimpleTextOutputProtocol};
2use crate::table::boot::BootServices;
3use crate::table::configuration::ConfigurationTable;
4use crate::table::runtime::RuntimeServices;
5use crate::table::Header;
6use crate::{Char16, Handle};
7use core::{mem, ptr};
8
9#[derive(Clone, Debug, Eq, PartialEq)]
10#[repr(C)]
11pub struct SystemTable {
12    pub header: Header,
13
14    pub firmware_vendor: *const Char16,
15    pub firmware_revision: u32,
16
17    pub stdin_handle: Handle,
18    pub stdin: *mut SimpleTextInputProtocol,
19
20    pub stdout_handle: Handle,
21    pub stdout: *mut SimpleTextOutputProtocol,
22
23    pub stderr_handle: Handle,
24    pub stderr: *mut SimpleTextOutputProtocol,
25
26    pub runtime_services: *mut RuntimeServices,
27    pub boot_services: *mut BootServices,
28
29    pub number_of_configuration_table_entries: usize,
30    pub configuration_table: *mut ConfigurationTable,
31}
32
33impl SystemTable {
34    pub const SIGNATURE: u64 = 0x5453_5953_2049_4249;
35}
36
37impl Default for SystemTable {
38    /// Create a `SystemTable` with most fields set to zero.
39    ///
40    /// The only fields not set to zero are:
41    /// * [`Header::signature`] is set to [`SystemTable::SIGNATURE`].
42    /// * [`Header::size`] is set to the size in bytes of `SystemTable`.
43    fn default() -> Self {
44        Self {
45            header: Header {
46                signature: Self::SIGNATURE,
47                size: u32::try_from(mem::size_of::<Self>()).unwrap(),
48                ..Header::default()
49            },
50
51            firmware_vendor: ptr::null_mut(),
52            firmware_revision: 0,
53
54            stdin_handle: ptr::null_mut(),
55            stdin: ptr::null_mut(),
56
57            stdout_handle: ptr::null_mut(),
58            stdout: ptr::null_mut(),
59
60            stderr_handle: ptr::null_mut(),
61            stderr: ptr::null_mut(),
62
63            runtime_services: ptr::null_mut(),
64            boot_services: ptr::null_mut(),
65
66            number_of_configuration_table_entries: 0,
67            configuration_table: ptr::null_mut(),
68        }
69    }
70}