REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			559 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			559 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   UEFI Firmware Management Protocol definition
 | |
|   Firmware Management Protocol provides an abstraction for device to provide firmware
 | |
|   management support. The base requirements for managing device firmware images include
 | |
|   identifying firmware image revision level and programming the image into the device.
 | |
| 
 | |
|   GetImageInfo() is the only required function. GetImage(), SetImage(),
 | |
|   CheckImage(), GetPackageInfo(), and SetPackageInfo() shall return
 | |
|   EFI_UNSUPPORTED if not supported by the driver.
 | |
| 
 | |
|   Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR>
 | |
|   Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   @par Revision Reference:
 | |
|   This Protocol is introduced in UEFI Specification 2.3
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_FIRMWARE_MANAGEMENT_PROTOCOL_H__
 | |
| #define __EFI_FIRMWARE_MANAGEMENT_PROTOCOL_H__
 | |
| 
 | |
| #define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x86c77a67, 0xb97, 0x4633, {0xa1, 0x87, 0x49, 0x10, 0x4d, 0x6, 0x85, 0xc7 } \
 | |
|   }
 | |
| 
 | |
| typedef struct _EFI_FIRMWARE_MANAGEMENT_PROTOCOL EFI_FIRMWARE_MANAGEMENT_PROTOCOL;
 | |
| 
 | |
| ///
 | |
| /// Dependency Expression Opcode
 | |
| ///
 | |
| #define EFI_FMP_DEP_PUSH_GUID     0x00
 | |
| #define EFI_FMP_DEP_PUSH_VERSION  0x01
 | |
| #define EFI_FMP_DEP_VERSION_STR   0x02
 | |
| #define EFI_FMP_DEP_AND           0x03
 | |
| #define EFI_FMP_DEP_OR            0x04
 | |
| #define EFI_FMP_DEP_NOT           0x05
 | |
| #define EFI_FMP_DEP_TRUE          0x06
 | |
| #define EFI_FMP_DEP_FALSE         0x07
 | |
| #define EFI_FMP_DEP_EQ            0x08
 | |
| #define EFI_FMP_DEP_GT            0x09
 | |
| #define EFI_FMP_DEP_GTE           0x0A
 | |
| #define EFI_FMP_DEP_LT            0x0B
 | |
| #define EFI_FMP_DEP_LTE           0x0C
 | |
| #define EFI_FMP_DEP_END           0x0D
 | |
| 
 | |
| ///
 | |
| /// Image Attribute - Dependency
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT8    Dependencies[1];
 | |
| } EFI_FIRMWARE_IMAGE_DEP;
 | |
| 
 | |
| ///
 | |
| /// EFI_FIRMWARE_IMAGE_DESCRIPTOR
 | |
| ///
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// A unique number identifying the firmware image within the device. The number is
 | |
|   /// between 1 and DescriptorCount.
 | |
|   ///
 | |
|   UINT8       ImageIndex;
 | |
|   ///
 | |
|   /// A unique GUID identifying the firmware image type.
 | |
|   ///
 | |
|   EFI_GUID    ImageTypeId;
 | |
|   ///
 | |
|   /// A unique number identifying the firmware image.
 | |
|   ///
 | |
|   UINT64      ImageId;
 | |
|   ///
 | |
|   /// A pointer to a null-terminated string representing the firmware image name.
 | |
|   ///
 | |
|   CHAR16      *ImageIdName;
 | |
|   ///
 | |
|   /// Identifies the version of the device firmware. The format is vendor specific and new
 | |
|   /// version must have a greater value than an old version.
 | |
|   ///
 | |
|   UINT32      Version;
 | |
|   ///
 | |
|   /// A pointer to a null-terminated string representing the firmware image version name.
 | |
|   ///
 | |
|   CHAR16      *VersionName;
 | |
|   ///
 | |
|   /// Size of the image in bytes. If size=0, then only ImageIndex and ImageTypeId are valid.
 | |
|   ///
 | |
|   UINTN       Size;
 | |
|   ///
 | |
|   /// Image attributes that are supported by this device. See 'Image Attribute Definitions'
 | |
|   /// for possible returned values of this parameter. A value of 1 indicates the attribute is
 | |
|   /// supported and the current setting value is indicated in AttributesSetting. A
 | |
