https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			242 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  EFI Driver Health Protocol definitions.
 | 
						|
 | 
						|
  When installed, the Driver Health Protocol produces a collection of services that allow
 | 
						|
  the health status for a controller to be retrieved. If a controller is not in a usable
 | 
						|
  state, status messages may be reported to the user, repair operations can be invoked,
 | 
						|
  and the user may be asked to make software and/or hardware configuration changes.
 | 
						|
 | 
						|
  The Driver Health Protocol is optionally produced by a driver that follows the
 | 
						|
  EFI Driver Model.  If an EFI Driver needs to report health status to the platform,
 | 
						|
  provide warning or error messages to the user, perform length repair operations,
 | 
						|
  or request the user to make hardware or software configuration changes, then the
 | 
						|
  Driver Health Protocol must be produced.
 | 
						|
 | 
						|
  A controller that is managed by driver that follows the EFI Driver Model and
 | 
						|
  produces the Driver Health Protocol must report the current health of the
 | 
						|
  controllers that the driver is currently managing.  The controller can initially
 | 
						|
  be healthy, failed, require repair, or require configuration.  If a controller
 | 
						|
  requires configuration, and the user make configuration changes, the controller
 | 
						|
  may then need to be reconnected or the system may need to be rebooted for the
 | 
						|
  configuration changes to take affect.
 | 
						|
 | 
						|
  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This Protocol is defined in UEFI Specification 2.3d
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __EFI_DRIVER_HEALTH_H__
 | 
						|
#define __EFI_DRIVER_HEALTH_H__
 | 
						|
 | 
						|
#define EFI_DRIVER_HEALTH_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0x2a534210, 0x9280, 0x41d8, { 0xae, 0x79, 0xca, 0xda, 0x1, 0xa2, 0xb1, 0x27 } \
 | 
						|
  }
 | 
						|
 | 
						|
typedef struct _EFI_DRIVER_HEALTH_PROTOCOL  EFI_DRIVER_HEALTH_PROTOCOL;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DRIVER_HEALTH_HEALTH_STATUS
 | 
						|
///
 | 
						|
typedef enum {
 | 
						|
  EfiDriverHealthStatusHealthy,
 | 
						|
  EfiDriverHealthStatusRepairRequired,
 | 
						|
  EfiDriverHealthStatusConfigurationRequired,
 | 
						|
  EfiDriverHealthStatusFailed,
 | 
						|
  EfiDriverHealthStatusReconnectRequired,
 | 
						|
  EfiDriverHealthStatusRebootRequired
 | 
						|
} EFI_DRIVER_HEALTH_STATUS;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DRIVER_HEALTH_HII_MESSAGE
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  EFI_HII_HANDLE  HiiHandle;
 | 
						|
  EFI_STRING_ID   StringId;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// 64-bit numeric value of the warning/error specified by this message.
 | 
						|
  ///   A value of 0x0000000000000000 is used to indicate that MessageCode is not specified.
 | 
						|
  ///   The values  0x0000000000000001 to 0x0fffffffffffffff are reserved for allocation by the UEFI Specification.
 | 
						|
  ///   The values  0x1000000000000000 to 0x1fffffffffffffff are reserved for IHV-developed drivers.
 | 
						|
  ///   The values 0x8000000000000000 to 0x8fffffffffffffff is reserved for platform/OEM drivers.
 | 
						|
  ///   All other values are reserved and should not be used.
 | 
						|
  ///
 | 
						|
  UINT64          MessageCode;
 | 
						|
} EFI_DRIVER_HEALTH_HII_MESSAGE;
 | 
						|
 | 
						|
