blob: 3e5c4100d4fee194f968c1b0b00cd51744c109be (
plain)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#pragma once
#include "boucane.hpp"
#define ACPI_RSDP_SIGNATURE 0x2052545020445352
#define ACPI_RSDT_SIGNATURE 0x54445352
#define ACPI_MADT_SIGNATURE 0x43495041
typedef struct RSDP {
u64 signature;
u8 checksum;
u64 oemid:48;
u8 revision;
u32 rsdt_addr;
u32 length;
} __attribute__((packed)) RSDP;
typedef struct ACPI_TABLE_HEADER {
u32 signature;
u32 length;
u8 revision;
u8 checksum;
u64 oemid:48;
u64 oem_table_id;
u32 oem_revision;
u32 creator_id;
u32 creator_revision;
} __attribute__((packed)) ACPI_TABLE_HEADER;
typedef struct RSDT {
ACPI_TABLE_HEADER header;
u32 first_entry_addr_ptr;
} __attribute__((packed)) RSDT;
typedef struct INT_CTRL_HEADER {
u8 type;
u8 length;
} __attribute__((packed)) INT_CTRL_HEADER;
typedef struct IOAPIC {
INT_CTRL_HEADER header;
u8 ioapic_id;
u8 reserved;
u32 ioapic_addr;
u32 global_system_interrupt_base;
} __attribute__((packed)) IOAPIC;
extern RSDP rsdp;
extern RSDT rsdt;
extern IOAPIC ioapic;
char acpi_checksum(void* p, char size);
char acpi_load_rsdt();
char acpi_load_madt();
char acpi_init(void* rsdp_p);
|