From 37623a5c029e5415fe24b86bf4f6481f8fdfad94 Mon Sep 17 00:00:00 2001 From: li-elvin Date: Tue, 30 Oct 2012 04:23:40 +0000 Subject: Add missing status code in several modules. Signed-off-by: Li Elvin Reviewed-by: Yao Jiewen Reviewed-by: Ni Ruiyu Reviewed-by: Gao Liming Reviewed-by: Tian Feng Reviewed-by: Fan Jeff git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13890 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Acpi/BootScriptExecutorDxe/ScriptExecute.c | 37 ++++++++++++---------- .../Universal/ResetSystemRuntimeDxe/ResetSystem.c | 5 +++ .../Universal/ResetSystemRuntimeDxe/ResetSystem.h | 1 + .../ResetSystemRuntimeDxe.inf | 3 +- 4 files changed, 28 insertions(+), 18 deletions(-) (limited to 'MdeModulePkg/Universal') diff --git a/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c b/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c index 971e429f39..3bddda1316 100644 --- a/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c +++ b/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c @@ -68,9 +68,12 @@ S3BootScriptExecutorEntryFunction ( // for that parameter. // Status = S3BootScriptExecute (); - if (EFI_ERROR (Status)) { - return Status; - } + + // + // Need report status back to S3ResumePeim. + // If boot script execution is failed, S3ResumePeim wil report the error status code. + // + PeiS3ResumeState->ReturnStatus = (UINT64)(UINTN)Status; AsmWbinvd (); @@ -79,13 +82,6 @@ S3BootScriptExecutorEntryFunction ( // Facs = (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) ((UINTN) (AcpiS3Context->AcpiFacsTable)); - if ((Facs == NULL) || - (Facs->Signature != EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) || - ((Facs->FirmwareWakingVector == 0) && (Facs->XFirmwareWakingVector == 0)) ) { - CpuDeadLoop(); - return EFI_INVALID_PARAMETER; - } - // // We need turn back to S3Resume - install boot script done ppi and report status code on S3resume. // @@ -97,12 +93,16 @@ S3BootScriptExecutorEntryFunction ( DEBUG ((EFI_D_ERROR, "Call AsmDisablePaging64() to return to S3 Resume in PEI Phase\n")); PeiS3ResumeState->AsmTransferControl = (EFI_PHYSICAL_ADDRESS)(UINTN)AsmTransferControl32; - // - // more step needed - because relative address is handled differently between X64 and IA32. - // - AsmTransferControl16Address = (UINTN)AsmTransferControl16; - AsmFixAddress16 = (UINT32)AsmTransferControl16Address; - AsmJmpAddr32 = (UINT32)((Facs->FirmwareWakingVector & 0xF) | ((Facs->FirmwareWakingVector & 0xFFFF0) << 12)); + if ((Facs != NULL) && + (Facs->Signature == EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) && + (Facs->FirmwareWakingVector != 0) ) { + // + // more step needed - because relative address is handled differently between X64 and IA32. + // + AsmTransferControl16Address = (UINTN)AsmTransferControl16; + AsmFixAddress16 = (UINT32)AsmTransferControl16Address; + AsmJmpAddr32 = (UINT32)((Facs->FirmwareWakingVector & 0xF) | ((Facs->FirmwareWakingVector & 0xFFFF0) << 12)); + } AsmDisablePaging64 ( PeiS3ResumeState->ReturnCs, @@ -132,7 +132,10 @@ S3BootScriptExecutorEntryFunction ( CpuDeadLoop(); return EFI_UNSUPPORTED; } - + + // + // S3ResumePeim does not provide a way to jump back to itself, so resume to OS here directly + // if (Facs->XFirmwareWakingVector != 0) { // // Switch to native waking vector diff --git a/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c b/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c index 9adca0eb42..aa1ca162d6 100644 --- a/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c +++ b/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c @@ -104,6 +104,11 @@ ResetSystem ( EFI_STATUS Status; UINTN Size; UINTN CapsuleDataPtr; + + // + // Indicate reset system runtime service is called. + // + REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_RESET_SYSTEM)); switch (ResetType) { case EfiResetWarm: diff --git a/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h b/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h index 44b13df871..c3a2a7f127 100644 --- a/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h +++ b/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h @@ -30,6 +30,7 @@ #include #include #include +#include /** The driver's entry point. diff --git a/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf b/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf index 6fdd2d3f7e..cb17f3746b 100644 --- a/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf +++ b/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf @@ -3,7 +3,7 @@ # # This driver implements Reset Architectural Protocol. # -# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
# # This program and the accompanying materials are # licensed and made available under the terms and conditions of the BSD License @@ -48,6 +48,7 @@ UefiLib DebugLib BaseLib + ReportStatusCodeLib [Guids] -- cgit v1.2.3