# This PCD is a sample to explain FixedAtBuild UINT32 PCD usage.\r
gEfiMdeModulePkgTokenSpaceGuid.PcdHelloWorldPrintTimes|1|UINT32|0x40000005\r
\r
- ## Indicate the max size of the populated capsule image that the platform can support.\r
+ ## Indicate the max size of the capsule image with reset flag that the platform can support.\r
# The default max size is 100MB (0x6400000) for more than one large capsule images.\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule|0x6400000|UINT32|0x0001001e\r
\r
- ## Indicate the max size of the non-populated capsule image that the platform can support.\r
- # The default max size is 10MB (0xa00000) for the casule image without populated flag setting.\r
+ ## Indicate the max size of the capsule image without reset flag that the platform can support.\r
+ # The default max size is 10MB (0xa00000) for the casule image without reset flag setting.\r
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0xa00000|UINT32|0x0001001f\r
\r
## Null-terminated Unicode string of the firmware vendor name that is default name filled into the EFI System Table\r
{\r
UINTN ArrayNumber;\r
EFI_CAPSULE_HEADER *CapsuleHeader;\r
+ BOOLEAN NeedReset;\r
\r
//\r
// Capsule Count can't be less than one.\r
}\r
\r
CapsuleHeader = NULL;\r
+ NeedReset = FALSE;\r
\r
for (ArrayNumber = 0; ArrayNumber < CapsuleCount; ArrayNumber++) {\r
CapsuleHeader = CapsuleHeaderArray[ArrayNumber];\r
}\r
\r
//\r
- // Assume that capsules have the same flags on reseting or not.\r
+ // Find out whether there is any capsule defined to persist across system reset. \r
//\r
- CapsuleHeader = CapsuleHeaderArray[0];\r
- if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) {\r
+ for (ArrayNumber = 0; ArrayNumber < CapsuleCount ; ArrayNumber++) {\r
+ CapsuleHeader = CapsuleHeaderArray[ArrayNumber];\r
+ if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) {\r
+ NeedReset = TRUE;\r
+ break;\r
+ }\r
+ }\r
+ \r
+ if (NeedReset) {\r
//\r
//Check if the platform supports update capsule across a system reset\r
//\r
if (!FeaturePcdGet(PcdSupportUpdateCapsuleReset)) {\r
return EFI_UNSUPPORTED;\r
}\r
- *ResetType = EfiResetWarm; \r
+ *ResetType = EfiResetWarm;\r
+ *MaxiumCapsuleSize = FixedPcdGet32(PcdMaxSizePopulateCapsule);\r
} else {\r
//\r
// For non-reset capsule image.\r
//\r
*ResetType = EfiResetCold;\r
- }\r
- \r
- //\r
- // The support max capsule image size\r
- //\r
- if ((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) != 0) {\r
- *MaxiumCapsuleSize = PcdGet32(PcdMaxSizePopulateCapsule);\r
- } else {\r
- *MaxiumCapsuleSize = PcdGet32(PcdMaxSizeNonPopulateCapsule);\r
+ *MaxiumCapsuleSize = FixedPcdGet32(PcdMaxSizeNonPopulateCapsule);\r
}\r
\r
return EFI_SUCCESS;\r