1use core::slice;
2
3use crate::boot::BootServices;
4use crate::config::ConfigurationTable;
5use crate::prelude::*;
6use crate::runtime::RuntimeServices;
7use crate::text::{TextInput, TextOutput};
8use crate::TableHeader;
9
10#[repr(C)]
11pub struct SystemTable {
12 pub Hdr: TableHeader,
13 pub FirmwareVendor: *const u16,
14 pub FirmwareRevision: u32,
15 pub ConsoleInHandle: Handle,
16 pub ConsoleIn: &'static mut TextInput,
17 pub ConsoleOutHandle: Handle,
18 pub ConsoleOut: &'static mut TextOutput,
19 pub ConsoleErrorHandle: Handle,
20 pub ConsoleError: &'static mut TextOutput,
21 pub RuntimeServices: &'static mut RuntimeServices,
22 pub BootServices: &'static mut BootServices,
23 Entries: usize,
24 ConfigurationTables: *const ConfigurationTable,
25}
26
27impl SystemTable {
28 pub fn config_tables(&self) -> &'static [ConfigurationTable] {
29 unsafe { slice::from_raw_parts(self.ConfigurationTables, self.Entries) }
30 }
31}