60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
#ifndef ACPI_H_
|
|
#define ACPI_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#define BIOS_START 0x000E0000
|
|
#define BIOS_END 0x000FFFFF
|
|
#define RSDP_SIG "RSD PTR "
|
|
#define RSDP_SIG_LEN 8
|
|
#define RSDP_SIZE 20
|
|
|
|
#define ACPI_VER_1 0
|
|
#define ACPI_VER_OTHER 2
|
|
|
|
struct rsdp {
|
|
char Signature[RSDP_SIG_LEN];
|
|
uint8_t Checksum;
|
|
char OEMID[6];
|
|
uint8_t Revision;
|
|
uint32_t RsdtAddress;
|
|
} __attribute__ ((packed));
|
|
|
|
struct ACPISDTHeader {
|
|
char Signature[4];
|
|
uint32_t Length;
|
|
uint8_t Revision;
|
|
uint8_t Checksum;
|
|
char OEMID[6];
|
|
char OEMTableID[8];
|
|
uint32_t OEMRevision;
|
|
uint32_t CreatorID;
|
|
uint32_t CreatorRevision;
|
|
};
|
|
|
|
struct rsdt {
|
|
struct ACPISDTHeader h;
|
|
uint32_t other_sdt[];
|
|
};
|
|
|
|
struct mcfg_entry {
|
|
uint64_t base_addr;
|
|
uint16_t pci_seg_num;
|
|
uint8_t pci_bus_start;
|
|
uint8_t pci_bus_end;
|
|
uint32_t reserved;
|
|
};
|
|
|
|
struct mcfg {
|
|
struct ACPISDTHeader h;
|
|
uint64_t reserved;
|
|
struct mcfg_entry entries[];
|
|
};
|
|
|
|
struct rsdp *acpi_search_for_rsdp();
|
|
int acpi_validate_rsdp_checksum(struct rsdp *s);
|
|
int acpi_validate_sdt_checksum(struct ACPISDTHeader *s);
|
|
struct ACPISDTHeader *acpi_find_table(struct rsdt *root, const char *signature);
|
|
|
|
#endif
|