PCIInternal.h revision d91fdc7bce3c48308e9dfc26fc582f8ba5f60f06
/* $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.
* -1 means not mapped. Memory addresses are relative to pci_mem_base. */
/** 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 fun 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. */
};
/**
* 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
/** Read config callback. */
/** Write config callback. */
/* Flags of this PCI device, see PCIDEV_FLAG_ constants */
/** Current state of the IRQ pin of the device. */
/** 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