|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: /* ! 25: * Copyright (c) 1997 Apple Computer, Inc. ! 26: * ! 27: * ! 28: * HISTORY ! 29: * ! 30: * Simon Douglas 22 Oct 97 ! 31: * - first checked in. ! 32: */ ! 33: ! 34: ! 35: ! 36: #define KERNEL_PRIVATE 1 ! 37: ! 38: #import <objc/List.h> ! 39: ! 40: #import <driverkit/KernDeviceDescription.h> ! 41: #import <driverkit/ppc/PPCKernBus.h> ! 42: ! 43: #import <driverkit/ppc/IOPPCDeviceDescription.h> ! 44: #import <driverkit/ppc/IOPPCDeviceDescriptionPriv.h> ! 45: #import <driverkit/IODeviceDescriptionPrivate.h> ! 46: #import <driverkit/ppc/directDevice.h> ! 47: ! 48: #import <machdep/ppc/DeviceTree.h> ! 49: #import <machdep/ppc/proc_reg.h> ! 50: #import "IOMacRiscPCI.h" ! 51: ! 52: ! 53: struct _pciprivate { ! 54: ! 55: IOMacRiscPCIBridge *parent; ! 56: }; ! 57: ! 58: ! 59: @implementation IOPCIDevice ! 60: ! 61: - initAt:(IOPropertyTable *)propTable parent:_parent ref:ref ! 62: { ! 63: struct _pciprivate *private; ! 64: ! 65: _dtpciprivate = (void *)IOMalloc(sizeof (struct _pciprivate)); ! 66: bzero(_dtpciprivate, sizeof (struct _pciprivate)); ! 67: ! 68: private = _dtpciprivate; ! 69: private->parent = (IOMacRiscPCIBridge *) _parent; ! 70: ! 71: return( [super initAt:propTable parent:_parent ref:ref]); ! 72: } ! 73: ! 74: - (IOReturn) resolveAddressing ! 75: { ! 76: IOReturn err; ! 77: UInt32 * cells; ! 78: UInt32 myCells; ! 79: UInt32 propSize; ! 80: ! 81: myCells = [self addressCells] + [self sizeCells]; // or, 5 ! 82: ! 83: // Same as IODeviceTree, except "reg" is "assigned-addresses" ! 84: err = [[self propertyTable] getProperty:"assigned-addresses" flags:kReferenceProperty ! 85: value:(void **) &cells length:&propSize]; ! 86: if( err == noErr) { ! 87: err = [self findMemoryApertures:cells num:(propSize / (4 * myCells))]; ! 88: } else ! 89: err = noErr; ! 90: ! 91: return( err); ! 92: } ! 93: ! 94: - (IOReturn) resolveInterrupts ! 95: { ! 96: IOReturn err; ! 97: IOPropertyTable * propTable = [self propertyTable]; ! 98: ByteCount propSize; ! 99: ! 100: [propTable createProperty:"AAPL,dk_Share IRQ Levels" flags:0 ! 101: value:"YES" length:4]; ! 102: ! 103: err = [super resolveInterrupts]; ! 104: ! 105: if( err && (noErr == [propTable getProperty:"interrupts" flags:kReferenceProperty ! 106: value:NULL length:&propSize])) { ! 107: // inherit & share parent's ! 108: IODeviceDescription * bridge; ! 109: ! 110: bridge = [[self parent] deviceDescription]; ! 111: if( bridge) { ! 112: err = [self setInterruptList:[bridge interruptList] num:[bridge numInterrupts]]; ! 113: } ! 114: ! 115: } else ! 116: err = noErr; ! 117: ! 118: return( err); ! 119: } ! 120: ! 121: - getResources ! 122: { ! 123: [super getResources]; ! 124: ! 125: [[self parent] getSlotName:self index:deviceNum]; ! 126: ! 127: return( self); ! 128: } ! 129: ! 130: - (IOReturn) configReadLong:(UInt32)offset value:(UInt32 *)value ! 131: { ! 132: return( [[self parent] configReadLong:self offset:offset value:value] ); ! 133: } ! 134: ! 135: - (IOReturn) configWriteLong:(UInt32)offset value:(UInt32)value ! 136: { ! 137: return( [[self parent] configWriteLong:self offset:offset value:value] ); ! 138: } ! 139: ! 140: - (LogicalAddress) getIOAperture ! 141: { ! 142: return( [[self parent] getIOAperture] ); ! 143: } ! 144: ! 145: - getLocation:(UInt8 *)bus device:(UInt8 *)device function:(UInt8 *)function ! 146: { ! 147: *bus = busNum; ! 148: *device = deviceNum; ! 149: *function = functionNum; ! 150: return( self); ! 151: } ! 152: ! 153: ! 154: - property_IODeviceType:(char *)types length:(unsigned int *)maxLen ! 155: { ! 156: [super property_IODeviceType:types length:maxLen]; ! 157: strcat( types, " "IOTypePCI); ! 158: return( self); ! 159: } ! 160: ! 161: @end ! 162: ! 163:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.