forked from xt-sys/exectos
Allow to provide custom COM port address
This commit is contained in:
parent
feabac2d98
commit
94e9fa1293
@ -39,6 +39,7 @@ XTCDECL
|
|||||||
XTSTATUS
|
XTSTATUS
|
||||||
HlInitializeComPort(IN OUT PCPPORT Port,
|
HlInitializeComPort(IN OUT PCPPORT Port,
|
||||||
IN ULONG PortNumber,
|
IN ULONG PortNumber,
|
||||||
|
IN PUCHAR PortAddress,
|
||||||
IN ULONG BaudRate);
|
IN ULONG BaudRate);
|
||||||
|
|
||||||
#endif /* __XTDK_HLFUNCS_H */
|
#endif /* __XTDK_HLFUNCS_H */
|
||||||
|
@ -22,12 +22,13 @@ BlComPortInitialize()
|
|||||||
{
|
{
|
||||||
EFI_GUID LIPGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
|
EFI_GUID LIPGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
|
||||||
PEFI_LOADED_IMAGE_PROTOCOL LoadedImage;
|
PEFI_LOADED_IMAGE_PROTOCOL LoadedImage;
|
||||||
ULONG PortNumber, BaudRate;
|
ULONG PortAddress, PortNumber, BaudRate;
|
||||||
PWCHAR Argument, CommandLine, LastArg;
|
PWCHAR Argument, CommandLine, LastArg;
|
||||||
EFI_STATUS EfiStatus;
|
EFI_STATUS EfiStatus;
|
||||||
XTSTATUS Status;
|
XTSTATUS Status;
|
||||||
|
|
||||||
/* Set default serial port options */
|
/* Set default serial port options */
|
||||||
|
PortAddress = 0;
|
||||||
PortNumber = 0;
|
PortNumber = 0;
|
||||||
BaudRate = 0;
|
BaudRate = 0;
|
||||||
|
|
||||||
@ -72,6 +73,37 @@ BlComPortInitialize()
|
|||||||
Argument++;
|
Argument++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for some custom COM port (COM0 means non-default one) */
|
||||||
|
if(PortNumber == 0)
|
||||||
|
{
|
||||||
|
/* Look for COM port address */
|
||||||
|
if(RtlWideStringCompare(Argument, L",0x", 3) == 0)
|
||||||
|
{
|
||||||
|
/* COM port address provided */
|
||||||
|
Argument += 3;
|
||||||
|
while((*Argument >= '0' && *Argument <= '9') ||
|
||||||
|
(*Argument >= 'A' && *Argument <= 'F') ||
|
||||||
|
(*Argument >= 'a' && *Argument <= 'f'))
|
||||||
|
{
|
||||||
|
/* Get port address */
|
||||||
|
PortAddress *= 16;
|
||||||
|
if(*Argument >= '0' && *Argument <= '9')
|
||||||
|
{
|
||||||
|
PortAddress += *Argument - '0';
|
||||||
|
}
|
||||||
|
else if(*Argument >= 'A' && *Argument <= 'F')
|
||||||
|
{
|
||||||
|
PortAddress += *Argument - 'A' + 10;
|
||||||
|
}
|
||||||
|
else if(*Argument >= 'a' && *Argument <= 'f')
|
||||||
|
{
|
||||||
|
PortAddress += *Argument - 'a' + 10;
|
||||||
|
}
|
||||||
|
Argument++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Look for additional COM port parameters */
|
/* Look for additional COM port parameters */
|
||||||
if(*Argument == ',')
|
if(*Argument == ',')
|
||||||
{
|
{
|
||||||
@ -97,7 +129,7 @@ BlComPortInitialize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize COM port */
|
/* Initialize COM port */
|
||||||
Status = HlInitializeComPort(&EfiSerialPort, PortNumber, BaudRate);
|
Status = HlInitializeComPort(&EfiSerialPort, PortNumber, UlongToPtr(PortAddress), BaudRate);
|
||||||
if(Status != STATUS_SUCCESS)
|
if(Status != STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Serial port initialization failed, mark as not ready */
|
/* Serial port initialization failed, mark as not ready */
|
||||||
|
@ -200,6 +200,9 @@ HlComPortPutByte(IN PCPPORT Port,
|
|||||||
* @param PortNumber
|
* @param PortNumber
|
||||||
* Supplies a port number.
|
* Supplies a port number.
|
||||||
*
|
*
|
||||||
|
* @param PortAddress
|
||||||
|
* Supplies an address of the COM port.
|
||||||
|
*
|
||||||
* @param BaudRate
|
* @param BaudRate
|
||||||
* Supplies an optional port baud rate.
|
* Supplies an optional port baud rate.
|
||||||
*
|
*
|
||||||
@ -211,6 +214,7 @@ XTCDECL
|
|||||||
XTSTATUS
|
XTSTATUS
|
||||||
HlInitializeComPort(IN OUT PCPPORT Port,
|
HlInitializeComPort(IN OUT PCPPORT Port,
|
||||||
IN ULONG PortNumber,
|
IN ULONG PortNumber,
|
||||||
|
IN PUCHAR PortAddress,
|
||||||
IN ULONG BaudRate)
|
IN ULONG BaudRate)
|
||||||
{
|
{
|
||||||
PUCHAR Address;
|
PUCHAR Address;
|
||||||
@ -218,13 +222,6 @@ HlInitializeComPort(IN OUT PCPPORT Port,
|
|||||||
USHORT Flags = 0;
|
USHORT Flags = 0;
|
||||||
ULONG Mode;
|
ULONG Mode;
|
||||||
|
|
||||||
/* Check if serial port is set */
|
|
||||||
if(PortNumber == 0)
|
|
||||||
{
|
|
||||||
/* Use COM1 by default */
|
|
||||||
PortNumber = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We support only a pre-defined number of ports */
|
/* We support only a pre-defined number of ports */
|
||||||
if(PortNumber > ARRAY_SIZE(ComPortAddress))
|
if(PortNumber > ARRAY_SIZE(ComPortAddress))
|
||||||
{
|
{
|
||||||
@ -232,6 +229,22 @@ HlInitializeComPort(IN OUT PCPPORT Port,
|
|||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check if serial port is set */
|
||||||
|
if(PortNumber == 0)
|
||||||
|
{
|
||||||
|
/* Check if port address supplied instead */
|
||||||
|
if(PortAddress)
|
||||||
|
{
|
||||||
|
/* Set custom port address */
|
||||||
|
ComPortAddress[PortNumber] = PtrToUlong(PortAddress);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Use COM1 by default */
|
||||||
|
PortNumber = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if baud rate is set */
|
/* Check if baud rate is set */
|
||||||
if(BaudRate == 0)
|
if(BaudRate == 0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user