2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/base/kdcom/kdbg.c
5 * PURPOSE: Serial i/o functions for the kernel debugger.
6 * PROGRAMMER: Alex Ionescu
10 /* INCLUDES *****************************************************************/
17 #define DEFAULT_BAUD_RATE 19200
19 #if defined(_M_IX86) || defined(_M_AMD64)
20 const ULONG BaseArray
[] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
22 const ULONG BaseArray
[] = {0, 0x800003F8};
23 #elif defined(_M_MIPS)
24 const ULONG BaseArray
[] = {0, 0x80006000, 0x80007000};
26 const ULONG BaseArray
[] = {0, 0xF1012000};
28 #error Unknown architecture
31 /* STATIC VARIABLES ***********************************************************/
33 // static CPPORT DefaultPort = {0, 0, 0};
35 /* The COM port must only be initialized once! */
36 // static BOOLEAN PortInitialized = FALSE;
39 /* REACTOS FUNCTIONS **********************************************************/
43 KdDebuggerInitialize1(
44 IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL
)
46 return STATUS_NOT_IMPLEMENTED
;
52 IN PCPPORT PortInformation
,
53 IN ULONG ComPortNumber
)
57 #if 0 // Deactivated because never used in fact (was in KdPortInitialize but we use KdPortInitializeEx)
59 * Find the port if needed
65 DefaultPort
.BaudRate
= PortInformation
->BaudRate
;
67 if (ComPortNumber
== 0)
70 * Start enumerating COM ports from the last one to the first one,
71 * and break when we find a valid port.
72 * If we reach the first element of the list, the invalid COM port,
73 * then it means that no valid port was found.
75 for (i
= sizeof(BaseArray
) / sizeof(BaseArray
[0]) - 1; i
> 0; i
--)
77 if (CpDoesPortExist(UlongToPtr(BaseArray
[i
])))
79 PortInformation
->Address
= DefaultPort
.Address
= BaseArray
[i
];
80 ComPortNumber
= (ULONG
)i
;
84 if (ComPortNumber
== 0)
86 HalDisplayString("\r\nKernel Debugger: No COM port found!\r\n\r\n");
91 PortInitialized
= TRUE
;
98 Status
= CpInitialize(PortInformation
,
99 (ComPortNumber
== 0 ? PortInformation
->Address
100 : UlongToPtr(BaseArray
[ComPortNumber
])),
101 (PortInformation
->BaudRate
== 0 ? DEFAULT_BAUD_RATE
102 : PortInformation
->BaudRate
));
103 if (!NT_SUCCESS(Status
))
105 HalDisplayString("\r\nKernel Debugger: Serial port not found!\r\n\r\n");
113 /* Print message to blue screen */
115 "\r\nKernel Debugger: Serial port found: COM%ld (Port 0x%lx) BaudRate %ld\r\n\r\n",
117 PortInformation
->Address
,
118 PortInformation
->BaudRate
);
119 HalDisplayString(buffer
);
123 /* Set global info */
124 KdComPortInUse
= DefaultPort
.Address
;
133 IN PCPPORT PortInformation
,
134 OUT PUCHAR ByteReceived
)
136 return (CpGetByte(PortInformation
, ByteReceived
, FALSE
, FALSE
) == CP_GET_SUCCESS
);
142 IN PCPPORT PortInformation
,
145 CpPutByte(PortInformation
, ByteToSend
);