1/* 2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29#ifndef _IOKIT_IOPCIDEVICE_H 30#define _IOKIT_IOPCIDEVICE_H 31 32#warning IOPCIDevice.h moved to IOPCIFamily project 33#warning IOPCIDevice.h will be removed from xnu; do not edit or add new usage 34 35#include <IOKit/IOService.h> 36 37union IOPCIAddressSpace { 38 UInt32 bits; 39 struct { 40#ifdef __BIG_ENDIAN__ 41 unsigned int reloc:1; 42 unsigned int prefetch:1; 43 unsigned int t:1; 44 unsigned int resv:3; 45 unsigned int space:2; 46 unsigned int busNum:8; 47 unsigned int deviceNum:5; 48 unsigned int functionNum:3; 49 unsigned int registerNum:8; 50#elif defined(__LITTLE_ENDIAN__) 51 unsigned int registerNum:8; 52 unsigned int functionNum:3; 53 unsigned int deviceNum:5; 54 unsigned int busNum:8; 55 unsigned int space:2; 56 unsigned int resv:3; 57 unsigned int t:1; 58 unsigned int prefetch:1; 59 unsigned int reloc:1; 60#endif 61 } s; 62}; 63 64class IOPCIBridge; 65class IOPCI2PCIBridge; 66 67class IOPCIDevice : public IOService 68{ 69 OSDeclareDefaultStructors(IOPCIDevice) 70 71 friend class IOPCIBridge; 72 friend class IOPCI2PCIBridge; 73 74protected: 75 IOPCIBridge * parent; 76 IOMemoryMap * ioMap; 77 OSObject * slotNameProperty; 78 79 struct ExpansionData { }; 80 81 ExpansionData *reserved; 82 83public: 84 IOPCIAddressSpace space; 85 UInt32 * savedConfig; 86 87public: 88 89 virtual bool attach( IOService * provider ); 90 virtual void detach( IOService * provider ); 91 virtual IOReturn setPowerState( unsigned long, IOService * ); 92 virtual bool compareName( OSString * name, OSString ** matched = 0 ) const; 93 virtual bool matchPropertyTable( OSDictionary * table, 94 SInt32 * score ); 95 virtual IOService * matchLocation( IOService * client ); 96 virtual IOReturn getResources( void ); 97 98 /* Config space accessors */ 99 100 virtual UInt32 configRead32( IOPCIAddressSpace space, UInt8 offset ); 101 virtual void configWrite32( IOPCIAddressSpace space, 102 UInt8 offset, UInt32 data ); 103 virtual UInt16 configRead16( IOPCIAddressSpace space, UInt8 offset ); 104 virtual void configWrite16( IOPCIAddressSpace space, 105 UInt8 offset, UInt16 data ); 106 virtual UInt8 configRead8( IOPCIAddressSpace space, UInt8 offset ); 107 virtual void configWrite8( IOPCIAddressSpace space, 108 UInt8 offset, UInt8 data ); 109 110 virtual UInt32 configRead32( UInt8 offset ); 111 virtual UInt16 configRead16( UInt8 offset ); 112 virtual UInt8 configRead8( UInt8 offset ); 113 virtual void configWrite32( UInt8 offset, UInt32 data ); 114 virtual void configWrite16( UInt8 offset, UInt16 data ); 115 virtual void configWrite8( UInt8 offset, UInt8 data ); 116 117 virtual IOReturn saveDeviceState( IOOptionBits options = 0 ); 118 virtual IOReturn restoreDeviceState( IOOptionBits options = 0 ); 119 virtual UInt32 setConfigBits( UInt8 offset, UInt32 mask, UInt32 value ); 120 121 virtual bool setMemoryEnable( bool enable ); 122 virtual bool setIOEnable( bool enable, bool exclusive = false ); 123 virtual bool setBusMasterEnable( bool enable ); 124 virtual UInt32 findPCICapability( UInt8 capabilityID, UInt8 * offset = 0 ); 125 virtual UInt8 getBusNumber( void ); 126 virtual UInt8 getDeviceNumber( void ); 127 virtual UInt8 getFunctionNumber( void ); 128 virtual IODeviceMemory * getDeviceMemoryWithRegister( UInt8 reg ); 129 virtual IOMemoryMap * mapDeviceMemoryWithRegister( UInt8 reg, 130 IOOptionBits options = 0 ); 131 virtual IODeviceMemory * ioDeviceMemory( void ); 132 virtual void ioWrite32( UInt16 offset, UInt32 value, 133 IOMemoryMap * map = 0 ); 134 virtual void ioWrite16( UInt16 offset, UInt16 value, 135 IOMemoryMap * map = 0 ); 136 virtual void ioWrite8( UInt16 offset, UInt8 value, 137 IOMemoryMap * map = 0 ); 138 virtual UInt32 ioRead32( UInt16 offset, IOMemoryMap * map = 0 ); 139 virtual UInt16 ioRead16( UInt16 offset, IOMemoryMap * map = 0 ); 140 virtual UInt8 ioRead8( UInt16 offset, IOMemoryMap * map = 0 ); 141 142 // Unused Padding 143 OSMetaClassDeclareReservedUnused(IOPCIDevice, 0); 144 OSMetaClassDeclareReservedUnused(IOPCIDevice, 1); 145 OSMetaClassDeclareReservedUnused(IOPCIDevice, 2); 146 OSMetaClassDeclareReservedUnused(IOPCIDevice, 3); 147 OSMetaClassDeclareReservedUnused(IOPCIDevice, 4); 148 OSMetaClassDeclareReservedUnused(IOPCIDevice, 5); 149 OSMetaClassDeclareReservedUnused(IOPCIDevice, 6); 150 OSMetaClassDeclareReservedUnused(IOPCIDevice, 7); 151 OSMetaClassDeclareReservedUnused(IOPCIDevice, 8); 152 OSMetaClassDeclareReservedUnused(IOPCIDevice, 9); 153 OSMetaClassDeclareReservedUnused(IOPCIDevice, 10); 154 OSMetaClassDeclareReservedUnused(IOPCIDevice, 11); 155 OSMetaClassDeclareReservedUnused(IOPCIDevice, 12); 156 OSMetaClassDeclareReservedUnused(IOPCIDevice, 13); 157 OSMetaClassDeclareReservedUnused(IOPCIDevice, 14); 158 OSMetaClassDeclareReservedUnused(IOPCIDevice, 15); 159}; 160 161#endif /* ! _IOKIT_IOPCIDEVICE_H */ 162