x86_64: add a basic ACPI driver
This commit is contained in:
61
arch/x86_64/include/arch/acpi.h
Normal file
61
arch/x86_64/include/arch/acpi.h
Normal file
@@ -0,0 +1,61 @@
|
||||
#ifndef ARCH_ACPI_H_
|
||||
#define ARCH_ACPI_H_
|
||||
|
||||
#include <socks/compiler.h>
|
||||
#include <socks/status.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define ACPI_SIG_RSDP 0x2052545020445352ULL
|
||||
#define ACPI_SIG_FADT 0x50434146
|
||||
|
||||
struct acpi_rsdp_10 {
|
||||
char r_sig[8];
|
||||
uint8_t r_chksum;
|
||||
char r_oem[6];
|
||||
uint8_t r_revision;
|
||||
uint32_t r_rsdt_ptr;
|
||||
} __packed;
|
||||
|
||||
struct acpi_rsdp_20 {
|
||||
struct acpi_rsdp_10 r_base;
|
||||
|
||||
uint32_t r_length;
|
||||
uint64_t r_xsdt_ptr;
|
||||
uint8_t r_chksum_ext;
|
||||
uint8_t r_reserved[3];
|
||||
} __packed;
|
||||
|
||||
struct acpi_rsdp {
|
||||
union {
|
||||
struct acpi_rsdp_10 rsdp_10;
|
||||
struct acpi_rsdp_20 rsdp_20;
|
||||
};
|
||||
} __packed;
|
||||
|
||||
struct acpi_sdt {
|
||||
char s_sig[4];
|
||||
uint32_t s_length;
|
||||
uint8_t s_revision;
|
||||
uint8_t s_chksum;
|
||||
char s_oem[6];
|
||||
char s_oem_table[8];
|
||||
uint32_t s_oem_revision;
|
||||
uint32_t s_creator;
|
||||
uint32_t s_creator_revision;
|
||||
} __packed;
|
||||
|
||||
struct acpi_rsdt {
|
||||
struct acpi_sdt r_header;
|
||||
uint32_t r_tables[];
|
||||
} __packed;
|
||||
|
||||
struct acpi_xsdt {
|
||||
struct acpi_sdt x_header;
|
||||
uint64_t x_tables[];
|
||||
} __packed;
|
||||
|
||||
extern kern_status_t acpi_init(void);
|
||||
|
||||
extern struct acpi_sdt *acpi_find_sdt(uint32_t sig);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user