Allow to provide custom COM port address
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
This commit is contained in:
parent
feabac2d98
commit
94e9fa1293
@ -39,6 +39,7 @@ XTCDECL
|
||||
XTSTATUS
|
||||
HlInitializeComPort(IN OUT PCPPORT Port,
|
||||
IN ULONG PortNumber,
|
||||
IN PUCHAR PortAddress,
|
||||
IN ULONG BaudRate);
|
||||
|
||||
#endif /* __XTDK_HLFUNCS_H */
|
||||
|
@ -22,12 +22,13 @@ BlComPortInitialize()
|
||||
{
|
||||
EFI_GUID LIPGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
|
||||
PEFI_LOADED_IMAGE_PROTOCOL LoadedImage;
|
||||
ULONG PortNumber, BaudRate;
|
||||
ULONG PortAddress, PortNumber, BaudRate;
|
||||
PWCHAR Argument, CommandLine, LastArg;
|
||||
EFI_STATUS EfiStatus;
|
||||
XTSTATUS Status;
|
||||
|
||||
/* Set default serial port options */
|
||||
PortAddress = 0;
|
||||
PortNumber = 0;
|
||||
BaudRate = 0;
|
||||
|
||||
@ -72,6 +73,37 @@ BlComPortInitialize()
|
||||
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 */
|
||||
if(*Argument == ',')
|
||||
{
|
||||
@ -97,7 +129,7 @@ BlComPortInitialize()
|
||||
}
|
||||
|
||||
/* Initialize COM port */
|
||||
Status = HlInitializeComPort(&EfiSerialPort, PortNumber, BaudRate);
|
||||
Status = HlInitializeComPort(&EfiSerialPort, PortNumber, UlongToPtr(PortAddress), BaudRate);
|
||||
if(Status != STATUS_SUCCESS)
|
||||
{
|
||||
/* Serial port initialization failed, mark as not ready */
|
||||
|
@ -200,6 +200,9 @@ HlComPortPutByte(IN PCPPORT Port,
|
||||
* @param PortNumber
|
||||
* Supplies a port number.
|
||||
*
|
||||
* @param PortAddress
|
||||
* Supplies an address of the COM port.
|
||||
*
|
||||
* @param BaudRate
|
||||
* Supplies an optional port baud rate.
|
||||
*
|
||||
@ -211,6 +214,7 @@ XTCDECL
|
||||
XTSTATUS
|
||||
HlInitializeComPort(IN OUT PCPPORT Port,
|
||||
IN ULONG PortNumber,
|
||||
IN PUCHAR PortAddress,
|
||||
IN ULONG BaudRate)
|
||||
{
|
||||
PUCHAR Address;
|
||||
@ -218,13 +222,6 @@ HlInitializeComPort(IN OUT PCPPORT Port,
|
||||
USHORT Flags = 0;
|
||||
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 */
|
||||
if(PortNumber > ARRAY_SIZE(ComPortAddress))
|
||||
{
|
||||
@ -232,6 +229,22 @@ HlInitializeComPort(IN OUT PCPPORT Port,
|
||||
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 */
|
||||
if(BaudRate == 0)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user