X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/2d21ac55c334faf3a56e5634905ed6987fc787d4..7ee9d059c4eecf68ae4f8b0fb99ae2471eda79af:/bsd/sys/kdebug.h?ds=inline

diff --git a/bsd/sys/kdebug.h b/bsd/sys/kdebug.h
index b8f903856..393c413df 100644
--- a/bsd/sys/kdebug.h
+++ b/bsd/sys/kdebug.h
@@ -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,27 +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_IOGRAPHICS		50	/* Graphics */
+#define DBG_HIBERNATE		51	/* hibernation related events */
+
 
 /* Backwards compatibility */
 #define	DBG_IOPOINTING		DBG_IOHID			/* OBSOLETE: Use DBG_IOHID instead */
@@ -214,6 +240,8 @@ __BEGIN_DECLS
 #define DBG_DRVBLUETOOTH	15	/* Bluetooth */
 #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 */
@@ -226,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
@@ -256,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
@@ -325,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)
@@ -384,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
@@ -398,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;
@@ -432,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