From 0cca97e0a839eac1a333193d7811a32ad5c44c5f Mon Sep 17 00:00:00 2001 From: Chao Li Date: Tue, 16 Jan 2024 20:26:22 +0800 Subject: ArmVirtPkg: Move the FdtSerialPortAddressLib to OvmfPkg Move the FdtSerialPortAddressLib to Ovmfpkg so that other ARCH can easily use it. Build-tested only (with "ArmVirtQemu.dsc and OvmfPkgX64.dsc"). BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584 Cc: Ard Biesheuvel Cc: Laszlo Ersek Cc: Leif Lindholm Cc: Sami Mujawar Cc: Gerd Hoffmann Cc: Jiewen Yao Signed-off-by: Chao Li Reviewed-by: Laszlo Ersek --- OvmfPkg/Include/Library/FdtSerialPortAddressLib.h | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 OvmfPkg/Include/Library/FdtSerialPortAddressLib.h (limited to 'OvmfPkg/Include') diff --git a/OvmfPkg/Include/Library/FdtSerialPortAddressLib.h b/OvmfPkg/Include/Library/FdtSerialPortAddressLib.h new file mode 100644 index 0000000..3d4c911 --- /dev/null +++ b/OvmfPkg/Include/Library/FdtSerialPortAddressLib.h @@ -0,0 +1,83 @@ +/** @file + Determine the base addresses of serial ports from the Device Tree. + + Copyright (C) Red Hat + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef FDT_SERIAL_PORT_ADDRESS_LIB_H_ +#define FDT_SERIAL_PORT_ADDRESS_LIB_H_ + +#include + +typedef struct { + UINTN NumberOfPorts; + UINT64 BaseAddress[2]; +} FDT_SERIAL_PORTS; + +/** + Collect the first ARRAY_SIZE (Ports->BaseAddress) serial ports into Ports from + DeviceTree. + + @param[in] DeviceTree The flat device tree (FDT) to scan. + + @param[in] Compatible Look for Compatible in the "compatible" property of the + scanned nodes. + + @param[out] Ports On successful return, Ports->NumberOfPorts contains the + number of serial ports found; it is (a) positive and + (b) at most ARRAY_SIZE (Ports->BaseAddress). If the FDT + had more serial ports, those are not reported. On + error, the contents of Ports are indeterminate. + + @retval RETURN_INVALID_PARAMETER DeviceTree does not point to a valid FDT + header. + + @retval RETURN_NOT_FOUND No compatible and enabled serial port has + been found. + + @retval RETURN_SUCCESS At least one compatible and enabled serial + port has been found; Ports has been filled + in. +**/ +RETURN_STATUS +EFIAPI +FdtSerialGetPorts ( + IN CONST VOID *DeviceTree, + IN CONST CHAR8 *Compatible, + OUT FDT_SERIAL_PORTS *Ports + ); + +/** + Fetch the base address of the serial port identified in the "stdout-path" + property of the "/chosen" node in DeviceTree. + + @param[in] DeviceTree The flat device tree (FDT) to scan. + + @param[out] BaseAddress On success, the base address of the preferred serial + port (to be used as console). On error, BaseAddress + is not modified. + + @retval RETURN_INVALID_PARAMETER DeviceTree does not point to a valid FDT + header. + + @retval RETURN_NOT_FOUND No enabled console port has been found. + + @retval RETURN_PROTOCOL_ERROR The first (or only) node path in the + "stdout-path" property is an empty string. + + @retval RETURN_PROTOCOL_ERROR The console port has been found in the FDT, + but its base address is not correctly + represented. + + @retval RETURN_SUCCESS BaseAddress has been populated. +**/ +RETURN_STATUS +EFIAPI +FdtSerialGetConsolePort ( + IN CONST VOID *DeviceTree, + OUT UINT64 *BaseAddress + ); + +#endif -- cgit v1.1