OsdEnvironment.c revision 281475
167760Smsmith/*- 283181Smsmith * Copyright (c) 2000,2001 Michael Smith 367760Smsmith * Copyright (c) 2000 BSDi 467760Smsmith * All rights reserved. 567760Smsmith * 667760Smsmith * Redistribution and use in source and binary forms, with or without 767760Smsmith * modification, are permitted provided that the following conditions 867760Smsmith * are met: 967760Smsmith * 1. Redistributions of source code must retain the above copyright 1067760Smsmith * notice, this list of conditions and the following disclaimer. 1167760Smsmith * 2. Redistributions in binary form must reproduce the above copyright 1267760Smsmith * notice, this list of conditions and the following disclaimer in the 1367760Smsmith * documentation and/or other materials provided with the distribution. 1467760Smsmith * 1567760Smsmith * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1667760Smsmith * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1767760Smsmith * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1867760Smsmith * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1967760Smsmith * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2067760Smsmith * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2167760Smsmith * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2267760Smsmith * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2367760Smsmith * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2467760Smsmith * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2567760Smsmith * SUCH DAMAGE. 2667760Smsmith */ 2767760Smsmith 28118030Sobrien#include <sys/cdefs.h> 29118030Sobrien__FBSDID("$FreeBSD: head/sys/x86/acpica/OsdEnvironment.c 281475 2015-04-12 22:40:27Z jkim $"); 30118030Sobrien 31108026Smarcel#include <sys/types.h> 32167814Sjkim#include <sys/bus.h> 33108026Smarcel#include <sys/sysctl.h> 3467760Smsmith 35193530Sjkim#include <contrib/dev/acpica/include/acpi.h> 36193530Sjkim#include <contrib/dev/acpica/include/actables.h> 3767760Smsmith 38215023Sjkimstatic u_long acpi_root_phys; 39108026Smarcel 40215023SjkimSYSCTL_ULONG(_machdep, OID_AUTO, acpi_root, CTLFLAG_RD, &acpi_root_phys, 0, 41215023Sjkim "The physical address of the RSDP"); 42108026Smarcel 4367760SmsmithACPI_STATUS 4467760SmsmithAcpiOsInitialize(void) 4567760Smsmith{ 46215023Sjkim 47215023Sjkim return (AE_OK); 4867760Smsmith} 4967760Smsmith 5067760SmsmithACPI_STATUS 5167760SmsmithAcpiOsTerminate(void) 5267760Smsmith{ 53215023Sjkim 54215023Sjkim return (AE_OK); 5567760Smsmith} 5680071Smsmith 57215023Sjkimstatic u_long 58215023Sjkimacpi_get_root_from_loader(void) 59215023Sjkim{ 60215023Sjkim long acpi_root; 61215023Sjkim 62215023Sjkim if (resource_long_value("acpi", 0, "rsdp", &acpi_root) == 0) 63215023Sjkim return (acpi_root); 64215023Sjkim 65215023Sjkim return (0); 66215023Sjkim} 67215023Sjkim 68215023Sjkimstatic u_long 69215023Sjkimacpi_get_root_from_memory(void) 70215023Sjkim{ 71281475Sjkim ACPI_PHYSICAL_ADDRESS acpi_root; 72215023Sjkim 73215023Sjkim if (ACPI_SUCCESS(AcpiFindRootPointer(&acpi_root))) 74215023Sjkim return (acpi_root); 75215023Sjkim 76215023Sjkim return (0); 77215023Sjkim} 78215023Sjkim 79167814SjkimACPI_PHYSICAL_ADDRESS 80167814SjkimAcpiOsGetRootPointer(void) 8180071Smsmith{ 82108026Smarcel 83215023Sjkim if (acpi_root_phys == 0) { 84215023Sjkim acpi_root_phys = acpi_get_root_from_loader(); 85215023Sjkim if (acpi_root_phys == 0) 86215023Sjkim acpi_root_phys = acpi_get_root_from_memory(); 87215023Sjkim } 88108026Smarcel 89215023Sjkim return (acpi_root_phys); 9080071Smsmith} 91