DrvAcpiCpu.cpp revision eb90548e8e40e597d65cdcc16ec958a3e09c1d73
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync/* $Id$ */
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync/** @file
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync * DrvAcpiCpu - ACPI CPU dummy driver for hotplugging.
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync */
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync/*
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync *
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync * available from http://www.virtualbox.org. This file is free software;
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * you can redistribute it and/or modify it under the terms of the GNU
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * General Public License (GPL) as published by the Free Software
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync *
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * additional information or have any questions.
62471ba48484cd8fc1a391298efc0ff1d83d370evboxsync */
e862981c2e186a4cb6a126557d57603cc100d448vboxsync
e862981c2e186a4cb6a126557d57603cc100d448vboxsync/*******************************************************************************
e862981c2e186a4cb6a126557d57603cc100d448vboxsync* Header Files *
e862981c2e186a4cb6a126557d57603cc100d448vboxsync*******************************************************************************/
e862981c2e186a4cb6a126557d57603cc100d448vboxsync#define LOG_GROUP LOG_GROUP_DRV_ACPI
e862981c2e186a4cb6a126557d57603cc100d448vboxsync
e862981c2e186a4cb6a126557d57603cc100d448vboxsync#include <VBox/pdmdrv.h>
e862981c2e186a4cb6a126557d57603cc100d448vboxsync#include <VBox/log.h>
e862981c2e186a4cb6a126557d57603cc100d448vboxsync#include <iprt/assert.h>
e862981c2e186a4cb6a126557d57603cc100d448vboxsync#include <iprt/string.h>
e862981c2e186a4cb6a126557d57603cc100d448vboxsync
e862981c2e186a4cb6a126557d57603cc100d448vboxsync#include "Builtins.h"
e862981c2e186a4cb6a126557d57603cc100d448vboxsync
e862981c2e186a4cb6a126557d57603cc100d448vboxsync/**
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * Queries an interface to the driver.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync *
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * @returns Pointer to interface.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * @returns NULL if the interface was not supported by the driver.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * @param pInterface Pointer to this interface structure.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * @param enmInterface The requested interface identification.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * @thread Any thread.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync */
e862981c2e186a4cb6a126557d57603cc100d448vboxsyncstatic DECLCALLBACK(void *) drvACPICpuQueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface)
e862981c2e186a4cb6a126557d57603cc100d448vboxsync{
e862981c2e186a4cb6a126557d57603cc100d448vboxsync PPDMDRVINS pDrvIns = PDMIBASE_2_PDMDRV(pInterface);
e862981c2e186a4cb6a126557d57603cc100d448vboxsync
e862981c2e186a4cb6a126557d57603cc100d448vboxsync switch (enmInterface)
e862981c2e186a4cb6a126557d57603cc100d448vboxsync {
e862981c2e186a4cb6a126557d57603cc100d448vboxsync case PDMINTERFACE_BASE:
e862981c2e186a4cb6a126557d57603cc100d448vboxsync return &pDrvIns->IBase;
e862981c2e186a4cb6a126557d57603cc100d448vboxsync default:
e862981c2e186a4cb6a126557d57603cc100d448vboxsync return NULL;
e862981c2e186a4cb6a126557d57603cc100d448vboxsync }
e862981c2e186a4cb6a126557d57603cc100d448vboxsync}
e862981c2e186a4cb6a126557d57603cc100d448vboxsync
e862981c2e186a4cb6a126557d57603cc100d448vboxsync/**
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * Destruct a driver instance.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync *
4e664340a06cc85b77cd1e6bddcd5b2da558ddd5vboxsync * Most VM resources are freed by the VM. This callback is provided so that any non-VM
4e664340a06cc85b77cd1e6bddcd5b2da558ddd5vboxsync * resources can be freed correctly.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync *
e862981c2e186a4cb6a126557d57603cc100d448vboxsync * @param pDrvIns The driver instance data.
e862981c2e186a4cb6a126557d57603cc100d448vboxsync */
static DECLCALLBACK(void) drvACPICpuDestruct(PPDMDRVINS pDrvIns)
{
LogFlow(("drvACPICpuDestruct\n"));
}
/**
* Construct an ACPI CPU driver instance.
*
* @copydoc FNPDMDRVCONSTRUCT
*/
static DECLCALLBACK(int) drvACPICpuConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle, uint32_t fFlags)
{
/*
* Init the static parts.
*/
/* IBase */
pDrvIns->IBase.pfnQueryInterface = drvACPICpuQueryInterface;
/*
* Validate the config.
*/
if (!CFGMR3AreValuesValid(pCfgHandle, "\0"))
return VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES;
/*
* Check that no-one is attached to us.
*/
AssertMsgReturn(PDMDrvHlpNoAttach(pDrvIns) == VERR_PDM_NO_ATTACHED_DRIVER,
("Configuration error: Not possible to attach anything to this driver!\n"),
VERR_PDM_DRVINS_NO_ATTACH);
return VINF_SUCCESS;
}
/**
* ACPI CPU driver registration record.
*/
const PDMDRVREG g_DrvAcpiCpu =
{
/* u32Version */
PDM_DRVREG_VERSION,
/* szDriverName */
"ACPICpu",
/* pszDescription */
"ACPI CPU Driver",
/* fFlags */
PDM_DRVREG_FLAGS_HOST_BITS_DEFAULT,
/* fClass. */
PDM_DRVREG_CLASS_ACPI,
/* cMaxInstances */
~0,
/* cbInstance */
sizeof(PDMDRVINS),
/* pfnConstruct */
drvACPICpuConstruct,
/* pfnDestruct */
drvACPICpuDestruct,
/* pfnIOCtl */
NULL,
/* pfnPowerOn */
NULL,
/* pfnReset */
NULL,
/* pfnSuspend */
NULL,
/* pfnResume */
NULL,
/* pfnAttach */
NULL,
/* pfnDetach */
NULL,
/* pfnPowerOff */
NULL,
/* pfnSoftReset */
NULL,
/* u32EndVersion */
PDM_DRVREG_VERSION
};