177 lines
2.8 KiB
C
177 lines
2.8 KiB
C
/*++
|
||
|
||
Copyright (c) 1996 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
port.c
|
||
|
||
Abstract:
|
||
|
||
This modules implements com port code to support the boot debugger.
|
||
|
||
Author:
|
||
|
||
Bryan M. Willman (bryanwi) 24-Sep-90
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "bd.h"
|
||
|
||
extern BdInstallVectors();
|
||
|
||
_TUCHAR DebugMessage[80];
|
||
|
||
LOGICAL
|
||
BdPortInitialize(
|
||
IN ULONG BaudRate,
|
||
IN ULONG PortNumber,
|
||
OUT PULONG BdFileId
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This functions initializes the boot debugger com port.
|
||
|
||
Arguments:
|
||
|
||
BaudRate - Supplies an optional baud rate.
|
||
|
||
PortNumber - supplies an optinal port number.
|
||
|
||
Returned Value:
|
||
|
||
TRUE - If a debug port is found.
|
||
|
||
--*/
|
||
|
||
{
|
||
//
|
||
// Initialize the specified port.
|
||
//
|
||
if (!BlPortInitialize(BaudRate, PortNumber, NULL, FALSE, BdFileId)) {
|
||
return FALSE;
|
||
}
|
||
_stprintf(DebugMessage,
|
||
TEXT("\r\nBoot Debugger Using: COM%d (Baud Rate %d)\r\n"),
|
||
PortNumber,
|
||
BaudRate);
|
||
|
||
//
|
||
// Install exception vectors used by BD.
|
||
//
|
||
BdIa64Init();
|
||
|
||
#if 0
|
||
//
|
||
// We cannot use BlPrint() at this time because BlInitStdIo() has not been called, which is
|
||
// required to use the Arc emulator code.
|
||
//
|
||
TextStringOut(DebugMessage);
|
||
#else
|
||
//
|
||
// there's no reason not to use BlPrint since we're not using ARC calls to print
|
||
//
|
||
BlPrint( DebugMessage );
|
||
#endif
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
ULONG
|
||
BdPortGetByte (
|
||
OUT PUCHAR Input
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine gets a byte from the serial port used by the kernel
|
||
debugger.
|
||
|
||
Arguments:
|
||
|
||
Input - Supplies a pointer to a variable that receives the input
|
||
data byte.
|
||
|
||
Return Value:
|
||
|
||
CP_GET_SUCCESS is returned if a byte is successfully read from the
|
||
kernel debugger line.
|
||
|
||
CP_GET_ERROR is returned if an error is encountered during reading.
|
||
|
||
CP_GET_NODATA is returned if timeout occurs.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
return BlPortGetByte(BdFileId, Input);
|
||
}
|
||
|
||
VOID
|
||
BdPortPutByte (
|
||
IN UCHAR Output
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine puts a byte to the serial port used by the kernel debugger.
|
||
|
||
Arguments:
|
||
|
||
Output - Supplies the output data byte.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
BlPortPutByte(BdFileId, Output);
|
||
return;
|
||
}
|
||
|
||
ULONG
|
||
BdPortPollByte (
|
||
OUT PUCHAR Input
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine gets a byte from the serial port used by the kernel
|
||
debugger iff a byte is available.
|
||
|
||
Arguments:
|
||
|
||
Input - Supplies a pointer to a variable that receives the input
|
||
data byte.
|
||
|
||
Return Value:
|
||
|
||
CP_GET_SUCCESS is returned if a byte is successfully read from the
|
||
kernel debugger line.
|
||
|
||
CP_GET_ERROR is returned if an error encountered during reading.
|
||
|
||
CP_GET_NODATA is returned if timeout occurs.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
return BlPortPollByte(BdFileId, Input);
|
||
}
|