/**
 | 
						|
  Reports the progress of a repair operation
 | 
						|
 | 
						|
  @param[in]  Value             A value between 0 and Limit that identifies the current
 | 
						|
                                progress of the repair operation.
 | 
						|
 | 
						|
  @param[in]  Limit             The maximum value of Value for the current repair operation.
 | 
						|
                                For example, a driver that wants to specify progress in
 | 
						|
                                percent would use a Limit value of 100.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DRIVER_HEALTH_REPAIR_NOTIFY)(
 | 
						|
  IN UINTN  Value,
 | 
						|
  IN UINTN  Limit
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieves the health status of a controller in the platform.  This function can also
 | 
						|
  optionally return warning messages, error messages, and a set of HII Forms that may
 | 
						|
  be repair a controller that is not proper configured.
 | 
						|
 | 
						|
  @param[in] This             A pointer to the EFI_DRIVER_HEALTH_PROTOCOL instance.
 | 
						|
 | 
						|
  @param[in] ControllerHandle The handle of the controller to retrieve the health status
 | 
						|
                              on.  This is an optional parameter that may be NULL.  If
 | 
						|
                              this parameter is NULL, then the value of ChildHandle is
 | 
						|
                              ignored, and the combined health status of all the devices
 | 
						|
                              that the driver is managing is returned.
 | 
						|
 | 
						|
  @param[in] ChildHandle      The handle of the child controller to retrieve the health
 | 
						|
                              status on.  This is an optional parameter that may be NULL.
 | 
						|
                              This parameter is ignored of ControllerHandle is NULL.  It
 | 
						|
                              will be NULL for device drivers.  It will also be NULL for
 | 
						|
                              bus drivers when an attempt is made to collect the health
 | 
						|
                              status of the bus controller.  If will not be NULL when an
 | 
						|
                              attempt is made to collect the health status for a child
 | 
						|
                              controller produced by the driver.
 | 
						|
 | 
						|
  @param[out] HealthStatus    A pointer to the health status that is returned by this
 | 
						|
                              function.  This is an optional parameter that may be NULL.
 | 
						|
                              This parameter is ignored of ControllerHandle is NULL.
 | 
						|
                              The health status for the controller specified by
 | 
						|
                              ControllerHandle and ChildHandle is returned.
 | 
						|
 | 
						|
  @param[out] MessageList     A pointer to an array of warning or error messages associated
 | 
						|
                              with the controller specified by ControllerHandle and
 | 
						|
                              ChildHandle.  This is an optional parameter that may be NULL.
 | 
						|
                              MessageList is allocated by this function with the EFI Boot
 | 
						|
                              Service AllocatePool(), and it is the caller's responsibility
 | 
						|
                              to free MessageList with the EFI Boot Service FreePool().
 | 
						|
                              Each message is specified by tuple of an EFI_HII_HANDLE and
 | 
						|
                              an EFI_STRING_ID.  The array of messages is terminated by tuple
 | 
						|
                              containing a EFI_HII_HANDLE with a value of NULL.  The
 | 
						|
                              EFI_HII_STRING_PROTOCOL.GetString() function can be used to
 | 
						|
                              retrieve the warning or error message as a Null-terminated
 | 
						|
                              string in a specific language.  Messages may be
 | 
						|
                              returned for any of the HealthStatus values except
 | 
						|
                              EfiDriverHealthStatusReconnectRequired and
 | 
						|
                              EfiDriverHealthStatusRebootRequired.
 | 
						|
 | 
						|
  @param[out] FormHiiHandle   A pointer to the HII handle containing the HII form used when
 | 
						|
                              configuration is required. The HII handle is associated with
 | 
						|
                              the controller specified by ControllerHandle and ChildHandle.
 | 
						|
                              If this is NULL, then no HII form is available. An HII handle
 | 
						|
                              will only be returned with a HealthStatus value of
 | 
						|
                              EfiDriverHealthStatusConfigurationRequired.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           ControllerHandle is NULL, and all the controllers
 | 
						|
                                managed by this driver specified by This have a health
 | 
						|
                                status of EfiDriverHealthStatusHealthy with no warning
 | 
						|
                                messages to be returned.  The ChildHandle, HealthStatus,
 | 
						|
                                MessageList, and FormList parameters are ignored.
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR      ControllerHandle is NULL, and one or more of the
 | 
						|
                                controllers managed by this driver specified by This
 | 
						|
                                do not have a health status of EfiDriverHealthStatusHealthy.
 | 
						|
                                The ChildHandle, HealthStatus, MessageList, and
 | 
						|
                                FormList parameters are ignored.
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR      ControllerHandle is NULL, and one or more of the
 | 
						|
                                controllers managed by this driver specified by This
 | 
						|
                                have one or more warning and/or error messages.
 | 
						|
                                The ChildHandle, HealthStatus, MessageList, and
 | 
						|
                                FormList parameters are ignored.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           ControllerHandle is not NULL and the health status
 | 
						|
                                of the controller specified by ControllerHandle and
 | 
						|
                                ChildHandle was returned in HealthStatus.  A list
 | 
						|
                                of warning and error messages may be optionally
 | 
						|
                                returned in MessageList, and a list of HII Forms
 | 
						|
                                may be optionally returned in FormList.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED       ControllerHandle is not NULL, and the controller
 | 
						|
                                specified by ControllerHandle and ChildHandle is not
 | 
						|
                                currently being managed by the driver specified by This.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER HealthStatus is NULL.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  MessageList is not NULL, and there are not enough
 | 
						|
                                resource available to allocate memory for MessageList.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DRIVER_HEALTH_GET_HEALTH_STATUS)(
 | 
						|
  IN  EFI_DRIVER_HEALTH_PROTOCOL       *This,
 | 
						|
  IN  EFI_HANDLE                       ControllerHandle OPTIONAL,
 | 
						|
  IN  EFI_HANDLE                       ChildHandle      OPTIONAL,
 | 
						|
  OUT EFI_DRIVER_HEALTH_STATUS         *HealthStatus,
 | 
						|
  OUT EFI_DRIVER_HEALTH_HII_MESSAGE    **MessageList    OPTIONAL,
 | 
						|
  OUT EFI_HII_HANDLE                   *FormHiiHandle   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Performs a repair operation on a controller in the platform.  This function can
 | 
						|
  optionally report repair progress information back to the platform.
 | 
						|
 | 
						|
  @param[in] This              A pointer to the EFI_DRIVER_HEALTH_PROTOCOL instance.
 | 
						|
  @param[in] ControllerHandle  The handle of the controller to repair.
 | 
						|
  @param[in] ChildHandle       The handle of the child controller to repair.  This is
 | 
						|
                               an optional parameter that may be NULL.  It will be NULL
 | 
						|
                               for device drivers.  It will also be NULL for bus
 | 
						|
                               drivers when an attempt is made to repair a bus controller.
 | 
						|
                               If will not be NULL when an attempt is made to repair a
 | 
						|
                               child controller produced by the driver.
 | 
						|
  @param[in] RepairNotify      A notification function that may be used by a driver to
 | 
						|
                               report the progress of the repair operation.  This is
 | 
						|
                               an optional parameter that may be NULL.
 | 
						|
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           An attempt to repair the controller specified by
 | 
						|
                                ControllerHandle and ChildHandle was performed.
 | 
						|
                                The result of the repair operation can bet
 | 
						|
                                determined by calling GetHealthStatus().
 | 
						|
  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
 | 
						|
                                managing the controller specified by ControllerHandle
 | 
						|
                                and ChildHandle.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  There are not enough resources to perform the
 | 
						|
                                repair operation.
 | 
						|
 | 
						|
*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DRIVER_HEALTH_REPAIR)(
 | 
						|
  IN  EFI_DRIVER_HEALTH_PROTOCOL                *This,
 | 
						|
  IN  EFI_HANDLE                                ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                                ChildHandle       OPTIONAL,
 | 
						|
  IN  EFI_DRIVER_HEALTH_REPAIR_NOTIFY           RepairNotify      OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// When installed, the Driver Health Protocol produces a collection of services
 | 
						|
/// that allow the health status for a controller to be retrieved.  If a controller
 | 
						|
/// is not in a usable state, status messages may be reported to the user, repair
 | 
						|
/// operations can be invoked, and the user may be asked to make software and/or
 | 
						|
/// hardware configuration changes.
 | 
						|
///
 | 
						|
struct _EFI_DRIVER_HEALTH_PROTOCOL {
 | 
						|
  EFI_DRIVER_HEALTH_GET_HEALTH_STATUS  GetHealthStatus;
 | 
						|
  EFI_DRIVER_HEALTH_REPAIR             Repair;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiDriverHealthProtocolGuid;
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |