From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.92.4.99]) by mx.groups.io with SMTP id smtpd.web10.38.1598636773163977127 for ; Fri, 28 Aug 2020 10:46:13 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=eWeil3xH; spf=pass (domain: outlook.com, ip: 40.92.4.99, mailfrom: michael.kubacki@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jhcZR4bZeYPYTpSw0QQXFqMHBstGe0euY7Che7znRWT+Csy3j7wW0NJbyq39IUFckRMQArFJCbs7dqKqAUsvl7Sct/rrbugO2NwQCPqByK8ttpi3yFlwj7dMUAuuSpGGFnL+cCXpmaSzvtMw8ZrvwzekLLe41pIfcnyKufw8DzGRNdkJ+rsVi2FunhpBLnb53NWFMTtYdIzJicJBCZdQoXES2hMdlnXN1gAzcVRAAhVdvoE4jJjbWLI4uoGKgyC8X6PkOvUGa4p5gplyiVeRZ0KcyzOSMrN3f9QHozcgPfGS7nMArFad3YoKOCl7RrMv94q/yL6t2zDntLv8sg0TsQ== 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=aqc9ME13hohLbb5grGe4q3yEa1LKobmiId56YAfGKH8=; b=MRe7sJZfqOjUI6E7RPdZruuzgFdw52u48sP5yZ4K3gIkZuVMpEW7Iy0OL3lloCoRInWip/gmhVJzB2CaRWYfoetHEzgJrERzBz1tIRPm76v1mhefxbiO+aJsB1EVs0YSBnNOFIh/qIpQpsWqg6B1T90hhDjq17c0Wq/96cQirc24U/1+bpZoCQCrdkNoL+aGtydUi42wQDBZ8uR7u+7gOJxM1YBTSkEoldv6ytm7708grBJSbdZeFxsB8DWX5abeWY89tJRtzQIQePnAH0LUA6Sr9YjDZHG6ILCDiU6TRvEgKkFz4ZBcnuLAaNUX5qdH/n3thsni+gsvV2/qaR8mBA== 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=aqc9ME13hohLbb5grGe4q3yEa1LKobmiId56YAfGKH8=; b=eWeil3xHJdBoEF66BrilNw7EWZrF6CpkVGbkkheyl30PFj2gRUGkZSs79QCLHtHUoDzIHyvHUdXYM0X0AIHa6Ws5PtpEY3ubrpJR1Izd2dyQmMYmforbLUAwOVgY/NCtpXfvMF/t4EH4gNz19k7vBlN4XDlUMpVdLAoR+MIchySOt7Th3EyYnMc3amkF5dJpd3Pmo2jfIXuSnuVg6bEdF3e3CouT5foys/1IvhKjDVENxRLZtlRabM+MaN6CyGR+KuDL5MLSreAqWW7Uf78VIAn4A5Whf/rvAWFRru4YcgRrAwEJvMgmCy87jqcC5I5Yu/yXO6Uvdn85QsBuVnHDng== Received: from BL2NAM02FT060.eop-nam02.prod.protection.outlook.com (10.152.76.56) by BL2NAM02HT062.eop-nam02.prod.protection.outlook.com (10.152.77.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.19; Fri, 28 Aug 2020 17:46:09 +0000 Received: from MWHPR07MB3440.namprd07.prod.outlook.com (2a01:111:e400:7e46::48) by BL2NAM02FT060.mail.protection.outlook.com (2a01:111:e400:7e46::124) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.19 via Frontend Transport; Fri, 28 Aug 2020 17:46:09 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:D83000645B27F67B1E2D8045290C81CA1CD7B5C7C75CC06CC1EA41C16FFF9D0B;UpperCasedChecksum:995BCA6265B181CF7C8EBA9B9C1A000361AC4A4C8C5005FD2704126CC35C921E;SizeAsReceived:9687;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.031; Fri, 28 Aug 2020 17:46:09 +0000 Subject: Re: [edk2-devel] [PATCH v2 2/6] FmpDevicePkg: Add LastAttemptStatus.h From: "Michael Kubacki" 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> <957bfe53-d369-2f06-441f-c5c1bb74aeb2@outlook.com> Message-ID: Date: Fri, 28 Aug 2020 10:46:08 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 In-Reply-To: <957bfe53-d369-2f06-441f-c5c1bb74aeb2@outlook.com> X-ClientProxiedBy: MWHPR1201CA0020.namprd12.prod.outlook.com (2603:10b6:301:4a::30) To MWHPR07MB3440.namprd07.prod.outlook.com (2603:10b6:301:69::28) Return-Path: michael.kubacki@outlook.com X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from 255.255.255.255 (255.255.255.255) by MWHPR1201CA0020.namprd12.prod.outlook.com (2603:10b6:301:4a::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.19 via Frontend Transport; Fri, 28 Aug 2020 17:46:08 +0000 X-Microsoft-Original-Message-ID: X-TMN: [DFrhh3RBjR1sa0sC2Yx91PDQnP5JnA+fTJenLA6Jhi/aL5eO6WyRbAotuXw6/PCE] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 49 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: b491d836-bdf3-44de-3cf8-08d84b7a3eb8 X-MS-TrafficTypeDiagnostic: BL2NAM02HT062: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FQYPwNoBbdeOz3Oa9qA4U6sphZIXVuVSTthNV1APGzTpKYIoFlxhySx8g2E9L6IDsf0TeP5K4mDx55CSO/bIGQh3YhhoBOwtUWdjXxfe7iJftdFqFihqyC1K4gb0ftClaZ7pMQP74dOmtpfiVG4Hu9nAuPrZ8JHQFXe6RORcjlzb/Fs95+l7K1W+jhP4EIPz+LlsFPz7Lq8KG99xBAvQTWl5Ymkh1YmOqd1qbxyUA+xJxWjYU9K4pIa/Q+GpFQUt X-MS-Exchange-AntiSpam-MessageData: U8LNfB/R4RA+unxknSM/UfZRPUjSNzmhVlIslxTdlbiXqnBZN82tuzdeGLaP/GbOqDYQTdjl0GwkvhGOer+p6TO+ffG0+o79A4IHDuSVJ0laeABYrJgkQSU2uNPVW0mgXyJFxXM3K2Uii7z1rjv5seXdr79Zr5jNc9sv32wWm0o8htsGV+wJyiKOuB+jrTgzywwYfZnpuTTjlNGkbEnf+w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b491d836-bdf3-44de-3cf8-08d84b7a3eb8 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2020 17:46:09.7082 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: BL2NAM02FT060.eop-nam02.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: BL2NAM02HT062 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable Hi Nate, Bumping this mail in case you missed it. Thanks, Michael On 8/24/2020 5:30 PM, Michael Kubacki wrote: > Can you provide an example of how you expect the namespace=20 > identifier/error code token to be used? >=20 > Thanks, > Michael >=20 > On 8/24/2020 10:22 AM, Desimone, Nathaniel L wrote: >> Ah interesting. So you are more concerned about the namespace that the= =20 >> error code comes from as opposed to the actual meaning of the error=20 >> code itself. >> >> That brings another piece of feedback to mind, generally in UEFI=20 >> namespaces are established using GUIDs... would it be more appropriate= =20 >> to decompose this into a GUID namespace identifier plus an error code= =20 >> integer token? That would eliminate the need for any knowledge of the= =20 >> integer values of the error codes outside of the producing module and= =20 >> seems to follow the "Single Responsibility Principle"=20 >> (https://en.wikipedia.org/wiki/Single-responsibility_principle) more=20 >> closely. >> >> Thanks, >> Nate >> >> -----Original Message----- >> From: devel@edk2.groups.io On Behalf Of Michael= =20 >> Kubacki >> Sent: Friday, August 21, 2020 2:24 PM >> To: Desimone, Nathaniel L ;=20 >> devel@edk2.groups.io >> Cc: Gao, Liming ; Kinney, Michael D=20 >> ; Jiang, Guomin ;= =20 >> Xu, Wei6 >> Subject: Re: [edk2-devel] [PATCH v2 2/6] FmpDevicePkg: Add=20 >> LastAttemptStatus.h >> >> Hi Nate, >> >> Yes, these are individual codes used within FmpDevicePkg. The specific= =20 >> error codes in the enum in v2 are not intended to be used outside=20 >> FmpDevicePkg. I refactored this in v3. >> >> What is desired is a way to consistently map error codes to specific=20 >> error sources during the update flow. The codes might come from common= =20 >> FmpDevicePkg source code (like FmpDxe) or platform authored source=20 >> code (like FmpDeviceLib). The exact codes used in FmpDevicePkg=20 >> implementation do not necessarily need to be known to the library (it= =20 >> doesn't receive those as input) and the library is free to define=20 >> codes for its own library instance implementation to use as output.=20 >> For example, there might be cases where the FmpDxe driver and a=20 >> FmpDeviceLib instance both define a similar error code (e.g. memory=20 >> allocation failed) but the specific value leads to a particular error= =20 >> condition in either component. >> >> At the moment, FmpDevicePkg implementation and FmpDeviceLib instances= =20 >> are the two high-level pieces involved in producing error codes so=20 >> within the overall 0x1000 - 0x3FFF range available, they're each be=20 >> assigned an overall range in the public header of length 0x800 (in v4)= =20 >> leaving 0x2000 for future expansion. In V3, this led to the ranges=20 >> being defined in a public header but the specific error codes in the=20 >> enum being defined in a private header. >> >> Thanks, >> Michael >> >> 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=20 >>> seems like the meaning of the error codes you only want to be known=20 >>> within FmpDevicePkg, but it appears to me that the error code values= =20 >>> could traverse to 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=20 >>> LAST_ATTEMPT_STATUS_DRIVER_ERROR_COUNT and=20 >>> LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR_COUNT based on name. >>> >>> If there's no further feedback on the topic, I'll change them to=20 >>> LAST_ATTEMPT_STATUS_DRIVER_ERROR_RANGE_LENGTH and=20 >>> 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= =20 >>>> series: >>>> 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=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER = = =3D >>>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN, >>>>> =C2=A0 =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROGRESS_CALLBA= CK_ERROR =3D >>>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 10, >>>>> =C2=A0 =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=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_THERM= AL_API =3D >>>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 30, >>>>> =C2=A0 =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_THERMAL =3D >>>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 40, >>>>> =C2=A0 =C2=A0=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_ENV_A= PI =3D >>>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + 50, >>>>> =C2=A0 =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 Mic= hael >>>>> Kubacki" >>>> michael.kubacki@outlook.com> wrote: >>>>> >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 From: Michael Kubacki >>>>> >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 Introduces a header file to contain = Last Attempt Status codes >>>>> that >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 define granular FmpDevicePkg usage o= f the UEFI Specification >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 defined vendor range. The vendor ran= ge is described in UEFI >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 Specification 2.8A section 23.4. >>>>> >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 With this change, FmpDevicePkg curre= ntly defines three >>>>> subranges of >>>>> =C2=A0 =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=C2=A0 1. Driver - Codes return= ed from operations performed by the >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FmpDxe= driver. >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2. Dependency - Codes re= turned from FMP dependency related >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 functi= onality (e.g. FmpDependencyLib). >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3. Library - Codes retur= ned from FmpDeviceLib instances. >>>>> >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Liming Gao >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Michael D Kinney >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Guomin Jiang >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 Cc: Wei6 Xu >>>>> =C2=A0 =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=C2=A0=C2=A0 FmpDevicePkg/PrivateInclude/La= stAttemptStatus.h | 81 >>>>> ++++++++++++++++++++ >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 file changed, 81 insertions(= +) >>>>> >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 diff --git a/FmpDevicePkg/PrivateInc= lude/LastAttemptStatus.h >>>>> b/FmpDevicePkg/PrivateInclude/LastAttemptStatus.h >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 new file mode 100644 >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 index 000000000000..01e96b23edad >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 --- /dev/null >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +++ b/FmpDevicePkg/PrivateInclude/La= stAttemptStatus.h >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 @@ -0,0 +1,81 @@ >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +/** @file >>>>> =C2=A0 =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=C2=A0 +=C2=A0 Copyright (c) Microsoft Corp= oration.
>>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 + >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 SPDX-License-Identifier: BSD= -2-Clause-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 =C2=A0=C2=A0=C2=A0=C2=A0 +#ifndef __FMP_LAST_ATTEMPT_STATUS_H= __ >>>>> =C2=A0 =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=C2=A0=C2=A0=C2=A0 +// Size of the error code range for= FMP driver-specific >>>>> errors >>>>> =C2=A0 =C2=A0=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=C2=A0=C2=A0=C2=A0 +// Size of the error code range for= FMP dependency related >>>>> errors >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DEPENDE= NCY_ERROR_COUNT >>>>> 0x20 >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 + >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DRIVER_= MAX_ERROR_CODE_VALUE >>>>> LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL_VENDOR_RANGE_MIN + \ >>>>> =C2=A0 =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=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_DEPENDE= NCY_MAX_ERROR_CODE_VALUE >>>>> LAST_ATTEMPT_STATUS_DRIVER_MAX_ERROR_CODE_VALUE + \ >>>>> =C2=A0 =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=C2=A0=C2=A0 +#define LAST_ATTEMPT_STATUS_LIBRARY= _MAX_ERROR_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=C2=A0=C2=A0=C2=A0 +// Last attempt status codes define= d for additional >>>>> granularity in the FMP stack. >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +// These codes are defined within t= he higher-level UEFI >>>>> specification defined UNSUCCESSFUL_VENDOR_RANGE. >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +// The following last attempt statu= s code ranges are defined >>>>> for the following corresponding component: >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +//=C2=A0=C2=A0 * LAST_ATTEMPT_STATU= S_DRIVER - FMP driver >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +//=C2=A0=C2=A0 * LAST_ATTEMPT_STATU= S_DEPENDENCY - FMP dependency >>>>> functionality >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +//=C2=A0=C2=A0 * LAST_ATTEMPT_STATU= S_LIBRARY - FMP device library >>>>> instances >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +// >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +enum LAST_ATTEMPT_STATUS_EXPANDED_E= RROR_LIST >>>>> =C2=A0 =C2=A0=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 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_PROGRESS_CALLBACK_ERROR >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_CHECK_POWER_API >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_CHECK_SYS_THERMAL_API >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_THERMAL >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_CHECK_SYS_ENV_API >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_SYSTEM_ENV >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_GET_FMP_HEADER_SIZE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_GET_ALL_HEADER_SIZE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_GET_FMP_HEADER_VERSION >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_IMAGE_NOT_PROVIDED >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_IMAGE_NOT_UPDATABLE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_INVALID_CERTIFICATE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_INVALID_IMAGE_INDEX >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_INVALID_KEY_LENGTH >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_INVALID_KEY_LENGTH_VALUE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_VERSION_TOO_LOW >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_DEVICE_LOCKED >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_IMAGE_AUTH_FAILURE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DRIVER_E= RROR_PROTOCOL_ARG_MISSING >>>>> , >>>>> =C2=A0 =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=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_GET_DEPEX_FAILURE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_NO_END_OPCODE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_UNKNOWN_OPCODE >>>>> , >>>>> =C2=A0 =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 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_GUID_BEYOND_DEPEX >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_VERSION_BEYOND_DEPEX >>>>> , >>>>> =C2=A0 =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 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_FMP_NOT_FOUND >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_PUSH_FAILURE >>>>> , >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_DEPENDEN= CY_ERROR_POP_FAILURE >>>>> , >>>>> =C2=A0 =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=C2=A0 +=C2=A0 LAST_ATTEMPT_STATUS_LIBRARY_= ERROR_MIN_ERROR_CODE >>>>> , >>>>> =C2=A0 =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=C2=A0=C2=A0=C2=A0 +#endif >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 -- >>>>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 2.28.0.windows.1 >>>>> >>>>> >>>>> >>>>> >>> >>> >>> >> >>=20 >>