|
| 1 | +use crate::protocol::console::{SimpleTextInputProtocol, SimpleTextOutputProtocol}; |
| 2 | +use crate::table::boot::BootServices; |
| 3 | +use crate::table::configuration::ConfigurationTable; |
| 4 | +use crate::table::runtime::RuntimeServices; |
| 5 | +use crate::table::Header; |
| 6 | +use crate::{Char16, Handle}; |
| 7 | +use core::{mem, ptr}; |
| 8 | + |
| 9 | +#[derive(Clone, Debug, Eq, PartialEq)] |
| 10 | +#[repr(C)] |
| 11 | +pub 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 | + |
| 33 | +impl SystemTable { |
| 34 | + pub const SIGNATURE: u64 = 0x5453_5953_2049_4249; |
| 35 | +} |
| 36 | + |
| 37 | +impl 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 | +} |
0 commit comments