diff options
author | Michael Meskes <meskes@debian.org> | 2009-12-01 08:26:35 +0100 |
---|---|---|
committer | Michael Meskes <meskes@debian.org> | 2009-12-01 08:26:35 +0100 |
commit | 92d607e8349d0f1268b236b3bf4cb433179253f1 (patch) | |
tree | 6230e827557f7cd76ac792d43f4cc6a81be3b272 /src/VBox/Devices/Samples | |
parent | 541f51c4dab24f1decc1cb44888af9d45d619338 (diff) | |
download | virtualbox-92d607e8349d0f1268b236b3bf4cb433179253f1.tar.gz |
Imported Upstream version 3.1.0-dfsgupstream/3.1.0-dfsg
Diffstat (limited to 'src/VBox/Devices/Samples')
-rw-r--r-- | src/VBox/Devices/Samples/Makefile.kmk | 40 | ||||
-rw-r--r-- | src/VBox/Devices/Samples/VBoxSampleDevice.cpp | 166 |
2 files changed, 206 insertions, 0 deletions
diff --git a/src/VBox/Devices/Samples/Makefile.kmk b/src/VBox/Devices/Samples/Makefile.kmk new file mode 100644 index 000000000..dd0cbd532 --- /dev/null +++ b/src/VBox/Devices/Samples/Makefile.kmk @@ -0,0 +1,40 @@ +# $Id: Makefile.kmk 22985 2009-09-14 06:29:29Z vboxsync $ +## @file +# Makefile for the device and driver samples. +# + +# +# Copyright (C) 2009 Sun Microsystems, Inc. +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# + +SUB_DEPTH = ../../../.. +include $(KBUILD_PATH)/subheader.kmk + + +# +# VBoxSampleDriver - A sample device module. +# +DLLS += VBoxSampleDevice +VBoxSampleDevice_TEMPLATE = VBOXR3 +VBoxSampleDevice_NOINST = true +VBoxSampleDevice_SOURCES = \ + VBoxSampleDevice.cpp +VBoxSampleDevice_LIBS = \ + $(LIB_RUNTIME) \ + $(LIB_VMM) \ + $(LIB_REM) + +include $(KBUILD_PATH)/subfooter.kmk + diff --git a/src/VBox/Devices/Samples/VBoxSampleDevice.cpp b/src/VBox/Devices/Samples/VBoxSampleDevice.cpp new file mode 100644 index 000000000..882a6e55d --- /dev/null +++ b/src/VBox/Devices/Samples/VBoxSampleDevice.cpp @@ -0,0 +1,166 @@ +/* $Id: VBoxSampleDevice.cpp 22985 2009-09-14 06:29:29Z vboxsync $ */ +/** @file + * VBox Sample Device. + */ + +/* + * Copyright (C) 2009 Sun Microsystems, Inc. + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#define LOG_GROUP LOG_GROUP_MISC +#include <VBox/pdmdev.h> +#include <VBox/version.h> +#include <VBox/err.h> +#include <VBox/log.h> + +#include <iprt/assert.h> + + +/******************************************************************************* +* Structures and Typedefs * +*******************************************************************************/ +/** + * Device Instance Data. + */ +typedef struct VBOXSAMPLEDEVICE +{ + uint32_t Whatever; +} VBOXSAMPLEDEVICE; +typedef VBOXSAMPLEDEVICE *PVBOXSAMPLEDEVICE; + + + + + FNPDMDEVCONSTRUCT pfnConstruct; + /** Destruct instance - optional. */ + FNPDMDEVDESTRUCT pfnDestruct; + +static DECLCALLBACK(int) devSampleDestruct(PPDMDEVINS pDevIns) +{ + /* + * Check the versions here as well since the destructor is *always* called. + */ + AssertMsgReturn(pDevIns->u32Version == PDM_DEVINS_VERSION, ("%#x, expected %#x\n", pDevIns->u32Version, PDM_DEVINS_VERSION), VERR_VERSION_MISMATCH); + AssertMsgReturn(pDevIns->pDevHlpR3->u32Version == PDM_DEVHLP_VERSION, ("%#x, expected %#x\n", pDevIns->pDevHlpR3->u32Version, PDM_DEVHLP_VERSION), VERR_VERSION_MISMATCH); + + return VINF_SUCCESS; +} + + +static DECLCALLBACK(int) devSampleConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfgHandle) +{ + /* + * Check that the device instance and device helper structures are compatible. + */ + AssertLogRelMsgReturn(pDevIns->u32Version == PDM_DEVINS_VERSION, ("%#x, expected %#x\n", pDevIns->u32Version, PDM_DEVINS_VERSION), VERR_VERSION_MISMATCH); + AssertLogRelMsgReturn(pDevIns->pDevHlpR3->u32Version == PDM_DEVHLP_VERSION, ("%#x, expected %#x\n", pDevIns->pDevHlpR3->u32Version, PDM_DEVHLP_VERSION), VERR_VERSION_MISMATCH); + + /* + * Initialize the instance data so that the destructure won't mess up. + */ + PVBOXSAMPLEDEVICE pThis = PDMINS_2_DATA(pDevIns, PVBOXSAMPLEDEVICE); + pThis->Whatever = 0; + + /* + * Validate and read the configuration. + */ + if (!CFGMR3AreValuesValid(pCfgHandle, + "Whatever1\0" + "Whatever2\0")) + return VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES; + + + return VINF_SUCCESS; +} + + +/** + * The device registration structure. + */ +static const PDMDEVREG g_DeviceSample = +{ + /* u32Version */ + PDM_DEVREG_VERSION, + /* szDeviceName */ + "sample", + /* szRCMod */ + "", + /* szR0Mod */ + "", + /* pszDescription */ + "VBox Sample Device.", + /* fFlags */ + PDM_DEVREG_FLAGS_DEFAULT_BITS, + /* fClass */ + PDM_DEVREG_CLASS_MISC, + /* cMaxInstances */ + 1, + /* cbInstance */ + sizeof(VBOXSAMPLEDEVICE), + /* pfnConstruct */ + devSampleConstruct, + /* pfnDestruct */ + devSampleDestruct, + /* pfnRelocate */ + NULL, + /* pfnIOCtl */ + NULL, + /* pfnPowerOn */ + NULL, + /* pfnReset */ + NULL, + /* pfnSuspend */ + NULL, + /* pfnResume */ + NULL, + /* pfnAttach */ + NULL, + /* pfnDetach */ + NULL, + /* pfnQueryInterface */ + NULL, + /* pfnInitComplete */ + NULL, + /* pfnPowerOff */ + NULL, + /* pfnSoftReset */ + NULL, + /* u32VersionEnd */ + PDM_DEVREG_VERSION +}; + + +/** + * Register builtin devices. + * + * @returns VBox status code. + * @param pCallbacks Pointer to the callback table. + * @param u32Version VBox version number. + */ +extern "C" DECLEXPORT(int) VBoxDevicesRegister(PPDMDEVREGCB pCallbacks, uint32_t u32Version) +{ + LogFlow(("VBoxSampleDevice::VBoxDevicesRegister: u32Version=%#x pCallbacks->u32Version=%#x\n", u32Version, pCallbacks->u32Version)); + + AssertLogRelMsgReturn(pCallbacks->u32Version == PDM_DEVREG_CB_VERSION, + ("%#x, expected %#x\n", pCallbacks->u32Version, PDM_DEVREG_CB_VERSION), + VERR_VERSION_MISMATCH); + + return pCallbacks->pfnRegister(pCallbacks, &g_DeviceSample); +} + |