|   /// value of 0 indicates the attribute is not supported and the current setting value in
 | |
|   /// AttributesSetting is meaningless.
 | |
|   ///
 | |
|   UINT64      AttributesSupported;
 | |
|   ///
 | |
|   /// Image attributes. See 'Image Attribute Definitions' for possible returned values of
 | |
|   /// this parameter.
 | |
|   ///
 | |
|   UINT64      AttributesSetting;
 | |
|   ///
 | |
|   /// Image compatibilities. See 'Image Compatibility Definitions' for possible returned
 | |
|   /// values of this parameter.
 | |
|   ///
 | |
|   UINT64      Compatibilities;
 | |
|   ///
 | |
|   /// Describes the lowest ImageDescriptor version that the device will accept. Only
 | |
|   /// present in version 2 or higher.
 | |
|   ///
 | |
|   UINT32      LowestSupportedImageVersion;
 | |
|   ///
 | |
|   /// Describes the version that was last attempted to update. If no update attempted the
 | |
|   /// value will be 0. If the update attempted was improperly formatted and no version
 | |
|   /// number was available then the value will be zero. Only present in version 3 or higher.
 | |
|   UINT32      LastAttemptVersion;
 | |
|   ///
 | |
|   /// Describes the status that was last attempted to update. If no update has been attempted
 | |
|   /// the value will be LAST_ATTEMPT_STATUS_SUCCESS. Only present in version 3 or higher.
 | |
|   ///
 | |
|   UINT32      LastAttemptStatus;
 | |
|   ///
 | |
|   /// An optional number to identify the unique hardware instance within the system for
 | |
|   /// devices that may have multiple instances (Example: a plug in pci network card). This
 | |
|   /// number must be unique within the namespace of the ImageTypeId GUID and
 | |
|   /// ImageIndex. For FMP instances that have multiple descriptors for a single
 | |
|   /// hardware instance, all descriptors must have the same HardwareInstance value.
 | |
|   /// This number must be consistent between boots and should be based on some sort of
 | |
|   /// hardware identified unique id (serial number, etc) whenever possible. If a hardware
 | |
|   /// based number is not available the FMP provider may use some other characteristic
 | |
|   /// such as device path, bus/dev/function, slot num, etc for generating the
 | |
|   /// HardwareInstance. For implementations that will never have more than one
 | |
|   /// instance a zero can be used. A zero means the FMP provider is not able to determine a
 | |
|   /// unique hardware instance number or a hardware instance number is not needed. Only
 | |
|   /// present in version 3 or higher.
 | |
|   ///
 | |
|   UINT64                    HardwareInstance;
 | |
|   EFI_FIRMWARE_IMAGE_DEP    *Dependencies;
 | |
| } EFI_FIRMWARE_IMAGE_DESCRIPTOR;
 | |
| 
 | |
| //
 | |
| // Image Attribute Definitions
 | |
| //
 | |
| ///
 | |
| /// The attribute IMAGE_ATTRIBUTE_IMAGE_UPDATABLE indicates this device supports firmware
 | |
| /// image update.
 | |
| ///
 | |
| #define    IMAGE_ATTRIBUTE_IMAGE_UPDATABLE  0x0000000000000001
 | |
| ///
 | |
| /// The attribute IMAGE_ATTRIBUTE_RESET_REQUIRED indicates a reset of the device is required
 | |
| /// for the new firmware image to take effect after a firmware update. The device is the device hosting
 | |
| /// the firmware image.
 | |
| ///
 | |
| #define    IMAGE_ATTRIBUTE_RESET_REQUIRED  0x0000000000000002
 | |
| ///
 | |
| /// The attribute IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED indicates authentication is
 | |
| /// required to perform the following image operations: GetImage(), SetImage(), and
 | |
| /// CheckImage(). See 'Image Attribute - Authentication'.
 | |
| ///
 | |
| #define    IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED  0x0000000000000004
 | |
| ///
 | |
| /// The attribute IMAGE_ATTRIBUTE_IN_USE indicates the current state of the firmware image.
 | |
| /// This distinguishes firmware images in a device that supports redundant images.
 | |
| ///
 | |
| #define    IMAGE_ATTRIBUTE_IN_USE  0x0000000000000008
 | |
