mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
FmpDevicePkg/FmpDxe: Improve set image path Last Attempt Status granularity
Increases the level of granularity for Last Attempt Status codes returned from SetTheImage() in FmpDxe. This allows better identification of the error that occurred in the set image operation using Last Attempt Status codes. Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Guomin Jiang <guomin.jiang@intel.com> Cc: Wei6 Xu <wei6.xu@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Acked-by: Liming Gao <gaoliming@byosoft.com.cn> Reviewed-by: Wei6 Xu <wei6.xu@intel.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
This commit is contained in:
parent
5550f4d33b
commit
004ce0ab04
1 changed files with 13 additions and 4 deletions
|
|
@ -1138,6 +1138,7 @@ SetTheImage (
|
|||
if (This == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - This is NULL.\n", mImageIdName));
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROTOCOL_ARG_MISSING;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
|
@ -1163,6 +1164,7 @@ SetTheImage (
|
|||
//
|
||||
if (Private->FmpDeviceLocked) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - Device is already locked. Can't update.\n", mImageIdName));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_DEVICE_LOCKED;
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
@ -1170,12 +1172,9 @@ SetTheImage (
|
|||
//
|
||||
// Call check image to verify the image
|
||||
//
|
||||
Status = CheckTheImage (This, ImageIndex, Image, ImageSize, &Updateable);
|
||||
Status = CheckTheImageInternal (This, ImageIndex, Image, ImageSize, &Updateable, &LastAttemptStatus);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - Check The Image failed with %r.\n", mImageIdName, Status));
|
||||
if (Status == EFI_SECURITY_VIOLATION) {
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR;
|
||||
}
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
|
@ -1191,6 +1190,7 @@ SetTheImage (
|
|||
FmpHeader = GetFmpHeader ( (EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image, ImageSize, DependenciesSize, &FmpPayloadSize );
|
||||
if (FmpHeader == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - GetFmpHeader failed.\n", mImageIdName));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER;
|
||||
Status = EFI_ABORTED;
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
@ -1218,6 +1218,7 @@ SetTheImage (
|
|||
|
||||
if (Progress == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - Invalid progress callback\n", mImageIdName));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROGRESS_CALLBACK_ERROR;
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
@ -1238,6 +1239,7 @@ SetTheImage (
|
|||
Status = CheckSystemPower (&BooleanValue);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemPower - API call failed %r.\n", mImageIdName, Status));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_POWER_API;
|
||||
goto cleanup;
|
||||
}
|
||||
if (!BooleanValue) {
|
||||
|
|
@ -1258,10 +1260,12 @@ SetTheImage (
|
|||
Status = CheckSystemThermal (&BooleanValue);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemThermal - API call failed %r.\n", mImageIdName, Status));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_THERMAL_API;
|
||||
goto cleanup;
|
||||
}
|
||||
if (!BooleanValue) {
|
||||
Status = EFI_ABORTED;
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_THERMAL;
|
||||
DEBUG (
|
||||
(DEBUG_ERROR,
|
||||
"FmpDxe(%s): SetTheImage() - CheckSystemThermal - returned False. Update not allowed due to System Thermal.\n", mImageIdName)
|
||||
|
|
@ -1277,10 +1281,12 @@ SetTheImage (
|
|||
Status = CheckSystemEnvironment (&BooleanValue);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - CheckSystemEnvironment - API call failed %r.\n", mImageIdName, Status));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_ENV_API;
|
||||
goto cleanup;
|
||||
}
|
||||
if (!BooleanValue) {
|
||||
Status = EFI_ABORTED;
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_SYSTEM_ENV;
|
||||
DEBUG (
|
||||
(DEBUG_ERROR,
|
||||
"FmpDxe(%s): SetTheImage() - CheckSystemEnvironment - returned False. Update not allowed due to System Environment.\n", mImageIdName)
|
||||
|
|
@ -1302,12 +1308,14 @@ SetTheImage (
|
|||
Status = GetFmpPayloadHeaderSize (FmpHeader, FmpPayloadSize, &FmpHeaderSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - GetFmpPayloadHeaderSize failed %r.\n", mImageIdName, Status));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER_SIZE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
AllHeaderSize = GetAllHeaderSize ((EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image, FmpHeaderSize + DependenciesSize);
|
||||
if (AllHeaderSize == 0) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): SetTheImage() - GetAllHeaderSize failed.\n", mImageIdName));
|
||||
LastAttemptStatus = LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_ALL_HEADER_SIZE;
|
||||
Status = EFI_ABORTED;
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
@ -1372,6 +1380,7 @@ cleanup:
|
|||
mProgressFunc = NULL;
|
||||
|
||||
if (Private != NULL) {
|
||||
DEBUG ((DEBUG_INFO, "FmpDxe(%s): SetTheImage() LastAttemptStatus: %u.\n", mImageIdName, LastAttemptStatus));
|
||||
SetLastAttemptStatusInVariable (Private, LastAttemptStatus);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue