1*26571a80Skettenis /* $OpenBSD: acpireg.h,v 1.61 2024/08/08 07:01:22 kettenis Exp $ */ 27934d707Stholo /* 37934d707Stholo * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com> 4c4fbd819Smarco * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org> 57934d707Stholo * 67934d707Stholo * Permission to use, copy, modify, and distribute this software for any 77934d707Stholo * purpose with or without fee is hereby granted, provided that the above 87934d707Stholo * copyright notice and this permission notice appear in all copies. 97934d707Stholo * 107934d707Stholo * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 117934d707Stholo * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 127934d707Stholo * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 137934d707Stholo * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 147934d707Stholo * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 157934d707Stholo * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 167934d707Stholo * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 177934d707Stholo */ 187934d707Stholo 19d2e44dfbSgrange #ifndef _DEV_ACPI_ACPIREG_H_ 20d2e44dfbSgrange #define _DEV_ACPI_ACPIREG_H_ 21d2e44dfbSgrange 227934d707Stholo /* Root System Descriptor Pointer */ 237934d707Stholo struct acpi_rsdp1 { 24d2eaebe9Skettenis uint8_t signature[8]; 257934d707Stholo #define RSDP_SIG "RSD PTR " 264b1a56afSjsg #define rsdp_signature rsdp1.signature 27d2eaebe9Skettenis uint8_t checksum; /* make sum == 0 */ 287934d707Stholo #define rsdp_checksum rsdp1.checksum 29d2eaebe9Skettenis uint8_t oemid[6]; 307934d707Stholo #define rsdp_oemid rsdp1.oemid 31d2eaebe9Skettenis uint8_t revision; /* 0 for 1, 2 for 2 */ 327934d707Stholo #define rsdp_revision rsdp1.revision 33d2eaebe9Skettenis uint32_t rsdt; /* physical */ 347934d707Stholo #define rsdp_rsdt rsdp1.rsdt 357934d707Stholo } __packed; 367934d707Stholo 377934d707Stholo struct acpi_rsdp { 387934d707Stholo struct acpi_rsdp1 rsdp1; 397934d707Stholo /* 407934d707Stholo * The following values are only valid 417934d707Stholo * when rsdp_revision == 2 427934d707Stholo */ 43d2eaebe9Skettenis uint32_t rsdp_length; /* length of rsdp */ 44d2eaebe9Skettenis uint64_t rsdp_xsdt; /* physical */ 45d2eaebe9Skettenis uint8_t rsdp_extchecksum; /* entire table */ 46d2eaebe9Skettenis uint8_t rsdp_reserved[3]; /* must be zero */ 477934d707Stholo } __packed; 487934d707Stholo 497934d707Stholo struct acpi_table_header { 50d2eaebe9Skettenis uint8_t signature[4]; 517934d707Stholo #define hdr_signature hdr.signature 52d2eaebe9Skettenis uint32_t length; 537934d707Stholo #define hdr_length hdr.length 54d2eaebe9Skettenis uint8_t revision; 557934d707Stholo #define hdr_revision hdr.revision 56d2eaebe9Skettenis uint8_t checksum; 577934d707Stholo #define hdr_checksum hdr.checksum 58d2eaebe9Skettenis uint8_t oemid[6]; 597934d707Stholo #define hdr_oemid hdr.oemid 60d2eaebe9Skettenis uint8_t oemtableid[8]; 617934d707Stholo #define hdr_oemtableid hdr.oemtableid 62d2eaebe9Skettenis uint32_t oemrevision; 637934d707Stholo #define hdr_oemrevision hdr.oemrevision 64d2eaebe9Skettenis uint8_t aslcompilerid[4]; 657934d707Stholo #define hdr_aslcompilerid hdr.aslcompilerid 66d2eaebe9Skettenis uint32_t aslcompilerrevision; 677934d707Stholo #define hdr_aslcompilerrevision hdr.aslcompilerrevision 687934d707Stholo } __packed; 697934d707Stholo 707934d707Stholo struct acpi_rsdt { 717934d707Stholo struct acpi_table_header hdr; 727934d707Stholo #define RSDT_SIG "RSDT" 73d2eaebe9Skettenis uint32_t table_offsets[1]; 747934d707Stholo } __packed; 757934d707Stholo 767934d707Stholo struct acpi_xsdt { 777934d707Stholo struct acpi_table_header hdr; 787934d707Stholo #define XSDT_SIG "XSDT" 79d2eaebe9Skettenis uint64_t table_offsets[1]; 807934d707Stholo } __packed; 817934d707Stholo 827934d707Stholo struct acpi_gas { 83d2eaebe9Skettenis uint8_t address_space_id; 847934d707Stholo #define GAS_SYSTEM_MEMORY 0 857934d707Stholo #define GAS_SYSTEM_IOSPACE 1 867934d707Stholo #define GAS_PCI_CFG_SPACE 2 877934d707Stholo #define GAS_EMBEDDED 3 887934d707Stholo #define GAS_SMBUS 4 897934d707Stholo #define GAS_FUNCTIONAL_FIXED 127 90d2eaebe9Skettenis uint8_t register_bit_width; 91d2eaebe9Skettenis uint8_t register_bit_offset; 92d2eaebe9Skettenis uint8_t access_size; 937934d707Stholo #define GAS_ACCESS_UNDEFINED 0 947934d707Stholo #define GAS_ACCESS_BYTE 1 957934d707Stholo #define GAS_ACCESS_WORD 2 967934d707Stholo #define GAS_ACCESS_DWORD 3 977934d707Stholo #define GAS_ACCESS_QWORD 4 98d2eaebe9Skettenis uint64_t address; 997934d707Stholo } __packed; 1007934d707Stholo 1017934d707Stholo struct acpi_fadt { 1027934d707Stholo struct acpi_table_header hdr; 1037934d707Stholo #define FADT_SIG "FACP" 104d2eaebe9Skettenis uint32_t firmware_ctl; /* phys addr FACS */ 105d2eaebe9Skettenis uint32_t dsdt; /* phys addr DSDT */ 106d2eaebe9Skettenis uint8_t int_model; /* interrupt model (hdr_revision < 3) */ 1077934d707Stholo #define FADT_INT_DUAL_PIC 0 1087934d707Stholo #define FADT_INT_MULTI_APIC 1 109d2eaebe9Skettenis uint8_t pm_profile; /* power mgmt profile */ 1107934d707Stholo #define FADT_PM_UNSPEC 0 1117934d707Stholo #define FADT_PM_DESKTOP 1 1127934d707Stholo #define FADT_PM_MOBILE 2 1137934d707Stholo #define FADT_PM_WORKSTATION 3 1147934d707Stholo #define FADT_PM_ENT_SERVER 4 1157934d707Stholo #define FADT_PM_SOHO_SERVER 5 1167934d707Stholo #define FADT_PM_APPLIANCE 6 1177934d707Stholo #define FADT_PM_PERF_SERVER 7 118d2eaebe9Skettenis uint16_t sci_int; /* SCI interrupt */ 119d2eaebe9Skettenis uint32_t smi_cmd; /* SMI command port */ 120d2eaebe9Skettenis uint8_t acpi_enable; /* value to enable */ 121d2eaebe9Skettenis uint8_t acpi_disable; /* value to disable */ 122d2eaebe9Skettenis uint8_t s4bios_req; /* value for S4 */ 123d2eaebe9Skettenis uint8_t pstate_cnt; /* value for performance (hdr_revision > 2) */ 124d2eaebe9Skettenis uint32_t pm1a_evt_blk; /* power management 1a */ 1254b1a56afSjsg uint32_t pm1b_evt_blk; /* power management 1b */ 126d2eaebe9Skettenis uint32_t pm1a_cnt_blk; /* pm control 1a */ 127d2eaebe9Skettenis uint32_t pm1b_cnt_blk; /* pm control 1b */ 128d2eaebe9Skettenis uint32_t pm2_cnt_blk; /* pm control 2 */ 129d2eaebe9Skettenis uint32_t pm_tmr_blk; 130d2eaebe9Skettenis uint32_t gpe0_blk; 131d2eaebe9Skettenis uint32_t gpe1_blk; 132d2eaebe9Skettenis uint8_t pm1_evt_len; 133d2eaebe9Skettenis uint8_t pm1_cnt_len; 134d2eaebe9Skettenis uint8_t pm2_cnt_len; 135d2eaebe9Skettenis uint8_t pm_tmr_len; 136d2eaebe9Skettenis uint8_t gpe0_blk_len; 137d2eaebe9Skettenis uint8_t gpe1_blk_len; 138d2eaebe9Skettenis uint8_t gpe1_base; 139d2eaebe9Skettenis uint8_t cst_cnt; /* (hdr_revision > 2) */ 140d2eaebe9Skettenis uint16_t p_lvl2_lat; 141d2eaebe9Skettenis uint16_t p_lvl3_lat; 142d2eaebe9Skettenis uint16_t flush_size; 143d2eaebe9Skettenis uint16_t flush_stride; 144d2eaebe9Skettenis uint8_t duty_offset; 145d2eaebe9Skettenis uint8_t duty_width; 146d2eaebe9Skettenis uint8_t day_alrm; 147d2eaebe9Skettenis uint8_t mon_alrm; 148d2eaebe9Skettenis uint8_t century; 149d2eaebe9Skettenis uint16_t iapc_boot_arch; /* (hdr_revision > 2) */ 1507934d707Stholo #define FADT_LEGACY_DEVICES 0x0001 /* Legacy devices supported */ 1517934d707Stholo #define FADT_i8042 0x0002 /* Keyboard controller present */ 1527934d707Stholo #define FADT_NO_VGA 0x0004 /* Do not probe VGA */ 1539a33df95Skettenis #define FADT_NO_MSI 0x0008 /* Do not enable MSI */ 154d2eaebe9Skettenis uint8_t reserved1; 155d2eaebe9Skettenis uint32_t flags; 1567934d707Stholo #define FADT_WBINVD 0x00000001 1577934d707Stholo #define FADT_WBINVD_FLUSH 0x00000002 1587934d707Stholo #define FADT_PROC_C1 0x00000004 1597934d707Stholo #define FADT_P_LVL2_UP 0x00000008 1607934d707Stholo #define FADT_PWR_BUTTON 0x00000010 1617934d707Stholo #define FADT_SLP_BUTTON 0x00000020 1627934d707Stholo #define FADT_FIX_RTC 0x00000040 1637934d707Stholo #define FADT_RTC_S4 0x00000080 1647934d707Stholo #define FADT_TMR_VAL_EXT 0x00000100 1657934d707Stholo #define FADT_DCK_CAP 0x00000200 1667934d707Stholo #define FADT_RESET_REG_SUP 0x00000400 1677934d707Stholo #define FADT_SEALED_CASE 0x00000800 1687934d707Stholo #define FADT_HEADLESS 0x00001000 1697934d707Stholo #define FADT_CPU_SW_SLP 0x00002000 1707934d707Stholo #define FADT_PCI_EXP_WAK 0x00004000 1717934d707Stholo #define FADT_USE_PLATFORM_CLOCK 0x00008000 1727934d707Stholo #define FADT_S4_RTC_STS_VALID 0x00010000 1737934d707Stholo #define FADT_REMOTE_POWER_ON_CAPABLE 0x00020000 1747934d707Stholo #define FADT_FORCE_APIC_CLUSTER_MODEL 0x00040000 1757934d707Stholo #define FADT_FORCE_APIC_PHYS_DEST_MODE 0x00080000 17671508f94Skettenis #define FADT_HW_REDUCED_ACPI 0x00100000 17771508f94Skettenis #define FADT_POWER_S0_IDLE_CAPABLE 0x00200000 1787934d707Stholo /* 1797934d707Stholo * Following values only exist when rev > 1 1807934d707Stholo * If the extended addresses exists, they 181b040ff10Sjsg * must be used in preference to the non- 1827934d707Stholo * extended values above 1837934d707Stholo */ 1847934d707Stholo struct acpi_gas reset_reg; 185d2eaebe9Skettenis uint8_t reset_value; 186d2eaebe9Skettenis uint8_t reserved2a; 187d2eaebe9Skettenis uint8_t reserved2b; 188f8753e49Skettenis uint8_t fadt_minor; 189d2eaebe9Skettenis uint64_t x_firmware_ctl; 190d2eaebe9Skettenis uint64_t x_dsdt; 1917934d707Stholo struct acpi_gas x_pm1a_evt_blk; 1927934d707Stholo struct acpi_gas x_pm1b_evt_blk; 1937934d707Stholo struct acpi_gas x_pm1a_cnt_blk; 1947934d707Stholo struct acpi_gas x_pm1b_cnt_blk; 1957934d707Stholo struct acpi_gas x_pm2_cnt_blk; 1967934d707Stholo struct acpi_gas x_pm_tmr_blk; 1977934d707Stholo struct acpi_gas x_gpe0_blk; 1987934d707Stholo struct acpi_gas x_gpe1_blk; 19975c2faffSkettenis struct acpi_gas sleep_control_reg; 20075c2faffSkettenis struct acpi_gas sleep_status_reg; 2017934d707Stholo } __packed; 2027934d707Stholo 2037934d707Stholo struct acpi_dsdt { 2047934d707Stholo struct acpi_table_header hdr; 2057934d707Stholo #define DSDT_SIG "DSDT" 206d2eaebe9Skettenis uint8_t aml[1]; 2077934d707Stholo } __packed; 2087934d707Stholo 2097934d707Stholo struct acpi_ssdt { 2107934d707Stholo struct acpi_table_header hdr; 2117934d707Stholo #define SSDT_SIG "SSDT" 212d2eaebe9Skettenis uint8_t aml[1]; 2137934d707Stholo } __packed; 2147934d707Stholo 2157934d707Stholo /* 2167934d707Stholo * Table deprecated by ACPI 2.0 2177934d707Stholo */ 2187934d707Stholo struct acpi_psdt { 2197934d707Stholo struct acpi_table_header hdr; 2207934d707Stholo #define PSDT_SIG "PSDT" 2217934d707Stholo } __packed; 2227934d707Stholo 2237934d707Stholo struct acpi_madt { 2247934d707Stholo struct acpi_table_header hdr; 2257934d707Stholo #define MADT_SIG "APIC" 226d2eaebe9Skettenis uint32_t local_apic_address; 227d2eaebe9Skettenis uint32_t flags; 2287934d707Stholo #define ACPI_APIC_PCAT_COMPAT 0x00000001 2297934d707Stholo } __packed; 2307934d707Stholo 2317934d707Stholo struct acpi_madt_lapic { 232d2eaebe9Skettenis uint8_t apic_type; 2337934d707Stholo #define ACPI_MADT_LAPIC 0 234d2eaebe9Skettenis uint8_t length; 235d2eaebe9Skettenis uint8_t acpi_proc_id; 236d2eaebe9Skettenis uint8_t apic_id; 237d2eaebe9Skettenis uint32_t flags; 2387934d707Stholo #define ACPI_PROC_ENABLE 0x00000001 2397934d707Stholo } __packed; 2407934d707Stholo 2417934d707Stholo struct acpi_madt_ioapic { 242d2eaebe9Skettenis uint8_t apic_type; 2437934d707Stholo #define ACPI_MADT_IOAPIC 1 244d2eaebe9Skettenis uint8_t length; 245d2eaebe9Skettenis uint8_t acpi_ioapic_id; 246d2eaebe9Skettenis uint8_t reserved; 247d2eaebe9Skettenis uint32_t address; 248d2eaebe9Skettenis uint32_t global_int_base; 2497934d707Stholo } __packed; 2507934d707Stholo 2517934d707Stholo struct acpi_madt_override { 252d2eaebe9Skettenis uint8_t apic_type; 2537934d707Stholo #define ACPI_MADT_OVERRIDE 2 254d2eaebe9Skettenis uint8_t length; 255d2eaebe9Skettenis uint8_t bus; 2567934d707Stholo #define ACPI_OVERRIDE_BUS_ISA 0 257d2eaebe9Skettenis uint8_t source; 258d2eaebe9Skettenis uint32_t global_int; 259d2eaebe9Skettenis uint16_t flags; 2607934d707Stholo #define ACPI_OVERRIDE_POLARITY_BITS 0x3 2617934d707Stholo #define ACPI_OVERRIDE_POLARITY_BUS 0x0 2627934d707Stholo #define ACPI_OVERRIDE_POLARITY_HIGH 0x1 2637934d707Stholo #define ACPI_OVERRIDE_POLARITY_LOW 0x3 2647934d707Stholo #define ACPI_OVERRIDE_TRIGGER_BITS 0xc 2657934d707Stholo #define ACPI_OVERRIDE_TRIGGER_BUS 0x0 2667934d707Stholo #define ACPI_OVERRIDE_TRIGGER_EDGE 0x4 2677934d707Stholo #define ACPI_OVERRIDE_TRIGGER_LEVEL 0xc 2687934d707Stholo } __packed; 2697934d707Stholo 2707934d707Stholo struct acpi_madt_nmi { 271d2eaebe9Skettenis uint8_t apic_type; 2727934d707Stholo #define ACPI_MADT_NMI 3 273d2eaebe9Skettenis uint8_t length; 274d2eaebe9Skettenis uint16_t flags; /* Same flags as acpi_madt_override */ 275d2eaebe9Skettenis uint32_t global_int; 2767934d707Stholo } __packed; 2777934d707Stholo 2787934d707Stholo struct acpi_madt_lapic_nmi { 279d2eaebe9Skettenis uint8_t apic_type; 2807934d707Stholo #define ACPI_MADT_LAPIC_NMI 4 281d2eaebe9Skettenis uint8_t length; 282d2eaebe9Skettenis uint8_t acpi_proc_id; 283d2eaebe9Skettenis uint16_t flags; /* Same flags as acpi_madt_override */ 284d2eaebe9Skettenis uint8_t local_apic_lint; 2857934d707Stholo } __packed; 2867934d707Stholo 2877934d707Stholo struct acpi_madt_lapic_override { 288d2eaebe9Skettenis uint8_t apic_type; 2897934d707Stholo #define ACPI_MADT_LAPIC_OVERRIDE 5 290d2eaebe9Skettenis uint8_t length; 291d2eaebe9Skettenis uint16_t reserved; 292d2eaebe9Skettenis uint64_t lapic_address; 2937934d707Stholo } __packed; 2947934d707Stholo 2957934d707Stholo struct acpi_madt_io_sapic { 296d2eaebe9Skettenis uint8_t apic_type; 2977934d707Stholo #define ACPI_MADT_IO_SAPIC 6 298d2eaebe9Skettenis uint8_t length; 299d2eaebe9Skettenis uint8_t iosapic_id; 300d2eaebe9Skettenis uint8_t reserved; 301d2eaebe9Skettenis uint32_t global_int_base; 302d2eaebe9Skettenis uint64_t iosapic_address; 3037934d707Stholo } __packed; 3047934d707Stholo 3057934d707Stholo struct acpi_madt_local_sapic { 306d2eaebe9Skettenis uint8_t apic_type; 3077934d707Stholo #define ACPI_MADT_LOCAL_SAPIC 7 308d2eaebe9Skettenis uint8_t length; 309d2eaebe9Skettenis uint8_t acpi_proc_id; 310d2eaebe9Skettenis uint8_t local_sapic_id; 311d2eaebe9Skettenis uint8_t local_sapic_eid; 312d2eaebe9Skettenis uint8_t reserved[3]; 313d2eaebe9Skettenis uint32_t flags; /* Same flags as acpi_madt_lapic */ 314d2eaebe9Skettenis uint32_t acpi_proc_uid; 315d2eaebe9Skettenis uint8_t acpi_proc_uid_string[1]; 3167934d707Stholo } __packed; 3177934d707Stholo 3187934d707Stholo struct acpi_madt_platform_int { 319d2eaebe9Skettenis uint8_t apic_type; 3207934d707Stholo #define ACPI_MADT_PLATFORM_INT 8 321d2eaebe9Skettenis uint8_t length; 322d2eaebe9Skettenis uint16_t flags; /* Same flags as acpi_madt_override */ 323d2eaebe9Skettenis uint8_t int_type; 3247934d707Stholo #define ACPI_MADT_PLATFORM_PMI 1 3257934d707Stholo #define ACPI_MADT_PLATFORM_INIT 2 3267934d707Stholo #define ACPI_MADT_PLATFORM_CORR_ERROR 3 327d2eaebe9Skettenis uint8_t proc_id; 328d2eaebe9Skettenis uint8_t proc_eid; 329d2eaebe9Skettenis uint8_t io_sapic_vec; 330d2eaebe9Skettenis uint32_t global_int; 331d2eaebe9Skettenis uint32_t platform_int_flags; 3327934d707Stholo #define ACPI_MADT_PLATFORM_CPEI 0x00000001 3337934d707Stholo } __packed; 3347934d707Stholo 3350dd0b244Skettenis struct acpi_madt_x2apic { 336d2eaebe9Skettenis uint8_t apic_type; 3370dd0b244Skettenis #define ACPI_MADT_X2APIC 9 338d2eaebe9Skettenis uint8_t length; 339d2eaebe9Skettenis uint8_t reserved[2]; 340d2eaebe9Skettenis uint32_t apic_id; 341d2eaebe9Skettenis uint32_t flags; /* Same flags as acpi_madt_lapic */ 342d2eaebe9Skettenis uint32_t acpi_proc_uid; 3430dd0b244Skettenis } __packed; 3440dd0b244Skettenis 3450dd0b244Skettenis struct acpi_madt_x2apic_nmi { 346d2eaebe9Skettenis uint8_t apic_type; 3470dd0b244Skettenis #define ACPI_MADT_X2APIC_NMI 10 348d2eaebe9Skettenis uint8_t length; 349d2eaebe9Skettenis uint16_t flags; /* Same flags as acpi_madt_override */ 350d2eaebe9Skettenis uint32_t apic_proc_uid; 351d2eaebe9Skettenis uint8_t local_x2apic_lint; 352d2eaebe9Skettenis uint8_t reserved[3]; 3530dd0b244Skettenis } __packed; 3540dd0b244Skettenis 355baca640cSjmatthew #define ACPI_MADT_OEM_RSVD 128 356baca640cSjmatthew 3577934d707Stholo union acpi_madt_entry { 3587934d707Stholo struct acpi_madt_lapic madt_lapic; 3597934d707Stholo struct acpi_madt_ioapic madt_ioapic; 3607934d707Stholo struct acpi_madt_override madt_override; 3617934d707Stholo struct acpi_madt_nmi madt_nmi; 3627934d707Stholo struct acpi_madt_lapic_nmi madt_lapic_nmi; 3637934d707Stholo struct acpi_madt_lapic_override madt_lapic_override; 3647934d707Stholo struct acpi_madt_io_sapic madt_io_sapic; 3657934d707Stholo struct acpi_madt_local_sapic madt_local_sapic; 3667934d707Stholo struct acpi_madt_platform_int madt_platform_int; 3670dd0b244Skettenis struct acpi_madt_x2apic madt_x2apic; 3680dd0b244Skettenis struct acpi_madt_x2apic_nmi madt_x2apic_nmi; 3697934d707Stholo } __packed; 3707934d707Stholo 3717934d707Stholo struct acpi_sbst { 3727934d707Stholo struct acpi_table_header hdr; 3737934d707Stholo #define SBST_SIG "SBST" 374d2eaebe9Skettenis uint32_t warning_energy_level; 375d2eaebe9Skettenis uint32_t low_energy_level; 376d2eaebe9Skettenis uint32_t critical_energy_level; 3777934d707Stholo } __packed; 3787934d707Stholo 3797934d707Stholo struct acpi_ecdt { 3807934d707Stholo struct acpi_table_header hdr; 3817934d707Stholo #define ECDT_SIG "ECDT" 3827934d707Stholo struct acpi_gas ec_control; 3837934d707Stholo struct acpi_gas ec_data; 384d2eaebe9Skettenis uint32_t uid; 385d2eaebe9Skettenis uint8_t gpe_bit; 386d2eaebe9Skettenis uint8_t ec_id[1]; 3877934d707Stholo } __packed; 3887934d707Stholo 3897934d707Stholo struct acpi_srat { 3907934d707Stholo struct acpi_table_header hdr; 3917934d707Stholo #define SRAT_SIG "SRAT" 392d2eaebe9Skettenis uint32_t reserved1; 393d2eaebe9Skettenis uint64_t reserved2; 3947934d707Stholo } __packed; 3957934d707Stholo 3967934d707Stholo struct acpi_slit { 3977934d707Stholo struct acpi_table_header hdr; 3987934d707Stholo #define SLIT_SIG "SLIT" 399d2eaebe9Skettenis uint64_t number_of_localities; 4007934d707Stholo } __packed; 4017934d707Stholo 4027934d707Stholo struct acpi_hpet { 4037934d707Stholo struct acpi_table_header hdr; 4047934d707Stholo #define HPET_SIG "HPET" 405d2eaebe9Skettenis uint32_t event_timer_block_id; 4067934d707Stholo struct acpi_gas base_address; 407d2eaebe9Skettenis uint8_t hpet_number; 408d2eaebe9Skettenis uint16_t main_counter_min_clock_tick; 409d2eaebe9Skettenis uint8_t page_protection; 4107934d707Stholo } __packed; 4117934d707Stholo 412fd1ffd5dSkettenis struct acpi_mcfg { 413fd1ffd5dSkettenis struct acpi_table_header hdr; 414fd1ffd5dSkettenis #define MCFG_SIG "MCFG" 415d2eaebe9Skettenis uint8_t reserved[8]; 416d6a1c66eSkettenis } __packed; 417d6a1c66eSkettenis 418d6a1c66eSkettenis struct acpi_mcfg_entry { 419d2eaebe9Skettenis uint64_t base_address; 420d2eaebe9Skettenis uint16_t segment; 421d2eaebe9Skettenis uint8_t min_bus_number; 422d2eaebe9Skettenis uint8_t max_bus_number; 423d2eaebe9Skettenis uint32_t reserved1; 424fd1ffd5dSkettenis } __packed; 425fd1ffd5dSkettenis 426dcad7802Skettenis struct acpi_spcr { 427dcad7802Skettenis struct acpi_table_header hdr; 428dcad7802Skettenis #define SPCR_SIG "SPCR" 429dcad7802Skettenis uint8_t interface_type; 430dcad7802Skettenis #define SPCR_16550 0 431dcad7802Skettenis #define SPCR_16450 1 432dcad7802Skettenis #define SPCR_ARM_PL011 3 433dcad7802Skettenis #define SPCR_ARM_SBSA 14 434dcad7802Skettenis uint8_t reserved1[3]; 435dcad7802Skettenis struct acpi_gas base_address; 436dcad7802Skettenis uint8_t interrupt_type; 437dcad7802Skettenis uint8_t irq; 438dcad7802Skettenis uint32_t gsiv; 439dcad7802Skettenis uint8_t baud_rate; 440dcad7802Skettenis uint8_t parity; 441dcad7802Skettenis uint8_t stop_bits; 442dcad7802Skettenis uint8_t flow_control; 443dcad7802Skettenis uint8_t terminal_type; 444dcad7802Skettenis uint8_t reserved2; 445dcad7802Skettenis uint16_t pci_device_id; 446dcad7802Skettenis uint16_t pci_vendor_id; 447dcad7802Skettenis uint8_t pci_bus; 448dcad7802Skettenis uint8_t pci_device; 449dcad7802Skettenis uint8_t pci_function; 450dcad7802Skettenis uint32_t pci_flags; 451dcad7802Skettenis uint8_t pci_segment; 452dcad7802Skettenis uint32_t reserved3; 453eeb8d472Spatrick } __packed; 454dcad7802Skettenis 4557934d707Stholo struct acpi_facs { 456d2eaebe9Skettenis uint8_t signature[4]; 4577934d707Stholo #define FACS_SIG "FACS" 458d2eaebe9Skettenis uint32_t length; 459d2eaebe9Skettenis uint32_t hardware_signature; 460d2eaebe9Skettenis uint32_t wakeup_vector; 461d2eaebe9Skettenis uint32_t global_lock; 4627934d707Stholo #define FACS_LOCK_PENDING 0x00000001 4637934d707Stholo #define FACS_LOCK_OWNED 0x00000002 464d2eaebe9Skettenis uint32_t flags; 4657934d707Stholo #define FACS_S4BIOS_F 0x00000001 /* S4BIOS_REQ supported */ 466fbb4bab4Smarco uint64_t x_wakeup_vector; 467d2eaebe9Skettenis uint8_t version; 468d2eaebe9Skettenis uint8_t reserved[31]; 4697934d707Stholo } __packed; 4707934d707Stholo 471306068a2Sdv struct acpi_tpm2 { 472306068a2Sdv struct acpi_table_header hdr; 473306068a2Sdv #define TPM2_SIG "TPM2" 474306068a2Sdv uint32_t reserved; 475306068a2Sdv uint64_t control_addr; 476306068a2Sdv uint32_t start_method; 477306068a2Sdv } __packed; 478306068a2Sdv 4792d915ce1Sjordan /* 480*26571a80Skettenis * Intel ACPI Low Power S0 Idle 481*26571a80Skettenis */ 482*26571a80Skettenis struct acpi_lpit { 483*26571a80Skettenis struct acpi_table_header hdr; 484*26571a80Skettenis #define LPIT_SIG "LPIT" 485*26571a80Skettenis /* struct acpi_lpit_entry[]; */ 486*26571a80Skettenis } __packed; 487*26571a80Skettenis 488*26571a80Skettenis struct acpi_lpit_entry { 489*26571a80Skettenis uint32_t type; 490*26571a80Skettenis uint32_t length; 491*26571a80Skettenis uint16_t uid; 492*26571a80Skettenis uint16_t reserved; 493*26571a80Skettenis uint32_t flags; 494*26571a80Skettenis #define LPIT_DISABLED (1L << 0) 495*26571a80Skettenis #define LPIT_COUNTER_NOT_AVAILABLE (1L << 1) 496*26571a80Skettenis struct acpi_gas entry_trigger; 497*26571a80Skettenis uint32_t residency; 498*26571a80Skettenis uint32_t latency; 499*26571a80Skettenis struct acpi_gas residency_counter; 500*26571a80Skettenis uint64_t residency_frequency; 501*26571a80Skettenis }; 502*26571a80Skettenis 503*26571a80Skettenis /* 5042d915ce1Sjordan * Intel ACPI DMA Remapping Entries 5052d915ce1Sjordan */ 50657ab8bb1Sjordan struct acpidmar_devpath { 5072d915ce1Sjordan uint8_t device; 5082d915ce1Sjordan uint8_t function; 5092d915ce1Sjordan } __packed; 5102d915ce1Sjordan 51157ab8bb1Sjordan struct acpidmar_devscope { 5122d915ce1Sjordan uint8_t type; 5132d915ce1Sjordan #define DMAR_ENDPOINT 0x1 5142d915ce1Sjordan #define DMAR_BRIDGE 0x2 5152d915ce1Sjordan #define DMAR_IOAPIC 0x3 5162d915ce1Sjordan #define DMAR_HPET 0x4 5172d915ce1Sjordan uint8_t length; 5182d915ce1Sjordan uint16_t reserved; 5192d915ce1Sjordan uint8_t enumid; 5202d915ce1Sjordan uint8_t bus; 5212d915ce1Sjordan } __packed; 5222d915ce1Sjordan 5232d915ce1Sjordan /* DMA Remapping Hardware Unit */ 52457ab8bb1Sjordan struct acpidmar_drhd { 5252d915ce1Sjordan uint16_t type; 5262d915ce1Sjordan uint16_t length; 5272d915ce1Sjordan 5282d915ce1Sjordan uint8_t flags; 5292d915ce1Sjordan uint8_t reserved; 5302d915ce1Sjordan uint16_t segment; 5312d915ce1Sjordan uint64_t address; 5322d915ce1Sjordan /* struct acpidmar_devscope[]; */ 5332d915ce1Sjordan } __packed; 5342d915ce1Sjordan 5352d915ce1Sjordan /* Reserved Memory Region Reporting */ 53657ab8bb1Sjordan struct acpidmar_rmrr { 5372d915ce1Sjordan uint16_t type; 5382d915ce1Sjordan uint16_t length; 5392d915ce1Sjordan 5402d915ce1Sjordan uint16_t reserved; 5412d915ce1Sjordan uint16_t segment; 5422d915ce1Sjordan uint64_t base; 5432d915ce1Sjordan uint64_t limit; 5442d915ce1Sjordan /* struct acpidmar_devscope[]; */ 5452d915ce1Sjordan } __packed; 5462d915ce1Sjordan 5472d915ce1Sjordan /* Root Port ATS Capability Reporting */ 54857ab8bb1Sjordan struct acpidmar_atsr { 5492d915ce1Sjordan uint16_t type; 5502d915ce1Sjordan uint16_t length; 5512d915ce1Sjordan 5522d915ce1Sjordan uint8_t flags; 5532d915ce1Sjordan uint8_t reserved; 5542d915ce1Sjordan uint16_t segment; 5552d915ce1Sjordan /* struct acpidmar_devscope[]; */ 5562d915ce1Sjordan } __packed; 5572d915ce1Sjordan 5582d915ce1Sjordan union acpidmar_entry { 5592d915ce1Sjordan struct { 5602d915ce1Sjordan uint16_t type; 5612d915ce1Sjordan #define DMAR_DRHD 0x0 5622d915ce1Sjordan #define DMAR_RMRR 0x1 5632d915ce1Sjordan #define DMAR_ATSR 0x2 5642d915ce1Sjordan #define DMAR_RHSA 0x3 5652d915ce1Sjordan uint16_t length; 5662d915ce1Sjordan } __packed; 5672d915ce1Sjordan struct acpidmar_drhd drhd; 5682d915ce1Sjordan struct acpidmar_rmrr rmrr; 5692d915ce1Sjordan struct acpidmar_atsr atsr; 5702d915ce1Sjordan } __packed; 5712d915ce1Sjordan 5722d915ce1Sjordan struct acpi_dmar { 5732d915ce1Sjordan struct acpi_table_header hdr; 5742d915ce1Sjordan #define DMAR_SIG "DMAR" 5752d915ce1Sjordan uint8_t haw; 5762d915ce1Sjordan uint8_t flags; 5772d915ce1Sjordan uint8_t reserved[10]; 5782d915ce1Sjordan /* struct acpidmar_entry[]; */ 5792d915ce1Sjordan } __packed; 5802d915ce1Sjordan 5812d915ce1Sjordan /* 5822d915ce1Sjordan * AMD I/O Virtualization Remapping Entries 5832d915ce1Sjordan */ 5842d915ce1Sjordan union acpi_ivhd_entry { 5852d915ce1Sjordan uint8_t type; 5862d915ce1Sjordan #define IVHD_ALL 1 5872d915ce1Sjordan #define IVHD_SEL 2 5882d915ce1Sjordan #define IVHD_SOR 3 5892d915ce1Sjordan #define IVHD_EOR 4 5902d915ce1Sjordan #define IVHD_ALIAS_SEL 66 5912d915ce1Sjordan #define IVHD_ALIAS_SOR 67 5922d915ce1Sjordan #define IVHD_EXT_SEL 70 5932d915ce1Sjordan #define IVHD_EXT_SOR 71 5942d915ce1Sjordan #define IVHD_SPECIAL 72 5952d915ce1Sjordan struct { 5962d915ce1Sjordan uint8_t type; 5972d915ce1Sjordan uint16_t resvd; 5982d915ce1Sjordan uint8_t data; 5992d915ce1Sjordan } __packed all; 6002d915ce1Sjordan struct { 6012d915ce1Sjordan uint8_t type; 6022d915ce1Sjordan uint16_t devid; 6032d915ce1Sjordan uint8_t data; 6042d915ce1Sjordan } __packed sel; 6052d915ce1Sjordan struct { 6062d915ce1Sjordan uint8_t type; 6072d915ce1Sjordan uint16_t devid; 6082d915ce1Sjordan uint8_t data; 6092d915ce1Sjordan } __packed sor; 6102d915ce1Sjordan struct { 6112d915ce1Sjordan uint8_t type; 6122d915ce1Sjordan uint16_t devid; 6132d915ce1Sjordan uint8_t resvd; 6142d915ce1Sjordan } __packed eor; 6152d915ce1Sjordan struct { 6162d915ce1Sjordan uint8_t type; 6172d915ce1Sjordan uint16_t devid; 6182d915ce1Sjordan uint8_t data; 6192d915ce1Sjordan uint8_t resvd1; 6202d915ce1Sjordan uint16_t srcid; 6212d915ce1Sjordan uint8_t resvd2; 6222d915ce1Sjordan } __packed alias; 6232d915ce1Sjordan struct { 6242d915ce1Sjordan uint8_t type; 6252d915ce1Sjordan uint16_t devid; 6262d915ce1Sjordan uint8_t data; 6272d915ce1Sjordan uint32_t extdata; 6282d915ce1Sjordan #define IVHD_ATS_DIS (1L << 31) 6292d915ce1Sjordan } __packed ext; 6302d915ce1Sjordan struct { 6312d915ce1Sjordan uint8_t type; 6322d915ce1Sjordan uint16_t resvd; 6332d915ce1Sjordan uint8_t data; 6342d915ce1Sjordan uint8_t handle; 6352d915ce1Sjordan uint16_t devid; 6362d915ce1Sjordan uint8_t variety; 6372d915ce1Sjordan #define IVHD_IOAPIC 0x01 6382d915ce1Sjordan #define IVHD_HPET 0x02 6392d915ce1Sjordan } __packed special; 6402d915ce1Sjordan } __packed; 6412d915ce1Sjordan 64257ab8bb1Sjordan struct acpi_ivmd { 6432d915ce1Sjordan uint8_t type; 6442d915ce1Sjordan uint8_t flags; 6452d915ce1Sjordan #define IVMD_EXCLRANGE (1L << 3) 6462d915ce1Sjordan #define IVMD_IW (1L << 2) 6472d915ce1Sjordan #define IVMD_IR (1L << 1) 6482d915ce1Sjordan #define IVMD_UNITY (1L << 0) 6492d915ce1Sjordan uint16_t length; 6502d915ce1Sjordan uint16_t devid; 6512d915ce1Sjordan uint16_t auxdata; 6522d915ce1Sjordan uint8_t reserved[8]; 6532d915ce1Sjordan uint64_t base; 6542d915ce1Sjordan uint64_t limit; 6552d915ce1Sjordan } __packed; 6562d915ce1Sjordan 65757ab8bb1Sjordan struct acpi_ivhd { 6582d915ce1Sjordan uint8_t type; 6592d915ce1Sjordan uint8_t flags; 66052938089Sjordan #define IVHD_PPRSUP (1L << 7) 66152938089Sjordan #define IVHD_PREFSUP (1L << 6) 66252938089Sjordan #define IVHD_COHERENT (1L << 5) 6632d915ce1Sjordan #define IVHD_IOTLB (1L << 4) 6642d915ce1Sjordan #define IVHD_ISOC (1L << 3) 6652d915ce1Sjordan #define IVHD_RESPASSPW (1L << 2) 6662d915ce1Sjordan #define IVHD_PASSPW (1L << 1) 6672d915ce1Sjordan #define IVHD_HTTUNEN (1L << 0) 6682d915ce1Sjordan uint16_t length; 6692d915ce1Sjordan uint16_t devid; 6702d915ce1Sjordan uint16_t cap; 6712d915ce1Sjordan uint64_t address; 6722d915ce1Sjordan uint16_t segment; 6732d915ce1Sjordan uint16_t info; 6742d915ce1Sjordan #define IVHD_UNITID_SHIFT 8 6752d915ce1Sjordan #define IVHD_UNITID_MASK 0x1F 6762d915ce1Sjordan #define IVHD_MSINUM_SHIFT 0 6772d915ce1Sjordan #define IVHD_MSINUM_MASK 0x1F 67852938089Sjordan uint32_t feature; 67952938089Sjordan } __packed; 68052938089Sjordan 68152938089Sjordan struct acpi_ivhd_ext { 68252938089Sjordan uint8_t type; 68352938089Sjordan uint8_t flags; 68452938089Sjordan uint16_t length; 68552938089Sjordan uint16_t devid; 68652938089Sjordan uint16_t cap; 68752938089Sjordan uint64_t address; 68852938089Sjordan uint16_t segment; 68952938089Sjordan uint16_t info; 69052938089Sjordan uint32_t attrib; 69152938089Sjordan uint64_t efr; 69252938089Sjordan uint8_t reserved[8]; 6932d915ce1Sjordan } __packed; 6942d915ce1Sjordan 6952d915ce1Sjordan union acpi_ivrs_entry { 6962d915ce1Sjordan struct { 6972d915ce1Sjordan uint8_t type; 6982d915ce1Sjordan #define IVRS_IVHD 0x10 69952938089Sjordan #define IVRS_IVHD_EXT 0x11 7002d915ce1Sjordan #define IVRS_IVMD_ALL 0x20 7012d915ce1Sjordan #define IVRS_IVMD_SPECIFIED 0x21 7022d915ce1Sjordan #define IVRS_IVMD_RANGE 0x22 7032d915ce1Sjordan uint8_t flags; 7042d915ce1Sjordan uint16_t length; 7052d915ce1Sjordan } __packed; 7062d915ce1Sjordan struct acpi_ivhd ivhd; 70752938089Sjordan struct acpi_ivhd_ext ivhd_ext; 7082d915ce1Sjordan struct acpi_ivmd ivmd; 7092d915ce1Sjordan } __packed; 7102d915ce1Sjordan 71157ab8bb1Sjordan struct acpi_ivrs { 7122d915ce1Sjordan struct acpi_table_header hdr; 7132d915ce1Sjordan #define IVRS_SIG "IVRS" 7142d915ce1Sjordan uint32_t ivinfo; 7152d915ce1Sjordan #define IVRS_ATSRNG (1L << 22) 7162d915ce1Sjordan #define IVRS_VASIZE_SHIFT 15 7172d915ce1Sjordan #define IVRS_VASIZE_MASK 0x7F 7182d915ce1Sjordan #define IVRS_PASIZE_SHIFT 8 7192d915ce1Sjordan #define IVRS_PASIZE_MASK 0x7F 7202d915ce1Sjordan uint8_t reserved[8]; 7212d915ce1Sjordan } __packed; 7222d915ce1Sjordan 7238a4c6a2eSpatrick struct acpi_iort { 7248a4c6a2eSpatrick struct acpi_table_header hdr; 7258a4c6a2eSpatrick #define IORT_SIG "IORT" 7268a4c6a2eSpatrick uint32_t number_of_nodes; 7278a4c6a2eSpatrick uint32_t offset; 7288a4c6a2eSpatrick uint32_t reserved; 7298a4c6a2eSpatrick } __packed; 7308a4c6a2eSpatrick 7318a4c6a2eSpatrick struct acpi_iort_node { 7328a4c6a2eSpatrick uint8_t type; 7338a4c6a2eSpatrick #define ACPI_IORT_ITS 0 734fe67bbf9Spatrick #define ACPI_IORT_NAMED_COMPONENT 1 7358a4c6a2eSpatrick #define ACPI_IORT_ROOT_COMPLEX 2 7368a4c6a2eSpatrick #define ACPI_IORT_SMMU 3 73767472c6aSpatrick #define ACPI_IORT_SMMU_V3 4 7388a4c6a2eSpatrick uint16_t length; 7398a4c6a2eSpatrick uint8_t revision; 7408a4c6a2eSpatrick uint32_t reserved1; 7418a4c6a2eSpatrick uint32_t number_of_mappings; 7428a4c6a2eSpatrick uint32_t mapping_offset; 7436642123eSpatrick } __packed; 7446642123eSpatrick 745aa5ad52dSjmatthew struct acpi_iort_its_node { 746aa5ad52dSjmatthew uint32_t number_of_itss; 747aa5ad52dSjmatthew uint32_t its_ids[]; 748aa5ad52dSjmatthew } __packed; 749aa5ad52dSjmatthew 750fe67bbf9Spatrick struct acpi_iort_nc_node { 751fe67bbf9Spatrick uint32_t node_flags; 752fe67bbf9Spatrick uint64_t memory_access_properties; 753fe67bbf9Spatrick uint8_t device_memory_address_size_limit; 754fe67bbf9Spatrick char device_object_name[]; 755fe67bbf9Spatrick } __packed; 756fe67bbf9Spatrick 7576642123eSpatrick struct acpi_iort_rc_node { 7588a4c6a2eSpatrick uint64_t memory_access_properties; 7592ee17f52Spatrick uint32_t ats_attributes; 7608a4c6a2eSpatrick uint32_t segment; 7618a4c6a2eSpatrick uint8_t memory_address_size_limit; 7628a4c6a2eSpatrick uint8_t reserved2[3]; 7638a4c6a2eSpatrick } __packed; 7648a4c6a2eSpatrick 76553e51ee2Spatrick struct acpi_iort_smmu_node { 76653e51ee2Spatrick uint64_t base_address; 76753e51ee2Spatrick uint64_t span; 7681e52e0acSpatrick uint32_t model; 7691e52e0acSpatrick #define ACPI_IORT_SMMU_V1 0 7701e52e0acSpatrick #define ACPI_IORT_SMMU_V2 1 7711e52e0acSpatrick #define ACPI_IORT_SMMU_CORELINK_MMU400 2 7721e52e0acSpatrick #define ACPI_IORT_SMMU_CORELINK_MMU500 3 7731e52e0acSpatrick #define ACPI_IORT_SMMU_CORELINK_MMU401 4 7741e52e0acSpatrick #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 5 77553e51ee2Spatrick uint32_t flags; 77653e51ee2Spatrick #define ACPI_IORT_SMMU_DVM 0x00000001 77753e51ee2Spatrick #define ACPI_IORT_SMMU_COHERENT 0x00000002 77853e51ee2Spatrick uint32_t global_interrupt_offset; 77953e51ee2Spatrick uint32_t number_of_context_interrupts; 78053e51ee2Spatrick uint32_t context_interrupt_offset; 78153e51ee2Spatrick uint32_t number_of_pmu_interrupts; 78253e51ee2Spatrick uint32_t pmu_interrupt_offset; 78353e51ee2Spatrick } __packed; 78453e51ee2Spatrick 78553e51ee2Spatrick struct acpi_iort_smmu_global_interrupt { 78653e51ee2Spatrick uint32_t nsgirpt_gsiv; 78753e51ee2Spatrick uint32_t nsgirpt_flags; 78853e51ee2Spatrick #define ACPI_IORT_SMMU_INTR_EDGE (1 << 0) 78953e51ee2Spatrick uint32_t nscfgirpt_gsiv; 79053e51ee2Spatrick uint32_t nscfgirpt_flags; 79153e51ee2Spatrick } __packed; 79253e51ee2Spatrick 79353e51ee2Spatrick struct acpi_iort_smmu_context_interrupt { 794f3d34aacSpatrick uint32_t gsiv; 795f3d34aacSpatrick uint32_t flags; 79653e51ee2Spatrick } __packed; 79753e51ee2Spatrick 79853e51ee2Spatrick struct acpi_iort_smmu_pmu_interrupt { 799f3d34aacSpatrick uint32_t gsiv; 800f3d34aacSpatrick uint32_t flags; 80153e51ee2Spatrick } __packed; 80253e51ee2Spatrick 8038a4c6a2eSpatrick struct acpi_iort_mapping { 8048a4c6a2eSpatrick uint32_t input_base; 8058a4c6a2eSpatrick uint32_t number_of_ids; 8068a4c6a2eSpatrick uint32_t output_base; 8078a4c6a2eSpatrick uint32_t output_reference; 8088a4c6a2eSpatrick uint32_t flags; 8098a4c6a2eSpatrick #define ACPI_IORT_MAPPING_SINGLE 0x00000001 8108a4c6a2eSpatrick } __packed; 8112d915ce1Sjordan 8127934d707Stholo #define ACPI_FREQUENCY 3579545 /* Per ACPI spec */ 8137934d707Stholo 8147934d707Stholo /* 81528dc4ec2Sjordan * PCI Configuration space 81628dc4ec2Sjordan */ 817d2eaebe9Skettenis #define ACPI_ADR_PCIDEV(addr) (uint16_t)(addr >> 16) 818d2eaebe9Skettenis #define ACPI_ADR_PCIFUN(addr) (uint16_t)(addr & 0xFFFF) 819d6a1c66eSkettenis 820d6a1c66eSkettenis #define ACPI_PCI_SEG(addr) (uint16_t)((addr) >> 48) 821d6a1c66eSkettenis #define ACPI_PCI_BUS(addr) (uint8_t)((addr) >> 40) 822d6a1c66eSkettenis #define ACPI_PCI_DEV(addr) (uint8_t)((addr) >> 32) 823d2eaebe9Skettenis #define ACPI_PCI_FN(addr) (uint16_t)((addr) >> 16) 824d2eaebe9Skettenis #define ACPI_PCI_REG(addr) (uint16_t)(addr) 82528dc4ec2Sjordan 82628dc4ec2Sjordan /* 8277934d707Stholo * PM1 Status Registers Fixed Hardware Feature Status Bits 8287934d707Stholo */ 8297934d707Stholo #define ACPI_PM1_STATUS 0x00 8307934d707Stholo #define ACPI_PM1_TMR_STS 0x0001 8317934d707Stholo #define ACPI_PM1_BM_STS 0x0010 8327934d707Stholo #define ACPI_PM1_GBL_STS 0x0020 8337934d707Stholo #define ACPI_PM1_PWRBTN_STS 0x0100 8347934d707Stholo #define ACPI_PM1_SLPBTN_STS 0x0200 8357934d707Stholo #define ACPI_PM1_RTC_STS 0x0400 8367934d707Stholo #define ACPI_PM1_PCIEXP_WAKE_STS 0x4000 8377934d707Stholo #define ACPI_PM1_WAK_STS 0x8000 8387934d707Stholo 83950c82a80Smlarkin #define ACPI_PM1_ALL_STS (ACPI_PM1_TMR_STS | ACPI_PM1_BM_STS | \ 84050c82a80Smlarkin ACPI_PM1_GBL_STS | ACPI_PM1_PWRBTN_STS | \ 84150c82a80Smlarkin ACPI_PM1_SLPBTN_STS | ACPI_PM1_RTC_STS | \ 84250c82a80Smlarkin ACPI_PM1_PCIEXP_WAKE_STS | ACPI_PM1_WAK_STS ) 84350c82a80Smlarkin 8447934d707Stholo /* 8457934d707Stholo * PM1 Enable Registers 8467934d707Stholo */ 8477934d707Stholo #define ACPI_PM1_ENABLE 0x02 8487934d707Stholo #define ACPI_PM1_TMR_EN 0x0001 8497934d707Stholo #define ACPI_PM1_GBL_EN 0x0020 8507934d707Stholo #define ACPI_PM1_PWRBTN_EN 0x0100 8517934d707Stholo #define ACPI_PM1_SLPBTN_EN 0x0200 8527934d707Stholo #define ACPI_PM1_RTC_EN 0x0400 8537934d707Stholo #define ACPI_PM1_PCIEXP_WAKE_DIS 0x4000 8547934d707Stholo 8557934d707Stholo /* 8567934d707Stholo * PM1 Control Registers 8577934d707Stholo */ 8587934d707Stholo #define ACPI_PM1_CONTROL 0x00 8597934d707Stholo #define ACPI_PM1_SCI_EN 0x0001 8607934d707Stholo #define ACPI_PM1_BM_RLD 0x0002 8617934d707Stholo #define ACPI_PM1_GBL_RLS 0x0004 8623b4fc88bSgrange #define ACPI_PM1_SLP_TYPX(x) ((x) << 10) 8633b4fc88bSgrange #define ACPI_PM1_SLP_TYPX_MASK 0x1c00 8647934d707Stholo #define ACPI_PM1_SLP_EN 0x2000 865d2e44dfbSgrange 86624353b8aSmarco /* 867fbb4bab4Smarco * PM2 Control Registers 868fbb4bab4Smarco */ 869fbb4bab4Smarco #define ACPI_PM2_CONTROL 0x06 870fbb4bab4Smarco #define ACPI_PM2_ARB_DIS 0x0001 871fbb4bab4Smarco 872de93333bSkettenis /* 873de93333bSkettenis * Operation Region Address Space Identifiers 874de93333bSkettenis */ 875de93333bSkettenis #define ACPI_OPREG_SYSMEM 0 /* SystemMemory */ 876de93333bSkettenis #define ACPI_OPREG_SYSIO 1 /* SystemIO */ 877de93333bSkettenis #define ACPI_OPREG_PCICFG 2 /* PCI_Config */ 878de93333bSkettenis #define ACPI_OPREG_EC 3 /* EmbeddedControl */ 879de93333bSkettenis #define ACPI_OPREG_SMBUS 4 /* SMBus */ 880de93333bSkettenis #define ACPI_OPREG_CMOS 5 /* CMOS */ 881de93333bSkettenis #define ACPI_OPREG_PCIBAR 6 /* PCIBARTarget */ 882de93333bSkettenis #define ACPI_OPREG_IPMI 7 /* IPMI */ 883de93333bSkettenis #define ACPI_OPREG_GPIO 8 /* GeneralPurposeIO */ 884de93333bSkettenis #define ACPI_OPREG_GSB 9 /* GenericSerialBus */ 885fbb4bab4Smarco 886fbb4bab4Smarco /* 88717c9ba6cSgrange * Sleeping States 88817c9ba6cSgrange */ 88917c9ba6cSgrange #define ACPI_STATE_S0 0 89017c9ba6cSgrange #define ACPI_STATE_S1 1 89117c9ba6cSgrange #define ACPI_STATE_S2 2 89217c9ba6cSgrange #define ACPI_STATE_S3 3 89317c9ba6cSgrange #define ACPI_STATE_S4 4 89417c9ba6cSgrange #define ACPI_STATE_S5 5 89517c9ba6cSgrange 89617c9ba6cSgrange /* 897b08441edSmpi * Device Power States 898b08441edSmpi */ 899b08441edSmpi #define ACPI_STATE_D0 0 900b08441edSmpi #define ACPI_STATE_D1 1 901b08441edSmpi #define ACPI_STATE_D2 2 902b08441edSmpi #define ACPI_STATE_D3 3 903b08441edSmpi 904b08441edSmpi /* 90524353b8aSmarco * ACPI Device IDs 90624353b8aSmarco */ 907c9fcb6a2Sbrad #define ACPI_DEV_TIM "PNP0100" /* System timer */ 90824353b8aSmarco #define ACPI_DEV_ACPI "PNP0C08" /* ACPI device */ 909c9fcb6a2Sbrad #define ACPI_DEV_PCIB "PNP0A03" /* PCI bus */ 91024353b8aSmarco #define ACPI_DEV_GISAB "PNP0A05" /* Generic ISA Bus */ 91124353b8aSmarco #define ACPI_DEV_EIOB "PNP0A06" /* Extended I/O Bus */ 91273cb7cd1Skettenis #define ACPI_DEV_PCIEB "PNP0A08" /* PCIe bus */ 913c9fcb6a2Sbrad #define ACPI_DEV_MR "PNP0C02" /* Motherboard resources */ 914c9fcb6a2Sbrad #define ACPI_DEV_NPROC "PNP0C04" /* Numeric data processor */ 915695e87c5Smk #define ACPI_DEV_CS "PNP0C08" /* ACPI-Compliant System */ 91624353b8aSmarco #define ACPI_DEV_ECD "PNP0C09" /* Embedded Controller Device */ 91724353b8aSmarco #define ACPI_DEV_CMB "PNP0C0A" /* Control Method Battery */ 91824353b8aSmarco #define ACPI_DEV_FAN "PNP0C0B" /* Fan Device */ 91924353b8aSmarco #define ACPI_DEV_PBD "PNP0C0C" /* Power Button Device */ 92024353b8aSmarco #define ACPI_DEV_LD "PNP0C0D" /* Lid Device */ 92124353b8aSmarco #define ACPI_DEV_SBD "PNP0C0E" /* Sleep Button Device */ 92224353b8aSmarco #define ACPI_DEV_PILD "PNP0C0F" /* PCI Interrupt Link Device */ 92324353b8aSmarco #define ACPI_DEV_MEMD "PNP0C80" /* Memory Device */ 924ac6c6540Sjsg #define ACPI_DEV_MOUSE "PNP0F13" /* PS/2 Mouse */ 92524353b8aSmarco #define ACPI_DEV_SHC "ACPI0001" /* SMBus 1.0 Host Controller */ 9266715140aSjcs #define ACPI_DEV_SBS "ACPI0002" /* Smart Battery Subsystem */ 927a9671257Smarco #define ACPI_DEV_AC "ACPI0003" /* AC Device */ 92824353b8aSmarco #define ACPI_DEV_MD "ACPI0004" /* Module Device */ 9296715140aSjcs #define ACPI_DEV_SMBUS "ACPI0005" /* SMBus 2.0 Host Controller */ 93024353b8aSmarco #define ACPI_DEV_GBD "ACPI0006" /* GPE Block Device */ 93124353b8aSmarco #define ACPI_DEV_PD "ACPI0007" /* Processor Device */ 93224353b8aSmarco #define ACPI_DEV_ALSD "ACPI0008" /* Ambient Light Sensor Device */ 93324353b8aSmarco #define ACPI_DEV_IOXA "ACPI0009" /* IO x APIC Device */ 93424353b8aSmarco #define ACPI_DEV_IOA "ACPI000A" /* IO APIC Device */ 93524353b8aSmarco #define ACPI_DEV_IOSA "ACPI000B" /* IO SAPIC Device */ 936c9fcb6a2Sbrad #define ACPI_DEV_THZ "THERMALZONE" /* Thermal Zone */ 937c9fcb6a2Sbrad #define ACPI_DEV_FFB "FIXEDBUTTON" /* Fixed Feature Button */ 938a74532a1Spatrick #define ACPI_DEV_IPMI "IPI0001" /* IPMI */ 939b037e2e6Sjcs 940d2e44dfbSgrange #endif /* !_DEV_ACPI_ACPIREG_H_ */ 941