I feel a little confused on "but no CAPSULE_FLAGS_INITIATE_RESET".
> + Print(L" -NR: No reset will be trigger for the capsule with flag\n"); > + Print(L" CAPSULE_FLAGS_PERSIST_ACROSS_RESET but no > CAPSULE_FLAGS_INITIATE_RESET.\n"); Do you mean "No impact to CAPSULE_FLAGS_INITIATE_RESET", because this flag is consumed by Capsule driver, but not this APP? If so, we can update the help info to make it clear? > + Print(L" -NR: No reset will be trigger for the capsule with > CAPSULE_FLAGS_PERSIST_ACROSS_RESET.\n"); > + Print(L" -NR has no impact for the capsule with > CAPSULE_FLAGS_INITIATE_RESET.\n"); > -----Original Message----- > From: Zeng, Star > Sent: Monday, March 20, 2017 5:21 PM > To: edk2-devel@lists.01.org > Cc: Zeng, Star <star.z...@intel.com>; Yao, Jiewen <jiewen....@intel.com>; > Xiaofeng Wang <winggundu...@163.com> > Subject: [PATCH] MdeModulePkg CapsuleApp: Add -NR (no-reset) option > support > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=388 > > Add -NR (no-reset) option support, once the option is specified, > no reset will be trigger for the capsule with flag > CAPSULE_FLAGS_PERSIST_ACROSS_RESET and no > CAPSULE_FLAGS_INITIATE_RESET. > > Cc: Jiewen Yao <jiewen....@intel.com> > Cc: Xiaofeng Wang <winggundu...@163.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Star Zeng <star.z...@intel.com> > > Note: the related discussion was at > https://lists.01.org/pipermail/edk2-devel/2017-February/007513.html. > --- > MdeModulePkg/Application/CapsuleApp/CapsuleApp.c | 28 > +++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c > b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c > index 84ed4d738bc4..62bc12a88afe 100644 > --- a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c > +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c > @@ -670,7 +670,7 @@ PrintUsage ( > ) > { > Print(L"CapsuleApp: usage\n"); > - Print(L" CapsuleApp <Capsule...>\n"); > + Print(L" CapsuleApp <Capsule...> [-NR]\n"); > Print(L" CapsuleApp -S\n"); > Print(L" CapsuleApp -C\n"); > Print(L" CapsuleApp -P\n"); > @@ -680,6 +680,8 @@ PrintUsage ( > Print(L" CapsuleApp -D <Capsule>\n"); > Print(L" CapsuleApp -P GET <ImageTypeId> <Index> -O <FileName>\n"); > Print(L"Parameter:\n"); > + Print(L" -NR: No reset will be trigger for the capsule with flag\n"); > + Print(L" CAPSULE_FLAGS_PERSIST_ACROSS_RESET but no > CAPSULE_FLAGS_INITIATE_RESET.\n"); > Print(L" -S: Dump capsule report variable > (EFI_CAPSULE_REPORT_GUID),\n"); > Print(L" which is defined in UEFI specification.\n"); > Print(L" -C: Clear capsule report variable > (EFI_CAPSULE_RPORT_GUID),\n"); > @@ -721,6 +723,7 @@ UefiMain ( > UINT64 MaxCapsuleSize; > EFI_RESET_TYPE ResetType; > BOOLEAN NeedReset; > + BOOLEAN NoReset; > CHAR16 *CapsuleName; > UINTN CapsuleNum; > UINTN Index; > @@ -783,7 +786,13 @@ UefiMain ( > return EFI_SUCCESS; > } > CapsuleFirstIndex = 1; > - CapsuleLastIndex = Argc - 1; > + NoReset = FALSE; > + if ((Argc > 1) && (StrCmp(Argv[Argc - 1], L"-NR") == 0)) { > + NoReset = TRUE; > + CapsuleLastIndex = Argc - 2; > + } else { > + CapsuleLastIndex = Argc - 1; > + } > CapsuleNum = CapsuleLastIndex - CapsuleFirstIndex + 1; > > if (CapsuleFirstIndex > CapsuleLastIndex) { > @@ -855,10 +864,19 @@ UefiMain ( > goto Done; > } > // > - // For capsule who has reset flag, after calling UpdateCapsule > service,triger > a > - // system reset to process capsule persist across a system reset. > + // For capsule with flags CAPSULE_FLAGS_PERSIST_ACROSS_RESET + > CAPSULE_FLAGS_INITIATE_RESET, > + // a system reset should have been triggered by gRT->UpdateCapsule() > calling above. > + // > + // For capsule with flag CAPSULE_FLAGS_PERSIST_ACROSS_RESET but no > CAPSULE_FLAGS_INITIATE_RESET, > + // check if -NR (no-reset) has been specified or not. > // > - gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL); > + if (!NoReset) { > + // > + // For capsule who has reset flag and no -NR (no-reset) has been > specified, after calling UpdateCapsule service, > + // trigger a system reset to process capsule persist across a system > reset. > + // > + gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL); > + } > } else { > // > // For capsule who has no reset flag, only call UpdateCapsule Service > without a > -- > 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel