- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[reactos.git] / reactos / ntoskrnl / include / internal / kd.h
index c5c7f09..f42e69e 100644 (file)
-/* $Id$
- *
- * kernel debugger prototypes
- */
-
 #ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
 #define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
 
-#include <internal/ke.h>
-#include <internal/ldr.h>
-#include <ntdll/ldr.h>
+//
+// Kernel Debugger Port Definition
+//
+typedef struct _KD_PORT_INFORMATION
+{
+    ULONG ComPort;
+    ULONG BaudRate;
+    ULONG BaseAddress;
+} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
 
 struct _KD_DISPATCH_TABLE;
-#define KdPrintEx(_x_) DbgPrintEx _x_
+extern KD_PORT_INFORMATION GdbPortInfo;
 
-#ifdef DBG
-#include "kdgdb.h"
-#include "kdbochs.h"
-#endif
+BOOLEAN
+NTAPI
+KdPortInitialize(
+    PKD_PORT_INFORMATION PortInformation,
+    ULONG Unknown1,
+    ULONG Unknown2
+);
+
+BOOLEAN
+NTAPI
+KdPortInitializeEx(
+    PKD_PORT_INFORMATION PortInformation,
+    ULONG Unknown1,
+    ULONG Unknown2
+);
+
+BOOLEAN
+NTAPI
+KdPortGetByte(
+    PUCHAR ByteRecieved);
+
+BOOLEAN
+NTAPI
+KdPortGetByteEx(
+    PKD_PORT_INFORMATION PortInformation,
+    PUCHAR ByteRecieved);
+
+VOID
+NTAPI
+KdPortPutByte(
+    UCHAR ByteToSend
+);
+
+VOID
+NTAPI
+KdPortPutByteEx(
+    PKD_PORT_INFORMATION PortInformation,
+    UCHAR ByteToSend
+);
 
 /* SYMBOL ROUTINES **********************************************************/
+#ifdef __NTOSKRNL__
 
 #if defined(KDBG) || defined(DBG)
 
 VOID
-KdbSymLoadUserModuleSymbols(IN PLDR_MODULE LdrModule);
+KdbSymLoadUserModuleSymbols(IN PLDR_DATA_TABLE_ENTRY LdrModule);
 
 VOID
 KdbSymFreeProcessSymbols(IN PEPROCESS Process);
 
 VOID
-KdbSymLoadDriverSymbols(IN PUNICODE_STRING Filename,
-                        IN PMODULE_OBJECT Module);
+KdbSymLoadDriverSymbols(
+    IN PUNICODE_STRING Filename,
+    IN PLDR_DATA_TABLE_ENTRY Module
+);
 
 VOID
-KdbSymUnloadDriverSymbols(IN PMODULE_OBJECT ModuleObject);
+KdbSymUnloadDriverSymbols(IN PLDR_DATA_TABLE_ENTRY ModuleObject);
 
 VOID
 KdbSymProcessBootSymbols(IN PCHAR FileName);
 
 VOID
-KdbSymInit(IN PMODULE_TEXT_SECTION NtoskrnlTextSection,
-           IN PMODULE_TEXT_SECTION LdrHalTextSection);
+KdbSymInit(
+    IN PLDR_DATA_TABLE_ENTRY NtoskrnlTextSection,
+    IN PLDR_DATA_TABLE_ENTRY LdrHalTextSection
+);
 
-BOOLEAN 
+BOOLEAN
 KdbSymPrintAddress(IN PVOID Address);
 
 VOID
 KdbDeleteProcessHook(IN PEPROCESS Process);
 
 NTSTATUS
