eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/* $Id$ */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/** @file
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * DrvAcpiCpu - ACPI CPU dummy driver for hotplugging.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/*
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2012 Oracle Corporation
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync *
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * available from http://www.virtualbox.org. This file is free software;
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * you can redistribute it and/or modify it under the terms of the GNU
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * General Public License (GPL) as published by the Free Software
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/*******************************************************************************
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync* Header Files *
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync*******************************************************************************/
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync#define LOG_GROUP LOG_GROUP_DRV_ACPI
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync#include <VBox/vmm/pdmdrv.h>
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync#include <VBox/log.h>
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync#include <iprt/assert.h>
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync#include <iprt/string.h>
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync#include <iprt/uuid.h>
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
f5e53763b0a581b0299e98028c6c52192eb06785vboxsync#include "VBoxDD.h"
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/**
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync * @interface_method_impl{PDMIBASE,pfnQueryInterface}
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsyncstatic DECLCALLBACK(void *) drvACPICpuQueryInterface(PPDMIBASE pInterface, const char *pszIID)
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync{
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync PPDMDRVINS pDrvIns = PDMIBASE_2_PDMDRV(pInterface);
a39ea3668b7019c23a68936259545f9b71bce1aavboxsync PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pDrvIns->IBase);
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync return NULL;
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync}
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/**
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * Construct an ACPI CPU driver instance.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync *
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * @copydoc FNPDMDRVCONSTRUCT
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
c28fa006ba669ad8f26ae31d00a338379c04ea1bvboxsyncstatic DECLCALLBACK(int) drvACPICpuConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync{
e74eef731a813e4e06680c587a6759b9974b29c9vboxsync PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
e74eef731a813e4e06680c587a6759b9974b29c9vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /*
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * Init the static parts.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* IBase */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync pDrvIns->IBase.pfnQueryInterface = drvACPICpuQueryInterface;
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /*
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * Validate the config.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
c28fa006ba669ad8f26ae31d00a338379c04ea1bvboxsync if (!CFGMR3AreValuesValid(pCfg, "\0"))
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync return VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES;
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /*
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * Check that no-one is attached to us.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync AssertMsgReturn(PDMDrvHlpNoAttach(pDrvIns) == VERR_PDM_NO_ATTACHED_DRIVER,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync ("Configuration error: Not possible to attach anything to this driver!\n"),
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync VERR_PDM_DRVINS_NO_ATTACH);
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync return VINF_SUCCESS;
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync}
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync/**
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync * ACPI CPU driver registration record.
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsyncconst PDMDRVREG g_DrvAcpiCpu =
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync{
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* u32Version */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync PDM_DRVREG_VERSION,
5b465a7c1237993faf8bb50120d247f3f0319adavboxsync /* szName */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync "ACPICpu",
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync /* szRCMod */
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync "",
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync /* szR0Mod */
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync "",
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pszDescription */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync "ACPI CPU Driver",
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* fFlags */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync PDM_DRVREG_FLAGS_HOST_BITS_DEFAULT,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* fClass. */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync PDM_DRVREG_CLASS_ACPI,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* cMaxInstances */
ad48e47654d22f79b025dc4b21cb162cb123801avboxsync ~0U,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* cbInstance */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync sizeof(PDMDRVINS),
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnConstruct */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync drvACPICpuConstruct,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnDestruct */
1e1273b11e17928ec3c3a8fff45121aa7a169413vboxsync NULL,
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync /* pfnRelocate */
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnIOCtl */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnPowerOn */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnReset */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnSuspend */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnResume */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnAttach */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnDetach */
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnPowerOff */
ad77e3ec3cde24263bc7537575f5cae442bee3b1vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* pfnSoftReset */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync NULL,
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync /* u32EndVersion */
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync PDM_DRVREG_VERSION
eb90548e8e40e597d65cdcc16ec958a3e09c1d73vboxsync};