diff --git a/reactos/drivers/base/kddll/kdcom.c b/reactos/drivers/base/kddll/kdcom.c index 343bce88004..3da95eed750 100644 --- a/reactos/drivers/base/kddll/kdcom.c +++ b/reactos/drivers/base/kddll/kdcom.c @@ -10,7 +10,7 @@ #include "kdcom.h" /* Define wait timeout value. */ -#define REPEAT_COUNT (1000 * 1000) +#define REPEAT_COUNT 100 /* serial debug connection */ #define DEFAULT_DEBUG_PORT 2 /* COM2 */ @@ -258,6 +258,20 @@ KdpReceiveByte(OUT PBYTE OutByte) /* We successfully got a byte */ return KDP_PACKET_RECEIVED; } + + /* Check if phase 1 is complete */ + if (KdpPhase1Complete) + { + /* Use hal to wait 1ms */ + KeStallExecutionProcessor(1000); + } + else + { + volatile unsigned long i; + + /* Do some busy waiting */ + for (i = 0; i < 1000; i++); + } } /* Timed out */ diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 43aca1d534a..46f6a9746b0 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -14,6 +14,7 @@ PFNDBGPRNT KdpDbgPrint = NULL; ULONG CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID; ULONG RemotePacketId = 0; +BOOLEAN KdpPhase1Complete = FALSE; /* PRIVATE FUNCTIONS **********************************************************/ @@ -88,11 +89,9 @@ NTAPI KdDebuggerInitialize1( IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL) { - // HACK: misuse this function to get a pointer to FrLdrDbgPrint - KdpDbgPrint = (PVOID)LoaderBlock; - KDDBGPRINT("KdDebuggerInitialize1\n"); + KdpPhase1Complete = TRUE; - return STATUS_NOT_IMPLEMENTED; + return STATUS_SUCCESS; } @@ -198,7 +197,7 @@ KdReceivePacket( switch (Packet.PacketType) { case PACKET_TYPE_KD_ACKNOWLEDGE: - /* Are we waiting for an ACK packet? */ + /* Are we waiting for an ACK packet? */ if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE && Packet.PacketId == (CurrentPacketId & ~SYNC_PACKET_ID)) { @@ -276,7 +275,7 @@ KdReceivePacket( if (MessageData) { /* Set the length of the message data */ - MessageData->Length = *DataLength; + MessageData->Length = (USHORT)*DataLength; /* Do we have data? */ if (MessageData->Length) @@ -359,7 +358,7 @@ KdSendPacket( /* Initialize a KD_PACKET */ Packet.PacketLeader = PACKET_LEADER; - Packet.PacketType = PacketType; + Packet.PacketType = (USHORT)PacketType; Packet.ByteCount = MessageHeader->Length; Packet.Checksum = KdpCalculateChecksum(MessageHeader->Buffer, MessageHeader->Length); diff --git a/reactos/drivers/base/kddll/kddll.h b/reactos/drivers/base/kddll/kddll.h index 50964141b8f..9c9284f30bc 100644 --- a/reactos/drivers/base/kddll/kddll.h +++ b/reactos/drivers/base/kddll/kddll.h @@ -25,6 +25,7 @@ typedef UCHAR BYTE, *PBYTE; typedef ULONG (*PFNDBGPRNT)(const char *Format, ...); extern PFNDBGPRNT KdpDbgPrint; +extern BOOLEAN KdpPhase1Complete; typedef enum {