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 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}