/** @file Detection code for hypervisor debug port. Non-SEC instance, caches the result of detection. Copyright (c) 2017, Red Hat, Inc.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #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; }