#ifndef CRASHPOWEROS_ACPI_H #define CRASHPOWEROS_ACPI_H #include typedef struct RSDPDescriptor RSDPDescriptor; typedef struct GenericAddressStructure GenericAddressStructure; struct RSDPDescriptor { char Signature[8]; uint8_t Checksum; char OEMID[6]; uint8_t Revision; uint32_t RsdtAddress; } __attribute__ ((packed)); struct RSDPDescriptor20 { struct RSDPDescriptor firstPart; uint32_t Length; uint64_t XsdtAddress; uint8_t ExtendedChecksum; uint8_t reserved[3]; } __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 PointerToOtherSDT; }; struct XSDT { struct ACPISDTHeader h; uint64_t PointerToOtherSDT; }; 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; 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; uint16_t BootArchitectureFlags; uint8_t Reserved2; uint32_t Flags; GenericAddressStructure ResetReg; uint8_t ResetValue; uint8_t Reserved3[3]; uint64_t X_FirmwareControl; uint64_t X_Dsdt; GenericAddressStructure X_PM1aEventBlock; GenericAddressStructure X_PM1bEventBlock; GenericAddressStructure X_PM1aControlBlock; GenericAddressStructure X_PM1bControlBlock; GenericAddressStructure X_PM2ControlBlock; GenericAddressStructure X_PMTimerBlock; GenericAddressStructure X_GPE0Block; GenericAddressStructure X_GPE1Block; }; struct DSDT_vals { int length; void *S5_object; }; void *findRSDP(); int acpi_check_hdr(uint8_t *table, const char *sig, int n); void parse_dsdt(); void parse_acpi(void *mem); void parse_acpi20(void *mem); void acpi_enable(); void init_acpi(); #endif //CRASHPOWEROS_ACPI_H