REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the EmbeddedPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			333 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			333 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Library functions that perform file IO. Memory buffer, file system, and
 | |
|   firmware volume operations are supported.
 | |
| 
 | |
|   Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
 | |
|   Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   Basic support for opening files on different device types. The device string
 | |
|   is in the form of DevType:Path. Current DevType is required as there is no
 | |
|   current mounted device concept of current working directory concept implement
 | |
|   by this library.
 | |
| 
 | |
|   Device names are case insensitive and only check the leading characters for
 | |
|   unique matches. Thus the following are all the same:
 | |
|     LoadFile0:
 | |
|     l0:
 | |
|     L0:
 | |
|     Lo0:
 | |
| 
 | |
|   Supported Device Names:
 | |
|   A0x1234:0x12 - A memory buffer starting at address 0x1234 for 0x12 bytes
 | |
|   l1:          - EFI LoadFile device one.
 | |
|   B0:          - EFI BlockIo zero.
 | |
|   fs3:         - EFI Simple File System device 3
 | |
|   Fv2:         - EFI Firmware Volume device 2
 | |
|   1.2.3.4:name - TFTP IP and file name
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_FILE_LIB_H__
 | |
| #define __EFI_FILE_LIB_H__
 | |
| 
 | |
| #include <PiDxe.h>
 | |
| #include <Protocol/FirmwareVolume2.h>
 | |
| #include <Protocol/FirmwareVolumeBlock.h>
 | |
| #include <Protocol/BlockIo.h>
 | |
| #include <Protocol/LoadFile.h>
 | |
| #include <Protocol/LoadFile.h>
 | |
| #include <Protocol/SimpleFileSystem.h>
 | |
| #include <Guid/FileInfo.h>
 | |
| #include <Guid/FileSystemInfo.h>
 | |
| 
 | |
| #define MAX_PATHNAME  0x200
 | |
| 
 | |
| /// Type of the file that has been opened
 | |
| typedef enum {
 | |
|   EfiOpenLoadFile,
 | |
|   EfiOpenMemoryBuffer,
 | |
|   EfiOpenFirmwareVolume,
 | |
|   EfiOpenFileSystem,
 | |
|   EfiOpenBlockIo,
 | |
|   EfiOpenTftp,
 | |
|   EfiOpenMaxValue
 | |
| } EFI_OPEN_FILE_TYPE;
 | |
| 
 | |
| /// Public information about the open file
 | |
| typedef struct {
 | |
|   UINTN                            Version;       // Common information
 | |
|   EFI_OPEN_FILE_TYPE               Type;
 | |
|   EFI_DEVICE_PATH_PROTOCOL         *DevicePath;
 | |
|   EFI_STATUS                       LastError;
 | |
|   EFI_HANDLE                       EfiHandle;
 | |
|   CHAR8                            *DeviceName;
 | |
|   CHAR8                            *FileName;
 | |
| 
 | |
|   UINT64                           CurrentPosition; // Information for Seek
 | |
|   UINT64                           MaxPosition;
 | |
| 
 | |
|   UINTN                            BaseOffset;    // Base offset for hexdump command
 | |
| 
 | |
|   UINTN                            Size;          // Valid for all types other than l#:
 | |
|   UINT8                            *Buffer;       // Information valid for A#:
 | |
| 
 | |
|   EFI_FIRMWARE_VOLUME2_PROTOCOL    *Fv;           // Information valid for Fv#:
 | |
|   EFI_GUID                         FvNameGuid;
 | |
|   EFI_SECTION_TYPE                 FvSectionType;
 | |
|   EFI_FV_FILETYPE                  FvType;
 | |
|   EFI_FV_FILE_ATTRIBUTES           FvAttributes;
 | |
| 
 | |
|   EFI_PHYSICAL_ADDRESS             FvStart;
 | |
|   UINTN                            FvSize;
 | |
|   UINTN                            FvHeaderSize;
 | |
| 
 | |
|   EFI_FILE                         *FsFileHandle; // Information valid for Fs#:
 | |
|   EFI_FILE_SYSTEM_INFO             *FsInfo;
 | |
|   EFI_FILE_INFO                    *FsFileInfo;
 | |
|   EFI_BLOCK_IO_MEDIA               *FsBlockIoMedia; // Information valid for Fs#: or B#:
 | |
|   EFI_BLOCK_IO_PROTOCOL            *FsBlockIo;      // Information valid for Fs#: or B#:
 | |
| 
 | |
|   UINTN                            DiskOffset;    // Information valid for B#:
 | |
| 
 | |
|   EFI_LOAD_FILE_PROTOCOL           *LoadFile;     // Information valid for l#:
 | |
| 
 | |
|   EFI_IP_ADDRESS                   ServerIp;      // Information valid for t:
 | |
|   BOOLEAN                          IsDirty;
 | |
|   BOOLEAN                          IsBufferValid;
 | |
| } EFI_OPEN_FILE;
 | |
