Compare commits
25 Commits
edk2-stabl
...
edk2-stabl
Author | SHA1 | Date | |
---|---|---|---|
|
7b4a99be8a | ||
|
8dd4fc5be6 | ||
|
ef56f55d19 | ||
|
6fdd1c13a7 | ||
|
ac826886c9 | ||
|
a776bbabd9 | ||
|
b7f0226a46 | ||
|
ca1773878d | ||
|
aee0098faf | ||
|
03e19e6bc8 | ||
|
7311e96417 | ||
|
3d359ff905 | ||
|
605c4a1ff2 | ||
|
1803757a9b | ||
|
75c4a8e10d | ||
|
0938f9235c | ||
|
7b17bcd9a0 | ||
|
357383bc4f | ||
|
c82d6dd4a3 | ||
|
ced4cb7609 | ||
|
ad3dea9861 | ||
|
d910e83299 | ||
|
4d7137f261 | ||
|
5963ce5d28 | ||
|
a7ddc7847c |
@@ -137,7 +137,7 @@
|
||||
# hardware coherency (i.e., no virtualization or cache coherent DMA)
|
||||
gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride|FALSE|BOOLEAN|0x00000043
|
||||
|
||||
[PcdsFeatureFlag.AARCH64]
|
||||
[PcdsFeatureFlag.AARCH64, PcdsFeatureFlag.ARM]
|
||||
## Used to select method for requesting services from S-EL1.<BR><BR>
|
||||
# TRUE - Selects FF-A calls for communication between S-EL0 and SPMC.<BR>
|
||||
# FALSE - Selects SVC calls for communication between S-EL0 and SPMC.<BR>
|
||||
|
@@ -161,4 +161,6 @@
|
||||
[Components.AARCH64]
|
||||
ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.inf
|
||||
ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
|
||||
|
||||
[Components.AARCH64, Components.ARM]
|
||||
ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
|
||||
|
@@ -17,9 +17,21 @@
|
||||
#define ARM_FFA_SVC_H_
|
||||
|
||||
#define ARM_SVC_ID_FFA_VERSION_AARCH32 0x84000063
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH32 0x8400006F
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32 0x84000070
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64 0xC400006F
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64 0xC4000070
|
||||
|
||||
/* Generic IDs when using AArch32 or AArch64 execution state */
|
||||
#ifdef MDE_CPU_AARCH64
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64
|
||||
#endif
|
||||
#ifdef MDE_CPU_ARM
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH32
|
||||
#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32
|
||||
#endif
|
||||
|
||||
#define SPM_MAJOR_VERSION_FFA 1
|
||||
#define SPM_MINOR_VERSION_FFA 0
|
||||
|
||||
|
@@ -15,10 +15,25 @@
|
||||
* privileged operations on its behalf.
|
||||
*/
|
||||
#define ARM_SVC_ID_SPM_VERSION_AARCH32 0x84000060
|
||||
#define ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH32 0x84000061
|
||||
#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH32 0x84000064
|
||||
#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH32 0x84000065
|
||||
#define ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64 0xC4000061
|
||||
#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64 0xC4000064
|
||||
#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64 0xC4000065
|
||||
|
||||
/* Generic IDs when using AArch32 or AArch64 execution state */
|
||||
#ifdef MDE_CPU_AARCH64
|
||||
#define ARM_SVC_ID_SP_EVENT_COMPLETE ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64
|
||||
#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64
|
||||
#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64
|
||||
#endif
|
||||
#ifdef MDE_CPU_ARM
|
||||
#define ARM_SVC_ID_SP_EVENT_COMPLETE ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH32
|
||||
#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH32
|
||||
#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH32
|
||||
#endif
|
||||
|
||||
#define SET_MEM_ATTR_DATA_PERM_MASK 0x3
|
||||
#define SET_MEM_ATTR_DATA_PERM_SHIFT 0
|
||||
#define SET_MEM_ATTR_DATA_PERM_NO_ACCESS 0
|
||||
|
@@ -49,6 +49,14 @@
|
||||
#define ARM_SMC_ID_MM_COMMUNICATE_AARCH32 0x84000041
|
||||
#define ARM_SMC_ID_MM_COMMUNICATE_AARCH64 0xC4000041
|
||||
|
||||
/* Generic ID when using AArch32 or AArch64 execution state */
|
||||
#ifdef MDE_CPU_AARCH64
|
||||
#define ARM_SMC_ID_MM_COMMUNICATE ARM_SMC_ID_MM_COMMUNICATE_AARCH64
|
||||
#endif
|
||||
#ifdef MDE_CPU_ARM
|
||||
#define ARM_SMC_ID_MM_COMMUNICATE ARM_SMC_ID_MM_COMMUNICATE_AARCH32
|
||||
#endif
|
||||
|
||||
/* MM return error codes */
|
||||
#define ARM_SMC_MM_RET_SUCCESS 0
|
||||
#define ARM_SMC_MM_RET_NOT_SUPPORTED -1
|
||||
|
@@ -2,6 +2,7 @@
|
||||
File managing the MMU for ARMv8 architecture in S-EL0
|
||||
|
||||
Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.<BR>
|
||||
Copyright (c) 2021, Linaro Limited
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
@@ -62,7 +63,7 @@ SendMemoryPermissionRequest (
|
||||
// for other Direct Request calls which are not atomic
|
||||
// We therefore check only for Direct Response by the
|
||||
// callee.
|
||||
if (SvcArgs->Arg0 == ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64) {
|
||||
if (SvcArgs->Arg0 == ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP) {
|
||||
// A Direct Response means FF-A success
|
||||
// Now check the payload for errors
|
||||
// The callee sends back the return value
|
||||
@@ -164,13 +165,13 @@ GetMemoryPermissions (
|
||||
ZeroMem (&SvcArgs, sizeof (ARM_SVC_ARGS));
|
||||
if (FeaturePcdGet (PcdFfaEnable)) {
|
||||
// See [2], Section 10.2 FFA_MSG_SEND_DIRECT_REQ.
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ;
|
||||
SvcArgs.Arg1 = ARM_FFA_DESTINATION_ENDPOINT_ID;
|
||||
SvcArgs.Arg2 = 0;
|
||||
SvcArgs.Arg3 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64;
|
||||
SvcArgs.Arg3 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES;
|
||||
SvcArgs.Arg4 = BaseAddress;
|
||||
} else {
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64;
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES;
|
||||
SvcArgs.Arg1 = BaseAddress;
|
||||
SvcArgs.Arg2 = 0;
|
||||
SvcArgs.Arg3 = 0;
|
||||
@@ -219,15 +220,15 @@ RequestMemoryPermissionChange (
|
||||
ZeroMem (&SvcArgs, sizeof (ARM_SVC_ARGS));
|
||||
if (FeaturePcdGet (PcdFfaEnable)) {
|
||||
// See [2], Section 10.2 FFA_MSG_SEND_DIRECT_REQ.
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ;
|
||||
SvcArgs.Arg1 = ARM_FFA_DESTINATION_ENDPOINT_ID;
|
||||
SvcArgs.Arg2 = 0;
|
||||
SvcArgs.Arg3 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64;
|
||||
SvcArgs.Arg3 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES;
|
||||
SvcArgs.Arg4 = BaseAddress;
|
||||
SvcArgs.Arg5 = EFI_SIZE_TO_PAGES (Length);
|
||||
SvcArgs.Arg6 = Permissions;
|
||||
} else {
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64;
|
||||
SvcArgs.Arg0 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES;
|
||||
SvcArgs.Arg1 = BaseAddress;
|
||||
SvcArgs.Arg2 = EFI_SIZE_TO_PAGES (Length);
|
||||
SvcArgs.Arg3 = Permissions;
|
@@ -16,14 +16,14 @@
|
||||
LIBRARY_CLASS = StandaloneMmMmuLib
|
||||
PI_SPECIFICATION_VERSION = 0x00010032
|
||||
|
||||
[Sources.AARCH64]
|
||||
AArch64/ArmMmuStandaloneMmLib.c
|
||||
[Sources]
|
||||
ArmMmuStandaloneMmLib.c
|
||||
|
||||
[Packages]
|
||||
ArmPkg/ArmPkg.dec
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
[FeaturePcd.AARCH64]
|
||||
[FeaturePcd.ARM, FeaturePcd.AARCH64]
|
||||
gArmTokenSpaceGuid.PcdFfaEnable
|
||||
|
||||
[LibraryClasses]
|
||||
|
@@ -34,9 +34,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#include "FvLib.h"
|
||||
#include "PeCoffLib.h"
|
||||
|
||||
#define ARMT_UNCONDITIONAL_JUMP_INSTRUCTION 0xEB000000
|
||||
#define ARM64_UNCONDITIONAL_JUMP_INSTRUCTION 0x14000000
|
||||
|
||||
/*
|
||||
* Arm instruction to jump to Fv entry instruction in Arm or Thumb mode.
|
||||
* From ARM Arch Ref Manual versions b/c/d, section A8.8.25 BL, BLX (immediate)
|
||||
* BLX (encoding A2) branches to offset in Thumb instruction set mode.
|
||||
* BL (encoding A1) branches to offset in Arm instruction set mode.
|
||||
*/
|
||||
#define ARM_JUMP_OFFSET_MAX 0xffffff
|
||||
#define ARM_JUMP_TO_ARM(Offset) (0xeb000000 | ((Offset - 8) >> 2))
|
||||
|
||||
#define _ARM_JUMP_TO_THUMB(Imm32) (0xfa000000 | \
|
||||
(((Imm32) & (1 << 1)) << (24 - 1)) | \
|
||||
(((Imm32) >> 2) & 0x7fffff))
|
||||
#define ARM_JUMP_TO_THUMB(Offset) _ARM_JUMP_TO_THUMB((Offset) - 8)
|
||||
|
||||
/*
|
||||
* Arm instruction to return from exception (MOVS PC, LR)
|
||||
*/
|
||||
#define ARM_RETURN_FROM_EXCEPTION 0xE1B0F07E
|
||||
|
||||
BOOLEAN mArm = FALSE;
|
||||
BOOLEAN mRiscV = FALSE;
|
||||
STATIC UINT32 MaxFfsAlignment = 0;
|
||||
@@ -2203,23 +2221,25 @@ Returns:
|
||||
// if we found an SEC core entry point then generate a branch instruction
|
||||
// to it and populate a debugger SWI entry as well
|
||||
if (UpdateVectorSec) {
|
||||
UINT32 EntryOffset;
|
||||
|
||||
VerboseMsg("UpdateArmResetVectorIfNeeded updating ARM SEC vector");
|
||||
|
||||
// B SecEntryPoint - signed_immed_24 part +/-32MB offset
|
||||
// on ARM, the PC is always 8 ahead, so we're not really jumping from the base address, but from base address + 8
|
||||
ResetVector[0] = (INT32)(SecCoreEntryAddress - FvInfo->BaseAddress - 8) >> 2;
|
||||
EntryOffset = (INT32)(SecCoreEntryAddress - FvInfo->BaseAddress);
|
||||
|
||||
if (ResetVector[0] > 0x00FFFFFF) {
|
||||
Error(NULL, 0, 3000, "Invalid", "SEC Entry point must be within 32MB of the start of the FV");
|
||||
if (EntryOffset > ARM_JUMP_OFFSET_MAX) {
|
||||
Error(NULL, 0, 3000, "Invalid", "SEC Entry point offset above 1MB of the start of the FV");
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
// Add opcode for an unconditional branch with no link. i.e.: " B SecEntryPoint"
|
||||
ResetVector[0] |= ARMT_UNCONDITIONAL_JUMP_INSTRUCTION;
|
||||
if ((SecCoreEntryAddress & 1) != 0) {
|
||||
ResetVector[0] = ARM_JUMP_TO_THUMB(EntryOffset);
|
||||
} else {
|
||||
ResetVector[0] = ARM_JUMP_TO_ARM(EntryOffset);
|
||||
}
|
||||
|
||||
// SWI handler movs pc,lr. Just in case a debugger uses SWI
|
||||
ResetVector[2] = 0xE1B0F07E;
|
||||
ResetVector[2] = ARM_RETURN_FROM_EXCEPTION;
|
||||
|
||||
// Place holder to support a common interrupt handler from ROM.
|
||||
// Currently not supported. For this to be used the reset vector would not be in this FV
|
||||
|
@@ -155,7 +155,7 @@ ConvertAsn1TimeToEfiTime (
|
||||
}
|
||||
|
||||
Str = (CONST CHAR8*)Asn1Time->data;
|
||||
SetMem (EfiTime, 0, sizeof (EFI_TIME));
|
||||
SetMem (EfiTime, sizeof (EFI_TIME), 0);
|
||||
|
||||
Index = 0;
|
||||
if (Asn1Time->type == V_ASN1_UTCTIME) { /* two digit year */
|
||||
|
@@ -224,7 +224,7 @@ DmaMap (
|
||||
goto FreeMapInfo;
|
||||
}
|
||||
|
||||
if (Map->Operation == MapOperationBusMasterRead) {
|
||||
if (Operation == MapOperationBusMasterRead) {
|
||||
CopyMem (Map->BufferAddress, (VOID *)(UINTN)HostAddress, *NumberOfBytes);
|
||||
}
|
||||
mCpu->FlushDataCache (mCpu, (UINTN)Map->BufferAddress, AllocSize,
|
||||
|
207
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
Normal file
207
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.c
Normal file
@@ -0,0 +1,207 @@
|
||||
/** @file
|
||||
Unit tests of the UefiSortLib
|
||||
|
||||
Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <setjmp.h>
|
||||
#include <cmocka.h>
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
#include <Library/UnitTestLib.h>
|
||||
#include <Library/SortLib.h>
|
||||
|
||||
#define UNIT_TEST_APP_NAME "UefiSortLib Unit Tests"
|
||||
#define UNIT_TEST_APP_VERSION "1.0"
|
||||
|
||||
#define TEST_ARRAY_SIZE_9 9
|
||||
|
||||
/**
|
||||
The function is called by PerformQuickSort to compare int values.
|
||||
|
||||
@param[in] Left The pointer to first buffer.
|
||||
@param[in] Right The pointer to second buffer.
|
||||
|
||||
@retval 0 Buffer1 equal to Buffer2.
|
||||
@return <0 Buffer1 is less than Buffer2.
|
||||
@return >0 Buffer1 is greater than Buffer2.
|
||||
|
||||
**/
|
||||
INTN
|
||||
EFIAPI
|
||||
TestCompareFunction (
|
||||
IN CONST VOID *Left,
|
||||
IN CONST VOID *Right
|
||||
)
|
||||
{
|
||||
if (*(UINT32*)Right > *(UINT32*)Left) {
|
||||
return 1;
|
||||
} else if (*(UINT32*)Right < *(UINT32*)Left) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
Unit test for PerformQuickSort () API of the UefiSortLib.
|
||||
|
||||
@param[in] Context [Optional] An optional parameter that enables:
|
||||
1) test-case reuse with varied parameters and
|
||||
2) test-case re-entry for Target tests that need a
|
||||
reboot. This parameter is a VOID* and it is the
|
||||
responsibility of the test author to ensure that the
|
||||
contents are well understood by all test cases that may
|
||||
consume it.
|
||||
|
||||
@retval UNIT_TEST_PASSED The Unit test has completed and the test
|
||||
case was successful.
|
||||
@retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
|
||||
**/
|
||||
UNIT_TEST_STATUS
|
||||
EFIAPI
|
||||
SortUINT32ArrayShouldSucceed (
|
||||
IN UNIT_TEST_CONTEXT Context
|
||||
)
|
||||
{
|
||||
UINTN TestCount;
|
||||
UINT32 Index;
|
||||
UINT32 TestBuffer[TEST_ARRAY_SIZE_9];
|
||||
UINT32 TestResult[TEST_ARRAY_SIZE_9];
|
||||
|
||||
TestCount = TEST_ARRAY_SIZE_9;
|
||||
for (Index = 0; Index < TEST_ARRAY_SIZE_9; Index++) {
|
||||
TestBuffer[Index] = Index + 1;
|
||||
TestResult[Index] = TEST_ARRAY_SIZE_9 - Index;
|
||||
}
|
||||
|
||||
PerformQuickSort (TestBuffer, TestCount, sizeof (UINT32), (SORT_COMPARE)TestCompareFunction);
|
||||
UT_ASSERT_MEM_EQUAL (TestBuffer, TestResult, sizeof (UINT32) * TEST_ARRAY_SIZE_9);
|
||||
|
||||
return UNIT_TEST_PASSED;
|
||||
}
|
||||
|
||||
/**
|
||||
Unit test for StringCompare () API of the UefiSortLib.
|
||||
|
||||
@param[in] Context [Optional] An optional parameter that enables:
|
||||
1) test-case reuse with varied parameters and
|
||||
2) test-case re-entry for Target tests that need a
|
||||
reboot. This parameter is a VOID* and it is the
|
||||
responsibility of the test author to ensure that the
|
||||
contents are well understood by all test cases that may
|
||||
consume it.
|
||||
|
||||
@retval UNIT_TEST_PASSED The Unit test has completed and the test
|
||||
case was successful.
|
||||
@retval UNIT_TEST_ERROR_TEST_FAILED A test case assertion has failed.
|
||||
**/
|
||||
UNIT_TEST_STATUS
|
||||
EFIAPI
|
||||
CompareSameBufferShouldSucceed (
|
||||
IN UNIT_TEST_CONTEXT Context
|
||||
)
|
||||
{
|
||||
INTN retval;
|
||||
CONST CHAR16* TestBuffer[] = { L"abcdefg" };
|
||||
|
||||
retval = StringCompare (TestBuffer, TestBuffer);
|
||||
UT_ASSERT_TRUE (retval == 0);
|
||||
|
||||
return UNIT_TEST_PASSED;
|
||||
}
|
||||
|
||||
/**
|
||||
Initialze the unit test framework, suite, and unit tests for the
|
||||
UefiSortLib and run the UefiSortLib unit test.
|
||||
|
||||
@retval EFI_SUCCESS All test cases were dispatched.
|
||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources available to
|
||||
initialize the unit tests.
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UnitTestingEntry (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UNIT_TEST_FRAMEWORK_HANDLE Framework;
|
||||
UNIT_TEST_SUITE_HANDLE SortTests;
|
||||
|
||||
Framework = NULL;
|
||||
|
||||
DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME, UNIT_TEST_APP_VERSION ));
|
||||
|
||||
//
|
||||
// Start setting up the test framework for running the tests.
|
||||
//
|
||||
Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME, gEfiCallerBaseName, UNIT_TEST_APP_VERSION);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
//
|
||||
// Populate the UefiSortLib Unit Test Suite.
|
||||
//
|
||||
Status = CreateUnitTestSuite (&SortTests, Framework, "UefiSortLib Sort Tests", "UefiSortLib.SortLib", NULL, NULL);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for UefiSortLib API Tests\n"));
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
//
|
||||
// --------------Suite--------Description------------Name--------------Function----------------Pre---Post---Context-----------
|
||||
//
|
||||
AddTestCase (SortTests, "Sort the Array", "Sort", SortUINT32ArrayShouldSucceed, NULL, NULL, NULL);
|
||||
AddTestCase (SortTests, "Compare the Buffer", "Compare", CompareSameBufferShouldSucceed, NULL, NULL, NULL);
|
||||
|
||||
//
|
||||
// Execute the tests.
|
||||
//
|
||||
Status = RunAllTestSuites (Framework);
|
||||
|
||||
EXIT:
|
||||
if (Framework) {
|
||||
FreeUnitTestFramework (Framework);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
///
|
||||
/// Avoid ECC error for function name that starts with lower case letter
|
||||
///
|
||||
#define UefiSortLibUnitTestMain main
|
||||
|
||||
/**
|
||||
Standard POSIX C entry point for host based unit test execution.
|
||||
|
||||
@param[in] Argc Number of arguments
|
||||
@param[in] Argv Array of pointers to arguments
|
||||
|
||||
@retval 0 Success
|
||||
@retval other Error
|
||||
**/
|
||||
INT32
|
||||
UefiSortLibUnitTestMain (
|
||||
IN INT32 Argc,
|
||||
IN CHAR8 *Argv[]
|
||||
)
|
||||
{
|
||||
UnitTestingEntry ();
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,32 @@
|
||||
## @file
|
||||
# This is a unit test for the UefiSortLib.
|
||||
#
|
||||
# Copyright (C) Huawei Technologies Co., Ltd. All rights reserved
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010017
|
||||
BASE_NAME = UefiSortLibUnitTest
|
||||
FILE_GUID = 271337A3-0D79-BA3E-BC03-714E518E3B1B
|
||||
VERSION_STRING = 1.0
|
||||
MODULE_TYPE = HOST_APPLICATION
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64
|
||||
#
|
||||
|
||||
[Sources]
|
||||
UefiSortLibUnitTest.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UnitTestLib
|
||||
DebugLib
|
||||
UefiSortLib
|
@@ -19,6 +19,7 @@
|
||||
"ExceptionList": [
|
||||
"8005", "UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGE.UID",
|
||||
"8005", "UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGE.HID",
|
||||
"8001", "UefiSortLibUnitTestMain",
|
||||
],
|
||||
## Both file path and directory path are accepted.
|
||||
"IgnoreFiles": [
|
||||
|
@@ -41,3 +41,9 @@
|
||||
<PcdsFixedAtBuild>
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAllowVariablePolicyEnforcementDisable|TRUE
|
||||
}
|
||||
|
||||
MdeModulePkg/Library/UefiSortLib/UnitTest/UefiSortLibUnitTest.inf {
|
||||
<LibraryClasses>
|
||||
UefiSortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
|
||||
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
All Pcd Ppi services are implemented here.
|
||||
|
||||
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@@ -339,6 +339,75 @@ PcdPeimInit (
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = PeiServicesRegisterForShadow (FileHandle);
|
||||
if (Status == EFI_ALREADY_STARTED) {
|
||||
//
|
||||
// This is now starting in memory, the second time starting.
|
||||
//
|
||||
EFI_PEI_PPI_DESCRIPTOR *OldPpiList;
|
||||
EFI_PEI_PPI_DESCRIPTOR *OldPpiList2;
|
||||
VOID *Ppi;
|
||||
VOID *Ppi2;
|
||||
|
||||
OldPpiList = NULL;
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gPcdPpiGuid,
|
||||
0,
|
||||
&OldPpiList,
|
||||
&Ppi
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
if (OldPpiList != NULL) {
|
||||
Status = PeiServicesReInstallPpi (OldPpiList, &mPpiList[0]);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
OldPpiList2 = NULL;
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gGetPcdInfoPpiGuid,
|
||||
0,
|
||||
&OldPpiList2,
|
||||
&Ppi2
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
if (OldPpiList2 != NULL) {
|
||||
Status = PeiServicesReInstallPpi (OldPpiList2, &mPpiList2[0]);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
OldPpiList = NULL;
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gEfiPeiPcdPpiGuid,
|
||||
0,
|
||||
&OldPpiList,
|
||||
&Ppi
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
if (OldPpiList != NULL) {
|
||||
Status = PeiServicesReInstallPpi (OldPpiList, &mPpiList[1]);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
OldPpiList2 = NULL;
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gEfiGetPcdInfoPpiGuid,
|
||||
0,
|
||||
&OldPpiList2,
|
||||
&Ppi2
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
if (OldPpiList2 != NULL) {
|
||||
Status = PeiServicesReInstallPpi (OldPpiList2, &mPpiList2[1]);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
BuildPcdDatabase (FileHandle);
|
||||
|
||||
//
|
||||
|
@@ -3,7 +3,7 @@
|
||||
consumed by drivers that do not care about ACPI versions.
|
||||
|
||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2019, ARM Ltd. All rights reserved.<BR>
|
||||
Copyright (c) 2019 - 2021, ARM Ltd. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
@@ -11,6 +11,6 @@
|
||||
#ifndef _ACPI_H_
|
||||
#define _ACPI_H_
|
||||
|
||||
#include <IndustryStandard/Acpi63.h>
|
||||
#include <IndustryStandard/Acpi64.h>
|
||||
|
||||
#endif
|
||||
|
3148
MdePkg/Include/IndustryStandard/Acpi64.h
Normal file
3148
MdePkg/Include/IndustryStandard/Acpi64.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@
|
||||
#
|
||||
# Copyright (c) Microsoft Corporation
|
||||
# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2021, Arm Limited. All rights reserved.<BR>
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
##
|
||||
{
|
||||
@@ -19,6 +20,7 @@
|
||||
],
|
||||
## Both file path and directory path are accepted.
|
||||
"IgnoreFiles": [
|
||||
"Include/IndustryStandard/Acpi64.h"
|
||||
]
|
||||
},
|
||||
## options defined ci/Plugin/CompilerPlugin
|
||||
|
@@ -2,7 +2,7 @@
|
||||
APIs for JSON operations.
|
||||
|
||||
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@@ -53,6 +53,13 @@ typedef INT64 EDKII_JSON_INT_T; // #JSON_INTEGER_IS_LONG_LONG is set to 1
|
||||
Index < JsonArrayCount(Array) && (Value = JsonArrayGetValue(Array, Index)); \
|
||||
Index++)
|
||||
|
||||
#define EDKII_JSON_OBJECT_FOREACH_SAFE(Object, N, Key, Value) \
|
||||
for (Key = JsonObjectIteratorKey(JsonObjectIterator(Object)), \
|
||||
N = JsonObjectIteratorNext(Object, JsonObjectKeyToIterator(Key)); \
|
||||
Key && (Value = JsonObjectIteratorValue(JsonObjectKeyToIterator(Key))); \
|
||||
Key = JsonObjectIteratorKey(N), \
|
||||
N = JsonObjectIteratorNext(Object, JsonObjectKeyToIterator(Key)))
|
||||
|
||||
///
|
||||
/// Map to the json_error_t in jansson.h
|
||||
///
|
||||
@@ -177,12 +184,12 @@ JsonValueInitUnicodeString (
|
||||
|
||||
@param[in] Value The integer to initialize to JSON value
|
||||
|
||||
@retval The created JSON value which contains a JSON number or NULL.
|
||||
@retval The created JSON value which contains a JSON integer or NULL.
|
||||
|
||||
**/
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonValueInitNumber (
|
||||
JsonValueInitInteger (
|
||||
IN INT64 Value
|
||||
);
|
||||
|
||||
@@ -218,6 +225,36 @@ JsonValueInitNull (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to initialize a JSON value which contains a TRUE JSON value,
|
||||
or NULL on error.
|
||||
|
||||
NULL JSON value is kept as static value, and no need to do any cleanup work.
|
||||
|
||||
@retval The created JSON TRUE value.
|
||||
|
||||
**/
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonValueInitTrue (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to initialize a JSON value which contains a FALSE JSON value,
|
||||
or NULL on error.
|
||||
|
||||
NULL JSON value is kept as static value, and no need to do any cleanup work.
|
||||
|
||||
@retval The created JSON FALSE value.
|
||||
|
||||
**/
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonValueInitFalse (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to decrease the reference count of a JSON value by one, and once
|
||||
this reference count drops to zero, the value is destroyed and it can no longer be used.
|
||||
@@ -313,6 +350,21 @@ JsonValueIsString (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a JSON integer.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval TRUE The JSON value is contains JSON integer.
|
||||
@retval FALSE The JSON value doesn't contain a JSON integer.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
JsonValueIsInteger (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a JSON number.
|
||||
|
||||
@@ -343,6 +395,36 @@ JsonValueIsBoolean (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a TRUE value.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval TRUE The JSON value contains a TRUE value.
|
||||
@retval FALSE The JSON value doesn't contain a TRUE value.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
JsonValueIsTrue (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a FALSE value.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval TRUE The JSON value contains a FALSE value.
|
||||
@retval FALSE The JSON value doesn't contain a FALSE value.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
JsonValueIsFalse (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a JSON NULL.
|
||||
|
||||
@@ -424,19 +506,19 @@ JsonValueGetUnicodeString (
|
||||
);
|
||||
|
||||
/**
|
||||
The function is used to retrieve the associated integer in a number type JSON value.
|
||||
The function is used to retrieve the associated integer in a integer type JSON value.
|
||||
|
||||
The input JSON value should not be NULL or contain no JSON number, otherwise it will
|
||||
The input JSON value should not be NULL or contain no JSON Integer, otherwise it will
|
||||
ASSERT() and return 0.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval Return the associated number in JSON value.
|
||||
@retval Return the associated Integer in JSON value.
|
||||
|
||||
**/
|
||||
INT64
|
||||
EFIAPI
|
||||
JsonValueGetNumber (
|
||||
JsonValueGetInteger (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
);
|
||||
|
||||
@@ -675,6 +757,8 @@ JsonDumpString (
|
||||
Caller needs to cleanup the root value by calling JsonValueFree().
|
||||
|
||||
@param[in] String The NULL terminated CHAR8 string to convert.
|
||||
@param[in] Flags Flags for loading JSON string.
|
||||
@param[in] Error Returned error status.
|
||||
|
||||
@retval Array JSON value or object JSON value, or NULL when any error occurs.
|
||||
|
||||
@@ -682,7 +766,9 @@ JsonDumpString (
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonLoadString (
|
||||
IN CONST CHAR8* String
|
||||
IN CONST CHAR8* String,
|
||||
IN UINT64 Flags,
|
||||
IN EDKII_JSON_ERROR *Error
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -781,11 +867,36 @@ JsonObjectIteratorValue (
|
||||
@retval Iterator pointer
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
JsonObjectIteratorNext (
|
||||
IN EDKII_JSON_VALUE JsonValue,
|
||||
IN VOID *Iterator
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the key of iterator pointing
|
||||
|
||||
@param[in] Iterator Iterator pointer
|
||||
@retval Key
|
||||
**/
|
||||
CHAR8 *
|
||||
EFIAPI
|
||||
JsonObjectIteratorKey (
|
||||
IN VOID *Iterator
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the pointer of iterator by key.
|
||||
|
||||
@param[in] Key The key of interator pointer.
|
||||
@retval Pointer to interator
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
JsonObjectKeyToIterator (
|
||||
IN CHAR8 *Key
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the json type of this json value
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Redfish CRT wrapper functions.
|
||||
|
||||
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
@@ -5,7 +5,7 @@
|
||||
https://jansson.readthedocs.io/en/2.13/apiref.html
|
||||
|
||||
Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
**/
|
||||
@@ -154,12 +154,12 @@ JsonValueInitUnicodeString (
|
||||
|
||||
@param[in] Value The integer to initialize to JSON value
|
||||
|
||||
@retval The created JSON value which contains a JSON number or NULL.
|
||||
@retval The created JSON value which contains a JSON integer or NULL.
|
||||
|
||||
**/
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonValueInitNumber (
|
||||
JsonValueInitInteger (
|
||||
IN INT64 Value
|
||||
)
|
||||
{
|
||||
@@ -186,6 +186,42 @@ JsonValueInitBoolean (
|
||||
return (EDKII_JSON_VALUE)json_boolean (Value);
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to initialize a JSON value which contains a TRUE JSON value,
|
||||
or NULL on error.
|
||||
|
||||
NULL JSON value is kept as static value, and no need to do any cleanup work.
|
||||
|
||||
@retval The created JSON TRUE value.
|
||||
|
||||
**/
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonValueInitTrue (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return (EDKII_JSON_VALUE)json_true();
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to initialize a JSON value which contains a FALSE JSON value,
|
||||
or NULL on error.
|
||||
|
||||
NULL JSON value is kept as static value, and no need to do any cleanup work.
|
||||
|
||||
@retval The created JSON FALSE value.
|
||||
|
||||
**/
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonValueInitFalse (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return (EDKII_JSON_VALUE)json_false();
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to initialize a JSON value which contains a new JSON NULL,
|
||||
or NULL on error.
|
||||
@@ -314,6 +350,24 @@ JsonValueIsString (
|
||||
return json_is_string ((json_t *) Json);
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a JSON integer.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval TRUE The JSON value is contains JSON integer.
|
||||
@retval FALSE The JSON value doesn't contain a JSON integer.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
JsonValueIsInteger (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
)
|
||||
{
|
||||
return json_is_integer ((json_t *) Json);
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a JSON number.
|
||||
|
||||
@@ -329,7 +383,7 @@ JsonValueIsNumber (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
)
|
||||
{
|
||||
return json_is_integer ((json_t *) Json);
|
||||
return json_is_number ((json_t *) Json);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -350,6 +404,47 @@ JsonValueIsBoolean (
|
||||
return json_is_boolean ((json_t *) Json);
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a TRUE value.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval TRUE The JSON value contains a TRUE value.
|
||||
@retval FALSE The JSON value doesn't contain a TRUE value.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
JsonValueIsTrue (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
)
|
||||
{
|
||||
if (json_is_true ((json_t *)Json)) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a FALSE value.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval TRUE The JSON value contains a FALSE value.
|
||||
@retval FALSE The JSON value doesn't contain a FALSE value.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
JsonValueIsFalse (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
)
|
||||
{
|
||||
if (json_is_false ((json_t *)Json)) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
/**
|
||||
The function is used to return if the provided JSON value contains a JSON NULL.
|
||||
|
||||
@@ -485,24 +580,24 @@ JsonValueGetUnicodeString (
|
||||
}
|
||||
|
||||
/**
|
||||
The function is used to retrieve the associated integer in a number type JSON value.
|
||||
The function is used to retrieve the associated integer in a integer type JSON value.
|
||||
|
||||
The input JSON value should not be NULL or contain no JSON number, otherwise it will
|
||||
The input JSON value should not be NULL or contain no JSON integer, otherwise it will
|
||||
ASSERT() and return 0.
|
||||
|
||||
@param[in] Json The provided JSON value.
|
||||
|
||||
@retval Return the associated number in JSON value.
|
||||
@retval Return the associated integer in JSON value.
|
||||
|
||||
**/
|
||||
INT64
|
||||
EFIAPI
|
||||
JsonValueGetNumber (
|
||||
JsonValueGetInteger (
|
||||
IN EDKII_JSON_VALUE Json
|
||||
)
|
||||
{
|
||||
ASSERT (Json != NULL && JsonValueIsNumber (Json));
|
||||
if (Json == NULL || !JsonValueIsNumber (Json)) {
|
||||
ASSERT (Json != NULL && JsonValueIsInteger (Json));
|
||||
if (Json == NULL || !JsonValueIsInteger (Json)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -830,6 +925,8 @@ JsonDumpString (
|
||||
Caller needs to cleanup the root value by calling JsonValueFree().
|
||||
|
||||
@param[in] String The NULL terminated CHAR8 string to convert.
|
||||
@param[in] Flags Flags for loading JSON string.
|
||||
@param[in] Error Returned error status.
|
||||
|
||||
@retval Array JSON value or object JSON value, or NULL when any error occurs.
|
||||
|
||||
@@ -837,12 +934,12 @@ JsonDumpString (
|
||||
EDKII_JSON_VALUE
|
||||
EFIAPI
|
||||
JsonLoadString (
|
||||
IN CONST CHAR8* String
|
||||
IN CONST CHAR8* String,
|
||||
IN UINT64 Flags,
|
||||
IN EDKII_JSON_ERROR *Error
|
||||
)
|
||||
{
|
||||
json_error_t JsonError;
|
||||
|
||||
return (EDKII_JSON_VALUE) json_loads ((const char *)String, 0, &JsonError);
|
||||
return (EDKII_JSON_VALUE) json_loads ((const char *)String, Flags, (json_error_t *)Error);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -959,6 +1056,7 @@ JsonObjectIteratorValue (
|
||||
@retval Iterator pointer
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
JsonObjectIteratorNext (
|
||||
IN EDKII_JSON_VALUE JsonValue,
|
||||
IN VOID *Iterator
|
||||
@@ -967,6 +1065,36 @@ JsonObjectIteratorNext (
|
||||
return json_object_iter_next(JsonValue, Iterator);
|
||||
}
|
||||
|
||||
/**
|
||||
Returns the key of iterator pointing.
|
||||
|
||||
@param[in] Iterator Iterator pointer
|
||||
@retval Key
|
||||
**/
|
||||
CHAR8 *
|
||||
EFIAPI
|
||||
JsonObjectIteratorKey (
|
||||
IN VOID *Iterator
|
||||
)
|
||||
{
|
||||
return (CHAR8 *)json_object_iter_key(Iterator);
|
||||
}
|
||||
|
||||
/**
|
||||
Returns the pointer of iterator by key.
|
||||
|
||||
@param[in] Key The key of interator pointer.
|
||||
@retval Pointer to interator
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
JsonObjectKeyToIterator (
|
||||
IN CHAR8 *Key
|
||||
)
|
||||
{
|
||||
return json_object_key_to_iter(Key);
|
||||
}
|
||||
|
||||
/**
|
||||
Returns the json type of this json value.
|
||||
|
||||
|
@@ -17,7 +17,7 @@
|
||||
#ifndef LIBREDFISH_REDFISH_PAYLOAD_H_
|
||||
#define LIBREDFISH_REDFISH_PAYLOAD_H_
|
||||
|
||||
#include <PrivateInclude/Library/RedfishCrtLib.h>
|
||||
#include <Include/Library/RedfishCrtLib.h>
|
||||
|
||||
#include <jansson.h>
|
||||
#include <redfishService.h>
|
||||
|
@@ -30,7 +30,7 @@
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
|
||||
#include <PrivateInclude/Library/RedfishCrtLib.h>
|
||||
#include <Include/Library/RedfishCrtLib.h>
|
||||
|
||||
#include <Protocol/EdkIIRedfishConfigHandler.h>
|
||||
#include <Protocol/RestEx.h>
|
||||
|
@@ -17,7 +17,7 @@
|
||||
#ifndef LIBREDFISH_REDPATH_H_
|
||||
#define LIBREDFISH_REDPATH_H_
|
||||
|
||||
#include <PrivateInclude/Library/RedfishCrtLib.h>
|
||||
#include <Include/Library/RedfishCrtLib.h>
|
||||
|
||||
#include <jansson.h>
|
||||
|
||||
|
@@ -34,8 +34,8 @@
|
||||
"PrivateInclude/Crt/stdlib.h",
|
||||
"PrivateInclude/Crt/string.h",
|
||||
"PrivateInclude/Crt/time.h",
|
||||
"PrivateInclude/Library/RedfishCrtLib.h",
|
||||
"PrivateLibrary/RedfishCrtLib/RedfishCrtLib.c",
|
||||
"Include/Library/RedfishCrtLib.h",
|
||||
##
|
||||
## For jansson library open source
|
||||
## load.c is overrided from open source.
|
||||
|
@@ -60,7 +60,7 @@
|
||||
# CRT library is currently used by edk2 JsonLib (open source
|
||||
# jansson project) and edk2 RedfishLib (libredfish open source
|
||||
# project).
|
||||
RedfishCrtLib|PrivateInclude/Library/RedfishCrtLib.h
|
||||
RedfishCrtLib|Include/Library/RedfishCrtLib.h
|
||||
|
||||
## @libraryclass Redfish Helper Library
|
||||
# Library provides Redfish helper functions.
|
||||
|
@@ -17,7 +17,7 @@
|
||||
PI_SPECIFICATION_VERSION = 0x00010032
|
||||
ENTRY_POINT = StandaloneMmMain
|
||||
|
||||
# VALID_ARCHITECTURES = IA32 X64 AARCH64
|
||||
# VALID_ARCHITECTURES = IA32 X64 AARCH64 ARM
|
||||
|
||||
[Sources]
|
||||
StandaloneMmCore.c
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
Copyright (c) 2016 HP Development Company, L.P.
|
||||
Copyright (c) 2016 - 2021, Arm Limited. All rights reserved.
|
||||
Copyright (c) 2021, Linaro Limited
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@@ -92,8 +93,8 @@ PiMmStandaloneArmTfCpuDriverEntry (
|
||||
// receipt of a synchronous MM request. Use the Event ID to distinguish
|
||||
// between synchronous and asynchronous events.
|
||||
//
|
||||
if ((ARM_SMC_ID_MM_COMMUNICATE_AARCH64 != EventId) &&
|
||||
(ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64 != EventId)) {
|
||||
if ((ARM_SMC_ID_MM_COMMUNICATE != EventId) &&
|
||||
(ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ != EventId)) {
|
||||
DEBUG ((DEBUG_INFO, "UnRecognized Event - 0x%x\n", EventId));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
@@ -10,7 +10,7 @@
|
||||
|
||||
#include <Base.h>
|
||||
#include <Pi/PiMmCis.h>
|
||||
#include <Library/AArch64/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/Arm/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/ArmSvcLib.h>
|
||||
#include <Library/ArmLib.h>
|
||||
@@ -164,8 +164,8 @@ StandaloneMmCpuInitialize (
|
||||
|
||||
// Share the entry point of the CPU driver
|
||||
DEBUG ((DEBUG_INFO, "Sharing Cpu Driver EP *0x%lx = 0x%lx\n",
|
||||
(UINT64) CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr,
|
||||
(UINT64) PiMmStandaloneArmTfCpuDriverEntry));
|
||||
(UINTN) CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr,
|
||||
(UINTN) PiMmStandaloneArmTfCpuDriverEntry));
|
||||
*(CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr) = PiMmStandaloneArmTfCpuDriverEntry;
|
||||
|
||||
// Find the descriptor that contains the whereabouts of the buffer for
|
||||
@@ -180,8 +180,8 @@ StandaloneMmCpuInitialize (
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "mNsCommBuffer.PhysicalStart - 0x%lx\n", (UINT64) NsCommBufMmramRange->PhysicalStart));
|
||||
DEBUG ((DEBUG_INFO, "mNsCommBuffer.PhysicalSize - 0x%lx\n", (UINT64) NsCommBufMmramRange->PhysicalSize));
|
||||
DEBUG ((DEBUG_INFO, "mNsCommBuffer.PhysicalStart - 0x%lx\n", (UINTN) NsCommBufMmramRange->PhysicalStart));
|
||||
DEBUG ((DEBUG_INFO, "mNsCommBuffer.PhysicalSize - 0x%lx\n", (UINTN) NsCommBufMmramRange->PhysicalSize));
|
||||
|
||||
CopyMem (&mNsCommBuffer, NsCommBufMmramRange, sizeof(EFI_MMRAM_DESCRIPTOR));
|
||||
DEBUG ((DEBUG_INFO, "mNsCommBuffer: 0x%016lx - 0x%lx\n", mNsCommBuffer.CpuStart, mNsCommBuffer.PhysicalSize));
|
@@ -14,7 +14,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#include <Guid/MmramMemoryReserve.h>
|
||||
#include <Guid/MpInformation.h>
|
||||
|
||||
#include <Library/AArch64/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/Arm/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/ArmMmuLib.h>
|
||||
#include <Library/ArmSvcLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
@@ -72,14 +72,14 @@ CreateHobListFromBootInfo (
|
||||
|
||||
// Create a hoblist with a PHIT and EOH
|
||||
HobStart = HobConstructor (
|
||||
(VOID *) PayloadBootInfo->SpMemBase,
|
||||
(VOID *) (UINTN) PayloadBootInfo->SpMemBase,
|
||||
(UINTN) PayloadBootInfo->SpMemLimit - PayloadBootInfo->SpMemBase,
|
||||
(VOID *) PayloadBootInfo->SpHeapBase,
|
||||
(VOID *) (PayloadBootInfo->SpHeapBase + PayloadBootInfo->SpHeapSize)
|
||||
(VOID *) (UINTN) PayloadBootInfo->SpHeapBase,
|
||||
(VOID *) (UINTN) (PayloadBootInfo->SpHeapBase + PayloadBootInfo->SpHeapSize)
|
||||
);
|
||||
|
||||
// Check that the Hoblist starts at the bottom of the Heap
|
||||
ASSERT (HobStart == (VOID *) PayloadBootInfo->SpHeapBase);
|
||||
ASSERT (HobStart == (VOID *) (UINTN) PayloadBootInfo->SpHeapBase);
|
||||
|
||||
// Build a Boot Firmware Volume HOB
|
||||
BuildFvHob (PayloadBootInfo->SpImageBase, PayloadBootInfo->SpImageSize);
|
||||
@@ -190,9 +190,9 @@ CreateHobListFromBootInfo (
|
||||
MmramRanges[3].RegionState = EFI_CACHEABLE | EFI_ALLOCATED;
|
||||
|
||||
// Base and size of heap memory shared by all cpus
|
||||
MmramRanges[4].PhysicalStart = (EFI_PHYSICAL_ADDRESS) HobStart;
|
||||
MmramRanges[4].CpuStart = (EFI_PHYSICAL_ADDRESS) HobStart;
|
||||
MmramRanges[4].PhysicalSize = HobStart->EfiFreeMemoryBottom - (EFI_PHYSICAL_ADDRESS) HobStart;
|
||||
MmramRanges[4].PhysicalStart = (EFI_PHYSICAL_ADDRESS) (UINTN) HobStart;
|
||||
MmramRanges[4].CpuStart = (EFI_PHYSICAL_ADDRESS) (UINTN) HobStart;
|
||||
MmramRanges[4].PhysicalSize = HobStart->EfiFreeMemoryBottom - (EFI_PHYSICAL_ADDRESS) (UINTN) HobStart;
|
||||
MmramRanges[4].RegionState = EFI_CACHEABLE | EFI_ALLOCATED;
|
||||
|
||||
// Base and size of heap memory shared by all cpus
|
@@ -14,7 +14,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#include <Guid/MmramMemoryReserve.h>
|
||||
#include <Guid/MpInformation.h>
|
||||
|
||||
#include <Library/AArch64/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/Arm/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/ArmMmuLib.h>
|
||||
#include <Library/ArmSvcLib.h>
|
||||
#include <Library/DebugLib.h>
|
@@ -10,7 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
#include <PiMm.h>
|
||||
|
||||
#include <Library/AArch64/StandaloneMmCoreEntryPoint.h>
|
||||
#include <Library/Arm/StandaloneMmCoreEntryPoint.h>
|
||||
|
||||
#include <PiPei.h>
|
||||
#include <Guid/MmramMemoryReserve.h>
|
||||
@@ -182,13 +182,13 @@ DelegatedEventLoop (
|
||||
}
|
||||
|
||||
if (FfaEnabled) {
|
||||
EventCompleteSvcArgs->Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64;
|
||||
EventCompleteSvcArgs->Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP;
|
||||
EventCompleteSvcArgs->Arg1 = 0;
|
||||
EventCompleteSvcArgs->Arg2 = 0;
|
||||
EventCompleteSvcArgs->Arg3 = ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64;
|
||||
EventCompleteSvcArgs->Arg3 = ARM_SVC_ID_SP_EVENT_COMPLETE;
|
||||
EventCompleteSvcArgs->Arg4 = SvcStatus;
|
||||
} else {
|
||||
EventCompleteSvcArgs->Arg0 = ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64;
|
||||
EventCompleteSvcArgs->Arg0 = ARM_SVC_ID_SP_EVENT_COMPLETE;
|
||||
EventCompleteSvcArgs->Arg1 = SvcStatus;
|
||||
}
|
||||
}
|
||||
@@ -273,13 +273,13 @@ InitArmSvcArgs (
|
||||
)
|
||||
{
|
||||
if (FeaturePcdGet (PcdFfaEnable)) {
|
||||
InitMmFoundationSvcArgs->Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64;
|
||||
InitMmFoundationSvcArgs->Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP;
|
||||
InitMmFoundationSvcArgs->Arg1 = 0;
|
||||
InitMmFoundationSvcArgs->Arg2 = 0;
|
||||
InitMmFoundationSvcArgs->Arg3 = ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64;
|
||||
InitMmFoundationSvcArgs->Arg3 = ARM_SVC_ID_SP_EVENT_COMPLETE;
|
||||
InitMmFoundationSvcArgs->Arg4 = *Ret;
|
||||
} else {
|
||||
InitMmFoundationSvcArgs->Arg0 = ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64;
|
||||
InitMmFoundationSvcArgs->Arg0 = ARM_SVC_ID_SP_EVENT_COMPLETE;
|
||||
InitMmFoundationSvcArgs->Arg1 = *Ret;
|
||||
}
|
||||
}
|
||||
@@ -328,7 +328,7 @@ _ModuleEntryPoint (
|
||||
|
||||
// Locate PE/COFF File information for the Standalone MM core module
|
||||
Status = LocateStandaloneMmCorePeCoffData (
|
||||
(EFI_FIRMWARE_VOLUME_HEADER *) PayloadBootInfo->SpImageBase,
|
||||
(EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) PayloadBootInfo->SpImageBase,
|
||||
&TeData,
|
||||
&TeDataSize
|
||||
);
|
||||
@@ -395,7 +395,7 @@ _ModuleEntryPoint (
|
||||
//
|
||||
ProcessModuleEntryPointList (HobStart);
|
||||
|
||||
DEBUG ((DEBUG_INFO, "Shared Cpu Driver EP 0x%lx\n", (UINT64) CpuDriverEntryPoint));
|
||||
DEBUG ((DEBUG_INFO, "Shared Cpu Driver EP %p\n", (VOID *) CpuDriverEntryPoint));
|
||||
|
||||
finish:
|
||||
if (Status == RETURN_UNSUPPORTED) {
|
@@ -21,10 +21,10 @@
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is for build only)
|
||||
#
|
||||
|
||||
[Sources.AARCH64]
|
||||
AArch64/StandaloneMmCoreEntryPoint.c
|
||||
AArch64/SetPermissions.c
|
||||
AArch64/CreateHobList.c
|
||||
[Sources.AARCH64, Sources.ARM]
|
||||
Arm/StandaloneMmCoreEntryPoint.c
|
||||
Arm/SetPermissions.c
|
||||
Arm/CreateHobList.c
|
||||
|
||||
[Sources.X64]
|
||||
X64/StandaloneMmCoreEntryPoint.c
|
||||
@@ -34,14 +34,14 @@
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
StandaloneMmPkg/StandaloneMmPkg.dec
|
||||
|
||||
[Packages.AARCH64]
|
||||
[Packages.ARM, Packages.AARCH64]
|
||||
ArmPkg/ArmPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
DebugLib
|
||||
|
||||
[LibraryClasses.AARCH64]
|
||||
[LibraryClasses.ARM, LibraryClasses.AARCH64]
|
||||
StandaloneMmMmuLib
|
||||
ArmSvcLib
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
gEfiStandaloneMmNonSecureBufferGuid
|
||||
gEfiArmTfCpuDriverEpDescriptorGuid
|
||||
|
||||
[FeaturePcd.AARCH64]
|
||||
[FeaturePcd.ARM, FeaturePcd.AARCH64]
|
||||
gArmTokenSpaceGuid.PcdFfaEnable
|
||||
|
||||
[BuildOptions]
|
||||
|
@@ -22,7 +22,7 @@
|
||||
LIBRARY_CLASS = HobLib|MM_CORE_STANDALONE
|
||||
|
||||
#
|
||||
# VALID_ARCHITECTURES = X64 AARCH64
|
||||
# VALID_ARCHITECTURES = X64 AARCH64 ARM
|
||||
#
|
||||
[Sources.common]
|
||||
Common.c
|
||||
@@ -30,9 +30,9 @@
|
||||
[Sources.X64]
|
||||
X64/StandaloneMmCoreHobLib.c
|
||||
|
||||
[Sources.AARCH64]
|
||||
AArch64/StandaloneMmCoreHobLib.c
|
||||
AArch64/StandaloneMmCoreHobLibInternal.c
|
||||
[Sources.AARCH64, Sources.ARM]
|
||||
Arm/StandaloneMmCoreHobLib.c
|
||||
Arm/StandaloneMmCoreHobLibInternal.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
@@ -20,6 +20,13 @@
|
||||
//
|
||||
extern EFI_PHYSICAL_ADDRESS mMmMemLibInternalMaximumSupportAddress;
|
||||
|
||||
#ifdef MDE_CPU_AARCH64
|
||||
#define ARM_PHYSICAL_ADDRESS_BITS 36
|
||||
#endif
|
||||
#ifdef MDE_CPU_ARM
|
||||
#define ARM_PHYSICAL_ADDRESS_BITS 32
|
||||
#endif
|
||||
|
||||
/**
|
||||
Calculate and save the maximum support address.
|
||||
|
||||
@@ -31,7 +38,7 @@ MmMemLibInternalCalculateMaximumSupportAddress (
|
||||
{
|
||||
UINT8 PhysicalAddressBits;
|
||||
|
||||
PhysicalAddressBits = 36;
|
||||
PhysicalAddressBits = ARM_PHYSICAL_ADDRESS_BITS;
|
||||
|
||||
//
|
||||
// Save the maximum support address in one global variable
|
@@ -28,7 +28,7 @@
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 AARCH64
|
||||
# VALID_ARCHITECTURES = IA32 X64 AARCH64 ARM
|
||||
#
|
||||
|
||||
[Sources.Common]
|
||||
@@ -37,8 +37,8 @@
|
||||
[Sources.IA32, Sources.X64]
|
||||
X86StandaloneMmMemLibInternal.c
|
||||
|
||||
[Sources.AARCH64]
|
||||
AArch64/StandaloneMmMemLibInternal.c
|
||||
[Sources.AARCH64, Sources.ARM]
|
||||
ArmStandaloneMmMemLibInternal.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
@@ -20,7 +20,7 @@
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = AARCH64
|
||||
# VALID_ARCHITECTURES = AARCH64|ARM
|
||||
#
|
||||
#
|
||||
|
||||
|
@@ -29,10 +29,10 @@
|
||||
## MM Memory Operation.
|
||||
MemLib|Include/Library/StandaloneMmMemLib.h
|
||||
|
||||
[LibraryClasses.AArch64]
|
||||
[LibraryClasses.AArch64, LibraryClasses.ARM]
|
||||
## @libraryclass Defines a set of interfaces for the MM core entrypoint for
|
||||
## AArch64.
|
||||
StandaloneMmCoreEntryPoint|Include/Library/AArch64/StandaloneMmCoreEntryPoint.h
|
||||
## AArch64 and ARM.
|
||||
StandaloneMmCoreEntryPoint|Include/Library/Arm/StandaloneMmCoreEntryPoint.h
|
||||
|
||||
[Guids]
|
||||
gStandaloneMmPkgTokenSpaceGuid = { 0x18fe7632, 0xf5c8, 0x4e63, { 0x8d, 0xe8, 0x17, 0xa5, 0x5c, 0x59, 0x13, 0xbd }}
|
||||
|
@@ -20,7 +20,7 @@
|
||||
PLATFORM_VERSION = 1.0
|
||||
DSC_SPECIFICATION = 0x00010011
|
||||
OUTPUT_DIRECTORY = Build/StandaloneMm
|
||||
SUPPORTED_ARCHITECTURES = AARCH64|X64
|
||||
SUPPORTED_ARCHITECTURES = AARCH64|X64|ARM
|
||||
BUILD_TARGETS = DEBUG|RELEASE
|
||||
SKUID_IDENTIFIER = DEFAULT
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
StandaloneMmDriverEntryPoint|MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf
|
||||
VariableMmDependency|StandaloneMmPkg/Library/VariableMmDependency/VariableMmDependency.inf
|
||||
|
||||
[LibraryClasses.AARCH64]
|
||||
[LibraryClasses.AARCH64, LibraryClasses.ARM]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
|
||||
StandaloneMmMmuLib|ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
|
||||
ArmSvcLib|ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf
|
||||
@@ -118,8 +118,8 @@
|
||||
StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.inf
|
||||
StandaloneMmPkg/Library/VariableMmDependency/VariableMmDependency.inf
|
||||
|
||||
[Components.AARCH64]
|
||||
StandaloneMmPkg/Drivers/StandaloneMmCpu/AArch64/StandaloneMmCpu.inf
|
||||
[Components.AARCH64, Components.ARM]
|
||||
StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.inf
|
||||
StandaloneMmPkg/Library/StandaloneMmPeCoffExtraActionLib/StandaloneMmPeCoffExtraActionLib.inf
|
||||
|
||||
###################################################################################################
|
||||
@@ -135,6 +135,10 @@
|
||||
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 -march=armv8-a+nofp -mstrict-align
|
||||
GCC:*_*_*_CC_FLAGS = -mstrict-align
|
||||
|
||||
[BuildOptions.ARM]
|
||||
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 -march=armv7-a
|
||||
GCC:*_*_*_CC_FLAGS = -fno-stack-protector
|
||||
|
||||
[BuildOptions.X64]
|
||||
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
|
||||
GCC:*_GCC*_*_DLINK_FLAGS = -z common-page-size=0x1000
|
||||
|
@@ -237,7 +237,7 @@ CpuCacheInfoCollectCoreAndCacheData (
|
||||
CacheData[CacheParamLeafIndex].CacheType = (UINT8)CacheParamEax.Bits.CacheType;
|
||||
CacheData[CacheParamLeafIndex].CacheWays = (UINT16)CacheParamEbx.Bits.Ways;
|
||||
CacheData[CacheParamLeafIndex].FullyAssociativeCache = (UINT8)CacheParamEax.Bits.FullyAssociativeCache;
|
||||
CacheData[CacheParamLeafIndex].DirectMappedCache = (UINT8)CacheParamEdx.Bits.ComplexCacheIndexing;
|
||||
CacheData[CacheParamLeafIndex].DirectMappedCache = (UINT8)(CacheParamEdx.Bits.ComplexCacheIndexing == 0);
|
||||
CacheData[CacheParamLeafIndex].CacheShareBits = (UINT16)CacheParamEax.Bits.MaximumAddressableIdsForLogicalProcessors;
|
||||
CacheData[CacheParamLeafIndex].CacheSizeinKB = (CacheParamEbx.Bits.Ways + 1) *
|
||||
(CacheParamEbx.Bits.LinePartitions + 1) * (CacheParamEbx.Bits.LineSize + 1) * (CacheParamEcx + 1) / SIZE_1KB;
|
||||
|
Reference in New Issue
Block a user