- KdDebuggerNotPresent should be FALSE by default.
[reactos.git] / reactos / ntoskrnl / include / internal / kd.h
index ce5e0df..a065b35 100644 (file)
-/* $Id$
- *
- * kernel debugger prototypes
- */
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_ROUTINE)(
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame,
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT Context,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN BOOLEAN SecondChance
+);
 
-#ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
-#define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_SWITCH_ROUTINE)(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT Context,
+    IN BOOLEAN SecondChance
+);
 
-#include <internal/ke.h>
-#include <internal/ldr.h>
-#include <ntdll/ldr.h>
+BOOLEAN
+NTAPI
+KdpEnterDebuggerException(
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame,
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT Context,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN BOOLEAN SecondChance
+);
 
-struct _KD_DISPATCH_TABLE;
+VOID
+NTAPI
+KdpTimeSlipWork(
+    IN PVOID Context
+);
 
-#ifdef DBG
-#include "kdgdb.h"
-#include "kdbochs.h"
-#endif
+BOOLEAN
+NTAPI
+KdpSwitchProcessor(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN OUT PCONTEXT ContextRecord,
+    IN BOOLEAN SecondChanceException
+);
 
-/* KD ROUTINES ***************************************************************/
+VOID
+NTAPI
+KdpTimeSlipDpcRoutine(
+    IN PKDPC Dpc,
+    IN PVOID DeferredContext,
+    IN PVOID SystemArgument1,
+    IN PVOID SystemArgument2
+);
 
-typedef enum _KD_CONTINUE_TYPE
-{
-    kdContinue = 0,
-    kdDoNotHandleException,
-    kdHandleException
-} KD_CONTINUE_TYPE;
+BOOLEAN
+NTAPI
+KdpStub(
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame,
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT ContextRecord,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN BOOLEAN SecondChanceException
+);
+
+BOOLEAN
+NTAPI
+KdpTrap(
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame,
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT ContextRecord,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN BOOLEAN SecondChanceException
+);
 
-typedef
 VOID
-STDCALL
-(*PKDP_INIT_ROUTINE)(struct _KD_DISPATCH_TABLE *DispatchTable,
-                     ULONG BootPhase);
+NTAPI
+KdpPortLock(
+    VOID
+);
 
-typedef
 VOID
-STDCALL
-(*PKDP_PRINT_ROUTINE)(PCH String);
+NTAPI
+KdpPortUnlock(
+    VOID
+);
+
+BOOLEAN
+NTAPI
+KdEnterDebugger(
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame
+);
 
-typedef
 VOID
-STDCALL
-(*PKDP_PROMPT_ROUTINE)(PCH String);
+NTAPI
+KdExitDebugger(
+    IN BOOLEAN Entered
+);
 
-typedef
-KD_CONTINUE_TYPE
-STDCALL
-(*PKDP_EXCEPTION_ROUTINE)(PEXCEPTION_RECORD ExceptionRecord,
-                          PCONTEXT Context,
-                          PKTRAP_FRAME TrapFrame);
+NTSTATUS
+NTAPI
+KdEnableDebuggerWithLock(
+    IN BOOLEAN NeedLock
+);
 
-/* INIT ROUTINES *************************************************************/
+ULONG
+NTAPI
+KdpPrint(
+    IN ULONG ComponentId,
+    IN ULONG ComponentMask,
+    IN LPSTR String,
+    IN ULONG Length,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame,
+    OUT PBOOLEAN Status
+);
 
-VOID
-STDCALL
-KdpScreenInit(struct _KD_DISPATCH_TABLE *DispatchTable,
-              ULONG BootPhase);
-              
-VOID
-STDCALL
-KdpSerialInit(struct _KD_DISPATCH_TABLE *DispatchTable,
-              ULONG BootPhase);
-              
-VOID
-STDCALL
-KdpInitDebugLog(struct _KD_DISPATCH_TABLE *DispatchTable,
-                ULONG BootPhase);
-                
-/* KD ROUTINES ***************************************************************/
-
-KD_CONTINUE_TYPE
-STDCALL
-KdpEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
-                          KPROCESSOR_MODE PreviousMode,
-                          PCONTEXT Context,
-                          PKTRAP_FRAME TrapFrame,
-                          BOOLEAN FirstChance,
-                          BOOLEAN Gdb);
-                          
 ULONG
-STDCALL
-KdpPrintString(PANSI_STRING String);
+NTAPI
+KdpSymbol(
+    IN LPSTR DllPath,
+    IN ULONG DllBase,
+    IN BOOLEAN Unload,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN PCONTEXT ContextRecord,
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame
+);
 
 BOOLEAN
