Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14767 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			524 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			524 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The platform device manager reference implement
 | |
| 
 | |
| Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
 | |
| This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _DEVICE_MANAGER_H_
 | |
| #define _DEVICE_MANAGER_H_
 | |
| 
 | |
| #include "Bds.h"
 | |
| #include "FrontPage.h"
 | |
| #include "DeviceManagerVfr.h"
 | |
| #include <Protocol/PciIo.h>
 | |
| 
 | |
| #define DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE       SIGNATURE_32 ('D', 'M', 'C', 'B')
 | |
| #define DEVICE_MANAGER_DRIVER_HEALTH_INFO_SIGNATURE  SIGNATURE_32 ('D', 'M', 'D', 'H')
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|   UINTN                           Signature;
 | |
| 
 | |
|   ///
 | |
|   /// Device Manager HII relative handles
 | |
|   ///
 | |
|   EFI_HII_HANDLE                  HiiHandle;
 | |
| 
 | |
|   ///
 | |
|   /// Driver Health HII relative handles
 | |
|   ///
 | |
|   EFI_HII_HANDLE                  DriverHealthHiiHandle;
 | |
| 
 | |
|   EFI_HANDLE                      DriverHandle;
 | |
|   EFI_HANDLE                      DriverHealthHandle;
 | |
| 
 | |
|   ///
 | |
|   /// Device Manager Produced protocols
 | |
|   ///
 | |
|   EFI_HII_CONFIG_ACCESS_PROTOCOL  ConfigAccess;
 | |
| 
 | |
|   ///
 | |
|   /// Driver Health Produced protocols
 | |
|   ///
 | |
|   EFI_HII_CONFIG_ACCESS_PROTOCOL  DriverHealthConfigAccess;
 | |
| 
 | |
|   ///
 | |
|   /// Configuration data
 | |
|   ///
 | |
|   UINT8                           VideoBios;
 | |
| } DEVICE_MANAGER_CALLBACK_DATA;
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|   UINTN                           Signature;
 | |
|   LIST_ENTRY                      Link;
 | |
| 
 | |
|   ///
 | |
|   /// HII relative handles
 | |
|   ///
 | |
|   EFI_HII_HANDLE                  HiiHandle;
 | |
| 
 | |
|   ///
 | |
|   /// Driver relative handles
 | |
|   ///
 | |
|   EFI_HANDLE                      DriverHandle;
 | |
|   EFI_HANDLE                      ControllerHandle;
 | |
|   EFI_HANDLE                      ChildHandle;
 | |
| 
 | |
|   EFI_DRIVER_HEALTH_PROTOCOL      *DriverHealth;
 | |
|   ///
 | |
|   /// Driver health messages of the specify Driver 
 | |
|   ///
 | |
|   EFI_DRIVER_HEALTH_HII_MESSAGE   *MessageList;
 | |
| 
 | |
|   ///
 | |
|   /// Driver Health status
 | |
|   ///
 | |
|   EFI_DRIVER_HEALTH_STATUS        HealthStatus;
 | |
| } DRIVER_HEALTH_INFO;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_STRING_ID    PromptId;
 | |
|   EFI_QUESTION_ID  QuestionId;
 | |
| }MENU_INFO_ITEM;
 | |
| 
 | |
| typedef struct {
 | |
|   UINTN           CurListLen;
 | |
|   UINTN           MaxListLen;
 | |
|   MENU_INFO_ITEM  *NodeList;
 | |
| } MAC_ADDRESS_NODE_LIST;
 | |
| 
 | |
| #define DEVICE_MANAGER_HEALTH_INFO_FROM_LINK(a) \
 | |
|   CR (a, \
 | |
|       DRIVER_HEALTH_INFO, \
 | |
|       Link, \
 | |
|       DEVICE_MANAGER_DRIVER_HEALTH_INFO_SIGNATURE \
 | |
|       )
 | |
| 
 | |
| #define DEVICE_MANAGER_CALLBACK_DATA_FROM_THIS(a) \
 | |
|   CR (a, \
 | |
|       DEVICE_MANAGER_CALLBACK_DATA, \
 | |
|       ConfigAccess, \
 | |
|       DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE \
 | |
|       )
 | |
| typedef struct {
 | |
|   EFI_STRING_ID  StringId;
 | |
|   UINT16         Class;
 | |
| } DEVICE_MANAGER_MENU_ITEM;
 | |
| 
 | |
