Home | History | Annotate | Download | only in SataControllerDxe
      1 /** @file
      2   Header file for Sata Controller driver.
      3 
      4   Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _SATA_CONTROLLER_H_
     16 #define _SATA_CONTROLLER_H_
     17 
     18 #include <Uefi.h>
     19 
     20 #include <IndustryStandard/Pci.h>
     21 
     22 #include <Protocol/ComponentName.h>
     23 #include <Protocol/DriverBinding.h>
     24 #include <Protocol/PciIo.h>
     25 #include <Protocol/IdeControllerInit.h>
     26 
     27 #include <Library/BaseLib.h>
     28 #include <Library/BaseMemoryLib.h>
     29 #include <Library/DebugLib.h>
     30 #include <Library/UefiLib.h>
     31 #include <Library/UefiDriverEntryPoint.h>
     32 #include <Library/MemoryAllocationLib.h>
     33 #include <Library/UefiBootServicesTableLib.h>
     34 
     35 //
     36 // Global Variables definitions
     37 //
     38 extern EFI_DRIVER_BINDING_PROTOCOL  gSataControllerDriverBinding;
     39 extern EFI_COMPONENT_NAME_PROTOCOL  gSataControllerComponentName;
     40 extern EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2;
     41 
     42 #define AHCI_BAR_INDEX 0x05
     43 #define R_AHCI_CAP 0x0
     44 #define   B_AHCI_CAP_NPS (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) // Number of Ports
     45 #define   B_AHCI_CAP_SPM BIT17                              // Supports Port Multiplier
     46 
     47 ///
     48 /// AHCI each channel can have up to 1 device
     49 ///
     50 #define AHCI_MAX_DEVICES       0x01
     51 
     52 ///
     53 /// AHCI each channel can have 15 devices in the presence of a multiplier
     54 ///
     55 #define AHCI_MULTI_MAX_DEVICES 0x0F
     56 
     57 ///
     58 /// IDE supports 2 channel max
     59 ///
     60 #define IDE_MAX_CHANNEL 0x02
     61 
     62 ///
     63 /// IDE supports 2 devices max
     64 ///
     65 #define IDE_MAX_DEVICES 0x02
     66 
     67 #define SATA_ENUMER_ALL FALSE
     68 
     69 //
     70 // Sata Controller driver private data structure
     71 //
     72 #define SATA_CONTROLLER_SIGNATURE SIGNATURE_32('S','A','T','A')
     73 
     74 typedef struct _EFI_SATA_CONTROLLER_PRIVATE_DATA {
     75   //
     76   // Standard signature used to identify Sata Controller private data
     77   //
     78   UINT32                            Signature;
     79 
     80   //
     81   // Protocol instance of IDE_CONTROLLER_INIT produced by this driver
     82   //
     83   EFI_IDE_CONTROLLER_INIT_PROTOCOL  IdeInit;
     84 
     85   //
     86   // Copy of protocol pointers used by this driver
     87   //
     88   EFI_PCI_IO_PROTOCOL               *PciIo;
     89 
     90   //
     91   // The number of devices that are supported by this channel
     92   //
     93   UINT8                             DeviceCount;
     94 
     95   //
     96   // The highest disqulified mode for each attached device,
     97   // From ATA/ATAPI spec, if a mode is not supported,
     98   // the modes higher than it is also not supported
     99   //
    100   EFI_ATA_COLLECTIVE_MODE           *DisqualifiedModes;
    101 
    102   //
    103   // A copy of EFI_IDENTIFY_DATA data for each attached SATA device and its flag
    104   //
    105   EFI_IDENTIFY_DATA                 *IdentifyData;
    106   BOOLEAN                           *IdentifyValid;
    107 } EFI_SATA_CONTROLLER_PRIVATE_DATA;
    108 
    109 #define SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS(a) CR(a, EFI_SATA_CONTROLLER_PRIVATE_DATA, IdeInit, SATA_CONTROLLER_SIGNATURE)
    110 
    111 //
    112 // Driver binding functions declaration
    113 //
    114 /**
    115   Supported function of Driver Binding protocol for this driver.
    116   Test to see if this driver supports ControllerHandle.
    117 
    118   @param This                   Protocol instance pointer.
    119   @param Controller             Handle of device to test.
    120   @param RemainingDevicePath    A pointer to the device path. Should be ignored by
    121                                 device driver.
    122 
    123   @retval EFI_SUCCESS           This driver supports this device.
    124   @retval EFI_ALREADY_STARTED   This driver is already running on this device.
    125   @retval other                 This driver does not support this device.
    126 
    127 **/
    128 EFI_STATUS
    129 EFIAPI
    130 SataControllerSupported (
    131   IN EFI_DRIVER_BINDING_PROTOCOL    *This,
    132   IN EFI_HANDLE                     Controller,
    133   IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
    134   );
    135 
    136 /**
    137   This routine is called right after the .Supported() called and
    138   Start this driver on ControllerHandle.
    139 
    140   @param This                   Protocol instance pointer.
    141   @param Controller             Handle of device to bind driver to.
    142   @param RemainingDevicePath    A pointer to the device path. Should be ignored by
    143                                 device driver.
    144 
    145   @retval EFI_SUCCESS           This driver is added to this device.
    146   @retval EFI_ALREADY_STARTED   This driver is already running on this device.
    147   @retval other                 Some error occurs when binding this driver to this device.
    148 
    149 **/
    150 EFI_STATUS
    151 EFIAPI
    152 SataControllerStart (
    153   IN EFI_DRIVER_BINDING_PROTOCOL    *This,
    154   IN EFI_HANDLE                     Controller,
    155   IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
    156   );
    157 
    158 /**
    159   Stop this driver on ControllerHandle.
    160 
    161   @param This               A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
    162   @param Controller         A handle to the device being stopped.
    163   @param NumberOfChildren   The number of child device handles in ChildHandleBuffer.
    164   @param ChildHandleBuffer  An array of child handles to be freed.
    165 
    166   @retval EFI_SUCCESS       This driver is removed from this device.
    167   @retval other             Some error occurs when removing this driver from this device.
    168 
    169 **/
    170 EFI_STATUS
    171 EFIAPI
    172 SataControllerStop (
    173   IN EFI_DRIVER_BINDING_PROTOCOL    *This,
    174   IN EFI_HANDLE                     Controller,
    175   IN UINTN                          NumberOfChildren,
    176   IN EFI_HANDLE                     *ChildHandleBuffer
    177   );
    178 
    179 //
    180 // IDE controller init functions declaration
    181 //
    182 /**
    183   Returns the information about the specified IDE channel.
    184 
    185   This function can be used to obtain information about a particular IDE channel.
    186   The driver entity uses this information during the enumeration process.
    187 
    188   If Enabled is set to FALSE, the driver entity will not scan the channel. Note
    189   that it will not prevent an operating system driver from scanning the channel.
    190 
    191   For most of today's controllers, MaxDevices will either be 1 or 2. For SATA
    192   controllers, this value will always be 1. SATA configurations can contain SATA
    193   port multipliers. SATA port multipliers behave like SATA bridges and can support
    194   up to 16 devices on the other side. If a SATA port out of the IDE controller
    195   is connected to a port multiplier, MaxDevices will be set to the number of SATA
    196   devices that the port multiplier supports. Because today's port multipliers
    197   support up to fifteen SATA devices, this number can be as large as fifteen. The IDE
    198   bus driver is required to scan for the presence of port multipliers behind an SATA
    199   controller and enumerate up to MaxDevices number of devices behind the port
    200   multiplier.
    201 
    202   In this context, the devices behind a port multiplier constitute a channel.
    203 
    204   @param[in]  This                The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
    205   @param[in]  Channel             Zero-based channel number.
    206   @param[out] Enabled             TRUE if this channel is enabled.  Disabled channels
    207                                   are not scanned to see if any devices are present.
    208   @param[out] MaxDevices          The maximum number of IDE devices that the bus driver
    209                                   can expect on this channel.  For the ATA/ATAPI
    210                                   specification, version 6, this number will either be
    211                                   one or two. For Serial ATA (SATA) configurations with a
    212                                   port multiplier, this number can be as large as fifteen.
    213 
    214 
    215   @retval EFI_SUCCESS             Information was returned without any errors.
    216   @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
    217 
    218 **/
    219 EFI_STATUS
    220 EFIAPI
    221 IdeInitGetChannelInfo (
    222   IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
    223   IN UINT8                              Channel,
    224   OUT BOOLEAN                           *Enabled,
    225   OUT UINT8                             *MaxDevices
    226   );
    227 
    228 /**
    229   The notifications from the driver entity that it is about to enter a certain
    230   phase of the IDE channel enumeration process.
    231 
    232   This function can be used to notify the IDE controller driver to perform
    233   specific actions, including any chipset-specific initialization, so that the
    234   chipset is ready to enter the next phase. Seven notification points are defined
    235   at this time.
    236 
    237   More synchronization points may be added as required in the future.
    238 
    239   @param[in] This                 The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL
    240                                   instance.
    241   @param[in] Phase                The phase during enumeration.
    242   @param[in] Channel              Zero-based channel number.
    243 
    244   @retval EFI_SUCCESS             The notification was accepted without any errors.
    245   @retval EFI_UNSUPPORTED         Phase is not supported.
    246   @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
    247   @retval EFI_NOT_READY           This phase cannot be entered at this time; for
    248                                   example, an attempt was made to enter a Phase
    249                                   without having entered one or more previous
    250                                   Phase.
    251 
    252 **/
    253 EFI_STATUS
    254 EFIAPI
    255 IdeInitNotifyPhase (
    256   IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
    257   IN EFI_IDE_CONTROLLER_ENUM_PHASE      Phase,
    258   IN UINT8                              Channel
    259   );
    260 
    261 /**
    262   Submits the device information to the IDE controller driver.
    263 
    264   This function is used by the driver entity to pass detailed information about
    265   a particular device to the IDE controller driver. The driver entity obtains
    266   this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData
    267   is the pointer to the response data buffer. The IdentifyData buffer is owned
    268   by the driver entity, and the IDE controller driver must make a local copy
    269   of the entire buffer or parts of the buffer as needed. The original IdentifyData
    270   buffer pointer may not be valid when
    271 
    272     - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or
    273     - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point.
    274 
    275   The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to
    276   compute the optimum mode for the device. These fields are not limited to the
    277   timing information. For example, an implementation of the IDE controller driver
    278   may examine the vendor and type/mode field to match known bad drives.
    279 
    280   The driver entity may submit drive information in any order, as long as it
    281   submits information for all the devices belonging to the enumeration group
    282   before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device
    283   in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
    284   should be called with IdentifyData set to NULL.  The IDE controller driver may
    285   not have any other mechanism to know whether a device is present or not. Therefore,
    286   setting IdentifyData to NULL does not constitute an error condition.
    287   EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a
    288   given (Channel, Device) pair.
    289 
    290   @param[in] This                 A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
    291   @param[in] Channel              Zero-based channel number.
    292   @param[in] Device               Zero-based device number on the Channel.
    293   @param[in] IdentifyData         The device's response to the ATA IDENTIFY_DEVICE command.
    294 
    295   @retval EFI_SUCCESS             The information was accepted without any errors.
    296   @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
    297   @retval EFI_INVALID_PARAMETER   Device is invalid.
    298 
    299 **/
    300 EFI_STATUS
    301 EFIAPI
    302 IdeInitSubmitData (
    303   IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
    304   IN UINT8                              Channel,
    305   IN UINT8                              Device,
    306   IN EFI_IDENTIFY_DATA                  *IdentifyData
    307   );
    308 
    309 /**
    310   Disqualifies specific modes for an IDE device.
    311 
    312   This function allows the driver entity or other drivers (such as platform
    313   drivers) to reject certain timing modes and request the IDE controller driver
    314   to recalculate modes. This function allows the driver entity and the IDE
    315   controller driver to negotiate the timings on a per-device basis. This function
    316   is useful in the case of drives that lie about their capabilities. An example
    317   is when the IDE device fails to accept the timing modes that are calculated
    318   by the IDE controller driver based on the response to the Identify Drive command.
    319 
    320   If the driver entity does not want to limit the ATA timing modes and leave that
    321   decision to the IDE controller driver, it can either not call this function for
    322   the given device or call this function and set the Valid flag to FALSE for all
    323   modes that are listed in EFI_ATA_COLLECTIVE_MODE.
    324 
    325   The driver entity may disqualify modes for a device in any order and any number
    326   of times.
    327 
    328   This function can be called multiple times to invalidate multiple modes of the
    329   same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI
    330   specification for more information on PIO modes.
    331 
    332   For Serial ATA (SATA) controllers, this member function can be used to disqualify
    333   a higher transfer rate mode on a given channel. For example, a platform driver
    334   may inform the IDE controller driver to not use second-generation (Gen2) speeds
    335   for a certain SATA drive.
    336 
    337   @param[in] This                 The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
    338   @param[in] Channel              The zero-based channel number.
    339   @param[in] Device               The zero-based device number on the Channel.
    340   @param[in] BadModes             The modes that the device does not support and that
    341                                   should be disqualified.
    342 
    343   @retval EFI_SUCCESS             The modes were accepted without any errors.
    344   @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
    345   @retval EFI_INVALID_PARAMETER   Device is invalid.
    346   @retval EFI_INVALID_PARAMETER   IdentifyData is NULL.
    347 
    348 **/
    349 EFI_STATUS
    350 EFIAPI
    351 IdeInitDisqualifyMode (
    352   IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
    353   IN UINT8                              Channel,
    354   IN UINT8                              Device,
    355   IN EFI_ATA_COLLECTIVE_MODE            *BadModes
    356   );
    357 
    358 /**
    359   Returns the information about the optimum modes for the specified IDE device.
    360 
    361   This function is used by the driver entity to obtain the optimum ATA modes for
    362   a specific device.  The IDE controller driver takes into account the following
    363   while calculating the mode:
    364     - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
    365     - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode()
    366 
    367   The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
    368   for all the devices that belong to an enumeration group before calling
    369   EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group.
    370 
    371   The IDE controller driver will use controller- and possibly platform-specific
    372   algorithms to arrive at SupportedModes.  The IDE controller may base its
    373   decision on user preferences and other considerations as well. This function
    374   may be called multiple times because the driver entity may renegotiate the mode
    375   with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode().
    376 
    377   The driver entity may collect timing information for various devices in any
    378   order. The driver entity is responsible for making sure that all the dependencies
    379   are satisfied. For example, the SupportedModes information for device A that
    380   was previously returned may become stale after a call to
    381   EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B.
    382 
    383   The buffer SupportedModes is allocated by the callee because the caller does
    384   not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE
    385   is defined in a way that allows for future extensibility and can be of variable
    386   length. This memory pool should be deallocated by the caller when it is no
    387   longer necessary.
    388 
    389   The IDE controller driver for a Serial ATA (SATA) controller can use this
    390   member function to force a lower speed (first-generation [Gen1] speeds on a
    391   second-generation [Gen2]-capable hardware).  The IDE controller driver can
    392   also allow the driver entity to stay with the speed that has been negotiated
    393   by the physical layer.
    394 
    395   @param[in]  This                The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
    396   @param[in]  Channel             A zero-based channel number.
    397   @param[in]  Device              A zero-based device number on the Channel.
    398   @param[out] SupportedModes      The optimum modes for the device.
    399 
    400   @retval EFI_SUCCESS             SupportedModes was returned.
    401   @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
    402   @retval EFI_INVALID_PARAMETER   Device is invalid.
    403   @retval EFI_INVALID_PARAMETER   SupportedModes is NULL.
    404   @retval EFI_NOT_READY           Modes cannot be calculated due to a lack of
    405                                   data.  This error may happen if
    406                                   EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
    407                                   and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData()
    408                                   were not called for at least one drive in the
    409                                   same enumeration group.
    410 
    411 **/
    412 EFI_STATUS
    413 EFIAPI
    414 IdeInitCalculateMode (
    415   IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
    416   IN UINT8                              Channel,
    417   IN UINT8                              Device,
    418   OUT EFI_ATA_COLLECTIVE_MODE           **SupportedModes
    419   );
    420 
    421 /**
    422   Commands the IDE controller driver to program the IDE controller hardware
    423   so that the specified device can operate at the specified mode.
    424 
    425   This function is used by the driver entity to instruct the IDE controller
    426   driver to program the IDE controller hardware to the specified modes. This
    427   function can be called only once for a particular device. For a Serial ATA
    428   (SATA) Advanced Host Controller Interface (AHCI) controller, no controller-
    429   specific programming may be required.
    430 
    431   @param[in] This                 Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
    432   @param[in] Channel              Zero-based channel number.
    433   @param[in] Device               Zero-based device number on the Channel.
    434   @param[in] Modes                The modes to set.
    435 
    436   @retval EFI_SUCCESS             The command was accepted without any errors.
    437   @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
    438   @retval EFI_INVALID_PARAMETER   Device is invalid.
    439   @retval EFI_NOT_READY           Modes cannot be set at this time due to lack of data.
    440   @retval EFI_DEVICE_ERROR        Modes cannot be set due to hardware failure.
    441                                   The driver entity should not use this device.
    442 
    443 **/
    444 EFI_STATUS
    445 EFIAPI
    446 IdeInitSetTiming (
    447   IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
    448   IN UINT8                              Channel,
    449   IN UINT8                              Device,
    450   IN EFI_ATA_COLLECTIVE_MODE            *Modes
    451   );
    452 
    453 //
    454 // Forward reference declaration
    455 //
    456 /**
    457   Retrieves a Unicode string that is the user readable name of the UEFI Driver.
    458 
    459   @param This           A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
    460   @param Language       A pointer to a three character ISO 639-2 language identifier.
    461                         This is the language of the driver name that that the caller
    462                         is requesting, and it must match one of the languages specified
    463                         in SupportedLanguages.  The number of languages supported by a
    464                         driver is up to the driver writer.
    465   @param DriverName     A pointer to the Unicode string to return.  This Unicode string
    466                         is the name of the driver specified by This in the language
    467                         specified by Language.
    468 
    469   @retval EFI_SUCCESS           The Unicode string for the Driver specified by This
    470                                 and the language specified by Language was returned
    471                                 in DriverName.
    472   @retval EFI_INVALID_PARAMETER Language is NULL.
    473   @retval EFI_INVALID_PARAMETER DriverName is NULL.
    474   @retval EFI_UNSUPPORTED       The driver specified by This does not support the
    475                                 language specified by Language.
    476 **/
    477 EFI_STATUS
    478 EFIAPI
    479 SataControllerComponentNameGetDriverName (
    480   IN EFI_COMPONENT_NAME_PROTOCOL    *This,
    481   IN CHAR8                          *Language,
    482   OUT CHAR16                        **DriverName
    483   );
    484 
    485 /**
    486   Retrieves a Unicode string that is the user readable name of the controller
    487   that is being managed by an UEFI Driver.
    488 
    489   @param This                   A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
    490   @param ControllerHandle       The handle of a controller that the driver specified by
    491                                 This is managing.  This handle specifies the controller
    492                                 whose name is to be returned.
    493   @param OPTIONAL   ChildHandle The handle of the child controller to retrieve the name
    494                                 of.  This is an optional parameter that may be NULL.  It
    495                                 will be NULL for device drivers.  It will also be NULL
    496                                 for a bus drivers that wish to retrieve the name of the
    497                                 bus controller.  It will not be NULL for a bus driver
    498                                 that wishes to retrieve the name of a child controller.
    499   @param Language               A pointer to a three character ISO 639-2 language
    500                                 identifier.  This is the language of the controller name
    501                                 that that the caller is requesting, and it must match one
    502                                 of the languages specified in SupportedLanguages.  The
    503                                 number of languages supported by a driver is up to the
    504                                 driver writer.
    505   @param ControllerName         A pointer to the Unicode string to return.  This Unicode
    506                                 string is the name of the controller specified by
    507                                 ControllerHandle and ChildHandle in the language
    508                                 specified by Language from the point of view of the
    509                                 driver specified by This.
    510 
    511   @retval EFI_SUCCESS           The Unicode string for the user readable name in the
    512                                 language specified by Language for the driver
    513                                 specified by This was returned in DriverName.
    514   @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
    515   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
    516                                 EFI_HANDLE.
    517   @retval EFI_INVALID_PARAMETER Language is NULL.
    518   @retval EFI_INVALID_PARAMETER ControllerName is NULL.
    519   @retval EFI_UNSUPPORTED       The driver specified by This is not currently
    520                                 managing the controller specified by
    521                                 ControllerHandle and ChildHandle.
    522   @retval EFI_UNSUPPORTED       The driver specified by This does not support the
    523                                 language specified by Language.
    524 **/
    525 EFI_STATUS
    526 EFIAPI
    527 SataControllerComponentNameGetControllerName (
    528   IN EFI_COMPONENT_NAME_PROTOCOL    *This,
    529   IN EFI_HANDLE                     ControllerHandle,
    530   IN EFI_HANDLE                     ChildHandle OPTIONAL,
    531   IN CHAR8                          *Language,
    532   OUT CHAR16                        **ControllerName
    533   );
    534 
    535 #endif
    536 
    537