VirtualBox

source: vbox/trunk/src/VBox/Devices/Samples/VBoxSampleDevice.cpp@ 26169

Last change on this file since 26169 was 26169, checked in by vboxsync, 15 years ago

PDM: s/pDevHlp\(|R0|R3|RC\)/pHlp\1/g - PDMDEVINS.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.8 KB
Line 
1/* $Id: VBoxSampleDevice.cpp 26169 2010-02-02 20:19:15Z vboxsync $ */
2/** @file
3 * VBox Sample Device.
4 */
5
6/*
7 * Copyright (C) 2009 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22
23/*******************************************************************************
24* Header Files *
25*******************************************************************************/
26#define LOG_GROUP LOG_GROUP_MISC
27#include <VBox/pdmdev.h>
28#include <VBox/version.h>
29#include <VBox/err.h>
30#include <VBox/log.h>
31
32#include <iprt/assert.h>
33
34
35/*******************************************************************************
36* Structures and Typedefs *
37*******************************************************************************/
38/**
39 * Device Instance Data.
40 */
41typedef struct VBOXSAMPLEDEVICE
42{
43 uint32_t Whatever;
44} VBOXSAMPLEDEVICE;
45typedef VBOXSAMPLEDEVICE *PVBOXSAMPLEDEVICE;
46
47
48
49
50 FNPDMDEVCONSTRUCT pfnConstruct;
51 /** Destruct instance - optional. */
52 FNPDMDEVDESTRUCT pfnDestruct;
53
54static DECLCALLBACK(int) devSampleDestruct(PPDMDEVINS pDevIns)
55{
56 /*
57 * Check the versions here as well since the destructor is *always* called.
58 */
59 AssertMsgReturn(pDevIns->u32Version == PDM_DEVINS_VERSION, ("%#x, expected %#x\n", pDevIns->u32Version, PDM_DEVINS_VERSION), VERR_VERSION_MISMATCH);
60 AssertMsgReturn(pDevIns->pHlpR3->u32Version == PDM_DEVHLPR3_VERSION, ("%#x, expected %#x\n", pDevIns->pHlpR3->u32Version, PDM_DEVHLPR3_VERSION), VERR_VERSION_MISMATCH);
61
62 return VINF_SUCCESS;
63}
64
65
66static DECLCALLBACK(int) devSampleConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfgHandle)
67{
68 /*
69 * Check that the device instance and device helper structures are compatible.
70 */
71 AssertLogRelMsgReturn(pDevIns->u32Version == PDM_DEVINS_VERSION, ("%#x, expected %#x\n", pDevIns->u32Version, PDM_DEVINS_VERSION), VERR_VERSION_MISMATCH);
72 AssertLogRelMsgReturn(pDevIns->pHlpR3->u32Version == PDM_DEVHLPR3_VERSION, ("%#x, expected %#x\n", pDevIns->pHlpR3->u32Version, PDM_DEVHLPR3_VERSION), VERR_VERSION_MISMATCH);
73
74 /*
75 * Initialize the instance data so that the destructure won't mess up.
76 */
77 PVBOXSAMPLEDEVICE pThis = PDMINS_2_DATA(pDevIns, PVBOXSAMPLEDEVICE);
78 pThis->Whatever = 0;
79
80 /*
81 * Validate and read the configuration.
82 */
83 if (!CFGMR3AreValuesValid(pCfgHandle,
84 "Whatever1\0"
85 "Whatever2\0"))
86 return VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES;
87
88
89 return VINF_SUCCESS;
90}
91
92
93/**
94 * The device registration structure.
95 */
96static const PDMDEVREG g_DeviceSample =
97{
98 /* u32Version */
99 PDM_DEVREG_VERSION,
100 /* szName */
101 "sample",
102 /* szRCMod */
103 "",
104 /* szR0Mod */
105 "",
106 /* pszDescription */
107 "VBox Sample Device.",
108 /* fFlags */
109 PDM_DEVREG_FLAGS_DEFAULT_BITS,
110 /* fClass */
111 PDM_DEVREG_CLASS_MISC,
112 /* cMaxInstances */
113 1,
114 /* cbInstance */
115 sizeof(VBOXSAMPLEDEVICE),
116 /* pfnConstruct */
117 devSampleConstruct,
118 /* pfnDestruct */
119 devSampleDestruct,
120 /* pfnRelocate */
121 NULL,
122 /* pfnIOCtl */
123 NULL,
124 /* pfnPowerOn */
125 NULL,
126 /* pfnReset */
127 NULL,
128 /* pfnSuspend */
129 NULL,
130 /* pfnResume */
131 NULL,
132 /* pfnAttach */
133 NULL,
134 /* pfnDetach */
135 NULL,
136 /* pfnQueryInterface */
137 NULL,
138 /* pfnInitComplete */
139 NULL,
140 /* pfnPowerOff */
141 NULL,
142 /* pfnSoftReset */
143 NULL,
144 /* u32VersionEnd */
145 PDM_DEVREG_VERSION
146};
147
148
149/**
150 * Register builtin devices.
151 *
152 * @returns VBox status code.
153 * @param pCallbacks Pointer to the callback table.
154 * @param u32Version VBox version number.
155 */
156extern "C" DECLEXPORT(int) VBoxDevicesRegister(PPDMDEVREGCB pCallbacks, uint32_t u32Version)
157{
158 LogFlow(("VBoxSampleDevice::VBoxDevicesRegister: u32Version=%#x pCallbacks->u32Version=%#x\n", u32Version, pCallbacks->u32Version));
159
160 AssertLogRelMsgReturn(pCallbacks->u32Version == PDM_DEVREG_CB_VERSION,
161 ("%#x, expected %#x\n", pCallbacks->u32Version, PDM_DEVREG_CB_VERSION),
162 VERR_VERSION_MISMATCH);
163
164 return pCallbacks->pfnRegister(pCallbacks, &g_DeviceSample);
165}
166
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette