acpi_machdep.c revision 209779
1/*- 2 * Copyright (c) 2001 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD: head/sys/ia64/acpica/acpi_machdep.c 209779 2010-07-07 20:07:33Z marcel $ 27 */ 28 29#include <sys/param.h> 30#include <sys/bus.h> 31#include <machine/md_var.h> 32#include <machine/pal.h> 33 34#include <contrib/dev/acpica/include/acpi.h> 35#include <contrib/dev/acpica/include/actables.h> 36#include <dev/acpica/acpivar.h> 37 38int 39acpi_machdep_init(device_t dev) 40{ 41 struct acpi_softc *sc; 42 43 sc = device_get_softc(dev); 44 45 acpi_install_wakeup_handler(sc); 46 47 return (0); 48} 49 50int 51acpi_machdep_quirks(int *quirks) 52{ 53 return (0); 54} 55 56void 57acpi_cpu_c1() 58{ 59 ia64_call_pal_static(PAL_HALT_LIGHT, 0, 0, 0); 60} 61 62void * 63acpi_find_table(const char *sig) 64{ 65 ACPI_PHYSICAL_ADDRESS rsdp_ptr; 66 ACPI_TABLE_RSDP *rsdp; 67 ACPI_TABLE_XSDT *xsdt; 68 ACPI_TABLE_HEADER *table; 69 UINT64 addr; 70 u_int i, count; 71 72 if ((rsdp_ptr = AcpiOsGetRootPointer()) == 0) 73 return (NULL); 74 75 rsdp = (ACPI_TABLE_RSDP *)IA64_PHYS_TO_RR7(rsdp_ptr); 76 xsdt = (ACPI_TABLE_XSDT *)IA64_PHYS_TO_RR7(rsdp->XsdtPhysicalAddress); 77 78 count = (UINT64 *)((char *)xsdt + xsdt->Header.Length) - 79 xsdt->TableOffsetEntry; 80 81 for (i = 0; i < count; i++) { 82 addr = xsdt->TableOffsetEntry[i]; 83 table = (ACPI_TABLE_HEADER *)IA64_PHYS_TO_RR7(addr); 84 85 if (strncmp(table->Signature, sig, ACPI_NAME_SIZE) != 0) 86 continue; 87 if (ACPI_FAILURE(AcpiTbChecksum((void *)table, table->Length))) 88 continue; 89 90 return (table); 91 } 92 93 return (NULL); 94} 95