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