TianoCore EDK2 master
Loading...
Searching...
No Matches
EntryPoint.c
Go to the documentation of this file.
1
10#include <Guid/RootBridgesConnectedEventGroup.h> // gRootBridgesConnectedEve...
11#include <Library/DebugLib.h> // DEBUG()
12#include <Library/PcdLib.h> // PcdGetBool()
14#include <Protocol/AcpiTable.h> // EFI_ACPI_TABLE_PROTOCOL
15
16#include "AcpiPlatform.h"
17
21 VOID
22 )
23{
24 EFI_STATUS Status;
25 EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
26
27 Status = gBS->LocateProtocol (
28 &gEfiAcpiTableProtocolGuid,
29 NULL,
30 (VOID **)&AcpiTable
31 );
32 ASSERT_EFI_ERROR (Status);
33 return AcpiTable;
34}
35
37VOID
38EFIAPI
39OnRootBridgesConnected (
40 IN EFI_EVENT Event,
41 IN VOID *Context
42 )
43{
44 EFI_STATUS Status;
45
46 DEBUG ((
47 DEBUG_INFO,
48 "%a: root bridges have been connected, installing ACPI tables\n",
49 __func__
50 ));
51 Status = InstallAcpiTables (FindAcpiTableProtocol ());
52 if (EFI_ERROR (Status)) {
53 DEBUG ((DEBUG_ERROR, "%a: InstallAcpiTables: %r\n", __func__, Status));
54 }
55
56 gBS->CloseEvent (Event);
57}
58
60EFIAPI
62 IN EFI_HANDLE ImageHandle,
63 IN EFI_SYSTEM_TABLE *SystemTable
64 )
65{
66 EFI_STATUS Status;
67 EFI_EVENT RootBridgesConnected;
68
69 //
70 // If the platform doesn't support PCI, or PCI enumeration has been disabled,
71 // install the tables at once, and let the entry point's return code reflect
72 // the full functionality.
73 //
74 if (PcdGetBool (PcdPciDisableBusEnumeration)) {
75 DEBUG ((
76 DEBUG_INFO,
77 "%a: PCI or its enumeration disabled, installing "
78 "ACPI tables\n",
79 __func__
80 ));
81 return InstallAcpiTables (FindAcpiTableProtocol ());
82 }
83
84 //
85 // Otherwise, delay installing the ACPI tables until root bridges are
86 // connected. The entry point's return status will only reflect the callback
87 // setup. (Note that we're a DXE_DRIVER; our entry point function is invoked
88 // strictly before BDS is entered and can connect the root bridges.)
89 //
90 Status = gBS->CreateEventEx (
91 EVT_NOTIFY_SIGNAL,
92 TPL_CALLBACK,
93 OnRootBridgesConnected,
94 NULL /* Context */,
95 &gRootBridgesConnectedEventGroupGuid,
96 &RootBridgesConnected
97 );
98 if (!EFI_ERROR (Status)) {
99 DEBUG ((
100 DEBUG_INFO,
101 "%a: waiting for root bridges to be connected, registered callback\n",
102 __func__
103 ));
104 }
105
106 return Status;
107}
STATIC EFI_ACPI_TABLE_PROTOCOL * FindAcpiTableProtocol(VOID)
Definition: CloudHvAcpi.c:25
EFI_STATUS EFIAPI AcpiPlatformEntryPoint(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
Definition: AcpiPlatform.c:159
#define NULL
Definition: Base.h:319
#define STATIC
Definition: Base.h:264
#define IN
Definition: Base.h:279
#define ASSERT_EFI_ERROR(StatusParameter)
Definition: DebugLib.h:462
#define DEBUG(Expression)
Definition: DebugLib.h:434
EFI_STATUS EFIAPI InstallAcpiTables(IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable)
Definition: AcpiPlatform.c:30
#define PcdGetBool(TokenName)
Definition: PcdLib.h:401
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
VOID * EFI_EVENT
Definition: UefiBaseType.h:37
VOID * EFI_HANDLE
Definition: UefiBaseType.h:33
EFI_BOOT_SERVICES * gBS