mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +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]
|
[Sources]
|
||||||
Dbg2Generator.c
|
Dbg2Generator.c
|
||||||
|
Dbg2Generator.h
|
||||||
|
|
||||||
|
[Sources.ARM, Sources.AARCH64]
|
||||||
|
Arm/ArmDbg2Generator.c
|
||||||
|
|
||||||
|
[Sources.IA32, Sources.X86]
|
||||||
|
Dbg2GeneratorNull.c
|
||||||
|
|
||||||
[Packages.ARM, Packages.AARCH64]
|
[Packages.ARM, Packages.AARCH64]
|
||||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
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/AcpiLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/PL011UartLib.h>
|
|
||||||
#include <Protocol/AcpiTable.h>
|
#include <Protocol/AcpiTable.h>
|
||||||
#include <Protocol/SerialIo.h>
|
#include <Protocol/SerialIo.h>
|
||||||
|
|
||||||
@ -26,9 +25,11 @@
|
|||||||
#include <Library/TableHelperLib.h>
|
#include <Library/TableHelperLib.h>
|
||||||
#include <Protocol/ConfigurationManagerProtocol.h>
|
#include <Protocol/ConfigurationManagerProtocol.h>
|
||||||
|
|
||||||
|
#include "Dbg2Generator.h"
|
||||||
|
|
||||||
/** ARM standard DBG2 Table Generator
|
/** ARM standard DBG2 Table Generator
|
||||||
|
|
||||||
Constructs the DBG2 table for PL011 or SBSA UART peripherals.
|
Constructs the DBG2 table for corresponding DBG2 peripheral.
|
||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
The following Configuration Manager Object(s) are required by
|
The following Configuration Manager Object(s) are required by
|
||||||
@ -169,7 +170,7 @@ DBG2_TABLE AcpiDbg2 = {
|
|||||||
DBG2_DEBUG_PORT_DDI (
|
DBG2_DEBUG_PORT_DDI (
|
||||||
0, // {Template}: Serial Port Subtype
|
0, // {Template}: Serial Port Subtype
|
||||||
0, // {Template}: Serial Port Base Address
|
0, // {Template}: Serial Port Base Address
|
||||||
PL011_UART_LENGTH,
|
0, // {Template}: Serial Port Base Address Size
|
||||||
NAMESPACE_STR_DBG_PORT0
|
NAMESPACE_STR_DBG_PORT0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -186,7 +187,7 @@ GET_OBJECT_LIST (
|
|||||||
CM_ARCH_COMMON_SERIAL_PORT_INFO
|
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.
|
the Configuration Manager.
|
||||||
|
|
||||||
@param [in] SerialPortInfo Pointer to the Serial Port Information.
|
@param [in] SerialPortInfo Pointer to the Serial Port Information.
|
||||||
@ -218,9 +219,8 @@ SetupDebugUart (
|
|||||||
StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);
|
StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits);
|
||||||
|
|
||||||
BaudRate = SerialPortInfo->BaudRate;
|
BaudRate = SerialPortInfo->BaudRate;
|
||||||
Status = PL011UartInitializePort (
|
Status = Dbg2InitializePort (
|
||||||
(UINTN)SerialPortInfo->BaseAddress,
|
SerialPortInfo,
|
||||||
SerialPortInfo->Clock,
|
|
||||||
&BaudRate,
|
&BaudRate,
|
||||||
&ReceiveFifoDepth,
|
&ReceiveFifoDepth,
|
||||||
&Parity,
|
&Parity,
|
||||||
@ -460,6 +460,9 @@ BuildDbg2TableEx (
|
|||||||
(SerialPortInfo->PortSubtype ==
|
(SerialPortInfo->PortSubtype ==
|
||||||
EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART))
|
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
|
// Initialize the serial port
|
||||||
Status = SetupDebugUart (SerialPortInfo);
|
Status = SetupDebugUart (SerialPortInfo);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -470,6 +473,13 @@ BuildDbg2TableEx (
|
|||||||
));
|
));
|
||||||
goto error_handler;
|
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;
|
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