diff options
author | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-12-05 09:58:33 +0000 |
---|---|---|
committer | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-12-05 09:58:33 +0000 |
commit | 6ee65722c769660e29c9ec524c79a6d7f9825d2b (patch) | |
tree | d44b31a6e07f63a8303d805465ddd14c6eeb23be | |
parent | 95be2c94e1ba8b85ab1db50351a9e4f379ab0110 (diff) | |
download | edk2-platforms-6ee65722c769660e29c9ec524c79a6d7f9825d2b.tar.xz |
Update CapsuleDriver to use capsule library.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4365 6f19259b-4bc3-4df7-8a09-765794883524
4 files changed, 26 insertions, 50 deletions
diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index 514f16f50b..bda1f8bfa0 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -70,6 +70,7 @@ UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+ CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
[LibraryClasses.IA32]
IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
diff --git a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf index a13b461fce..0a9662bf7a 100644 --- a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf +++ b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf @@ -41,13 +41,11 @@ [LibraryClasses]
UefiBootServicesTableLib
- MemoryAllocationLib
- BaseMemoryLib
PcdLib
DebugLib
UefiRuntimeLib
- DxeServicesTableLib
UefiDriverEntryPoint
+ CapsuleLib
[Guids]
gEfiCapsuleVendorGuid # SOMETIMES_CONSUMED
diff --git a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.c b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.c index e74a59151a..2814c9d774 100644 --- a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.c +++ b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.c @@ -47,22 +47,18 @@ Returns: not set, the capsule has been successfully processed by the firmware.
If it set, the ScattlerGatherList is successfully to be set.
EFI_INVALID_PARAMETER CapsuleCount is less than 1,CapsuleGuid is not supported.
- EFI_DEVICE_ERROR Failed to SetVariable or AllocatePool or ProcessFirmwareVolume.
+ EFI_DEVICE_ERROR Failed to SetVariable or ProcessFirmwareVolume.
--*/
{
- UINTN CapsuleSize;
UINTN ArrayNumber;
- VOID *BufferPtr;
EFI_STATUS Status;
- EFI_HANDLE FvHandle;
EFI_CAPSULE_HEADER *CapsuleHeader;
if (CapsuleCount < 1) {
return EFI_INVALID_PARAMETER;
}
- BufferPtr = NULL;
CapsuleHeader = NULL;
for (ArrayNumber = 0; ArrayNumber < CapsuleCount; ArrayNumber++) {
@@ -75,25 +71,22 @@ Returns: return EFI_INVALID_PARAMETER;
}
//
- // To remove this check. Capsule update supports non reset image.
- //
- // if ((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) == 0) {
- // return EFI_UNSUPPORTED;
- // }
+ // Check Capsule image without populate flag by firmware support capsule function
+ //
+ if (((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) == 0) &&
+ (SupportCapsuleImage (CapsuleHeader) != EFI_SUCCESS)) {
+ return EFI_UNSUPPORTED;
+ }
}
//
- // Check capsule guid is suppored by this platform. To do
- //
-
- //
- //Assume that capsules have the same flags on reseting or not.
+ // Assume that capsules have the same flags on reseting or not.
//
CapsuleHeader = CapsuleHeaderArray[0];
if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) {
//
- //Check if the platform supports update capsule across a system reset
+ // Check if the platform supports update capsule across a system reset
//
if (!FeaturePcdGet(PcdSupportUpdateCapsuleRest)) {
return EFI_UNSUPPORTED;
@@ -120,13 +113,16 @@ Returns: if (Status != EFI_SUCCESS) {
return Status;
}
+ //
+ // Successfully set the capsule image address into variable.
+ //
+ return EFI_SUCCESS;
}
- return EFI_SUCCESS;
}
//
// The rest occurs in the condition of non-reset mode
- // Current Runtime mode doesn't support the non-reset capsule image.
+ // Now Runtime mode doesn't support the non-reset capsule image.
//
if (EfiAtRuntime ()) {
return EFI_INVALID_PARAMETER;
@@ -134,29 +130,13 @@ Returns: //
// Here should be in the boot-time for non-reset capsule image
- // Default process to Update Capsule image into Flash for any guid image.
+ // Default process to Update Capsule image into Flash.
//
for (ArrayNumber = 0; ArrayNumber < CapsuleCount ; ArrayNumber++) {
- CapsuleHeader = CapsuleHeaderArray[ArrayNumber];
- CapsuleSize = CapsuleHeader->CapsuleImageSize - CapsuleHeader->HeaderSize;
-
- BufferPtr = AllocatePool (CapsuleSize);
- if (BufferPtr == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (BufferPtr, (UINT8*)CapsuleHeader+ CapsuleHeader->HeaderSize, CapsuleSize);
-
- //
- //Call DXE service ProcessFirmwareVolume to process immediatelly
- //
- Status = gDS->ProcessFirmwareVolume (BufferPtr, CapsuleSize, &FvHandle);
- if (Status != EFI_SUCCESS) {
- FreePool (BufferPtr);
+ Status = ProcessCapsuleImage (CapsuleHeaderArray[ArrayNumber]);
+ if (EFI_ERROR (Status)) {
return Status;
}
- gDS->Dispatch ();
- FreePool (BufferPtr);
}
return EFI_SUCCESS;
@@ -218,11 +198,12 @@ Returns: return EFI_INVALID_PARAMETER;
}
//
- // To remove this check. Capsule update supports non reset image.
- //
- // if ((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) == 0) {
- // return EFI_UNSUPPORTED;
- // }
+ // Check Capsule image without populate flag by firmware support capsule function
+ //
+ if (((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) == 0) &&
+ (SupportCapsuleImage (CapsuleHeader) != EFI_SUCCESS)) {
+ return EFI_UNSUPPORTED;
+ }
}
//
diff --git a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.h b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.h index 5d73810f3d..91fdbb3070 100644 --- a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.h +++ b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.h @@ -29,15 +29,11 @@ Abstract: #include <Guid/CapsuleVendor.h>
#include <Library/UefiDriverEntryPoint.h>
-#include <Library/DxeServicesTableLib.h>
#include <Library/UefiRuntimeLib.h>
#include <Library/DebugLib.h>
#include <Library/PcdLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
-
-extern EFI_GUID gEfiCapsuleGuid;
+#include <Library/CapsuleLib.h>
EFI_STATUS
EFIAPI
|