-KdbSymGetAddressInformation(IN PROSSYM_INFO  RosSymInfo,
-                            IN ULONG_PTR  RelativeAddress,
-                            OUT PULONG LineNumber  OPTIONAL,
-                            OUT PCH FileName  OPTIONAL,
-                            OUT PCH FunctionName  OPTIONAL);
+KdbSymGetAddressInformation(
+    IN PROSSYM_INFO  RosSymInfo,
+    IN ULONG_PTR  RelativeAddress,
+    OUT PULONG LineNumber  OPTIONAL,
+    OUT PCH FileName  OPTIONAL,
+    OUT PCH FunctionName  OPTIONAL
+);
 
 typedef struct _KDB_MODULE_INFO
 {
@@ -108,63 +151,96 @@ typedef enum _KD_CONTINUE_TYPE
 
 typedef
 VOID
-STDCALL
-(*PKDP_INIT_ROUTINE)(struct _KD_DISPATCH_TABLE *DispatchTable,
-                     ULONG BootPhase);
+(STDCALL*PKDP_INIT_ROUTINE)(
+    struct _KD_DISPATCH_TABLE *DispatchTable,
+    ULONG BootPhase
+);
 
 typedef
 VOID
-STDCALL
-(*PKDP_PRINT_ROUTINE)(PCH String);
+(STDCALL*PKDP_PRINT_ROUTINE)(
+    LPSTR String,
+    ULONG Length
+);
 
 typedef
 VOID
-STDCALL
-(*PKDP_PROMPT_ROUTINE)(PCH String);
+(STDCALL*PKDP_PROMPT_ROUTINE)(PCH String);
 
 typedef
 KD_CONTINUE_TYPE
-STDCALL
-(*PKDP_EXCEPTION_ROUTINE)(PEXCEPTION_RECORD ExceptionRecord,
-                          PCONTEXT Context,
-                          PKTRAP_FRAME TrapFrame);
+(STDCALL*PKDP_EXCEPTION_ROUTINE)(
+    PEXCEPTION_RECORD ExceptionRecord,
+    PCONTEXT Context,
+    PKTRAP_FRAME TrapFrame
+);
 
 /* INIT ROUTINES *************************************************************/
 
 VOID
 STDCALL
-KdpScreenInit(struct _KD_DISPATCH_TABLE *DispatchTable,
-              ULONG BootPhase);
-              
+KdpScreenInit(
+    struct _KD_DISPATCH_TABLE *DispatchTable,
+    ULONG BootPhase
+);
+
 VOID
 STDCALL
-KdpSerialInit(struct _KD_DISPATCH_TABLE *DispatchTable,
-              ULONG BootPhase);
-              
+KdpSerialInit(
+    struct _KD_DISPATCH_TABLE *DispatchTable,
+    ULONG BootPhase
+);
+
 VOID
 STDCALL
-KdpInitDebugLog(struct _KD_DISPATCH_TABLE *DispatchTable,
-                ULONG BootPhase);
-                
+KdpInitDebugLog(
+    struct _KD_DISPATCH_TABLE *DispatchTable,
+    ULONG BootPhase
+);
+
+VOID
+STDCALL
+KdpBochsInit(
+    struct _KD_DISPATCH_TABLE *DispatchTable,
+    ULONG BootPhase
+);
+
+VOID
+STDCALL
+KdpGdbStubInit(
+    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);
-                          
+KdpEnterDebuggerException(
+    PEXCEPTION_RECORD ExceptionRecord,
+    KPROCESSOR_MODE PreviousMode,
+    PCONTEXT Context,
+    PKTRAP_FRAME TrapFrame,
+    BOOLEAN FirstChance,
+    BOOLEAN Gdb
+);
+
 ULONG
 STDCALL
-KdpPrintString(PANSI_STRING String);
+KdpPrintString(
+    LPSTR String,
+    ULONG Length);
 
 BOOLEAN
 STDCALL
 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList);
-              
+
+VOID
+STDCALL
+KdpBochsDebugPrint(
+    IN PCH Message,
+    IN ULONG Length
+);
+
 /* KD GLOBALS  ***************************************************************/
 
 /* serial debug connection */
@@ -177,24 +253,27 @@ KdpDetectConflicts(PCM_RESOURCE_LIST DriverList);
 #define KdScreen 0
 #define KdSerial 1
 #define KdFile 2
-#define KdMax 3
+#define KdBochs 3
+#define KdMax 4
 
 /* KD Private Debug Modes */
 typedef struct _KDP_DEBUG_MODE
 {
-    union {
-        struct {
+    union
+    {
+        struct
+        {
             /* Native Modes */
             UCHAR Screen :1;
             UCHAR Serial :1;
             UCHAR File   :1;
-    
+            UCHAR Bochs  :1;
+
             /* Currently Supported Wrappers */
             UCHAR Pice   :1;
             UCHAR Gdb    :1;
-            UCHAR Bochs  :1;
         };
-        
+
         /* Generic Value */
         ULONG Value;
     };
@@ -203,17 +282,17 @@ typedef struct _KDP_DEBUG_MODE
 /* KD Internal Debug Services */
 typedef enum _KDP_DEBUG_SERVICE
 {
-    DumpNonPagedPool           = 0x1e, /* a */
-    ManualBugCheck             = 0x30, /* b */
-    DumpNonPagedPoolStats      = 0x2e, /* c */
-    DumpNewNonPagedPool                = 0x20, /* d */
-    DumpNewNonPagedPoolStats   = 0x12, /* e */
-    DumpAllThreads             = 0x21, /* f */
-    DumpUserThreads            = 0x22, /* g */
-    KdSpare1                   = 0x23, /* h */
-    KdSpare2                   = 0x17, /* i */
-    KdSpare3                   = 0x24, /* j */
-    EnterDebugger              = 0x25  /* k */
+    DumpNonPagedPool = 0x1e, /* a */
+    ManualBugCheck = 0x30, /* b */
+    DumpNonPagedPoolStats = 0x2e, /* c */
+    DumpNewNonPagedPool = 0x20, /* d */
+    DumpNewNonPagedPoolStats = 0x12, /* e */
+    DumpAllThreads = 0x21, /* f */
+    DumpUserThreads = 0x22, /* g */
+    KdSpare1 = 0x23, /* h */
+    KdSpare2 = 0x17, /* i */
+    KdSpare3 = 0x24, /* j */
+    EnterDebugger = 0x25  /* k */
 } KDP_DEBUG_SERVICE;
 
 /* Dispatch Table for Wrapper Functions */
@@ -222,7 +301,7 @@ typedef struct _KD_DISPATCH_TABLE
     LIST_ENTRY KdProvidersList;
     PKDP_INIT_ROUTINE KdpInitRoutine;
     PKDP_PRINT_ROUTINE KdpPrintRoutine;
-    PKDP_PROMPT_ROUTINE KdpPromptRoutine;  
+    PKDP_PROMPT_ROUTINE KdpPromptRoutine;
     PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine;
 } KD_DISPATCH_TABLE, *PKD_DISPATCH_TABLE;
 
@@ -243,14 +322,18 @@ 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;
 
+/* Whether to enter KDB as early as possible or not */
+extern BOOLEAN KdpEarlyBreak;
+
+#endif
 #endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */