]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/kdebug.h
xnu-1699.22.81.tar.gz
[apple/xnu.git] / bsd / sys / kdebug.h
index a5251673f20bad0c06e9df073f810de139287134..393c413dfa4effaa95730d34bc690c212f9e8826 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2010 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -47,6 +47,11 @@ __BEGIN_DECLS
 #include <kdebug.h>
 #endif /* KERNEL_BUILD */
 
+#ifdef XNU_KERNEL_PRIVATE
+#include <stdint.h>
+#include <mach/branch_predicates.h>
+#endif
+
 /*
  * types of faults that vm_fault handles
  * and creates trace entries for
@@ -57,6 +62,8 @@ __BEGIN_DECLS
 #define DBG_CACHE_HIT_FAULT   4
 #define DBG_NZF_PAGE_FAULT    5
 #define DBG_GUARD_FAULT              6 
+#define DBG_PAGEINV_FAULT     7
+#define DBG_PAGEIND_FAULT     8
 
 
 /* The debug code consists of the following 
@@ -75,20 +82,22 @@ __BEGIN_DECLS
 
 
 /* The Kernel Debug Classes  */
-#define DBG_MACH                       1
-#define DBG_NETWORK                    2       
-#define DBG_FSYSTEM                    3
-#define DBG_BSD                                4
-#define DBG_IOKIT                      5
-#define DBG_DRIVERS                    6
-#define DBG_TRACE           7
+#define DBG_MACH               1
+#define DBG_NETWORK            2       
+#define DBG_FSYSTEM            3
+#define DBG_BSD                        4
+#define DBG_IOKIT              5
+#define DBG_DRIVERS            6
+#define DBG_TRACE              7
 #define DBG_DLIL               8
 #define DBG_SECURITY           9
-#define DBG_MISC                       20
-#define DBG_DYLD            31
-#define DBG_QT              32
-#define DBG_APPS            33
-#define DBG_MIG                                255
+#define DBG_CORESTORAGE                10
+#define DBG_MISC               20
+#define DBG_DYLD               31
+#define DBG_QT                 32
+#define DBG_APPS               33
+#define DBG_LAUNCHD            34
+#define DBG_MIG                        255
 
 /* **** The Kernel Debug Sub Classes for Mach (DBG_MACH) **** */
 #define        DBG_MACH_EXCP_KTRAP_x86 0x02    /* Kernel Traps on x86 */
@@ -111,6 +120,7 @@ __BEGIN_DECLS
 #define        DBG_MACH_MSGID_INVALID  0x50    /* Messages - invalid */
 #define DBG_MACH_LOCKS         0x60    /* new lock APIs */
 #define DBG_MACH_PMAP          0x70    /* pmap */
+#define DBG_MACH_MP            0x90    /* MP related */
 
 /* Codes for Scheduler (DBG_MACH_SCHED) */     
 #define MACH_SCHED              0x0     /* Scheduler */
@@ -120,9 +130,20 @@ __BEGIN_DECLS
 #define MACH_CALLOUT            0x4     /* callouts */
 #define MACH_STACK_DETACH       0x5
 #define MACH_MAKE_RUNNABLE      0x6     /* make thread runnable */
-#define        MACH_PROMOTE                    0x7             /* promoted due to resource */
-#define        MACH_DEMOTE                             0x8             /* promotion undone */
-#define MACH_IDLE                              0x9             /* processor idling */
+#define        MACH_PROMOTE            0x7     /* promoted due to resource */
+#define        MACH_DEMOTE             0x8     /* promotion undone */
+#define MACH_IDLE               0x9    /* processor idling */
+#define MACH_STACK_DEPTH        0xa    /* stack depth at switch */
+#define MACH_MOVED              0xb    /* did not use original scheduling decision */
+#define MACH_FAIRSHARE_ENTER    0xc    /* move to fairshare band */
+#define MACH_FAIRSHARE_EXIT     0xd    /* exit fairshare band */
+#define MACH_FAILSAFE          0xe     /* tripped fixed-pri/RT failsafe */
+#define        MACH_GET_URGENCY        0x14    /* Urgency queried by platform */
+#define        MACH_URGENCY            0x15    /* Urgency (RT/BG/NORMAL) communicated
+                                        * to platform */
+#define        MACH_REDISPATCH         0x16    /* "next thread" thread redispatched */
+#define        MACH_REMOTE_AST         0x17    /* AST signal issued to remote processor */
+#define        MACH_SCHED_LPA_BROKEN   0x18    /* last_processor affinity broken in choose_processor */
 
 /* Codes for pmap (DBG_MACH_PMAP) */     
 #define PMAP__CREATE           0x0
