REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2098
Cc: Supreeth Venkatesh <supreeth.venkat...@arm.com> Signed-off-by: Eric Jin <eric....@intel.com> --- uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.inf | 3 ++- uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.h | 9 ++++++++- uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTestConformance.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 93 insertions(+), 17 deletions(-) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.inf index 49ad79915934..3de43a20e8a4 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.inf +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.inf @@ -1,7 +1,7 @@ ## @file # # Copyright 2006 - 2012 Unified EFI, Inc.<BR> -# Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -53,4 +53,5 @@ [Protocols] gEfiTestProfileLibraryGuid + gEfiTestRecoveryLibraryGuid gBlackBoxEfiHIIPackageListProtocolGuid diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.h index b1c35fee7435..008584577ed1 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTest.h @@ -1,7 +1,7 @@ /** @file Copyright 2006 - 2017 Unified EFI, Inc.<BR> - Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -35,6 +35,13 @@ Abstract: #include EFI_PROTOCOL_DEFINITION (LoadFile) #include EFI_TEST_PROTOCOL_DEFINITION (TestProfileLibrary) +#include EFI_TEST_PROTOCOL_DEFINITION (TestRecoveryLibrary) + +typedef struct _RESET_DATA { + UINTN Step; + UINTN TplIndex; + UINT32 RepeatTimes; +} RESET_DATA; #if (EFI_SPECIFICATION_VERSION >= 0x0002000A) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTestConformance.c index 0a26d46847da..e90afe7ecae0 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTestConformance.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/BootServices/ImageServices/BlackBoxTest/ImageBBTestConformance.c @@ -1,7 +1,7 @@ /** @file Copyright 2006 - 2016 Unified EFI, Inc.<BR> - Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -30,7 +30,8 @@ Abstract: #define TEST_VENDOR1_GUID \ { 0xF6FAB04F, 0xACAF, 0x4af3, { 0xB9, 0xFA, 0xDC, 0xF9, 0x7F, 0xB4, 0x42, 0x6F } } -#define MAX_BUFFER_SIZE 10 +#define STATUS_BUFFER_SIZE 8 +#define RECOVER_BUFFER_SIZE 1024 EFI_GUID gTestVendor1Guid = TEST_VENDOR1_GUID; @@ -778,19 +779,23 @@ BBTestExitBootServicesConsistencyTest ( ) { EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_TEST_RECOVERY_LIBRARY_PROTOCOL *RecoveryLib; EFI_STATUS Status; EFI_TEST_ASSERTION AssertionType; UINTN MapKey; - + UINTN Size; UINTN Numbers; UINTN DataSize; - UINT8 Data[MAX_BUFFER_SIZE]; + RESET_DATA *ResetData; + UINT8 Data[STATUS_BUFFER_SIZE]; + UINT8 Buffer[RECOVER_BUFFER_SIZE]; EFI_STATUS ReturnStatus; // // Init // StandardLib = NULL; + RecoveryLib = NULL; // // Get the Standard Library Interface @@ -803,6 +808,14 @@ BBTestExitBootServicesConsistencyTest ( return Status; } + Status = gtBS->HandleProtocol ( + SupportHandle, + &gEfiTestRecoveryLibraryGuid, + (VOID **) &RecoveryLib); + if (EFI_ERROR(Status)) { + return Status; + } + Status = ImageTestCheckForCleanEnvironment (&Numbers); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( @@ -819,25 +832,80 @@ BBTestExitBootServicesConsistencyTest ( return Status; } - DataSize = MAX_BUFFER_SIZE; - Status = gtRT->GetVariable ( - L"ExitBootServicesTestVariable", // VariableName - &gTestVendor1Guid, // VendorGuid - NULL, // Attributes - &DataSize, // DataSize - &ReturnStatus // Data - ); + // + // Read reset record + // + Status = RecoveryLib->ReadResetRecord ( + RecoveryLib, + &Size, + Buffer + ); + ResetData = (RESET_DATA *)Buffer; - if (Status == EFI_SUCCESS) { + if (EFI_ERROR(Status) || (Size < sizeof(RESET_DATA))) { + // + // Step 1 + // + } else if (ResetData->Step == 1) { + // + // Step 2 + // + DataSize = STATUS_BUFFER_SIZE; + Status = gtRT->GetVariable ( + L"ExitBootServicesTestVariable", // VariableName + &gTestVendor1Guid, // VendorGuid + NULL, // Attributes + &DataSize, // DataSize + &ReturnStatus // Data + ); + + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"GetVariable - Can't get the test variable - ExitBootServicesTestVariable", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } goto CheckResult; + } else { + return EFI_LOAD_ERROR; } // // Print out some information to avoid the user thought it is an error // - SctPrint (L"System will cold reset after 2 second. please run this test again..."); + SctPrint (L"System will cold reset after 2 second and test will be resumed after reboot."); gtBS->Stall (2000000); + + ResetData->Step = 1; + ResetData->TplIndex = 0; + Status = RecoveryLib->WriteResetRecord ( + RecoveryLib, + sizeof (RESET_DATA), + Buffer + ); + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"TestRecoveryLib - WriteResetRecord", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + // // Checkpoint 1: // 3.5.2.1 ExitBootServices should not succeed with an invalid MapKey @@ -885,7 +953,7 @@ BBTestExitBootServicesConsistencyTest ( //reset system gtRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL); - // get var to get the status + CheckResult: if (ReturnStatus == EFI_INVALID_PARAMETER) { -- 2.20.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#46132): https://edk2.groups.io/g/devel/message/46132 Mute This Topic: https://groups.io/mt/32975823/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-