mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
ArmVirtPkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ArmVirtPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
parent
40b0b23ed3
commit
2b16a4fb91
@ -97,7 +97,8 @@ InstallCloudHvAcpiTables (
|
|||||||
//
|
//
|
||||||
if ((DsdtPtr == NULL) &&
|
if ((DsdtPtr == NULL) &&
|
||||||
(EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE ==
|
(EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE ==
|
||||||
((EFI_ACPI_COMMON_HEADER *)AcpiTablePtr)->Signature)) {
|
((EFI_ACPI_COMMON_HEADER *)AcpiTablePtr)->Signature))
|
||||||
|
{
|
||||||
DsdtPtr = (UINT64 *)((EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE *)AcpiTablePtr)->XDsdt;
|
DsdtPtr = (UINT64 *)((EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE *)AcpiTablePtr)->XDsdt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,8 +39,9 @@ PlatformHasAcpiDt (
|
|||||||
// unbootable anyway (due to lacking hardware description), so tolerate no
|
// unbootable anyway (due to lacking hardware description), so tolerate no
|
||||||
// errors here.
|
// errors here.
|
||||||
//
|
//
|
||||||
if (MAX_UINTN == MAX_UINT64 &&
|
if ((MAX_UINTN == MAX_UINT64) &&
|
||||||
!PcdGetBool (PcdForceNoAcpi)) {
|
!PcdGetBool (PcdForceNoAcpi))
|
||||||
|
{
|
||||||
Status = gBS->InstallProtocolInterface (
|
Status = gBS->InstallProtocolInterface (
|
||||||
&ImageHandle,
|
&ImageHandle,
|
||||||
&gEdkiiPlatformHasAcpiGuid,
|
&gEdkiiPlatformHasAcpiGuid,
|
||||||
|
@ -117,8 +117,10 @@ GetNextHob (
|
|||||||
if (Hob.Header->HobType == Type) {
|
if (Hob.Header->HobType == Type) {
|
||||||
return Hob.Raw;
|
return Hob.Raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,8 +185,10 @@ GetNextGuidHob (
|
|||||||
if (CompareGuid (Guid, &GuidHob.Guid->Name)) {
|
if (CompareGuid (Guid, &GuidHob.Guid->Name)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuidHob.Raw = GET_NEXT_HOB (GuidHob);
|
GuidHob.Raw = GET_NEXT_HOB (GuidHob);
|
||||||
}
|
}
|
||||||
|
|
||||||
return GuidHob.Raw;
|
return GuidHob.Raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,26 +37,39 @@ ArmVirtGicArchLibConstructor (
|
|||||||
UINT64 DistBase, CpuBase, RedistBase;
|
UINT64 DistBase, CpuBase, RedistBase;
|
||||||
RETURN_STATUS PcdStatus;
|
RETURN_STATUS PcdStatus;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
GicRevision = 2;
|
GicRevision = 2;
|
||||||
Status = FdtClient->FindCompatibleNodeReg (FdtClient, "arm,cortex-a15-gic",
|
Status = FdtClient->FindCompatibleNodeReg (
|
||||||
(CONST VOID **)&Reg, &AddressCells, &SizeCells,
|
FdtClient,
|
||||||
&RegSize);
|
"arm,cortex-a15-gic",
|
||||||
|
(CONST VOID **)&Reg,
|
||||||
|
&AddressCells,
|
||||||
|
&SizeCells,
|
||||||
|
&RegSize
|
||||||
|
);
|
||||||
if (Status == EFI_NOT_FOUND) {
|
if (Status == EFI_NOT_FOUND) {
|
||||||
GicRevision = 3;
|
GicRevision = 3;
|
||||||
Status = FdtClient->FindCompatibleNodeReg (FdtClient, "arm,gic-v3",
|
Status = FdtClient->FindCompatibleNodeReg (
|
||||||
(CONST VOID **)&Reg, &AddressCells, &SizeCells,
|
FdtClient,
|
||||||
&RegSize);
|
"arm,gic-v3",
|
||||||
|
(CONST VOID **)&Reg,
|
||||||
|
&AddressCells,
|
||||||
|
&SizeCells,
|
||||||
|
&RegSize
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (GicRevision) {
|
switch (GicRevision) {
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
//
|
//
|
||||||
// The GIC v3 DT binding describes a series of at least 3 physical (base
|
// The GIC v3 DT binding describes a series of at least 3 physical (base
|
||||||
@ -85,8 +98,12 @@ ArmVirtGicArchLibConstructor (
|
|||||||
PcdStatus = PcdSet64S (PcdGicRedistributorsBase, RedistBase);
|
PcdStatus = PcdSet64S (PcdGicRedistributorsBase, RedistBase);
|
||||||
ASSERT_RETURN_ERROR (PcdStatus);
|
ASSERT_RETURN_ERROR (PcdStatus);
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "Found GIC v3 (re)distributor @ 0x%Lx (0x%Lx)\n",
|
DEBUG ((
|
||||||
DistBase, RedistBase));
|
DEBUG_INFO,
|
||||||
|
"Found GIC v3 (re)distributor @ 0x%Lx (0x%Lx)\n",
|
||||||
|
DistBase,
|
||||||
|
RedistBase
|
||||||
|
));
|
||||||
|
|
||||||
//
|
//
|
||||||
// The default implementation of ArmGicArchLib is responsible for enabling
|
// The default implementation of ArmGicArchLib is responsible for enabling
|
||||||
@ -136,6 +153,7 @@ ArmVirtGicArchLibConstructor (
|
|||||||
DEBUG ((DEBUG_ERROR, "%a: No GIC revision specified!\n", __FUNCTION__));
|
DEBUG ((DEBUG_ERROR, "%a: No GIC revision specified!\n", __FUNCTION__));
|
||||||
return RETURN_NOT_FOUND;
|
return RETURN_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RETURN_SUCCESS;
|
return RETURN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,23 +30,36 @@ ArmVirtPL031FdtClientLibConstructor (
|
|||||||
UINT64 RegBase;
|
UINT64 RegBase;
|
||||||
RETURN_STATUS PcdStatus;
|
RETURN_STATUS PcdStatus;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FdtClient->FindCompatibleNode (FdtClient, "arm,pl031", &Node);
|
Status = FdtClient->FindCompatibleNode (FdtClient, "arm,pl031", &Node);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN, "%a: No 'arm,pl031' compatible DT node found\n",
|
DEBUG ((
|
||||||
__FUNCTION__));
|
DEBUG_WARN,
|
||||||
|
"%a: No 'arm,pl031' compatible DT node found\n",
|
||||||
|
__FUNCTION__
|
||||||
|
));
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = FdtClient->GetNodeProperty (FdtClient, Node, "reg",
|
Status = FdtClient->GetNodeProperty (
|
||||||
(CONST VOID **)&Reg, &RegSize);
|
FdtClient,
|
||||||
|
Node,
|
||||||
|
"reg",
|
||||||
|
(CONST VOID **)&Reg,
|
||||||
|
&RegSize
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN,
|
DEBUG ((
|
||||||
|
DEBUG_WARN,
|
||||||
"%a: No 'reg' property found in 'arm,pl031' compatible DT node\n",
|
"%a: No 'reg' property found in 'arm,pl031' compatible DT node\n",
|
||||||
__FUNCTION__));
|
__FUNCTION__
|
||||||
|
));
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,8 +79,13 @@ ArmVirtPL031FdtClientLibConstructor (
|
|||||||
// need to disable it in the device tree to prevent the OS from attaching
|
// need to disable it in the device tree to prevent the OS from attaching
|
||||||
// its device driver as well.
|
// its device driver as well.
|
||||||
//
|
//
|
||||||
Status = FdtClient->SetNodeProperty (FdtClient, Node, "status",
|
Status = FdtClient->SetNodeProperty (
|
||||||
"disabled", sizeof ("disabled"));
|
FdtClient,
|
||||||
|
Node,
|
||||||
|
"status",
|
||||||
|
"disabled",
|
||||||
|
sizeof ("disabled")
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN, "Failed to set PL031 status to 'disabled'\n"));
|
DEBUG ((DEBUG_WARN, "Failed to set PL031 status to 'disabled'\n"));
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,6 @@ STATIC CONST EFI_PCI_ROOT_BRIDGE_DEVICE_PATH mEfiPciRootBridgeDevicePath = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED
|
GLOBAL_REMOVE_IF_UNREFERENCED
|
||||||
CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
|
CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
|
||||||
L"Mem", L"I/O", L"Bus"
|
L"Mem", L"I/O", L"Bus"
|
||||||
@ -103,11 +102,11 @@ PciHostBridgeUtilityGetRootBridges (
|
|||||||
(Mem == NULL) ||
|
(Mem == NULL) ||
|
||||||
(MemAbove4G == NULL) ||
|
(MemAbove4G == NULL) ||
|
||||||
(PMem == NULL) ||
|
(PMem == NULL) ||
|
||||||
(PMemAbove4G == NULL)) {
|
(PMemAbove4G == NULL))
|
||||||
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
*Count = 1;
|
*Count = 1;
|
||||||
|
|
||||||
mRootBridge.Segment = 0;
|
mRootBridge.Segment = 0;
|
||||||
@ -178,6 +177,7 @@ PciHostBridgeUtilityResourceConflict (
|
|||||||
{
|
{
|
||||||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;
|
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;
|
||||||
UINTN RootBridgeIndex;
|
UINTN RootBridgeIndex;
|
||||||
|
|
||||||
DEBUG ((DEBUG_ERROR, "PciHostBridge: Resource conflict happens!\n"));
|
DEBUG ((DEBUG_ERROR, "PciHostBridge: Resource conflict happens!\n"));
|
||||||
|
|
||||||
RootBridgeIndex = 0;
|
RootBridgeIndex = 0;
|
||||||
@ -185,7 +185,8 @@ PciHostBridgeUtilityResourceConflict (
|
|||||||
while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) {
|
while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) {
|
||||||
DEBUG ((DEBUG_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++));
|
DEBUG ((DEBUG_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++));
|
||||||
for ( ; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) {
|
for ( ; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) {
|
||||||
ASSERT (Descriptor->ResType <
|
ASSERT (
|
||||||
|
Descriptor->ResType <
|
||||||
ARRAY_SIZE (mPciHostBridgeAcpiAddressSpaceTypeStr)
|
ARRAY_SIZE (mPciHostBridgeAcpiAddressSpaceTypeStr)
|
||||||
);
|
);
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
@ -207,6 +208,7 @@ PciHostBridgeUtilityResourceConflict (
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Skip the END descriptor for root bridge
|
// Skip the END descriptor for root bridge
|
||||||
//
|
//
|
||||||
|
@ -39,12 +39,20 @@ ArmPsciResetSystemLibConstructor (
|
|||||||
FDT_CLIENT_PROTOCOL *FdtClient;
|
FDT_CLIENT_PROTOCOL *FdtClient;
|
||||||
CONST VOID *Prop;
|
CONST VOID *Prop;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FdtClient->FindCompatibleNodeProperty (FdtClient, "arm,psci-0.2",
|
Status = FdtClient->FindCompatibleNodeProperty (
|
||||||
"method", &Prop, NULL);
|
FdtClient,
|
||||||
|
"arm,psci-0.2",
|
||||||
|
"method",
|
||||||
|
&Prop,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -54,10 +62,15 @@ ArmPsciResetSystemLibConstructor (
|
|||||||
} else if (AsciiStrnCmp (Prop, "smc", 3) == 0) {
|
} else if (AsciiStrnCmp (Prop, "smc", 3) == 0) {
|
||||||
mArmPsciMethod = 2;
|
mArmPsciMethod = 2;
|
||||||
} else {
|
} else {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: Unknown PSCI method \"%a\"\n", __FUNCTION__,
|
DEBUG ((
|
||||||
Prop));
|
DEBUG_ERROR,
|
||||||
|
"%a: Unknown PSCI method \"%a\"\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
Prop
|
||||||
|
));
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,16 +62,19 @@ DiscoverPsciMethod (
|
|||||||
// Iterate over the NULL-separated items in the compatible string
|
// Iterate over the NULL-separated items in the compatible string
|
||||||
//
|
//
|
||||||
for (CompatibleItem = Compatible; CompatibleItem < Compatible + Len;
|
for (CompatibleItem = Compatible; CompatibleItem < Compatible + Len;
|
||||||
CompatibleItem += 1 + AsciiStrLen (CompatibleItem)) {
|
CompatibleItem += 1 + AsciiStrLen (CompatibleItem))
|
||||||
|
{
|
||||||
if (AsciiStrCmp (CompatibleItem, "arm,psci-0.2") != 0) {
|
if (AsciiStrCmp (CompatibleItem, "arm,psci-0.2") != 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Prop = fdt_getprop (DeviceTreeBase, Node, "method", NULL);
|
Prop = fdt_getprop (DeviceTreeBase, Node, "method", NULL);
|
||||||
if (!Prop) {
|
if (!Prop) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: Missing PSCI method property\n",
|
DEBUG ((
|
||||||
__FUNCTION__));
|
DEBUG_ERROR,
|
||||||
|
"%a: Missing PSCI method property\n",
|
||||||
|
__FUNCTION__
|
||||||
|
));
|
||||||
return PsciMethodUnknown;
|
return PsciMethodUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,12 +83,17 @@ DiscoverPsciMethod (
|
|||||||
} else if (AsciiStrnCmp (Prop, "smc", 3) == 0) {
|
} else if (AsciiStrnCmp (Prop, "smc", 3) == 0) {
|
||||||
return PsciMethodSmc;
|
return PsciMethodSmc;
|
||||||
} else {
|
} else {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: Unknown PSCI method \"%a\"\n", __FUNCTION__,
|
DEBUG ((
|
||||||
Prop));
|
DEBUG_ERROR,
|
||||||
|
"%a: Unknown PSCI method \"%a\"\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
Prop
|
||||||
|
));
|
||||||
return PsciMethodUnknown;
|
return PsciMethodUnknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return PsciMethodUnknown;
|
return PsciMethodUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,18 +37,28 @@ ArmVirtTimerFdtClientLibConstructor (
|
|||||||
INT32 SecIntrNum, IntrNum, VirtIntrNum, HypIntrNum;
|
INT32 SecIntrNum, IntrNum, VirtIntrNum, HypIntrNum;
|
||||||
RETURN_STATUS PcdStatus;
|
RETURN_STATUS PcdStatus;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FdtClient->FindCompatibleNodeProperty (FdtClient, "arm,armv7-timer",
|
Status = FdtClient->FindCompatibleNodeProperty (
|
||||||
"interrupts", (CONST VOID **)&InterruptProp,
|
FdtClient,
|
||||||
&PropSize);
|
"arm,armv7-timer",
|
||||||
if (Status == EFI_NOT_FOUND) {
|
"interrupts",
|
||||||
Status = FdtClient->FindCompatibleNodeProperty (FdtClient,
|
|
||||||
"arm,armv8-timer", "interrupts",
|
|
||||||
(CONST VOID **)&InterruptProp,
|
(CONST VOID **)&InterruptProp,
|
||||||
&PropSize);
|
&PropSize
|
||||||
|
);
|
||||||
|
if (Status == EFI_NOT_FOUND) {
|
||||||
|
Status = FdtClient->FindCompatibleNodeProperty (
|
||||||
|
FdtClient,
|
||||||
|
"arm,armv8-timer",
|
||||||
|
"interrupts",
|
||||||
|
(CONST VOID **)&InterruptProp,
|
||||||
|
&PropSize
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -70,8 +80,14 @@ ArmVirtTimerFdtClientLibConstructor (
|
|||||||
HypIntrNum = PropSize < 48 ? 0 : SwapBytes32 (InterruptProp[3].Number)
|
HypIntrNum = PropSize < 48 ? 0 : SwapBytes32 (InterruptProp[3].Number)
|
||||||
+ (InterruptProp[3].Type ? 16 : 0);
|
+ (InterruptProp[3].Type ? 16 : 0);
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "Found Timer interrupts %d, %d, %d, %d\n",
|
DEBUG ((
|
||||||
SecIntrNum, IntrNum, VirtIntrNum, HypIntrNum));
|
DEBUG_INFO,
|
||||||
|
"Found Timer interrupts %d, %d, %d, %d\n",
|
||||||
|
SecIntrNum,
|
||||||
|
IntrNum,
|
||||||
|
VirtIntrNum,
|
||||||
|
HypIntrNum
|
||||||
|
));
|
||||||
|
|
||||||
PcdStatus = PcdSet32S (PcdArmArchTimerSecIntrNum, SecIntrNum);
|
PcdStatus = PcdSet32S (PcdArmArchTimerSecIntrNum, SecIntrNum);
|
||||||
ASSERT_RETURN_ERROR (PcdStatus);
|
ASSERT_RETURN_ERROR (PcdStatus);
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
|
||||||
#include <Base.h>
|
#include <Base.h>
|
||||||
|
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
@ -19,7 +18,6 @@
|
|||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Assert the validity of a PCI address. A valid PCI address should contain 1's
|
Assert the validity of a PCI address. A valid PCI address should contain 1's
|
||||||
only in the low 28 bits.
|
only in the low 28 bits.
|
||||||
@ -74,7 +72,6 @@ PciExpressLibInitialize (
|
|||||||
return RETURN_SUCCESS;
|
return RETURN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gets the base address of PCI Express.
|
Gets the base address of PCI Express.
|
||||||
|
|
||||||
@ -1282,7 +1279,7 @@ PciExpressReadBuffer (
|
|||||||
Buffer = (UINT8 *)Buffer + 1;
|
Buffer = (UINT8 *)Buffer + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Size >= sizeof (UINT16) && (StartAddress & 2) != 0) {
|
if ((Size >= sizeof (UINT16)) && ((StartAddress & 2) != 0)) {
|
||||||
//
|
//
|
||||||
// Read a word if StartAddress is word aligned
|
// Read a word if StartAddress is word aligned
|
||||||
//
|
//
|
||||||
@ -1382,7 +1379,7 @@ PciExpressWriteBuffer (
|
|||||||
Buffer = (UINT8 *)Buffer + 1;
|
Buffer = (UINT8 *)Buffer + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Size >= sizeof (UINT16) && (StartAddress & 2) != 0) {
|
if ((Size >= sizeof (UINT16)) && ((StartAddress & 2) != 0)) {
|
||||||
//
|
//
|
||||||
// Write a word if StartAddress is word aligned
|
// Write a word if StartAddress is word aligned
|
||||||
//
|
//
|
||||||
|
@ -83,6 +83,7 @@ GetSerialConsolePortAddress (
|
|||||||
if (Path == NULL) {
|
if (Path == NULL) {
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
SerialConsoleNode = fdt_path_offset (Fdt, Path);
|
SerialConsoleNode = fdt_path_offset (Fdt, Path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,11 +89,11 @@ SerialPortGetBaseAddress (
|
|||||||
// Iterate over the NULL-separated items in the compatible string
|
// Iterate over the NULL-separated items in the compatible string
|
||||||
//
|
//
|
||||||
for (CompatibleItem = Compatible; CompatibleItem < Compatible + Len;
|
for (CompatibleItem = Compatible; CompatibleItem < Compatible + Len;
|
||||||
CompatibleItem += 1 + AsciiStrLen (CompatibleItem)) {
|
CompatibleItem += 1 + AsciiStrLen (CompatibleItem))
|
||||||
|
{
|
||||||
if (AsciiStrCmp (CompatibleItem, "arm,pl011") == 0) {
|
if (AsciiStrCmp (CompatibleItem, "arm,pl011") == 0) {
|
||||||
NodeStatus = fdt_getprop (DeviceTreeBase, Node, "status", &Len);
|
NodeStatus = fdt_getprop (DeviceTreeBase, Node, "status", &Len);
|
||||||
if (NodeStatus != NULL && AsciiStrCmp (NodeStatus, "okay") != 0) {
|
if ((NodeStatus != NULL) && (AsciiStrCmp (NodeStatus, "okay") != 0)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,6 +101,7 @@ SerialPortGetBaseAddress (
|
|||||||
if (Len != 16) {
|
if (Len != 16) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
UartBase = (UINTN)fdt64_to_cpu (ReadUnaligned64 (RegProperty));
|
UartBase = (UINTN)fdt64_to_cpu (ReadUnaligned64 (RegProperty));
|
||||||
|
|
||||||
BaudRate = (UINTN)FixedPcdGet64 (PcdUartDefaultBaudRate);
|
BaudRate = (UINTN)FixedPcdGet64 (PcdUartDefaultBaudRate);
|
||||||
@ -124,6 +125,7 @@ SerialPortGetBaseAddress (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,6 +152,7 @@ SerialPortWrite (
|
|||||||
if (SerialRegisterBase != 0) {
|
if (SerialRegisterBase != 0) {
|
||||||
return PL011UartWrite ((UINTN)SerialRegisterBase, Buffer, NumberOfBytes);
|
return PL011UartWrite ((UINTN)SerialRegisterBase, Buffer, NumberOfBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,4 +276,3 @@ SerialPortSetAttributes (
|
|||||||
{
|
{
|
||||||
return RETURN_UNSUPPORTED;
|
return RETURN_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,9 +57,10 @@ FdtPL011SerialPortLibInitialize (
|
|||||||
EFI_STOP_BITS_TYPE StopBits;
|
EFI_STOP_BITS_TYPE StopBits;
|
||||||
|
|
||||||
Hob = GetFirstGuidHob (&gEarlyPL011BaseAddressGuid);
|
Hob = GetFirstGuidHob (&gEarlyPL011BaseAddressGuid);
|
||||||
if (Hob == NULL || GET_GUID_HOB_DATA_SIZE (Hob) != sizeof *UartBase) {
|
if ((Hob == NULL) || (GET_GUID_HOB_DATA_SIZE (Hob) != sizeof *UartBase)) {
|
||||||
return RETURN_NOT_FOUND;
|
return RETURN_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
UartBase = GET_GUID_HOB_DATA (Hob);
|
UartBase = GET_GUID_HOB_DATA (Hob);
|
||||||
|
|
||||||
mSerialBaseAddress = (UINTN)*UartBase;
|
mSerialBaseAddress = (UINTN)*UartBase;
|
||||||
@ -104,6 +105,7 @@ SerialPortWrite (
|
|||||||
if (mSerialBaseAddress != 0) {
|
if (mSerialBaseAddress != 0) {
|
||||||
return PL011UartWrite (mSerialBaseAddress, Buffer, NumberOfBytes);
|
return PL011UartWrite (mSerialBaseAddress, Buffer, NumberOfBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,6 +129,7 @@ SerialPortRead (
|
|||||||
if (mSerialBaseAddress != 0) {
|
if (mSerialBaseAddress != 0) {
|
||||||
return PL011UartRead (mSerialBaseAddress, Buffer, NumberOfBytes);
|
return PL011UartRead (mSerialBaseAddress, Buffer, NumberOfBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,6 +149,7 @@ SerialPortPoll (
|
|||||||
if (mSerialBaseAddress != 0) {
|
if (mSerialBaseAddress != 0) {
|
||||||
return PL011UartPoll (mSerialBaseAddress);
|
return PL011UartPoll (mSerialBaseAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,4 +269,3 @@ SerialPortGetControl (
|
|||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,8 @@ KvmtoolRtcMapMemory (
|
|||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
DEBUG_ERROR, "Failed to add memory space. Status = %r\n",
|
DEBUG_ERROR,
|
||||||
|
"Failed to add memory space. Status = %r\n",
|
||||||
Status
|
Status
|
||||||
));
|
));
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -106,7 +106,8 @@ SetupVariableStore (
|
|||||||
|
|
||||||
if ((FlashNvStorageVariableSize == 0) ||
|
if ((FlashNvStorageVariableSize == 0) ||
|
||||||
(FlashNvStorageFtwWorkingSize == 0) ||
|
(FlashNvStorageFtwWorkingSize == 0) ||
|
||||||
(FlashNvStorageFtwSpareSize == 0)) {
|
(FlashNvStorageFtwSpareSize == 0))
|
||||||
|
{
|
||||||
DEBUG ((DEBUG_ERROR, "FlashNvStorage size not defined\n"));
|
DEBUG ((DEBUG_ERROR, "FlashNvStorage size not defined\n"));
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
@ -196,6 +197,7 @@ NorFlashPlatformGetDevices (
|
|||||||
*Count = mNorFlashDeviceCount;
|
*Count = mNorFlashDeviceCount;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +252,8 @@ NorFlashPlatformLibConstructor (
|
|||||||
"cfi-flash",
|
"cfi-flash",
|
||||||
Node,
|
Node,
|
||||||
&Node
|
&Node
|
||||||
)) {
|
))
|
||||||
|
{
|
||||||
Status = mFdtClient->GetNodeProperty (
|
Status = mFdtClient->GetNodeProperty (
|
||||||
mFdtClient,
|
mFdtClient,
|
||||||
Node,
|
Node,
|
||||||
@ -278,15 +281,20 @@ NorFlashPlatformLibConstructor (
|
|||||||
&PropSize
|
&PropSize
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: GetNodeProperty () failed (Status == %r)\n",
|
DEBUG ((
|
||||||
__FUNCTION__, Status));
|
DEBUG_ERROR,
|
||||||
|
"%a: GetNodeProperty () failed (Status == %r)\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
Status
|
||||||
|
));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT ((PropSize % (4 * sizeof (UINT32))) == 0);
|
ASSERT ((PropSize % (4 * sizeof (UINT32))) == 0);
|
||||||
|
|
||||||
while ((PropSize >= (4 * sizeof (UINT32))) &&
|
while ((PropSize >= (4 * sizeof (UINT32))) &&
|
||||||
(mNorFlashDeviceCount < MAX_FLASH_DEVICES)) {
|
(mNorFlashDeviceCount < MAX_FLASH_DEVICES))
|
||||||
|
{
|
||||||
Base = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[0]));
|
Base = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[0]));
|
||||||
Size = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[2]));
|
Size = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[2]));
|
||||||
Reg += 4;
|
Reg += 4;
|
||||||
@ -298,7 +306,8 @@ NorFlashPlatformLibConstructor (
|
|||||||
// The firmware is not updatable from inside the guest anyway.
|
// The firmware is not updatable from inside the guest anyway.
|
||||||
//
|
//
|
||||||
if ((PcdGet64 (PcdFvBaseAddress) + PcdGet32 (PcdFvSize) > Base) &&
|
if ((PcdGet64 (PcdFvBaseAddress) + PcdGet32 (PcdFvSize) > Base) &&
|
||||||
(Base + Size) > PcdGet64 (PcdFvBaseAddress)) {
|
((Base + Size) > PcdGet64 (PcdFvBaseAddress)))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,6 +335,7 @@ NorFlashPlatformLibConstructor (
|
|||||||
UefiVarStoreIndex = mNorFlashDeviceCount - 1;
|
UefiVarStoreIndex = mNorFlashDeviceCount - 1;
|
||||||
mUefiVarStoreNode = Node;
|
mUefiVarStoreNode = Node;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mNorFlashDevices[UefiVarStoreIndex].DeviceBaseAddress != 0) {
|
if (mNorFlashDevices[UefiVarStoreIndex].DeviceBaseAddress != 0) {
|
||||||
return SetupVariableStore (&mNorFlashDevices[UefiVarStoreIndex]);
|
return SetupVariableStore (&mNorFlashDevices[UefiVarStoreIndex]);
|
||||||
}
|
}
|
||||||
|
@ -43,22 +43,41 @@ NorFlashPlatformGetDevices (
|
|||||||
UINT64 Base;
|
UINT64 Base;
|
||||||
UINT64 Size;
|
UINT64 Size;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Num = 0;
|
Num = 0;
|
||||||
for (FindNodeStatus = FdtClient->FindCompatibleNode (FdtClient,
|
for (FindNodeStatus = FdtClient->FindCompatibleNode (
|
||||||
"cfi-flash", &Node);
|
FdtClient,
|
||||||
|
"cfi-flash",
|
||||||
|
&Node
|
||||||
|
);
|
||||||
!EFI_ERROR (FindNodeStatus) && Num < MAX_FLASH_BANKS;
|
!EFI_ERROR (FindNodeStatus) && Num < MAX_FLASH_BANKS;
|
||||||
FindNodeStatus = FdtClient->FindNextCompatibleNode (FdtClient,
|
FindNodeStatus = FdtClient->FindNextCompatibleNode (
|
||||||
"cfi-flash", Node, &Node)) {
|
FdtClient,
|
||||||
|
"cfi-flash",
|
||||||
Status = FdtClient->GetNodeProperty (FdtClient, Node, "reg",
|
Node,
|
||||||
(CONST VOID **)&Reg, &PropSize);
|
&Node
|
||||||
|
))
|
||||||
|
{
|
||||||
|
Status = FdtClient->GetNodeProperty (
|
||||||
|
FdtClient,
|
||||||
|
Node,
|
||||||
|
"reg",
|
||||||
|
(CONST VOID **)&Reg,
|
||||||
|
&PropSize
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: GetNodeProperty () failed (Status == %r)\n",
|
DEBUG ((
|
||||||
__FUNCTION__, Status));
|
DEBUG_ERROR,
|
||||||
|
"%a: GetNodeProperty () failed (Status == %r)\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
Status
|
||||||
|
));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +95,8 @@ NorFlashPlatformGetDevices (
|
|||||||
// The firmware is not updatable from inside the guest anyway.
|
// The firmware is not updatable from inside the guest anyway.
|
||||||
//
|
//
|
||||||
if ((PcdGet64 (PcdFvBaseAddress) + PcdGet32 (PcdFvSize) > Base) &&
|
if ((PcdGet64 (PcdFvBaseAddress) + PcdGet32 (PcdFvSize) > Base) &&
|
||||||
(Base + Size) > PcdGet64 (PcdFvBaseAddress)) {
|
((Base + Size) > PcdGet64 (PcdFvBaseAddress)))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,8 +117,13 @@ NorFlashPlatformGetDevices (
|
|||||||
// code, which is not intended to be guest updatable, and is usually backed
|
// code, which is not intended to be guest updatable, and is usually backed
|
||||||
// in a readonly manner by QEMU anyway.
|
// in a readonly manner by QEMU anyway.
|
||||||
//
|
//
|
||||||
Status = FdtClient->SetNodeProperty (FdtClient, Node, "status",
|
Status = FdtClient->SetNodeProperty (
|
||||||
"disabled", sizeof ("disabled"));
|
FdtClient,
|
||||||
|
Node,
|
||||||
|
"status",
|
||||||
|
"disabled",
|
||||||
|
sizeof ("disabled")
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN, "Failed to set NOR flash status to 'disabled'\n"));
|
DEBUG ((DEBUG_WARN, "Failed to set NOR flash status to 'disabled'\n"));
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
#define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) }
|
#define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) }
|
||||||
|
|
||||||
|
|
||||||
#pragma pack (1)
|
#pragma pack (1)
|
||||||
typedef struct {
|
typedef struct {
|
||||||
VENDOR_DEVICE_PATH SerialDxe;
|
VENDOR_DEVICE_PATH SerialDxe;
|
||||||
@ -87,7 +86,6 @@ STATIC PLATFORM_SERIAL_CONSOLE mSerialConsole = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#pragma pack (1)
|
#pragma pack (1)
|
||||||
typedef struct {
|
typedef struct {
|
||||||
USB_CLASS_DEVICE_PATH Keyboard;
|
USB_CLASS_DEVICE_PATH Keyboard;
|
||||||
@ -120,7 +118,6 @@ STATIC PLATFORM_USB_KEYBOARD mUsbKeyboard = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if the handle satisfies a particular condition.
|
Check if the handle satisfies a particular condition.
|
||||||
|
|
||||||
@ -139,7 +136,6 @@ BOOLEAN
|
|||||||
IN CONST CHAR16 *ReportText
|
IN CONST CHAR16 *ReportText
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Process a handle.
|
Process a handle.
|
||||||
|
|
||||||
@ -180,14 +176,24 @@ FilterAndProcess (
|
|||||||
UINTN NoHandles;
|
UINTN NoHandles;
|
||||||
UINTN Idx;
|
UINTN Idx;
|
||||||
|
|
||||||
Status = gBS->LocateHandleBuffer (ByProtocol, ProtocolGuid,
|
Status = gBS->LocateHandleBuffer (
|
||||||
NULL /* SearchKey */, &NoHandles, &Handles);
|
ByProtocol,
|
||||||
|
ProtocolGuid,
|
||||||
|
NULL /* SearchKey */,
|
||||||
|
&NoHandles,
|
||||||
|
&Handles
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// This is not an error, just an informative condition.
|
// This is not an error, just an informative condition.
|
||||||
//
|
//
|
||||||
DEBUG ((DEBUG_VERBOSE, "%a: %g: %r\n", __FUNCTION__, ProtocolGuid,
|
DEBUG ((
|
||||||
Status));
|
DEBUG_VERBOSE,
|
||||||
|
"%a: %g: %r\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
ProtocolGuid,
|
||||||
|
Status
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +214,7 @@ FilterAndProcess (
|
|||||||
DevicePathText = Fallback;
|
DevicePathText = Fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Filter == NULL || Filter (Handles[Idx], DevicePathText)) {
|
if ((Filter == NULL) || Filter (Handles[Idx], DevicePathText)) {
|
||||||
Process (Handles[Idx], DevicePathText);
|
Process (Handles[Idx], DevicePathText);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,10 +222,10 @@ FilterAndProcess (
|
|||||||
FreePool (DevicePathText);
|
FreePool (DevicePathText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gBS->FreePool (Handles);
|
gBS->FreePool (Handles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This FILTER_FUNCTION checks if a handle corresponds to a PCI display device.
|
This FILTER_FUNCTION checks if a handle corresponds to a PCI display device.
|
||||||
**/
|
**/
|
||||||
@ -235,8 +241,11 @@ IsPciDisplay (
|
|||||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||||
PCI_TYPE00 Pci;
|
PCI_TYPE00 Pci;
|
||||||
|
|
||||||
Status = gBS->HandleProtocol (Handle, &gEfiPciIoProtocolGuid,
|
Status = gBS->HandleProtocol (
|
||||||
(VOID**)&PciIo);
|
Handle,
|
||||||
|
&gEfiPciIoProtocolGuid,
|
||||||
|
(VOID **)&PciIo
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// This is not an error worth reporting.
|
// This is not an error worth reporting.
|
||||||
@ -244,8 +253,13 @@ IsPciDisplay (
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0 /* Offset */,
|
Status = PciIo->Pci.Read (
|
||||||
sizeof Pci / sizeof (UINT32), &Pci);
|
PciIo,
|
||||||
|
EfiPciIoWidthUint32,
|
||||||
|
0 /* Offset */,
|
||||||
|
sizeof Pci / sizeof (UINT32),
|
||||||
|
&Pci
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __FUNCTION__, ReportText, Status));
|
DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __FUNCTION__, ReportText, Status));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -254,7 +268,6 @@ IsPciDisplay (
|
|||||||
return IS_PCI_DISPLAY (&Pci);
|
return IS_PCI_DISPLAY (&Pci);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at
|
This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at
|
||||||
the VIRTIO_DEVICE_PROTOCOL level.
|
the VIRTIO_DEVICE_PROTOCOL level.
|
||||||
@ -270,16 +283,19 @@ IsVirtioRng (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
VIRTIO_DEVICE_PROTOCOL *VirtIo;
|
VIRTIO_DEVICE_PROTOCOL *VirtIo;
|
||||||
|
|
||||||
Status = gBS->HandleProtocol (Handle, &gVirtioDeviceProtocolGuid,
|
Status = gBS->HandleProtocol (
|
||||||
(VOID**)&VirtIo);
|
Handle,
|
||||||
|
&gVirtioDeviceProtocolGuid,
|
||||||
|
(VOID **)&VirtIo
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (BOOLEAN)(VirtIo->SubSystemDeviceId ==
|
return (BOOLEAN)(VirtIo->SubSystemDeviceId ==
|
||||||
VIRTIO_SUBSYSTEM_ENTROPY_SOURCE);
|
VIRTIO_SUBSYSTEM_ENTROPY_SOURCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at
|
This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at
|
||||||
the EFI_PCI_IO_PROTOCOL level.
|
the EFI_PCI_IO_PROTOCOL level.
|
||||||
@ -300,8 +316,11 @@ IsVirtioPciRng (
|
|||||||
BOOLEAN Virtio10;
|
BOOLEAN Virtio10;
|
||||||
UINT16 SubsystemId;
|
UINT16 SubsystemId;
|
||||||
|
|
||||||
Status = gBS->HandleProtocol (Handle, &gEfiPciIoProtocolGuid,
|
Status = gBS->HandleProtocol (
|
||||||
(VOID**)&PciIo);
|
Handle,
|
||||||
|
&gEfiPciIoProtocolGuid,
|
||||||
|
(VOID **)&PciIo
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -309,11 +328,17 @@ IsVirtioPciRng (
|
|||||||
//
|
//
|
||||||
// Read and check VendorId.
|
// Read and check VendorId.
|
||||||
//
|
//
|
||||||
Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_VENDOR_ID_OFFSET,
|
Status = PciIo->Pci.Read (
|
||||||
1, &VendorId);
|
PciIo,
|
||||||
|
EfiPciIoWidthUint16,
|
||||||
|
PCI_VENDOR_ID_OFFSET,
|
||||||
|
1,
|
||||||
|
&VendorId
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto PciError;
|
goto PciError;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VendorId != VIRTIO_VENDOR_ID) {
|
if (VendorId != VIRTIO_VENDOR_ID) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -321,13 +346,24 @@ IsVirtioPciRng (
|
|||||||
//
|
//
|
||||||
// Read DeviceId and RevisionId.
|
// Read DeviceId and RevisionId.
|
||||||
//
|
//
|
||||||
Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_DEVICE_ID_OFFSET,
|
Status = PciIo->Pci.Read (
|
||||||
1, &DeviceId);
|
PciIo,
|
||||||
|
EfiPciIoWidthUint16,
|
||||||
|
PCI_DEVICE_ID_OFFSET,
|
||||||
|
1,
|
||||||
|
&DeviceId
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto PciError;
|
goto PciError;
|
||||||
}
|
}
|
||||||
Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, PCI_REVISION_ID_OFFSET,
|
|
||||||
1, &RevisionId);
|
Status = PciIo->Pci.Read (
|
||||||
|
PciIo,
|
||||||
|
EfiPciIoWidthUint8,
|
||||||
|
PCI_REVISION_ID_OFFSET,
|
||||||
|
1,
|
||||||
|
&RevisionId
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto PciError;
|
goto PciError;
|
||||||
}
|
}
|
||||||
@ -339,10 +375,11 @@ IsVirtioPciRng (
|
|||||||
// SubsystemId will only play a sanity-check role. Otherwise, DeviceId can
|
// SubsystemId will only play a sanity-check role. Otherwise, DeviceId can
|
||||||
// only be sanity-checked, and SubsystemId will decide.
|
// only be sanity-checked, and SubsystemId will decide.
|
||||||
//
|
//
|
||||||
if (DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE &&
|
if ((DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) &&
|
||||||
RevisionId >= 0x01) {
|
(RevisionId >= 0x01))
|
||||||
|
{
|
||||||
Virtio10 = TRUE;
|
Virtio10 = TRUE;
|
||||||
} else if (DeviceId >= 0x1000 && DeviceId <= 0x103F && RevisionId == 0x00) {
|
} else if ((DeviceId >= 0x1000) && (DeviceId <= 0x103F) && (RevisionId == 0x00)) {
|
||||||
Virtio10 = FALSE;
|
Virtio10 = FALSE;
|
||||||
} else {
|
} else {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -351,17 +388,25 @@ IsVirtioPciRng (
|
|||||||
//
|
//
|
||||||
// Read and check SubsystemId as dictated by Virtio10.
|
// Read and check SubsystemId as dictated by Virtio10.
|
||||||
//
|
//
|
||||||
Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16,
|
Status = PciIo->Pci.Read (
|
||||||
PCI_SUBSYSTEM_ID_OFFSET, 1, &SubsystemId);
|
PciIo,
|
||||||
|
EfiPciIoWidthUint16,
|
||||||
|
PCI_SUBSYSTEM_ID_OFFSET,
|
||||||
|
1,
|
||||||
|
&SubsystemId
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto PciError;
|
goto PciError;
|
||||||
}
|
}
|
||||||
if (Virtio10 && SubsystemId >= 0x40) {
|
|
||||||
|
if (Virtio10 && (SubsystemId >= 0x40)) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (!Virtio10 && SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) {
|
|
||||||
|
if (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
PciError:
|
PciError:
|
||||||
@ -369,7 +414,6 @@ PciError:
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This CALLBACK_FUNCTION attempts to connect a handle non-recursively, asking
|
This CALLBACK_FUNCTION attempts to connect a handle non-recursively, asking
|
||||||
the matching driver to produce all first-level child handles.
|
the matching driver to produce all first-level child handles.
|
||||||
@ -390,11 +434,15 @@ Connect (
|
|||||||
NULL, // RemainingDevicePath -- produce all children
|
NULL, // RemainingDevicePath -- produce all children
|
||||||
FALSE // Recursive
|
FALSE // Recursive
|
||||||
);
|
);
|
||||||
DEBUG ((EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE, "%a: %s: %r\n",
|
DEBUG ((
|
||||||
__FUNCTION__, ReportText, Status));
|
EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE,
|
||||||
|
"%a: %s: %r\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
ReportText,
|
||||||
|
Status
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This CALLBACK_FUNCTION retrieves the EFI_DEVICE_PATH_PROTOCOL from the
|
This CALLBACK_FUNCTION retrieves the EFI_DEVICE_PATH_PROTOCOL from the
|
||||||
handle, and adds it to ConOut and ErrOut.
|
handle, and adds it to ConOut and ErrOut.
|
||||||
@ -412,27 +460,46 @@ AddOutput (
|
|||||||
|
|
||||||
DevicePath = DevicePathFromHandle (Handle);
|
DevicePath = DevicePathFromHandle (Handle);
|
||||||
if (DevicePath == NULL) {
|
if (DevicePath == NULL) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: %s: handle %p: device path not found\n",
|
DEBUG ((
|
||||||
__FUNCTION__, ReportText, Handle));
|
DEBUG_ERROR,
|
||||||
|
"%a: %s: handle %p: device path not found\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
ReportText,
|
||||||
|
Handle
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);
|
Status = EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: %s: adding to ConOut: %r\n", __FUNCTION__,
|
DEBUG ((
|
||||||
ReportText, Status));
|
DEBUG_ERROR,
|
||||||
|
"%a: %s: adding to ConOut: %r\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
ReportText,
|
||||||
|
Status
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL);
|
Status = EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: %s: adding to ErrOut: %r\n", __FUNCTION__,
|
DEBUG ((
|
||||||
ReportText, Status));
|
DEBUG_ERROR,
|
||||||
|
"%a: %s: adding to ErrOut: %r\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
ReportText,
|
||||||
|
Status
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG ((DEBUG_VERBOSE, "%a: %s: added to ConOut and ErrOut\n", __FUNCTION__,
|
DEBUG ((
|
||||||
ReportText));
|
DEBUG_VERBOSE,
|
||||||
|
"%a: %s: added to ConOut and ErrOut\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
ReportText
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
@ -482,22 +549,25 @@ PlatformRegisterFvBootOption (
|
|||||||
FreePool (DevicePath);
|
FreePool (DevicePath);
|
||||||
|
|
||||||
BootOptions = EfiBootManagerGetLoadOptions (
|
BootOptions = EfiBootManagerGetLoadOptions (
|
||||||
&BootOptionCount, LoadOptionTypeBoot
|
&BootOptionCount,
|
||||||
|
LoadOptionTypeBoot
|
||||||
);
|
);
|
||||||
|
|
||||||
OptionIndex = EfiBootManagerFindLoadOption (
|
OptionIndex = EfiBootManagerFindLoadOption (
|
||||||
&NewOption, BootOptions, BootOptionCount
|
&NewOption,
|
||||||
|
BootOptions,
|
||||||
|
BootOptionCount
|
||||||
);
|
);
|
||||||
|
|
||||||
if (OptionIndex == -1) {
|
if (OptionIndex == -1) {
|
||||||
Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
|
Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
EfiBootManagerFreeLoadOption (&NewOption);
|
EfiBootManagerFreeLoadOption (&NewOption);
|
||||||
EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
|
EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Remove all MemoryMapped(...)/FvFile(...) and Fv(...)/FvFile(...) boot options
|
Remove all MemoryMapped(...)/FvFile(...) and Fv(...)/FvFile(...) boot options
|
||||||
whose device paths do not resolve exactly to an FvFile in the system.
|
whose device paths do not resolve exactly to an FvFile in the system.
|
||||||
@ -522,8 +592,10 @@ RemoveStaleFvFileOptions (
|
|||||||
UINTN BootOptionCount;
|
UINTN BootOptionCount;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount,
|
BootOptions = EfiBootManagerGetLoadOptions (
|
||||||
LoadOptionTypeBoot);
|
&BootOptionCount,
|
||||||
|
LoadOptionTypeBoot
|
||||||
|
);
|
||||||
|
|
||||||
for (Index = 0; Index < BootOptionCount; ++Index) {
|
for (Index = 0; Index < BootOptionCount; ++Index) {
|
||||||
EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode;
|
EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode;
|
||||||
@ -535,10 +607,11 @@ RemoveStaleFvFileOptions (
|
|||||||
// then keep the boot option.
|
// then keep the boot option.
|
||||||
//
|
//
|
||||||
Node1 = BootOptions[Index].FilePath;
|
Node1 = BootOptions[Index].FilePath;
|
||||||
if (!(DevicePathType (Node1) == HARDWARE_DEVICE_PATH &&
|
if (!((DevicePathType (Node1) == HARDWARE_DEVICE_PATH) &&
|
||||||
DevicePathSubType (Node1) == HW_MEMMAP_DP) &&
|
(DevicePathSubType (Node1) == HW_MEMMAP_DP)) &&
|
||||||
!(DevicePathType (Node1) == MEDIA_DEVICE_PATH &&
|
!((DevicePathType (Node1) == MEDIA_DEVICE_PATH) &&
|
||||||
DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)) {
|
(DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -547,8 +620,9 @@ RemoveStaleFvFileOptions (
|
|||||||
// option.
|
// option.
|
||||||
//
|
//
|
||||||
Node2 = NextDevicePathNode (Node1);
|
Node2 = NextDevicePathNode (Node1);
|
||||||
if (DevicePathType (Node2) != MEDIA_DEVICE_PATH ||
|
if ((DevicePathType (Node2) != MEDIA_DEVICE_PATH) ||
|
||||||
DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP) {
|
(DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,8 +633,11 @@ RemoveStaleFvFileOptions (
|
|||||||
// boot option.
|
// boot option.
|
||||||
//
|
//
|
||||||
SearchNode = Node1;
|
SearchNode = Node1;
|
||||||
Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid,
|
Status = gBS->LocateDevicePath (
|
||||||
&SearchNode, &FvHandle);
|
&gEfiFirmwareVolume2ProtocolGuid,
|
||||||
|
&SearchNode,
|
||||||
|
&FvHandle
|
||||||
|
);
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
@ -574,8 +651,11 @@ RemoveStaleFvFileOptions (
|
|||||||
EFI_FV_FILE_ATTRIBUTES FileAttributes;
|
EFI_FV_FILE_ATTRIBUTES FileAttributes;
|
||||||
UINT32 AuthenticationStatus;
|
UINT32 AuthenticationStatus;
|
||||||
|
|
||||||
Status = gBS->HandleProtocol (FvHandle, &gEfiFirmwareVolume2ProtocolGuid,
|
Status = gBS->HandleProtocol (
|
||||||
(VOID **)&FvProtocol);
|
FvHandle,
|
||||||
|
&gEfiFirmwareVolume2ProtocolGuid,
|
||||||
|
(VOID **)&FvProtocol
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
FvFileNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2;
|
FvFileNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2;
|
||||||
@ -604,12 +684,17 @@ RemoveStaleFvFileOptions (
|
|||||||
// Delete the boot option.
|
// Delete the boot option.
|
||||||
//
|
//
|
||||||
Status = EfiBootManagerDeleteLoadOptionVariable (
|
Status = EfiBootManagerDeleteLoadOptionVariable (
|
||||||
BootOptions[Index].OptionNumber, LoadOptionTypeBoot);
|
BootOptions[Index].OptionNumber,
|
||||||
|
LoadOptionTypeBoot
|
||||||
|
);
|
||||||
DEBUG_CODE_BEGIN ();
|
DEBUG_CODE_BEGIN ();
|
||||||
CHAR16 *DevicePathString;
|
CHAR16 *DevicePathString;
|
||||||
|
|
||||||
DevicePathString = ConvertDevicePathToText(BootOptions[Index].FilePath,
|
DevicePathString = ConvertDevicePathToText (
|
||||||
FALSE, FALSE);
|
BootOptions[Index].FilePath,
|
||||||
|
FALSE,
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE,
|
EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE,
|
||||||
"%a: removing stale Boot#%04x %s: %r\n",
|
"%a: removing stale Boot#%04x %s: %r\n",
|
||||||
@ -621,13 +706,13 @@ RemoveStaleFvFileOptions (
|
|||||||
if (DevicePathString != NULL) {
|
if (DevicePathString != NULL) {
|
||||||
FreePool (DevicePathString);
|
FreePool (DevicePathString);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_CODE_END ();
|
DEBUG_CODE_END ();
|
||||||
}
|
}
|
||||||
|
|
||||||
EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
|
EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
PlatformRegisterOptionsAndKeys (
|
PlatformRegisterOptionsAndKeys (
|
||||||
@ -658,19 +743,27 @@ PlatformRegisterOptionsAndKeys (
|
|||||||
Status = EfiBootManagerGetBootManagerMenu (&BootOption);
|
Status = EfiBootManagerGetBootManagerMenu (&BootOption);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
Status = EfiBootManagerAddKeyOptionVariable (
|
Status = EfiBootManagerAddKeyOptionVariable (
|
||||||
NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL
|
NULL,
|
||||||
|
(UINT16)BootOption.OptionNumber,
|
||||||
|
0,
|
||||||
|
&F2,
|
||||||
|
NULL
|
||||||
);
|
);
|
||||||
ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
|
ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
|
||||||
Status = EfiBootManagerAddKeyOptionVariable (
|
Status = EfiBootManagerAddKeyOptionVariable (
|
||||||
NULL, (UINT16) BootOption.OptionNumber, 0, &Esc, NULL
|
NULL,
|
||||||
|
(UINT16)BootOption.OptionNumber,
|
||||||
|
0,
|
||||||
|
&Esc,
|
||||||
|
NULL
|
||||||
);
|
);
|
||||||
ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
|
ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// BDS Platform Functions
|
// BDS Platform Functions
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Do the platform init, can be customized by OEM/IBV
|
Do the platform init, can be customized by OEM/IBV
|
||||||
Possible things that can be done in PlatformBootManagerBeforeConsole:
|
Possible things that can be done in PlatformBootManagerBeforeConsole:
|
||||||
@ -735,20 +828,34 @@ PlatformBootManagerBeforeConsole (
|
|||||||
//
|
//
|
||||||
// Add the hardcoded short-form USB keyboard device path to ConIn.
|
// Add the hardcoded short-form USB keyboard device path to ConIn.
|
||||||
//
|
//
|
||||||
EfiBootManagerUpdateConsoleVariable (ConIn,
|
EfiBootManagerUpdateConsoleVariable (
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *)&mUsbKeyboard, NULL);
|
ConIn,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mUsbKeyboard,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add the hardcoded serial console device path to ConIn, ConOut, ErrOut.
|
// Add the hardcoded serial console device path to ConIn, ConOut, ErrOut.
|
||||||
//
|
//
|
||||||
CopyGuid (&mSerialConsole.TermType.Guid,
|
CopyGuid (
|
||||||
PcdGetPtr (PcdTerminalTypeGuidBuffer));
|
&mSerialConsole.TermType.Guid,
|
||||||
EfiBootManagerUpdateConsoleVariable (ConIn,
|
PcdGetPtr (PcdTerminalTypeGuidBuffer)
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
|
);
|
||||||
EfiBootManagerUpdateConsoleVariable (ConOut,
|
EfiBootManagerUpdateConsoleVariable (
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
|
ConIn,
|
||||||
EfiBootManagerUpdateConsoleVariable (ErrOut,
|
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole,
|
||||||
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
|
NULL
|
||||||
|
);
|
||||||
|
EfiBootManagerUpdateConsoleVariable (
|
||||||
|
ConOut,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
EfiBootManagerUpdateConsoleVariable (
|
||||||
|
ErrOut,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set the front page timeout from the QEMU configuration.
|
// Set the front page timeout from the QEMU configuration.
|
||||||
@ -848,7 +955,9 @@ PlatformBootManagerAfterConsole (
|
|||||||
// Register UEFI Shell
|
// Register UEFI Shell
|
||||||
//
|
//
|
||||||
PlatformRegisterFvBootOption (
|
PlatformRegisterFvBootOption (
|
||||||
&gUefiShellFileGuid, L"EFI Internal Shell", LOAD_OPTION_ACTIVE
|
&gUefiShellFileGuid,
|
||||||
|
L"EFI Internal Shell",
|
||||||
|
LOAD_OPTION_ACTIVE
|
||||||
);
|
);
|
||||||
|
|
||||||
RemoveStaleFvFileOptions ();
|
RemoveStaleFvFileOptions ();
|
||||||
@ -922,6 +1031,7 @@ PlatformBootManagerUnableToBoot (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Normally BdsDxe does not print anything to the system console, but this is
|
// Normally BdsDxe does not print anything to the system console, but this is
|
||||||
// a last resort -- the end-user will likely not see any DEBUG messages
|
// a last resort -- the end-user will likely not see any DEBUG messages
|
||||||
|
@ -53,16 +53,22 @@ TryRunningQemuKernel (
|
|||||||
//
|
//
|
||||||
EfiSignalEventReadyToBoot ();
|
EfiSignalEventReadyToBoot ();
|
||||||
|
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE,
|
REPORT_STATUS_CODE (
|
||||||
(EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT));
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Start the image.
|
// Start the image.
|
||||||
//
|
//
|
||||||
Status = QemuStartKernelImage (&KernelImageHandle);
|
Status = QemuStartKernelImage (&KernelImageHandle);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: QemuStartKernelImage(): %r\n", __FUNCTION__,
|
DEBUG ((
|
||||||
Status));
|
DEBUG_ERROR,
|
||||||
|
"%a: QemuStartKernelImage(): %r\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
Status
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
QemuUnloadKernelImage (KernelImageHandle);
|
QemuUnloadKernelImage (KernelImageHandle);
|
||||||
|
@ -98,11 +98,11 @@ PlatformPeim (
|
|||||||
// Iterate over the NULL-separated items in the compatible string
|
// Iterate over the NULL-separated items in the compatible string
|
||||||
//
|
//
|
||||||
for (CompItem = Compatible; CompItem != NULL && CompItem < Compatible + Len;
|
for (CompItem = Compatible; CompItem != NULL && CompItem < Compatible + Len;
|
||||||
CompItem += 1 + AsciiStrLen (CompItem)) {
|
CompItem += 1 + AsciiStrLen (CompItem))
|
||||||
|
{
|
||||||
if (AsciiStrCmp (CompItem, "arm,pl011") == 0) {
|
if (AsciiStrCmp (CompItem, "arm,pl011") == 0) {
|
||||||
NodeStatus = fdt_getprop (Base, Node, "status", &StatusLen);
|
NodeStatus = fdt_getprop (Base, Node, "status", &StatusLen);
|
||||||
if (NodeStatus != NULL && AsciiStrCmp (NodeStatus, "okay") != 0) {
|
if ((NodeStatus != NULL) && (AsciiStrCmp (NodeStatus, "okay") != 0)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,8 +116,8 @@ PlatformPeim (
|
|||||||
*UartHobData = UartBase;
|
*UartHobData = UartBase;
|
||||||
break;
|
break;
|
||||||
} else if (FeaturePcdGet (PcdTpm2SupportEnabled) &&
|
} else if (FeaturePcdGet (PcdTpm2SupportEnabled) &&
|
||||||
AsciiStrCmp (CompItem, "tcg,tpm-tis-mmio") == 0) {
|
(AsciiStrCmp (CompItem, "tcg,tpm-tis-mmio") == 0))
|
||||||
|
{
|
||||||
RegProp = fdt_getprop (Base, Node, "reg", &Len);
|
RegProp = fdt_getprop (Base, Node, "reg", &Len);
|
||||||
ASSERT (Len == 8 || Len == 16);
|
ASSERT (Len == 8 || Len == 16);
|
||||||
if (Len == 8) {
|
if (Len == 8) {
|
||||||
@ -145,9 +145,12 @@ PlatformPeim (
|
|||||||
// assume a single translated range with 2 cells for the parent base
|
// assume a single translated range with 2 cells for the parent base
|
||||||
//
|
//
|
||||||
if (RangesLen != Len + 2 * sizeof (UINT32)) {
|
if (RangesLen != Len + 2 * sizeof (UINT32)) {
|
||||||
DEBUG ((DEBUG_WARN,
|
DEBUG ((
|
||||||
|
DEBUG_WARN,
|
||||||
"%a: 'ranges' property has unexpected size %d\n",
|
"%a: 'ranges' property has unexpected size %d\n",
|
||||||
__FUNCTION__, RangesLen));
|
__FUNCTION__,
|
||||||
|
RangesLen
|
||||||
|
));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,6 +167,7 @@ PlatformPeim (
|
|||||||
TpmBase += fdt64_to_cpu (ReadUnaligned64 ((UINT64 *)RangesProp));
|
TpmBase += fdt64_to_cpu (ReadUnaligned64 ((UINT64 *)RangesProp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -180,6 +184,7 @@ PlatformPeim (
|
|||||||
} else {
|
} else {
|
||||||
Status = PeiServicesInstallPpi (&mTpm2InitializationDonePpi);
|
Status = PeiServicesInstallPpi (&mTpm2InitializationDonePpi);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,8 +46,10 @@ ArmVirtGetMemoryMap (
|
|||||||
|
|
||||||
ASSERT (VirtualMemoryMap != NULL);
|
ASSERT (VirtualMemoryMap != NULL);
|
||||||
|
|
||||||
VirtualMemoryTable = AllocatePool (sizeof (ARM_MEMORY_REGION_DESCRIPTOR) *
|
VirtualMemoryTable = AllocatePool (
|
||||||
MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS);
|
sizeof (ARM_MEMORY_REGION_DESCRIPTOR) *
|
||||||
|
MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS
|
||||||
|
);
|
||||||
|
|
||||||
if (VirtualMemoryTable == NULL) {
|
if (VirtualMemoryTable == NULL) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: Error: Failed AllocatePool()\n", __FUNCTION__));
|
DEBUG ((DEBUG_ERROR, "%a: Error: Failed AllocatePool()\n", __FUNCTION__));
|
||||||
@ -60,14 +62,17 @@ ArmVirtGetMemoryMap (
|
|||||||
VirtualMemoryTable[0].Length = PcdGet64 (PcdSystemMemorySize);
|
VirtualMemoryTable[0].Length = PcdGet64 (PcdSystemMemorySize);
|
||||||
VirtualMemoryTable[0].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
VirtualMemoryTable[0].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "%a: Dumping System DRAM Memory Map:\n"
|
DEBUG ((
|
||||||
|
DEBUG_INFO,
|
||||||
|
"%a: Dumping System DRAM Memory Map:\n"
|
||||||
"\tPhysicalBase: 0x%lX\n"
|
"\tPhysicalBase: 0x%lX\n"
|
||||||
"\tVirtualBase: 0x%lX\n"
|
"\tVirtualBase: 0x%lX\n"
|
||||||
"\tLength: 0x%lX\n",
|
"\tLength: 0x%lX\n",
|
||||||
__FUNCTION__,
|
__FUNCTION__,
|
||||||
VirtualMemoryTable[0].PhysicalBase,
|
VirtualMemoryTable[0].PhysicalBase,
|
||||||
VirtualMemoryTable[0].VirtualBase,
|
VirtualMemoryTable[0].VirtualBase,
|
||||||
VirtualMemoryTable[0].Length));
|
VirtualMemoryTable[0].Length
|
||||||
|
));
|
||||||
|
|
||||||
// Memory mapped peripherals (UART, RTC, GIC, virtio-mmio, etc)
|
// Memory mapped peripherals (UART, RTC, GIC, virtio-mmio, etc)
|
||||||
VirtualMemoryTable[1].PhysicalBase = MACH_VIRT_PERIPH_BASE;
|
VirtualMemoryTable[1].PhysicalBase = MACH_VIRT_PERIPH_BASE;
|
||||||
|
@ -50,27 +50,34 @@ QemuVirtMemInfoPeiLibConstructor (
|
|||||||
// Check for memory node
|
// Check for memory node
|
||||||
//
|
//
|
||||||
Type = fdt_getprop (DeviceTreeBase, Node, "device_type", &Len);
|
Type = fdt_getprop (DeviceTreeBase, Node, "device_type", &Len);
|
||||||
if (Type && AsciiStrnCmp (Type, "memory", Len) == 0) {
|
if (Type && (AsciiStrnCmp (Type, "memory", Len) == 0)) {
|
||||||
//
|
//
|
||||||
// Get the 'reg' property of this node. For now, we will assume
|
// Get the 'reg' property of this node. For now, we will assume
|
||||||
// two 8 byte quantities for base and size, respectively.
|
// two 8 byte quantities for base and size, respectively.
|
||||||
//
|
//
|
||||||
RegProp = fdt_getprop (DeviceTreeBase, Node, "reg", &Len);
|
RegProp = fdt_getprop (DeviceTreeBase, Node, "reg", &Len);
|
||||||
if (RegProp != 0 && Len == (2 * sizeof (UINT64))) {
|
if ((RegProp != 0) && (Len == (2 * sizeof (UINT64)))) {
|
||||||
|
|
||||||
CurBase = fdt64_to_cpu (ReadUnaligned64 (RegProp));
|
CurBase = fdt64_to_cpu (ReadUnaligned64 (RegProp));
|
||||||
CurSize = fdt64_to_cpu (ReadUnaligned64 (RegProp + 1));
|
CurSize = fdt64_to_cpu (ReadUnaligned64 (RegProp + 1));
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "%a: System RAM @ 0x%lx - 0x%lx\n",
|
DEBUG ((
|
||||||
__FUNCTION__, CurBase, CurBase + CurSize - 1));
|
DEBUG_INFO,
|
||||||
|
"%a: System RAM @ 0x%lx - 0x%lx\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
CurBase,
|
||||||
|
CurBase + CurSize - 1
|
||||||
|
));
|
||||||
|
|
||||||
if (NewBase > CurBase || NewBase == 0) {
|
if ((NewBase > CurBase) || (NewBase == 0)) {
|
||||||
NewBase = CurBase;
|
NewBase = CurBase;
|
||||||
NewSize = CurSize;
|
NewSize = CurSize;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: Failed to parse FDT memory node\n",
|
DEBUG ((
|
||||||
__FUNCTION__));
|
DEBUG_ERROR,
|
||||||
|
"%a: Failed to parse FDT memory node\n",
|
||||||
|
__FUNCTION__
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,7 +101,8 @@ QemuVirtMemInfoPeiLibConstructor (
|
|||||||
ASSERT (
|
ASSERT (
|
||||||
(((UINT64)PcdGet64 (PcdFdBaseAddress) +
|
(((UINT64)PcdGet64 (PcdFdBaseAddress) +
|
||||||
(UINT64)PcdGet32 (PcdFdSize)) <= NewBase) ||
|
(UINT64)PcdGet32 (PcdFdSize)) <= NewBase) ||
|
||||||
((UINT64)PcdGet64 (PcdFdBaseAddress) >= (NewBase + NewSize)));
|
((UINT64)PcdGet64 (PcdFdBaseAddress) >= (NewBase + NewSize))
|
||||||
|
);
|
||||||
|
|
||||||
return RETURN_SUCCESS;
|
return RETURN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,6 @@ ArmGenericTimerGetTimerVal (
|
|||||||
return ArmReadCntvTval ();
|
return ArmReadCntvTval ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmGenericTimerSetTimerVal (
|
ArmGenericTimerSetTimerVal (
|
||||||
|
@ -31,7 +31,7 @@ PlatformHasAcpiDt (
|
|||||||
// unbootable anyway (due to lacking hardware description), so tolerate no
|
// unbootable anyway (due to lacking hardware description), so tolerate no
|
||||||
// errors here.
|
// errors here.
|
||||||
//
|
//
|
||||||
if (MAX_UINTN == MAX_UINT64 &&
|
if ((MAX_UINTN == MAX_UINT64) &&
|
||||||
!PcdGetBool (PcdForceNoAcpi) &&
|
!PcdGetBool (PcdForceNoAcpi) &&
|
||||||
!EFI_ERROR (
|
!EFI_ERROR (
|
||||||
QemuFwCfgFindFile (
|
QemuFwCfgFindFile (
|
||||||
@ -39,7 +39,8 @@ PlatformHasAcpiDt (
|
|||||||
&FwCfgItem,
|
&FwCfgItem,
|
||||||
&FwCfgSize
|
&FwCfgSize
|
||||||
)
|
)
|
||||||
)) {
|
))
|
||||||
|
{
|
||||||
//
|
//
|
||||||
// Only make ACPI available on 64-bit systems, and only if QEMU generates
|
// Only make ACPI available on 64-bit systems, and only if QEMU generates
|
||||||
// (a subset of) the ACPI tables.
|
// (a subset of) the ACPI tables.
|
||||||
|
@ -63,6 +63,7 @@ FindMemnode (
|
|||||||
if (AddressCells > 1) {
|
if (AddressCells > 1) {
|
||||||
*SystemMemoryBase = (*SystemMemoryBase << 32) | fdt32_to_cpu (Prop[1]);
|
*SystemMemoryBase = (*SystemMemoryBase << 32) | fdt32_to_cpu (Prop[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Prop += AddressCells;
|
Prop += AddressCells;
|
||||||
|
|
||||||
*SystemMemorySize = fdt32_to_cpu (Prop[0]);
|
*SystemMemorySize = fdt32_to_cpu (Prop[0]);
|
||||||
|
@ -66,8 +66,14 @@ PrePiMain (
|
|||||||
|
|
||||||
// Initialize the Serial Port
|
// Initialize the Serial Port
|
||||||
SerialPortInitialize ();
|
SerialPortInitialize ();
|
||||||
CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"UEFI firmware (version %s built at %a on %a)\n\r",
|
CharCount = AsciiSPrint (
|
||||||
(CHAR16*)PcdGetPtr(PcdFirmwareVersionString), __TIME__, __DATE__);
|
Buffer,
|
||||||
|
sizeof (Buffer),
|
||||||
|
"UEFI firmware (version %s built at %a on %a)\n\r",
|
||||||
|
(CHAR16 *)PcdGetPtr (PcdFirmwareVersionString),
|
||||||
|
__TIME__,
|
||||||
|
__DATE__
|
||||||
|
);
|
||||||
SerialPortWrite ((UINT8 *)Buffer, CharCount);
|
SerialPortWrite ((UINT8 *)Buffer, CharCount);
|
||||||
|
|
||||||
// Create the Stacks HOB (reserve the memory for all stacks)
|
// Create the Stacks HOB (reserve the memory for all stacks)
|
||||||
@ -142,14 +148,18 @@ RelocatePeCoffImage (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
FileHandle = NULL;
|
FileHandle = NULL;
|
||||||
Status = FfsFindNextFile (EFI_FV_FILETYPE_SECURITY_CORE, FwVolHeader,
|
Status = FfsFindNextFile (
|
||||||
&FileHandle);
|
EFI_FV_FILETYPE_SECURITY_CORE,
|
||||||
|
FwVolHeader,
|
||||||
|
&FileHandle
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FfsFindSectionData (EFI_SECTION_PE32, FileHandle, &SectionData);
|
Status = FfsFindSectionData (EFI_SECTION_PE32, FileHandle, &SectionData);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
Status = FfsFindSectionData (EFI_SECTION_TE, FileHandle, &SectionData);
|
Status = FfsFindSectionData (EFI_SECTION_TE, FileHandle, &SectionData);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
ZeroMem (&ImageContext, sizeof ImageContext);
|
ZeroMem (&ImageContext, sizeof ImageContext);
|
||||||
|
@ -49,16 +49,27 @@ GetXenArmAcpiRsdp (
|
|||||||
//
|
//
|
||||||
// Get the RSDP structure address from DeviceTree
|
// Get the RSDP structure address from DeviceTree
|
||||||
//
|
//
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FdtClient->FindCompatibleNodeReg (FdtClient, "xen,guest-acpi",
|
Status = FdtClient->FindCompatibleNodeReg (
|
||||||
(CONST VOID **)&Reg, &AddressCells, &SizeCells,
|
FdtClient,
|
||||||
&RegSize);
|
"xen,guest-acpi",
|
||||||
|
(CONST VOID **)&Reg,
|
||||||
|
&AddressCells,
|
||||||
|
&SizeCells,
|
||||||
|
&RegSize
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN, "%a: No 'xen,guest-acpi' compatible DT node found\n",
|
DEBUG ((
|
||||||
__FUNCTION__));
|
DEBUG_WARN,
|
||||||
|
"%a: No 'xen,guest-acpi' compatible DT node found\n",
|
||||||
|
__FUNCTION__
|
||||||
|
));
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,9 +81,11 @@ GetXenArmAcpiRsdp (
|
|||||||
RsdpStructurePtr =
|
RsdpStructurePtr =
|
||||||
(EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)RegBase;
|
(EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)RegBase;
|
||||||
|
|
||||||
if (RsdpStructurePtr && RsdpStructurePtr->Revision >= 2) {
|
if (RsdpStructurePtr && (RsdpStructurePtr->Revision >= 2)) {
|
||||||
Sum = CalculateSum8 ((CONST UINT8 *)RsdpStructurePtr,
|
Sum = CalculateSum8 (
|
||||||
sizeof (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER));
|
(CONST UINT8 *)RsdpStructurePtr,
|
||||||
|
sizeof (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER)
|
||||||
|
);
|
||||||
if (Sum != 0) {
|
if (Sum != 0) {
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
}
|
}
|
||||||
@ -228,7 +241,6 @@ FindAcpiTableProtocol (
|
|||||||
@return EFI_OUT_OF_RESOURCES
|
@return EFI_OUT_OF_RESOURCES
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
XenAcpiPlatformEntryPoint (
|
XenAcpiPlatformEntryPoint (
|
||||||
|
@ -30,16 +30,27 @@ InitializeXenioFdtDxe (
|
|||||||
EFI_HANDLE Handle;
|
EFI_HANDLE Handle;
|
||||||
UINT64 RegBase;
|
UINT64 RegBase;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,
|
Status = gBS->LocateProtocol (
|
||||||
(VOID **)&FdtClient);
|
&gFdtClientProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **)&FdtClient
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FdtClient->FindCompatibleNodeReg (FdtClient, "xen,xen",
|
Status = FdtClient->FindCompatibleNodeReg (
|
||||||
(CONST VOID **)&Reg, &AddressCells, &SizeCells,
|
FdtClient,
|
||||||
&RegSize);
|
"xen,xen",
|
||||||
|
(CONST VOID **)&Reg,
|
||||||
|
&AddressCells,
|
||||||
|
&SizeCells,
|
||||||
|
&RegSize
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN, "%a: No 'xen,xen' compatible DT node found\n",
|
DEBUG ((
|
||||||
__FUNCTION__));
|
DEBUG_WARN,
|
||||||
|
"%a: No 'xen,xen' compatible DT node found\n",
|
||||||
|
__FUNCTION__
|
||||||
|
));
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,8 +66,13 @@ InitializeXenioFdtDxe (
|
|||||||
Handle = NULL;
|
Handle = NULL;
|
||||||
Status = XenIoMmioInstall (&Handle, RegBase);
|
Status = XenIoMmioInstall (&Handle, RegBase);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "%a: XenIoMmioInstall () failed on a new handle "
|
DEBUG ((
|
||||||
"(Status == %r)\n", __FUNCTION__, Status));
|
DEBUG_ERROR,
|
||||||
|
"%a: XenIoMmioInstall () failed on a new handle "
|
||||||
|
"(Status == %r)\n",
|
||||||
|
__FUNCTION__,
|
||||||
|
Status
|
||||||
|
));
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user