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
)
58 #if 0 // Deactivated because never used in fact (was in KdPortInitialize but we use KdPortInitializeEx)
60 * Find the port if needed
66 DefaultPort
.BaudRate
= PortInformation
->BaudRate
;
68 if (ComPortNumber
== 0)
71 * Start enumerating COM ports from the last one to the first one,
72 * and break when we find a valid port.
73 * If we reach the first element of the list, the invalid COM port,
74 * then it means that no valid port was found.
76 for (i
= sizeof(BaseArray
) / sizeof(BaseArray
[0]) - 1; i
> 0; i
--)
78 if (CpDoesPortExist(UlongToPtr(BaseArray
[i
])))
80 PortInformation
->Address
= DefaultPort
.Address
= BaseArray
[i
];
81 ComPortNumber
= (ULONG
)i
;
85 if (ComPortNumber
== 0)
88 "\nKernel Debugger: No COM port found!\n\n");
89 HalDisplayString(buffer
);
94 PortInitialized
= TRUE
;
101 Status
= CpInitialize(PortInformation
,
102 (ComPortNumber
== 0 ? PortInformation
->Address
103 : UlongToPtr(BaseArray
[ComPortNumber
])),
104 (PortInformation
->BaudRate
== 0 ? DEFAULT_BAUD_RATE
105 : PortInformation
->BaudRate
));
106 if (!NT_SUCCESS(Status
))
109 "\nKernel Debugger: Serial port not found!\n\n");
110 HalDisplayString(buffer
);
116 /* Print message to blue screen */
118 "\nKernel Debugger: Serial port found: COM%ld (Port 0x%lx) BaudRate %ld\n\n",
120 PortInformation
->Address
,
121 PortInformation
->BaudRate
);
122 HalDisplayString(buffer
);
126 /* Set global info */
127 KdComPortInUse
= DefaultPort
.Address
;
136 IN PCPPORT PortInformation
,
137 OUT PUCHAR ByteReceived
)
139 return (CpGetByte(PortInformation
, ByteReceived
, FALSE
, FALSE
) == CP_GET_SUCCESS
);
145 IN PCPPORT PortInformation
,
148 CpPutByte(PortInformation
, ByteToSend
);