-STDCALL
-KdpDetectConflicts(PCM_RESOURCE_LIST DriverList);
-              
-/* KD GLOBALS  ***************************************************************/
-
-/* serial debug connection */
-#define DEFAULT_DEBUG_PORT      2 /* COM2 */
-#define DEFAULT_DEBUG_COM1_IRQ  4 /* COM1 IRQ */
-#define DEFAULT_DEBUG_COM2_IRQ  3 /* COM2 IRQ */
-#define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
-
-/* KD Native Modes */
-#define KdScreen 0
-#define KdSerial 1
-#define KdFile 2
-#define KdMax 3
-
-/* KD Private Debug Modes */
-typedef struct _KDP_DEBUG_MODE
-{
-    union {
-        struct {
-            /* Native Modes */
-            UCHAR Screen :1;
-            UCHAR Serial :1;
-            UCHAR File   :1;
-    
-            /* Currently Supported Wrappers */
-            UCHAR Pice   :1;
-            UCHAR Gdb    :1;
-            UCHAR Bochs  :1;
-        };
-        
-        /* Generic Value */
-        ULONG Value;
-    };
-} KDP_DEBUG_MODE;
-
-/* KD Internal Debug Services */
-typedef enum _KDP_DEBUG_SERVICE
-{
-    DumpNonPagedPool = 0,
-    ManualBugCheck,
-    DumpNonPagedPoolStats,
-    DumpNewNonPagedPool,
-    DumpNewNonPagedPoolStats,
-    DumpAllThreads,
-    DumpUserThreads,
-    KdSpare1,
-    KdSpare2,
-    KdSpare3,
-    EnterDebugger
-} KDP_DEBUG_SERVICE;
-
-/* Dispatch Table for Wrapper Functions */
-typedef struct _KD_DISPATCH_TABLE
-{
-    LIST_ENTRY KdProvidersList;
-    PKDP_INIT_ROUTINE KdpInitRoutine;
-    PKDP_PRINT_ROUTINE KdpPrintRoutine;
-    PKDP_PROMPT_ROUTINE KdpPromptRoutine;  
-    PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine;
-} KD_DISPATCH_TABLE, *PKD_DISPATCH_TABLE;
-
-/* The current Debugging Mode */
-extern KDP_DEBUG_MODE KdpDebugMode;
-
-/* The current Port IRQ */
-extern ULONG KdpPortIrq;
-
-/* The current Port */
-extern ULONG KdpPort;
-
-/* Port Information for the Serial Native Mode */
-extern KD_PORT_INFORMATION SerialPortInfo;
-
-/* Init Functions for Native Providers */
-extern PKDP_INIT_ROUTINE InitRoutines[KdMax];
-
-/* Wrapper Init Function */
-extern PKDP_INIT_ROUTINE WrapperInitRoutine;
-                                                        
-/* Dispatch Tables for Native Providers */
-extern KD_DISPATCH_TABLE DispatchTable[KdMax];
-
-/* Dispatch Table for the Wrapper */
-extern KD_DISPATCH_TABLE WrapperTable;
-                                     
-/* The KD Native Provider List */
-extern LIST_ENTRY KdProviders;
-
-#endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */
+NTAPI
+KdpPollBreakInWithPortLock(
+    VOID
+);
+
+extern DBGKD_GET_VERSION64 KdVersionBlock;
+extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;
+extern LIST_ENTRY KdpDebuggerDataListHead;
+extern KSPIN_LOCK KdpDataSpinLock;
+extern LARGE_INTEGER KdPerformanceCounterRate;
+extern LARGE_INTEGER KdTimerStart;
+extern ULONG KdDisableCount;
+extern KD_CONTEXT KdpContext;
+extern PKDEBUG_ROUTINE KiDebugRoutine;
+extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
+extern BOOLEAN KdBreakAfterSymbolLoad;
+extern BOOLEAN KdPitchDebugger;
+extern BOOLEAN _KdDebuggerNotPresent;
+extern BOOLEAN _KdDebuggerEnabled;
+extern BOOLEAN KdAutoEnableOnEvent;
+extern BOOLEAN KdPreviouslyEnabled;
+extern BOOLEAN KdpDebuggerStructuresInitialized;
+extern BOOLEAN KdEnteredDebugger;
+extern KDPC KdpTimeSlipDpc;
+extern KTIMER KdpTimeSlipTimer;
+extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem;
+extern LONG KdpTimeSlipPending;
+extern PKEVENT KdpTimeSlipEvent;
+extern KSPIN_LOCK KdpTimeSlipEventLock;
+extern BOOLEAN KdpControlCPressed;
+extern BOOLEAN KdpControlCWaiting;
+extern BOOLEAN KdpPortLocked;
+extern KSPIN_LOCK KdpDebuggerLock;
+extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
+extern ULONG KdComponentTableSize;
+extern ULONG Kd_WIN2000_Mask;
+extern PULONG KdComponentTable[104];