Parse ACPI MADT table
This commit is contained in:
173
kernel/platform/i386_pc/acpi/acpi.h
Normal file
173
kernel/platform/i386_pc/acpi/acpi.h
Normal file
@ -0,0 +1,173 @@
|
||||
#ifndef _ACPI_ACPI_H
|
||||
#define _ACPI_ACPI_H
|
||||
|
||||
#include <libk/types.h>
|
||||
#include <libk/compiler.h>
|
||||
|
||||
struct acpi_header {
|
||||
byte_t signature[4];
|
||||
uint32_t length;
|
||||
uint8_t revision;
|
||||
uint8_t checksum;
|
||||
byte_t oem[6];
|
||||
byte_t oemtable[8];
|
||||
uint32_t oem_revision;
|
||||
uint32_t creator;
|
||||
uint32_t creator_revision;
|
||||
} packed;
|
||||
|
||||
struct acpi_rsdp {
|
||||
byte_t signature[8];
|
||||
uint8_t checksum;
|
||||
byte_t oem[6];
|
||||
uint8_t revision;
|
||||
uint32_t rsdt_addr;
|
||||
} packed;
|
||||
|
||||
struct acpi_rsdt {
|
||||
struct acpi_header h;
|
||||
uint32_t ptrs[];
|
||||
};
|
||||
|
||||
/* Address space */
|
||||
enum {
|
||||
ACPI_GAS_SYSMEMORY = 0,
|
||||
ACPI_GAS_SYSIO = 1,
|
||||
ACPI_GAS_PCI_CONFIG = 2,
|
||||
ACPI_GAS_MBED_CTL = 3,
|
||||
ACPI_GAS_SYSMGMT_BUS = 4,
|
||||
ACPI_GAS_CMOS = 5,
|
||||
ACPI_GAS_PCI_BAR_TGT = 6,
|
||||
ACPI_GAS_IPMI = 7,
|
||||
ACPI_GAS_GPIO = 8,
|
||||
ACPI_GAS_SERIAL_BUS = 9,
|
||||
ACPI_GAS_PLAT_COM_CHL = 10,
|
||||
};
|
||||
|
||||
/* Access size */
|
||||
enum {
|
||||
ACPI_GAS_UNDEFINED = 0,
|
||||
ACPI_GAS_BYTE = 1,
|
||||
ACPI_GAS_WORD = 2,
|
||||
ACPI_GAS_DWORD = 3,
|
||||
ACPI_GAS_QWORD = 4,
|
||||
};
|
||||
|
||||
struct acpi_gas {
|
||||
uint8_t addr_space;
|
||||
uint8_t bit_width;
|
||||
uint8_t bit_offset;
|
||||
uint8_t access_size;
|
||||
uint64_t addr;
|
||||
} packed;
|
||||
|
||||
struct acpi_fadt {
|
||||
struct acpi_header h;
|
||||
|
||||
uint32_t firmware_ctl;
|
||||
uint32_t dsdt;
|
||||
|
||||
uint8_t reserved;
|
||||
|
||||
uint8_t preferred_power_mgmt_profile;
|
||||
uint16_t sci_interrupt;
|
||||
uint32_t smi_cmd_port;
|
||||
uint8_t acpi_enable;
|
||||
uint8_t acpi_disable;
|
||||
uint8_t s4bios_req;
|
||||
uint8_t pstate_ctl;
|
||||
uint32_t pm1a_evt_blk;
|
||||
uint32_t pm1b_evt_blk;
|
||||
uint32_t pm1a_ctl_blk;
|
||||
uint32_t pm1b_ctl_blk;
|
||||
uint32_t pm2_ctl_blk;
|
||||
uint32_t pm_timer_blk;
|
||||
uint32_t gpe0_blk;
|
||||
uint32_t gpe1_blk;
|
||||
uint8_t pm1_evt_length;
|
||||
uint8_t pm1_ctl_length;
|
||||
uint8_t pm2_ctl_length;
|
||||
uint8_t pm_timer_length;
|
||||
uint8_t gpe0_length;
|
||||
uint8_t gpe1_length;
|
||||
uint8_t gpe1_base;
|
||||
uint8_t cstate_ctl;
|
||||
uint16_t worst_c2_latency;
|
||||
uint16_t worst_c3_latency;
|
||||
uint16_t flush_size;
|
||||
uint16_t flush_stride;
|
||||
uint8_t duty_offset;
|
||||
uint8_t duty_width;
|
||||
uint8_t day_alarm;
|
||||
uint8_t month_alarm;
|
||||
uint8_t century;
|
||||
|
||||
uint16_t boot_arch_flags;
|
||||
|
||||
uint8_t reserved2;
|
||||
uint32_t flags;
|
||||
|
||||
struct acpi_gas reset_reg;
|
||||
|
||||
uint8_t reset_value;
|
||||
uint8_t reserved3[3];
|
||||
|
||||
uint64_t x_firmware_ctl;
|
||||
uint64_t x_dsdt;
|
||||
|
||||
struct acpi_gas x_pm1a_evt_blk;
|
||||
struct acpi_gas x_pm1b_evt_blk;
|
||||
struct acpi_gas x_pm1a_ctl_blk;
|
||||
struct acpi_gas x_pm1b_ctl_blk;
|
||||
struct acpi_gas x_pm2_ctl_blk;
|
||||
struct acpi_gas x_pm_timer_blk;
|
||||
struct acpi_gas x_gpe0_blk;
|
||||
struct acpi_gas x_gpe1_blk;
|
||||
} packed;
|
||||
|
||||
struct acpi_madt {
|
||||
struct acpi_header h;
|
||||
|
||||
uint32_t lapic_addr;
|
||||
uint32_t flags;
|
||||
} packed;
|
||||
|
||||
enum {
|
||||
ACPI_LAPIC = 0,
|
||||
ACPI_IOAPIC = 1,
|
||||
ACPI_INTR_OVERRIDE = 2,
|
||||
};
|
||||
|
||||
struct acpi_apic_header {
|
||||
uint8_t type;
|
||||
uint8_t length;
|
||||
} packed;
|
||||
|
||||
struct acpi_lapic {
|
||||
struct acpi_apic_header h;
|
||||
uint8_t acpi_cpu_id;
|
||||
uint8_t apic_id;
|
||||
uint32_t flags;
|
||||
} packed;
|
||||
|
||||
struct acpi_ioapic {
|
||||
struct acpi_apic_header h;
|
||||
uint8_t ioapic_id;
|
||||
uint8_t reserved;
|
||||
uint32_t ioapic_addr;
|
||||
uint32_t global_intr_base;
|
||||
};
|
||||
|
||||
struct acpi_intr_override {
|
||||
struct acpi_apic_header h;
|
||||
uint8_t bus;
|
||||
uint8_t source;
|
||||
uint32_t interrupt;
|
||||
uint16_t flags;
|
||||
};
|
||||
|
||||
#define ACPI_MAP_START 0xC5000000
|
||||
|
||||
void acpi_init(void);
|
||||
|
||||
#endif // _ACPI_ACPI_H
|
||||
Reference in New Issue
Block a user