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
use core::slice;
use crate::{Handle, TableHeader};
use crate::boot::BootServices;
use crate::config::ConfigurationTable;
use crate::runtime::RuntimeServices;
use crate::text::{TextInput, TextOutput};
#[repr(C)]
pub struct SystemTable {
    pub Hdr: TableHeader,
    pub FirmwareVendor: *const u16,
    pub FirmwareRevision: u32,
    pub ConsoleInHandle: Handle,
    pub ConsoleIn: &'static mut TextInput,
    pub ConsoleOutHandle: Handle,
    pub ConsoleOut: &'static mut TextOutput,
    pub ConsoleErrorHandle: Handle,
    pub ConsoleError: &'static mut TextOutput,
    pub RuntimeServices: &'static mut RuntimeServices,
    pub BootServices: &'static mut BootServices,
    Entries: usize,
    ConfigurationTables: *const ConfigurationTable
}
impl SystemTable {
    pub fn config_tables(&self) -> &'static [ConfigurationTable] {
        unsafe {
            slice::from_raw_parts(self.ConfigurationTables, self.Entries)
        }
    }
}