| 
 | |
| /// Type of Seek to perform
 | |
| typedef enum {
 | |
|   EfiSeekStart,
 | |
|   EfiSeekCurrent,
 | |
|   EfiSeekEnd,
 | |
|   EfiSeekMax
 | |
| } EFI_SEEK_TYPE;
 | |
| 
 | |
| /**
 | |
|   Open a device named by PathName. The PathName includes a device name and
 | |
|   path separated by a :. See file header for more details on the PathName
 | |
|   syntax. There is no checking to prevent a file from being opened more than
 | |
|   one type.
 | |
| 
 | |
|   SectionType is only used to open an FV. Each file in an FV contains multiple
 | |
|   sections and only the SectionType section is opened.
 | |
| 
 | |
|   For any file that is opened with EfiOpen() must be closed with EfiClose().
 | |
| 
 | |
|   @param  PathName    Path to parse to open
 | |
|   @param  OpenMode    Same as EFI_FILE.Open()
 | |
|   @param  SectionType Section in FV to open.
 | |
| 
 | |
|   @return NULL  Open failed
 | |
|   @return Valid EFI_OPEN_FILE handle
 | |
| 
 | |
| **/
 | |
| EFI_OPEN_FILE *
 | |
| EfiOpen (
 | |
|   IN        CHAR8             *PathName,
 | |
|   IN  CONST UINT64            OpenMode,
 | |
|   IN  CONST EFI_SECTION_TYPE  SectionType
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EfiCopyFile (
 | |
|   IN        CHAR8  *DestinationFile,
 | |
|   IN        CHAR8  *SourceFile
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Use DeviceType and Index to form a valid PathName and try and open it.
 | |
| 
 | |
|   @param  DeviceType  Device type to open
 | |
|   @param  Index       Device Index to use. Zero relative.
 | |
| 
 | |
|   @return NULL  Open failed
 | |
|   @return Valid EFI_OPEN_FILE handle
 | |
| 
 | |
| **/
 | |
| EFI_OPEN_FILE  *
 | |
| EfiDeviceOpenByType (
 | |
|   IN  EFI_OPEN_FILE_TYPE  DeviceType,
 | |
|   IN  UINTN               Index
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Close a file handle opened by EfiOpen() and free all resources allocated by
 | |
|   EfiOpen().
 | |
| 
 | |
|   @param  Stream    Open File Handle
 | |
| 
 | |
|   @return EFI_INVALID_PARAMETER  Stream is not an Open File
 | |
|   @return EFI_SUCCESS            Steam closed
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EfiClose (
 | |
|   IN  EFI_OPEN_FILE  *Stream
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Return the size of the file represented by Stream. Also return the current
 | |
|   Seek position. Opening a file will enable a valid file size to be returned.
 | |
|   LoadFile is an exception as a load file size is set to zero.
 | |
| 
 | |
|   @param  Stream    Open File Handle
 | |
| 
 | |
|   @return 0         Stream is not an Open File or a valid LoadFile handle
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EfiTell (
 | |
|   IN  EFI_OPEN_FILE  *Stream,
 | |
|   OUT UINT64         *CurrentPosition   OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Seek to the Offset location in the file. LoadFile and FV device types do
 | |
|   not support EfiSeek(). It is not possible to grow the file size using
 | |
|   EfiSeek().
 | |
| 
 | |
|   SeekType defines how use Offset to calculate the new file position:
 | |
|   EfiSeekStart  : Position = Offset
 | |
|   EfiSeekCurrent: Position is Offset bytes from the current position
 | |
|   EfiSeekEnd    : Only supported if Offset is zero to seek to end of file.
 | |
| 
 | |
|   @param  Stream    Open File Handle
 | |
|   @param  Offset    Offset to seek too.
 | |
|   @param  SeekType  Type of seek to perform
 | |
| 
 | |
| 
 | |
|   @return EFI_INVALID_PARAMETER  Stream is not an Open File
 | |
|   @return EFI_UNSUPPORTED        LoadFile and FV does not support Seek
 | |
|   @return EFI_NOT_FOUND          Seek past the end of the file.
 | |
|   @return EFI_SUCCESS            Steam closed
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EfiSeek (
 | |
|   IN  EFI_OPEN_FILE  *Stream,
 | |
|   IN  EFI_LBA        Offset,
 | |
|   IN  EFI_SEEK_TYPE  SeekType
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Read BufferSize bytes from the current location in the file. For load file
 | |
|   and FV case you must read the entire file.
 | |
| 
 | |
|   @param  Stream      Open File Handle
 | |
|   @param  Buffer      Caller allocated buffer.
 | |
|   @param  BufferSize  Size of buffer in bytes.
 | |
| 
 | |
| 
 | |
|   @return EFI_SUCCESS           Stream is not an Open File
 | |
|   @return EFI_END_OF_FILE Tried to read past the end of the file
 | |
|   @return EFI_INVALID_PARAMETER Stream is not an open file handle
 | |
|   @return EFI_BUFFER_TOO_SMALL  Buffer is not big enough to do the read
 | |
|   @return "other"               Error returned from device read
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EfiRead (
 | |
|   IN  EFI_OPEN_FILE  *Stream,
 | |
|   OUT VOID           *Buffer,
 | |
|   OUT UINTN          *BufferSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Read the entire file into a buffer. This routine allocates the buffer and
 | |
|   returns it to the user full of the read data.
 | |
| 
 | |
|   This is very useful for load file where it's hard to know how big the buffer
 | |
|   must be.
 | |
| 
 | |
|   @param  Stream      Open File Handle
 | |
|   @param  Buffer      Pointer to buffer to return.
 | |
|   @param  BufferSize  Pointer to Size of buffer return..
 | |
| 
 | |
| 
 | |
|   @return EFI_SUCCESS           Stream is not an Open File
 | |
|   @return EFI_END_OF_FILE       Tried to read past the end of the file
 | |
|   @return EFI_INVALID_PARAMETER Stream is not an open file handle
 | |
|   @return EFI_BUFFER_TOO_SMALL  Buffer is not big enough to do the read
 | |
|   @return "other"               Error returned from device read
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EfiReadAllocatePool (
 | |
|   IN  EFI_OPEN_FILE  *Stream,
 | |
|   OUT VOID           **Buffer,
 | |
|   OUT UINTN          *BufferSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Write data back to the file.
 | |
| 
 | |
|   @param  Stream      Open File Handle
 | |
|   @param  Buffer      Pointer to buffer to return.
 | |
|   @param  BufferSize  Pointer to Size of buffer return..
 | |
| 
 | |
| 
 | |
|   @return EFI_SUCCESS           Stream is not an Open File
 | |
|   @return EFI_END_OF_FILE       Tried to read past the end of the file
 | |
|   @return EFI_INVALID_PARAMETER Stream is not an open file handle
 | |
|   @return EFI_BUFFER_TOO_SMALL  Buffer is not big enough to do the read
 | |
|   @return "other"               Error returned from device write
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EfiWrite (
 | |
|   IN  EFI_OPEN_FILE  *Stream,
 | |
|   OUT VOID           *Buffer,
 | |
|   OUT UINTN          *BufferSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Return the number of devices of the current type active in the system
 | |
| 
 | |
|   @param  Type      Device type to check
 | |
| 
 | |
|   @return 0         Invalid type
 | |
| 
 | |
| **/
 | |
| UINTN
 | |
| EfiGetDeviceCounts (
 | |
|   IN  EFI_OPEN_FILE_TYPE  Type
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Set the Current Working Directory (CWD). If a call is made to EfiOpen () and
 | |
|   the path does not contain a device name, The CWD is prepended to the path.
 | |
| 
 | |
|   @param  Cwd     Current Working Directory to set
 | |
| 
 | |
| 
 | |
|   @return EFI_SUCCESS           CWD is set
 | |
|   @return EFI_INVALID_PARAMETER Cwd is not a valid device:path
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EfiSetCwd (
 | |
|   IN  CHAR8  *Cwd
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Set the Current Working Directory (CWD). If a call is made to EfiOpen () and
 | |
|   the path does not contain a device name, The CWD is prepended to the path.
 | |
| 
 | |
|   @param  Cwd     Current Working Directory
 | |
| 
 | |
| 
 | |
|   @return NULL    No CWD set
 | |
|   @return 'other' malloc'ed buffer contains CWD.
 | |
| 
 | |
| **/
 | |
| CHAR8 *
 | |
| EfiGetCwd (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| #endif
 |