@@ -164,6 +185,7 @@ __BEGIN_DECLS
 #define        DBG_NETIPSEC    128     /* IPsec Protocol  */
 
 /* **** The Kernel Debug Sub Classes for IOKIT (DBG_IOKIT) **** */
+#define DBG_IOINTC                     0       /* Interrupt controller */
 #define DBG_IOWORKLOOP         1       /* Work from work loop */
 #define DBG_IOINTES                    2       /* Interrupt event source */
 #define DBG_IOCLKES                    3       /* Clock event source */
@@ -171,28 +193,31 @@ __BEGIN_DECLS
 #define DBG_IOMCURS                    5       /* Memory Cursor */
 #define DBG_IOMDESC                    6       /* Memory Descriptors */
 #define DBG_IOPOWER                    7       /* Power Managerment */
+#define DBG_IOSERVICE          8       /* Matching etc. */
 
-/* **** 8-32 reserved for internal IOKit usage **** */
+/* **** 9-32 reserved for internal IOKit usage **** */
 
 #define DBG_IOSTORAGE          32      /* Storage layers */
 #define        DBG_IONETWORK           33      /* Network layers */
 #define        DBG_IOKEYBOARD          34      /* Keyboard */
-#define        DBG_IOHID                       35      /* HID Devices */
-#define        DBG_IOAUDIO                     36      /* Audio */
+#define        DBG_IOHID               35      /* HID Devices */
+#define        DBG_IOAUDIO             36      /* Audio */
 #define        DBG_IOSERIAL            37      /* Serial */
-#define        DBG_IOTTY                       38      /* TTY layers */
-#define DBG_IOSAM                      39      /* SCSI Architecture Model layers */
-#define DBG_IOPARALLELATA   40 /* Parallel ATA */
+#define        DBG_IOTTY               38      /* TTY layers */
+#define DBG_IOSAM              39      /* SCSI Architecture Model layers */
+#define DBG_IOPARALLELATA      40      /* Parallel ATA */
 #define DBG_IOPARALLELSCSI     41      /* Parallel SCSI */
-#define DBG_IOSATA                     42      /* Serial-ATA */
-#define DBG_IOSAS                      43      /* SAS */
+#define DBG_IOSATA             42      /* Serial-ATA */
+#define DBG_IOSAS              43      /* SAS */
 #define DBG_IOFIBRECHANNEL     44      /* FiberChannel */
-#define DBG_IOUSB                      45      /* USB */
+#define DBG_IOUSB              45      /* USB */
 #define DBG_IOBLUETOOTH                46      /* Bluetooth */
 #define DBG_IOFIREWIRE         47      /* FireWire */
 #define DBG_IOINFINIBAND       48      /* Infiniband */
-#define DBG_IOCPUPM                    49      /* CPU Power Management */
+#define DBG_IOCPUPM            49      /* CPU Power Management */
 #define DBG_IOGRAPHICS         50      /* Graphics */
+#define DBG_HIBERNATE          51      /* hibernation related events */
+
 
 /* Backwards compatibility */
 #define        DBG_IOPOINTING          DBG_IOHID                       /* OBSOLETE: Use DBG_IOHID instead */
@@ -216,6 +241,7 @@ __BEGIN_DECLS
 #define DBG_DRVFIREWIRE                16      /* FireWire */
 #define DBG_DRVINFINIBAND      17      /* Infiniband */
 #define DBG_DRVGRAPHICS                18  /* Graphics */
