| /** @file | |
| The internal header file of FvSimpleFileSystem driver. | |
| Copyright (c) 2014, ARM Limited. All rights reserved. | |
| Copyright (c) 2014 - 2018, 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 __FVFS_INTERNAL_H__ | |
| #define __FVFS_INTERNAL_H__ | |
| #include <Uefi.h> | |
| #include <PiDxe.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/DevicePathLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/PrintLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/UefiLib.h> | |
| #include <Protocol/DriverBinding.h> | |
| #include <Protocol/FirmwareVolume2.h> | |
| #include <Protocol/SimpleFileSystem.h> | |
| #include <Protocol/UnicodeCollation.h> | |
| #include <Guid/FileSystemInfo.h> | |
| #include <Guid/FileInfo.h> | |
| #include <Guid/FileSystemVolumeLabelInfo.h> | |
| typedef struct _FV_FILESYSTEM_FILE FV_FILESYSTEM_FILE; | |
| typedef struct _FV_FILESYSTEM_FILE_INFO FV_FILESYSTEM_FILE_INFO; | |
| typedef struct _FV_FILESYSTEM_INSTANCE FV_FILESYSTEM_INSTANCE; | |
| // | |
| // Struct representing an instance of the "filesystem". There will be one of | |
| // these structs per FV. | |
| // | |
| struct _FV_FILESYSTEM_INSTANCE { | |
| UINT32 Signature; | |
| LIST_ENTRY FileInfoHead; | |
| LIST_ENTRY FileHead; | |
| EFI_DRIVER_BINDING_PROTOCOL *DriverBinding; | |
| EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; | |
| EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFs; | |
| FV_FILESYSTEM_FILE *Root; | |
| CHAR16 *VolumeLabel; | |
| }; | |
| // | |
| // Struct representing a opening file. Each opening operation on file will | |
| // create such an instance except for the "root directory", which will only | |
| // be created once for each FV. | |
| // | |
| struct _FV_FILESYSTEM_FILE { | |
| UINT32 Signature; | |
| LIST_ENTRY Link; | |
| FV_FILESYSTEM_FILE_INFO *DirReadNext; | |
| FV_FILESYSTEM_INSTANCE *Instance; | |
| EFI_FILE_PROTOCOL FileProtocol; | |
| FV_FILESYSTEM_FILE_INFO *FvFileInfo; | |
| UINT64 Position; | |
| }; | |
| // | |
| // Struct representing the info of a file. | |
| // | |
| struct _FV_FILESYSTEM_FILE_INFO { | |
| UINT32 Signature; | |
| LIST_ENTRY Link; | |
| EFI_GUID NameGuid; | |
| EFI_FV_FILETYPE Type; | |
| EFI_FILE_INFO FileInfo; | |
| }; | |
| #define FVFS_FILE_SIGNATURE SIGNATURE_32 ('f', 'v', 'f', 'i') | |
| #define FVFS_FILE_INFO_SIGNATURE SIGNATURE_32 ('f', 'v', 'i', 'n') | |
| #define FVFS_INSTANCE_SIGNATURE SIGNATURE_32 ('f', 'v', 'f', 's') | |
| #define FVFS_INSTANCE_FROM_SIMPLE_FS_THIS(This) CR ( \ | |
| This, \ | |
| FV_FILESYSTEM_INSTANCE, \ | |
| SimpleFs, \ | |
| FVFS_INSTANCE_SIGNATURE \ | |
| ) | |
| #define FVFS_FILE_FROM_FILE_THIS(This) CR ( \ | |
| This, \ | |
| FV_FILESYSTEM_FILE, \ | |
| FileProtocol, \ | |
| FVFS_FILE_SIGNATURE \ | |
| ) | |
| #define FVFS_FILE_INFO_FROM_LINK(This) CR ( \ | |
| This, \ | |
| FV_FILESYSTEM_FILE_INFO, \ | |
| Link, \ | |
| FVFS_FILE_INFO_SIGNATURE \ | |
| ) | |
| #define FVFS_FILE_FROM_LINK(FileLink) CR (FileLink, FV_FILESYSTEM_FILE, Link, FVFS_FILE_SIGNATURE) | |
| #define FVFS_GET_FIRST_FILE(Instance) FVFS_FILE_FROM_LINK (GetFirstNode (&Instance->FileHead)) | |
| #define FVFS_GET_FIRST_FILE_INFO(Instance) FVFS_FILE_INFO_FROM_LINK (GetFirstNode (&Instance->FileInfoHead)) | |
| #define FV_FILETYPE_IS_EXECUTABLE(Type) ((Type) == EFI_FV_FILETYPE_PEIM || \ | |
| (Type) == EFI_FV_FILETYPE_DRIVER || \ | |
| (Type) == EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER || \ | |
| (Type) == EFI_FV_FILETYPE_APPLICATION) | |
| /** | |
| Open the root directory on a volume. | |
| @param This A pointer to the volume to open the root directory. | |
| @param RootFile A pointer to the location to return the opened file handle for the | |
| root directory. | |
| @retval EFI_SUCCESS The device was opened. | |
| @retval EFI_UNSUPPORTED This volume does not support the requested file system type. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_ACCESS_DENIED The service denied access to the file. | |
| @retval EFI_OUT_OF_RESOURCES The volume was not opened due to lack of resources. | |
| @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no | |
| longer supported. Any existing file handles for this volume are | |
| no longer valid. To access the files on the new medium, the | |
| volume must be reopened with OpenVolume(). | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemOpenVolume ( | |
| IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, | |
| OUT EFI_FILE_PROTOCOL **RootFile | |
| ); | |
| /** | |
| Test to see if this driver supports ControllerHandle. | |
| @param DriverBinding Protocol instance pointer. | |
| @param ControllerHandle Handle of device to test | |
| @param RemainingDevicePath Optional parameter use to pick a specific child | |
| device to start. | |
| @retval EFI_SUCCESS This driver supports this device | |
| @retval EFI_ALREADY_STARTED This driver is already running on this device | |
| @retval other This driver does not support this device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemDriverSupported ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, | |
| IN EFI_HANDLE ControllerHandle, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL | |
| ); | |
| /** | |
| Start this driver on ControllerHandle by opening a FV protocol and | |
| installing a SimpleFileSystem protocol on ControllerHandle. | |
| @param DriverBinding Protocol instance pointer. | |
| @param ControllerHandle Handle of device to bind driver to | |
| @param RemainingDevicePath Optional parameter use to pick a specific child | |
| device to start. | |
| @retval EFI_SUCCESS This driver is added to ControllerHandle | |
| @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle | |
| @retval other This driver does not support this device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemDriverStart ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, | |
| IN EFI_HANDLE ControllerHandle, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL | |
| ); | |
| /** | |
| Stop this driver on ControllerHandle by removing SimpleFileSystem protocol and closing | |
| the FV protocol on ControllerHandle. | |
| @param DriverBinding Protocol instance pointer. | |
| @param ControllerHandle Handle of device to stop driver on | |
| @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of | |
| children is zero stop the entire bus driver. | |
| @param ChildHandleBuffer List of Child Handles to Stop. | |
| @retval EFI_SUCCESS This driver is removed ControllerHandle | |
| @retval other This driver was not removed from this device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemDriverStop ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, | |
| IN EFI_HANDLE ControllerHandle, | |
| IN UINTN NumberOfChildren, | |
| IN EFI_HANDLE *ChildHandleBuffer OPTIONAL | |
| ); | |
| /** | |
| Opens a new file relative to the source file's location. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle to the source location. This would typically be an open | |
| handle to a directory. | |
| @param NewHandle A pointer to the location to return the opened handle for the new | |
| file. | |
| @param FileName The Null-terminated string of the name of the file to be opened. | |
| The file name may contain the following path modifiers: "\", ".", | |
| and "..". | |
| @param OpenMode The mode to open the file. The only valid combinations that the | |
| file may be opened with are: Read, Read/Write, or Create/Read/Write. | |
| @param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the | |
| attribute bits for the newly created file. | |
| @retval EFI_SUCCESS The file was opened. | |
| @retval EFI_NOT_FOUND The specified file could not be found on the device. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no | |
| longer supported. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write | |
| when the media is write-protected. | |
| @retval EFI_ACCESS_DENIED The service denied access to the file. | |
| @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. | |
| @retval EFI_VOLUME_FULL The volume is full. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemOpen ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| OUT EFI_FILE_PROTOCOL **NewHandle, | |
| IN CHAR16 *FileName, | |
| IN UINT64 OpenMode, | |
| IN UINT64 Attributes | |
| ); | |
| /** | |
| Closes a specified file handle. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle to close. | |
| @retval EFI_SUCCESS The file was closed. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemClose ( | |
| IN EFI_FILE_PROTOCOL *This | |
| ); | |
| /** | |
| Reads data from a file. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle to read data from. | |
| @param BufferSize On input, the size of the Buffer. On output, the amount of data | |
| returned in Buffer. In both cases, the size is measured in bytes. | |
| @param Buffer The buffer into which the data is read. | |
| @retval EFI_SUCCESS Data was read. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_DEVICE_ERROR An attempt was made to read from a deleted file. | |
| @retval EFI_DEVICE_ERROR On entry, the current file position is beyond the end of the file. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory | |
| entry. BufferSize has been updated with the size | |
| needed to complete the request. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemRead ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| IN OUT UINTN *BufferSize, | |
| OUT VOID *Buffer | |
| ); | |
| /** | |
| Writes data to a file. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle to write data to. | |
| @param BufferSize On input, the size of the Buffer. On output, the amount of data | |
| actually written. In both cases, the size is measured in bytes. | |
| @param Buffer The buffer of data to write. | |
| @retval EFI_SUCCESS Data was written. | |
| @retval EFI_UNSUPPORTED Writes to open directory files are not supported. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_DEVICE_ERROR An attempt was made to write to a deleted file. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_WRITE_PROTECTED The file or medium is write-protected. | |
| @retval EFI_ACCESS_DENIED The file was opened read only. | |
| @retval EFI_VOLUME_FULL The volume is full. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemWrite ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| IN OUT UINTN *BufferSize, | |
| IN VOID *Buffer | |
| ); | |
| /** | |
| Returns a file's current position. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle to get the current position on. | |
| @param Position The address to return the file's current position value. | |
| @retval EFI_SUCCESS The position was returned. | |
| @retval EFI_UNSUPPORTED The request is not valid on open directories. | |
| @retval EFI_DEVICE_ERROR An attempt was made to get the position from a deleted file. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemGetPosition ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| OUT UINT64 *Position | |
| ); | |
| /** | |
| Sets a file's current position. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the | |
| file handle to set the requested position on. | |
| @param Position The byte position from the start of the file to set. | |
| @retval EFI_SUCCESS The position was set. | |
| @retval EFI_UNSUPPORTED The seek request for nonzero is not valid on open | |
| directories. | |
| @retval EFI_DEVICE_ERROR An attempt was made to set the position of a deleted file. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemSetPosition ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| IN UINT64 Position | |
| ); | |
| /** | |
| Flushes all modified data associated with a file to a device. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle to flush. | |
| @retval EFI_SUCCESS The data was flushed. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_WRITE_PROTECTED The file or medium is write-protected. | |
| @retval EFI_ACCESS_DENIED The file was opened read-only. | |
| @retval EFI_VOLUME_FULL The volume is full. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemFlush ( | |
| IN EFI_FILE_PROTOCOL *This | |
| ); | |
| /** | |
| Close and delete the file handle. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the | |
| handle to the file to delete. | |
| @retval EFI_SUCCESS The file was closed and deleted, and the handle was closed. | |
| @retval EFI_WARN_DELETE_FAILURE The handle was closed, but the file was not deleted. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemDelete ( | |
| IN EFI_FILE_PROTOCOL *This | |
| ); | |
| /** | |
| Returns information about a file. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle the requested information is for. | |
| @param InformationType The type identifier for the information being requested. | |
| @param BufferSize On input, the size of Buffer. On output, the amount of data | |
| returned in Buffer. In both cases, the size is measured in bytes. | |
| @param Buffer A pointer to the data buffer to return. The buffer's type is | |
| indicated by InformationType. | |
| @retval EFI_SUCCESS The information was returned. | |
| @retval EFI_UNSUPPORTED The InformationType is not known. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory entry. | |
| BufferSize has been updated with the size needed to complete | |
| the request. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemGetInfo ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| IN EFI_GUID *InformationType, | |
| IN OUT UINTN *BufferSize, | |
| OUT VOID *Buffer | |
| ); | |
| /** | |
| Sets information about a file. | |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
| handle the information is for. | |
| @param InformationType The type identifier for the information being set. | |
| @param BufferSize The size, in bytes, of Buffer. | |
| @param Buffer A pointer to the data buffer to write. The buffer's type is | |
| indicated by InformationType. | |
| @retval EFI_SUCCESS The information was set. | |
| @retval EFI_UNSUPPORTED The InformationType is not known. | |
| @retval EFI_NO_MEDIA The device has no medium. | |
| @retval EFI_DEVICE_ERROR The device reported an error. | |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. | |
| @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_INFO_ID and the media is | |
| read-only. | |
| @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_PROTOCOL_SYSTEM_INFO_ID | |
| and the media is read only. | |
| @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_SYSTEM_VOLUME_LABEL_ID | |
| and the media is read-only. | |
| @retval EFI_ACCESS_DENIED An attempt is made to change the name of a file to a | |
| file that is already present. | |
| @retval EFI_ACCESS_DENIED An attempt is being made to change the EFI_FILE_DIRECTORY | |
| Attribute. | |
| @retval EFI_ACCESS_DENIED An attempt is being made to change the size of a directory. | |
| @retval EFI_ACCESS_DENIED InformationType is EFI_FILE_INFO_ID and the file was opened | |
| read-only and an attempt is being made to modify a field | |
| other than Attribute. | |
| @retval EFI_VOLUME_FULL The volume is full. | |
| @retval EFI_BAD_BUFFER_SIZE BufferSize is smaller than the size of the type indicated | |
| by InformationType. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemSetInfo ( | |
| IN EFI_FILE_PROTOCOL *This, | |
| IN EFI_GUID *InformationType, | |
| IN UINTN BufferSize, | |
| IN VOID *Buffer | |
| ); | |
| /** | |
| Get the size of the buffer that will be returned by FvFsReadFile. | |
| @param FvProtocol A pointer to the EFI_FIRMWARE_VOLUME2_PROTOCOL instance. | |
| @param FvFileInfo A pointer to the FV_FILESYSTEM_FILE_INFO instance that is a struct | |
| representing a file's info. | |
| @retval EFI_SUCCESS The file size was gotten correctly. | |
| @retval Others The file size wasn't gotten correctly. | |
| **/ | |
| EFI_STATUS | |
| FvFsGetFileSize ( | |
| IN EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol, | |
| IN OUT FV_FILESYSTEM_FILE_INFO *FvFileInfo | |
| ); | |
| /** | |
| Retrieves a Unicode string that is the user readable name of the driver. | |
| This function retrieves the user readable name of a driver in the form of a | |
| Unicode string. If the driver specified by This has a user readable name in | |
| the language specified by Language, then a pointer to the driver name is | |
| returned in DriverName, and EFI_SUCCESS is returned. If the driver specified | |
| by This does not support the language specified by Language, | |
| then EFI_UNSUPPORTED is returned. | |
| @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or | |
| EFI_COMPONENT_NAME_PROTOCOL instance. | |
| @param Language[in] A pointer to a Null-terminated ASCII string | |
| array indicating the language. This is the | |
| language of the driver name that the caller is | |
| requesting, and it must match one of the | |
| languages specified in SupportedLanguages. The | |
| number of languages supported by a driver is up | |
| to the driver writer. Language is specified | |
| in RFC 4646 or ISO 639-2 language code format. | |
| @param DriverName[out] A pointer to the Unicode string to return. | |
| This Unicode string is the name of the | |
| driver specified by This in the language | |
| specified by Language. | |
| @retval EFI_SUCCESS The Unicode string for the Driver specified by | |
| This and the language specified by Language was | |
| returned in DriverName. | |
| @retval EFI_INVALID_PARAMETER Language is NULL. | |
| @retval EFI_INVALID_PARAMETER DriverName is NULL. | |
| @retval EFI_UNSUPPORTED The driver specified by This does not support | |
| the language specified by Language. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemComponentNameGetDriverName ( | |
| IN EFI_COMPONENT_NAME_PROTOCOL *This, | |
| IN CHAR8 *Language, | |
| OUT CHAR16 **DriverName | |
| ); | |
| /** | |
| Retrieves a Unicode string that is the user readable name of the controller | |
| that is being managed by a driver. | |
| This function retrieves the user readable name of the controller specified by | |
| ControllerHandle and ChildHandle in the form of a Unicode string. If the | |
| driver specified by This has a user readable name in the language specified by | |
| Language, then a pointer to the controller name is returned in ControllerName, | |
| and EFI_SUCCESS is returned. If the driver specified by This is not currently | |
| managing the controller specified by ControllerHandle and ChildHandle, | |
| then EFI_UNSUPPORTED is returned. If the driver specified by This does not | |
| support the language specified by Language, then EFI_UNSUPPORTED is returned. | |
| @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or | |
| EFI_COMPONENT_NAME_PROTOCOL instance. | |
| @param ControllerHandle[in] 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[in] 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 a bus drivers | |
| that wish to retrieve the name of the bus | |
| controller. It will not be NULL for a bus | |
| driver that wishes to retrieve the name of a | |
| child controller. | |
| @param Language[in] A pointer to a Null-terminated ASCII string | |
| array indicating the language. This is the | |
| language of the driver name that the caller is | |
| requesting, and it must match one of the | |
| languages specified in SupportedLanguages. The | |
| number of languages supported by a driver is up | |
| to the driver writer. Language is specified in | |
| RFC 4646 or ISO 639-2 language code format. | |
| @param ControllerName[out] A pointer to the Unicode string to return. | |
| This Unicode string is the name of the | |
| controller specified by ControllerHandle and | |
| ChildHandle in the language specified by | |
| Language from the point of view of the driver | |
| specified by This. | |
| @retval EFI_SUCCESS The Unicode string for the user readable name in | |
| the language specified by Language for the | |
| driver specified by This was returned in | |
| DriverName. | |
| @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. | |
| @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid | |
| EFI_HANDLE. | |
| @retval EFI_INVALID_PARAMETER Language is NULL. | |
| @retval EFI_INVALID_PARAMETER ControllerName is NULL. | |
| @retval EFI_UNSUPPORTED The driver specified by This is not currently | |
| managing the controller specified by | |
| ControllerHandle and ChildHandle. | |
| @retval EFI_UNSUPPORTED The driver specified by This does not support | |
| the language specified by Language. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FvSimpleFileSystemComponentNameGetControllerName ( | |
| IN EFI_COMPONENT_NAME_PROTOCOL *This, | |
| IN EFI_HANDLE ControllerHandle, | |
| IN EFI_HANDLE ChildHandle OPTIONAL, | |
| IN CHAR8 *Language, | |
| OUT CHAR16 **ControllerName | |
| ); | |
| extern EFI_UNICODE_COLLATION_PROTOCOL *mUnicodeCollation; | |
| extern EFI_FILE_PROTOCOL mFileSystemTemplate; | |
| extern EFI_COMPONENT_NAME_PROTOCOL gFvSimpleFileSystemComponentName; | |
| extern EFI_COMPONENT_NAME2_PROTOCOL gFvSimpleFileSystemComponentName2; | |
| #endif |