/* * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * */ #include #include #include #include extern "C" { extern int debug_container_malloc_size; extern int debug_ivars_size; } static void DumpTree( void ) { IORegistryEntry * next; IORegistryEntry * packages = 0; IORegistryEntry * deblocker = 0; IORegistryEntry * keyboard = 0; IORegistryIterator * iter; OSOrderedSet * all; IOLog("ivars %08x, containers %08x\n", debug_ivars_size, debug_container_malloc_size); iter = IORegistryIterator::iterateOver( gIODTPlane ); assert( iter ); all = iter->iterateAll(); IOLog("\nCount %d\n", all->getCount() ); all->release(); iter->reset(); while( (next = iter->nextEntryRecursive())) { if( 0 == strcmp( "packages", next->getName())) packages = next; if( 0 == strcmp( "deblocker", next->getName())) deblocker = next; if( 0 == strcmp( "keyboard", next->getName())) keyboard = next; } if( deblocker && keyboard) deblocker->attachToParent( keyboard, gIODTPlane); iter->reset(); while( (next = iter->nextEntryRecursive())) { IOLog("%s=%d,", next->getName(), next->getDepth( gIODTPlane )); if( 0 == strcmp( "gc", next->getName())) { packages = next; } } IOLog("ivars %08x, containers %08x\n", debug_ivars_size, debug_container_malloc_size); if( packages) packages->detachAll( gIODTPlane); all = iter->iterateAll(); IOLog("del gc/, count now %d\n", all->getCount() ); all->release(); iter->release(); IOLog("ivars %08x, containers %08x\n", debug_ivars_size, debug_container_malloc_size); } extern "C" { void PathTests( void ) { const char * tests[] = { "IODeviceTree:/bandit", "IODeviceTree:/", "IODeviceTree:/xxxx", "IODeviceTree:/bandit/xxx", "IODeviceTree:/bandit@F2000000", "IODeviceTree:/bandit/gc", "IODeviceTree:/bandit/gc/mace:17.202.42.95,\\mach_kernel", "IODeviceTree:/bandit/@10/mesh", "IODeviceTree:enet:17.202", "IODeviceTree:scsi/@0:0", "IODeviceTree:scsi-int", "IODeviceTree:/bandit/gc@10/mesh", "IODeviceTree:/bandit/gc/53c94/disk@0:6,mach_kernel", "IOService:/", "IOService:/ApplePlatformExpert", "IOService:/ApplePlatformExpert/hammerhead@F8000000", "IOService:/ApplePlatformExpert/bandit/AppleMacRiscPCI" }; IORegistryEntry * entry; char str[256]; int len; for( unsigned int i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { len = sizeof( str ); entry = IORegistryEntry::fromPath( tests[i], 0, str, &len ); IOLog("\"%s\" ", tests[i] ); if( entry) { IOLog("found %s, tail = \"%s\"\n", entry->getName(), str ); len = sizeof( str ); if( entry->getPath( str, &len, IORegistryEntry::getPlane("IODeviceTree"))) { IOLog("path = \"%s\"\n", str); } entry->release(); } else IOLog("not found\n"); } } } void TestsCpp( void * dtTop ) { IORegistryEntry * dt; IOLog("\nivars %08x, containers %08x\n", debug_ivars_size, debug_container_malloc_size); OSMetaClass::printInstanceCounts(); dt = IODeviceTreeAlloc( dtTop ); assert( dt ); // OSMetaClass::printInstanceCounts(); DumpTree(); // OSMetaClass::printInstanceCounts(); dt->detachAll( gIODTPlane); OSMetaClass::printInstanceCounts(); IOLog("ivars %08x, containers %08x\n", debug_ivars_size, debug_container_malloc_size); }