[ros-diffs] [tkreuzer] 38964: kdcom: Add KD_RECEIVE_CODE enum, implement KdpReceiveBuffer, HACK: misuse KdDebuggerInitialize1 to set a pointer to FrLdrDbgPrint

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue Jan 20 02:05:08 CET 2009


Author: tkreuzer
Date: Mon Jan 19 19:05:07 2009
New Revision: 38964

URL: http://svn.reactos.org/svn/reactos?rev=38964&view=rev
Log:
kdcom: Add KD_RECEIVE_CODE enum, implement KdpReceiveBuffer, HACK: misuse KdDebuggerInitialize1 to set a pointer to FrLdrDbgPrint

Modified:
    branches/ros-amd64-bringup/reactos/drivers/base/kdcom/i386/kdbg.c

Modified: branches/ros-amd64-bringup/reactos/drivers/base/kdcom/i386/kdbg.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drivers/base/kdcom/i386/kdbg.c?rev=38964&r1=38963&r2=38964&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/base/kdcom/i386/kdbg.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/drivers/base/kdcom/i386/kdbg.c [iso-8859-1] Mon Jan 19 19:05:07 2009
@@ -21,6 +21,13 @@
 #include "windbgkd.h"
 #include <kddll.h>
 #include <ioaccess.h> /* port intrinsics */
+
+typedef enum _KD_RECV_CODE
+{
+	KD_RECV_CODE_OK       = 0,
+	KD_RECV_CODE_TIMEOUT  = 1,
+	KD_RECV_CODE_FAILED   = 2
+} KD_RECV_CODE, * PKD_RECV_CODE;
 
 typedef struct _KD_PORT_INFORMATION
 {
@@ -134,6 +141,10 @@
 ULONG KdpPort;
 ULONG KdpPortIrq;
 
+// HACK!!!
+typedef ULONG (*DBGRNT)(const char *Format, ...);
+DBGRNT FrLdrDbgPrint = 0;
+
 /* STATIC FUNCTIONS *********************************************************/
 
 static BOOLEAN
@@ -531,6 +542,46 @@
 }
 
 /******************************************************************************
+ * \name KdpReceiveBuffer
+ * \brief Recieves data from the KD port and fills a buffer.
+ * \param Buffer Pointer to a buffer that receives the data.
+ * \param Size Size of data to receive in bytes.
+ * \return KD_RECV_CODE_OK if successful. 
+ *         KD_RECV_CODE_TIMEOUT if the receice timed out (10 seconds).
+ * \todo Handle timeout.
+ */
+KDSTATUS
+NTAPI
+KdpReceiveBuffer(
+    OUT PVOID Buffer,
+    IN  ULONG Size)
+{
+    ULONG i;
+    PUCHAR ByteBuffer = Buffer;
+    BOOLEAN Ret, TimeOut;
+
+    for (i = 0; i < Size; i++)
+    {
+        do
+        {
+            Ret = KdPortGetByteEx(&DefaultPort, &ByteBuffer[i]);
+            TimeOut = FALSE; // FIXME timeout after 10 Sec
+        }
+        while (!Ret | TimeOut);
+
+        if (TimeOut)
+        {
+            return KD_RECV_CODE_TIMEOUT;
+        }
+        FrLdrDbgPrint("Received byte: %x\n", ByteBuffer[i]);
+    }
+
+    return KD_RECV_CODE_OK;
+}
+
+/* NEW PUBLIC FUNCTIONS ******************************************************/
+
+/******************************************************************************
  * \name KdDebuggerInitialize0
  * \brief Phase 0 initialization.
  * \param [opt] LoaderBlock Pointer to the Loader parameter block. Can be NULL.
@@ -654,6 +705,8 @@
 KdDebuggerInitialize1(
     IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL)
 {
+    // HACK: misuse this function to get a pointer to FrLdrDbgPrint
+    FrLdrDbgPrint = (PVOID)LoaderBlock;
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
 }



More information about the Ros-diffs mailing list