alder_lake_bios/Insyde/InsydeModulePkg/Include/Ppi/FileAccessPei.h

347 lines
10 KiB
C

/** @file
The definition of USB Access PEI PPI.
;******************************************************************************
;* Copyright (c) 2014, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#ifndef _EFI_PEI_FILE_ACCESS_PPI_H_
#define _EFI_PEI_FILE_ACCESS_PPI_H_
#include <Uefi.h>
#define EFI_PEI_FILE_ACCESS_PPI_GUID \
{ \
0x7d1a7139, 0xf9a2, 0x41b6, { 0xaa, 0xd9, 0xf3, 0x7c, 0x8b, 0xcc, 0x86, 0xf4 } \
}
typedef struct _PEI_FILE_ACCESS_PPI PEI_FILE_ACCESS_PPI;
//
// API data structures
//
typedef VOID *PEI_FILE_HANDLE;
//
// File attributes
//
#define EFI_FILE_READ_ONLY 0x0000000000000001
#define EFI_FILE_HIDDEN 0x0000000000000002
#define EFI_FILE_SYSTEM 0x0000000000000004
#define EFI_FILE_RESERVIED 0x0000000000000008
#define EFI_FILE_DIRECTORY 0x0000000000000010
#define EFI_FILE_ARCHIVE 0x0000000000000020
#define EFI_FILE_VALID_ATTR 0x0000000000000037
//
// Open modes
//
#define EFI_FILE_MODE_READ 0x0000000000000001
#define EFI_FILE_MODE_WRITE 0x0000000000000002
#define EFI_FILE_MODE_CREATE 0x8000000000000000ULL
typedef enum {
ReadData,
ReadDirEntry,
ReadDirEntryBufferTooSmallOK
} PEI_FILE_READ_MODE;
typedef struct {
UINT64 Size;
UINT64 FileSize;
UINT64 PhysicalSize;
EFI_TIME CreateTime;
EFI_TIME LastAccessTime;
EFI_TIME ModificationTime;
UINT64 Attribute;
CHAR16 FileName[1]; // Null terminated unicode string
} PEI_FILE_INFO;
/**
Implement Openfile from one volume
if readmode, all volume will search
in write mode, open first volume
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] FileName File name in Unicode string
@param[out] Handle Get the File Handle.
@param[in] OpenMode Read, Write, Create mode
@param[in] Attributes These are the attribute bits for the newly created file.
@param[in] VolumnIndex The index number of the FAT volume
@retval EFI_SUCCESS File infomation is successfully returned
@retval EFI_INVALID_PARAMETER Invalid file handle
@retval EFI_BUFFER_TOO_SMALL The given Buffer size is too small
@retval EFI_DEVICE_ERROR Can't get root directory
@retval EFI_NOT_FOUND The specified file could not be found on the device.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_OPEN_FILE)(
IN PEI_FILE_ACCESS_PPI *This,
IN CHAR16 *FileName,
OUT PEI_FILE_HANDLE *Handle,
IN UINT64 OpenMode,
IN UINT8 Attributes,
IN UINTN VolumeIndex
);
/**
Read file data
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] Handle The File handle
@param[in] ReadMode File read mode in PEI_FILE_READ_MODE type
@param[in,out] BufferSize Input: the given buffer size
Output: the buffer size of the output buffer
@param[out] Buffer The pointer to the data buffer
@retval EFI_SUCCESS File data is successfully read
@retval EFI_INVALID_PARAMETER Unknown ReadMode given
@retval EFI_NOT_FOUND File not found
@retval EFI_DEVICE_ERROR Failed to access file
@retval EFI_OUT_OF_RESOURCES Out of memory
**/
typedef
EFI_STATUS
(EFIAPI *PEI_READ_FILE) (
IN PEI_FILE_ACCESS_PPI *This,
IN PEI_FILE_HANDLE Handle,
IN PEI_FILE_READ_MODE ReadMode,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
/**
Write data to file
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] Handle The File handle
@param[in] BufferSize Input: the given buffer size
@param[out] Buffer The pointer to the data buffer
@retval EFI_SUCCESS File data is successfully read
@retval EFI_INVALID_PARAMETER Unknown ReadMode given
@retval EFI_NOT_FOUND File not found
@retval EFI_DEVICE_ERROR Failed to access file
@retval EFI_OUT_OF_RESOURCES Out of memory
**/
typedef
EFI_STATUS
(EFIAPI *PEI_WRITE_FILE) (
IN PEI_FILE_ACCESS_PPI *This,
IN PEI_FILE_HANDLE Handle,
IN UINTN *BufferSize,
IN VOID *Buffer
);
/**
Close a file
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] Handle The File handle with PEI_FILE_HANDLE type
@retval EFI_SUCCESS The file is successfuly closed
@retval EFI_INVALID_PARAMETER The give file handle is invalid
**/
typedef
EFI_STATUS
(EFIAPI *PEI_CLOSE_FILE) (
IN PEI_FILE_ACCESS_PPI *This,
IN PEI_FILE_HANDLE Handle
);
/**
Change file position
@param[in] Handle The File handle with PEI_FILE_HANDLE type
@param[in] Position The file's position of the file.
@retval EFI_SUCCESS Set the info successfully.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SET_POSITION) (
IN PEI_FILE_HANDLE Handle,
IN UINT64 Position
);
/**
Get the file's position of the file.
@param[in] Handle The File handle with PEI_FILE_HANDLE type
@param[in] Position The file's position of the file.
@retval EFI_SUCCESS Get the info successfully.
@retval EFI_UNSUPPORTED The open file is not a file.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_GET_POSITION) (
IN PEI_FILE_HANDLE Handle,
OUT UINT64 *Position
);
/**
Get file information
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] Handle The File handle
@param[in,out] BufferSize Input: the given buffer size
Output: the buffer size of the output buffer
@param[out] Buffer The pointer to the PEI_FILE_INFO structure
@retval EFI_SUCCESS File infomation is successfully returned
@retval EFI_INVALID_PARAMETER Invalid file handle
@retval EFI_BUFFER_TOO_SMALL The given Buffer size is too small
**/
typedef
EFI_STATUS
(EFIAPI *PEI_GET_FILE_INFO) (
IN PEI_FILE_ACCESS_PPI *This,
IN PEI_FILE_HANDLE Handle,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
/**
Get FAT Volume Information
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] VolumeIndex The index number of the FAT volume
@param[in] BufferSize
@param[out] Buffer
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER
@retval EFI_BUFFER_TOO_SMALL
**/
typedef
EFI_STATUS
(EFIAPI *PEI_GET_VOLUME_INFO) (
IN PEI_FILE_ACCESS_PPI *This,
IN UINTN VolumeIndex,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
/**
Get number of FAT volumes
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@return Number of FAT volumes
**/
typedef
UINTN
(EFIAPI *PEI_GET_NUMBER_OF_VOLUMES) (
IN PEI_FILE_ACCESS_PPI *This
);
/**
Get the Block device info from PrivateData.
CRISIS RECOVERY must use this function.
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] Handle The File handle
@param[out] LogicalBlock Is this block a logical device?
@param[out] BlockDevNo Block index in PrivateData
@param[out] ParentDevNo ParentDev index in PrivateData
@param[out] BlockDeviceCount How many Block devices found.
@retval none
**/
typedef
VOID
(EFIAPI *PEI_GET_RECOVERY_BLOCK_INFO) (
IN PEI_FILE_ACCESS_PPI *This,
IN PEI_FILE_HANDLE Handle,
OUT BOOLEAN *LogicalBlock,
OUT UINTN *BlockDevNo,
OUT UINTN *ParentDevNo,
OUT UINTN *BlockDeviceCount
);
/**
Get the Block device type from PrivateData.
CRISIS RECOVERY must use this function.
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] BlockDevNo Block index in PrivateData
@param[out] LogicalBlock Is this block a logical device?
@param[out] BlockDevType Device Type
@retval none
**/
typedef
VOID
(EFIAPI *PEI_GET_RECOVERY_BLOCK_TYPE) (
IN PEI_FILE_ACCESS_PPI *This,
IN UINTN BlockDevNo,
OUT VOID *BlockDevType
);
/**
Get the parent block device Logical from PrivateData.
CRISIS RECOVERY must use this function.
@param[in] This Pointer to the PEI_FILE_ACCESS_PPI
@param[in] BlockDevNo Block index in PrivateData
@param[out] LogicalBlock Is this block a logical device?
@retval none
**/
typedef
VOID
(EFIAPI *PEI_GET_RECOVERY_LOGICAL) (
IN PEI_FILE_ACCESS_PPI *This,
IN UINTN *BlockDevNo,
OUT BOOLEAN *LogicalBlock
);
struct _PEI_FILE_ACCESS_PPI {
PEI_OPEN_FILE OpenFile;
PEI_READ_FILE ReadFile;
PEI_WRITE_FILE WriteFile;
PEI_CLOSE_FILE CloseFile;
PEI_SET_POSITION SetPosition;
PEI_GET_POSITION GetPosition;
PEI_GET_FILE_INFO GetFileInfo;
PEI_GET_VOLUME_INFO GetVolumeInfo;
PEI_GET_NUMBER_OF_VOLUMES GetNumberOfVolumes;
PEI_GET_RECOVERY_BLOCK_INFO GetRecoveryBlockInfo;
PEI_GET_RECOVERY_BLOCK_TYPE GetRecoveryBlockType;
PEI_GET_RECOVERY_LOGICAL GetRecoveryLogical;
};
extern EFI_GUID gPeiFileAccessPpiGuid;
#endif