darwin-xnu/bsd/sys/kdebug.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
   3 *
   4 * @APPLE_LICENSE_HEADER_START@
   5 * 
   6 * The contents of this file constitute Original Code as defined in and
   7 * are subject to the Apple Public Source License Version 1.1 (the
   8 * "License").  You may not use this file except in compliance with the
   9 * License.  Please obtain a copy of the License at
  10 * http://www.apple.com/publicsource and read it before using this file.
  11 * 
  12 * This Original Code and all software distributed under the License are
  13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17 * License for the specific language governing rights and limitations
  18 * under the License.
  19 * 
  20 * @APPLE_LICENSE_HEADER_END@
  21 */
  22
  23/*      Copyright (c) 1997 Apple Computer, Inc.  All rights reserved. 
  24 *
  25 * kdebug.h -   kernel_debug definitions
  26 *
  27 */
  28
  29#ifndef BSD_SYS_KDEBUG_H
  30#define BSD_SYS_KDEBUG_H
  31
  32#include <sys/appleapiopts.h>
  33#include <sys/cdefs.h>
  34__BEGIN_DECLS
  35
  36#ifdef __APPLE_API_UNSTABLE
  37
  38#include <mach/clock_types.h>
  39#include <stdint.h>
  40#if     defined(KERNEL_BUILD)
  41#include <kdebug.h>
  42#endif /* KERNEL_BUILD */
  43
  44/*
  45 * types of faults that vm_fault handles
  46 * and creates trace entries for
  47 */
  48#define DBG_ZERO_FILL_FAULT   1
  49#define DBG_PAGEIN_FAULT      2
  50#define DBG_COW_FAULT         3
  51#define DBG_CACHE_HIT_FAULT   4
  52
  53
  54/* The debug code consists of the following 
  55*
  56* ----------------------------------------------------------------------
  57*|              |               |                               |Func   |
  58*| Class (8)    | SubClass (8)  |          Code (14)            |Qual(2)|
  59* ----------------------------------------------------------------------
  60* The class specifies the higher level 
  61*/
  62
  63/* The Function qualifiers  */
  64#define DBG_FUNC_START          1
  65#define DBG_FUNC_END            2
  66#define DBG_FUNC_NONE           0
  67
  68
  69/* The Kernel Debug Classes  */
  70#define DBG_MACH                1
  71#define DBG_NETWORK             2       
  72#define DBG_FSYSTEM             3
  73#define DBG_BSD                 4
  74#define DBG_IOKIT               5
  75#define DBG_DRIVERS             6
  76#define DBG_TRACE               7
  77#define DBG_DLIL                8
  78#define DBG_SECURITY            9
  79#define DBG_MISC                20
  80#define DBG_DYLD                31
  81#define DBG_QT                  32
  82#define DBG_APPS                33
  83#define DBG_MIG                 255
  84
  85/* **** The Kernel Debug Sub Classes for Mach (DBG_MACH) **** */
  86#define DBG_MACH_EXCP_DFLT      0x03    /* Data Translation Fault */
  87#define DBG_MACH_EXCP_IFLT      0x04    /* Inst Translation Fault */
  88#define DBG_MACH_EXCP_INTR      0x05    /* Interrupts */
  89#define DBG_MACH_EXCP_ALNG      0x06    /* Alignment Exception */
  90#define DBG_MACH_EXCP_TRAP      0x07    /* Traps */
  91#define DBG_MACH_EXCP_FP        0x08    /* FP Unavail */
  92#define DBG_MACH_EXCP_DECI      0x09    /* Decrementer Interrupt */
  93#define DBG_MACH_EXCP_SC        0x0C    /* System Calls */
  94#define DBG_MACH_EXCP_TRACE     0x0D    /* Trace exception */
  95#define DBG_MACH_EXCP_EMUL      0x0E    /* Instruction emulated */
  96#define DBG_MACH_IHDLR          0x10    /* Interrupt Handlers */
  97#define DBG_MACH_IPC            0x20    /* Inter Process Comm */
  98#define DBG_MACH_VM             0x30    /* Virtual Memory */
  99#define DBG_MACH_SCHED          0x40    /* Scheduler */
 100#define DBG_MACH_MSGID_INVALID  0x50    /* Messages - invalid */
 101#define DBG_MACH_LOCKS          0x60    /* new lock APIs */
 102
 103/* Codes for Scheduler (DBG_MACH_SCHED) */     
 104#define MACH_SCHED              0x0     /* Scheduler */
 105#define MACH_STACK_ATTACH       0x1     /* stack_attach() */
 106#define MACH_STACK_HANDOFF      0x2     /* stack_handoff() */
 107#define MACH_CALL_CONT          0x3     /* call_continuation() */
 108#define MACH_CALLOUT            0x4     /* callouts */
 109#define MACH_STACK_DETACH       0x5
 110#define MACH_MAKE_RUNNABLE      0x6     /* make thread runnable */
 111#define MACH_PROMOTE                    0x7             /* promoted due to resource */
 112#define MACH_DEMOTE                             0x8             /* promotion undone */
 113#define MACH_PREBLOCK_MUTEX             0x9             /* preblocking on mutex */
 114
 115/* **** The Kernel Debug Sub Classes for Network (DBG_NETWORK) **** */
 116#define DBG_NETIP       1       /* Internet Protocol */
 117#define DBG_NETARP      2       /* Address Resolution Protocol */
 118#define DBG_NETUDP      3       /* User Datagram Protocol */
 119#define DBG_NETTCP      4       /* Transmission Control Protocol */
 120#define DBG_NETICMP     5       /* Internet Control Message Protocol */
 121#define DBG_NETIGMP     6       /* Internet Group Management Protocol */
 122#define DBG_NETRIP      7       /* Routing Information Protocol */
 123#define DBG_NETOSPF     8       /* Open Shortest Path First */
 124#define DBG_NETISIS     9       /* Intermediate System to Intermediate System */
 125#define DBG_NETSNMP     10      /* Simple Network Management Protocol */
 126#define DBG_NETSOCK     11      /* Socket Layer */
 127
 128/* For Apple talk */
 129#define DBG_NETAARP     100     /* Apple ARP */
 130#define DBG_NETDDP      101     /* Datagram Delivery Protocol */
 131#define DBG_NETNBP      102     /* Name Binding Protocol */
 132#define DBG_NETZIP      103     /* Zone Information Protocol */
 133#define DBG_NETADSP     104     /* Name Binding Protocol */
 134#define DBG_NETATP      105     /* Apple Transaction Protocol */
 135#define DBG_NETASP      106     /* Apple Session Protocol */
 136#define DBG_NETAFP      107     /* Apple Filing Protocol */
 137#define DBG_NETRTMP     108     /* Routing Table Maintenance Protocol */
 138#define DBG_NETAURP     109     /* Apple Update Routing Protocol */
 139#define DBG_NETIPSEC    128     /* IPsec Protocol  */
 140
 141/* **** The Kernel Debug Sub Classes for IOKIT (DBG_IOKIT) **** */
 142#define DBG_IOSCSI      1       /* SCSI */
 143#define DBG_IODISK      2       /* Disk layers */
 144#define DBG_IONETWORK   3       /* Network layers */
 145#define DBG_IOKEYBOARD  4       /* Keyboard */
 146#define DBG_IOPOINTING  5       /* Pointing Devices */
 147#define DBG_IOAUDIO     6       /* Audio */
 148#define DBG_IOFLOPPY    7       /* Floppy */
 149#define DBG_IOSERIAL    8       /* Serial */
 150#define DBG_IOTTY       9       /* TTY layers */
 151#define DBG_IOWORKLOOP  10      /* Work from work loop */
 152#define DBG_IOINTES     11      /* Interrupt event source */
 153#define DBG_IOCLKES     12      /* Clock event source */
 154#define DBG_IOCMDQ      13      /* Command queue latencies */
 155#define DBG_IOMCURS     14      /* Memory Cursor */
 156#define DBG_IOMDESC     15      /* Memory Descriptors */
 157#define DBG_IOPOWER     16      /* Power Managerment */
 158
 159/* **** The Kernel Debug Sub Classes for Device Drivers (DBG_DRIVERS) **** */
 160#define DBG_DRVSCSI     1       /* SCSI */
 161#define DBG_DRVDISK     2       /* Disk layers */
 162#define DBG_DRVNETWORK  3       /* Network layers */
 163#define DBG_DRVKEYBOARD 4       /* Keyboard */
 164#define DBG_DRVPOINTING 5       /* Pointing Devices */
 165#define DBG_DRVAUDIO    6       /* Audio */
 166#define DBG_DRVFLOPPY   7       /* Floppy */
 167#define DBG_DRVSERIAL   8       /* Serial */
 168#define DBG_DRVSPLT     9
 169
 170/* **** The Kernel Debug Sub Classes for the DLIL Layer (DBG_DLIL) **** */
 171#define DBG_DLIL_STATIC 1       /* Static DLIL code */
 172#define DBG_DLIL_PR_MOD 2       /* DLIL Protocol Module */
 173#define DBG_DLIL_IF_MOD 3       /* DLIL Interface Module */
 174#define DBG_DLIL_PR_FLT 4       /* DLIL Protocol Filter */
 175#define DBG_DLIL_IF_FLT 5       /* DLIL Interface FIlter */
 176
 177/* The Kernel Debug Sub Classes for File System */
 178#define DBG_FSRW      1       /* reads and writes to the filesystem */
 179#define DBG_DKRW      2       /* reads and writes to the disk */
 180#define DBG_FSVN      3       /* vnode operations (inc. locking/unlocking) */
 181#define DBG_FSLOOOKUP 4       /* namei and other lookup-related operations */
 182
 183/* The Kernel Debug Sub Classes for BSD */
 184#define DBG_BSD_EXCP_SC 0x0C    /* System Calls */
 185#define DBG_BSD_AIO             0x0D    /* aio (POSIX async IO) */
 186#define DBG_BSD_SC_EXTENDED_INFO 0x0E    /* System Calls, extended info */
 187
 188/* The Kernel Debug Sub Classes for DBG_TRACE */
 189#define DBG_TRACE_DATA      0
 190#define DBG_TRACE_STRING    1
 191
 192/* The Kernel Debug Sub Classes for DBG_DYLD */
 193#define DBG_DYLD_STRING   5
 194
 195/* The Kernel Debug modifiers for the DBG_DKRW sub class */
 196#define DKIO_DONE       0x01
 197#define DKIO_READ       0x02
 198#define DKIO_ASYNC      0x04
 199#define DKIO_META       0x08
 200#define DKIO_PAGING     0x10
 201
 202/**********************************************************************/
 203
 204#define KDBG_CODE(Class, SubClass, code) (((Class & 0xff) << 24) | ((SubClass & 0xff) << 16) | ((code & 0x3fff)  << 2))
 205
 206#define KDBG_MIGCODE(msgid) ((DBG_MIG << 24) | (((msgid) & 0x3fffff)  << 2))
 207
 208#define MACHDBG_CODE(SubClass, code) KDBG_CODE(DBG_MACH, SubClass, code)
 209#define NETDBG_CODE(SubClass, code) KDBG_CODE(DBG_NETWORK, SubClass, code)
 210#define FSDBG_CODE(SubClass, code) KDBG_CODE(DBG_FSYSTEM, SubClass, code)
 211#define BSDDBG_CODE(SubClass, code) KDBG_CODE(DBG_BSD, SubClass, code)
 212#define IOKDBG_CODE(SubClass, code) KDBG_CODE(DBG_IOKIT, SubClass, code)
 213#define DRVDBG_CODE(SubClass, code) KDBG_CODE(DBG_DRIVERS, SubClass, code)
 214#define TRACEDBG_CODE(SubClass,code) KDBG_CODE(DBG_TRACE, SubClass, code)
 215#define MISCDBG_CODE(SubClass,code) KDBG_CODE(DBG_MISC, SubClass, code)
 216#define DLILDBG_CODE(SubClass,code) KDBG_CODE(DBG_DLIL, SubClass, code)
 217#define SECURITYDBG_CODE(SubClass,code) KDBG_CODE(DBG_SECURITY, SubClass, code)
 218#define DYLDDBG_CODE(SubClass,code) KDBG_CODE(DBG_DYLD, SubClass, code)
 219#define QTDBG_CODE(SubClass,code) KDBG_CODE(DBG_QT, SubClass, code)
 220#define APPSDBG_CODE(SubClass,code) KDBG_CODE(DBG_APPS, SubClass, code)
 221
 222/*   Usage:
 223* kernel_debug((KDBG_CODE(DBG_NETWORK, DNET_PROTOCOL, 51) | DBG_FUNC_START), 
 224*       offset, 0, 0, 0,0) 
 225* 
 226* For ex, 
 227* 
 228* #include <sys/kdebug.h>
 229* 
 230* #define DBG_NETIPINIT NETDBG_CODE(DBG_NETIP,1)
 231* 
 232* 
 233* void
 234* ip_init()
 235* {
 236*       register struct protosw *pr;
 237*       register int i;
 238*       
 239*       KERNEL_DEBUG(DBG_NETIPINIT | DBG_FUNC_START, 0,0,0,0,0)
 240*       --------
 241*       KERNEL_DEBUG(DBG_NETIPINIT, 0,0,0,0,0)
 242*       --------
 243*       KERNEL_DEBUG(DBG_NETIPINIT | DBG_FUNC_END, 0,0,0,0,0)
 244* }
 245*
 246
 247*/
 248
 249extern unsigned int kdebug_enable;
 250#define KDEBUG_ENABLE_TRACE   0x1
 251#define KDEBUG_ENABLE_ENTROPY 0x2
 252#define KDEBUG_ENABLE_CHUD    0x4
 253
 254#define KERNEL_DEBUG_CONSTANT(x,a,b,c,d,e)    \
 255do {                                    \
 256    if (kdebug_enable)                  \
 257        kernel_debug(x,a,b,c,d,e);      \
 258} while(0)
 259
 260#define KERNEL_DEBUG_CONSTANT1(x,a,b,c,d,e)    \
 261do {                                    \
 262    if (kdebug_enable)                  \
 263        kernel_debug1(x,a,b,c,d,e);     \
 264} while(0)
 265
 266extern void kernel_debug(unsigned int debugid, unsigned int arg1, unsigned int arg2, unsigned int arg3,  unsigned int arg4, unsigned int arg5);
 267
 268extern void kernel_debug1(unsigned int debugid, unsigned int arg1, unsigned int arg2, unsigned int arg3,  unsigned int arg4, unsigned int arg5);
 269
 270/*
 271 * LP64todo - for some reason these are problematic
 272 */
 273extern void kdbg_trace_data(struct proc *proc, long *arg_pid);
 274
 275extern void kdbg_trace_string(struct proc *proc, long *arg1, long *arg2, long *arg3, long *arg4);
 276
 277#if     KDEBUG
 278
 279#define KERNEL_DEBUG(x,a,b,c,d,e)       \
 280do {                                    \
 281    if (kdebug_enable)                  \
 282        kernel_debug(x,a,b,c,d,e);      \
 283} while(0)
 284
 285#define KERNEL_DEBUG1(x,a,b,c,d,e)      \
 286do {                                    \
 287    if (kdebug_enable)                  \
 288        kernel_debug1(x,a,b,c,d,e);     \
 289} while(0)
 290
 291#define __kdebug_only
 292
 293#else
 294
 295#define KERNEL_DEBUG(x,a,b,c,d,e)
 296#define KERNEL_DEBUG1(x,a,b,c,d,e)
 297
 298#define __kdebug_only __unused
 299#endif
 300
 301#endif /* __APPLE_API_UNSTABLE */
 302__END_DECLS
 303
 304
 305#ifdef  PRIVATE
 306#ifdef __APPLE_API_PRIVATE
 307/*
 308 * private kernel_debug definitions
 309 */
 310
 311typedef struct {
 312uint64_t        timestamp;
 313unsigned int    arg1;
 314unsigned int    arg2;
 315unsigned int    arg3;
 316unsigned int    arg4;
 317unsigned int    arg5;       /* will hold current thread */
 318unsigned int    debugid;
 319} kd_buf;
 320
 321#define KDBG_TIMESTAMP_MASK 0x00ffffffffffffffULL
 322#define KDBG_CPU_MASK       0x0f00000000000000ULL
 323#define KDBG_CPU_SHIFT  56
 324
 325/* Debug Flags */
 326#define KDBG_INIT       0x1
 327#define KDBG_NOWRAP     0x2
 328#define KDBG_FREERUN    0x4
 329#define KDBG_WRAPPED    0x8
 330#define KDBG_USERFLAGS  (KDBG_FREERUN|KDBG_NOWRAP|KDBG_INIT)
 331#define KDBG_PIDCHECK   0x10
 332#define KDBG_MAPINIT    0x20
 333#define KDBG_PIDEXCLUDE 0x40
 334#define KDBG_LOCKINIT   0x80
 335
 336typedef struct {
 337        unsigned int    type;
 338        unsigned int    value1;
 339        unsigned int    value2;
 340        unsigned int    value3;
 341        unsigned int    value4;
 342        
 343} kd_regtype;
 344
 345typedef struct
 346{
 347    int nkdbufs;
 348    int nolog;
 349    int flags;
 350    int nkdthreads;
 351    int bufid;
 352} kbufinfo_t;
 353
 354typedef struct
 355{
 356  unsigned int thread;
 357  int          valid;
 358  char         command[20];
 359} kd_threadmap;
 360
 361#define KDBG_CLASSTYPE          0x10000
 362#define KDBG_SUBCLSTYPE         0x20000
 363#define KDBG_RANGETYPE          0x40000
 364#define KDBG_TYPENONE           0x80000
 365#define KDBG_CKTYPES            0xF0000
 366
 367#define KDBG_RANGECHECK 0x100000
 368#define KDBG_VALCHECK   0x200000        /* Check up to 4 individual values */
 369
 370#define KDBG_BUFINIT    0x80000000
 371
 372/* Control operations */
 373#define KDBG_EFLAGS     1
 374#define KDBG_DFLAGS     2
 375#define KDBG_ENABLE     3
 376#define KDBG_SETNUMBUF  4
 377#define KDBG_GETNUMBUF  5
 378#define KDBG_SETUP      6
 379#define KDBG_REMOVE     7
 380#define KDBG_SETREGCODE 8
 381#define KDBG_GETREGCODE 9
 382#define KDBG_READTRACE  10
 383#define KDBG_PIDTR      11
 384#define KDBG_THRMAP     12
 385#define KDBG_PIDEX      14
 386#define KDBG_SETRTCDEC  15
 387#define KDBG_KDGETENTROPY 16
 388
 389/* Minimum value allowed when setting decrementer ticks */
 390#define KDBG_MINRTCDEC  2500
 391
 392
 393/* PCSAMPLES control operations */
 394#define PCSAMPLE_DISABLE   1
 395#define PCSAMPLE_SETNUMBUF 2
 396#define PCSAMPLE_GETNUMBUF 3
 397#define PCSAMPLE_SETUP     4
 398#define PCSAMPLE_REMOVE    5
 399#define PCSAMPLE_READBUF   6
 400#define PCSAMPLE_SETREG    7
 401#define PCSAMPLE_COMM      8
 402
 403#define MAX_PCSAMPLES    1000000     /* Maximum number of pc's in a single buffer */
 404
 405
 406extern unsigned int pcsample_enable;
 407
 408typedef struct
 409{
 410    int npcbufs;
 411    int bufsize;
 412    int enable;
 413        unsigned int pcsample_beg;
 414        unsigned int pcsample_end;
 415} pcinfo_t;
 416
 417#endif /* __APPLE_API_PRIVATE */
 418#endif  /* PRIVATE */
 419
 420#endif /* !BSD_SYS_KDEBUG_H */
 421
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.