Author: tkreuzer
Date: Thu Mar 25 06:12:42 2010
New Revision: 46430
URL:
http://svn.reactos.org/svn/reactos?rev=46430&view=rev
Log:
revert the changes to the old kdcom
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/drive…
==============================================================================
--- 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] Thu Mar
25 06:12:42 2010
@@ -5,7 +5,6 @@
* PURPOSE: Serial i/o functions for the kernel debugger.
* PROGRAMMER: Alex Ionescu
* Hervé Poussineau
- * Timo Kreuzer
*/
/* INCLUDES *****************************************************************/
@@ -16,7 +15,6 @@
#define NDEBUG
#include <halfuncs.h>
#include <stdio.h>
-#include <stdlib.h>
#include <debug.h>
#include "arc/arc.h"
#include "windbgkd.h"
@@ -27,7 +25,7 @@
{
ULONG ComPort;
ULONG BaudRate;
- ULONG_PTR BaseAddress;
+ ULONG BaseAddress;
} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
BOOLEAN
@@ -54,12 +52,6 @@
KdPortPutByteEx(
IN PKD_PORT_INFORMATION PortInformation,
IN UCHAR ByteToSend);
-
-/* serial debug connection */
-#define DEFAULT_DEBUG_PORT 2 /* COM2 */
-#define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
-#define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
-#define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
#define DEFAULT_BAUD_RATE 19200
@@ -71,8 +63,6 @@
const ULONG BaseArray[3] = {0, 0x80006000, 0x80007000};
#elif defined(_M_ARM)
const ULONG BaseArray[2] = {0, 0xF1012000};
-#elif defined(_M_AMD64)
-const ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
#else
#error Unknown architecture
#endif
@@ -125,8 +115,6 @@
/* GLOBAL VARIABLES *********************************************************/
-ULONG CurrentPacketId = INITIAL_PACKET_ID;
-
/* STATIC VARIABLES *********************************************************/
static KD_PORT_INFORMATION DefaultPort = { 0, 0, 0 };
@@ -134,18 +122,12 @@
/* The com port must only be initialized once! */
static BOOLEAN PortInitialized = FALSE;
-ULONG KdpPort;
-ULONG KdpPortIrq;
-
-// HACK!!!
-typedef ULONG (*DBGRNT)(const char *Format, ...);
-DBGRNT FrLdrDbgPrint = 0;
/* STATIC FUNCTIONS *********************************************************/
static BOOLEAN
KdpDoesComPortExist(
- IN ULONG_PTR BaseAddress)
+ IN ULONG BaseAddress)
{
BOOLEAN found;
UCHAR mcr;
@@ -204,14 +186,6 @@
/* FUNCTIONS ****************************************************************/
-
-NTSTATUS
-DriverEntry(
- IN PDRIVER_OBJECT DriverObject,
- IN PUNICODE_STRING RegistryPath)
-{
- return STATUS_SUCCESS;
-}
/* HAL.KdPortInitialize */
BOOLEAN
@@ -272,7 +246,7 @@
IN ULONG Unknown1,
IN ULONG Unknown2)
{
- ULONG_PTR ComPortBase;
+ ULONG ComPortBase;
CHAR buffer[80];
ULONG divisor;
UCHAR lcr;
@@ -493,270 +467,25 @@
return TRUE;
}
-/* NEW INTERNAL FUNCTIONS ****************************************************/
-
-/******************************************************************************
- * \name KdpCalculateChecksum
- * \brief Calculates the checksum for the packet data.
- * \param Buffer Pointer to the packet data.
- * \param Length Length of data in bytes.
- * \return The calculated checksum.
- * \sa
http://www.vista-xp.co.uk/forums/technical-reference-library/2540-basics-de…
- */
-ULONG
-NTAPI
-KdpCalculateChecksum(
- IN PVOID Buffer,
- IN ULONG Length)
-{
- ULONG i, Checksum = 0;
-
- for (i = 0; i < Length; i++)
- {
- Checksum += ((PUCHAR)Buffer)[i];
- }
- return Checksum;
-}
-
-/******************************************************************************
- * \name KdpSendBuffer
- * \brief Sends a buffer of data to the KD port.
- * \param Buffer Pointer to the data.
- * \param Size Size of data in bytes.
- */
-VOID
-NTAPI
-KdpSendBuffer(
- IN PVOID Buffer,
- IN ULONG Size)
-{
- INT i;
- for (i = 0; i < Size; i++)
- {
- KdPortPutByteEx(&DefaultPort, ((PUCHAR)Buffer)[i]);
- }
-}
-
-
-/******************************************************************************
- * \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 KdPacketReceived if successful.
- * KdPacketTimedOut 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 KdPacketTimedOut;
- }
-// FrLdrDbgPrint("Received byte: %x\n", ByteBuffer[i]);
- }
-
- return KdPacketReceived;
-}
-
-KDSTATUS
-NTAPI
-KdpReceivePacketLeader(
- OUT PULONG PacketLeader)
-{
- UCHAR Byte, PrevByte;
- ULONG i, Temp;
- KDSTATUS RcvCode;
-
- Temp = 0;
- PrevByte = 0;
- for (i = 0; i < 4; i++)
- {
- RcvCode = KdpReceiveBuffer(&Byte, sizeof(UCHAR));
- Temp = (Temp << 8) | Byte;
- if ( (RcvCode != KdPacketReceived) ||
- ((Byte != PACKET_LEADER_BYTE) &&
- (Byte != CONTROL_PACKET_LEADER_BYTE)) ||
- (PrevByte != 0 && Byte != PrevByte) )
- {
- return KdPacketNeedsResend;
- }
- PrevByte = Byte;
- }
-
- *PacketLeader = Temp;
-
- return KdPacketReceived;
-}
-
-
-VOID
-NTAPI
-KdpSendControlPacket(
- IN USHORT PacketType,
- IN ULONG PacketId OPTIONAL)
-{
- KD_PACKET Packet;
-
- Packet.PacketLeader = CONTROL_PACKET_LEADER;
- Packet.PacketId = PacketId;
- Packet.ByteCount = 0;
- Packet.Checksum = 0;
- Packet.PacketType = PacketType;
-
- KdpSendBuffer(&Packet, sizeof(KD_PACKET));
-}
-
-
-/* NEW PUBLIC FUNCTIONS ******************************************************/
-
-/******************************************************************************
- * \name KdDebuggerInitialize0
- * \brief Phase 0 initialization.
- * \param [opt] LoaderBlock Pointer to the Loader parameter block. Can be NULL.
- * \return Status
+/*
+ * @unimplemented
*/
NTSTATUS
NTAPI
KdDebuggerInitialize0(
IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL)
{
- ULONG Value;
- PCHAR CommandLine, Port, BaudRate, Irq;
-
- /* Apply default values */
- KdpPortIrq = 0;
- DefaultPort.ComPort = DEFAULT_DEBUG_PORT;
- DefaultPort.BaudRate = DEFAULT_DEBUG_BAUD_RATE;
-
- /* Check if e have a LoaderBlock */
- if (LoaderBlock)
- {
- /* Get the Command Line */
- CommandLine = LoaderBlock->LoadOptions;
-
- /* Upcase it */
- _strupr(CommandLine);
-
- /* Get the port and baud rate */
- Port = strstr(CommandLine, "DEBUGPORT");
- BaudRate = strstr(CommandLine, "BAUDRATE");
- Irq = strstr(CommandLine, "IRQ");
-
- /* Check if we got the /DEBUGPORT parameter */
- if (Port)
- {
- /* Move past the actual string, to reach the port*/
- Port += strlen("DEBUGPORT");
-
- /* Now get past any spaces and skip the equal sign */
- while (*Port == ' ') Port++;
- Port++;
-
- /* Do we have a serial port? */
- if (strncmp(Port, "COM", 3) != 0)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Gheck for a valid Serial Port */
- Port += 3;
- Value = atol(Port);
- if (Value > 4)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Set the port to use */
- DefaultPort.ComPort = Value;
- }
-
- /* Check if we got a baud rate */
- if (BaudRate)
- {
- /* Move past the actual string, to reach the rate */
- BaudRate += strlen("BAUDRATE");
-
- /* Now get past any spaces */
- while (*BaudRate == ' ') BaudRate++;
-
- /* And make sure we have a rate */
- if (*BaudRate)
- {
- /* Read and set it */
- Value = atol(BaudRate + 1);
- if (Value) DefaultPort.BaudRate = Value;
- }
- }
-
- /* Check Serial Port Settings [IRQ] */
- if (Irq)
- {
- /* Move past the actual string, to reach the rate */
- Irq += strlen("IRQ");
-
- /* Now get past any spaces */
- while (*Irq == ' ') Irq++;
-
- /* And make sure we have an IRQ */
- if (*Irq)
- {
- /* Read and set it */
- Value = atol(Irq + 1);
- if (Value) KdpPortIrq = Value;
- }
- }
- }
-
- // HACK use com1 for FrLdrDbg, com2 for WinDbg
- DefaultPort.ComPort = 2;
-
- /* Get base address */
- DefaultPort.BaseAddress = BaseArray[DefaultPort.ComPort];
-
- /* Check if the COM port does exist */
- if (!KdpDoesComPortExist(DefaultPort.BaseAddress))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Initialize the port */
- KdPortInitializeEx(&DefaultPort, 0, 0);
- PortInitialized = TRUE;
-
- return STATUS_SUCCESS;
-}
-
-/******************************************************************************
- * \name KdDebuggerInitialize1
- * \brief Phase 1 initialization.
- * \param [opt] LoaderBlock Pointer to the Loader parameter block. Can be NULL.
- * \return Status
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
*/
NTSTATUS
NTAPI
KdDebuggerInitialize1(
IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL)
{
- // HACK: misuse this function to get a pointer to FrLdrDbgPrint
- FrLdrDbgPrint = (PVOID)LoaderBlock;
return STATUS_NOT_IMPLEMENTED;
}
@@ -795,86 +524,12 @@
IN PSTRING MessageData,
IN OUT PKD_CONTEXT Context)
{
- KD_PACKET Packet;
- KDSTATUS RcvCode;
-
- for (;;)
- {
- /* Initialize a KD_PACKET */
- Packet.PacketLeader = PACKET_LEADER;
- Packet.PacketType = PacketType;
- Packet.ByteCount = MessageHeader->Length;
- Packet.Checksum = KdpCalculateChecksum(MessageHeader->Buffer,
- MessageHeader->Length);
-
- /* If we have message data, add it to the packet */
- if (MessageData)
- {
- Packet.ByteCount += MessageData->Length;
- Packet.Checksum += KdpCalculateChecksum(MessageData->Buffer,
- MessageData->Length);
- }
-
- /* Set the packet id */
- Packet.PacketId = CurrentPacketId;
-
- /* Send the packet header to the KD port */
- KdpSendBuffer(&Packet, sizeof(KD_PACKET));
-
- /* Send the message header */
- KdpSendBuffer(MessageHeader->Buffer, MessageHeader->Length);
-
- /* If we have meesage data, also send it */
- if (MessageData)
- {
- KdpSendBuffer(MessageData->Buffer, MessageData->Length);
- }
-
- /* Finalize with a trailing byte */
- KdPortPutByte(PACKET_TRAILING_BYTE);
-
- /* Wait for acknowledge */
- RcvCode = KdReceivePacket(PACKET_TYPE_KD_ACKNOWLEDGE,
- NULL,
- NULL,
- 0,
- NULL);
-
- /* Did we succeed? */
- if (RcvCode == KdPacketReceived)
- {
- CurrentPacketId &= ~SYNC_PACKET_ID;
- break;
- }
-
- /* PACKET_TYPE_KD_DEBUG_IO is allowed to instantly timeout */
- if (PacketType == PACKET_TYPE_KD_DEBUG_IO)
- {
- /* No response, silently fail. */
-// return;
- }
-
- /* Packet timed out, send it again */
- }
-
+ UNIMPLEMENTED;
return;
}
-
-/******************************************************************************
- * \name KdReceivePacket
- * \brief Receive a packet from the KD port.
- * \param [in] PacketType Describes the type of the packet to receive.
- * This can be one of the PACKET_TYPE_ constants.
- * \param [out] MessageHeader Pointer to a STRING structure for the header.
- * \param [out] MessageData Pointer to a STRING structure for the data.
- * \return KdPacketReceived if successful, KdPacketTimedOut if the receive
- * timed out, KdPacketNeedsResend to signal that the last packet needs
- * to be sent again.
- * \note If PacketType is PACKET_TYPE_KD_POLL_BREAKIN, the function doesn't
- * wait for any data, but returns KdPacketTimedOut instantly if no breakin
- * packet byte is received.
- * \sa
http://www.nynaeve.net/?p=169
+/*
+ * @unimplemented
*/
KDSTATUS
NTAPI
@@ -885,215 +540,8 @@
OUT PULONG DataLength,
IN OUT PKD_CONTEXT Context)
{
- UCHAR Byte = 0;
- KDSTATUS RcvCode;
- KD_PACKET Packet;
- ULONG Checksum;
-
- /* Special handling for breakin packet */
- if(PacketType == PACKET_TYPE_KD_POLL_BREAKIN)
- {
- if (KdPortGetByteEx(&DefaultPort, &Byte))
- {
- if (Byte == BREAKIN_PACKET_BYTE)
- {
- return KdPacketReceived;
- }
- }
- return KdPacketTimedOut;
- }
-
- for (;;)
- {
- /* Step 1 - Read PacketLeader */
- RcvCode = KdpReceivePacketLeader(&Packet.PacketLeader);
- if (RcvCode != KdPacketReceived)
- {
- /* Couldn't read a correct packet leader. Start over. */
- continue;
- }
-
- /* Step 2 - Read PacketType */
- RcvCode = KdpReceiveBuffer(&Packet.PacketType, sizeof(USHORT));
- if (RcvCode != KdPacketReceived)
- {
- /* Didn't receive a PacketType or PacketType is bad. Start over. */
- continue;
- }
-
- /* Step 3 - Read ByteCount */
- RcvCode = KdpReceiveBuffer(&Packet.ByteCount, sizeof(USHORT));
- if (RcvCode != KdPacketReceived || Packet.ByteCount > PACKET_MAX_SIZE)
- {
- /* Didn't receive ByteCount or it's too big. Start over. */
- continue;
- }
-
- /* Step 4 - Read PacketId */
- RcvCode = KdpReceiveBuffer(&Packet.PacketId, sizeof(ULONG));
- if (RcvCode != KdPacketReceived)
- {
- /* Didn't receive PacketId. Start over. */
- continue;
- }
-
-/*
- if (Packet.PacketId != ExpectedPacketId)
- {
- // Ask for a resend!
- continue;
- }
-*/
-
- /* Step 5 - Read Checksum */
- RcvCode = KdpReceiveBuffer(&Packet.Checksum, sizeof(ULONG));
- if (RcvCode != KdPacketReceived)
- {
- /* Didn't receive Checksum. Start over. */
- continue;
- }
-
- /* Step 6 - Handle control packets */
- if (Packet.PacketLeader == CONTROL_PACKET_LEADER)
- {
- switch (Packet.PacketType)
- {
- case PACKET_TYPE_KD_ACKNOWLEDGE:
- if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE)
- {
- /* Remote acknowledges the last packet */
- CurrentPacketId ^= 1;
- return KdPacketReceived;
- }
- /* That's not what we were waiting for, start over. */
- continue;
-
- case PACKET_TYPE_KD_RESET:
- FrLdrDbgPrint("KdReceivePacket - got a reset packet\n");
- KdpSendControlPacket(PACKET_TYPE_KD_RESET, 0);
- CurrentPacketId = INITIAL_PACKET_ID;
- /* Fall through */
-
- case PACKET_TYPE_KD_RESEND:
- /* Remote wants us to resend the last packet */
- return KdPacketNeedsResend;
-
- default:
- FrLdrDbgPrint("KdReceivePacket - got unknown control
packet\n");
- return KdPacketNeedsResend;
- }
- }
-
- /* Did we wait for an ack packet? */
- if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE)
- {
- /* We received something different, start over */
- continue;
- }
-
- /* Did we get the right packet type? */
- if (PacketType != Packet.PacketType)
- {
- /* We received something different, start over */
- continue;
- }
-
- /* Get size of the message header */
- switch (Packet.PacketType)
- {
- case PACKET_TYPE_KD_STATE_CHANGE64:
- MessageHeader->Length = sizeof(DBGKD_WAIT_STATE_CHANGE64);
- break;
-
- case PACKET_TYPE_KD_STATE_MANIPULATE:
- MessageHeader->Length = sizeof(DBGKD_MANIPULATE_STATE64);
- break;
-
- case PACKET_TYPE_KD_DEBUG_IO:
- MessageHeader->Length = sizeof(DBGKD_DEBUG_IO);
- break;
-
- default:
- FrLdrDbgPrint("KdReceivePacket - unknown PacketType\n");
- return KdPacketNeedsResend;
- }
-
-//FrLdrDbgPrint("KdReceivePacket - got normal PacketType\n");
-
- /* Packet smaller than expected? */
- if (MessageHeader->Length > Packet.ByteCount)
- {
- FrLdrDbgPrint("KdReceivePacket - too few data (%d) for type %d\n",
- Packet.ByteCount, MessageHeader->Length);
- MessageHeader->Length = Packet.ByteCount;
- }
-
-//FrLdrDbgPrint("KdReceivePacket - got normal PacketType, Buffer = %p\n",
MessageHeader->Buffer);
-
- /* Receive the message header data */
- RcvCode = KdpReceiveBuffer(MessageHeader->Buffer,
- MessageHeader->Length);
- if (RcvCode != KdPacketReceived)
- {
- /* Didn't receive data. Start over. */
- FrLdrDbgPrint("KdReceivePacket - Didn't receive message header data.
Start over\n");
- continue;
- }
-
-//FrLdrDbgPrint("KdReceivePacket - got normal PacketType 3\n");
-
- /* Calculate checksum for the header data */
- Checksum = KdpCalculateChecksum(MessageHeader->Buffer,
- MessageHeader->Length);
-
- /* Shall we receive messsage data? */
- if (MessageData)
- {
- /* Calculate the length of the message data */
- MessageData->Length = Packet.ByteCount - MessageHeader->Length;
-
- /* Do we have data? */
- if (MessageData->Length)
- {
- FrLdrDbgPrint("KdReceivePacket - got data\n");
-
- /* Receive the message data */
- RcvCode = KdpReceiveBuffer(MessageData->Buffer,
- MessageData->Length);
- if (RcvCode != KdPacketReceived)
- {
- /* Didn't receive data. Start over. */
- FrLdrDbgPrint("KdReceivePacket - Didn't receive message
data. Start over\n");
- continue;
- }
-
- /* Add cheksum for message data */
- Checksum += KdpCalculateChecksum(MessageData->Buffer,
- MessageData->Length);
- }
- }
-
- /* Compare checksum */
- if (Packet.Checksum != Checksum)
- {
- KdpSendControlPacket(PACKET_TYPE_KD_RESEND, CurrentPacketId);
- FrLdrDbgPrint("KdReceivePacket - wrong cheksum, got %x, calculated
%x\n",
- Packet.Checksum, Checksum);
- continue;
- }
-
- /* We must receive a PACKET_TRAILING_BYTE now */
- RcvCode = KdpReceiveBuffer(&Byte, sizeof(UCHAR));
-
- /* Acknowledge the received packet */
- KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId);
-
-//FrLdrDbgPrint("KdReceivePacket - all ok\n");
-
- return KdPacketReceived;
- }
-
- return KdPacketReceived;
+ UNIMPLEMENTED;
+ return 0;
}
/* EOF */