mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-24 22:24:37 +02:00
DynamicTablesPkg: AcpiDbg2Lib: Prepare to support other archs
Allow other architectures to reuse the AcpiDbg2Lib by extracting the Arm specific part of the table generation. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
parent
e69e1eea2c
commit
2e6076edaf
@ -18,6 +18,13 @@
|
||||
|
||||
[Sources]
|
||||
Dbg2Generator.c
|
||||
Dbg2Generator.h
|
||||
|
||||
[Sources.ARM, Sources.AARCH64]
|
||||
Arm/ArmDbg2Generator.c
|
||||
|
||||
[Sources.IA32, Sources.X86]
|
||||
Dbg2GeneratorNull.c
|
||||
|
||||
[Packages.ARM, Packages.AARCH64]
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
@ -0,0 +1,67 @@
|
||||
/** @file
|
||||
Arm DBG2 Table Generator
|
||||
|
||||
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
- Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
|
||||
**/
|
||||
|
||||
#include <ConfigurationManagerObject.h>
|
||||
#include <Library/PL011UartLib.h>
|
||||
#include <Protocol/SerialIo.h>
|
||||
#include "Dbg2Generator.h"
|
||||
|
||||
/**
|
||||
Initialise the serial port to the specified settings.
|
||||
The serial port is re-configured only if the specified settings
|
||||
are different from the current settings.
|
||||
All unspecified settings will be set to the default values.
|
||||
|
||||
@param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing
|
||||
the serial port.
|
||||
@param BaudRate The baud rate of the serial device. If the
|
||||
baud rate is not supported, the speed will be
|
||||
reduced to the nearest supported one and the
|
||||
variable's value will be updated accordingly.
|
||||
@param ReceiveFifoDepth The number of characters the device will
|
||||
buffer on input. Value of 0 will use the
|
||||
device's default FIFO depth.
|
||||
@param Parity If applicable, this is the EFI_PARITY_TYPE
|
||||
that is computed or checked as each character
|
||||
is transmitted or received. If the device
|
||||
does not support parity, the value is the
|
||||
default parity value.
|
||||
@param DataBits The number of data bits in each character.
|
||||
@param StopBits If applicable, the EFI_STOP_BITS_TYPE number
|
||||
of stop bits per character.
|
||||
If the device does not support stop bits, the
|
||||
value is the default stop bit value.
|
||||
|
||||
@retval RETURN_SUCCESS All attributes were set correctly on the
|
||||
serial device.
|
||||
@retval RETURN_INVALID_PARAMETER One or more of the attributes has an
|
||||
unsupported value.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
Dbg2InitializePort (
|
||||
IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo,
|
||||
IN OUT UINT64 *BaudRate,
|
||||
IN OUT UINT32 *ReceiveFifoDepth,
|
||||
IN OUT EFI_PARITY_TYPE *Parity,
|
||||
IN OUT UINT8 *DataBits,
|
||||
IN OUT EFI_STOP_BITS_TYPE *StopBits
|
||||
)
|
||||
{
|
||||
return PL011UartInitializePort (
|
||||
(UINTN)SerialPortInfo->BaseAddress,
|
||||
SerialPortInfo->Clock,
|
||||
BaudRate,
|
||||
ReceiveFifoDepth,
|
||||
Parity,
|
||||
DataBits,
|
||||
StopBits
|
||||
);
|
||||
}
|
@ -14,7 +14,6 @@
|
||||
#include <Library/AcpiLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PL011UartLib.h>
|
||||
#include <Protocol/AcpiTable.h>
|
||||
#include <Protocol/SerialIo.h>
|
||||
|
||||
@ -26,9 +25,11 @@
|
||||
#include <Library/TableHelperLib.h>
|
||||
#include <Protocol/ConfigurationManagerProtocol.h>
|
||||
|
||||
#include "Dbg2Generator.h"
|
||||
|
||||
/** ARM standard DBG2 Table Generator
|
||||
|
||||
Constructs the DBG2 table for PL011 or SBSA UART peripherals.
|
||||
Constructs the DBG2 table for corresponding DBG2 peripheral.
|
||||
|
||||
Requirements:
|
||||
The following Configuration Manager Object(s) are required by
|
||||
@ -169,7 +170,7 @@ DBG2_TABLE AcpiDbg2 = {
|
||||
DBG2_DEBUG_PORT_DDI (
|
||||
0, // {Template}: Serial Port Subtype
|
||||
0, // {Template}: Serial Port Base Address
|
||||
PL011_UART_LENGTH,
|
||||
0, // {Template}: Serial Port Base Address Size
|
||||
NAMESPACE_STR_DBG_PORT0
|
||||
)
|
||||
}
|
||||
@ -186,7 +187,7 @@ GET_OBJECT_LIST (
|
||||
CM_ARCH_COMMON_SERIAL_PORT_INFO
|
||||
);
|
||||
|
||||
/** Initialize the PL011/SBSA UART with the parameters obtained from
|
||||
/** Initialize the DBG2 UART with the parameters obtained from
|
||||
the Configuration Manager.
|
||||
|
||||
@param [in] SerialPortInfo Pointer to the Serial Port Information.
|
||||
@ -218,9 +219,8 @@ SetupDebugUart (
|
||||
StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);
|
||||
|
||||
BaudRate = SerialPortInfo->BaudRate;
|
||||
Status = PL011UartInitializePort (
|
||||
(UINTN)SerialPortInfo->BaseAddress,
|
||||
SerialPortInfo->Clock,
|
||||
Status = Dbg2InitializePort (
|
||||
SerialPortInfo,
|
||||
&BaudRate,
|
||||
&ReceiveFifoDepth,
|
||||
&Parity,
|
||||
@ -460,6 +460,9 @@ BuildDbg2TableEx (
|
||||
(SerialPortInfo->PortSubtype ==
|
||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART))
|
||||
{
|
||||
// Setup the PL011 length.
|
||||
AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].AddressSize = PL011_UART_LENGTH;
|
||||
|
||||
// Initialize the serial port
|
||||
Status = SetupDebugUart (SerialPortInfo);
|
||||
if (EFI_ERROR (Status)) {
|
||||
@ -470,6 +473,13 @@ BuildDbg2TableEx (
|
||||
));
|
||||
goto error_handler;
|
||||
}
|
||||
} else if ((SerialPortInfo->PortSubtype ==
|
||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_16550_WITH_GAS))
|
||||
{
|
||||
AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].AddressSize = SIZE_4KB;
|
||||
} else {
|
||||
// Try to catch other serial ports, but don't return an error.
|
||||
ASSERT (0);
|
||||
}
|
||||
|
||||
TableList[0] = (EFI_ACPI_DESCRIPTION_HEADER *)&AcpiDbg2;
|
||||
|
@ -0,0 +1,56 @@
|
||||
/** @file
|
||||
DBG2 Table Generator
|
||||
|
||||
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
- Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
|
||||
**/
|
||||
|
||||
#ifndef DBG2_GENERATOR_H_
|
||||
#define DBG2_GENERATOR_H_
|
||||
|
||||
/**
|
||||
Initialise the serial port to the specified settings.
|
||||
The serial port is re-configured only if the specified settings
|
||||
are different from the current settings.
|
||||
All unspecified settings will be set to the default values.
|
||||
|
||||
@param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing
|
||||
the serial port.
|
||||
@param BaudRate The baud rate of the serial device. If the
|
||||
baud rate is not supported, the speed will be
|
||||
reduced to the nearest supported one and the
|
||||
variable's value will be updated accordingly.
|
||||
@param ReceiveFifoDepth The number of characters the device will
|
||||
buffer on input. Value of 0 will use the
|
||||
device's default FIFO depth.
|
||||
@param Parity If applicable, this is the EFI_PARITY_TYPE
|
||||
that is computed or checked as each character
|
||||
is transmitted or received. If the device
|
||||
does not support parity, the value is the
|
||||
default parity value.
|
||||
@param DataBits The number of data bits in each character.
|
||||
@param StopBits If applicable, the EFI_STOP_BITS_TYPE number
|
||||
of stop bits per character.
|
||||
If the device does not support stop bits, the
|
||||
value is the default stop bit value.
|
||||
|
||||
@retval RETURN_SUCCESS All attributes were set correctly on the
|
||||
serial device.
|
||||
@retval RETURN_INVALID_PARAMETER One or more of the attributes has an
|
||||
unsupported value.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
Dbg2InitializePort (
|
||||
IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo,
|
||||
IN OUT UINT64 *BaudRate,
|
||||
IN OUT UINT32 *ReceiveFifoDepth,
|
||||
IN OUT EFI_PARITY_TYPE *Parity,
|
||||
IN OUT UINT8 *DataBits,
|
||||
IN OUT EFI_STOP_BITS_TYPE *StopBits
|
||||
);
|
||||
|
||||
#endif // DBG2_GENERATOR_H_
|
@ -0,0 +1,60 @@
|
||||
/** @file
|
||||
Common DBG2 Table Generator
|
||||
|
||||
Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
- Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
|
||||
**/
|
||||
|
||||
#include <ConfigurationManagerObject.h>
|
||||
#include <Protocol/SerialIo.h>
|
||||
#include "Dbg2Generator.h"
|
||||
|
||||
/**
|
||||
Initialise the serial port to the specified settings.
|
||||
The serial port is re-configured only if the specified settings
|
||||
are different from the current settings.
|
||||
All unspecified settings will be set to the default values.
|
||||
|
||||
@param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing
|
||||
the serial port.
|
||||
@param BaudRate The baud rate of the serial device. If the
|
||||
baud rate is not supported, the speed will be
|
||||
reduced to the nearest supported one and the
|
||||
variable's value will be updated accordingly.
|
||||
@param ReceiveFifoDepth The number of characters the device will
|
||||
buffer on input. Value of 0 will use the
|
||||
device's default FIFO depth.
|
||||
@param Parity If applicable, this is the EFI_PARITY_TYPE
|
||||
that is computed or checked as each character
|
||||
is transmitted or received. If the device
|
||||
does not support parity, the value is the
|
||||
default parity value.
|
||||
@param DataBits The number of data bits in each character.
|
||||
@param StopBits If applicable, the EFI_STOP_BITS_TYPE number
|
||||
of stop bits per character.
|
||||
If the device does not support stop bits, the
|
||||
value is the default stop bit value.
|
||||
|
||||
@retval RETURN_SUCCESS All attributes were set correctly on the
|
||||
serial device.
|
||||
@retval RETURN_UNSUPPORTED Not supported.
|
||||
@retval RETURN_INVALID_PARAMETER One or more of the attributes has an
|
||||
unsupported value.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
Dbg2InitializePort (
|
||||
IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo,
|
||||
IN OUT UINT64 *BaudRate,
|
||||
IN OUT UINT32 *ReceiveFifoDepth,
|
||||
IN OUT EFI_PARITY_TYPE *Parity,
|
||||
IN OUT UINT8 *DataBits,
|
||||
IN OUT EFI_STOP_BITS_TYPE *StopBits
|
||||
)
|
||||
{
|
||||
// Not implemented.
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user