| /** @file | |
| Detection code for hypervisor debug port. | |
| Non-SEC instance, caches the result of detection. | |
| Copyright (c) 2017, Red Hat, Inc.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <Base.h> | |
| #include "DebugLibDetect.h" | |
| // | |
| // Set to TRUE if the debug I/O port has been checked | |
| // | |
| STATIC BOOLEAN mDebugIoPortChecked = FALSE; | |
| // | |
| // Set to TRUE if the debug I/O port is enabled | |
| // | |
| STATIC BOOLEAN mDebugIoPortFound = FALSE; | |
| /** | |
| This constructor function must not do anything. | |
| Some modules consuming this library instance, such as the DXE Core, invoke | |
| the DEBUG() macro before they explicitly call | |
| ProcessLibraryConstructorList(). Therefore the auto-generated call from | |
| ProcessLibraryConstructorList() to this constructor function may be preceded | |
| by some calls to PlatformDebugLibIoPortFound() below. Hence | |
| PlatformDebugLibIoPortFound() must not rely on anything this constructor | |
| could set up. | |
| @retval RETURN_SUCCESS The constructor always returns RETURN_SUCCESS. | |
| **/ | |
| RETURN_STATUS | |
| EFIAPI | |
| PlatformDebugLibIoPortConstructor ( | |
| VOID | |
| ) | |
| { | |
| return RETURN_SUCCESS; | |
| } | |
| /** | |
| At the first call, check if the debug I/O port device is present, and cache | |
| the result for later use. At subsequent calls, return the cached result. | |
| @retval TRUE if the debug I/O port device was detected. | |
| @retval FALSE otherwise | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| PlatformDebugLibIoPortFound ( | |
| VOID | |
| ) | |
| { | |
| if (!mDebugIoPortChecked) { | |
| mDebugIoPortFound = PlatformDebugLibIoPortDetect (); | |
| mDebugIoPortChecked = TRUE; | |
| } | |
| return mDebugIoPortFound; | |
| } |