xref: /freebsd/sys/x86/acpica/OsdEnvironment.c (revision cedd86cafacde17212b152537f5c5cd58a889221)
1*cedd86caSJung-uk Kim /*-
2*cedd86caSJung-uk Kim  * Copyright (c) 2000,2001 Michael Smith
3*cedd86caSJung-uk Kim  * Copyright (c) 2000 BSDi
4*cedd86caSJung-uk Kim  * All rights reserved.
5*cedd86caSJung-uk Kim  *
6*cedd86caSJung-uk Kim  * Redistribution and use in source and binary forms, with or without
7*cedd86caSJung-uk Kim  * modification, are permitted provided that the following conditions
8*cedd86caSJung-uk Kim  * are met:
9*cedd86caSJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
10*cedd86caSJung-uk Kim  *    notice, this list of conditions and the following disclaimer.
11*cedd86caSJung-uk Kim  * 2. Redistributions in binary form must reproduce the above copyright
12*cedd86caSJung-uk Kim  *    notice, this list of conditions and the following disclaimer in the
13*cedd86caSJung-uk Kim  *    documentation and/or other materials provided with the distribution.
14*cedd86caSJung-uk Kim  *
15*cedd86caSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16*cedd86caSJung-uk Kim  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17*cedd86caSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18*cedd86caSJung-uk Kim  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19*cedd86caSJung-uk Kim  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20*cedd86caSJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21*cedd86caSJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22*cedd86caSJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23*cedd86caSJung-uk Kim  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24*cedd86caSJung-uk Kim  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25*cedd86caSJung-uk Kim  * SUCH DAMAGE.
26*cedd86caSJung-uk Kim  */
27*cedd86caSJung-uk Kim 
28*cedd86caSJung-uk Kim #include <sys/cdefs.h>
29*cedd86caSJung-uk Kim __FBSDID("$FreeBSD$");
30*cedd86caSJung-uk Kim 
31*cedd86caSJung-uk Kim #include <sys/types.h>
32*cedd86caSJung-uk Kim #include <sys/bus.h>
33*cedd86caSJung-uk Kim #include <sys/linker_set.h>
34*cedd86caSJung-uk Kim #include <sys/sysctl.h>
35*cedd86caSJung-uk Kim 
36*cedd86caSJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
37*cedd86caSJung-uk Kim #include <contrib/dev/acpica/include/actables.h>
38*cedd86caSJung-uk Kim 
39*cedd86caSJung-uk Kim static u_long acpi_root_phys;
40*cedd86caSJung-uk Kim 
41*cedd86caSJung-uk Kim SYSCTL_ULONG(_machdep, OID_AUTO, acpi_root, CTLFLAG_RD, &acpi_root_phys, 0,
42*cedd86caSJung-uk Kim     "The physical address of the RSDP");
43*cedd86caSJung-uk Kim 
44*cedd86caSJung-uk Kim ACPI_STATUS
45*cedd86caSJung-uk Kim AcpiOsInitialize(void)
46*cedd86caSJung-uk Kim {
47*cedd86caSJung-uk Kim 
48*cedd86caSJung-uk Kim 	return (AE_OK);
49*cedd86caSJung-uk Kim }
50*cedd86caSJung-uk Kim 
51*cedd86caSJung-uk Kim ACPI_STATUS
52*cedd86caSJung-uk Kim AcpiOsTerminate(void)
53*cedd86caSJung-uk Kim {
54*cedd86caSJung-uk Kim 
55*cedd86caSJung-uk Kim 	return (AE_OK);
56*cedd86caSJung-uk Kim }
57*cedd86caSJung-uk Kim 
58*cedd86caSJung-uk Kim static u_long
59*cedd86caSJung-uk Kim acpi_get_root_from_loader(void)
60*cedd86caSJung-uk Kim {
61*cedd86caSJung-uk Kim 	long acpi_root;
62*cedd86caSJung-uk Kim 
63*cedd86caSJung-uk Kim 	if (resource_long_value("acpi", 0, "rsdp", &acpi_root) == 0)
64*cedd86caSJung-uk Kim 		return (acpi_root);
65*cedd86caSJung-uk Kim 
66*cedd86caSJung-uk Kim 	return (0);
67*cedd86caSJung-uk Kim }
68*cedd86caSJung-uk Kim 
69*cedd86caSJung-uk Kim static u_long
70*cedd86caSJung-uk Kim acpi_get_root_from_memory(void)
71*cedd86caSJung-uk Kim {
72*cedd86caSJung-uk Kim 	ACPI_SIZE acpi_root;
73*cedd86caSJung-uk Kim 
74*cedd86caSJung-uk Kim 	if (ACPI_SUCCESS(AcpiFindRootPointer(&acpi_root)))
75*cedd86caSJung-uk Kim 		return (acpi_root);
76*cedd86caSJung-uk Kim 
77*cedd86caSJung-uk Kim 	return (0);
78*cedd86caSJung-uk Kim }
79*cedd86caSJung-uk Kim 
80*cedd86caSJung-uk Kim ACPI_PHYSICAL_ADDRESS
81*cedd86caSJung-uk Kim AcpiOsGetRootPointer(void)
82*cedd86caSJung-uk Kim {
83*cedd86caSJung-uk Kim 
84*cedd86caSJung-uk Kim 	if (acpi_root_phys == 0) {
85*cedd86caSJung-uk Kim 		acpi_root_phys = acpi_get_root_from_loader();
86*cedd86caSJung-uk Kim 		if (acpi_root_phys == 0)
87*cedd86caSJung-uk Kim 			acpi_root_phys = acpi_get_root_from_memory();
88*cedd86caSJung-uk Kim 	}
89*cedd86caSJung-uk Kim 
90*cedd86caSJung-uk Kim 	return (acpi_root_phys);
91*cedd86caSJung-uk Kim }
92