1c1dac77fSApple OSS Distributions /* 2c1dac77fSApple OSS Distributions * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. 3c1dac77fSApple OSS Distributions * 4c1dac77fSApple OSS Distributions * @APPLE_LICENSE_HEADER_START@ 5c1dac77fSApple OSS Distributions * 6c1dac77fSApple OSS Distributions * The contents of this file constitute Original Code as defined in and 7c1dac77fSApple OSS Distributions * are subject to the Apple Public Source License Version 1.1 (the 8c1dac77fSApple OSS Distributions * "License"). You may not use this file except in compliance with the 9c1dac77fSApple OSS Distributions * License. Please obtain a copy of the License at 10c1dac77fSApple OSS Distributions * http://www.apple.com/publicsource and read it before using this file. 11c1dac77fSApple OSS Distributions * 12c1dac77fSApple OSS Distributions * This Original Code and all software distributed under the License are 13c1dac77fSApple OSS Distributions * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14c1dac77fSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15c1dac77fSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16c1dac77fSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17c1dac77fSApple OSS Distributions * License for the specific language governing rights and limitations 18c1dac77fSApple OSS Distributions * under the License. 19c1dac77fSApple OSS Distributions * 20c1dac77fSApple OSS Distributions * @APPLE_LICENSE_HEADER_END@ 21c1dac77fSApple OSS Distributions */ 22c1dac77fSApple OSS Distributions /* 23c1dac77fSApple OSS Distributions * Copyright (c) 1998 Apple Computer, Inc. All rights reserved. 24c1dac77fSApple OSS Distributions * 25c1dac77fSApple OSS Distributions * HISTORY 26c1dac77fSApple OSS Distributions * 27c1dac77fSApple OSS Distributions */ 28c1dac77fSApple OSS Distributions 29c1dac77fSApple OSS Distributions #include <IOKit/IOKitDebug.h> 30c1dac77fSApple OSS Distributions #include <IOKit/IOLib.h> 31c1dac77fSApple OSS Distributions #include <IOKit/assert.h> 32c1dac77fSApple OSS Distributions #include <IOKit/IODeviceTreeSupport.h> 33c1dac77fSApple OSS Distributions #include <IOKit/IOService.h> 34c1dac77fSApple OSS Distributions 35c1dac77fSApple OSS Distributions #include <libkern/c++/OSContainers.h> 36c1dac77fSApple OSS Distributions #include <libkern/c++/OSCPPDebug.h> 37c1dac77fSApple OSS Distributions 38c1dac77fSApple OSS Distributions extern "C" { 39c1dac77fSApple OSS Distributions 40c1dac77fSApple OSS Distributions SInt64 gIOKitDebug 41c1dac77fSApple OSS Distributions #ifdef IOKITDEBUG 42c1dac77fSApple OSS Distributions = IOKITDEBUG 43c1dac77fSApple OSS Distributions #endif 44c1dac77fSApple OSS Distributions ; 45c1dac77fSApple OSS Distributions 46c1dac77fSApple OSS Distributions int debug_malloc_size; 47c1dac77fSApple OSS Distributions int debug_iomalloc_size; 48c1dac77fSApple OSS Distributions int debug_container_malloc_size; 49c1dac77fSApple OSS Distributions // int debug_ivars_size; // in OSObject.cpp 50c1dac77fSApple OSS Distributions 51c1dac77fSApple OSS Distributions void IOPrintPlane( const IORegistryPlane * plane ) 52c1dac77fSApple OSS Distributions { 53c1dac77fSApple OSS Distributions IORegistryEntry * next; 54c1dac77fSApple OSS Distributions IORegistryIterator * iter; 55c1dac77fSApple OSS Distributions OSOrderedSet * all; 56c1dac77fSApple OSS Distributions char format[] = "%xxxs"; 57c1dac77fSApple OSS Distributions IOService * service; 58c1dac77fSApple OSS Distributions 59c1dac77fSApple OSS Distributions iter = IORegistryIterator::iterateOver( plane ); 60c1dac77fSApple OSS Distributions assert( iter ); 61c1dac77fSApple OSS Distributions all = iter->iterateAll(); 62c1dac77fSApple OSS Distributions if( all) { 63c1dac77fSApple OSS Distributions IOLog("Count %d\n", all->getCount() ); 64c1dac77fSApple OSS Distributions all->release(); 65c1dac77fSApple OSS Distributions } else 66c1dac77fSApple OSS Distributions IOLog("Empty\n"); 67c1dac77fSApple OSS Distributions 68c1dac77fSApple OSS Distributions iter->reset(); 69c1dac77fSApple OSS Distributions while( (next = iter->getNextObjectRecursive())) { 70*8149afccSApple OSS Distributions sprintf( format + 1, "%ds", 2 * next->getDepth( plane )); 71c1dac77fSApple OSS Distributions IOLog( format, ""); 72*8149afccSApple OSS Distributions IOLog( "\033[33m%s", next->getName( plane )); 73*8149afccSApple OSS Distributions if( (next->getLocation( plane ))) 74*8149afccSApple OSS Distributions IOLog("@%s", next->getLocation( plane )); 75*8149afccSApple OSS Distributions IOLog("\033[0m <class %s", next->getMetaClass()->getClassName()); 76c1dac77fSApple OSS Distributions if( (service = OSDynamicCast(IOService, next))) 77*8149afccSApple OSS Distributions IOLog(", busy %ld", service->getBusyState()); 78*8149afccSApple OSS Distributions IOLog( ">\n"); 79*8149afccSApple OSS Distributions IOSleep(250); 80c1dac77fSApple OSS Distributions } 81c1dac77fSApple OSS Distributions iter->release(); 82c1dac77fSApple OSS Distributions } 83c1dac77fSApple OSS Distributions 84c1dac77fSApple OSS Distributions void IOPrintMemory( void ) 85c1dac77fSApple OSS Distributions { 86c1dac77fSApple OSS Distributions 87c1dac77fSApple OSS Distributions // OSMetaClass::printInstanceCounts(); 88c1dac77fSApple OSS Distributions 89c1dac77fSApple OSS Distributions IOLog("\n" 90c1dac77fSApple OSS Distributions "ivar kalloc() 0x%08x\n" 91c1dac77fSApple OSS Distributions "malloc() 0x%08x\n" 92c1dac77fSApple OSS Distributions "containers kalloc() 0x%08x\n" 93c1dac77fSApple OSS Distributions "IOMalloc() 0x%08x\n" 94c1dac77fSApple OSS Distributions "----------------------------------------\n", 95c1dac77fSApple OSS Distributions debug_ivars_size, 96c1dac77fSApple OSS Distributions debug_malloc_size, 97c1dac77fSApple OSS Distributions debug_container_malloc_size, 98c1dac77fSApple OSS Distributions debug_iomalloc_size 99c1dac77fSApple OSS Distributions ); 100c1dac77fSApple OSS Distributions } 101c1dac77fSApple OSS Distributions 102c1dac77fSApple OSS Distributions } /* extern "C" */ 103c1dac77fSApple OSS Distributions 104c1dac77fSApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 105c1dac77fSApple OSS Distributions 106c1dac77fSApple OSS Distributions #define super OSObject 107c1dac77fSApple OSS Distributions OSDefineMetaClassAndStructors(IOKitDiagnostics, OSObject) 108c1dac77fSApple OSS Distributions 109c1dac77fSApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 110c1dac77fSApple OSS Distributions 111c1dac77fSApple OSS Distributions OSObject * IOKitDiagnostics::diagnostics( void ) 112c1dac77fSApple OSS Distributions { 113c1dac77fSApple OSS Distributions IOKitDiagnostics * diags; 114c1dac77fSApple OSS Distributions 115c1dac77fSApple OSS Distributions diags = new IOKitDiagnostics; 116c1dac77fSApple OSS Distributions if( diags && !diags->init()) { 117c1dac77fSApple OSS Distributions diags->release(); 118c1dac77fSApple OSS Distributions diags = 0; 119c1dac77fSApple OSS Distributions } 120c1dac77fSApple OSS Distributions 121c1dac77fSApple OSS Distributions return( diags ); 122c1dac77fSApple OSS Distributions } 123c1dac77fSApple OSS Distributions 124c1dac77fSApple OSS Distributions void IOKitDiagnostics::updateOffset( OSDictionary * dict, 125c1dac77fSApple OSS Distributions UInt32 value, const char * name ) 126c1dac77fSApple OSS Distributions { 127c1dac77fSApple OSS Distributions OSNumber * off; 128c1dac77fSApple OSS Distributions 129c1dac77fSApple OSS Distributions off = OSNumber::withNumber( value, 32 ); 130c1dac77fSApple OSS Distributions if( !off) 131c1dac77fSApple OSS Distributions return; 132c1dac77fSApple OSS Distributions 133c1dac77fSApple OSS Distributions dict->setObject( name, off ); 134c1dac77fSApple OSS Distributions off->release(); 135c1dac77fSApple OSS Distributions } 136c1dac77fSApple OSS Distributions 137c1dac77fSApple OSS Distributions 138c1dac77fSApple OSS Distributions bool IOKitDiagnostics::serialize(OSSerialize *s) const 139c1dac77fSApple OSS Distributions { 140c1dac77fSApple OSS Distributions OSDictionary * dict; 141c1dac77fSApple OSS Distributions bool ok; 142c1dac77fSApple OSS Distributions 143c1dac77fSApple OSS Distributions dict = OSDictionary::withCapacity( 5 ); 144c1dac77fSApple OSS Distributions if( !dict) 145c1dac77fSApple OSS Distributions return( false ); 146c1dac77fSApple OSS Distributions 147c1dac77fSApple OSS Distributions updateOffset( dict, debug_ivars_size, "Instance allocation" ); 148c1dac77fSApple OSS Distributions updateOffset( dict, debug_container_malloc_size, "Container allocation" ); 149c1dac77fSApple OSS Distributions updateOffset( dict, debug_iomalloc_size, "IOMalloc allocation" ); 150c1dac77fSApple OSS Distributions 151c1dac77fSApple OSS Distributions dict->setObject( "Classes", OSMetaClass::getClassDictionary() ); 152c1dac77fSApple OSS Distributions 153c1dac77fSApple OSS Distributions ok = dict->serialize( s ); 154c1dac77fSApple OSS Distributions 155c1dac77fSApple OSS Distributions dict->release(); 156c1dac77fSApple OSS Distributions 157c1dac77fSApple OSS Distributions return( ok ); 158c1dac77fSApple OSS Distributions } 159c1dac77fSApple OSS Distributions 160c1dac77fSApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 161