Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / drivers / base / kdvm / kdvm.h
diff --git a/drivers/base/kdvm/kdvm.h b/drivers/base/kdvm/kdvm.h
new file mode 100644 (file)
index 0000000..2636577
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * COPYRIGHT:       GPL, see COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            drivers/base/kdvm/kdvm.h
+ * PURPOSE:         Base definitions for the kernel debugger.
+ * PROGRAMMER:      Timo Kreuzer (timo.kreuzer@reactos.org)
+ */
+
+#ifndef _KDDLL_H_
+#define _KDDLL_H_
+
+#define NOEXTAPI
+#include <ntifs.h>
+#include <windbgkd.h>
+#include <arc/arc.h>
+
+#undef RtlEqualMemory
+#define RtlEqualMemory(a, b, c) (RtlCompareMemory(a, b, c) != c)
+
+//#define KDDEBUG /* uncomment to enable debugging this dll */
+
+typedef ULONG (*PFNDBGPRNT)(const char *Format, ...);
+extern PFNDBGPRNT KdpDbgPrint;
+
+#ifndef KDDEBUG
+#define KDDBGPRINT(...)
+#else
+#define KDDBGPRINT KdpDbgPrint
+#endif
+
+#define KDRPC_PROTOCOL_VERSION 0x101
+#define CONNECTION_TEST_ROUNDS 2 /*100*/
+#define KDVM_BUFFER_SIZE (131072 + 1024)
+#define KDRPC_TEST_BUFFER_SIZE 512
+
+extern UCHAR KdVmDataBuffer[KDVM_BUFFER_SIZE];
+extern PHYSICAL_ADDRESS KdVmBufferPhysicalAddress;
+extern ULONG KdVmBufferPos;
+
+typedef enum
+{
+    KDP_PACKET_RECEIVED = 0,
+    KDP_PACKET_TIMEOUT = 1,
+    KDP_PACKET_RESEND = 2
+} KDP_STATUS;
+
+typedef struct _KDVM_MARSHAL_STRING
+{
+    USHORT Length;
+    USHORT MaximumLength;
+} KDVM_MARSHAL_STRING;
+
+#pragma pack(push,1)
+typedef struct
+{
+    CHAR Magic[8];
+    UCHAR Command;
+} KDVM_CMD_HEADER;
+
+typedef struct
+{
+    USHORT Id;
+    CHAR Magic[9];
+} KDVM_RECEIVE_HEADER, *PKDVM_RECEIVE_HEADER;
+
+typedef struct _KDVM_CONTEXT
+{
+    ULONG   RetryCount;
+    BOOLEAN BreakInRequested;
+    UCHAR align;
+} KDVM_CONTEXT, *PKDVM_CONTEXT;
+
+typedef struct
+{
+    struct
+    {
+        UCHAR KdDebuggerNotPresent : 1;
+        UCHAR RetryKdSendPacket : 1;
+        UCHAR KdDebuggerEnabledAvailable : 1;
+    };
+    BOOLEAN KdDebuggerEnabled;
+    USHORT Unused;
+} KDVM_SENDPACKET_INFO;
+
+typedef struct _KDVM_SEND_PKT_REQUEST
+{
+    KDVM_MARSHAL_STRING MessageHeader;
+    KDVM_MARSHAL_STRING MessageData;
+    KDVM_CONTEXT KdContext;
+    ULONG PacketType;
+    ULONG HeaderSize;
+    ULONG DataSize;
+    KDVM_SENDPACKET_INFO Info;
+} KDVM_SEND_PKT_REQUEST, *PKDVM_SEND_PKT_REQUEST;
+
+typedef struct _KDVM_SEND_PKT_RESULT
+{
+    UCHAR CommandType;
+    KDVM_CONTEXT KdContext;
+    KDVM_SENDPACKET_INFO Info;
+} KDVM_SEND_PKT_RESULT, *PKDVM_SEND_PKT_RESULT;
+
+typedef struct
+{
+    ULONG PacketType;
+    KDVM_SENDPACKET_INFO Info;
+    KDVM_MARSHAL_STRING MessageHeader;
+    KDVM_MARSHAL_STRING MessageData;
+    KDVM_CONTEXT KdContext;
+} KDVM_RECV_PKT_REQUEST;
+
+typedef struct
+{
+    UCHAR CommandType;
+    KDVM_MARSHAL_STRING MessageHeader;
+    KDVM_MARSHAL_STRING MessageData;
+    KDVM_CONTEXT KdContext;
+    KDP_STATUS KdStatus;
+    ULONG FullSize;
+    ULONG HeaderSize;
+    ULONG DataSize;
+    KDVM_SENDPACKET_INFO Info;
+} KDVM_RECV_PKT_RESULT, *PKDVM_RECV_PKT_RESULT;
+#pragma pack(pop)
+
+VOID
+NTAPI
+KdVmDbgDumpBuffer(
+    _In_ PVOID Buffer,
+    _In_ ULONG Size);
+
+VOID
+FASTCALL
+KdVmExchange(
+    _In_ ULONG_PTR PhysicalAddress,
+    _In_ SIZE_T BufferSize);
+
+VOID
+NTAPI
+KdVmPrepareBuffer(
+    VOID);
+
+VOID
+NTAPI
+KdVmKdVmExchangeData(
+    _Out_ PVOID* ReceiveData,
+    _Out_ PULONG ReceiveDataSize);
+
+
+#endif /* _KDDLL_H_ */