1155928Ssam/*- 2155928Ssam * Copyright (c) 1999 Doug Rabson 3155928Ssam * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> 4155928Ssam * All rights reserved. 5155928Ssam * 6155928Ssam * Redistribution and use in source and binary forms, with or without 7155928Ssam * modification, are permitted provided that the following conditions 8155928Ssam * are met: 9155928Ssam * 1. Redistributions of source code must retain the above copyright 10155928Ssam * notice, this list of conditions and the following disclaimer. 11155928Ssam * 2. Redistributions in binary form must reproduce the above copyright 12155928Ssam * notice, this list of conditions and the following disclaimer in the 13155928Ssam * documentation and/or other materials provided with the distribution. 14155928Ssam * 15155928Ssam * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16155928Ssam * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17155928Ssam * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18155928Ssam * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19155928Ssam * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20155928Ssam * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21155928Ssam * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22155928Ssam * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23155928Ssam * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24155928Ssam * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25155928Ssam * SUCH DAMAGE. 26155928Ssam * 27155928Ssam * $FreeBSD$ 28155928Ssam */ 29155928Ssam 30155928Ssam#ifndef _ACPIDUMP_H_ 31155928Ssam#define _ACPIDUMP_H_ 32155928Ssam 33155928Ssam/* Root System Description Pointer */ 34155928Ssamstruct ACPIrsdp { 35155928Ssam u_char signature[8]; 36155928Ssam u_char sum; 37155928Ssam u_char oem[6]; 38155928Ssam u_char revision; 39155928Ssam u_int32_t rsdt_addr; 40155928Ssam u_int32_t length; 41155928Ssam u_int64_t xsdt_addr; 42155928Ssam u_char xsum; 43155928Ssam u_char _reserved_[3]; 44155928Ssam} __packed; 45155928Ssam 46155928Ssam/* System Description Table */ 47155928Ssamstruct ACPIsdt { 48155928Ssam u_char signature[4]; 49155928Ssam u_int32_t len; 50155928Ssam u_char rev; 51155928Ssam u_char check; 52155928Ssam u_char oemid[6]; 53155928Ssam u_char oemtblid[8]; 54155928Ssam u_int32_t oemrev; 55155928Ssam u_char creator[4]; 56155928Ssam u_int32_t crerev; 57155928Ssam#define SIZEOF_SDT_HDR 36 /* struct size except body */ 58155928Ssam u_int32_t body[1];/* This member should be casted */ 59155928Ssam} __packed; 60155928Ssam 61155928Ssamstruct MADT_local_apic { 62155928Ssam u_char cpu_id; 63155928Ssam u_char apic_id; 64155928Ssam u_int32_t flags; 65155928Ssam#define ACPI_MADT_APIC_LOCAL_FLAG_ENABLED 1 66155928Ssam} __packed; 67155928Ssam 68155928Ssamstruct MADT_io_apic { 69155928Ssam u_char apic_id; 70155928Ssam u_char reserved; 71155928Ssam u_int32_t apic_addr; 72155928Ssam u_int32_t int_base; 73155928Ssam} __packed; 74155928Ssam 75155928Ssamstruct MADT_int_override { 76155928Ssam u_char bus; 77155928Ssam u_char source; 78155928Ssam u_int32_t intr; 79155928Ssam u_int16_t mps_flags; 80155928Ssam#define MPS_INT_FLAG_POLARITY_MASK 0x3 81155928Ssam#define MPS_INT_FLAG_POLARITY_CONFORM 0x0 82155928Ssam#define MPS_INT_FLAG_POLARITY_HIGH 0x1 83155928Ssam#define MPS_INT_FLAG_POLARITY_LOW 0x3 84155928Ssam#define MPS_INT_FLAG_TRIGGER_MASK 0xc 85155928Ssam#define MPS_INT_FLAG_TRIGGER_CONFORM 0x0 86155928Ssam#define MPS_INT_FLAG_TRIGGER_EDGE 0x4 87155928Ssam#define MPS_INT_FLAG_TRIGGER_LEVEL 0xc 88155928Ssam} __packed; 89155928Ssam 90155928Ssamstruct MADT_nmi { 91155928Ssam u_int16_t mps_flags; 92155928Ssam u_int32_t intr; 93155928Ssam} __packed; 94155928Ssam 95155928Ssamstruct MADT_local_nmi { 96155928Ssam u_char cpu_id; 97155928Ssam u_int16_t mps_flags; 98155928Ssam u_char lintpin; 99155928Ssam} __packed; 100155928Ssam 101155928Ssamstruct MADT_local_apic_override { 102155928Ssam u_char reserved[2]; 103155928Ssam u_int64_t apic_addr; 104155928Ssam} __packed; 105155928Ssam 106155928Ssamstruct MADT_io_sapic { 107155928Ssam u_char apic_id; 108155928Ssam u_char reserved; 109155928Ssam u_int32_t int_base; 110155928Ssam u_int64_t apic_addr; 111155928Ssam} __packed; 112155928Ssam 113155928Ssamstruct MADT_local_sapic { 114155928Ssam u_char cpu_id; 115155928Ssam u_char apic_id; 116155928Ssam u_char apic_eid; 117155928Ssam u_char reserved[3]; 118155928Ssam u_int32_t flags; 119155928Ssam} __packed; 120155928Ssam 121155928Ssamstruct MADT_int_src { 122155928Ssam u_int16_t mps_flags; 123155928Ssam u_char type; 124155928Ssam#define ACPI_MADT_APIC_INT_SOURCE_PMI 1 125155928Ssam#define ACPI_MADT_APIC_INT_SOURCE_INIT 2 126155928Ssam#define ACPI_MADT_APIC_INT_SOURCE_CPEI 3 /* Corrected Platform Error */ 127155928Ssam u_char cpu_id; 128155928Ssam u_char cpu_eid; 129155928Ssam u_char sapic_vector; 130155928Ssam u_int32_t intr; 131155928Ssam u_char reserved[4]; 132155928Ssam} __packed; 133155928Ssam 134155928Ssamstruct MADT_APIC { 135155928Ssam u_char type; 136155928Ssam#define ACPI_MADT_APIC_TYPE_LOCAL_APIC 0 137155928Ssam#define ACPI_MADT_APIC_TYPE_IO_APIC 1 138155928Ssam#define ACPI_MADT_APIC_TYPE_INT_OVERRIDE 2 139155928Ssam#define ACPI_MADT_APIC_TYPE_NMI 3 140155928Ssam#define ACPI_MADT_APIC_TYPE_LOCAL_NMI 4 141155928Ssam#define ACPI_MADT_APIC_TYPE_LOCAL_OVERRIDE 5 142155928Ssam#define ACPI_MADT_APIC_TYPE_IO_SAPIC 6 143155928Ssam#define ACPI_MADT_APIC_TYPE_LOCAL_SAPIC 7 144155928Ssam#define ACPI_MADT_APIC_TYPE_INT_SRC 8 145155928Ssam u_char len; 146155928Ssam union { 147155928Ssam struct MADT_local_apic local_apic; 148155928Ssam struct MADT_io_apic io_apic; 149155928Ssam struct MADT_int_override int_override; 150155928Ssam struct MADT_nmi nmi; 151155928Ssam struct MADT_local_nmi local_nmi; 152155928Ssam struct MADT_local_apic_override local_apic_override; 153155928Ssam struct MADT_io_sapic io_sapic; 154155928Ssam struct MADT_local_sapic local_sapic; 155155928Ssam struct MADT_int_src int_src; 156155928Ssam } body; 157155928Ssam} __packed; 158155928Ssam 159155928Ssamstruct MADTbody { 160155928Ssam u_int32_t lapic_addr; 161155928Ssam u_int32_t flags; 162155928Ssam#define ACPI_APIC_FLAG_PCAT_COMPAT 1 /* System has dual-8259 setup. */ 163155928Ssam u_char body[1]; 164155928Ssam} __packed; 165155928Ssam 166155928Ssam/* 167155928Ssam * Addresses to scan on ia32 for the RSD PTR. According to section 5.2.2 168155928Ssam * of the ACPI spec, we only consider two regions for the base address: 169155928Ssam * 1. EBDA (1 KB area addressed to by 16 bit pointer at 0x40E) 170155928Ssam * 2. High memory (0xE0000 - 0xFFFFF) 171155928Ssam */ 172155928Ssam#define RSDP_EBDA_PTR 0x40E 173155928Ssam#define RSDP_EBDA_SIZE 0x400 174155928Ssam#define RSDP_HI_START 0xE0000 175155928Ssam#define RSDP_HI_SIZE 0x20000 176155928Ssam 177155928Ssam#endif /* !_ACPIDUMP_H_ */ 178