Files
mop3/kernel/platform/i386_pc/acpi/acpi.h
2025-12-14 01:18:57 +01:00

174 lines
3.2 KiB
C

#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