VBoxAcpi.cpp revision 7f8a04081173dbe3c72bddd0ffeb237e7f9070b0
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync/** @file
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * VBoxAcpi - Virtual Box ACPI maniputation functionality.
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync */
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync/*
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync *
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * available from http://www.virtualbox.org. This file is free software;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * you can redistribute it and/or modify it under the terms of the GNU
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * General Public License (GPL) as published by the Free Software
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync *
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync * additional information or have any questions.
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync */
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#if !defined(IN_RING3)
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#error Pure R3 code
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#endif
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <VBox/pdmdev.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <VBox/pgm.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <VBox/log.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <VBox/param.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <iprt/assert.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <iprt/alloc.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#include <iprt/string.h>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#ifdef VBOX_WITH_DYNAMIC_DSDT
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync/* vbox.dsl - input to generate proper DSDT on the fly */
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync# include <vboxdsl.hex>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#else
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync/* Statically compiled AML */
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync# include <vboxaml.hex>
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#endif
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#ifdef VBOX_WITH_DYNAMIC_DSDT
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsyncstatic int prepareDynamicDsdt(PPDMDEVINS pDevIns,
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync void* *ppPtr,
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync size_t *puDsdtLen)
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync{
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync //LogRel(("file is %s\n", g_abVboxDslSource));
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync *ppPtr = NULL;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync *puDsdtLen = 0;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync return 0;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync}
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsyncstatic int cleanupDynamicDsdt(PPDMDEVINS pDevIns,
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync void* pPtr)
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync{
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync return 0;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync}
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#endif
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync/* Two only public functions */
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsyncint acpiPrepareDsdt(PPDMDEVINS pDevIns, void * *ppPtr, size_t *puDsdtLen)
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync{
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#ifdef VBOX_WITH_DYNAMIC_DSDT
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync return prepareDynamicDsdt(pDevIns, ppPtr, puDsdtLen);
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#else
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync *ppPtr = AmlCode;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync *puDsdtLen = sizeof(AmlCode);
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync return 0;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#endif
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync}
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsyncint acpiCleanupDsdt(PPDMDEVINS pDevIns, void * pPtr)
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync{
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#ifdef VBOX_WITH_DYNAMIC_DSDT
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync return cleanupDynamicDsdt(pDevIns, pPtr);
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#else
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync /* Do nothing */
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync return 0;
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync#endif
7f8a04081173dbe3c72bddd0ffeb237e7f9070b0vboxsync}