From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.92.21.107]) by mx.groups.io with SMTP id smtpd.web12.3998.1598315436315562269 for ; Mon, 24 Aug 2020 17:30:36 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=VgLO9Bvm; spf=pass (domain: outlook.com, ip: 40.92.21.107, mailfrom: michael.kubacki@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fRf/++71kzhE+oSNtASDeiknuKumluwNCgR9hTmSV0WXaVY8AdQeIeTkXAhNBfkkeIh700doS+VUNN0fbnthoZUcFLtgriSPa/phf0oV5sfGouJUC29e3GCamCdze0SaXdiAA3a82WnhdQOS1q4paz+khwkNCpJ3IfhePa96qG8KRv04cPIoUUL1NLz11v3DH8OZmw3hdjCdlSIfae7IJmm8kY2ppk1cDMe6m4XBP6mlWo4N9RKqNVk2CCpOY7IuSqXiBl7MDCfpbI8cavqEFmFvcXrsrSU+lZA3J5gb432vQOjBPH14RjfnKQc0Y4yp7egYMe8HQXXTCb35nFjYTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qxkCmV8dPge8C+uGdHCz1PLr5lhTN0NVQaigpoi4Y0A=; b=R4bYfHNmjyAu3piedMWDn4dFmXd8fraWXUg+sj9YRyDSnaXduLxkYjk0y20uvVX3adrnB8RnkcBcQ4Dz8T/UYcKB3ArCBqcL2cGVW7Qm26l2FJLuwFrrjZRPib4JYyNQyzQZnqdAALoe+B79IwP9XI5A+dSBtyH/ZNeP25Y4tlDm/tciFK+XLYWQO0XW4x3xa2b/B+b9CJ5+RrBfaKLhL4jQc/VuCF7kAW0ZmWVeEvtJ2IjhcTU74s8ciyoIeKtVQ4zzk6U2Hu3f2tMmM0c3WVIojxnbiN7HZF4+b52fy0qGD0iGICpCx9sev9nm5r6xy6ra7VzgCEcd5hPRDrtm8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qxkCmV8dPge8C+uGdHCz1PLr5lhTN0NVQaigpoi4Y0A=; b=VgLO9BvmVJ2GMbyncJYCmOC+xTwhNjoZZz9Biv0WVZiHHEbJFP1Y8E3eUbGkWBkNWyfSuq1JvxYVQZHaiGC+phmYR1YAHU41ZQbdbRvbpjbXVHPxltQaOiSFelmK4K9cVEQYzv6HalHa1/8OpmW6Lsi9VskmUeKhQW70n6jXJCNqWPtHKwEz43RDg7wDS+jpVbPOUfTs0/zj4QlPo2IeKRnWk6Pe+HifWmw7Y+bxeUH/pkoVASQ8V+frSVAWpHTkDzUTr7t/XrNRxktiQt9sxto1kZxR7knBwr/jnU2pMxnq3UaQQeLTR+EXUgajumOCaupz3RmWtZ/VfbFXBt6RfA== Received: from BN8NAM12FT046.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc66::49) by BN8NAM12HT075.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc66::365) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3305.16; Tue, 25 Aug 2020 00:30:34 +0000 Received: from MWHPR07MB3440.namprd07.prod.outlook.com (2a01:111:e400:fc66::4e) by BN8NAM12FT046.mail.protection.outlook.com (2a01:111:e400:fc66::404) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3305.16 via Frontend Transport; Tue, 25 Aug 2020 00:30:34 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:5145CC7D8961FF01995445DD2ADF84331D5032DDA5C41ACA64AA10229AF38122;UpperCasedChecksum:04462ED21947CDF10606A5DA2F0BF18E40490A4559AB84BFA8C5FAE1FA696181;SizeAsReceived:9665;Count:49 Received: from MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::eda9:ccc8:2ef:2471]) by MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::eda9:ccc8:2ef:2471%7]) with mapi id 15.20.3305.026; Tue, 25 Aug 2020 00:30:34 +0000 Subject: Re: [edk2-devel] [PATCH v2 2/6] FmpDevicePkg: Add LastAttemptStatus.h To: "Desimone, Nathaniel L" , "devel@edk2.groups.io" CC: "Gao, Liming" , "Kinney, Michael D" , "Jiang, Guomin" , "Xu, Wei6" References: <20200810202753.1318-1-michael.kubacki@outlook.com> From: "Michael Kubacki" Message-ID: Date: Mon, 24 Aug 2020 17:30:33 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 In-Reply-To: X-ClientProxiedBy: MWHPR22CA0022.namprd22.prod.outlook.com (2603:10b6:300:ef::32) To MWHPR07MB3440.namprd07.prod.outlook.com (2603:10b6:301:69::28) Return-Path: michael.kubacki@outlook.com X-Microsoft-Original-Message-ID: <957bfe53-d369-2f06-441f-c5c1bb74aeb2@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from 255.255.255.255 (255.255.255.255) by MWHPR22CA0022.namprd22.prod.outlook.com (2603:10b6:300:ef::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3305.24 via Frontend Transport; Tue, 25 Aug 2020 00:30:33 +0000 X-Microsoft-Original-Message-ID: <957bfe53-d369-2f06-441f-c5c1bb74aeb2@outlook.com> X-TMN: [atpdlXsgdUeFGdsXKtJWb+PLETKpLuPwZVy5U4gJ+IoSKYtFIhhXl2TyDpEVbjSf] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 49 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: f04ebb3a-c1b8-42e2-c932-08d8488e148e X-MS-TrafficTypeDiagnostic: BN8NAM12HT075: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ctkfSkSsNFlXAPgPhKYJG5aEQ5wlxEEHAZ5yu85hSYomEKIVtefcREgMqxSJOQjJBLuubJxqpCgqlNi7oAVVHtdCpEwB/BaZz4QUXfMLijfA7HgdIAkyv52hvKfBEuo/uCjaKOBo1T9/TQNEL6+NU3PBNMHxq0E3ZJgytvvl/et2RPT7c7ehp+EglUVqdxWysadCgiyf8Vacg0vw2+S2ICdJpBQqXzyOiKyP62AdK4epCLs6ioyX1xQ/BynJ+3q4 X-MS-Exchange-AntiSpam-MessageData: zm5IdpEwhV+MpomtZIYP4eJEQefz7h3qg43FNGLWgxO1n5uuZqcIqyu5XJkL71C8H1FNI3aGJI85Fa/WIGbnH17OKu3y0GSAzVExA2wnWNyjXw3D9vz3egd7w5UxPe382908m+xb67Bi1dSIlaJytQOqrVpCvE3QdukHymf6MY3JsTvE3/Mi4JQcZyHcKWyOSpz/tAJXAu766/+xhz+POg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f04ebb3a-c1b8-42e2-c932-08d8488e148e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2020 00:30:34.3401 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: BN8NAM12FT046.eop-nam12.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8NAM12HT075 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable Can you provide an example of how you expect the namespace=20 identifier/error code token to be used? Thanks, Michael On 8/24/2020 10:22 AM, Desimone, Nathaniel L wrote: > Ah interesting. So you are more concerned about the namespace that the e= rror code comes from as opposed to the actual meaning of the error code its= elf. >=20 > That brings another piece of feedback to mind, generally in UEFI namespa= ces are established using GUIDs... would it be more appropriate to decompos= e this into a GUID namespace identifier plus an error code integer token? T= hat would eliminate the need for any knowledge of the integer values of the= error codes outside of the producing module and seems to follow the "Singl= e Responsibility Principle" (https://en.wikipedia.org/wiki/Single-responsib= ility_principle) more closely. >=20 > Thanks, > Nate >=20 > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Michael K= ubacki > Sent: Friday, August 21, 2020 2:24 PM > To: Desimone, Nathaniel L ; devel@edk2.g= roups.io > Cc: Gao, Liming ; Kinney, Michael D ; Jiang, Guomin ; Xu, Wei6 > Subject: Re: [edk2-devel] [PATCH v2 2/6] FmpDevicePkg: Add LastAttemptSt= atus.h >=20 > Hi Nate, >=20 > Yes, these are individual codes used within FmpDevicePkg. The specific e= rror codes in the enum in v2 are not intended to be used outside FmpDeviceP= kg. I refactored this in v3. >=20 > What is desired is a way to consistently map error codes to specific err= or sources during the update flow. The codes might come from common FmpDevi= cePkg source code (like FmpDxe) or platform authored source code (like FmpD= eviceLib). The exact codes used in FmpDevicePkg implementation do not neces= sarily need to be known to the library (it doesn't receive those as input) = and the library is free to define codes for its own library instance implem= entation to use as output. For example, there might be cases where the FmpD= xe driver and a FmpDeviceLib instance both define a similar error code (e.g= . memory allocation failed) but the specific value leads to a particular er= ror condition in either component. >=20 > At the moment, FmpDevicePkg implementation and FmpDeviceLib instances ar= e the two high-level pieces involved in producing error codes so within the= overall 0x1000 - 0x3FFF range available, they're each be assigned an overa= ll range in the public header of length 0x800 (in v4) leaving 0x2000 for fu= ture expansion. In V3, this led to the ranges being defined in a public hea= der but the specific error codes in the enum being defined in a private hea= der. >=20 > Thanks, > Michael >=20 > On 8/20/2020 10:33 PM, Desimone, Nathaniel L wrote: >> Hi Michael, >> >> I guess I might not understand the exact use cases for the enum. It see= ms like the meaning of the error codes you only want to be known within Fmp= DevicePkg, but it appears to me that the error code values could traverse t= o drivers outside this package, is that correct? >> >> Thanks, >> Nate >> >> -----Original Message----- >> From: devel@edk2.groups.io On Behalf Of Michael >> Kubacki >> Sent: Tuesday, August 11, 2020 11:58 AM >> To: Desimone, Nathaniel L ; >> devel@edk2.groups.io >> Cc: Gao, Liming ; Kinney, Michael D >> ; Jiang, Guomin ; >> Xu, Wei6 >> Subject: Re: [edk2-devel] [PATCH v2 2/6] FmpDevicePkg: Add >> LastAttemptStatus.h >> >> I realized there is room for misinterpretation of the macros LAST_ATTEM= PT_STATUS_DRIVER_ERROR_COUNT and LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR_COUNT= based on name. >> >> If there's no further feedback on the topic, I'll change them to LAST_A= TTEMPT_STATUS_DRIVER_ERROR_RANGE_LENGTH and LAST_ATTEMPT_STATUS_DEPENDENCY_= ERROR_RANGE_LENGTH. >> >> Thanks, >> Michael >> >> On 8/11/2020 10:46 AM, Michael Kubacki wrote: >>> #1: In v3, I'm going to split it such that the defines are in the >>> public header and the enum specifying the internal driver and >>> dependency ranges are in a private header to FmpDevicePkg. >>> >>> Here's the current set of v3 changes to agree upon before sending a se= ries: >>> 1. Move the defines for the ranges to a public header 2. Move the >>> enum to a private instance file 3. Rename >>> LAST_ATTEMPT_STATUS_LIBRARY_ERROR_MIN_ERROR_CODE to >>> LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_ERROR_MIN_ERROR_CODE >>> 4. Include a comment to explicitly state new codes within a given >>> range must be added at the end of the range >>> >>> Please let me know if there's any further feedback. >>> >>> Thanks, >>> Michael >>> >>> On 8/10/2020 5:31 PM, Desimone, Nathaniel L wrote: >>>> My feedback: >>>> >>>> #1: Why is LastAttemptStatus.h in PrivateInclude? Seems like >>>> something you would want to have as a public header. >>>> >>>> #2: If someone inserts a new enum value in the middle of >>>> LAST_ATTEMPT_STATUS_EXPANDED_ERROR_LIST it will make it difficult to >>>> decode error codes in the future. Either put a comment that new >>>> error code should go on the bottom. Or add some space between each >>>> entry using something like this: >>>> >>>> enum LAST_ATTEMPT_STATUS_EXPANDED_ERROR_LIST >>>> { >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN, >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROGRESS_CALLBACK_ERR= OR =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 10, >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_POWER_API =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 20, >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_THERMAL_API= =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 30, >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_THERMAL =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 40, >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_ENV_API =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 50, >>>> =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_SYSTEM_ENV =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 60, >>>> >>>> Then you can insert something in the middle by adding +5. >>>> >>>> Thanks, >>>> Nate >>>> >>>> =EF=BB=BFOn 8/10/20, 1:28 PM, "devel@edk2.groups.io on behalf of Mich= ael >>>> Kubacki" >>> michael.kubacki@outlook.com> wrote: >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0 From: Michael Kubacki >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Introduces a header file to contain Last A= ttempt Status codes >>>> that >>>> =C2=A0=C2=A0=C2=A0=C2=A0 define granular FmpDevicePkg usage of the = UEFI Specification >>>> =C2=A0=C2=A0=C2=A0=C2=A0 defined vendor range. The vendor range is = described in UEFI >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Specification 2.8A section 23.4. >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0 With this change, FmpDevicePkg currently d= efines three >>>> subranges of >>>> =C2=A0=C2=A0=C2=A0=C2=A0 the Last Attempt Status vendor range: >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1. Driver - Codes returned fro= m operations performed by the >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FmpDxe drive= r. >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2. Dependency - Codes returned= from FMP dependency related >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 functionalit= y (e.g. FmpDependencyLib). >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3. Library - Codes returned fr= om FmpDeviceLib instances. >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Liming Gao >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Michael D Kinney >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Guomin Jiang >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Wei6 Xu >>>> =C2=A0=C2=A0=C2=A0=C2=A0 Signed-off-by: Michael Kubacki >>>> =C2=A0=C2=A0=C2=A0=C2=A0 --- >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FmpDevicePkg/PrivateInclude/LastAtte= mptStatus.h | 81 >>>> ++++++++++++++++++++ >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 file changed, 81 insertions(+) >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0 diff --git a/FmpDevicePkg/PrivateInclude/L= astAttemptStatus.h >>>> b/FmpDevicePkg/PrivateInclude/LastAttemptStatus.h >>>> =C2=A0=C2=A0=C2=A0=C2=A0 new file mode 100644 >>>> =C2=A0=C2=A0=C2=A0=C2=A0 index 000000000000..01e96b23edad >>>> =C2=A0=C2=A0=C2=A0=C2=A0 --- /dev/null >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +++ b/FmpDevicePkg/PrivateInclude/LastAtte= mptStatus.h >>>> =C2=A0=C2=A0=C2=A0=C2=A0 @@ -0,0 +1,81 @@ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +/** @file >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 Defines last attempt status codes = used in FmpDevicePkg. >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 Copyright (c) Microsoft Corporatio= n.
>>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 SPDX-License-Identifier: BSD-2-Cla= use-Patent >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +**/ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#ifndef __FMP_LAST_ATTEMPT_STATUS_H__ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#define __FMP_LAST_ATTEMPT_STATUS_H__ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// Size of the error code range for FMP d= river-specific >>>> errors >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DRIVER_ERROR_= COUNT >>>> 0x80 >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// Size of the error code range for FMP d= ependency related >>>> errors >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DEPENDENCY_ER= ROR_COUNT >>>> 0x20 >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DRIVER_MAX_ER= ROR_CODE_VALUE >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + \ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DRIVER_ERROR_COUNT - 1 >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DEPENDENCY_MA= X_ERROR_CODE_VALUE >>>> LAST_ATTEMPT_STATUS_DRIVER_MAX_ERROR_CODE_VALUE + \ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR_COUNT >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_LIBRARY_MAX_E= RROR_CODE_VALUE >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MAX - 1 >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// Last attempt status codes defined for = additional >>>> granularity in the FMP stack. >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// These codes are defined within the hig= her-level UEFI >>>> specification defined UNSUCCESSFUL_VENDOR_RANGE. >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// The following last attempt status code= ranges are defined >>>> for the following corresponding component: >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +//=C2=A0=C2=A0 * LAST_ATTEMPT_STATUS_DRIV= ER - FMP driver >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +//=C2=A0=C2=A0 * LAST_ATTEMPT_STATUS_DEPE= NDENCY - FMP dependency >>>> functionality >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +//=C2=A0=C2=A0 * LAST_ATTEMPT_STATUS_LIBR= ARY - FMP device library >>>> instances >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +enum LAST_ATTEMPT_STATUS_EXPANDED_ERROR_L= IST >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +{ >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 =3D >>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN, >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_P= ROGRESS_CALLBACK_ERROR >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_C= HECK_POWER_API >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_C= HECK_SYS_THERMAL_API >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_T= HERMAL >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_C= HECK_SYS_ENV_API >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_S= YSTEM_ENV >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_G= ET_FMP_HEADER_SIZE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_G= ET_ALL_HEADER_SIZE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_G= ET_FMP_HEADER_VERSION >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= MAGE_NOT_PROVIDED >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= MAGE_NOT_UPDATABLE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= NVALID_CERTIFICATE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= NVALID_IMAGE_INDEX >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= NVALID_KEY_LENGTH >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= NVALID_KEY_LENGTH_VALUE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_V= ERSION_TOO_LOW >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_D= EVICE_LOCKED >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_I= MAGE_AUTH_FAILURE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_P= ROTOCOL_ARG_MISSING >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DRIVER_ERROR_MAX_ERROR_CODE=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 =3D >>>> LAST_ATTEMPT_STATUS_DRIVER_MAX_ERROR_CODE_VALUE, >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_GET_DEPEX_FAILURE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_NO_END_OPCODE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_UNKNOWN_OPCODE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR_MEMORY_ALLOCATION_FAILED >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_GUID_BEYOND_DEPEX >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_VERSION_BEYOND_DEPEX >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR_VERSION_STR_BEYOND_DEPEX >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_FMP_NOT_FOUND >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_PUSH_FAILURE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDENCY_ERR= OR_POP_FAILURE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR_MAX_ERROR_CODE=C2=A0=C2=A0=C2=A0= = =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D >>>> LAST_ATTEMPT_STATUS_DEPENDENCY_MAX_ERROR_CODE_VALUE, >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_LIBRARY_ERROR_= MIN_ERROR_CODE >>>> , >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> LAST_ATTEMPT_STATUS_LIBRARY_ERROR_MAX_ERROR_CODE=C2=A0=C2=A0=C2=A0=C2= = =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D >>>> LAST_ATTEMPT_STATUS_LIBRARY_MAX_ERROR_CODE_VALUE >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +}; >>>> =C2=A0=C2=A0=C2=A0=C2=A0 + >>>> =C2=A0=C2=A0=C2=A0=C2=A0 +#endif >>>> =C2=A0=C2=A0=C2=A0=C2=A0 -- >>>> =C2=A0=C2=A0=C2=A0=C2=A0 2.28.0.windows.1 >>>> >>>> >>>> >>>> >>>> >> >> >> >=20 >=20 >=20