+#define DBG_DRVSD              19      /* Secure Digital */
 
 /* Backwards compatibility */
 #define        DBG_DRVPOINTING         DBG_DRVHID              /* OBSOLETE: Use DBG_DRVHID instead */
@@ -228,22 +254,35 @@ __BEGIN_DECLS
 #define DBG_DLIL_PR_FLT 4       /* DLIL Protocol Filter */
 #define DBG_DLIL_IF_FLT 5       /* DLIL Interface FIlter */
 
-/* The Kernel Debug Sub Classes for File System */
+/* The Kernel Debug Sub Classes for File System (DBG_FSYSTEM) */
 #define DBG_FSRW      1       /* reads and writes to the filesystem */
 #define DBG_DKRW      2       /* reads and writes to the disk */
 #define DBG_FSVN      3       /* vnode operations (inc. locking/unlocking) */
 #define DBG_FSLOOOKUP 4       /* namei and other lookup-related operations */
 #define DBG_JOURNAL   5       /* journaling operations */
+#define DBG_IOCTL     6       /* ioctl to the disk */
+#define DBG_BOOTCACHE 7       /* bootcache operations */
+#define DBG_HFS       8       /* HFS-specific events; see bsd/hfs/hfs_kdebug.h */
 
 /* The Kernel Debug Sub Classes for BSD */
+#define DBG_BSD_PROC           0x01    /* process/signals related */
 #define        DBG_BSD_EXCP_SC         0x0C    /* System Calls */
 #define        DBG_BSD_AIO             0x0D    /* aio (POSIX async IO) */
 #define DBG_BSD_SC_EXTENDED_INFO 0x0E  /* System Calls, extended info */
 #define DBG_BSD_SC_EXTENDED_INFO2 0x0F /* System Calls, extended info */
 
+
+/* The Codes for BSD subcode class DBG_BSD_PROC */
+#define BSD_PROC_EXIT          1       /* process exit */
+#define BSD_PROC_FRCEXIT       2       /* Kernel force termination */
+
 /* The Kernel Debug Sub Classes for DBG_TRACE */
 #define DBG_TRACE_DATA      0
 #define DBG_TRACE_STRING    1
+#define        DBG_TRACE_INFO      2
+
+/* The Kernel Debug Sub Classes for DBG_CORESTORAGE */
+#define DBG_CS_IO      0
 
 /* The Kernel Debug Sub Classes for DBG_MISC */
 #define DBG_EVENT      0x10
@@ -258,6 +297,8 @@ __BEGIN_DECLS
 #define DKIO_ASYNC     0x04
 #define DKIO_META      0x08
 #define DKIO_PAGING    0x10
+#define DKIO_THROTTLE  0x20
+#define DKIO_PASSIVE   0x40
 
 /* Codes for Application Sub Classes */
 #define DBG_APP_SAMBA  128
@@ -327,57 +368,91 @@ extern unsigned int kdebug_enable;
 #define KDEBUG_ENABLE_CHUD    0x4
 
 #if    (!defined(NO_KDEBUG))
