summaryrefslogtreecommitdiff
path: root/src/VBox/Devices/Samples
diff options
context:
space:
mode:
authorMichael Meskes <meskes@debian.org>2009-12-01 08:26:35 +0100
committerMichael Meskes <meskes@debian.org>2009-12-01 08:26:35 +0100
commit92d607e8349d0f1268b236b3bf4cb433179253f1 (patch)
tree6230e827557f7cd76ac792d43f4cc6a81be3b272 /src/VBox/Devices/Samples
parent541f51c4dab24f1decc1cb44888af9d45d619338 (diff)
downloadvirtualbox-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.kmk40
-rw-r--r--src/VBox/Devices/Samples/VBoxSampleDevice.cpp166
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);
+}
+