#ifndef _IOKIT_IOPCIBRIDGE_H
#define _IOKIT_IOPCIBRIDGE_H
#include <IOKit/IOService.h>
#include <IOKit/IODeviceMemory.h>
#include <IOKit/pci/IOAGPDevice.h>
class IOPCIBridge : public IOService
{
friend class IOPCIDevice;
OSDeclareAbstractStructors(IOPCIBridge)
private:
IORegistryEntry * findMatching( OSIterator * in, IOPCIAddressSpace space );
void publishNubs( OSIterator * kids, UInt32 index );
virtual bool isDTNub( IOPCIDevice * nub );
static void nvLocation( IORegistryEntry * entry,
UInt8 * busNum, UInt8 * deviceNum, UInt8 * functionNum );
protected:
IORangeAllocator * bridgeMemoryRanges;
IORangeAllocator * bridgeIORanges;
struct ExpansionData { };
ExpansionData *reserved;
protected:
virtual void probeBus( IOService * provider, UInt8 busNum );
virtual UInt8 firstBusNum( void );
virtual UInt8 lastBusNum( void );
virtual void spaceFromProperties( OSDictionary * propTable,
IOPCIAddressSpace * space );
virtual OSDictionary * constructProperties( IOPCIAddressSpace space );
virtual IOPCIDevice * createNub( OSDictionary * from );
virtual bool initializeNub( IOPCIDevice * nub, OSDictionary * from );
virtual bool publishNub( IOPCIDevice * nub, UInt32 index );
virtual bool addBridgeMemoryRange( IOPhysicalAddress start,
IOPhysicalLength length, bool host );
virtual bool addBridgeIORange( IOByteCount start, IOByteCount length );
virtual bool constructRange( IOPCIAddressSpace * flags,
IOPhysicalAddress phys, IOPhysicalLength len,
OSArray * array );
virtual bool matchNubWithPropertyTable( IOService * nub,
OSDictionary * propertyTable,
SInt32 * score );
virtual bool compareNubName( const IOService * nub, OSString * name,
OSString ** matched = 0 ) const;
virtual bool pciMatchNub( IOPCIDevice * nub,
OSDictionary * table, SInt32 * score);
virtual bool matchKeys( IOPCIDevice * nub, const char * keys,
UInt32 defaultMask, UInt8 regNum );
virtual IOReturn getNubResources( IOService * nub );
virtual IOReturn getNubAddressing( IOPCIDevice * nub );
virtual IOReturn getDTNubAddressing( IOPCIDevice * nub );
public:
virtual bool start( IOService * provider );
virtual bool configure( IOService * provider );
virtual IODeviceMemory * ioDeviceMemory( void ) = 0;
virtual UInt32 configRead32( IOPCIAddressSpace space, UInt8 offset ) = 0;
virtual void configWrite32( IOPCIAddressSpace space,
UInt8 offset, UInt32 data ) = 0;
virtual UInt16 configRead16( IOPCIAddressSpace space, UInt8 offset ) = 0;
virtual void configWrite16( IOPCIAddressSpace space,
UInt8 offset, UInt16 data ) = 0;
virtual UInt8 configRead8( IOPCIAddressSpace space, UInt8 offset ) = 0;
virtual void configWrite8( IOPCIAddressSpace space,
UInt8 offset, UInt8 data ) = 0;
virtual IOPCIAddressSpace getBridgeSpace( void ) = 0;
virtual UInt32 findPCICapability( IOPCIAddressSpace space,
UInt8 capabilityID, UInt8 * offset = 0 );
virtual IOReturn setDevicePowerState( IOPCIDevice * device,
unsigned long whatToDo );
virtual IOReturn saveDeviceState( IOPCIDevice * device,
IOOptionBits options = 0 );
virtual IOReturn restoreDeviceState( IOPCIDevice * device,
IOOptionBits options = 0 );
virtual IOReturn createAGPSpace( IOAGPDevice * master,
IOOptionBits options,
IOPhysicalAddress * address,
IOPhysicalLength * length );
virtual IOReturn destroyAGPSpace( IOAGPDevice * master );
virtual IORangeAllocator * getAGPRangeAllocator( IOAGPDevice * master );
virtual IOOptionBits getAGPStatus( IOAGPDevice * master,
IOOptionBits options = 0 );
virtual IOReturn resetAGPDevice( IOAGPDevice * master,
IOOptionBits options = 0 );
virtual IOReturn getAGPSpace( IOAGPDevice * master,
IOPhysicalAddress * address,
IOPhysicalLength * length );
virtual IOReturn commitAGPMemory( IOAGPDevice * master,
IOMemoryDescriptor * memory,
IOByteCount agpOffset,
IOOptionBits options );
virtual IOReturn releaseAGPMemory( IOAGPDevice * master,
IOMemoryDescriptor * memory,
IOByteCount agpOffset,
IOOptionBits options );
OSMetaClassDeclareReservedUnused(IOPCIBridge, 0);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 1);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 2);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 3);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 4);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 5);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 6);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 7);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 8);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 9);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 10);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 11);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 12);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 13);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 14);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 15);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 16);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 17);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 18);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 19);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 20);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 21);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 22);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 23);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 24);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 25);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 26);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 27);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 28);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 29);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 30);
OSMetaClassDeclareReservedUnused(IOPCIBridge, 31);
};
#define kIOPCIBridgeRegs (32)
class IOPCI2PCIBridge : public IOPCIBridge
{
OSDeclareDefaultStructors(IOPCI2PCIBridge)
private:
IOPCIDevice * bridgeDevice;
UInt32 bridgeState[kIOPCIBridgeRegs];
protected:
struct ExpansionData { };
ExpansionData *reserved;
virtual UInt8 firstBusNum( void );
virtual UInt8 lastBusNum( void );
public:
virtual IOService * probe( IOService * provider,
SInt32 * score );
virtual bool configure( IOService * provider );
virtual void saveBridgeState( void );
virtual void restoreBridgeState( void );
virtual bool publishNub( IOPCIDevice * nub, UInt32 index );
virtual IODeviceMemory * ioDeviceMemory( void );
virtual IOPCIAddressSpace getBridgeSpace( void );
virtual UInt32 configRead32( IOPCIAddressSpace space, UInt8 offset );
virtual void configWrite32( IOPCIAddressSpace space,
UInt8 offset, UInt32 data );
virtual UInt16 configRead16( IOPCIAddressSpace space, UInt8 offset );
virtual void configWrite16( IOPCIAddressSpace space,
UInt8 offset, UInt16 data );
virtual UInt8 configRead8( IOPCIAddressSpace space, UInt8 offset );
virtual void configWrite8( IOPCIAddressSpace space,
UInt8 offset, UInt8 data );
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 0);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 1);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 2);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 3);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 4);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 5);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 6);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 7);
OSMetaClassDeclareReservedUnused(IOPCI2PCIBridge, 8);
};
#endif