aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/acpi.hpp
blob: 7bbcdb0a475aee1277c904bb8ee6030385602c94 (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
#pragma once

#include "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;


char acpi_load_madt(void* rsdp_p);
char acpi_checksum(void* p, char size);