PDMInternal.h revision 58dbb1ccf94a9a7661acd2e9d7705f42011d98b3
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM - Internal header file.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * available from http://www.virtualbox.org. This file is free software;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * General Public License (GPL) as published by the Free Software
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync * additional information or have any questions.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** @defgroup grp_pdm_int Internal
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * @ingroup grp_pdm
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * @internal
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/*******************************************************************************
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync* Structures and Typedefs *
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync*******************************************************************************/
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a PDM Device. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a pointer to a PDM Device. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a PDM USB Device. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a pointer to a PDM USB Device. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a PDM Driver. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a pointer to a PDM Driver. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a PDM Logical Unit. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a pointer to a PDM Logical Unit. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a PDM PCI Bus instance. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a DMAC instance. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to a RTC instance. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Pointer to an USB HUB registration record. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Private device instance data.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMDEVINSINT
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next instance (HC Ptr).
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * (Head is pointed to by PDM::pDevInstances.) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next per device instance (HC Ptr).
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * (Head is pointed to by PDMDEV::pInstances.) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to device structure - HC Ptr. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the list of logical units associated with the device. (FIFO) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Configuration handle to the instance node. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R3 pointer to the VM this instance was created for. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R3 pointer to associated PCI device structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R3 pointer to associated PCI bus structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R0 pointer to the VM this instance was created for. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R0 pointer to associated PCI device structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R0 pointer to associated PCI bus structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Alignment padding. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** RC pointer to the VM this instance was created for. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** RC pointer to associated PCI device structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** RC pointer to associated PCI bus structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Alignment padding. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Private USB device instance data.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMUSBINSINT
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The UUID of this instance. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next instance.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * (Head is pointed to by PDM::pUsbInstances.) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next per USB device instance.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * (Head is pointed to by PDMUSB::pInstances.) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to device structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the VM this instance was created for. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the list of logical units associated with the device. (FIFO) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The per instance device configuration. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Same as pCfg if the configuration should be deleted when detaching the device. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The global device configuration. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the USB hub this device is attached to.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This is NULL if the device isn't connected to any HUB. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The port number that we're connected to. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Private driver instance data.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMDRVINSINT
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the driver instance above.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This is NULL for the topmost drive. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the driver instance below.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This is NULL for the bottommost driver. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the logical unit this driver chained on. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to driver structure from which this was instantiated. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the VM this instance was created for. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Flag indicating that the driver is being detached and destroyed.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * (Helps detect potential recursive detaching.) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Configuration handle to the instance node. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Private critical section data.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The critical section core which is shared with IPRT. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next critical section.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This chain is used for relocating pVMRC and device cleanup. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Owner identifier.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This is pDevIns if the owner is a device. Similarily for a driver or service.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDMR3CritSectInit() sets this to point to the critsect itself. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the VM - R3Ptr. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the VM - R0Ptr. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the VM - GCPtr. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Event semaphore that is scheduled to be signaled upon leaving the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * critical section. This is Ring-3 only of course. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R0/RC lock contention. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R0/RC unlock contention. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** R3 lock contention. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Profiling the time the section is locked. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef enum
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The usual invalid entry. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Device type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** USB Device type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Driver type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Internal type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** External type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The usual 32-bit hack. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The internal structure for the thread.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMTHREADINT
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The VM pointer. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The event semaphore the thread blocks on when not running. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The event semaphore the thread sleeps on while running. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next thread. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/* Must be included after PDMDEVINSINT is defined. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync# error "Invalid header PDM order. Include PDMInternal.h before VBox/pdm.h!"
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM Logical Unit.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This typically the representation of a physical port on a
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * device, like for instance the PS/2 keyboard port on the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * keyboard controller device. The LUNs are chained on the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * device the belong to (PDMDEVINSINT::pLunsR3).
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMLUN
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The LUN - The Logical Unit Number. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next LUN. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the top driver in the driver chain. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the bottom driver in the driver chain. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the device instance which the LUN belongs to.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Either this is set or pUsbIns is set. Both is never set at the same time. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the USB device instance which the LUN belongs to. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the device base interface. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Description of this LUN. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync const char *pszDesc;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM Device.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMDEV
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next device (R3 Ptr). */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Device name length. (search optimization) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Registration structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Number of instances. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to chain of instances (R3 Ptr). */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM USB Device.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMUSB
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next device (R3 Ptr). */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Device name length. (search optimization) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Registration structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Next instance number. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to chain of instances (R3 Ptr). */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM Driver.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMDRV
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the next device. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Registration structure. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Number of instances. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM registered PIC device.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMPIC
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the PIC device instance - R3. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMPICREG::pfnSetIrqR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(void, pfnSetIrqR3,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMPICREG::pfnGetInterruptR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(int, pfnGetInterruptR3,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the PIC device instance - R0. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMPICREG::pfnSetIrqR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR0CALLBACKMEMBER(void, pfnSetIrqR0,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMPICREG::pfnGetInterruptR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR0CALLBACKMEMBER(int, pfnGetInterruptR0,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the PIC device instance - RC. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMPICREG::pfnSetIrqR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLRCCALLBACKMEMBER(void, pfnSetIrqRC,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMPICREG::pfnGetInterruptR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLRCCALLBACKMEMBER(int, pfnGetInterruptRC,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Alignment padding. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * PDM registered APIC device.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct PDMAPIC
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Pointer to the APIC device instance - R3 Ptr. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnGetInterruptR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(int, pfnGetInterruptR3,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnHasPendingIrqR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(bool, pfnHasPendingIrqR3,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnSetBaseR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(void, pfnSetBaseR3,(PPDMDEVINS pDevIns, uint64_t u64Base));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnGetBaseR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(uint64_t, pfnGetBaseR3,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnSetTPRR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(void, pfnSetTPRR3,(PPDMDEVINS pDevIns, uint8_t u8TPR));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnGetTPRR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(uint8_t, pfnGetTPRR3,(PPDMDEVINS pDevIns));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnWriteMSRR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(uint32_t, pfnWriteMSRR3, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnReadMSRR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(uint32_t, pfnReadMSRR3, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @copydoc PDMAPICREG::pfnBusDeliverR3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync DECLR3CALLBACKMEMBER(void, pfnBusDeliverR3,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
DECLR0CALLBACKMEMBER(uint32_t, pfnWriteMSRR0, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value));
DECLR0CALLBACKMEMBER(uint32_t, pfnReadMSRR0, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value));
DECLR0CALLBACKMEMBER(void, pfnBusDeliverR0,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
DECLRCCALLBACKMEMBER(uint32_t, pfnWriteMSRRC, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t u64Value));
DECLRCCALLBACKMEMBER(uint32_t, pfnReadMSRRC, (PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t u32Reg, uint64_t *pu64Value));
DECLRCCALLBACKMEMBER(void, pfnBusDeliverRC,(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode,
} PDMAPIC;
typedef struct PDMIOAPIC
} PDMIOAPIC;
typedef struct PDMPCIBUS
DECLR3CALLBACKMEMBER(void, pfnSetIrqR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel));
DECLR3CALLBACKMEMBER(int, pfnRegisterR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, const char *pszName, int iDev));
DECLR3CALLBACKMEMBER(int, pfnIORegionRegisterR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iRegion, uint32_t cbRegion,
DECLR3CALLBACKMEMBER(void, pfnSetConfigCallbacksR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, PFNPCICONFIGREAD pfnRead,
DECLR3CALLBACKMEMBER(int, pfnSaveExecR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, PSSMHANDLE pSSMHandle));
DECLR3CALLBACKMEMBER(int, pfnLoadExecR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, PSSMHANDLE pSSMHandle));
DECLR0CALLBACKMEMBER(void, pfnSetIrqR0,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel));
DECLRCCALLBACKMEMBER(void, pfnSetIrqRC,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel));
} PDMPCIBUS;
#ifdef IN_RING3
typedef struct PDMDMAC
} PDMDMAC;
typedef struct PDMRTC
} PDMRTC;
typedef enum PDMMODTYPE
} PDMMODTYPE;
typedef struct PDMMOD
void *pvBits;
} PDMMOD;
typedef enum PDMQUEUETYPE
} PDMQUEUETYPE;
typedef struct PDMQUEUE
} Dev;
} Drv;
} Int;
} Ext;
struct PDMQUEUEFREEITEM
} PDMQUEUE;
typedef enum PDMDEVHLPTASKOP
typedef struct PDMDEVHLPTASK
union PDMDEVHLPTASKPARAMS
struct PDMDEVHLPTASKSETIRQ
int iIrq;
int iLevel;
} SetIRQ;
typedef struct PDMUSBHUB
} PDMUSBHUB;
typedef struct PDM
} PDM;
typedef struct PDMUSERPERVM
} PDMUSERPERVM;
#ifdef IN_RING3
#ifdef VBOX_STRICT
#ifdef IN_RING3
int pdmR3CritSectInitDevice(PVM pVM, PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect, const char *pszName);
int pdmR3DevFindLun(PVM pVM, const char *pszDevice, unsigned iInstance, unsigned iLun, PPDMLUN *ppLun);
int pdmR3UsbFindLun(PVM pVM, const char *pszDevice, unsigned iInstance, unsigned iLun, PPDMLUN *ppLun);
int pdmR3UsbRegisterHub(PVM pVM, PPDMDRVINS pDrvIns, uint32_t fVersions, uint32_t cPorts, PCPDMUSBHUBREG pUsbHubReg, PPCPDMUSBHUBHLP ppUsbHubHlp);
int pdmR3ThreadCreateDevice(PVM pVM, PPDMDEVINS pDevIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADDEV pfnThread,
int pdmR3ThreadCreateUsb(PVM pVM, PPDMDRVINS pUsbIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADUSB pfnThread,
int pdmR3ThreadCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADDRV pfnThread,