Builtins.cpp revision 801238b286a80a5dd67ba56a1f26c0bc98a2a1ea
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/* $Id$ */
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/** @file
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Built-in drivers & devices (part 1)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto */
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/*
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Copyright (C) 2006-2008 Sun Microsystems, Inc.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * This file is part of VirtualBox Open Source Edition (OSE), as
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * available from http://www.virtualbox.org. This file is free software;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * you can redistribute it and/or modify it under the terms of the GNU
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * General Public License (GPL) as published by the Free Software
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Foundation, in version 2 as it comes in the "COPYING" file of the
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Clara, CA 95054 USA or visit http://www.sun.com if you need
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * additional information or have any questions.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto */
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
f4e76ddf09a338dc23da0904866290ac36274a5bNattuvetty Bhavyan
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/*******************************************************************************
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto* Header Files *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto*******************************************************************************/
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#define LOG_GROUP LOG_GROUP_DEV
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#include <VBox/pdm.h>
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#include <VBox/version.h>
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#include <VBox/err.h>
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#include <VBox/usb.h>
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan#include <VBox/log.h>
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan#include <iprt/assert.h>
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan#include "Builtins.h"
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan
4558d122136f151d62acbbc02ddb42df89a5ef66Viswanathan Kannappan/*******************************************************************************
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto* Global Variables *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto*******************************************************************************/
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szetoconst void *g_apvVBoxDDDependencies[] =
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto{
450396635f70344c58b6b1e4db38cf17ff34445cJohn Forte#ifdef VBOX_WITH_EFI
f4e76ddf09a338dc23da0904866290ac36274a5bNattuvetty Bhavyan &g_abEfiThunkBinary[0],
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto NULL,
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto};
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/**
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan * Register builtin devices.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @returns VBox status code.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @param pCallbacks Pointer to the callback table.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @param u32Version VBox version number.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto */
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szetoextern "C" DECLEXPORT(int) VBoxDevicesRegister(PPDMDEVREGCB pCallbacks, uint32_t u32Version)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto{
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto LogFlow(("VBoxDevicesRegister: u32Version=%#x\n", u32Version));
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto AssertReleaseMsg(u32Version == VBOX_VERSION, ("u32Version=%#x VBOX_VERSION=%#x\n", u32Version, VBOX_VERSION));
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan int rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePCI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePcArch);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePcBios);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePS2KeyboardMouse);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePIIX3IDE);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceI8254);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceI8259);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_HPET
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceHPET);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_SMC
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceSMC);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_LPC
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceLPC);
70c284ca5360ed73476d9e94223d4905dd80b1adPeter Cudhea - Sun Microsystems - Burlington, MA United States if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_EFI
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEFI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceMC146818);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceVga);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceVMMDev);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePCNet);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_E1000
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceE1000);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_INIP
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceINIP);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceICHAC97);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceSB16);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceAudioSniffer);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_USB
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceOHCI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_EHCI
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_ACPI
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceDMA);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceFloppyController);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceSerialPort);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceParallelPort);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_AHCI
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceAHCI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_BUSLOGIC
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceBusLogic);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePCIBridge);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_LSILOGIC
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceLsiLogicSCSI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (VBOX_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return VINF_SUCCESS;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto}
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/**
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Register builtin drivers.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @returns VBox status code.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @param pCallbacks Pointer to the callback table.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @param u32Version VBox version number.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto */
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szetoextern "C" DECLEXPORT(int) VBoxDriversRegister(PCPDMDRVREGCB pCallbacks, uint32_t u32Version)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto{
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto LogFlow(("VBoxDriversRegister: u32Version=%#x\n", u32Version));
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto AssertReleaseMsg(u32Version == VBOX_VERSION, ("u32Version=%#x VBOX_VERSION=%#x\n", u32Version, VBOX_VERSION));
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto int rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvMouseQueue);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvKeyboardQueue);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvBlock);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvVD);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvHostDVD);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if defined(RT_OS_LINUX) || defined(RT_OS_WINDOWS)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvHostFloppy);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvMediaISO);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvRawImage);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifndef RT_OS_L4
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvNAT);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if defined(RT_OS_LINUX)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvHostInterface);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvIntNet);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvNetSniffer);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvAUDIO);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvACPI);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_USB
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvVUSBRootHub);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if !defined(RT_OS_L4)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvNamedPipe);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvRawFile);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvChar);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if defined(RT_OS_LINUX)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvHostParallel);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvHostSerial);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#if defined(VBOX_WITH_PDM_ASYNC_COMPLETION)
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvRawImageAsync);
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan if (RT_FAILURE(rc))
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan return rc;
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvTransportAsync);
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan if (RT_FAILURE(rc))
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan return rc;
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan#endif
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan#ifdef VBOX_WITH_SCSI
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvSCSI);
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan if (RT_FAILURE(rc))
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan return rc;
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan#if defined(RT_OS_LINUX)
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvSCSIHost);
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan if (RT_FAILURE(rc))
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan return rc;
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan#endif
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_FAULT_INJECTION
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvFaultInject);
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return VINF_SUCCESS;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan}
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#ifdef VBOX_WITH_USB
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto/**
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * Register builtin USB device.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto *
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @returns VBox status code.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @param pCallbacks Pointer to the callback table.
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto * @param u32Version VBox version number.
7145ae3ec9b6b40ec13b508a7bb1718ce67f4588Nattuvetty Bhavyan */
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szetoextern "C" DECLEXPORT(int) VBoxUsbRegister(PCPDMUSBREGCB pCallbacks, uint32_t u32Version)
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto{
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto int rc = pCallbacks->pfnRegister(pCallbacks, &g_UsbDevProxy);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (RT_FAILURE(rc))
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return rc;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto return VINF_SUCCESS;
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto}
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto#endif
8fe960854f0d52e2e8a80ba68e8621a5ac6a866dtim szeto