123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- MODULE EFIFileProtocol; (** AUTHOR "Matthias Frei"; PURPOSE "EFI File Protocol"; *)
- IMPORT
- EFI, SYSTEM;
- CONST
- Revision* = 00010000H;
- (* Open Modes. Allowed combinations are Read, Read/Write, Create/Read/Write *)
- ModeRead* = 1H;
- ModeWrite* = 2H;
- ModeCreate* = MIN(HUGEINT);
- (* File Attributes *)
- ReadOnly* = 1H;
- Hidden *= 2H;
- System *= 4H;
- Reserved *= 8H;
- Directory *= 10H;
- FileArchive *= 20H;
- ValidAttr *= 37H;
- VAR
- FileInfoGUID- : EFI.GUID;
- FileSystemInfoGUID- : EFI.GUID;
- FileSystemVolumeInfoGUID- : EFI.GUID;
- TYPE Protocol*= POINTER TO ProtocolDescription;
- (* Open or create a new file. 'This' is a pointer to a protocol instance that is the file handle to the source location. This would
- typically be an open handle to a directory. A handle for the new file is returned to 'NewHandle'. The filename may include
- the path modifiers '\', '.' and '..'. If the filename starts with a '\' the relative location is the root directory. *)
- TYPE FileOpen* = PROCEDURE{WINAPI}(This : Protocol; VAR NewHandle : Protocol; CONST FileName : ARRAY OF EFI.Char16; OpenMode : EFI.Int64; Attributes : EFI.Int64) : EFI.Status;
- (* Close a specified handle. All dirty cached file data is flushed to the device, and the file is closed *)
- TYPE FileClose* = PROCEDURE{WINAPI}(This : Protocol) : EFI.Status;
- (* Close and delete a file *)
- TYPE FileDelete* = PROCEDURE{WINAPI}(This : Protocol) : EFI.Status;
- (* Read 'BufferSize' bytes. On success, the number bytes read is written to 'BufferSize' and the file position is updated.
- If 'This' is a directory, read the directory entry at the current file position. If this entry does not fit into the buffer BufferTooSmall
- is returned and the file position is not updated and 'BufferSize' is set to the size needed to read the entry. *)
- TYPE FileRead* = PROCEDURE{WINAPI}(This : Protocol; VAR BufferSize : EFI.Int; Buffer : ADDRESS) : EFI.Status;
- (* Write specified number of bytes to the file at the current file position. Current file position is advanced the actual number of
- bytes written, which is returned in 'BufferSize'. Direct writes to open directories are not supported *)
- TYPE FileWrite* = PROCEDURE{WINAPI}(This : Protocol; VAR BufferSize : EFI.Int; CONST Buffer : ARRAY OF SYSTEM.BYTE) : EFI.Status;
- (* Set the current file position. Only absolute position is supported with exception of FFFFFFFFFFFFFFFFH which sets the position
- to the end of the file. Seeking past the end of file is allowed (a subsequent write would grow the file. *)
- TYPE FileGetPosition* = PROCEDURE{WINAPI}(This : Protocol; VAR Position : EFI.Int64) : EFI.Status;
- TYPE FileSetPosition* = PROCEDURE{WINAPI}(This : Protocol; Position : EFI.Int64) : EFI.Status;
- TYPE FileGetInfo* = PROCEDURE{WINAPI}(This : Protocol; CONST InformationType : EFI.GUID; VAR BufferSize : EFI.Int; VAR Buffer : ARRAY OF SYSTEM.BYTE) : EFI.Status;
- TYPE FileSetInfo* = PROCEDURE{WINAPI}(This : Protocol; CONST InformationType : EFI.GUID; BufferSize : EFI.Int; CONST Buffer : ARRAY OF SYSTEM.BYTE) : EFI.Status;
- TYPE FileFlush* = PROCEDURE{WINAPI}(This : Protocol) : EFI.Status;
- TYPE ProtocolDescription*= RECORD(EFI.ProtocolDescription)
- Revision-: EFI.Int64;
- Open- : FileOpen;
- Close-: FileClose;
- Delete-: FileDelete;
- Read-: FileRead;
- Write-: FileWrite;
- GetPosition-: FileGetPosition;
- SetPosition-: FileSetPosition;
- GetInfo-: FileGetInfo;
- SetInfo-: FileSetInfo;
- Flush-: FileFlush;
- END;
- (* Information *)
- (* Note : the structs should have variable size! The FileName-field can NOT be CORRECTly mapped to Oberon. *)
- CONST MaxFileNameLength = 128;
- TYPE FileInfo* = RECORD
- Size-: EFI.Int64; (* size of the FileInfo RECORD, including the Null-terminated FileName string*)
- FileSize-: EFI.Int64; (* in bytes *)
- PhysicalSize-: EFI.Int64;
- CreateTime-: EFI.Time;
- LastAccessTime-: EFI.Time;
- ModificationTime-: EFI.Time;
- Attribute-: EFI.Int64;
- FileName-: ARRAY MaxFileNameLength OF EFI.Char16;
- END;
- (* Note : same here... *)
- TYPE FileSystemInfo* = RECORD
- Size-: EFI.Int64; (* size of the FileInfo RECORD, including the Null-terminated VolumeLabel string*)
- ReadOnly-: EFI.Boolean;
- VolumeSize-: EFI.Int64; (* in bytes *)
- FreeSpace-: EFI.Int64;
- BlockSize-: EFI.Int32;
- VolumeLabel-: ARRAY MaxFileNameLength OF EFI.Char16;
- END;
- (* Note : ... and here *)
- TYPE FileSystemVolumeInfo* = RECORD
- VolumeLabel-: ARRAY MaxFileNameLength OF EFI.Char16;
- END;
- BEGIN
- FileInfoGUID.Data1 := 09576E92H;
- FileInfoGUID.Data2 := 6D3FH;
- FileInfoGUID.Data3 := 11D2H;
- FileInfoGUID.Data4[0] := -72H; (*8EH;*)
- FileInfoGUID.Data4[1] := 39H;
- FileInfoGUID.Data4[2] := 00H;
- FileInfoGUID.Data4[3] := -60H; (*0A0H;*)
- FileInfoGUID.Data4[4] := -37H; (*0C9H;*)
- FileInfoGUID.Data4[5] := 69H;
- FileInfoGUID.Data4[6] := 72H;
- FileInfoGUID.Data4[7] := 3BH;
- FileSystemInfoGUID.Data1 := 09576E93H;
- FileSystemInfoGUID.Data2 := 6D3FH;
- FileSystemInfoGUID.Data3 := 11D2H;
- FileSystemInfoGUID.Data4[0] := -72H; (*8EH;*)
- FileSystemInfoGUID.Data4[1] := 39H;
- FileSystemInfoGUID.Data4[2] := 00H;
- FileSystemInfoGUID.Data4[3] := -60H; (*0A0H;*)
- FileSystemInfoGUID.Data4[4] := -37H; (*0C9H;*)
- FileSystemInfoGUID.Data4[5] := 69H;
- FileSystemInfoGUID.Data4[6] := 72H;
- FileSystemInfoGUID.Data4[7] := 3BH;
- FileSystemVolumeInfoGUID.Data1 := -24B8282DH; (*0DB47D7D3H*)
- FileSystemVolumeInfoGUID.Data2 := -17FH; (*0FE81H*)
- FileSystemVolumeInfoGUID.Data3 := 11D3H;
- FileSystemVolumeInfoGUID.Data4[0] := -66H; (*9AH;*)
- FileSystemVolumeInfoGUID.Data4[1] := 35H;
- FileSystemVolumeInfoGUID.Data4[2] := 00H;
- FileSystemVolumeInfoGUID.Data4[3] := -70H; (*090H;*)
- FileSystemVolumeInfoGUID.Data4[4] := 27H;
- FileSystemVolumeInfoGUID.Data4[5] := 3FH;
- FileSystemVolumeInfoGUID.Data4[6] := -3FH; (*0C1H*)
- FileSystemVolumeInfoGUID.Data4[7] := 4DH;
- END EFIFileProtocol.
|