| ///
 | |
| /// The attribute IMAGE_ATTRIBUTE_UEFI_IMAGE indicates that this image is an EFI compatible image.
 | |
| ///
 | |
| #define    IMAGE_ATTRIBUTE_UEFI_IMAGE  0x0000000000000010
 | |
| ///
 | |
| /// The attribute IMAGE_ATTRIBUTE_DEPENDENCY indicates that there is an EFI_FIRMWARE_IMAGE_DEP
 | |
| /// section associated with the image.
 | |
| ///
 | |
| #define    IMAGE_ATTRIBUTE_DEPENDENCY  0x0000000000000020
 | |
| 
 | |
| //
 | |
| // Image Compatibility Definitions
 | |
| //
 | |
| ///
 | |
| /// Values from 0x0000000000000002 thru 0x000000000000FFFF are reserved for future assignments.
 | |
| /// Values from 0x0000000000010000 thru 0xFFFFFFFFFFFFFFFF are used by firmware vendor for
 | |
| /// compatibility check.
 | |
| ///
 | |
| #define   IMAGE_COMPATIBILITY_CHECK_SUPPORTED  0x0000000000000001
 | |
| 
 | |
| ///
 | |
| /// Descriptor Version exposed by GetImageInfo() function
 | |
| ///
 | |
| #define   EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION  4
 | |
| 
 | |
| ///
 | |
| /// Image Attribute - Authentication Required
 | |
| ///
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// It is included in the signature of AuthInfo. It is used to ensure freshness/no replay.
 | |
|   /// It is incremented during each firmware image operation.
 | |
|   ///
 | |
|   UINT64                       MonotonicCount;
 | |
|   ///
 | |
|   /// Provides the authorization for the firmware image operations. It is a signature across
 | |
|   /// the image data and the Monotonic Count value. Caller uses the private key that is
 | |
|   /// associated with a public key that has been provisioned via the key exchange.
 | |
|   /// Because this is defined as a signature, WIN_CERTIFICATE_UEFI_GUID.CertType must
 | |
|   /// be EFI_CERT_TYPE_PKCS7_GUID.
 | |
|   ///
 | |
|   WIN_CERTIFICATE_UEFI_GUID    AuthInfo;
 | |
| } EFI_FIRMWARE_IMAGE_AUTHENTICATION;
 | |
| 
 | |
| //
 | |
| // ImageUpdatable Definitions
 | |
| //
 | |
| ///
 | |
| /// IMAGE_UPDATABLE_VALID indicates SetImage() will accept the new image and update the
 | |
| /// device with the new image. The version of the new image could be higher or lower than
 | |
| /// the current image. SetImage VendorCode is optional but can be used for vendor
 | |
| /// specific action.
 | |
| ///
 | |
| #define  IMAGE_UPDATABLE_VALID  0x0000000000000001
 | |
| ///
 | |
| /// IMAGE_UPDATABLE_INVALID indicates SetImage() will reject the new image. No additional
 | |
| /// information is provided for the rejection.
 | |
| ///
 | |
| #define  IMAGE_UPDATABLE_INVALID  0x0000000000000002
 | |
| ///
 | |
| /// IMAGE_UPDATABLE_INVALID_TYPE indicates SetImage() will reject the new image. The
 | |
| /// rejection is due to the new image is not a firmware image recognized for this device.
 | |
| ///
 | |
| #define  IMAGE_UPDATABLE_INVALID_TYPE  0x0000000000000004
 | |
| ///
 | |
| /// IMAGE_UPDATABLE_INVALID_OLD indicates SetImage() will reject the new image. The
 | |
| /// rejection is due to the new image version is older than the current firmware image
 | |
| /// version in the device. The device firmware update policy does not support firmware
 | |
| /// version downgrade.
 | |
| ///
 | |
| #define  IMAGE_UPDATABLE_INVALID_OLD  0x0000000000000008
 | |
| ///
 | |
| /// IMAGE_UPDATABLE_VALID_WITH_VENDOR_CODE indicates SetImage() will accept and update
 | |
| /// the new image only if a correct VendorCode is provided or else image would be
 | |
| /// rejected and SetImage will return appropriate error.
 | |
| ///
 | |
