| /** @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 <Base.h> | |
| 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 |