summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c
blob: e24cc834c2a3c40214a75ef9fe68e2e96d679005 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/** @file
  Detection code for QEMU debug port.
  Non-SEC instance, caches the result of detection.

  Copyright (c) 2017, Red Hat, Inc.<BR>
  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php.

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#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;
}