1e1e9a4bfSMitsuru IWASAKI /*- 2e1e9a4bfSMitsuru IWASAKI * Copyright (c) 1998 Doug Rabson 3e1e9a4bfSMitsuru IWASAKI * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> 4e1e9a4bfSMitsuru IWASAKI * All rights reserved. 5e1e9a4bfSMitsuru IWASAKI * 6e1e9a4bfSMitsuru IWASAKI * Redistribution and use in source and binary forms, with or without 7e1e9a4bfSMitsuru IWASAKI * modification, are permitted provided that the following conditions 8e1e9a4bfSMitsuru IWASAKI * are met: 9e1e9a4bfSMitsuru IWASAKI * 1. Redistributions of source code must retain the above copyright 10e1e9a4bfSMitsuru IWASAKI * notice, this list of conditions and the following disclaimer. 11e1e9a4bfSMitsuru IWASAKI * 2. Redistributions in binary form must reproduce the above copyright 12e1e9a4bfSMitsuru IWASAKI * notice, this list of conditions and the following disclaimer in the 13e1e9a4bfSMitsuru IWASAKI * documentation and/or other materials provided with the distribution. 14e1e9a4bfSMitsuru IWASAKI * 15e1e9a4bfSMitsuru IWASAKI * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16e1e9a4bfSMitsuru IWASAKI * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17e1e9a4bfSMitsuru IWASAKI * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18e1e9a4bfSMitsuru IWASAKI * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19e1e9a4bfSMitsuru IWASAKI * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20e1e9a4bfSMitsuru IWASAKI * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21e1e9a4bfSMitsuru IWASAKI * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22e1e9a4bfSMitsuru IWASAKI * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23e1e9a4bfSMitsuru IWASAKI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24e1e9a4bfSMitsuru IWASAKI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25e1e9a4bfSMitsuru IWASAKI * SUCH DAMAGE. 26e1e9a4bfSMitsuru IWASAKI * 27e1e9a4bfSMitsuru IWASAKI * $Id: acpi.c,v 1.4 2000/08/09 14:47:52 iwasaki Exp $ 28e1e9a4bfSMitsuru IWASAKI * $FreeBSD$ 29e1e9a4bfSMitsuru IWASAKI */ 30e1e9a4bfSMitsuru IWASAKI 31e1e9a4bfSMitsuru IWASAKI #include <sys/param.h> 32e1e9a4bfSMitsuru IWASAKI #include <sys/stat.h> 33e1e9a4bfSMitsuru IWASAKI 34e1e9a4bfSMitsuru IWASAKI #include <assert.h> 35e1e9a4bfSMitsuru IWASAKI #include <err.h> 36e1e9a4bfSMitsuru IWASAKI #include <fcntl.h> 37e1e9a4bfSMitsuru IWASAKI #include <stdio.h> 38e1e9a4bfSMitsuru IWASAKI #include <unistd.h> 39e1e9a4bfSMitsuru IWASAKI 40e1e9a4bfSMitsuru IWASAKI #include "acpidump.h" 41e1e9a4bfSMitsuru IWASAKI 42c62f1cccSMitsuru IWASAKI #include "aml/aml_env.h" 43c62f1cccSMitsuru IWASAKI #include "aml/aml_common.h" 44c62f1cccSMitsuru IWASAKI 45c62f1cccSMitsuru IWASAKI #define BEGIN_COMMENT "/*\n" 46c62f1cccSMitsuru IWASAKI #define END_COMMENT " */\n" 47c62f1cccSMitsuru IWASAKI 48c62f1cccSMitsuru IWASAKI struct ACPIsdt dsdt_header = { 49c62f1cccSMitsuru IWASAKI "DSDT", 0, 1, 0, "OEMID", "OEMTBLID", 0x12345678, "CRTR", 0x12345678 50c62f1cccSMitsuru IWASAKI }; 51c62f1cccSMitsuru IWASAKI 52c62f1cccSMitsuru IWASAKI static void 53c62f1cccSMitsuru IWASAKI acpi_trim_string(char *s, size_t length) 54c62f1cccSMitsuru IWASAKI { 55c62f1cccSMitsuru IWASAKI 56c62f1cccSMitsuru IWASAKI /* Trim trailing spaces and NULLs */ 57c62f1cccSMitsuru IWASAKI while (length > 0 && (s[length - 1] == ' ' || s[length - 1] == '\0')) 58c62f1cccSMitsuru IWASAKI s[length-- - 1] = '\0'; 59c62f1cccSMitsuru IWASAKI } 60c62f1cccSMitsuru IWASAKI 61c62f1cccSMitsuru IWASAKI static void 62c62f1cccSMitsuru IWASAKI acpi_print_dsdt_definition(void) 63c62f1cccSMitsuru IWASAKI { 64c62f1cccSMitsuru IWASAKI char oemid[6 + 1]; 65c62f1cccSMitsuru IWASAKI char oemtblid[8 + 1]; 66c62f1cccSMitsuru IWASAKI 67c62f1cccSMitsuru IWASAKI acpi_trim_string(dsdt_header.oemid, 6); 68c62f1cccSMitsuru IWASAKI acpi_trim_string(dsdt_header.oemtblid, 8); 69c62f1cccSMitsuru IWASAKI strncpy(oemid, dsdt_header.oemid, 6); 70c62f1cccSMitsuru IWASAKI oemid[6] = '\0'; 71c62f1cccSMitsuru IWASAKI strncpy(oemtblid, dsdt_header.oemtblid, 8); 72c62f1cccSMitsuru IWASAKI oemtblid[8] = '\0'; 73c62f1cccSMitsuru IWASAKI 74d6c5005cSNate Lawson printf("DefinitionBlock (\n" 75d6c5005cSNate Lawson " \"acpi_dsdt.aml\", //Output filename\n" 76d6c5005cSNate Lawson " \"DSDT\", //Signature\n" 77d6c5005cSNate Lawson " 0x%x, //DSDT Revision\n" 78d6c5005cSNate Lawson " \"%s\", //OEMID\n" 79d6c5005cSNate Lawson " \"%s\", //TABLE ID\n" 80d6c5005cSNate Lawson " 0x%x //OEM Revision\n)\n", 81c62f1cccSMitsuru IWASAKI dsdt_header.rev, oemid, oemtblid, dsdt_header.oemrev); 82c62f1cccSMitsuru IWASAKI } 83c62f1cccSMitsuru IWASAKI 84e1e9a4bfSMitsuru IWASAKI static void 85e1e9a4bfSMitsuru IWASAKI acpi_print_string(char *s, size_t length) 86e1e9a4bfSMitsuru IWASAKI { 87e1e9a4bfSMitsuru IWASAKI int c; 88e1e9a4bfSMitsuru IWASAKI 89e1e9a4bfSMitsuru IWASAKI /* Trim trailing spaces and NULLs */ 90e1e9a4bfSMitsuru IWASAKI while (length > 0 && (s[length - 1] == ' ' || s[length - 1] == '\0')) 91e1e9a4bfSMitsuru IWASAKI length--; 92e1e9a4bfSMitsuru IWASAKI 93e1e9a4bfSMitsuru IWASAKI while (length--) { 94e1e9a4bfSMitsuru IWASAKI c = *s++; 95e1e9a4bfSMitsuru IWASAKI putchar(c); 96e1e9a4bfSMitsuru IWASAKI } 97e1e9a4bfSMitsuru IWASAKI } 98e1e9a4bfSMitsuru IWASAKI 99e1e9a4bfSMitsuru IWASAKI static void 100e1e9a4bfSMitsuru IWASAKI acpi_handle_dsdt(struct ACPIsdt *dsdp) 101e1e9a4bfSMitsuru IWASAKI { 102e1e9a4bfSMitsuru IWASAKI u_int8_t *dp; 103e1e9a4bfSMitsuru IWASAKI u_int8_t *end; 104e1e9a4bfSMitsuru IWASAKI 105e1e9a4bfSMitsuru IWASAKI acpi_print_dsdt(dsdp); 106e1e9a4bfSMitsuru IWASAKI dp = (u_int8_t *)dsdp->body; 107e1e9a4bfSMitsuru IWASAKI end = (u_int8_t *)dsdp + dsdp->len; 108c62f1cccSMitsuru IWASAKI 109c62f1cccSMitsuru IWASAKI acpi_dump_dsdt(dp, end); 110e1e9a4bfSMitsuru IWASAKI } 111e1e9a4bfSMitsuru IWASAKI 112e1e9a4bfSMitsuru IWASAKI static void 113e1e9a4bfSMitsuru IWASAKI acpi_handle_facp(struct FACPbody *facp) 114e1e9a4bfSMitsuru IWASAKI { 115e1e9a4bfSMitsuru IWASAKI struct ACPIsdt *dsdp; 116e1e9a4bfSMitsuru IWASAKI 117e1e9a4bfSMitsuru IWASAKI acpi_print_facp(facp); 118e1e9a4bfSMitsuru IWASAKI dsdp = (struct ACPIsdt *) acpi_map_sdt(facp->dsdt_ptr); 119e1e9a4bfSMitsuru IWASAKI if (acpi_checksum(dsdp, dsdp->len)) 120e1e9a4bfSMitsuru IWASAKI errx(1, "DSDT is corrupt\n"); 121e1e9a4bfSMitsuru IWASAKI acpi_handle_dsdt(dsdp); 122c62f1cccSMitsuru IWASAKI aml_dump(dsdp); 123c62f1cccSMitsuru IWASAKI } 124c62f1cccSMitsuru IWASAKI 125c62f1cccSMitsuru IWASAKI static void 1260a473124SJohn Baldwin acpi_print_cpu(u_char cpu_id) 1270a473124SJohn Baldwin { 1280a473124SJohn Baldwin 1290a473124SJohn Baldwin printf("\tACPI CPU="); 1300a473124SJohn Baldwin if (cpu_id == 0xff) 1310a473124SJohn Baldwin printf("ALL\n"); 1320a473124SJohn Baldwin else 1330a473124SJohn Baldwin printf("%d\n", (u_int)cpu_id); 1340a473124SJohn Baldwin } 1350a473124SJohn Baldwin 1360a473124SJohn Baldwin static void 1370a473124SJohn Baldwin acpi_print_local_apic(u_char cpu_id, u_char apic_id, u_int32_t flags) 1380a473124SJohn Baldwin { 1390a473124SJohn Baldwin acpi_print_cpu(cpu_id); 1400a473124SJohn Baldwin printf("\tFlags={"); 1410a473124SJohn Baldwin if (flags & ACPI_MADT_APIC_LOCAL_FLAG_ENABLED) 1420a473124SJohn Baldwin printf("ENABLED"); 1430a473124SJohn Baldwin else 1440a473124SJohn Baldwin printf("DISABLED"); 1450a473124SJohn Baldwin printf("}\n"); 1460a473124SJohn Baldwin printf("\tAPIC ID=%d\n", (u_int)apic_id); 1470a473124SJohn Baldwin } 1480a473124SJohn Baldwin 1490a473124SJohn Baldwin static void 1500a473124SJohn Baldwin acpi_print_io_apic(u_char apic_id, u_int32_t int_base, u_int64_t apic_addr) 1510a473124SJohn Baldwin { 1520a473124SJohn Baldwin u_int addr_hi; 1530a473124SJohn Baldwin 1540a473124SJohn Baldwin printf("\tAPIC ID=%d\n", (u_int)apic_id); 1550a473124SJohn Baldwin printf("\tINT BASE=%d\n", int_base); 1560a473124SJohn Baldwin printf("\tADDR=0x"); 1570a473124SJohn Baldwin addr_hi = apic_addr >> 32; 1580a473124SJohn Baldwin if (addr_hi != 0) { 1590a473124SJohn Baldwin printf("%08x", addr_hi); 1600a473124SJohn Baldwin apic_addr &= 0xffffffff; 1610a473124SJohn Baldwin } 1620a473124SJohn Baldwin printf("%08x\n", (u_int)apic_addr); 1630a473124SJohn Baldwin } 1640a473124SJohn Baldwin 1650a473124SJohn Baldwin static void 1660a473124SJohn Baldwin acpi_print_mps_flags(u_int16_t flags) 1670a473124SJohn Baldwin { 1680a473124SJohn Baldwin 1690a473124SJohn Baldwin printf("\tFlags={Polarity="); 1700a473124SJohn Baldwin switch (flags & MPS_INT_FLAG_POLARITY_MASK) { 1710a473124SJohn Baldwin case MPS_INT_FLAG_POLARITY_CONFORM: 1720a473124SJohn Baldwin printf("conforming"); 1730a473124SJohn Baldwin break; 1740a473124SJohn Baldwin case MPS_INT_FLAG_POLARITY_HIGH: 1750a473124SJohn Baldwin printf("active-hi"); 1760a473124SJohn Baldwin break; 1770a473124SJohn Baldwin case MPS_INT_FLAG_POLARITY_LOW: 1780a473124SJohn Baldwin printf("active-lo"); 1790a473124SJohn Baldwin break; 1800a473124SJohn Baldwin default: 1810a473124SJohn Baldwin printf("0x%x", flags & MPS_INT_FLAG_POLARITY_MASK); 1820a473124SJohn Baldwin break; 1830a473124SJohn Baldwin } 1840a473124SJohn Baldwin printf(", Trigger="); 1850a473124SJohn Baldwin switch (flags & MPS_INT_FLAG_TRIGGER_MASK) { 1860a473124SJohn Baldwin case MPS_INT_FLAG_TRIGGER_CONFORM: 1870a473124SJohn Baldwin printf("conforming"); 1880a473124SJohn Baldwin break; 1890a473124SJohn Baldwin case MPS_INT_FLAG_TRIGGER_EDGE: 1900a473124SJohn Baldwin printf("edge"); 1910a473124SJohn Baldwin break; 1920a473124SJohn Baldwin case MPS_INT_FLAG_TRIGGER_LEVEL: 1930a473124SJohn Baldwin printf("level"); 1940a473124SJohn Baldwin break; 1950a473124SJohn Baldwin default: 1960a473124SJohn Baldwin printf("0x%x", (flags & MPS_INT_FLAG_TRIGGER_MASK) >> 2); 1970a473124SJohn Baldwin } 1980a473124SJohn Baldwin printf("}\n"); 1990a473124SJohn Baldwin } 2000a473124SJohn Baldwin 2010a473124SJohn Baldwin static void 2020a473124SJohn Baldwin acpi_print_intr(u_int32_t intr, u_int16_t mps_flags) 2030a473124SJohn Baldwin { 2040a473124SJohn Baldwin 2050a473124SJohn Baldwin printf("\tINTR=%d\n", (u_int)intr); 2060a473124SJohn Baldwin acpi_print_mps_flags(mps_flags); 2070a473124SJohn Baldwin } 2080a473124SJohn Baldwin 2090a473124SJohn Baldwin const char *apic_types[] = { "Local APIC", "IO APIC", "INT Override", "NMI", 2100a473124SJohn Baldwin "Local NMI", "Local APIC Override", "IO SAPIC", 2110a473124SJohn Baldwin "Local SAPIC", "Platform Interrupt" }; 2120a473124SJohn Baldwin const char *platform_int_types[] = { "PMI", "INIT", 2130a473124SJohn Baldwin "Corrected Platform Error" }; 2140a473124SJohn Baldwin 2150a473124SJohn Baldwin static void 2160a473124SJohn Baldwin acpi_print_apic(struct MADT_APIC *mp) 2170a473124SJohn Baldwin { 2180a473124SJohn Baldwin 2190a473124SJohn Baldwin printf("\tType=%s\n", apic_types[mp->type]); 2200a473124SJohn Baldwin switch (mp->type) { 2210a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_LOCAL_APIC: 2220a473124SJohn Baldwin acpi_print_local_apic(mp->body.local_apic.cpu_id, 2230a473124SJohn Baldwin mp->body.local_apic.apic_id, mp->body.local_apic.flags); 2240a473124SJohn Baldwin break; 2250a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_IO_APIC: 2260a473124SJohn Baldwin acpi_print_io_apic(mp->body.io_apic.apic_id, 2270a473124SJohn Baldwin mp->body.io_apic.int_base, 2280a473124SJohn Baldwin mp->body.io_apic.apic_addr); 2290a473124SJohn Baldwin break; 2300a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_INT_OVERRIDE: 2310a473124SJohn Baldwin printf("\tBUS=%d\n", (u_int)mp->body.int_override.bus); 2320a473124SJohn Baldwin printf("\tIRQ=%d\n", (u_int)mp->body.int_override.source); 2330a473124SJohn Baldwin acpi_print_intr(mp->body.int_override.intr, 2340a473124SJohn Baldwin mp->body.int_override.mps_flags); 2350a473124SJohn Baldwin break; 2360a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_NMI: 2370a473124SJohn Baldwin acpi_print_intr(mp->body.nmi.intr, mp->body.nmi.mps_flags); 2380a473124SJohn Baldwin break; 2390a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_LOCAL_NMI: 2400a473124SJohn Baldwin acpi_print_cpu(mp->body.local_nmi.cpu_id); 2410a473124SJohn Baldwin printf("\tLINT Pin=%d\n", mp->body.local_nmi.lintpin); 2420a473124SJohn Baldwin acpi_print_mps_flags(mp->body.local_nmi.mps_flags); 2430a473124SJohn Baldwin break; 2440a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_LOCAL_OVERRIDE: 2450a473124SJohn Baldwin printf("\tLocal APIC ADDR=0x%08x%08x\n", 2460a473124SJohn Baldwin (u_int)(mp->body.local_apic_override.apic_addr >> 32), 2470a473124SJohn Baldwin (u_int)(mp->body.local_apic_override.apic_addr & 0xffffffff)); 2480a473124SJohn Baldwin break; 2490a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_IO_SAPIC: 2500a473124SJohn Baldwin acpi_print_io_apic(mp->body.io_sapic.apic_id, 2510a473124SJohn Baldwin mp->body.io_sapic.int_base, 2520a473124SJohn Baldwin mp->body.io_sapic.apic_addr); 2530a473124SJohn Baldwin break; 2540a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_LOCAL_SAPIC: 2550a473124SJohn Baldwin acpi_print_local_apic(mp->body.local_sapic.cpu_id, 2560a473124SJohn Baldwin mp->body.local_sapic.apic_id, mp->body.local_sapic.flags); 2570a473124SJohn Baldwin printf("\tAPIC EID=%d\n", (u_int)mp->body.local_sapic.apic_eid); 2580a473124SJohn Baldwin break; 2590a473124SJohn Baldwin case ACPI_MADT_APIC_TYPE_INT_SRC: 2600a473124SJohn Baldwin printf("\tType=%s\n", 2610a473124SJohn Baldwin platform_int_types[mp->body.int_src.type]); 2620a473124SJohn Baldwin printf("\tCPU ID=%d\n", (u_int)mp->body.int_src.cpu_id); 2630a473124SJohn Baldwin printf("\tCPU EID=%d\n", (u_int)mp->body.int_src.cpu_id); 2640a473124SJohn Baldwin printf("\tSAPIC Vector=%d\n", 2650a473124SJohn Baldwin (u_int)mp->body.int_src.sapic_vector); 2660a473124SJohn Baldwin acpi_print_intr(mp->body.int_src.intr, 2670a473124SJohn Baldwin mp->body.int_src.mps_flags); 2680a473124SJohn Baldwin break; 2690a473124SJohn Baldwin default: 2700a473124SJohn Baldwin printf("\tUnknown type %d\n", (u_int)mp->type); 2710a473124SJohn Baldwin } 2720a473124SJohn Baldwin } 2730a473124SJohn Baldwin 2740a473124SJohn Baldwin static void 2750a473124SJohn Baldwin acpi_handle_apic(struct ACPIsdt *sdp) 2760a473124SJohn Baldwin { 2770a473124SJohn Baldwin struct MADTbody *madtp; 2780a473124SJohn Baldwin struct MADT_APIC *madt_apicp; 2790a473124SJohn Baldwin 2800a473124SJohn Baldwin acpi_print_sdt(sdp); 2810a473124SJohn Baldwin madtp = (struct MADTbody *) sdp->body; 2820a473124SJohn Baldwin printf(BEGIN_COMMENT); 2830a473124SJohn Baldwin printf("\tLocal APIC ADDR=0x%08x\n", madtp->lapic_addr); 2840a473124SJohn Baldwin printf("\tFlags={"); 2850a473124SJohn Baldwin if (madtp->flags & ACPI_APIC_FLAG_PCAT_COMPAT) 2860a473124SJohn Baldwin printf("PC-AT"); 2870a473124SJohn Baldwin printf("}\n"); 2880a473124SJohn Baldwin madt_apicp = (struct MADT_APIC *) madtp->body; 2890a473124SJohn Baldwin while (((uintptr_t)madt_apicp) - ((uintptr_t)sdp) < sdp->len) { 2900a473124SJohn Baldwin printf("\n"); 2910a473124SJohn Baldwin acpi_print_apic(madt_apicp); 2920a473124SJohn Baldwin madt_apicp = (struct MADT_APIC *) ((char *)madt_apicp + 2930a473124SJohn Baldwin madt_apicp->len); 2940a473124SJohn Baldwin } 2950a473124SJohn Baldwin printf(END_COMMENT); 2960a473124SJohn Baldwin } 2970a473124SJohn Baldwin 2980a473124SJohn Baldwin static void 29979d7565cSPeter Wemm acpi_handle_hpet(struct ACPIsdt *sdp) 30079d7565cSPeter Wemm { 30179d7565cSPeter Wemm struct HPETbody *hpetp; 30279d7565cSPeter Wemm 30379d7565cSPeter Wemm acpi_print_sdt(sdp); 30479d7565cSPeter Wemm hpetp = (struct HPETbody *) sdp->body; 30579d7565cSPeter Wemm printf(BEGIN_COMMENT); 30679d7565cSPeter Wemm printf("\tHPET Number=%d\n", hpetp->hpet_number); 30779d7565cSPeter Wemm printf("\tADDR=0x%08x\n", hpetp->base_addr); 30879d7565cSPeter Wemm printf("\tHW Rev=0x%x\n", hpetp->block_hwrev); 30979d7565cSPeter Wemm printf("\tComparitors=%d\n", hpetp->block_comparitors); 31079d7565cSPeter Wemm printf("\tCounter Size=%d\n", hpetp->block_counter_size); 31179d7565cSPeter Wemm printf("\tLegacy IRQ routing capable={"); 31279d7565cSPeter Wemm if (hpetp->block_legacy_capable) 31379d7565cSPeter Wemm printf("TRUE}\n"); 31479d7565cSPeter Wemm else 31579d7565cSPeter Wemm printf("FALSE}\n"); 31679d7565cSPeter Wemm printf("\tPCI Vendor ID=0x%04x\n", hpetp->block_pcivendor); 31779d7565cSPeter Wemm printf("\tMinimul Tick=%d\n", hpetp->clock_tick); 31879d7565cSPeter Wemm printf(END_COMMENT); 31979d7565cSPeter Wemm } 32079d7565cSPeter Wemm 32179d7565cSPeter Wemm static void 322c62f1cccSMitsuru IWASAKI init_namespace() 323c62f1cccSMitsuru IWASAKI { 324c62f1cccSMitsuru IWASAKI struct aml_environ env; 325c62f1cccSMitsuru IWASAKI struct aml_name *newname; 326c62f1cccSMitsuru IWASAKI 327c62f1cccSMitsuru IWASAKI aml_new_name_group(AML_NAME_GROUP_OS_DEFINED); 328c62f1cccSMitsuru IWASAKI env.curname = aml_get_rootname(); 329c62f1cccSMitsuru IWASAKI newname = aml_create_name(&env, "\\_OS_"); 330c62f1cccSMitsuru IWASAKI newname->property = aml_alloc_object(aml_t_string, NULL); 331c62f1cccSMitsuru IWASAKI newname->property->str.needfree = 0; 332c62f1cccSMitsuru IWASAKI newname->property->str.string = "Microsoft Windows NT"; 333e1e9a4bfSMitsuru IWASAKI } 334e1e9a4bfSMitsuru IWASAKI 335e1e9a4bfSMitsuru IWASAKI /* 336e1e9a4bfSMitsuru IWASAKI * Public interfaces 337e1e9a4bfSMitsuru IWASAKI */ 338e1e9a4bfSMitsuru IWASAKI 339e1e9a4bfSMitsuru IWASAKI void 340c62f1cccSMitsuru IWASAKI acpi_dump_dsdt(u_int8_t *dp, u_int8_t *end) 341c62f1cccSMitsuru IWASAKI { 342c62f1cccSMitsuru IWASAKI extern struct aml_environ asl_env; 343c62f1cccSMitsuru IWASAKI 344c62f1cccSMitsuru IWASAKI acpi_print_dsdt_definition(); 345c62f1cccSMitsuru IWASAKI 346c62f1cccSMitsuru IWASAKI /* 1st stage: parse only w/o printing */ 347c62f1cccSMitsuru IWASAKI init_namespace(); 348c62f1cccSMitsuru IWASAKI aml_new_name_group((int)dp); 349c62f1cccSMitsuru IWASAKI bzero(&asl_env, sizeof(asl_env)); 350c62f1cccSMitsuru IWASAKI 351c62f1cccSMitsuru IWASAKI asl_env.dp = dp; 352c62f1cccSMitsuru IWASAKI asl_env.end = end; 353c62f1cccSMitsuru IWASAKI asl_env.curname = aml_get_rootname(); 354c62f1cccSMitsuru IWASAKI 355c62f1cccSMitsuru IWASAKI aml_local_stack_push(aml_local_stack_create()); 356c62f1cccSMitsuru IWASAKI aml_parse_objectlist(&asl_env, 0); 357c62f1cccSMitsuru IWASAKI aml_local_stack_delete(aml_local_stack_pop()); 358c62f1cccSMitsuru IWASAKI 359c62f1cccSMitsuru IWASAKI assert(asl_env.dp == asl_env.end); 360c62f1cccSMitsuru IWASAKI asl_env.dp = dp; 361c62f1cccSMitsuru IWASAKI 362c62f1cccSMitsuru IWASAKI /* 2nd stage: dump whole object list */ 363c62f1cccSMitsuru IWASAKI printf("\n{\n"); 364c62f1cccSMitsuru IWASAKI asl_dump_objectlist(&dp, end, 0); 365c62f1cccSMitsuru IWASAKI printf("\n}\n"); 366c62f1cccSMitsuru IWASAKI assert(dp == end); 367c62f1cccSMitsuru IWASAKI } 3680a473124SJohn Baldwin 369c62f1cccSMitsuru IWASAKI void 370e1e9a4bfSMitsuru IWASAKI acpi_print_sdt(struct ACPIsdt *sdp) 371e1e9a4bfSMitsuru IWASAKI { 372e1e9a4bfSMitsuru IWASAKI 373c62f1cccSMitsuru IWASAKI printf(BEGIN_COMMENT); 374e1e9a4bfSMitsuru IWASAKI acpi_print_string(sdp->signature, 4); 375c62f1cccSMitsuru IWASAKI printf(": Length=%d, Revision=%d, Checksum=%d,\n", 376e1e9a4bfSMitsuru IWASAKI sdp->len, sdp->rev, sdp->check); 377e1e9a4bfSMitsuru IWASAKI printf("\tOEMID="); 378e1e9a4bfSMitsuru IWASAKI acpi_print_string(sdp->oemid, 6); 379e1e9a4bfSMitsuru IWASAKI printf(", OEM Table ID="); 380e1e9a4bfSMitsuru IWASAKI acpi_print_string(sdp->oemtblid, 8); 381e1e9a4bfSMitsuru IWASAKI printf(", OEM Revision=0x%x,\n", sdp->oemrev); 382e1e9a4bfSMitsuru IWASAKI printf("\tCreator ID="); 383e1e9a4bfSMitsuru IWASAKI acpi_print_string(sdp->creator, 4); 384e1e9a4bfSMitsuru IWASAKI printf(", Creator Revision=0x%x\n", sdp->crerev); 385c62f1cccSMitsuru IWASAKI printf(END_COMMENT); 386c62f1cccSMitsuru IWASAKI if (!memcmp(sdp->signature, "DSDT", 4)) { 387c62f1cccSMitsuru IWASAKI memcpy(&dsdt_header, sdp, sizeof(dsdt_header)); 388c62f1cccSMitsuru IWASAKI } 389e1e9a4bfSMitsuru IWASAKI } 390e1e9a4bfSMitsuru IWASAKI 391e1e9a4bfSMitsuru IWASAKI void 392e1e9a4bfSMitsuru IWASAKI acpi_print_rsdt(struct ACPIsdt *rsdp) 393e1e9a4bfSMitsuru IWASAKI { 394e1e9a4bfSMitsuru IWASAKI int i, entries; 395e1e9a4bfSMitsuru IWASAKI 396e1e9a4bfSMitsuru IWASAKI acpi_print_sdt(rsdp); 397e1e9a4bfSMitsuru IWASAKI entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t); 398c62f1cccSMitsuru IWASAKI printf(BEGIN_COMMENT); 399e1e9a4bfSMitsuru IWASAKI printf("\tEntries={ "); 400e1e9a4bfSMitsuru IWASAKI for (i = 0; i < entries; i++) { 401e1e9a4bfSMitsuru IWASAKI if (i > 0) 402e1e9a4bfSMitsuru IWASAKI printf(", "); 403e1e9a4bfSMitsuru IWASAKI printf("0x%08x", rsdp->body[i]); 404e1e9a4bfSMitsuru IWASAKI } 405e1e9a4bfSMitsuru IWASAKI printf(" }\n"); 406c62f1cccSMitsuru IWASAKI printf(END_COMMENT); 407e1e9a4bfSMitsuru IWASAKI } 408e1e9a4bfSMitsuru IWASAKI 409e1e9a4bfSMitsuru IWASAKI void 410e1e9a4bfSMitsuru IWASAKI acpi_print_facp(struct FACPbody *facp) 411e1e9a4bfSMitsuru IWASAKI { 412e1e9a4bfSMitsuru IWASAKI char sep; 413e1e9a4bfSMitsuru IWASAKI 414c62f1cccSMitsuru IWASAKI printf(BEGIN_COMMENT); 415e1e9a4bfSMitsuru IWASAKI printf("\tDSDT=0x%x\n", facp->dsdt_ptr); 416e1e9a4bfSMitsuru IWASAKI printf("\tINT_MODEL=%s\n", facp->int_model ? "APIC" : "PIC"); 417e1e9a4bfSMitsuru IWASAKI printf("\tSCI_INT=%d\n", facp->sci_int); 418e1e9a4bfSMitsuru IWASAKI printf("\tSMI_CMD=0x%x, ", facp->smi_cmd); 419e1e9a4bfSMitsuru IWASAKI printf("ACPI_ENABLE=0x%x, ", facp->acpi_enable); 420e1e9a4bfSMitsuru IWASAKI printf("ACPI_DISABLE=0x%x, ", facp->acpi_disable); 421e1e9a4bfSMitsuru IWASAKI printf("S4BIOS_REQ=0x%x\n", facp->s4biosreq); 422e1e9a4bfSMitsuru IWASAKI if (facp->pm1a_evt_blk) 423e1e9a4bfSMitsuru IWASAKI printf("\tPM1a_EVT_BLK=0x%x-0x%x\n", 424e1e9a4bfSMitsuru IWASAKI facp->pm1a_evt_blk, 425e1e9a4bfSMitsuru IWASAKI facp->pm1a_evt_blk + facp->pm1_evt_len - 1); 426e1e9a4bfSMitsuru IWASAKI if (facp->pm1b_evt_blk) 427e1e9a4bfSMitsuru IWASAKI printf("\tPM1b_EVT_BLK=0x%x-0x%x\n", 428e1e9a4bfSMitsuru IWASAKI facp->pm1b_evt_blk, 429e1e9a4bfSMitsuru IWASAKI facp->pm1b_evt_blk + facp->pm1_evt_len - 1); 430e1e9a4bfSMitsuru IWASAKI if (facp->pm1a_cnt_blk) 431e1e9a4bfSMitsuru IWASAKI printf("\tPM1a_CNT_BLK=0x%x-0x%x\n", 432e1e9a4bfSMitsuru IWASAKI facp->pm1a_cnt_blk, 433e1e9a4bfSMitsuru IWASAKI facp->pm1a_cnt_blk + facp->pm1_cnt_len - 1); 434e1e9a4bfSMitsuru IWASAKI if (facp->pm1b_cnt_blk) 435e1e9a4bfSMitsuru IWASAKI printf("\tPM1b_CNT_BLK=0x%x-0x%x\n", 436e1e9a4bfSMitsuru IWASAKI facp->pm1b_cnt_blk, 437e1e9a4bfSMitsuru IWASAKI facp->pm1b_cnt_blk + facp->pm1_cnt_len - 1); 438e1e9a4bfSMitsuru IWASAKI if (facp->pm2_cnt_blk) 439e1e9a4bfSMitsuru IWASAKI printf("\tPM2_CNT_BLK=0x%x-0x%x\n", 440e1e9a4bfSMitsuru IWASAKI facp->pm2_cnt_blk, 441e1e9a4bfSMitsuru IWASAKI facp->pm2_cnt_blk + facp->pm2_cnt_len - 1); 442e1e9a4bfSMitsuru IWASAKI if (facp->pm_tmr_blk) 443e1e9a4bfSMitsuru IWASAKI printf("\tPM2_TMR_BLK=0x%x-0x%x\n", 444e1e9a4bfSMitsuru IWASAKI facp->pm_tmr_blk, 445e1e9a4bfSMitsuru IWASAKI facp->pm_tmr_blk + facp->pm_tmr_len - 1); 446e1e9a4bfSMitsuru IWASAKI if (facp->gpe0_blk) 447e1e9a4bfSMitsuru IWASAKI printf("\tPM2_GPE0_BLK=0x%x-0x%x\n", 448e1e9a4bfSMitsuru IWASAKI facp->gpe0_blk, 449e1e9a4bfSMitsuru IWASAKI facp->gpe0_blk + facp->gpe0_len - 1); 450e1e9a4bfSMitsuru IWASAKI if (facp->gpe1_blk) 451e1e9a4bfSMitsuru IWASAKI printf("\tPM2_GPE1_BLK=0x%x-0x%x, GPE1_BASE=%d\n", 452e1e9a4bfSMitsuru IWASAKI facp->gpe1_blk, 453e1e9a4bfSMitsuru IWASAKI facp->gpe1_blk + facp->gpe1_len - 1, 454e1e9a4bfSMitsuru IWASAKI facp->gpe1_base); 455e1e9a4bfSMitsuru IWASAKI printf("\tP_LVL2_LAT=%dms, P_LVL3_LAT=%dms\n", 456e1e9a4bfSMitsuru IWASAKI facp->p_lvl2_lat, facp->p_lvl3_lat); 457e1e9a4bfSMitsuru IWASAKI printf("\tFLUSH_SIZE=%d, FLUSH_STRIDE=%d\n", 458e1e9a4bfSMitsuru IWASAKI facp->flush_size, facp->flush_stride); 459e1e9a4bfSMitsuru IWASAKI printf("\tDUTY_OFFSET=%d, DUTY_WIDTH=%d\n", 460e1e9a4bfSMitsuru IWASAKI facp->duty_off, facp->duty_width); 461e1e9a4bfSMitsuru IWASAKI printf("\tDAY_ALRM=%d, MON_ALRM=%d, CENTURY=%d\n", 462e1e9a4bfSMitsuru IWASAKI facp->day_alrm, facp->mon_alrm, facp->century); 463e1e9a4bfSMitsuru IWASAKI printf("\tFlags="); 464e1e9a4bfSMitsuru IWASAKI sep = '{'; 465e1e9a4bfSMitsuru IWASAKI 466e1e9a4bfSMitsuru IWASAKI #define PRINTFLAG(xx) do { \ 467e1e9a4bfSMitsuru IWASAKI if (facp->flags & ACPI_FACP_FLAG_## xx) { \ 468e1e9a4bfSMitsuru IWASAKI printf("%c%s", sep, #xx); sep = ','; \ 469e1e9a4bfSMitsuru IWASAKI } \ 470e1e9a4bfSMitsuru IWASAKI } while (0) 471e1e9a4bfSMitsuru IWASAKI 472e1e9a4bfSMitsuru IWASAKI PRINTFLAG(WBINVD); 473e1e9a4bfSMitsuru IWASAKI PRINTFLAG(WBINVD_FLUSH); 474e1e9a4bfSMitsuru IWASAKI PRINTFLAG(PROC_C1); 475e1e9a4bfSMitsuru IWASAKI PRINTFLAG(P_LVL2_UP); 476e1e9a4bfSMitsuru IWASAKI PRINTFLAG(PWR_BUTTON); 477e1e9a4bfSMitsuru IWASAKI PRINTFLAG(SLP_BUTTON); 478e1e9a4bfSMitsuru IWASAKI PRINTFLAG(FIX_RTC); 479e1e9a4bfSMitsuru IWASAKI PRINTFLAG(RTC_S4); 480e1e9a4bfSMitsuru IWASAKI PRINTFLAG(TMR_VAL_EXT); 481e1e9a4bfSMitsuru IWASAKI PRINTFLAG(DCK_CAP); 482e1e9a4bfSMitsuru IWASAKI 483e1e9a4bfSMitsuru IWASAKI #undef PRINTFLAG 484e1e9a4bfSMitsuru IWASAKI 485e1e9a4bfSMitsuru IWASAKI printf("}\n"); 486c62f1cccSMitsuru IWASAKI printf(END_COMMENT); 487e1e9a4bfSMitsuru IWASAKI } 488e1e9a4bfSMitsuru IWASAKI 489e1e9a4bfSMitsuru IWASAKI void 490e1e9a4bfSMitsuru IWASAKI acpi_print_dsdt(struct ACPIsdt *dsdp) 491e1e9a4bfSMitsuru IWASAKI { 492e1e9a4bfSMitsuru IWASAKI 493e1e9a4bfSMitsuru IWASAKI acpi_print_sdt(dsdp); 494e1e9a4bfSMitsuru IWASAKI } 495e1e9a4bfSMitsuru IWASAKI 496e1e9a4bfSMitsuru IWASAKI int 497e1e9a4bfSMitsuru IWASAKI acpi_checksum(void *p, size_t length) 498e1e9a4bfSMitsuru IWASAKI { 499e1e9a4bfSMitsuru IWASAKI u_int8_t *bp; 500e1e9a4bfSMitsuru IWASAKI u_int8_t sum; 501e1e9a4bfSMitsuru IWASAKI 502e1e9a4bfSMitsuru IWASAKI bp = p; 503e1e9a4bfSMitsuru IWASAKI sum = 0; 504e1e9a4bfSMitsuru IWASAKI while (length--) 505e1e9a4bfSMitsuru IWASAKI sum += *bp++; 506e1e9a4bfSMitsuru IWASAKI 507e1e9a4bfSMitsuru IWASAKI return (sum); 508e1e9a4bfSMitsuru IWASAKI } 509e1e9a4bfSMitsuru IWASAKI 510e1e9a4bfSMitsuru IWASAKI struct ACPIsdt * 511e1e9a4bfSMitsuru IWASAKI acpi_map_sdt(vm_offset_t pa) 512e1e9a4bfSMitsuru IWASAKI { 513e1e9a4bfSMitsuru IWASAKI struct ACPIsdt *sp; 514e1e9a4bfSMitsuru IWASAKI 515e1e9a4bfSMitsuru IWASAKI sp = acpi_map_physical(pa, sizeof(struct ACPIsdt)); 516e1e9a4bfSMitsuru IWASAKI sp = acpi_map_physical(pa, sp->len); 517e1e9a4bfSMitsuru IWASAKI return (sp); 518e1e9a4bfSMitsuru IWASAKI } 519e1e9a4bfSMitsuru IWASAKI 520e1e9a4bfSMitsuru IWASAKI void 521e1e9a4bfSMitsuru IWASAKI acpi_print_rsd_ptr(struct ACPIrsdp *rp) 522e1e9a4bfSMitsuru IWASAKI { 523e1e9a4bfSMitsuru IWASAKI 524c62f1cccSMitsuru IWASAKI printf(BEGIN_COMMENT); 525e1e9a4bfSMitsuru IWASAKI printf("RSD PTR: Checksum=%d, OEMID=", rp->sum); 526e1e9a4bfSMitsuru IWASAKI acpi_print_string(rp->oem, 6); 52700d30537SMarcel Moolenaar printf(", RsdtAddress=0x%08x\n", rp->rsdt_addr); 528c62f1cccSMitsuru IWASAKI printf(END_COMMENT); 529e1e9a4bfSMitsuru IWASAKI } 530e1e9a4bfSMitsuru IWASAKI 531e1e9a4bfSMitsuru IWASAKI void 532e1e9a4bfSMitsuru IWASAKI acpi_handle_rsdt(struct ACPIsdt *rsdp) 533e1e9a4bfSMitsuru IWASAKI { 534e1e9a4bfSMitsuru IWASAKI int i; 535e1e9a4bfSMitsuru IWASAKI int entries; 536e1e9a4bfSMitsuru IWASAKI struct ACPIsdt *sdp; 537e1e9a4bfSMitsuru IWASAKI 538e1e9a4bfSMitsuru IWASAKI entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t); 539e1e9a4bfSMitsuru IWASAKI acpi_print_rsdt(rsdp); 540e1e9a4bfSMitsuru IWASAKI for (i = 0; i < entries; i++) { 541e1e9a4bfSMitsuru IWASAKI sdp = (struct ACPIsdt *) acpi_map_sdt(rsdp->body[i]); 542e1e9a4bfSMitsuru IWASAKI if (acpi_checksum(sdp, sdp->len)) 543e1e9a4bfSMitsuru IWASAKI errx(1, "RSDT entry %d is corrupt\n", i); 544e1e9a4bfSMitsuru IWASAKI if (!memcmp(sdp->signature, "FACP", 4)) { 545e1e9a4bfSMitsuru IWASAKI acpi_handle_facp((struct FACPbody *) sdp->body); 5460a473124SJohn Baldwin } else if (!memcmp(sdp->signature, "APIC", 4)) { 5470a473124SJohn Baldwin acpi_handle_apic(sdp); 54879d7565cSPeter Wemm } else if (!memcmp(sdp->signature, "HPET", 4)) { 54979d7565cSPeter Wemm acpi_handle_hpet(sdp); 550e1e9a4bfSMitsuru IWASAKI } else { 551e1e9a4bfSMitsuru IWASAKI acpi_print_sdt(sdp); 552e1e9a4bfSMitsuru IWASAKI } 553e1e9a4bfSMitsuru IWASAKI } 554e1e9a4bfSMitsuru IWASAKI } 555c62f1cccSMitsuru IWASAKI 556c62f1cccSMitsuru IWASAKI /* 557c62f1cccSMitsuru IWASAKI * Dummy functions 558c62f1cccSMitsuru IWASAKI */ 559c62f1cccSMitsuru IWASAKI 560c62f1cccSMitsuru IWASAKI void 561c62f1cccSMitsuru IWASAKI aml_dbgr(struct aml_environ *env1, struct aml_environ *env2) 562c62f1cccSMitsuru IWASAKI { 563c62f1cccSMitsuru IWASAKI /* do nothing */ 564c62f1cccSMitsuru IWASAKI } 565c62f1cccSMitsuru IWASAKI 566c62f1cccSMitsuru IWASAKI int 567c62f1cccSMitsuru IWASAKI aml_region_read_simple(struct aml_region_handle *h, vm_offset_t offset, 568c62f1cccSMitsuru IWASAKI u_int32_t *valuep) 569c62f1cccSMitsuru IWASAKI { 570c62f1cccSMitsuru IWASAKI return (0); 571c62f1cccSMitsuru IWASAKI } 572c62f1cccSMitsuru IWASAKI 573c62f1cccSMitsuru IWASAKI int 574c62f1cccSMitsuru IWASAKI aml_region_write_simple(struct aml_region_handle *h, vm_offset_t offset, 575c62f1cccSMitsuru IWASAKI u_int32_t value) 576c62f1cccSMitsuru IWASAKI { 577c62f1cccSMitsuru IWASAKI return (0); 578c62f1cccSMitsuru IWASAKI } 579c62f1cccSMitsuru IWASAKI 580c62f1cccSMitsuru IWASAKI u_int32_t 581c62f1cccSMitsuru IWASAKI aml_region_prompt_read(struct aml_region_handle *h, u_int32_t value) 582c62f1cccSMitsuru IWASAKI { 583c62f1cccSMitsuru IWASAKI return (0); 584c62f1cccSMitsuru IWASAKI } 585c62f1cccSMitsuru IWASAKI 586c62f1cccSMitsuru IWASAKI u_int32_t 587c62f1cccSMitsuru IWASAKI aml_region_prompt_write(struct aml_region_handle *h, u_int32_t value) 588c62f1cccSMitsuru IWASAKI { 589c62f1cccSMitsuru IWASAKI return (0); 590c62f1cccSMitsuru IWASAKI } 591c62f1cccSMitsuru IWASAKI 592c62f1cccSMitsuru IWASAKI int 593c62f1cccSMitsuru IWASAKI aml_region_prompt_update_value(u_int32_t orgval, u_int32_t value, 594c62f1cccSMitsuru IWASAKI struct aml_region_handle *h) 595c62f1cccSMitsuru IWASAKI { 596c62f1cccSMitsuru IWASAKI return (0); 597c62f1cccSMitsuru IWASAKI } 598c62f1cccSMitsuru IWASAKI 599c62f1cccSMitsuru IWASAKI u_int32_t 600c62f1cccSMitsuru IWASAKI aml_region_read(struct aml_environ *env, int regtype, u_int32_t flags, 601c62f1cccSMitsuru IWASAKI u_int32_t addr, u_int32_t bitoffset, u_int32_t bitlen) 602c62f1cccSMitsuru IWASAKI { 603c62f1cccSMitsuru IWASAKI return (0); 604c62f1cccSMitsuru IWASAKI } 605c62f1cccSMitsuru IWASAKI 606c62f1cccSMitsuru IWASAKI int 607c62f1cccSMitsuru IWASAKI aml_region_write(struct aml_environ *env, int regtype, u_int32_t flags, 608c62f1cccSMitsuru IWASAKI u_int32_t value, u_int32_t addr, u_int32_t bitoffset, u_int32_t bitlen) 609c62f1cccSMitsuru IWASAKI { 610c62f1cccSMitsuru IWASAKI return (0); 611c62f1cccSMitsuru IWASAKI } 612c62f1cccSMitsuru IWASAKI 613c62f1cccSMitsuru IWASAKI int 614c62f1cccSMitsuru IWASAKI aml_region_write_from_buffer(struct aml_environ *env, int regtype, 615c62f1cccSMitsuru IWASAKI u_int32_t flags, u_int8_t *buffer, u_int32_t addr, u_int32_t bitoffset, 616c62f1cccSMitsuru IWASAKI u_int32_t bitlen) 617c62f1cccSMitsuru IWASAKI { 618c62f1cccSMitsuru IWASAKI return (0); 619c62f1cccSMitsuru IWASAKI } 620c62f1cccSMitsuru IWASAKI 621c62f1cccSMitsuru IWASAKI int 622c62f1cccSMitsuru IWASAKI aml_region_bcopy(struct aml_environ *env, int regtype, u_int32_t flags, 623c62f1cccSMitsuru IWASAKI u_int32_t addr, u_int32_t bitoffset, u_int32_t bitlen, 624c62f1cccSMitsuru IWASAKI u_int32_t dflags, u_int32_t daddr, 625c62f1cccSMitsuru IWASAKI u_int32_t dbitoffset, u_int32_t dbitlen) 626c62f1cccSMitsuru IWASAKI { 627c62f1cccSMitsuru IWASAKI return (0); 628c62f1cccSMitsuru IWASAKI } 629c62f1cccSMitsuru IWASAKI 630c62f1cccSMitsuru IWASAKI int 631c62f1cccSMitsuru IWASAKI aml_region_read_into_buffer(struct aml_environ *env, int regtype, 632c62f1cccSMitsuru IWASAKI u_int32_t flags, u_int32_t addr, u_int32_t bitoffset, 633c62f1cccSMitsuru IWASAKI u_int32_t bitlen, u_int8_t *buffer) 634c62f1cccSMitsuru IWASAKI { 635c62f1cccSMitsuru IWASAKI return (0); 636c62f1cccSMitsuru IWASAKI } 637c62f1cccSMitsuru IWASAKI 638