2024-05-22 12:25:52 -04:00
|
|
|
#ifndef RK_ACPI_H_
|
|
|
|
#define RK_ACPI_H_
|
2024-05-20 05:59:07 -04:00
|
|
|
|
|
|
|
#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[];
|
|
|
|
};
|
|
|
|
|
2024-05-20 17:39:20 -04:00
|
|
|
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[];
|
|
|
|
};
|
|
|
|
|
2024-05-21 22:07:04 -04:00
|
|
|
struct GenericAddressStructure
|
|
|
|
{
|
|
|
|
uint8_t AddressSpace;
|
|
|
|
uint8_t BitWidth;
|
|
|
|
uint8_t BitOffset;
|
|
|
|
uint8_t AccessSize;
|
|
|
|
uint64_t Address;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct fadt {
|
|
|
|
struct ACPISDTHeader h;
|
|
|
|
uint32_t FirmwareCtrl;
|
|
|
|
uint32_t Dsdt;
|
|
|
|
|
|
|
|
// field used in ACPI 1.0; no longer in use, for compatibility only
|
|
|
|
uint8_t Reserved;
|
|
|
|
|
|
|
|
uint8_t PreferredPowerManagementProfile;
|
|
|
|
uint16_t SCI_Interrupt;
|
|
|
|
uint32_t SMI_CommandPort;
|
|
|
|
uint8_t AcpiEnable;
|
|
|
|
uint8_t AcpiDisable;
|
|
|
|
uint8_t S4BIOS_REQ;
|
|
|
|
uint8_t PSTATE_Control;
|
|
|
|
uint32_t PM1aEventBlock;
|
|
|
|
uint32_t PM1bEventBlock;
|
|
|
|
uint32_t PM1aControlBlock;
|
|
|
|
uint32_t PM1bControlBlock;
|
|
|
|
uint32_t PM2ControlBlock;
|
|
|
|
uint32_t PMTimerBlock;
|
|
|
|
uint32_t GPE0Block;
|
|
|
|
uint32_t GPE1Block;
|
|
|
|
uint8_t PM1EventLength;
|
|
|
|
uint8_t PM1ControlLength;
|
|
|
|
uint8_t PM2ControlLength;
|
|
|
|
uint8_t PMTimerLength;
|
|
|
|
uint8_t GPE0Length;
|
|
|
|
uint8_t GPE1Length;
|
|
|
|
uint8_t GPE1Base;
|
|
|
|
uint8_t CStateControl;
|
|
|
|
uint16_t WorstC2Latency;
|
|
|
|
uint16_t WorstC3Latency;
|
|
|
|
uint16_t FlushSize;
|
|
|
|
uint16_t FlushStride;
|
|
|
|
uint8_t DutyOffset;
|
|
|
|
uint8_t DutyWidth;
|
|
|
|
uint8_t DayAlarm;
|
|
|
|
uint8_t MonthAlarm;
|
|
|
|
uint8_t Century;
|
|
|
|
|
|
|
|
// reserved in ACPI 1.0; used since ACPI 2.0+
|
|
|
|
uint16_t BootArchitectureFlags;
|
|
|
|
|
|
|
|
uint8_t Reserved2;
|
|
|
|
uint32_t Flags;
|
|
|
|
|
|
|
|
// 12 byte structure; see below for details
|
|
|
|
struct GenericAddressStructure ResetReg;
|
|
|
|
|
|
|
|
uint8_t ResetValue;
|
|
|
|
uint8_t Reserved3[3];
|
|
|
|
|
|
|
|
// 64bit pointers - Available on ACPI 2.0+
|
|
|
|
uint64_t X_FirmwareControl;
|
|
|
|
uint64_t X_Dsdt;
|
|
|
|
|
|
|
|
struct GenericAddressStructure X_PM1aEventBlock;
|
|
|
|
struct GenericAddressStructure X_PM1bEventBlock;
|
|
|
|
struct GenericAddressStructure X_PM1aControlBlock;
|
|
|
|
struct GenericAddressStructure X_PM1bControlBlock;
|
|
|
|
struct GenericAddressStructure X_PM2ControlBlock;
|
|
|
|
struct GenericAddressStructure X_PMTimerBlock;
|
|
|
|
struct GenericAddressStructure X_GPE0Block;
|
|
|
|
struct GenericAddressStructure X_GPE1Block;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct rsdp *acpi_locate_rsdp();
|
2024-05-20 05:59:07 -04:00
|
|
|
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);
|
2024-05-21 22:07:04 -04:00
|
|
|
void *acpi_locate_sdt(struct rsdt *rsdt, const char sig[4]);
|
2024-05-20 05:59:07 -04:00
|
|
|
|
|
|
|
#endif
|