)\r
{\r
Print(L"CapsuleApp: usage\n");\r
- Print(L" CapsuleApp <Capsule...>\n");\r
+ Print(L" CapsuleApp <Capsule...> [-NR]\n");\r
Print(L" CapsuleApp -S\n");\r
Print(L" CapsuleApp -C\n");\r
Print(L" CapsuleApp -P\n");\r
Print(L" CapsuleApp -D <Capsule>\n");\r
Print(L" CapsuleApp -P GET <ImageTypeId> <Index> -O <FileName>\n");\r
Print(L"Parameter:\n");\r
+ Print(L" -NR: No reset will be triggered for the capsule\n");\r
+ Print(L" with CAPSULE_FLAGS_PERSIST_ACROSS_RESET and without CAPSULE_FLAGS_INITIATE_RESET.\n");\r
Print(L" -S: Dump capsule report variable (EFI_CAPSULE_REPORT_GUID),\n");\r
Print(L" which is defined in UEFI specification.\n");\r
Print(L" -C: Clear capsule report variable (EFI_CAPSULE_RPORT_GUID),\n");\r
UINT64 MaxCapsuleSize;\r
EFI_RESET_TYPE ResetType;\r
BOOLEAN NeedReset;\r
+ BOOLEAN NoReset;\r
CHAR16 *CapsuleName;\r
UINTN CapsuleNum;\r
UINTN Index;\r
return EFI_SUCCESS;\r
}\r
CapsuleFirstIndex = 1;\r
- CapsuleLastIndex = Argc - 1;\r
+ NoReset = FALSE;\r
+ if ((Argc > 1) && (StrCmp(Argv[Argc - 1], L"-NR") == 0)) {\r
+ NoReset = TRUE;\r
+ CapsuleLastIndex = Argc - 2;\r
+ } else {\r
+ CapsuleLastIndex = Argc - 1;\r
+ }\r
CapsuleNum = CapsuleLastIndex - CapsuleFirstIndex + 1;\r
\r
if (CapsuleFirstIndex > CapsuleLastIndex) {\r
goto Done;\r
}\r
//\r
- // For capsule who has reset flag, after calling UpdateCapsule service,triger a\r
- // system reset to process capsule persist across a system reset.\r
+ // For capsule with CAPSULE_FLAGS_PERSIST_ACROSS_RESET + CAPSULE_FLAGS_INITIATE_RESET,\r
+ // a system reset should have been triggered by gRT->UpdateCapsule() calling above.\r
+ //\r
+ // For capsule with CAPSULE_FLAGS_PERSIST_ACROSS_RESET and without CAPSULE_FLAGS_INITIATE_RESET,\r
+ // check if -NR (no-reset) has been specified or not.\r
//\r
- gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL);\r
+ if (!NoReset) {\r
+ //\r
+ // For capsule who has reset flag and no -NR (no-reset) has been specified, after calling UpdateCapsule service,\r
+ // trigger a system reset to process capsule persist across a system reset.\r
+ //\r
+ gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL);\r
+ }\r
} else {\r
//\r
// For capsule who has no reset flag, only call UpdateCapsule Service without a\r