From eabd9536dd8aff86d56762f2779bd04de0dd6c67 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 20 Jan 2009 03:17:31 +0000 Subject: [PATCH] kdcom: partly handle control packets, now we resend our data on reset packets, but WinDbg still doesn't like them. svn path=/branches/ros-amd64-bringup/; revision=38967 --- reactos/drivers/base/kdcom/i386/kdbg.c | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/base/kdcom/i386/kdbg.c b/reactos/drivers/base/kdcom/i386/kdbg.c index 5e4d8e2a2f4..0b9e5a720a7 100644 --- a/reactos/drivers/base/kdcom/i386/kdbg.c +++ b/reactos/drivers/base/kdcom/i386/kdbg.c @@ -878,9 +878,9 @@ KdReceivePacket( /* Step 3 - Read ByteCount */ RcvCode = KdpReceiveBuffer(&Packet.ByteCount, sizeof(USHORT)); - if (RcvCode != KdPacketReceived) + if (RcvCode != KdPacketReceived || Packet.ByteCount > PACKET_MAX_SIZE) { - /* Didn't receive ByteCount. Start over. */ + /* Didn't receive ByteCount or it's too big. Start over. */ continue; } @@ -913,6 +913,30 @@ KdReceivePacket( FrLdrDbgPrint("KdReceivePacket 5, Checksum == 0x%x\n", Packet.Checksum); + /* Step 6 - Handle control packets */ + if (Packet.PacketLeader == CONTROL_PACKET_LEADER) + { + switch (Packet.PacketType) + { + case PACKET_TYPE_KD_ACKNOWLEDGE: + /* Remote acknowledges the last packet */ + return KdPacketReceived; + + case PACKET_TYPE_KD_RESEND: + /* Remote wants us to resend the last packet */ + return KdPacketNeedsResend; + + case PACKET_TYPE_KD_RESET: + FrLdrDbgPrint("KdReceivePacket - got a reset packet\n"); + // FIXME + return KdPacketNeedsResend; + + default: + FrLdrDbgPrint("KdReceivePacket - got unknown control packet\n"); + return KdPacketNeedsResend; + } + } + }