From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:400c:c0c::233; helo=mail-wr0-x233.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wr0-x233.google.com (mail-wr0-x233.google.com [IPv6:2a00:1450:400c:c0c::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0FF20212532FC for ; Wed, 13 Jun 2018 01:09:08 -0700 (PDT) Received: by mail-wr0-x233.google.com with SMTP id a12-v6so1711539wro.1 for ; Wed, 13 Jun 2018 01:09:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Stm2acX9qh4MQfaImdjYghbtDsBG3KO7q9Fu4ANawX0=; b=Ug+dL0yZ+b36ZFMBh/XexL6Ekfs0SCBJGU3757tFGqNr9OGL2qMK5erCRMZTOF5yBS WlkxfQOpmEsI7GITzHAuVCaxy+MK/Vh2Brs6nvMJOwJX/1343NKOa5vOy7RHuz0fISmr 56QrZnCMIVKj090TyknFa/mmICVxcmlpHvn8g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Stm2acX9qh4MQfaImdjYghbtDsBG3KO7q9Fu4ANawX0=; b=RRW55anbwSPQkxUM9l+JCJZdyYBPmPuAvS7nozETNlIBl3rktYnRqu+gKND3hec49A cyf0cAlc7L7a680FtrEz/n7rm1+BV6hFpywcOSSQX7EEd0qEG//oNV+W8dbyiJMbjmhj wlUeAGFTDfEo6y+TQm4Gv3CZghApdCj9ljZCsThQS7uz831NKpPRXP8gv97SpxZi3C25 Z+gCqz/Wb3Ce77jA71DQzfX/7SFOyMZFMrcp2LlZsV0/+cuOJomW6ktxrQURV3M2yA5k K2hUP4p2JBTHz2etMtCIho9T3+aonOBq6A5swryoaITqX7h1C4vvEOhOs/oNHbjrOfcw rD0A== X-Gm-Message-State: APt69E2z+nhktGaZTcOpH99WNDuqUX0mWQR4lcVvtOao4fXt69Gs+O45 czS6P7QbFaJMw/rSIfd2B0jJVZDMLls= X-Google-Smtp-Source: ADUXVKJdOaF8fe383D1XE03+ccuxdr5iw1jjp2xw7N1K/9heIxgDa6j+PeUOHopVjweSMgyI4Iq1+w== X-Received: by 2002:adf:ea44:: with SMTP id j4-v6mr3327635wrn.224.1528877347174; Wed, 13 Jun 2018 01:09:07 -0700 (PDT) Received: from dogfood.home ([2a01:cb1d:112:6f00:6dfc:b76c:4240:35ff]) by smtp.gmail.com with ESMTPSA id v31-v6sm4974772wrc.80.2018.06.13.01.09.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Jun 2018 01:09:06 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org Cc: leif.lindholm@linaro.org, star.zeng@intel.com, jiewen.yao@intel.com, michael.d.kinney@intel.com, Ard Biesheuvel Date: Wed, 13 Jun 2018 10:08:59 +0200 Message-Id: <20180613080901.7156-3-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180613080901.7156-1-ard.biesheuvel@linaro.org> References: <20180613080901.7156-1-ard.biesheuvel@linaro.org> Subject: [PATCH v4 2/4] MdeModulePkg/DxeCapsuleLibFmp: pass progress callback only if it works X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jun 2018 08:09:09 -0000 If the first call to UpdateImageProgress() fails, there is no point in passing a pointer to it to Fmp->SetImage(), since it is highly unlikely to succeed on any subsequent calls. This permits the FMP implementation to fall back to an alternate means of providing feedback to the user, e.g., via the console. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c index f0226eafa576..ab41df0eb0a4 100644 --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c @@ -841,6 +841,7 @@ SetFmpImageData ( UINT8 *Image; VOID *VendorCode; CHAR16 *AbortReason; + EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS ProgressCallback; Status = gBS->HandleProtocol( Handle, @@ -892,7 +893,11 @@ SetFmpImageData ( // // Before calling SetImage(), reset the progress bar to 0% // - UpdateImageProgress (0); + ProgressCallback = UpdateImageProgress; + Status = UpdateImageProgress (0); + if (EFI_ERROR (Status)) { + ProgressCallback = NULL; + } Status = Fmp->SetImage( Fmp, @@ -900,13 +905,15 @@ SetFmpImageData ( Image, // Image ImageHeader->UpdateImageSize, // ImageSize VendorCode, // VendorCode - UpdateImageProgress, // Progress + ProgressCallback, // Progress &AbortReason // AbortReason ); // // Set the progress bar to 100% after returning from SetImage() // - UpdateImageProgress (100); + if (ProgressCallback != NULL) { + UpdateImageProgress (100); + } DEBUG((DEBUG_INFO, "Fmp->SetImage - %r\n", Status)); if (AbortReason != NULL) { -- 2.17.1