| #define IMAGE_UPDATABLE_VALID_WITH_VENDOR_CODE  0x0000000000000010
 | |
| 
 | |
| //
 | |
| // Package Attribute Definitions
 | |
| //
 | |
| ///
 | |
| /// The attribute PACKAGE_ATTRIBUTE_VERSION_UPDATABLE indicates this device supports the
 | |
| /// update of the firmware package version.
 | |
| ///
 | |
| #define  PACKAGE_ATTRIBUTE_VERSION_UPDATABLE  0x0000000000000001
 | |
| ///
 | |
| /// The attribute PACKAGE_ATTRIBUTE_RESET_REQUIRED indicates a reset of the device is
 | |
| /// required for the new package info to take effect after an update.
 | |
| ///
 | |
| #define  PACKAGE_ATTRIBUTE_RESET_REQUIRED  0x0000000000000002
 | |
| ///
 | |
| /// The attribute PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED indicates authentication
 | |
| /// is required to update the package info.
 | |
| ///
 | |
| #define  PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED  0x0000000000000004
 | |
| 
 | |
| /**
 | |
|   Callback function to report the process of the firmware updating.
 | |
| 
 | |
|   @param[in]  Completion    A value between 1 and 100 indicating the current completion
 | |
|                             progress of the firmware update. Completion progress is
 | |
|                             reported as from 1 to 100 percent. A value of 0 is used by
 | |
|                             the driver to indicate that progress reporting is not supported.
 | |
| 
 | |
|   @retval EFI_SUCCESS       SetImage() continues to do the callback if supported.
 | |
|   @retval other             SetImage() discontinues the callback and completes
 | |
|                             the update and returns.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS)(
 | |
|   IN  UINTN                          Completion
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Returns information about the current firmware image(s) of the device.
 | |
| 
 | |
|   This function allows a copy of the current firmware image to be created and saved.
 | |
|   The saved copy could later been used, for example, in firmware image recovery or rollback.
 | |
| 
 | |
|   @param[in]      This               A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
 | |
|   @param[in, out] ImageInfoSize      A pointer to the size, in bytes, of the ImageInfo buffer.
 | |
|                                      On input, this is the size of the buffer allocated by the caller.
 | |
|                                      On output, it is the size of the buffer returned by the firmware
 | |
|                                      if the buffer was large enough, or the size of the buffer needed
 | |
|                                      to contain the image(s) information if the buffer was too small.
 | |
|   @param[in, out] ImageInfo          A pointer to the buffer in which firmware places the current image(s)
 | |
|                                      information. The information is an array of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
 | |
|   @param[out]     DescriptorVersion  A pointer to the location in which firmware returns the version number
 | |
|                                      associated with the EFI_FIRMWARE_IMAGE_DESCRIPTOR.
 | |
|   @param[out]     DescriptorCount    A pointer to the location in which firmware returns the number of
 | |
|                                      descriptors or firmware images within this device.
 | |
|   @param[out]     DescriptorSize     A pointer to the location in which firmware returns the size, in bytes,
 | |
|                                      of an individual EFI_FIRMWARE_IMAGE_DESCRIPTOR.
 | |
|   @param[out]     PackageVersion     A version number that represents all the firmware images in the device.
 | |
|                                      The format is vendor specific and new version must have a greater value
 | |
|                                      than the old version. If PackageVersion is not supported, the value is
 | |
|                                      0xFFFFFFFF. A value of 0xFFFFFFFE indicates that package version comparison
 | |
|                                      is to be performed using PackageVersionName. A value of 0xFFFFFFFD indicates
 | |
|                                      that package version update is in progress.
 | |
|   @param[out]     PackageVersionName A pointer to a pointer to a null-terminated string representing the
 | |
|                                      package version name. The buffer is allocated by this function with
 | |
|                                      AllocatePool(), and it is the caller's responsibility to free it with a call
 | |
|                                      to FreePool().
 | |
| 
 | |
|   @retval EFI_SUCCESS                The device was successfully updated with the new image.
 | |
|   @retval EFI_BUFFER_TOO_SMALL       The ImageInfo buffer was too small. The current buffer size
 | |
|                                      needed to hold the image(s) information is returned in ImageInfoSize.
 | |
|   @retval EFI_INVALID_PARAMETER      ImageInfoSize is NULL.
 | |
|   @retval EFI_DEVICE_ERROR           Valid information could not be returned. Possible corrupted image.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_IMAGE_INFO)(
 | |
|   IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL       *This,
 | |
|   IN OUT    UINTN                           *ImageInfoSize,
 | |
|   IN OUT    EFI_FIRMWARE_IMAGE_DESCRIPTOR   *ImageInfo,
 | |
|   OUT       UINT32                          *DescriptorVersion,
 | |
|   OUT       UINT8                           *DescriptorCount,
 | |
|   OUT       UINTN                           *DescriptorSize,
 | |
|   OUT       UINT32                          *PackageVersion,
 | |
|   OUT       CHAR16                          **PackageVersionName
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Retrieves a copy of the current firmware image of the device.
 | |
| 
 | |
|   This function allows a copy of the current firmware image to be created and saved.
 | |
|   The saved copy could later been used, for example, in firmware image recovery or rollback.
 | |
| 
 | |
|   @param[in]      This           A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
 | |
|   @param[in]      ImageIndex     A unique number identifying the firmware image(s) within the device.
 | |
|                                  The number is between 1 and DescriptorCount.
 | |
|   @param[out]     Image          Points to the buffer where the current image is copied to.
 | |
|   @param[in, out] ImageSize      On entry, points to the size of the buffer pointed to by Image, in bytes.
 | |
|                                  On return, points to the length of the image, in bytes.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The device was successfully updated with the new image.
 | |
|   @retval EFI_BUFFER_TOO_SMALL   The buffer specified by ImageSize is too small to hold the
 | |
|                                  image. The current buffer size needed to hold the image is returned
 | |
|                                  in ImageSize.
 | |
|   @retval EFI_INVALID_PARAMETER  The Image was NULL.
 | |
|   @retval EFI_NOT_FOUND          The current image is not copied to the buffer.
 | |
|   @retval EFI_UNSUPPORTED        The operation is not supported.
 | |
|   @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_IMAGE)(
 | |
|   IN  EFI_FIRMWARE_MANAGEMENT_PROTOCOL  *This,
 | |
|   IN  UINT8                             ImageIndex,
 | |
|   OUT  VOID                             *Image,
 | |
|   IN  OUT  UINTN                        *ImageSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Updates the firmware image of the device.
 | |
| 
 | |
|   This function updates the hardware with the new firmware image.
 | |
|   This function returns EFI_UNSUPPORTED if the firmware image is not updatable.
 | |
|   If the firmware image is updatable, the function should perform the following minimal validations
 | |
|   before proceeding to do the firmware image update.
 | |
|   - Validate the image authentication if image has attribute
 | |
|     IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED. The function returns
 | |
|     EFI_SECURITY_VIOLATION if the validation fails.
 | |
|   - Validate the image is a supported image for this device. The function returns EFI_ABORTED if
 | |
|     the image is unsupported. The function can optionally provide more detailed information on
 | |
|     why the image is not a supported image.
 | |
|   - Validate the data from VendorCode if not null. Image validation must be performed before
 | |
|     VendorCode data validation. VendorCode data is ignored or considered invalid if image
 | |
|     validation failed. The function returns EFI_ABORTED if the data is invalid.
 | |
| 
 | |
|   VendorCode enables vendor to implement vendor-specific firmware image update policy. Null if
 | |
|   the caller did not specify the policy or use the default policy. As an example, vendor can implement
 | |
|   a policy to allow an option to force a firmware image update when the abort reason is due to the new
 | |
|   firmware image version is older than the current firmware image version or bad image checksum.
 | |
|   Sensitive operations such as those wiping the entire firmware image and render the device to be
 | |
|   non-functional should be encoded in the image itself rather than passed with the VendorCode.
 | |
|   AbortReason enables vendor to have the option to provide a more detailed description of the abort
 | |
|   reason to the caller.
 | |
| 
 | |
|   @param[in]  This               A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
 | |
|   @param[in]  ImageIndex         A unique number identifying the firmware image(s) within the device.
 | |
|                                  The number is between 1 and DescriptorCount.
 | |
|   @param[in]  Image              Points to the new image.
 | |
|   @param[in]  ImageSize          Size of the new image in bytes.
 | |
|   @param[in]  VendorCode         This enables vendor to implement vendor-specific firmware image update policy.
 | |
|                                  Null indicates the caller did not specify the policy or use the default policy.
 | |
|   @param[in]  Progress           A function used by the driver to report the progress of the firmware update.
 | |
|   @param[out] AbortReason        A pointer to a pointer to a null-terminated string providing more
 | |
|                                  details for the aborted operation. The buffer is allocated by this function
 | |
|                                  with AllocatePool(), and it is the caller's responsibility to free it with a
 | |
|                                  call to FreePool().
 | |
| 
 | |
|   @retval EFI_SUCCESS            The device was successfully updated with the new image.
 | |
|   @retval EFI_ABORTED            The operation is aborted.
 | |
|   @retval EFI_INVALID_PARAMETER  The Image was NULL.
 | |
|   @retval EFI_UNSUPPORTED        The operation is not supported.
 | |
|   @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_PROTOCOL_SET_IMAGE)(
 | |
|   IN  EFI_FIRMWARE_MANAGEMENT_PROTOCOL                 *This,
 | |
|   IN  UINT8                                            ImageIndex,
 | |
|   IN  CONST VOID                                       *Image,
 | |
|   IN  UINTN                                            ImageSize,
 | |
|   IN  CONST VOID                                       *VendorCode,
 | |
|   IN  EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS    Progress,
 | |
|   OUT CHAR16                                           **AbortReason
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Checks if the firmware image is valid for the device.
 | |
| 
 | |
|   This function allows firmware update application to validate the firmware image without
 | |
|   invoking the SetImage() first.
 | |
| 
 | |
|   @param[in]  This               A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
 | |
|   @param[in]  ImageIndex         A unique number identifying the firmware image(s) within the device.
 | |
|                                  The number is between 1 and DescriptorCount.
 | |
|   @param[in]  Image              Points to the new image.
 | |
|   @param[in]  ImageSize          Size of the new image in bytes.
 | |
|   @param[out] ImageUpdatable     Indicates if the new image is valid for update. It also provides,
 | |
|                                  if available, additional information if the image is invalid.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The image was successfully checked.
 | |
|   @retval EFI_INVALID_PARAMETER  The Image was NULL.
 | |
|   @retval EFI_UNSUPPORTED        The operation is not supported.
 | |
|   @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_PROTOCOL_CHECK_IMAGE)(
 | |
|   IN  EFI_FIRMWARE_MANAGEMENT_PROTOCOL  *This,
 | |
|   IN  UINT8                             ImageIndex,
 | |
|   IN  CONST VOID                        *Image,
 | |
|   IN  UINTN                             ImageSize,
 | |
|   OUT UINT32                            *ImageUpdatable
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Returns information about the firmware package.
 | |
| 
 | |
|   This function returns package information.
 | |
| 
 | |
|   @param[in]  This                     A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
 | |
|   @param[out] PackageVersion           A version number that represents all the firmware images in the device.
 | |
|                                        The format is vendor specific and new version must have a greater value
 | |
|                                        than the old version. If PackageVersion is not supported, the value is
 | |
|                                        0xFFFFFFFF. A value of 0xFFFFFFFE indicates that package version
 | |
|                                        comparison is to be performed using PackageVersionName. A value of
 | |
|                                        0xFFFFFFFD indicates that package version update is in progress.
 | |
|   @param[out] PackageVersionName       A pointer to a pointer to a null-terminated string representing
 | |
|                                        the package version name. The buffer is allocated by this function with
 | |
|                                        AllocatePool(), and it is the caller's responsibility to free it with a
 | |
|                                        call to FreePool().
 | |
|   @param[out] PackageVersionNameMaxLen The maximum length of package version name if device supports update of
 | |
|                                        package version name. A value of 0 indicates the device does not support
 | |
|                                        update of package version name. Length is the number of Unicode characters,
 | |
|                                        including the terminating null character.
 | |
|   @param[out] AttributesSupported      Package attributes that are supported by this device. See 'Package Attribute
 | |
|                                        Definitions' for possible returned values of this parameter. A value of 1
 | |
|                                        indicates the attribute is supported and the current setting value is
 | |
|                                        indicated in AttributesSetting. A value of 0 indicates the attribute is not
 | |
|                                        supported and the current setting value in AttributesSetting is meaningless.
 | |
|   @param[out] AttributesSetting        Package attributes. See 'Package Attribute Definitions' for possible returned
 | |
|                                        values of this parameter
 | |
| 
 | |
|   @retval EFI_SUCCESS                  The package information was successfully returned.
 | |
|   @retval EFI_UNSUPPORTED              The operation is not supported.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_PACKAGE_INFO)(
 | |
|   IN  EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
 | |
|   OUT UINT32                           *PackageVersion,
 | |
|   OUT CHAR16                           **PackageVersionName,
 | |
|   OUT UINT32                           *PackageVersionNameMaxLen,
 | |
|   OUT UINT64                           *AttributesSupported,
 | |
|   OUT UINT64                           *AttributesSetting
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Updates information about the firmware package.
 | |
| 
 | |
|   This function updates package information.
 | |
|   This function returns EFI_UNSUPPORTED if the package information is not updatable.
 | |
|   VendorCode enables vendor to implement vendor-specific package information update policy.
 | |
|   Null if the caller did not specify this policy or use the default policy.
 | |
| 
 | |
|   @param[in]  This               A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
 | |
|   @param[in]  Image              Points to the authentication image.
 | |
|                                  Null if authentication is not required.
 | |
|   @param[in]  ImageSize          Size of the authentication image in bytes.
 | |
|                                  0 if authentication is not required.
 | |
|   @param[in]  VendorCode         This enables vendor to implement vendor-specific firmware
 | |
|                                  image update policy.
 | |
|                                  Null indicates the caller did not specify this policy or use
 | |
|                                  the default policy.
 | |
|   @param[in]  PackageVersion     The new package version.
 | |
|   @param[in]  PackageVersionName A pointer to the new null-terminated Unicode string representing
 | |
|                                  the package version name.
 | |
|                                  The string length is equal to or less than the value returned in
 | |
|                                  PackageVersionNameMaxLen.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The device was successfully updated with the new package
 | |
|                                  information.
 | |
|   @retval EFI_INVALID_PARAMETER  The PackageVersionName length is longer than the value
 | |
|                                  returned in PackageVersionNameMaxLen.
 | |
|   @retval EFI_UNSUPPORTED        The operation is not supported.
 | |
|   @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_FIRMWARE_MANAGEMENT_PROTOCOL_SET_PACKAGE_INFO)(
 | |
|   IN  EFI_FIRMWARE_MANAGEMENT_PROTOCOL   *This,
 | |
|   IN  CONST VOID                         *Image,
 | |
|   IN  UINTN                              ImageSize,
 | |
|   IN  CONST VOID                         *VendorCode,
 | |
|   IN  UINT32                             PackageVersion,
 | |
|   IN  CONST CHAR16                       *PackageVersionName
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// EFI_FIRMWARE_MANAGEMENT_PROTOCOL
 | |
| /// The protocol for managing firmware provides the following services.
 | |
| /// - Get the attributes of the current firmware image. Attributes include revision level.
 | |
| /// - Get a copy of the current firmware image. As an example, this service could be used by a
 | |
| ///   management application to facilitate a firmware roll-back.
 | |
| /// - Program the device with a firmware image supplied by the user.
 | |
| /// - Label all the firmware images within a device with a single version.
 | |
| ///
 | |
| struct _EFI_FIRMWARE_MANAGEMENT_PROTOCOL {
 | |
|   EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_IMAGE_INFO      GetImageInfo;
 | |
|   EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_IMAGE           GetImage;
 | |
|   EFI_FIRMWARE_MANAGEMENT_PROTOCOL_SET_IMAGE           SetImage;
 | |
|   EFI_FIRMWARE_MANAGEMENT_PROTOCOL_CHECK_IMAGE         CheckImage;
 | |
|   EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_PACKAGE_INFO    GetPackageInfo;
 | |
|   EFI_FIRMWARE_MANAGEMENT_PROTOCOL_SET_PACKAGE_INFO    SetPackageInfo;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID  gEfiFirmwareManagementProtocolGuid;
 | |
| 
 | |
| #endif
 |