strat9_kernel/acpi/
fadt.rs1use super::sdt::{GenericAddressStructure, Sdt};
5use zerocopy::FromBytes;
6
7pub const FADT_SIGNATURE: &[u8; 4] = b"FACP";
8
9#[repr(C, packed)]
10#[derive(Clone, Copy, Debug, FromBytes)]
11pub struct Fadt {
12 pub header: Sdt,
13 pub firmware_ctrl: u32,
14 pub dsdt: u32,
16 _reserved: u8,
17 pub preferred_power_managament: u8,
18 pub sci_interrupt: u16,
19 pub smi_command_port: u32,
20 pub acpi_enable: u8,
21 pub acpi_disable: u8,
22 pub s4_bios_req: u8,
23 pub pstate_control: u8,
24 pub pm1a_event_block: u32,
25 pub pm1b_event_block: u32,
26 pub pm1a_control_block: u32,
27 pub pm1b_control_block: u32,
28 pub pm2_control_block: u32,
29 pub pm_timer_block: u32,
30 pub gpe0_block: u32,
31 pub gpe1_block: u32,
32 pub pm1_event_length: u8,
33 pub pm1_control_length: u8,
34 pub pm2_control_length: u8,
35 pub pm_timer_length: u8,
36 pub gpe0_length: u8,
37 pub gpe1_length: u8,
38 pub gpe1_base: u8,
39 pub c_state_control: u8,
40 pub worst_c2_latency: u16,
41 pub worst_c3_latency: u16,
42 pub flush_size: u16,
43 pub flush_stride: u16,
44 pub duty_offset: u8,
45 pub duty_width: u8,
46 pub day_alarm: u8,
47 pub month_alarm: u8,
48 pub century: u8,
49 pub iapc_boot_architecture_flags: u16,
50 _reserved2: u8,
51 pub flags: u32,
52 pub reset_reg: GenericAddressStructure,
53 pub reset_value: u8,
54 _reserved3: [u8; 3],
55 pub x_firmware_control: u64,
57 pub x_dsdt: u64,
59 pub x_pm1a_event_block: GenericAddressStructure,
60 pub x_pm1b_event_block: GenericAddressStructure,
61 pub x_pm1a_control_block: GenericAddressStructure,
62 pub x_pm1b_control_block: GenericAddressStructure,
63 pub x_pm2_control_block: GenericAddressStructure,
64 pub x_pm_timer_block: GenericAddressStructure,
65 pub x_gpe0_block: GenericAddressStructure,
66 pub x_gpe1_block: GenericAddressStructure,
67}
68
69impl Fadt {
70 pub fn get() -> Option<&'static Fadt> {
72 unsafe { super::find_table(FADT_SIGNATURE).map(|ptr| &*(ptr as *const Fadt)) }
73 }
74}