OsdEnvironment.c revision 118030
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/amd64/acpica/OsdEnvironment.c 118030 2003-07-25 21:10:19Z obrien $"); 30118030Sobrien 3167760Smsmith/* 3267760Smsmith * 6.1 : Environmental support 3367760Smsmith */ 34108026Smarcel#include <sys/types.h> 35108026Smarcel#include <sys/linker_set.h> 36108026Smarcel#include <sys/sysctl.h> 3767760Smsmith 3867760Smsmith#include "acpi.h" 3967760Smsmith 40115428Speteru_long amd64_acpi_root; 41108026Smarcel 42115428SpeterSYSCTL_ULONG(_machdep, OID_AUTO, acpi_root, CTLFLAG_RD, &amd64_acpi_root, 0, 43108026Smarcel "The physical address of the RSDP"); 44108026Smarcel 4567760SmsmithACPI_STATUS 4667760SmsmithAcpiOsInitialize(void) 4767760Smsmith{ 48108026Smarcel return(0); 4967760Smsmith} 5067760Smsmith 5167760SmsmithACPI_STATUS 5267760SmsmithAcpiOsTerminate(void) 5367760Smsmith{ 54108026Smarcel return(0); 5567760Smsmith} 5680071Smsmith 5780071SmsmithACPI_STATUS 58108026SmarcelAcpiOsGetRootPointer(UINT32 Flags, ACPI_POINTER *RsdpPhysicalAddress) 5980071Smsmith{ 60108026Smarcel ACPI_POINTER ptr; 61108026Smarcel ACPI_STATUS status; 62108026Smarcel 63115428Speter if (amd64_acpi_root == 0) { 64108026Smarcel /* 65108026Smarcel * The loader passes the physical address at which it found the 66108026Smarcel * RSDP in a hint. We could recover this rather than searching 67108026Smarcel * manually here. 68108026Smarcel */ 69108026Smarcel status = AcpiFindRootPointer(Flags, &ptr); 70108026Smarcel if (status == AE_OK) 71115428Speter amd64_acpi_root = ptr.Pointer.Physical; 72108026Smarcel } else 73108026Smarcel status = AE_OK; 74108026Smarcel 75108026Smarcel RsdpPhysicalAddress->PointerType = ACPI_PHYSICAL_POINTER; 76115428Speter RsdpPhysicalAddress->Pointer.Physical = amd64_acpi_root; 77108026Smarcel return (status); 7880071Smsmith} 79