xref: /dflybsd-src/sys/platform/pc64/acpica/OsdEnvironment.c (revision 38cec0ebc22b1d4a491d2e9889b693e37b4b0dd3)
15db2f26eSSascha Wildner /*-
25db2f26eSSascha Wildner  * Copyright (c) 2000,2001 Michael Smith
35db2f26eSSascha Wildner  * Copyright (c) 2000 BSDi
45db2f26eSSascha Wildner  * All rights reserved.
55db2f26eSSascha Wildner  *
65db2f26eSSascha Wildner  * Redistribution and use in source and binary forms, with or without
75db2f26eSSascha Wildner  * modification, are permitted provided that the following conditions
85db2f26eSSascha Wildner  * are met:
95db2f26eSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
105db2f26eSSascha Wildner  *    notice, this list of conditions and the following disclaimer.
115db2f26eSSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
125db2f26eSSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
135db2f26eSSascha Wildner  *    documentation and/or other materials provided with the distribution.
145db2f26eSSascha Wildner  *
155db2f26eSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
165db2f26eSSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
175db2f26eSSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
185db2f26eSSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
195db2f26eSSascha Wildner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
205db2f26eSSascha Wildner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
215db2f26eSSascha Wildner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
225db2f26eSSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
235db2f26eSSascha Wildner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
245db2f26eSSascha Wildner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
255db2f26eSSascha Wildner  * SUCH DAMAGE.
265db2f26eSSascha Wildner  *
275db2f26eSSascha Wildner  * $FreeBSD: src/sys/i386/acpica/OsdEnvironment.c,v 1.10 2004/05/06 02:18:58 njl Exp $
285db2f26eSSascha Wildner  */
295db2f26eSSascha Wildner 
305db2f26eSSascha Wildner /*
31178f054bSSascha Wildner  * Environmental and ACPI Tables (partial)
325db2f26eSSascha Wildner  */
33178f054bSSascha Wildner 
345db2f26eSSascha Wildner #include <sys/types.h>
355db2f26eSSascha Wildner #include <sys/linker_set.h>
365db2f26eSSascha Wildner #include <sys/sysctl.h>
375db2f26eSSascha Wildner 
380bf2586eSImre Vadász #include <machine/vmparam.h>
390bf2586eSImre Vadász 
405db2f26eSSascha Wildner #include "acpi.h"
415db2f26eSSascha Wildner 
42*38cec0ebSSascha Wildner static u_long acpi_root_phys;
435db2f26eSSascha Wildner 
44*38cec0ebSSascha Wildner SYSCTL_ULONG(_machdep, OID_AUTO, acpi_root, CTLFLAG_RD, &acpi_root_phys, 0,
455db2f26eSSascha Wildner     "The physical address of the RSDP");
465db2f26eSSascha Wildner 
475db2f26eSSascha Wildner ACPI_STATUS
AcpiOsInitialize(void)485db2f26eSSascha Wildner AcpiOsInitialize(void)
495db2f26eSSascha Wildner {
50994ea394SSascha Wildner 	return (AE_OK);
515db2f26eSSascha Wildner }
525db2f26eSSascha Wildner 
535db2f26eSSascha Wildner ACPI_STATUS
AcpiOsTerminate(void)545db2f26eSSascha Wildner AcpiOsTerminate(void)
555db2f26eSSascha Wildner {
56994ea394SSascha Wildner 	return (AE_OK);
575db2f26eSSascha Wildner }
585db2f26eSSascha Wildner 
595db2f26eSSascha Wildner ACPI_PHYSICAL_ADDRESS
AcpiOsGetRootPointer(void)605db2f26eSSascha Wildner AcpiOsGetRootPointer(void)
615db2f26eSSascha Wildner {
625db2f26eSSascha Wildner 	ACPI_SIZE ptr;
635db2f26eSSascha Wildner 	ACPI_STATUS status;
640bf2586eSImre Vadász 	u_long acpi_root;
655db2f26eSSascha Wildner 
66*38cec0ebSSascha Wildner 	if (acpi_root_phys == 0) {
675db2f26eSSascha Wildner 		/*
685db2f26eSSascha Wildner 		 * The loader passes the physical address at which it found the
690bf2586eSImre Vadász 		 * RSDP in a hint.  We try to recover this before searching
705db2f26eSSascha Wildner 		 * manually here.
715db2f26eSSascha Wildner 		 */
720bf2586eSImre Vadász 		if (kgetenv_ulong("hint.acpi.0.rsdp", &acpi_root) == 1) {
73*38cec0ebSSascha Wildner 			acpi_root_phys = acpi_root;
740bf2586eSImre Vadász 		} else {
755db2f26eSSascha Wildner 			status = AcpiFindRootPointer(&ptr);
76b08525dbSSascha Wildner 			if (ACPI_SUCCESS(status))
77*38cec0ebSSascha Wildner 				acpi_root_phys = ptr;
785db2f26eSSascha Wildner 		}
790bf2586eSImre Vadász 	}
805db2f26eSSascha Wildner 
81*38cec0ebSSascha Wildner 	return (acpi_root_phys);
825db2f26eSSascha Wildner }
83