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