|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * ! 24: */ ! 25: ! 26: #include <IOKit/IODeviceTreeSupport.h> ! 27: #include <libkern/c++/OSContainers.h> ! 28: #include <IOKit/IOLib.h> ! 29: ! 30: #include <assert.h> ! 31: ! 32: ! 33: extern "C" { ! 34: extern int debug_container_malloc_size; ! 35: extern int debug_ivars_size; ! 36: } ! 37: ! 38: static void DumpTree( void ) ! 39: { ! 40: IORegistryEntry * next; ! 41: IORegistryEntry * packages = 0; ! 42: IORegistryEntry * deblocker = 0; ! 43: IORegistryEntry * keyboard = 0; ! 44: IORegistryIterator * iter; ! 45: OSOrderedSet * all; ! 46: ! 47: IOLog("ivars %08x, containers %08x\n", ! 48: debug_ivars_size, debug_container_malloc_size); ! 49: ! 50: iter = IORegistryIterator::iterateOver( gIODTPlane ); ! 51: assert( iter ); ! 52: ! 53: all = iter->iterateAll(); ! 54: IOLog("\nCount %d\n", all->getCount() ); ! 55: all->release(); ! 56: ! 57: iter->reset(); ! 58: while( (next = iter->nextEntryRecursive())) { ! 59: if( 0 == strcmp( "packages", next->getName())) ! 60: packages = next; ! 61: if( 0 == strcmp( "deblocker", next->getName())) ! 62: deblocker = next; ! 63: if( 0 == strcmp( "keyboard", next->getName())) ! 64: keyboard = next; ! 65: } ! 66: ! 67: if( deblocker && keyboard) ! 68: deblocker->attachToParent( keyboard, gIODTPlane); ! 69: ! 70: iter->reset(); ! 71: while( (next = iter->nextEntryRecursive())) { ! 72: IOLog("%s=%d,", next->getName(), next->getDepth( gIODTPlane )); ! 73: if( 0 == strcmp( "gc", next->getName())) { ! 74: packages = next; ! 75: } ! 76: } ! 77: ! 78: IOLog("ivars %08x, containers %08x\n", ! 79: debug_ivars_size, debug_container_malloc_size); ! 80: ! 81: if( packages) ! 82: packages->detachAll( gIODTPlane); ! 83: all = iter->iterateAll(); ! 84: IOLog("del gc/, count now %d\n", all->getCount() ); ! 85: all->release(); ! 86: ! 87: iter->release(); ! 88: ! 89: IOLog("ivars %08x, containers %08x\n", ! 90: debug_ivars_size, debug_container_malloc_size); ! 91: ! 92: } ! 93: ! 94: extern "C" { ! 95: void PathTests( void ) ! 96: { ! 97: const char * tests[] = { ! 98: "IODeviceTree:/bandit", ! 99: "IODeviceTree:/", ! 100: "IODeviceTree:/xxxx", ! 101: "IODeviceTree:/bandit/xxx", ! 102: "IODeviceTree:/bandit@F2000000", ! 103: "IODeviceTree:/bandit/gc", ! 104: "IODeviceTree:/bandit/gc/mace:17.202.42.95,\\mach_kernel", ! 105: "IODeviceTree:/bandit/@10/mesh", ! 106: "IODeviceTree:enet:17.202", ! 107: "IODeviceTree:scsi/@0:0", ! 108: "IODeviceTree:scsi-int", ! 109: "IODeviceTree:/bandit/gc@10/mesh", ! 110: "IODeviceTree:/bandit/gc/53c94/disk@0:6,mach_kernel", ! 111: "IOService:/", ! 112: "IOService:/ApplePlatformExpert", ! 113: "IOService:/ApplePlatformExpert/hammerhead@F8000000", ! 114: "IOService:/ApplePlatformExpert/bandit/AppleMacRiscPCI" ! 115: }; ! 116: ! 117: IORegistryEntry * entry; ! 118: char str[256]; ! 119: int len; ! 120: ! 121: for( unsigned int i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { ! 122: ! 123: len = sizeof( str ); ! 124: entry = IORegistryEntry::fromPath( tests[i], 0, str, &len ); ! 125: IOLog("\"%s\" ", tests[i] ); ! 126: if( entry) { ! 127: IOLog("found %s, tail = \"%s\"\n", entry->getName(), str ); ! 128: len = sizeof( str ); ! 129: if( entry->getPath( str, &len, ! 130: IORegistryEntry::getPlane("IODeviceTree"))) { ! 131: IOLog("path = \"%s\"\n", str); ! 132: } ! 133: entry->release(); ! 134: } else ! 135: IOLog("not found\n"); ! 136: } ! 137: } ! 138: } ! 139: ! 140: void TestsCpp( void * dtTop ) ! 141: { ! 142: IORegistryEntry * dt; ! 143: ! 144: IOLog("\nivars %08x, containers %08x\n", ! 145: debug_ivars_size, debug_container_malloc_size); ! 146: ! 147: OSMetaClass::printInstanceCounts(); ! 148: dt = IODeviceTreeAlloc( dtTop ); ! 149: assert( dt ); ! 150: ! 151: // OSMetaClass::printInstanceCounts(); ! 152: DumpTree(); ! 153: // OSMetaClass::printInstanceCounts(); ! 154: dt->detachAll( gIODTPlane); ! 155: OSMetaClass::printInstanceCounts(); ! 156: IOLog("ivars %08x, containers %08x\n", ! 157: debug_ivars_size, debug_container_malloc_size); ! 158: } ! 159:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.