2  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   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. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  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. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  29  * Copyright (c) 1998 Apple Computer, Inc.  All rights reserved. 
  35 #ifndef _IOKIT_IODEVICETREE_H 
  36 #define _IOKIT_IODEVICETREE_H 
  38 #include <IOKit/IORegistryEntry.h> 
  39 #include <libkern/c++/OSData.h> 
  40 #include <libkern/c++/OSPtr.h> 
  45 extern const IORegistryPlane 
*  gIODTPlane
; 
  47 extern const OSSymbol 
*         gIODTPHandleKey
; 
  49 extern const OSSymbol 
*         gIODTCompatibleKey
; 
  50 extern const OSSymbol 
*         gIODTTypeKey
; 
  51 extern const OSSymbol 
*         gIODTModelKey
; 
  52 extern const OSSymbol 
*         gIODTBridgeModelKey
; 
  53 extern const OSSymbol 
*         gIODTTargetTypeKey
; 
  55 extern const OSSymbol 
*         gIODTAAPLInterruptsKey
; 
  56 extern const OSSymbol 
*         gIODTDefaultInterruptController
; 
  57 extern const OSSymbol 
*         gIODTNWInterruptMappingKey
; 
  59 LIBKERN_RETURNS_NOT_RETAINED IORegistryEntry 
* IODeviceTreeAlloc( void * dtTop 
); 
  62 bool IODTMatchNubWithKeys( IORegistryEntry 
* nub
, 
  65 bool IODTCompareNubName( const IORegistryEntry 
* regEntry
, 
  67     LIBKERN_RETURNS_RETAINED_ON_NONZERO OSString 
** matchingName 
); 
  68 bool IODTCompareNubName( const IORegistryEntry 
* regEntry
, 
  70     OSSharedPtr
<OSString
>& matchingName 
); 
  73         kIODTRecursive      
= 0x00000001, 
  74         kIODTExclusive      
= 0x00000002 
  77 OSCollectionIterator 
* IODTFindMatchingEntries( IORegistryEntry 
* from
, 
  78     IOOptionBits options
, const char * keys 
); 
  80 #if !defined(__arm64__) 
  81 typedef SInt32 (*IODTCompareAddressCellFunc
) 
  82 (UInt32 cellCount
, UInt32 left
[], UInt32 right
[]); 
  84 typedef SInt64 (*IODTCompareAddressCellFunc
) 
  85 (UInt32 cellCount
, UInt32 left
[], UInt32 right
[]); 
  88 typedef void (*IODTNVLocationFunc
) 
  89 (IORegistryEntry 
* entry
, 
  90     UInt8 
* busNum
, UInt8 
* deviceNum
, UInt8 
* functionNum 
); 
  92 void IODTSetResolving( IORegistryEntry 
*        regEntry
, 
  93     IODTCompareAddressCellFunc      compareFunc
, 
  94     IODTNVLocationFunc              locationFunc 
); 
  96 void IODTGetCellCounts( IORegistryEntry 
* regEntry
, 
  97     UInt32 
* sizeCount
, UInt32 
* addressCount
); 
  99 bool IODTResolveAddressCell( IORegistryEntry 
* regEntry
, 
 101     IOPhysicalAddress 
* phys
, IOPhysicalLength 
* len 
); 
 103 LIBKERN_RETURNS_NOT_RETAINED OSArray 
* 
 104 IODTResolveAddressing( IORegistryEntry 
* regEntry
, 
 105     const char * addressPropertyName
, 
 106     IODeviceMemory 
* parent 
); 
 108 struct IONVRAMDescriptor 
{ 
 109         unsigned int format
:4; 
 110         unsigned int marker
:1; 
 111         unsigned int bridgeCount
:3; 
 112         unsigned int busNum
:2; 
 113         unsigned int bridgeDevices
:6 * 5; 
 114         unsigned int functionNum
:3; 
 115         unsigned int deviceNum
:5; 
 116 } __attribute__((aligned(2), packed
)); 
 118 IOReturn 
IODTMakeNVDescriptor( IORegistryEntry 
* regEntry
, 
 119     IONVRAMDescriptor 
* hdr 
); 
 121 LIBKERN_RETURNS_NOT_RETAINED OSData 
* 
 122 IODTFindSlotName( IORegistryEntry 
* regEntry
, UInt32 deviceNumber 
); 
 124 const OSSymbol 
* IODTInterruptControllerName( 
 125         IORegistryEntry 
* regEntry 
); 
 127 bool IODTMapInterrupts( IORegistryEntry 
* regEntry 
); 
 130         kIODTInterruptShared 
= 0x00000001 
 132 IOReturn 
IODTGetInterruptOptions( IORegistryEntry 
* regEntry
, int source
, IOOptionBits 
* options 
); 
 138 IOReturn 
IONDRVLibrariesInitialize( IOService 
* provider 
); 
 144 #endif /* _IOKIT_IODEVICETREE_H */