2010-09-02 17:43:51 +02:00
|
|
|
#ifndef __ACPI_H__
|
|
|
|
#define __ACPI_H__
|
|
|
|
|
|
|
|
#include "kernel/kernel.h"
|
|
|
|
|
2010-09-07 09:18:11 +02:00
|
|
|
/* ACPI root system description pointer */
|
|
|
|
struct acpi_rsdp {
|
|
|
|
char signature[8]; /* must be "RSD PTR " */
|
|
|
|
u8_t checksum;
|
|
|
|
char oemid[6];
|
|
|
|
u8_t revision;
|
|
|
|
u32_t rsdt_addr;
|
|
|
|
u32_t length;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define ACPI_SDT_SIGNATURE_LEN 4
|
|
|
|
|
|
|
|
#define ACPI_SDT_SIGNATURE(name) #name
|
|
|
|
|
|
|
|
/* header common to all system description tables */
|
|
|
|
struct acpi_sdt_header {
|
|
|
|
char signature[ACPI_SDT_SIGNATURE_LEN];
|
|
|
|
u32_t length;
|
|
|
|
u8_t revision;
|
|
|
|
u8_t checksum;
|
|
|
|
char oemid[6];
|
|
|
|
char oem_table_id[8];
|
|
|
|
u32_t oem_revision;
|
|
|
|
u32_t creator_id;
|
|
|
|
u32_t creator_revision;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct acpi_madt_hdr {
|
|
|
|
struct acpi_sdt_header hdr;
|
|
|
|
u32_t local_apic_address;
|
|
|
|
u32_t flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define ACPI_MADT_TYPE_LAPIC 0
|
|
|
|
#define ACPI_MADT_TYPE_IOAPIC 1
|
|
|
|
#define ACPI_MADT_TYPE_INT_SRC 2
|
|
|
|
#define ACPI_MADT_TYPE_NMI_SRC 3
|
|
|
|
#define ACPI_MADT_TYPE_LAPIC_NMI 4
|
|
|
|
#define ACPI_MADT_TYPE_LAPIC_ADRESS 5
|
|
|
|
#define ACPI_MADT_TYPE_IOSAPIC 6
|
|
|
|
#define ACPI_MADT_TYPE_LSAPIC 7
|
|
|
|
#define ACPI_MADT_TYPE_PLATFORM_INT_SRC 8
|
|
|
|
#define ACPI_MADT_TYPE_Lx2APIC 9
|
|
|
|
#define ACPI_MADT_TYPE_Lx2APIC_NMI 10
|
|
|
|
|
|
|
|
struct acpi_madt_item_hdr{
|
|
|
|
u8_t type;
|
|
|
|
u8_t length;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct acpi_madt_lapic {
|
|
|
|
struct acpi_madt_item_hdr hdr;
|
|
|
|
u8_t acpi_cpu_id;
|
|
|
|
u8_t apic_id;
|
|
|
|
u32_t flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct acpi_madt_ioapic {
|
|
|
|
struct acpi_madt_item_hdr hdr;
|
|
|
|
u8_t id;
|
|
|
|
u8_t __reserved;
|
|
|
|
u32_t address;
|
|
|
|
u32_t global_int_base;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct acpi_madt_int_src {
|
|
|
|
struct acpi_madt_item_hdr hdr;
|
|
|
|
u8_t bus;
|
|
|
|
u8_t bus_int;
|
|
|
|
u32_t global_int;
|
|
|
|
u16_t mps_flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct acpi_madt_nmi {
|
|
|
|
struct acpi_madt_item_hdr hdr;
|
|
|
|
u16_t flags;
|
|
|
|
u32_t global_int;
|
|
|
|
};
|
|
|
|
|
2012-03-24 16:16:34 +01:00
|
|
|
void acpi_init(void);
|
2010-09-02 17:43:51 +02:00
|
|
|
|
2010-09-07 09:18:11 +02:00
|
|
|
/*
|
|
|
|
* Returns a pointer to the io acpi structure in the MADT table in ACPI. The
|
|
|
|
* pointer is valid only until paging is turned off. No memory is allocated in
|
|
|
|
* this function thus no memory needs to be freed
|
|
|
|
*/
|
2012-03-24 16:16:34 +01:00
|
|
|
struct acpi_madt_ioapic * acpi_get_ioapic_next(void);
|
2010-09-15 16:09:52 +02:00
|
|
|
/* same as above for local APICs */
|
2012-03-24 16:16:34 +01:00
|
|
|
struct acpi_madt_lapic * acpi_get_lapic_next(void);
|
2010-09-07 09:18:11 +02:00
|
|
|
|
2010-09-02 17:43:51 +02:00
|
|
|
#endif /* __ACPI_H__ */
|