| /**
 | |
|   This function is invoked if user selected a interactive opcode from Device Manager's
 | |
|   Formset. The decision by user is saved to gCallbackKey for later processing. If
 | |
|   user set VBIOS, the new value is saved to EFI variable.
 | |
| 
 | |
| 
 | |
|   @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
 | |
|   @param Action          Specifies the type of action taken by the browser.
 | |
|   @param QuestionId      A unique value which is sent to the original exporting driver
 | |
|                          so that it can identify the type of data to expect.
 | |
|   @param Type            The type of value for the question.
 | |
|   @param Value           A pointer to the data being sent to the original exporting driver.
 | |
|   @param ActionRequest   On return, points to the action requested by the callback function.
 | |
| 
 | |
|   @retval  EFI_SUCCESS           The callback successfully handled the action.
 | |
|   @retval  EFI_INVALID_PARAMETER The setup browser call this function with invalid parameters.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| DeviceManagerCallback (
 | |
|   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
 | |
|   IN  EFI_BROWSER_ACTION                     Action,
 | |
|   IN  EFI_QUESTION_ID                        QuestionId,
 | |
|   IN  UINT8                                  Type,
 | |
|   IN  EFI_IFR_TYPE_VALUE                     *Value,
 | |
|   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is invoked if user selected a interactive opcode from Driver Health's
 | |
|   Formset. The decision by user is saved to gCallbackKey for later processing.
 | |
| 
 | |
| 
 | |
|   @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
 | |
|   @param Action          Specifies the type of action taken by the browser.
 | |
|   @param QuestionId      A unique value which is sent to the original exporting driver
 | |
|                          so that it can identify the type of data to expect.
 | |
|   @param Type            The type of value for the question.
 | |
|   @param Value           A pointer to the data being sent to the original exporting driver.
 | |
|   @param ActionRequest   On return, points to the action requested by the callback function.
 | |
| 
 | |
|   @retval  EFI_SUCCESS           The callback successfully handled the action.
 | |
|   @retval  EFI_INVALID_PARAMETER The setup browser call this function with invalid parameters.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| DriverHealthCallback (
 | |
|   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
 | |
|   IN  EFI_BROWSER_ACTION                     Action,
 | |
|   IN  EFI_QUESTION_ID                        QuestionId,
 | |
|   IN  UINT8                                  Type,
 | |
|   IN  EFI_IFR_TYPE_VALUE                     *Value,
 | |
|   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
| 
 | |
|   This function registers HII packages to HII database.
 | |
| 
 | |
|   @retval  EFI_SUCCESS           HII packages for the Device Manager were registered successfully.
 | |
|   @retval  EFI_OUT_OF_RESOURCES  HII packages for the Device Manager failed to be registered.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| InitializeDeviceManager (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Call the browser and display the device manager to allow user
 | |
|   to configure the platform.
 | |
| 
 | |
|   This function create the dynamic content for device manager. It includes
 | |
|   section header for all class of devices, one-of opcode to set VBIOS.
 | |
|   
 | |
|   @retval  EFI_SUCCESS             Operation is successful.
 | |
|   @retval  Other values if failed to clean up the dynamic content from HII
 | |
|            database.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| CallDeviceManager (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Check the Driver Health status of a single controller and try to process it if not healthy.
 | |
| 
 | |
|   This function called by CheckAllControllersHealthStatus () function in order to process a specify
 | |
|   contoller's health state.
 | |
| 
 | |
|   @param DriverHealthList   A Pointer to the list contain all of the platform driver health information. 
 | |
|   @param DriverHandle       The handle of driver.
 | |
|   @param ControllerHandle   The class guid specifies which form set will be displayed.
 | |
|   @param ChildHandle        The handle of the child controller to retrieve the health 
 | |
|                             status on.  This is an optional parameter that may be NULL. 
 | |
|   @param DriverHealth       A pointer to the EFI_DRIVER_HEALTH_PROTOCOL instance.
 | |
|   @param HealthStatus       The health status of the controller.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER   HealthStatus or DriverHealth is NULL.
 | |
|   @retval HealthStatus            The Health status of specify controller.
 | |
|   @retval EFI_OUT_OF_RESOURCES    The list of Driver Health Protocol handles can not be retrieved.
 | |
|   @retval EFI_NOT_FOUND           No controller in the platform install Driver Health Protocol.
 | |
|   @retval EFI_SUCCESS             The Health related operation has been taken successfully.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| GetSingleControllerHealthStatus (
 | |
|   IN OUT LIST_ENTRY                   *DriverHealthList,
 | |
|   IN EFI_HANDLE                       DriverHandle,
 | |
|   IN EFI_HANDLE                       ControllerHandle,  OPTIONAL
 | |
|   IN EFI_HANDLE                       ChildHandle,       OPTIONAL
 | |
|   IN EFI_DRIVER_HEALTH_PROTOCOL       *DriverHealth,
 | |
|   IN EFI_DRIVER_HEALTH_STATUS         *HealthStatus
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Collects all the EFI Driver Health Protocols currently present in the EFI Handle Database, 
 | |
|   and queries each EFI Driver Health Protocol to determine if one or more of the controllers 
 | |
|   managed by each EFI Driver Health Protocol instance are not healthy.  
 | |
| 
 | |
|   @param DriverHealthList   A Pointer to the list contain all of the platform driver health
 | |
|                             information.
 | |
| 
 | |
|   @retval    EFI_NOT_FOUND         No controller in the platform install Driver Health Protocol.
 | |
|   @retval    EFI_SUCCESS           All the controllers in the platform are healthy.
 | |
|   @retval    EFI_OUT_OF_RESOURCES  The list of Driver Health Protocol handles can not be retrieved.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| GetAllControllersHealthStatus (
 | |
|   IN OUT LIST_ENTRY  *DriverHealthList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Check the healthy status of the platform, this function will return immediately while found one driver 
 | |
|   in the platform are not healthy.
 | |
| 
 | |
|   @retval FALSE      at least one driver in the platform are not healthy.
 | |
|   @retval TRUE       No controller install Driver Health Protocol,
 | |
|                      or all controllers in the platform are in healthy status.
 | |
| **/
 | |
