]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOKitDebug.h
xnu-6153.141.1.tar.gz
[apple/xnu.git] / iokit / IOKit / IOKitDebug.h
index 86f34c995c15613c164f5bf07b25532944cb9d95..50a811610c49dede138ec5cd032f435297401915 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 1998-2010 Apple Inc. All rights reserved.
+ * Copyright (c) 1998-2019 Apple 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
  * 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,
@@ -22,7 +22,7 @@
  * 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@
  */
 
 
 class IOKitDiagnostics : public OSObject
 {
-    OSDeclareDefaultStructors(IOKitDiagnostics)
+       OSDeclareDefaultStructors(IOKitDiagnostics);
 
 public:
-    static OSObject * diagnostics( void );
-    virtual bool serialize(OSSerialize *s) const APPLE_KEXT_OVERRIDE;
+       static OSObject * diagnostics( void );
+       virtual bool serialize(OSSerialize *s) const APPLE_KEXT_OVERRIDE;
 private:
-    static void updateOffset( OSDictionary * dict,
-            UInt64 value, const char * name );
+       static void updateOffset( OSDictionary * dict,
+           UInt64 value, const char * name );
 };
 
 #endif /* __cplusplus */
 
 enum {
-    // loggage
-    kIOLogAttach        =         0x00000001ULL,
-    kIOLogProbe         =         0x00000002ULL,
-    kIOLogStart         =         0x00000004ULL,
-    kIOLogRegister      =         0x00000008ULL,
-    kIOLogMatch         =         0x00000010ULL,
-    kIOLogConfig        =         0x00000020ULL,
-    kIOLogYield         =         0x00000040ULL,
-    kIOLogPower         =         0x00000080ULL,
-    kIOLogMapping       =         0x00000100ULL,
-    kIOLogCatalogue     =         0x00000200ULL,
+       // loggage
+       kIOLogAttach        =         0x00000001ULL,
+       kIOLogProbe         =         0x00000002ULL,
+       kIOLogStart         =         0x00000004ULL,
+       kIOLogRegister      =         0x00000008ULL,
+       kIOLogMatch         =         0x00000010ULL,
+       kIOLogConfig        =         0x00000020ULL,
+       kIOLogYield         =         0x00000040ULL,
+       kIOLogPower         =         0x00000080ULL,
+       kIOLogMapping       =         0x00000100ULL,
+       kIOLogCatalogue     =         0x00000200ULL,
        kIOLogTracePower    =         0x00000400ULL,  // Obsolete: Use iotrace=0x00000400ULL to enable now
-    kIOLogDebugPower    =         0x00000800ULL,
-    kIOLogServiceTree   =         0x00001000ULL,
-    kIOLogDTree         =         0x00002000ULL,
-    kIOLogMemory        =         0x00004000ULL,
-    kIOLogKextMemory    =         0x00008000ULL,
-    kOSLogRegistryMods  =         0x00010000ULL,  // Log attempts to modify registry collections
-    kIOLogPMRootDomain  =         0x00020000ULL,
-    kOSRegistryModsMode =         0x00040000ULL,  // Change default registry modification handling - panic vs. log
+       kIOLogDebugPower    =         0x00000800ULL,
+       kIOLogServiceTree   =         0x00001000ULL,
+       kIOLogDTree         =         0x00002000ULL,
+       kIOLogMemory        =         0x00004000ULL,
+       kIOLogKextMemory    =         0x00008000ULL,
+       kOSLogRegistryMods  =         0x00010000ULL,// Log attempts to modify registry collections
+       kIOLogPMRootDomain  =         0x00020000ULL,
+       kOSRegistryModsMode =         0x00040000ULL,// Change default registry modification handling - panic vs. log
 //    kIOTraceIOService   =         0x00080000ULL,  // Obsolete: Use iotrace=0x00080000ULL to enable now
-    kIOLogHibernate     =         0x00100000ULL,
-    kIOStatistics       =         0x04000000ULL,
-    kIOSleepWakeWdogOff =         0x40000000ULL,
-    kIOKextSpinDump     =         0x80000000ULL,
-
-    // debug aids - change behaviour
-    kIONoFreeObjects    =         0x00100000ULL,
-    kIOLogSynchronous   =         0x00200000ULL,  // IOLog completes synchronously
-    kIOTracking         =         0x00400000ULL,
-    kIOWaitQuietPanics  =         0x00800000ULL,
-    kIOWaitQuietBeforeRoot =      0x01000000ULL,
-    kIOTrackingBoot     =         0x02000000ULL,
-
-    _kIODebugTopFlag    = 0x8000000000000000ULL   // force enum to be 64 bits
+       kIOLogHibernate     =         0x00100000ULL,
+       kIOStatistics       =         0x04000000ULL,
+       kIOSleepWakeWdogOff =         0x40000000ULL,
+       kIOKextSpinDump     =         0x80000000ULL,
+
+       // debug aids - change behaviour
+       kIONoFreeObjects    =         0x00100000ULL,
+//    kIOLogSynchronous   =         0x00200000ULL,  // IOLog completes synchronously -- obsolete
+       kIOTracking         =         0x00400000ULL,
+       kIOWaitQuietPanics  =         0x00800000ULL,
+       kIOWaitQuietBeforeRoot =      0x01000000ULL,
+       kIOTrackingBoot     =         0x02000000ULL,
+
+       _kIODebugTopFlag    = 0x8000000000000000ULL// force enum to be 64 bits
 };
 
 enum {
-       kIOTraceInterrupts              =               0x00000001ULL,  // Trace primary interrupts
-       kIOTraceWorkLoops               =               0x00000002ULL,  // Trace workloop activity
-       kIOTraceEventSources    =               0x00000004ULL,  // Trace non-passive event sources
-       kIOTraceIntEventSource  =               0x00000008ULL,  // Trace IOIES and IOFIES sources
-       kIOTraceCommandGates    =               0x00000010ULL,  // Trace command gate activity
-       kIOTraceTimers                  =               0x00000020ULL,  // Trace timer event source activity
-       
-       kIOTracePowerMgmt               =               0x00000400ULL,  // Trace power management changes
-       
-       kIOTraceIOService       =               0x00080000ULL,  // registerService/termination
-       
-       kIOTraceCompatBootArgs  =               kIOTraceIOService | kIOTracePowerMgmt
+       kIOKitDebugUserOptions = 0
+           | kIOLogAttach
+           | kIOLogProbe
+           | kIOLogStart
+           | kIOLogRegister
+           | kIOLogMatch
+           | kIOLogConfig
+           | kIOLogYield
+           | kIOLogPower
+           | kIOLogMapping
+           | kIOLogCatalogue
+           | kIOLogTracePower
+           | kIOLogDebugPower
+           | kOSLogRegistryMods
+           | kIOLogPMRootDomain
+           | kOSRegistryModsMode
+           | kIOLogHibernate
+           | kIOSleepWakeWdogOff
+           | kIOKextSpinDump
+           | kIOWaitQuietPanics
 };
 
+enum {
+       kIOTraceInterrupts              =               0x00000001ULL,  // Trace primary interrupts
+       kIOTraceWorkLoops               =               0x00000002ULL,  // Trace workloop activity
+       kIOTraceEventSources    =               0x00000004ULL,  // Trace non-passive event sources
+       kIOTraceIntEventSource  =               0x00000008ULL,  // Trace IOIES and IOFIES sources
+       kIOTraceCommandGates    =               0x00000010ULL,  // Trace command gate activity
+       kIOTraceTimers                  =               0x00000020ULL,  // Trace timer event source activity
+
+       kIOTracePowerMgmt               =               0x00000400ULL,  // Trace power management changes
+
+       kIOTraceIOService       =               0x00080000ULL,  // registerService/termination
+
+       kIOTraceCompatBootArgs  =               kIOTraceIOService | kIOTracePowerMgmt
+};
+
+enum {
+       kIODKEnable             = 0x00000001ULL,
+       kIODKLogSetup   = 0x00000002ULL,
+       kIODKLogIPC             = 0x00000004ULL,
+       kIODKLogPM             = 0x00000008ULL,
+       kIODKLogMessages = 0x00000010ULL,
+
+       kIODKDisablePM = 0x000000100ULL,
+       kIODKDisableDextLaunch = 0x00001000ULL,
+       kIODKDisableDextTag    = 0x00002000ULL,
+       kIODKDisableCDHashChecking  = 0x00004000ULL,
+       kIODKDisableEntitlementChecking = 0x00008000ULL,
+};
+
+#if XNU_KERNEL_PRIVATE
+
+#define DKLOG(fmt, args...) { IOLog("DK: " fmt, ## args); }
+#define DKS                "%s-0x%qx"
+#define DKN(s)              s->getName(), s->getRegistryEntryID()
+
+#endif /* XNU_KERNEL_PRIVATE */
+
 extern SInt64    gIOKitDebug;
 extern SInt64    gIOKitTrace;
+extern SInt64    gIODKDebug;
 
 #ifdef __cplusplus
 extern "C" {
@@ -118,11 +164,11 @@ class IORegistryPlane;
 
 extern void    IOPrintPlane(
 #ifdef __cplusplus
-                            const IORegistryPlane * plane
+       const IORegistryPlane * plane
 #else
-                            const struct IORegistryPlane * plane
+       const struct IORegistryPlane * plane
 #endif
-                           );
+       );
 #ifndef _OSCPPDEBUG_H
 extern void    OSPrintMemory( void );
 #endif
@@ -132,95 +178,114 @@ extern void    OSPrintMemory( void );
 
 #define kIOKitDiagnosticsClientClassName "IOKitDiagnosticsClient"
 
-enum
-{
-    kIOKitDiagnosticsClientType = 0x99000002
+enum{
+       kIOKitDiagnosticsClientType = 0x99000002
 };
 
 
-struct IOKitDiagnosticsParameters
-{
-    size_t    size;
-    uint64_t  value;
-    uint32_t  options;
-    uint32_t  reserved[3];
+struct IOKitDiagnosticsParameters {
+       size_t    size;
+       uint64_t  value;
+       uint32_t  options;
+       uint32_t  tag;
+       uint32_t  zsize;
+       uint32_t  reserved[8];
 };
 typedef struct IOKitDiagnosticsParameters IOKitDiagnosticsParameters;
 
-enum
-{ 
-    kIOTrackingCallSiteBTs = 16,
+enum{
+       kIOTrackingCallSiteBTs = 16,
 };
 
-struct IOTrackingCallSiteInfo
-{
-    uint32_t      count;
-    size_t        size[2];
-    uintptr_t     bt[kIOTrackingCallSiteBTs];
+struct IOTrackingCallSiteInfo {
+       uint32_t          count;
+       pid_t             addressPID;
+       mach_vm_address_t address;
+       mach_vm_size_t    size[2];
+       pid_t             btPID;
+       mach_vm_address_t bt[2][kIOTrackingCallSiteBTs];
 };
 
-#define kIOMallocTrackingName  "IOMalloc"
-#define kIOWireTrackingName    "IOWire"
-#define kIOMapTrackingName     "IOMap"
+#define kIOMallocTrackingName   "IOMalloc"
+#define kIOWireTrackingName     "IOWire"
+#define kIOMapTrackingName      "IOMap"
 
-#if KERNEL && IOTRACKING
+#if XNU_KERNEL_PRIVATE && IOTRACKING
 
 struct IOTrackingQueue;
 struct IOTrackingCallSite;
 
-struct IOTracking
-{
-    queue_chain_t        link;
-    IOTrackingCallSite * site;
+struct IOTracking {
+       queue_chain_t        link;
+       IOTrackingCallSite * site;
 #if !defined(__LP64__)
-    uint32_t             flags;
+       uint32_t             flags;
 #endif
 };
 
-struct IOTrackingAddress
-{
-    IOTracking    tracking;
-    uintptr_t     address;
-    size_t        size;
+struct IOTrackingAddress {
+       IOTracking    tracking;
+       uintptr_t     address;
+       size_t        size;
 #if defined(__LP64__)
-    uint32_t      flags;
+       uint32_t      flags;
 #endif
 };
 
+struct IOTrackingUser {
+       queue_chain_t link;
+       pid_t         btPID;
+       uint8_t       user32;
+       uint8_t       userCount;
+       uintptr_t     bt[kIOTrackingCallSiteBTs];
+       uintptr_t     btUser[kIOTrackingCallSiteBTs];
+};
+
+enum{
+       kIOTrackingQueueTypeDefaultOn = 0x00000001,
+       kIOTrackingQueueTypeAlloc     = 0x00000002,
+       kIOTrackingQueueTypeMap       = 0x00000004,
+       kIOTrackingQueueTypeUser      = 0x00000008,
+};
+
+
 void              IOTrackingInit(void);
-IOTrackingQueue * IOTrackingQueueAlloc(const char * name, size_t allocSize, size_t minCaptureSize, bool isAlloc);
+IOTrackingQueue * IOTrackingQueueAlloc(const char * name, uintptr_t btEntry,
+    size_t allocSize, size_t minCaptureSize,
+    uint32_t type, uint32_t numSiteQs);
 void              IOTrackingQueueFree(IOTrackingQueue * head);
-void              IOTrackingAdd(IOTrackingQueue * head, IOTracking * mem, size_t size, bool address);
+void              IOTrackingAdd(IOTrackingQueue * head, IOTracking * mem, size_t size, bool address, vm_tag_t tag);
 void              IOTrackingRemove(IOTrackingQueue * head, IOTracking * mem, size_t size);
+void              IOTrackingAddUser(IOTrackingQueue * queue, IOTrackingUser * mem, vm_size_t size);
+void              IOTrackingRemoveUser(IOTrackingQueue * head, IOTrackingUser * tracking);
+
 void              IOTrackingAlloc(IOTrackingQueue * head, uintptr_t address, size_t size);
 void              IOTrackingFree(IOTrackingQueue * head, uintptr_t address, size_t size);
 void              IOTrackingReset(IOTrackingQueue * head);
 void              IOTrackingAccumSize(IOTrackingQueue * head, IOTracking * mem, size_t size);
 kern_return_t     IOTrackingDebug(uint32_t selector, uint32_t options,
-                                 const char * names, size_t namesLen, 
-                                 size_t size, OSObject ** result);
+    const char * names, size_t namesLen,
+    size_t size, OSObject ** result);
 
 extern IOTrackingQueue * gIOMallocTracking;
 extern IOTrackingQueue * gIOWireTracking;
 extern IOTrackingQueue * gIOMapTracking;
 
-#endif /* KERNEL && IOTRACKING */
+#endif /* XNU_KERNEL_PRIVATE && IOTRACKING */
 
-enum
-{
-    kIOTrackingExcludeNames      = 0x00000001,
+enum{
+       kIOTrackingExcludeNames      = 0x00000001,
 };
 
-enum
-{
-    kIOTrackingGetTracking       = 0x00000001,
-    kIOTrackingPrintTracking     = 0x00000002,
-    kIOTrackingResetTracking     = 0x00000003,
-    kIOTrackingStartCapture      = 0x00000004,
-    kIOTrackingStopCapture       = 0x00000005,
-    kIOTrackingSetMinCaptureSize = 0x00000006,
-    kIOTrackingLeaks             = 0x00000007,
-    kIOTrackingInvalid           = 0xFFFFFFFE,
+enum{
+       kIOTrackingGetTracking       = 0x00000001,
+       kIOTrackingGetMappings       = 0x00000002,
+       kIOTrackingResetTracking     = 0x00000003,
+       kIOTrackingStartCapture      = 0x00000004,
+       kIOTrackingStopCapture       = 0x00000005,
+       kIOTrackingSetMinCaptureSize = 0x00000006,
+       kIOTrackingLeaks             = 0x00000007,
+       kIOTrackingInvalid           = 0xFFFFFFFE,
 };