Author: hbelusca Date: Thu Nov 29 10:26:00 2012 New Revision: 57782
URL: http://svn.reactos.org/svn/reactos?rev=57782&view=rev Log: [KDCOM] Fixes COM port debugging output with Virtual PC 2007. See r57781 for more details.
CORE-4247 #comment Fixed also in r57782.
Modified: trunk/reactos/drivers/base/kdcom/CMakeLists.txt trunk/reactos/drivers/base/kdcom/i386/kdbg.c
Modified: trunk/reactos/drivers/base/kdcom/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/kdcom/CMakeLis... ============================================================================== --- trunk/reactos/drivers/base/kdcom/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/drivers/base/kdcom/CMakeLists.txt [iso-8859-1] Thu Nov 29 10:26:00 2012 @@ -2,11 +2,11 @@ spec2def(kdcom.dll kdcom.spec ADD_IMPORTLIB)
if(ARCH STREQUAL "i386") -list(APPEND SOURCE i386/kdbg.c) + list(APPEND SOURCE i386/kdbg.c) elseif(ARCH STREQUAL "amd64") -list(APPEND SOURCE i386/kdbg.c) + list(APPEND SOURCE i386/kdbg.c) elseif(ARCH STREQUAL "arm") -list(APPEND SOURCE arm/kdbg.c) + list(APPEND SOURCE arm/kdbg.c) endif(ARCH STREQUAL "i386") list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/kdcom.def)
@@ -17,7 +17,7 @@ set_image_base(kdcom 0x00010000)
add_importlibs(kdcom ntoskrnl hal) +target_link_libraries(kdcom cportlib) +add_dependencies(kdcom psdk bugcodes)
-add_dependencies(kdcom psdk bugcodes) add_cd_file(TARGET kdcom DESTINATION reactos/system32 NO_CAB FOR all) -
Modified: trunk/reactos/drivers/base/kdcom/i386/kdbg.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/kdcom/i386/kdb... ============================================================================== --- trunk/reactos/drivers/base/kdcom/i386/kdbg.c [iso-8859-1] (original) +++ trunk/reactos/drivers/base/kdcom/i386/kdbg.c [iso-8859-1] Thu Nov 29 10:26:00 2012 @@ -11,14 +11,17 @@
#define NOEXTAPI #include <ntifs.h> -#define NDEBUG #include <halfuncs.h> #include <stdio.h> -#include <debug.h> #include "arc/arc.h" #include "windbgkd.h" #include <kddll.h> #include <ioaccess.h> /* port intrinsics */ +#include <cportlib/cportlib.h> + +#define NDEBUG +#include <debug.h> +
typedef struct _KD_PORT_INFORMATION { @@ -54,14 +57,14 @@
#define DEFAULT_BAUD_RATE 19200
-#ifdef _M_IX86 -const ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8}; +#if defined(_M_IX86) || defined(_M_AMD64) +const ULONG BaseArray[] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8}; #elif defined(_M_PPC) -const ULONG BaseArray[2] = {0, 0x800003f8}; +const ULONG BaseArray[] = {0, 0x800003F8}; #elif defined(_M_MIPS) -const ULONG BaseArray[3] = {0, 0x80006000, 0x80007000}; +const ULONG BaseArray[] = {0, 0x80006000, 0x80007000}; #elif defined(_M_ARM) -const ULONG BaseArray[2] = {0, 0xF1012000}; +const ULONG BaseArray[] = {0, 0xF1012000}; #else #error Unknown architecture #endif @@ -122,68 +125,6 @@ static BOOLEAN PortInitialized = FALSE;
-/* STATIC FUNCTIONS *********************************************************/ - -static BOOLEAN -KdpDoesComPortExist( - IN ULONG BaseAddress) -{ - BOOLEAN found; - UCHAR mcr; - UCHAR msr; - - found = FALSE; - - /* save Modem Control Register (MCR) */ - mcr = READ_PORT_UCHAR(SER_MCR(BaseAddress)); - - /* enable loop mode (set Bit 4 of the MCR) */ - WRITE_PORT_UCHAR(SER_MCR(BaseAddress), SR_MCR_LOOP); - - /* clear all modem output bits */ - WRITE_PORT_UCHAR(SER_MCR(BaseAddress), SR_MCR_LOOP); - - /* read the Modem Status Register */ - msr = READ_PORT_UCHAR(SER_MSR(BaseAddress)); - - /* - * the upper nibble of the MSR (modem output bits) must be - * equal to the lower nibble of the MCR (modem input bits) - */ - if ((msr & 0xF0) == 0x00) - { - /* set all modem output bits */ - WRITE_PORT_UCHAR(SER_MCR(BaseAddress), SR_MCR_DTR | SR_MCR_RTS | SR_MCR_OUT1 | SR_MCR_OUT2 | SR_MCR_LOOP); - - /* read the Modem Status Register */ - msr = READ_PORT_UCHAR(SER_MSR(BaseAddress)); - - /* - * the upper nibble of the MSR (modem output bits) must be - * equal to the lower nibble of the MCR (modem input bits) - */ - if ((msr & 0xF0) == 0xF0) - { - /* - * setup a resonable state for the port: - * enable fifo and clear recieve/transmit buffers - */ - WRITE_PORT_UCHAR(SER_FCR(BaseAddress), - (SR_FCR_ENABLE_FIFO | SR_FCR_CLEAR_RCVR | SR_FCR_CLEAR_XMIT)); - WRITE_PORT_UCHAR(SER_FCR(BaseAddress), 0); - READ_PORT_UCHAR(SER_RBR(BaseAddress)); - WRITE_PORT_UCHAR(SER_IER(BaseAddress), 0); - found = TRUE; - } - } - - /* restore MCR */ - WRITE_PORT_UCHAR(SER_MCR(BaseAddress), mcr); - - return found; -} - - /* FUNCTIONS ****************************************************************/
/* HAL.KdPortInitialize */ @@ -203,14 +144,18 @@
if (PortInformation->ComPort == 0) { + /* + * Start enumerating COM ports from the last one to the first one, + * and break when we find a valid port. + * If we reach the first element of the list, the invalid COM port, + * then it means that no valid port was found. + */ for (i = sizeof(BaseArray) / sizeof(BaseArray[0]) - 1; i > 0; i--) { - if (KdpDoesComPortExist(BaseArray[i])) + if (CpDoesPortExist(UlongToPtr(BaseArray[i]))) { - DefaultPort.BaseAddress = BaseArray[i]; - DefaultPort.ComPort = i; - PortInformation->BaseAddress = DefaultPort.BaseAddress; - PortInformation->ComPort = DefaultPort.ComPort; + PortInformation->BaseAddress = DefaultPort.BaseAddress = BaseArray[i]; + PortInformation->ComPort = DefaultPort.ComPort = i; break; } } @@ -237,7 +182,7 @@ }
-/* HAL.KdPortInitializeEx */ +/* HAL.KdPortInitializeEx ; ReactOS-specific */ BOOLEAN NTAPI KdPortInitializeEx( @@ -260,7 +205,7 @@
if (PortInformation->ComPort != 0) { - if (!KdpDoesComPortExist(BaseArray[PortInformation->ComPort])) + if (!CpDoesPortExist(UlongToPtr(BaseArray[PortInformation->ComPort]))) { sprintf(buffer, "\nKernel Debugger: Serial port not found!\n\n"); @@ -335,7 +280,7 @@ }
-/* HAL.KdPortGetByteEx */ +/* HAL.KdPortGetByteEx ; ReactOS-specific */ BOOLEAN NTAPI KdPortGetByteEx( @@ -366,7 +311,7 @@ }
-/* HAL.KdPortPollByteEx */ +/* HAL.KdPortPollByteEx ; ReactOS-specific */ BOOLEAN NTAPI KdPortPollByteEx( @@ -395,7 +340,7 @@ KdPortPutByteEx(&DefaultPort, ByteToSend); }
-/* HAL.KdPortPutByteEx */ +/* HAL.KdPortPutByteEx ; ReactOS-specific */ VOID NTAPI KdPortPutByteEx(