| BOOLEAN
 | |
| PlaformHealthStatusCheck (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Repair the whole platform.
 | |
| 
 | |
|   This function is the main entry for user choose "Repair All" in the front page.
 | |
|   It will try to do recovery job till all the driver health protocol installed modules 
 | |
|   reach a terminal state.
 | |
| 
 | |
|   @param DriverHealthList   A Pointer to the list contain all of the platform driver health
 | |
|                             information.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| PlatformRepairAll (
 | |
|   IN LIST_ENTRY  *DriverHealthList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Processes a single controller using the EFI Driver Health Protocol associated with 
 | |
|   that controller. This algorithm continues to query the GetHealthStatus() service until
 | |
|   one of the legal terminal states of the EFI Driver Health Protocol is reached. This may 
 | |
|   require the processing of HII Messages, HII Form, and invocation of repair operations.
 | |
| 
 | |
|   @param DriverHealth       A pointer to the EFI_DRIVER_HEALTH_PROTOCOL instance.
 | |
|   @param ControllerHandle   The class guid specifies which form set will be displayed.
 | |
|   @param ChildHandle        The handle of the child controller to retrieve the health 
 | |
|                             status on.  This is an optional parameter that may be NULL. 
 | |
|   @param HealthStatus       The health status of the controller.
 | |
|   @param MessageList        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.
 | |
|   @param FormHiiHandle      The HII handle for an HII form associated with the 
 | |
|                             controller specified by ControllerHandle and ChildHandle.
 | |
|   @param RebootRequired     Indicate whether a reboot is required to repair the controller.
 | |
| **/
 | |
| VOID
 | |
| ProcessSingleControllerHealth (
 | |
|   IN  EFI_DRIVER_HEALTH_PROTOCOL         *DriverHealth,
 | |
|   IN  EFI_HANDLE                         ControllerHandle, OPTIONAL
 | |
|   IN  EFI_HANDLE                         ChildHandle,      OPTIONAL
 | |
|   IN  EFI_DRIVER_HEALTH_STATUS           HealthStatus,
 | |
|   IN  EFI_DRIVER_HEALTH_HII_MESSAGE      **MessageList,    OPTIONAL
 | |
|   IN  EFI_HII_HANDLE                     FormHiiHandle,
 | |
|   IN OUT BOOLEAN                         *RebootRequired
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   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.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The progress of a repair operation is reported successfully.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| RepairNotify (
 | |
|   IN  UINTN Value,
 | |
|   IN  UINTN Limit
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Processes a set of messages returned by the GetHealthStatus ()
 | |
|   service of the EFI Driver Health Protocol
 | |
| 
 | |
|   @param    MessageList  The MessageList point to messages need to processed.  
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ProcessMessages (
 | |
|   IN  EFI_DRIVER_HEALTH_HII_MESSAGE      *MessageList
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Collect and display the platform's driver health relative information, allow user to do interactive 
 | |
|   operation while the platform is unhealthy.
 | |
| 
 | |
|   This function display a form which divided into two parts. The one list all modules which has installed 
 | |
|   driver health protocol. The list usually contain driver name, controller name, and it's health info.
 | |
|   While the driver name can't be retrieved, will use device path as backup. The other part of the form provide
 | |
|   a choice to the user to repair all platform.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| CallDriverHealth (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Select the best matching language according to front page policy for best user experience. 
 | |
|   
 | |
|   This function supports both ISO 639-2 and RFC 4646 language codes, but language 
 | |
|   code types may not be mixed in a single call to this function. 
 | |
| 
 | |
|   @param  SupportedLanguages   A pointer to a Null-terminated ASCII string that
 | |
|                                contains a set of language codes in the format 
 | |
|                                specified by Iso639Language.
 | |
|   @param  Iso639Language       If TRUE, then all language codes are assumed to be
 | |
|                                in ISO 639-2 format.  If FALSE, then all language
 | |
|                                codes are assumed to be in RFC 4646 language format.
 | |
| 
 | |
|   @retval NULL                 The best matching language could not be found in SupportedLanguages.
 | |
|   @retval NULL                 There are not enough resources available to return the best matching 
 | |
|                                language.
 | |
|   @retval Other                A pointer to a Null-terminated ASCII string that is the best matching 
 | |
|                                language in SupportedLanguages.
 | |
| **/
 | |
| CHAR8 *
 | |
| DriverHealthSelectBestLanguage (
 | |
|   IN CHAR8        *SupportedLanguages,
 | |
|   IN BOOLEAN      Iso639Language
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   This is an internal worker function to get the Component Name (2) protocol interface
 | |
|   and the language it supports.
 | |
| 
 | |
|   @param  ProtocolGuid         A pointer to an EFI_GUID. It points to Component Name (2) protocol GUID.
 | |
|   @param  DriverBindingHandle  The handle on which the Component Name (2) protocol instance is retrieved.
 | |
|   @param  ComponentName        A pointer to the Component Name (2) protocol interface.
 | |
|   @param  SupportedLanguage    The best suitable language that matches the SupportedLangues interface for the 
 | |
|                                located Component Name (2) instance.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The Component Name (2) protocol instance is successfully located and we find
 | |
|                                the best matching language it support.
 | |
|   @retval EFI_UNSUPPORTED      The input Language is not supported by the Component Name (2) protocol.
 | |
|   @retval Other                Some error occurs when locating Component Name (2) protocol instance or finding
 | |
|                                the supported language.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| GetComponentNameWorker (
 | |
|   IN  EFI_GUID                    *ProtocolGuid,
 | |
|   IN  EFI_HANDLE                  DriverBindingHandle,
 | |
|   OUT EFI_COMPONENT_NAME_PROTOCOL **ComponentName,
 | |
|   OUT CHAR8                       **SupportedLanguage
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   This is an internal worker function to get driver name from Component Name (2) protocol interface.
 | |
| 
 | |
| 
 | |
|   @param  ProtocolGuid         A pointer to an EFI_GUID. It points to Component Name (2) protocol GUID.
 | |
|   @param  DriverBindingHandle  The handle on which the Component Name (2) protocol instance is retrieved.
 | |
|   @param  DriverName           A pointer to the Unicode string to return. This Unicode string is the name
 | |
|                                of the driver specified by This.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The driver name is successfully retrieved from Component Name (2) protocol
 | |
|                                interface.
 | |
|   @retval Other                The driver name cannot be retrieved from Component Name (2) protocol
 | |
|                                interface.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| GetDriverNameWorker (
 | |
|   IN  EFI_GUID    *ProtocolGuid,
 | |
|   IN  EFI_HANDLE  DriverBindingHandle,
 | |
|   OUT CHAR16      **DriverName
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   This function gets driver name from Component Name 2 protocol interface and Component Name protocol interface
 | |
|   in turn. It first tries UEFI 2.0 Component Name 2 protocol interface and try to get the driver name.
 | |
|   If the attempt fails, it then gets the driver name from EFI 1.1 Component Name protocol for backward
 | |
|   compatibility support. 
 | |
| 
 | |
|   @param  DriverBindingHandle  The handle on which the Component Name (2) protocol instance is retrieved.
 | |
|   @param  DriverName           A pointer to the Unicode string to return. This Unicode string is the name
 | |
|                                of the driver specified by This.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The driver name is successfully retrieved from Component Name (2) protocol
 | |
|                                interface.
 | |
|   @retval Other                The driver name cannot be retrieved from Component Name (2) protocol
 | |
|                                interface.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| DriverHealthGetDriverName (
 | |
|   IN  EFI_HANDLE  DriverBindingHandle,
 | |
|   OUT CHAR16      **DriverName
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function gets controller name from Component Name 2 protocol interface and Component Name protocol interface
 | |
|   in turn. It first tries UEFI 2.0 Component Name 2 protocol interface and try to get the controller name.
 | |
|   If the attempt fails, it then gets the controller name from EFI 1.1 Component Name protocol for backward
 | |
|   compatibility support. 
 | |
| 
 | |
|   @param  ProtocolGuid         A pointer to an EFI_GUID. It points to Component Name (2) protocol GUID.
 | |
|   @param  DriverBindingHandle  The handle on which the Component Name (2) protocol instance is retrieved.
 | |
|   @param  ControllerHandle     The handle of a controller that the driver specified by This is managing.
 | |
|                                This handle specifies the controller whose name is to be returned.
 | |
|   @param  ChildHandle          The handle of the child controller to retrieve the name of. This is an
 | |
|                                optional parameter that may be NULL. It will be NULL for device drivers.
 | |
|                                It will also be NULL for bus drivers that attempt to retrieve the name
 | |
|                                of the bus controller. It will not be NULL for a bus driver that attempts
 | |
|                                to retrieve the name of a child controller.
 | |
|   @param  ControllerName       A pointer to the Unicode string to return. This Unicode string
 | |
|                                is the name of the controller specified by ControllerHandle and ChildHandle.
 | |
| 
 | |
|   @retval  EFI_SUCCESS         The controller name is successfully retrieved from Component Name (2) protocol
 | |
|                                interface.
 | |
|   @retval  Other               The controller name cannot be retrieved from Component Name (2) protocol.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| GetControllerNameWorker (
 | |
|   IN  EFI_GUID    *ProtocolGuid,
 | |
|   IN  EFI_HANDLE  DriverBindingHandle,
 | |
|   IN  EFI_HANDLE  ControllerHandle,
 | |
|   IN  EFI_HANDLE  ChildHandle,
 | |
|   OUT CHAR16      **ControllerName
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function gets controller name from Component Name 2 protocol interface and Component Name protocol interface
 | |
|   in turn. It first tries UEFI 2.0 Component Name 2 protocol interface and try to get the controller name. 
 | |
|   If the attempt fails, it then gets the controller name from EFI 1.1 Component Name protocol for backward
 | |
|   compatibility support. 
 | |
| 
 | |
|   @param  DriverBindingHandle  The handle on which the Component Name (2) protocol instance is retrieved.
 | |
|   @param  ControllerHandle     The handle of a controller that the driver specified by This is managing.
 | |
|                                This handle specifies the controller whose name is to be returned.
 | |
|   @param  ChildHandle          The handle of the child controller to retrieve the name of. This is an
 | |
|                                optional parameter that may be NULL. It will be NULL for device drivers.
 | |
|                                It will also be NULL for bus drivers that attempt to retrieve the name
 | |
|                                of the bus controller. It will not be NULL for a bus driver that attempts
 | |
|                                to retrieve the name of a child controller.
 | |
|   @param  ControllerName       A pointer to the Unicode string to return. This Unicode string
 | |
|                                is the name of the controller specified by ControllerHandle and ChildHandle.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The controller name is successfully retrieved from Component Name (2) protocol
 | |
|                                interface.
 | |
|   @retval Other                The controller name cannot be retrieved from Component Name (2) protocol.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| DriverHealthGetControllerName (
 | |
|   IN  EFI_HANDLE  DriverBindingHandle,
 | |
|   IN  EFI_HANDLE  ControllerHandle,
 | |
|   IN  EFI_HANDLE  ChildHandle,
 | |
|   OUT CHAR16      **ControllerName
 | |
|   );
 | |
| 
 | |
| #endif
 |