[KD64]
[reactos.git] / reactos / ntoskrnl / include / internal / kd64.h
index 6387e6f..213c832 100644 (file)
-/*\r
- * PROJECT:         ReactOS Kernel\r
- * LICENSE:         GPL - See COPYING in the top level directory\r
- * FILE:            ntoskrnl/include/kd64.h\r
- * PURPOSE:         Internal header for the KD64 Library\r
- * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)\r
- */\r
-\r
-//\r
-// Breakpoint Status Flags\r
-//\r
-typedef enum _KDP_BREAKPOINT_FLAGS\r
-{\r
-    KdpBreakpointActive = 1,\r
-    KdpBreakpointPending = 2,\r
-    KdpBreakpointSuspended = 4,\r
-    KdpBreakpointExpired = 8\r
-} KDP_BREAKPOINT_FLAGS;\r
-\r
-//\r
-// Structure for Breakpoints\r
-//\r
-typedef struct _BREAKPOINT_ENTRY\r
-{\r
-    ULONG Flags;\r
-    PKPROCESS Process;\r
-    PVOID Address;\r
-    UCHAR Content;\r
-} BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;\r
-\r
-//\r
-// Debug and Multi-Processor Switch Routine Definitions\r
-//\r
-typedef\r
-BOOLEAN\r
-(NTAPI *PKDEBUG_ROUTINE)(\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame,\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN PCONTEXT Context,\r
-    IN KPROCESSOR_MODE PreviousMode,\r
-    IN BOOLEAN SecondChance\r
-);\r
-\r
-typedef\r
-BOOLEAN\r
-(NTAPI *PKDEBUG_SWITCH_ROUTINE)(\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN PCONTEXT Context,\r
-    IN BOOLEAN SecondChance\r
-);\r
-\r
-//\r
-// Debug and Multi-Processor Switch Routines\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdpEnterDebuggerException(\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame,\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN PCONTEXT Context,\r
-    IN KPROCESSOR_MODE PreviousMode,\r
-    IN BOOLEAN SecondChance\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpSwitchProcessor(\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN OUT PCONTEXT ContextRecord,\r
-    IN BOOLEAN SecondChanceException\r
-);\r
-\r
-//\r
-// Time Slip Support\r
-//\r
-VOID\r
-NTAPI\r
-KdpTimeSlipWork(\r
-    IN PVOID Context\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdpTimeSlipDpcRoutine(\r
-    IN PKDPC Dpc,\r
-    IN PVOID DeferredContext,\r
-    IN PVOID SystemArgument1,\r
-    IN PVOID SystemArgument2\r
-);\r
-\r
-//\r
-// Debug Trap Handlers\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdpStub(\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame,\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN PCONTEXT ContextRecord,\r
-    IN KPROCESSOR_MODE PreviousMode,\r
-    IN BOOLEAN SecondChanceException\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpTrap(\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame,\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN PCONTEXT ContextRecord,\r
-    IN KPROCESSOR_MODE PreviousMode,\r
-    IN BOOLEAN SecondChanceException\r
-);\r
-\r
-//\r
-// Port Locking\r
-//\r
-VOID\r
-NTAPI\r
-KdpPortLock(\r
-    VOID\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdpPortUnlock(\r
-    VOID\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpPollBreakInWithPortLock(\r
-    VOID\r
-);\r
-\r
-//\r
-// Debugger Enable, Enter and Exit\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdEnterDebugger(\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdExitDebugger(\r
-    IN BOOLEAN Entered\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-KdEnableDebuggerWithLock(\r
-    IN BOOLEAN NeedLock\r
-);\r
-\r
-//\r
-// Debug Event Handlers\r
-//\r
-ULONG\r
-NTAPI\r
-KdpPrint(\r
-    IN ULONG ComponentId,\r
-    IN ULONG ComponentMask,\r
-    IN LPSTR String,\r
-    IN ULONG Length,\r
-    IN KPROCESSOR_MODE PreviousMode,\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame,\r
-    OUT PBOOLEAN Status\r
-);\r
-\r
-ULONG\r
-NTAPI\r
-KdpSymbol(\r
-    IN PSTRING DllPath,\r
-    IN PKD_SYMBOLS_INFO DllBase,\r
-    IN BOOLEAN Unload,\r
-    IN KPROCESSOR_MODE PreviousMode,\r
-    IN PCONTEXT ContextRecord,\r
-    IN PKTRAP_FRAME TrapFrame,\r
-    IN PKEXCEPTION_FRAME ExceptionFrame\r
-);\r
-\r
-//\r
-// State Change Notifications\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdpReportLoadSymbolsStateChange(\r
-    IN PSTRING PathName,\r
-    IN PKD_SYMBOLS_INFO SymbolInfo,\r
-    IN BOOLEAN Unload,\r
-    IN OUT PCONTEXT Context\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpReportExceptionStateChange(\r
-    IN PEXCEPTION_RECORD ExceptionRecord,\r
-    IN OUT PCONTEXT Context,\r
-    IN BOOLEAN SecondChanceException\r
-);\r
-\r
-//\r
-// Breakpoint Support\r
-//\r
-VOID\r
-NTAPI\r
-KdpRestoreAllBreakpoints(\r
-    VOID\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpDeleteBreakpoint(\r
-    IN ULONG BpEntry\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpDeleteBreakpointRange(\r
-    IN PVOID Base,\r
-    IN PVOID Limit\r
-);\r
-\r
-ULONG\r
-NTAPI\r
-KdpAddBreakpoint(\r
-    IN PVOID Address\r
-);\r
-\r
-//\r
-// Global KD Data\r
-//\r
-extern DBGKD_GET_VERSION64 KdVersionBlock;\r
-extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;\r
-extern LIST_ENTRY KdpDebuggerDataListHead;\r
-extern KSPIN_LOCK KdpDataSpinLock;\r
-extern LARGE_INTEGER KdPerformanceCounterRate;\r
-extern LARGE_INTEGER KdTimerStart;\r
-extern ULONG KdDisableCount;\r
-extern KD_CONTEXT KdpContext;\r
-extern PKDEBUG_ROUTINE KiDebugRoutine;\r
-extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;\r
-extern BOOLEAN KdBreakAfterSymbolLoad;\r
-extern BOOLEAN KdPitchDebugger;\r
-extern BOOLEAN _KdDebuggerNotPresent;\r
-extern BOOLEAN _KdDebuggerEnabled;\r
-extern BOOLEAN KdAutoEnableOnEvent;\r
-extern BOOLEAN KdPreviouslyEnabled;\r
-extern BOOLEAN KdpDebuggerStructuresInitialized;\r
-extern BOOLEAN KdEnteredDebugger;\r
-extern KDPC KdpTimeSlipDpc;\r
-extern KTIMER KdpTimeSlipTimer;\r
-extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem;\r
-extern LONG KdpTimeSlipPending;\r
-extern PKEVENT KdpTimeSlipEvent;\r
-extern KSPIN_LOCK KdpTimeSlipEventLock;\r
-extern BOOLEAN KdpPortLocked;\r
-extern BOOLEAN KdpControlCPressed;\r
-extern KSPIN_LOCK KdpDebuggerLock;\r
-extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;\r
-extern ULONG KdComponentTableSize;\r
-extern ULONG Kd_WIN2000_Mask;\r
-extern PULONG KdComponentTable[104];\r
-extern CHAR KdpMessageBuffer[4096], KdpPathBuffer[4096];\r
-extern BREAKPOINT_ENTRY KdpBreakpointTable[20];\r
-extern ULONG KdpBreakpointInstruction;\r
-extern BOOLEAN KdpOweBreakpoint;\r
-extern BOOLEAN BreakpointsSuspended;\r
-extern ULONG KdpNumInternalBreakpoints;\r
-extern ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd;\r
-extern ULONG TraceDataBuffer[40];\r
-extern ULONG TraceDataBufferPosition;\r
+/*
+ * PROJECT:         ReactOS Kernel
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            ntoskrnl/include/kd64.h
+ * PURPOSE:         Internal header for the KD64 Library
+ * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
+ */
+
+//
+// Maximum supported number of breakpoints
+//
+#define KD_BREAKPOINT_MAX                               32
+
+//
+// Breakpoint Status Flags
+//
+typedef enum _KDP_BREAKPOINT_FLAGS
+{
+    KdpBreakpointActive = 1,
+    KdpBreakpointPending = 2,
+    KdpBreakpointSuspended = 4,
+    KdpBreakpointExpired = 8
+} KDP_BREAKPOINT_FLAGS;
+
+//
+// Structure for Breakpoints
+//
+typedef struct _BREAKPOINT_ENTRY
+{
+    ULONG Flags;
+    PKPROCESS Process;
+    PVOID Address;
+    KD_BREAKPOINT_TYPE Content;
+} BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;
+
+//
+// Debug and Multi-Processor Switch Routine Definitions
+//
+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
+);
+
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_SWITCH_ROUTINE)(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN PCONTEXT Context,
+    IN BOOLEAN SecondChance
+);
+
+//
+// Initialization Routines
+//
+BOOLEAN
+NTAPI
+KdInitSystem(
+    ULONG Reserved,
+    PLOADER_PARAMETER_BLOCK LoaderBlock
+);
+
+VOID
+NTAPI
+KdUpdateDataBlock(
+    VOID
+);
+
+//
+// Multi-Processor Switch Support
+//
+BOOLEAN
+NTAPI
+KdpSwitchProcessor(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN OUT PCONTEXT ContextRecord,
+    IN BOOLEAN SecondChanceException
+);
+
+//
+// Time Slip Support
+//
+VOID
+NTAPI
+KdpTimeSlipWork(
+    IN PVOID Context
+);
+
+VOID
+NTAPI
+KdpTimeSlipDpcRoutine(
+    IN PKDPC Dpc,
+    IN PVOID DeferredContext,
+    IN PVOID SystemArgument1,
+    IN PVOID SystemArgument2
+);
+
+//
+// Debug Trap Handlers
+//
+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
+);
+
+//
+// Port Locking
+//
+VOID
+NTAPI
+KdpPortLock(
+    VOID
+);
+
+VOID
+NTAPI
+KdpPortUnlock(
+    VOID
+);
+
+BOOLEAN
+NTAPI
+KdpPollBreakInWithPortLock(
+    VOID
+);
+
+//
+// Debugger Enable, Enter and Exit
+//
+BOOLEAN
+NTAPI
+KdEnterDebugger(
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+VOID
+NTAPI
+KdExitDebugger(
+    IN BOOLEAN Entered
+);
+
+NTSTATUS
+NTAPI
+KdEnableDebuggerWithLock(
+    IN BOOLEAN NeedLock
+);
+
+//
+// Debug Event Handlers
+//
+NTSTATUS
+NTAPI
+KdpPrint(
+    IN ULONG ComponentId,
+    IN ULONG ComponentMask,
+    IN LPSTR String,
+    IN USHORT Length,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame,
+    OUT PBOOLEAN Status
+);
+
+BOOLEAN
+NTAPI
+KdpPrompt(
+    IN LPSTR InString,
+    IN USHORT InStringLength,
+    OUT LPSTR OutString,
+    IN USHORT OutStringLength,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+VOID
+NTAPI
+KdpSymbol(
+    IN PSTRING DllPath,
+    IN PKD_SYMBOLS_INFO DllBase,
+    IN BOOLEAN Unload,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN PCONTEXT ContextRecord,
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+VOID
+NTAPI
+KdpCommandString(
+    IN ULONG Length,
+    IN LPSTR String,
+    IN KPROCESSOR_MODE PreviousMode,
+    IN PCONTEXT ContextRecord,
+    IN PKTRAP_FRAME TrapFrame,
+    IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+//
+// State Change Notifications
+//
+BOOLEAN
+NTAPI
+KdpReportLoadSymbolsStateChange(
+    IN PSTRING PathName,
+    IN PKD_SYMBOLS_INFO SymbolInfo,
+    IN BOOLEAN Unload,
+    IN OUT PCONTEXT Context
+);
+
+BOOLEAN
+NTAPI
+KdpReportExceptionStateChange(
+    IN PEXCEPTION_RECORD ExceptionRecord,
+    IN OUT PCONTEXT Context,
+    IN BOOLEAN SecondChanceException
+);
+
+//
+// Breakpoint Support
+//
+VOID
+NTAPI
+KdpRestoreAllBreakpoints(
+    VOID
+);
+
+BOOLEAN
+NTAPI
+KdpDeleteBreakpoint(
+    IN ULONG BpEntry
+);
+
+BOOLEAN
+NTAPI
+KdpDeleteBreakpointRange(
+    IN PVOID Base,
+    IN PVOID Limit
+);
+
+ULONG
+NTAPI
+KdpAddBreakpoint(
+    IN PVOID Address
+);
+
+//
+// Architecture dependent support routines
+//
+
+//
+// Version
+//
+VOID
+NTAPI
+KdpSysGetVersion(
+    IN PDBGKD_GET_VERSION64 Version
+);
+
+//
+// Context
+//
+VOID
+NTAPI
+KdpGetStateChange(
+    IN PDBGKD_MANIPULATE_STATE64 State,
+    IN PCONTEXT Context
+);
+
+VOID
+NTAPI
+KdpSetContextState(
+    IN PDBGKD_WAIT_STATE_CHANGE64 WaitStateChange,
+    IN PCONTEXT Context
+);
+
+//
+// MSR
+//
+NTSTATUS
+NTAPI
+KdpSysReadMsr(
+    IN ULONG Msr,
+    OUT PLARGE_INTEGER MsrValue
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteMsr(
+    IN ULONG Msr,
+    IN PLARGE_INTEGER MsrValue
+);
+
+//
+// Bus
+//
+NTSTATUS
+NTAPI
+KdpSysReadBusData(
+    IN ULONG BusDataType,
+    IN ULONG BusNumber,
+    IN ULONG SlotNumber,
+    IN PVOID Buffer,
+    IN ULONG Offset,
+    IN ULONG Length,
+    OUT PULONG ActualLength
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteBusData(
+    IN ULONG BusDataType,
+    IN ULONG BusNumber,
+    IN ULONG SlotNumber,
+    IN PVOID Buffer,
+    IN ULONG Offset,
+    IN ULONG Length,
+    OUT PULONG ActualLength
+);
+
+//
+// Control Space
+//
+NTSTATUS
+NTAPI
+KdpSysReadControlSpace(
+    IN ULONG Processor,
+    IN ULONG64 BaseAddress,
+    IN PVOID Buffer,
+    IN ULONG Length,
+    OUT PULONG ActualLength
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteControlSpace(
+    IN ULONG Processor,
+    IN ULONG64 BaseAddress,
+    IN PVOID Buffer,
+    IN ULONG Length,
+    OUT PULONG ActualLength
+);
+
+//
+// I/O Space
+//
+NTSTATUS
+NTAPI
+KdpSysReadIoSpace(
+    IN ULONG InterfaceType,
+    IN ULONG BusNumber,
+    IN ULONG AddressSpace,
+    IN ULONG64 IoAddress,
+    IN PVOID DataValue,
+    IN ULONG DataSize,
+    OUT PULONG ActualDataSize
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteIoSpace(
+    IN ULONG InterfaceType,
+    IN ULONG BusNumber,
+    IN ULONG AddressSpace,
+    IN ULONG64 IoAddress,
+    IN PVOID DataValue,
+    IN ULONG DataSize,
+    OUT PULONG ActualDataSize
+);
+
+//
+// Low Memory
+//
+NTSTATUS
+NTAPI
+KdpSysCheckLowMemory(
+    IN ULONG Flags
+);
+
+//
+// Internal routine for sending strings directly to the debugger
+//
+VOID
+__cdecl
+KdpDprintf(
+    IN PCHAR Format,
+    ...
+);
+
+//
+// Global KD Data
+//
+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 KdpPortLocked;
+extern BOOLEAN KdpControlCPressed;
+extern KSPIN_LOCK KdpDebuggerLock;
+extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
+extern ULONG KdComponentTableSize;
+extern ULONG Kd_WIN2000_Mask;
+extern PULONG KdComponentTable[104];
+extern CHAR KdpMessageBuffer[4096], KdpPathBuffer[4096];
+extern BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX];
+extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction;
+extern BOOLEAN KdpOweBreakpoint;
+extern BOOLEAN BreakpointsSuspended;
+extern ULONG KdpNumInternalBreakpoints;
+extern ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd;
+extern ULONG TraceDataBuffer[40];
+extern ULONG TraceDataBufferPosition;