-
-#define KERNEL_DEBUG_CONSTANT(x,a,b,c,d,e)    \
-do {                                   \
-    if (kdebug_enable)                 \
-        kernel_debug(x,a,b,c,d,e);     \
+#ifdef XNU_KERNEL_PRIVATE
+#define KERNEL_DEBUG_CONSTANT(x,a,b,c,d,e)                             \
+do {                                                                   \
+       if (__improbable(kdebug_enable))                                        \
+        kernel_debug(x,(uintptr_t)a,(uintptr_t)b,(uintptr_t)c,         \
+                      (uintptr_t)d,(uintptr_t)e);                      \
 } while(0)
 
-#define KERNEL_DEBUG_CONSTANT1(x,a,b,c,d,e)    \
-do {                                   \
-    if (kdebug_enable)                 \
-        kernel_debug1(x,a,b,c,d,e);    \
+#define KERNEL_DEBUG_CONSTANT1(x,a,b,c,d,e)                            \
+do {                                                                   \
+       if (__improbable(kdebug_enable))                                        \
+        kernel_debug1(x,(uintptr_t)a,(uintptr_t)b,(uintptr_t)c,                \
+                       (uintptr_t)d,(uintptr_t)e);                     \
+} while(0)
+#else  /* XNU_KERNEL_PRIVATE */
+#define KERNEL_DEBUG_CONSTANT(x,a,b,c,d,e)                             \
+do {                                                                   \
+       if (kdebug_enable)                                              \
+        kernel_debug(x,(uintptr_t)a,(uintptr_t)b,(uintptr_t)c,         \
+                      (uintptr_t)d,(uintptr_t)e);                      \
 } while(0)
 
-#else
-
-#define KERNEL_DEBUG_CONSTANT(x,a,b,c,d,e)
-#define KERNEL_DEBUG_CONSTANT1(x,a,b,c,d,e)
+#define KERNEL_DEBUG_CONSTANT1(x,a,b,c,d,e)                            \
+do {                                                                   \
+       if (kdebug_enable)                                              \
+        kernel_debug1(x,(uintptr_t)a,(uintptr_t)b,(uintptr_t)c,                \
+                       (uintptr_t)d,(uintptr_t)e);                     \
+} while(0)
+#endif /* XNU_KERNEL_PRIVATE */
+#else /*!NO_KDEBUG */
+#define KERNEL_DEBUG_CONSTANT(x,a,b,c,d,e) do { } while(0)
+#define KERNEL_DEBUG_CONSTANT1(x,a,b,c,d,e) do { } while(0)
 
 #define __kdebug_constant_only __unused
 #endif
 
-extern void kernel_debug(unsigned int debugid, unsigned int arg1, unsigned int arg2, unsigned int arg3,  unsigned int arg4, unsigned int arg5);
+extern void kernel_debug(
+               uint32_t  debugid,
+               uintptr_t arg1,
+               uintptr_t arg2,
+               uintptr_t arg3,
+               uintptr_t arg4,
+               uintptr_t arg5);
 
-extern void kernel_debug1(unsigned int debugid, unsigned int arg1, unsigned int arg2, unsigned int arg3,  unsigned int arg4, unsigned int arg5);
+extern void kernel_debug1(
+               uint32_t  debugid,
+               uintptr_t arg1,
+               uintptr_t arg2,
+               uintptr_t arg3,
+               uintptr_t arg4,
+               uintptr_t arg5);
 
-/*
- * LP64todo - for some reason these are problematic
- */
-struct proc;
-extern void kdbg_trace_data(struct proc *proc, long *arg_pid);
-
-extern void kdbg_trace_string(struct proc *proc, long *arg1, long *arg2, long *arg3, long *arg4);
 
 #if    (KDEBUG && (!defined(NO_KDEBUG)))
-
-#define KERNEL_DEBUG(x,a,b,c,d,e)      \
-do {                                   \
-    if (kdebug_enable)                 \
-        kernel_debug((unsigned int)x, (unsigned int)a, (unsigned int)b, \
-                    (unsigned int)c, (unsigned int)d, (unsigned int)e); \
+#ifdef XNU_KERNEL_PRIVATE
+#define KERNEL_DEBUG(x,a,b,c,d,e)                                      \
+do {                                                                   \
+       if (__improbable(kdebug_enable))                                \
+        kernel_debug((uint32_t)x,  (uintptr_t)a, (uintptr_t)b,         \
+                    (uintptr_t)c, (uintptr_t)d, (uintptr_t)e);         \
 } while(0)
 
-#define KERNEL_DEBUG1(x,a,b,c,d,e)     \
-do {                                   \
-    if (kdebug_enable)                 \
-        kernel_debug1((unsigned int)x, (unsigned int)a, (unsigned int)b, \
-                     (unsigned int)c, (unsigned int)d, (unsigned int)e); \
+#define KERNEL_DEBUG1(x,a,b,c,d,e)                                     \
+do {                                                                   \
+       if (__improbable(kdebug_enable))                                \
+        kernel_debug1((uint32_t)x,  (uintptr_t)a, (uintptr_t)b,                \
+                     (uintptr_t)c, (uintptr_t)d, (uintptr_t)e);        \
 } while(0)
 
 #define __kdebug_only
+#else /* !XNU_KERNEL_PRIVATE */
+#define KERNEL_DEBUG(x,a,b,c,d,e)                                      \
+do {                                                                   \
+       if (kdebug_enable)                                              \
+        kernel_debug((uint32_t)x,  (uintptr_t)a, (uintptr_t)b,         \
+                    (uintptr_t)c, (uintptr_t)d, (uintptr_t)e);         \
+} while(0)
 
+#define KERNEL_DEBUG1(x,a,b,c,d,e)                                     \
+do {                                                                   \
+       if (kdebug_enable)                                              \
+        kernel_debug1((uint32_t)x,  (uintptr_t)a, (uintptr_t)b,                \
+                     (uintptr_t)c, (uintptr_t)d, (uintptr_t)e);        \
+} while(0)
+#endif /* XNU_KERNEL_PRIVATE */
 #else
 
 #define KERNEL_DEBUG(x,a,b,c,d,e) do {} while (0)
@@ -386,7 +461,30 @@ do {                                       \
 #define __kdebug_only __unused
 #endif
 
+#ifdef KERNEL_PRIVATE
+#include <mach/boolean.h>
+struct proc;
+extern void kdbg_trace_data(struct proc *proc, long *arg_pid);
+
+extern void kdbg_trace_string(struct proc *proc, long *arg1, long *arg2, long *arg3, long *arg4);
+
+extern void kdbg_dump_trace_to_file(const char *);
 void start_kern_tracing(unsigned int);
+struct task;
+extern void kdbg_get_task_name(char*, int, struct task *task);
+void disable_wrap(uint32_t *old_slowcheck, uint32_t *old_flags);
+void enable_wrap(uint32_t old_slowcheck, boolean_t lostevents);
+void release_storage_unit(int cpu,  uint32_t storage_unit);
+int allocate_storage_unit(int cpu);
+
+void trace_handler_map_ctrl_page(uintptr_t addr, unsigned long ctrl_page_size, unsigned long storage_size, unsigned long kds_ptr_size);
+void trace_handler_map_bufinfo(uintptr_t addr, unsigned long size);
+void trace_handler_unmap_bufinfo(void);
+void trace_handler_map_buffer(int index, uintptr_t addr, unsigned long size);
+void trace_handler_unmap_buffer(int index);
+void trace_set_timebases(uint64_t tsc, uint64_t ns);
+#endif  /* KERNEL_PRIVATE */
+
 
 #endif /* __APPLE_API_UNSTABLE */
 __END_DECLS
@@ -400,28 +498,90 @@ __END_DECLS
 
 typedef struct {
        uint64_t        timestamp;
-       unsigned int    arg1;
-       unsigned int    arg2;
-       unsigned int    arg3;
-       unsigned int    arg4;
-       unsigned int    arg5;       /* will hold current thread */
-       unsigned int    debugid;
+       uintptr_t       arg1;
+       uintptr_t       arg2;
+       uintptr_t       arg3;
+       uintptr_t       arg4;
+       uintptr_t       arg5;       /* will hold current thread */
+       uint32_t        debugid;
+#if defined(__LP64__)
+       uint32_t        cpuid;
+       uintptr_t       unused;
+#endif
 } kd_buf;
 
-#define KDBG_TIMESTAMP_MASK 0x00ffffffffffffffULL
-#define KDBG_CPU_MASK       0x0f00000000000000ULL
-#define KDBG_CPU_SHIFT 56
+#if !defined(__LP64__)
+#define KDBG_TIMESTAMP_MASK            0x00ffffffffffffffULL
+#define KDBG_CPU_MASK                  0xff00000000000000ULL
+#define KDBG_CPU_SHIFT                 56
+static inline void
+kdbg_set_cpu(kd_buf *kp, int cpu)
+{
+       kp->timestamp = (kp->timestamp & KDBG_TIMESTAMP_MASK) | 
+                               (((uint64_t) cpu) << KDBG_CPU_SHIFT);
+}
+static inline int
+kdbg_get_cpu(kd_buf *kp)
+{
+       return (int) (((kp)->timestamp & KDBG_CPU_MASK) >> KDBG_CPU_SHIFT);
+}
+static inline void
+kdbg_set_timestamp(kd_buf *kp, uint64_t thetime)
+{
+       kp->timestamp = thetime & KDBG_TIMESTAMP_MASK;
+}
+static inline uint64_t
+kdbg_get_timestamp(kd_buf *kp)
+{
+       return kp->timestamp & KDBG_TIMESTAMP_MASK;
+}
+static inline void
+kdbg_set_timestamp_and_cpu(kd_buf *kp, uint64_t thetime, int cpu)
+{
+       kp->timestamp = (thetime & KDBG_TIMESTAMP_MASK) | 
+                               (((uint64_t) cpu) << KDBG_CPU_SHIFT);
+}
+#else
+#define KDBG_TIMESTAMP_MASK            0xffffffffffffffffULL
+static inline void
+kdbg_set_cpu(kd_buf *kp, int cpu)
+{
+       kp->cpuid = cpu;
+}
+static inline int
+kdbg_get_cpu(kd_buf *kp)
+{
+       return kp->cpuid;
+}
+static inline void
+kdbg_set_timestamp(kd_buf *kp, uint64_t thetime)
+{
+       kp->timestamp = thetime;
+}
+static inline uint64_t
+kdbg_get_timestamp(kd_buf *kp)
+{
+       return kp->timestamp;
+}
+static inline void
+kdbg_set_timestamp_and_cpu(kd_buf *kp, uint64_t thetime, int cpu)
+{
+       kdbg_set_timestamp(kp, thetime);
+       kdbg_set_cpu(kp, cpu);
+}
+#endif
 
 /* Debug Flags */
-#define        KDBG_INIT       0x1
-#define        KDBG_NOWRAP     0x2
-#define        KDBG_FREERUN    0x4
-#define        KDBG_WRAPPED    0x8
+#define        KDBG_INIT       0x001
+#define        KDBG_NOWRAP     0x002
+#define        KDBG_FREERUN    0x004
+#define        KDBG_WRAPPED    0x008
 #define        KDBG_USERFLAGS  (KDBG_FREERUN|KDBG_NOWRAP|KDBG_INIT)
-#define KDBG_PIDCHECK   0x10
-#define KDBG_MAPINIT    0x20
-#define KDBG_PIDEXCLUDE 0x40
-#define KDBG_LOCKINIT  0x80
+#define KDBG_PIDCHECK   0x010
+#define KDBG_MAPINIT    0x020
+#define KDBG_PIDEXCLUDE 0x040
+#define KDBG_LOCKINIT  0x080
+#define KDBG_LP64      0x100
 
 typedef struct {
        unsigned int    type;
@@ -434,20 +594,31 @@ typedef struct {
 
 typedef struct
 {
-    int nkdbufs;
-    int nolog;
-    int flags;
-    int nkdthreads;
-    int bufid;
+       int             nkdbufs;
+       int             nolog;
+       int             flags;
+       int             nkdthreads;
+       int             bufid;
 } kbufinfo_t;
 
-typedef struct
-{
-  unsigned int thread;
-  int          valid;
-  char         command[20];
+typedef struct {
+       uintptr_t       thread;
+       int             valid;
+       char            command[20];
 } kd_threadmap;
 
+
+typedef struct {
+       int             version_no;
+       int             thread_count;
+       uint64_t        TOD_secs;
+       uint32_t        TOD_usecs;
+} RAW_header;
+
+#define RAW_VERSION0   0x55aa0000
+#define RAW_VERSION1   0x55aa0101
+
+
 #define        KDBG_CLASSTYPE          0x10000
 #define        KDBG_SUBCLSTYPE         0x20000
 #define        KDBG_RANGETYPE          0x40000