PCIInternal.h revision 464697bd4c58e78f3b3eecc1d51904482bae27f8
/* $Id$ */
/** @file
* DevPCI - PCI Internal header - Only for hiding bits of PCIDEVICE.
*/
/*
* Copyright (C) 2006-2007 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* 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.
*/
#ifndef __PCIInternal_h__
#define __PCIInternal_h__
/**
* PCI I/O region.
*/
typedef struct PCIIOREGION
{
/** Current PCI mapping address, 0xffffffff means not mapped. */
/** Callback called when the region is mapped. */
/** Pointer to PCI I/O region. */
typedef PCIIOREGION *PPCIIOREGION;
/**
* Callback function for reading from the PCI configuration space.
*
* @returns The register value.
* @param pDevIns Pointer to the device instance of the PCI bus.
* @param iBus The bus number this device is on.
* @param iDevice The number of the device on the bus.
* @param Address The configuration space register address. [0..255]
* @param cb The register size. [1,2,4]
*/
typedef DECLCALLBACK(uint32_t) FNPCIBRIDGECONFIGREAD(PPDMDEVINSR3 pDevIns, uint8_t iBus, uint8_t iDevice, uint32_t u32Address, unsigned cb);
/** Pointer to a FNPCICONFIGREAD() function. */
typedef FNPCIBRIDGECONFIGREAD *PFNPCIBRIDGECONFIGREAD;
/** Pointer to a PFNPCICONFIGREAD. */
/**
* Callback function for writing to the PCI configuration space.
*
* @param pDevIns Pointer to the device instance of the PCI bus.
* @param iBus The bus number this device is on.
* @param iDevice The number of the device on the bus.
* @param Address The configuration space register address. [0..255]
* @param u32Value The value that's being written. The number of bits actually used from
* this value is determined by the cb parameter.
* @param cb The register size. [1,2,4]
*/
typedef DECLCALLBACK(void) FNPCIBRIDGECONFIGWRITE(PPDMDEVINSR3 pDevIns, uint8_t iBus, uint8_t iDevice, uint32_t u32Address, uint32_t u32Value, unsigned cb);
/** Pointer to a FNPCICONFIGWRITE() function. */
/** Pointer to a PFNPCICONFIGWRITE. */
/* Forward declaration */
struct PCIBus;
enum {
/** Set if the specific device function was requested by PDM.
* If clear the device and it's functions can be relocated to satisfy the slot request of another device. */
PCIDEV_FLAG_REQUESTED_DEVFUNC = 1<<0,
/** Flag whether the device is a pci-to-pci bridge.
* This is set prior to device registration. */
/** Flag whether the device is a PCI Express device.
* This is set prior to device registration. */
/** Flag whether the device is capable of MSI.
* This one is set by MsiInit(). */
/** Flag whether the device is capable of MSI-X.
* This one is set by MsixInit(). */
/** Flag if device represents real physical device in passthrough mode. */
};
/**
* PCI Device - Internal data.
*/
typedef struct PCIDEVICEINT
{
/** I/O regions. */
/** Pointer to the PCI bus of the device. (R3 ptr) */
/** Pointer to the PCI bus of the device. (R0 ptr) */
/** Pointer to the PCI bus of the device. (RC ptr) */
#if HC_ARCH_BITS == 64
#endif
/** Page used for MSI-X state. (R3 ptr) */
R3PTRTYPE(void*) pMsixPageR3;
/** Page used for MSI-X state. (R0 ptr) */
R0PTRTYPE(void*) pMsixPageR0;
/** Page used for MSI-X state. (RC ptr) */
RCPTRTYPE(void*) pMsixPageRC;
#if HC_ARCH_BITS == 64
#endif
/** Read config callback. */
/** Write config callback. */
/** Flags of this PCI device, see PCIDEV_FLAG_XXX constants. */
/** Current state of the IRQ pin of the device. */
/** Offset of MSI PCI capability in config space, or 0. */
/** Size of MSI PCI capability in config space, or 0. */
/** Offset of MSI-X PCI capability in config space, or 0. */
/** Size of MSI-X PCI capability in config space, or 0. */
/** Pointer to bus specific data. (R3 ptr) */
R3PTRTYPE(const void*) pPciBusPtrR3;
/** Read config callback for PCI bridges to pass requests
* to devices on another bus.
*/
/** Write config callback for PCI bridges to pass requests
* to devices on another bus.
*/
} PCIDEVICEINT;
/** Indicate that PCIDEVICE::Int.s can be declared. */
#define PCIDEVICEINT_DECLARED
#endif