xref: /xnu-11215/iokit/Kernel/IOKitDebug.cpp (revision 8149afcc)
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