4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Master header file for DiskIo driver. It includes the module private defininitions.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _DISK_IO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _DISK_IO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/BlockIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ComponentName.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DriverBinding.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DiskIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiDriverEntryPoint.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DATA_BUFFER_BLOCK_NUM 64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DISK_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('d', 's', 'k', 'I')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DISK_IO_PROTOCOL DiskIo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_BLOCK_IO_PROTOCOL *BlockIo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} DISK_IO_PRIVATE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DISK_IO_PRIVATE_DATA_FROM_THIS(a) CR (a, DISK_IO_PRIVATE_DATA, DiskIo, DISK_IO_PRIVATE_DATA_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Global Variables
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_DRIVER_BINDING_PROTOCOL gDiskIoDriverBinding;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_COMPONENT_NAME_PROTOCOL gDiskIoComponentName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_COMPONENT_NAME2_PROTOCOL gDiskIoComponentName2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Prototypes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Driver model protocol interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Test to see if this driver supports ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Protocol instance pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle Handle of device to test
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RemainingDevicePath Optional parameter use to pick a specific child
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device to start.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS This driver supports this device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ALREADY_STARTED This driver is already running on this device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval other This driver does not support this device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoDriverBindingSupported (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Start this driver on ControllerHandle by opening a Block IO protocol and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync installing a Disk IO protocol on ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Protocol instance pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle Handle of device to bind driver to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RemainingDevicePath Optional parameter use to pick a specific child
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device to start.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS This driver is added to ControllerHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval other This driver does not support this device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoDriverBindingStart (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Stop this driver on ControllerHandle by removing Disk IO protocol and closing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the Block IO protocol on ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Protocol instance pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle Handle of device to stop driver on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync children is zero stop the entire bus driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandleBuffer List of Child Handles to Stop.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS This driver is removed ControllerHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval other This driver was not removed from this device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoDriverBindingStop (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN NumberOfChildren,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE *ChildHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Disk I/O Protocol Interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read BufferSize bytes from Offset into Buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reads may support reads that are not aligned on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sector boundaries. There are three cases:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UnderRun - The first byte is not on a sector boundary or the read request is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync less than a sector in length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Aligned - A read of N contiguous sectors.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OverRun - The last byte is not on a sector boundary.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Protocol instance pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MediaId Id of the media, changes every time the media is replaced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Offset The starting byte offset to read from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BufferSize Size of Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Buffer Buffer containing read data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The data was read correctly from the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device reported an error while performing the read.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MEDIA There is no media in the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The read request contains device addresses that are not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync valid for the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoReadDisk (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DISK_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 MediaId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Offset,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN BufferSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID *Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Writes BufferSize bytes from Buffer into Offset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Writes may require a read modify write to support writes that are not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync aligned on sector boundaries. There are three cases:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UnderRun - The first byte is not on a sector boundary or the write request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is less than a sector in length. Read modify write is required.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Aligned - A write of N contiguous sectors.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OverRun - The last byte is not on a sector boundary. Read modified write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync required.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Protocol instance pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MediaId Id of the media, changes every time the media is replaced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Offset The starting byte offset to read from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BufferSize Size of Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Buffer Buffer containing read data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The data was written correctly to the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_WRITE_PROTECTED The device can not be written to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device reported an error while performing the write.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MEDIA There is no media in the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The write request contains device addresses that are not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync valid for the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoWriteDisk (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DISK_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 MediaId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Offset,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN BufferSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// EFI Component Name Functions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves a Unicode string that is the user readable name of the driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function retrieves the user readable name of a driver in the form of a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode string. If the driver specified by This has a user readable name in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language, then a pointer to the driver name is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by This does not support the language specified by Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Language[in] A pointer to a Null-terminated ASCII string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync array indicating the language. This is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync language of the driver name that the caller is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requesting, and it must match one of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync languages specified in SupportedLanguages. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of languages supported by a driver is up
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the driver writer. Language is specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in RFC 4646 or ISO 639-2 language code format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverName[out] A pointer to the Unicode string to return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Unicode string is the name of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This in the language
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Unicode string for the Driver specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This and the language specified by Language was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned in DriverName.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Language is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverName is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoComponentNameGetDriverName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_COMPONENT_NAME_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **DriverName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves a Unicode string that is the user readable name of the controller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that is being managed by a driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function retrieves the user readable name of the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and ChildHandle in the form of a Unicode string. If the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This has a user readable name in the language specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language, then a pointer to the controller name is returned in ControllerName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and EFI_SUCCESS is returned. If the driver specified by This is not currently
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync managing the controller specified by ControllerHandle and ChildHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then EFI_UNSUPPORTED is returned. If the driver specified by This does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync support the language specified by Language, then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle[in] The handle of a controller that the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This is managing. This handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specifies the controller whose name is to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandle[in] The handle of the child controller to retrieve
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the name of. This is an optional parameter that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync may be NULL. It will be NULL for device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers. It will also be NULL for a bus drivers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that wish to retrieve the name of the bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller. It will not be NULL for a bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver that wishes to retrieve the name of a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync child controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Language[in] A pointer to a Null-terminated ASCII string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync array indicating the language. This is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync language of the driver name that the caller is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requesting, and it must match one of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync languages specified in SupportedLanguages. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of languages supported by a driver is up
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the driver writer. Language is specified in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RFC 4646 or ISO 639-2 language code format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerName[out] A pointer to the Unicode string to return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Unicode string is the name of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandle in the language specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language from the point of view of the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Unicode string for the user readable name in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This was returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Language is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerName is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This is not currently
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync managing the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and ChildHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDiskIoComponentNameGetControllerName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_COMPONENT_NAME_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ChildHandle OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **ControllerName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif