--- /dev/null
+/** @file\r
+ Defines last attempt status code ranges within the UEFI Specification\r
+ defined unsuccessful vendor range.\r
+\r
+ Copyright (c) Microsoft Corporation.<BR>\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef __LAST_ATTEMPT_STATUS_H__\r
+#define __LAST_ATTEMPT_STATUS_H__\r
+\r
+///\r
+/// Last Attempt Status Unsuccessful Vendor Range Map\r
+///\r
+/// Update this map any time new ranges are added. Pre-existing range definitions cannot be modified\r
+/// to keep status code definitions consistent over time.\r
+///\r
+/// START | END | Usage\r
+/// ------------------------------------------------------------------|\r
+/// 0x1000 | 0x17FF | FmpDevicePkg |\r
+/// 0x1000 | 0x107F | FmpDxe driver |\r
+/// 0x1080 | 0x109F | FmpDependencyLib |\r
+/// 0x10A0 | 0x10BF | FmpDependencyCheckLib |\r
+/// 0x10C0 | 0x17FF | Unused. Available for future expansion. |\r
+/// 0x1800 | 0x1FFF | FmpDeviceLib instances implementation |\r
+/// 0x2000 | 0x3FFF | Unused. Available for future expansion. |\r
+///\r
+\r
+///\r
+/// The minimum value of the FMP reserved range.\r
+///\r
+#define LAST_ATTEMPT_STATUS_FMP_RESERVED_MIN_ERROR_CODE_VALUE 0x1000\r
+\r
+///\r
+/// The maximum value of the FMP reserved range.\r
+///\r
+#define LAST_ATTEMPT_STATUS_FMP_RESERVED_MAX_ERROR_CODE_VALUE 0x1FFF\r
+\r
+///\r
+/// The minimum value allowed for FmpDxe driver-specific errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_DRIVER_MIN_ERROR_CODE_VALUE 0x1000\r
+\r
+///\r
+/// The maximum value allowed for FmpDxe driver-specific errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_DRIVER_MAX_ERROR_CODE_VALUE 0x107F\r
+\r
+///\r
+/// The minimum value allowed for FmpDependencyLib related errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_LIB_MIN_ERROR_CODE_VALUE 0x1080\r
+\r
+///\r
+/// The maximum value allowed for FmpDependencyLib related errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_LIB_MAX_ERROR_CODE_VALUE 0x109F\r
+\r
+///\r
+/// The minimum value allowed for FmpDependencyCheckLib related errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_CHECK_LIB_MIN_ERROR_CODE_VALUE 0x10A0\r
+\r
+///\r
+/// The maximum value allowed for FmpDependencyCheckLib related errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_CHECK_LIB_MAX_ERROR_CODE_VALUE 0x10BF\r
+\r
+///\r
+/// The minimum value allowed for FMP device library errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MIN_ERROR_CODE_VALUE 0x1800\r
+\r
+///\r
+/// The maximum value allowed for FMP device library errors.\r
+///\r
+#define LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MAX_ERROR_CODE_VALUE 0x1FFF\r
+\r
+#endif\r
--- /dev/null
+/** @file\r
+ Defines private last attempt status codes used in FmpDevicePkg.\r
+\r
+ Copyright (c) Microsoft Corporation.<BR>\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef __FMP_LAST_ATTEMPT_STATUS_H__\r
+#define __FMP_LAST_ATTEMPT_STATUS_H__\r
+\r
+///\r
+/// Last attempt status codes defined for additional granularity in FmpDevicePkg components.\r
+///\r
+/// These codes are defined within the last attempt status FMP reserved range which extends from\r
+/// LAST_ATTEMPT_STATUS_FMP_RESERVED_MIN_ERROR_CODE_VALUE to LAST_ATTEMPT_STATUS_FMP_RESERVED_MAX_ERROR_CODE_VALUE.\r
+///\r
+/// The following last attempt status code ranges are currently defined for the corresponding component:\r
+/// * LAST_ATTEMPT_STATUS_DRIVER - FMP driver\r
+/// * LAST_ATTEMPT_STATUS_DEPENDENCY - FMP dependency functionality\r
+///\r
+/// Future last attempt status code additions in FmpDevicePkg should be added as follows:\r
+/// * FmpDxe driver: Onto the end of the LAST_ATTEMPT_STATUS_DRIVER_ERROR range\r
+/// * FMP dependency functionality: Onto the end of the LAST_ATTEMPT_STATUS_DEPENDENCY_ERROR range\r
+/// * Other components: Add a new range onto the end of the last existing range in the enum within the limits of\r
+/// [LAST_ATTEMPT_STATUS_FMP_RESERVED_MIN_ERROR_CODE_VALUE,LAST_ATTEMPT_STATUS_FMP_RESERVED_MAX_ERROR_CODE_VALUE]\r
+///\r
+/// The value of pre-existing last attempt status codes should never be modified to ensure the values remain\r
+/// consistent over time.\r
+///\r
+enum LAST_ATTEMPT_STATUS_EXPANDED_ERROR_LIST\r
+{\r
+ ///\r
+ /// Last attempt status codes used in FmpDxe\r
+ ///\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER = LAST_ATTEMPT_STATUS_DRIVER_MIN_ERROR_CODE_VALUE,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROGRESS_CALLBACK_ERROR ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_POWER_API ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_THERMAL_API ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_THERMAL ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_CHECK_SYS_ENV_API ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_SYSTEM_ENV ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER_SIZE ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_ALL_HEADER_SIZE ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_GET_FMP_HEADER_VERSION ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_IMAGE_NOT_PROVIDED ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_IMAGE_NOT_UPDATABLE ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_CERTIFICATE ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_IMAGE_INDEX ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_KEY_LENGTH ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_INVALID_KEY_LENGTH_VALUE ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_VERSION_TOO_LOW ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_DEVICE_LOCKED ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_IMAGE_AUTH_FAILURE ,\r
+ LAST_ATTEMPT_STATUS_DRIVER_ERROR_PROTOCOL_ARG_MISSING ,\r
+\r
+ ///\r
+ /// Last attempt status codes used in FmpDependencyLib\r
+ ///\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_GET_DEPEX_FAILURE = LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_LIB_MIN_ERROR_CODE_VALUE,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_NO_END_OPCODE ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_UNKNOWN_OPCODE ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_GUID_BEYOND_DEPEX ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_VERSION_BEYOND_DEPEX ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_VERSION_STR_BEYOND_DEPEX ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_FMP_NOT_FOUND ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE ,\r
+\r
+ ///\r
+ /// Last attempt status codes used in FmpDependencyCheckLib\r
+ ///\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_CHECK_LIB_ERROR_FMP_PROTOCOL_NOT_FOUND = LAST_ATTEMPT_STATUS_FMP_DEPENDENCY_CHECK_LIB_MIN_ERROR_CODE_VALUE,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_CHECK_LIB_ERROR_MEM_ALLOC_FMP_INFO_BUFFER_FAILED ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_CHECK_LIB_ERROR_MEM_ALLOC_DESC_VER_BUFFER_FAILED ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_CHECK_LIB_ERROR_MEM_ALLOC_DESC_SIZE_BUFFER_FAILED ,\r
+ LAST_ATTEMPT_STATUS_DEPENDENCY_CHECK_LIB_ERROR_MEM_ALLOC_FMP_VER_BUFFER_FAILED\r
+};\r
+\r
+#endif\r