/** @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