summaryrefslogtreecommitdiff
path: root/lib/uefi.c3l/uefi/protocol/file.c3i
diff options
context:
space:
mode:
Diffstat (limited to 'lib/uefi.c3l/uefi/protocol/file.c3i')
-rw-r--r--lib/uefi.c3l/uefi/protocol/file.c3i59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/uefi.c3l/uefi/protocol/file.c3i b/lib/uefi.c3l/uefi/protocol/file.c3i
new file mode 100644
index 0000000..72c56d7
--- /dev/null
+++ b/lib/uefi.c3l/uefi/protocol/file.c3i
@@ -0,0 +1,59 @@
+module uefi::protocol::file;
+
+import uefi;
+
+alias FileOpenFn = fn EfiStatus (FileProtocol*, FileProtocol** newHandle, WChar* fileName, ulong openMode, ulong attributes);
+alias FileCloseFn = fn EfiStatus (FileProtocol*);
+alias FileDeleteFn = fn EfiStatus (FileProtocol*);
+alias FileReadFn = fn EfiStatus (FileProtocol*, usz*, void*);
+alias FileWriteFn = fn EfiStatus (FileProtocol*, usz*, void*);
+alias FileGetPositionFn = fn EfiStatus (FileProtocol*, ulong*);
+alias FileSetPositionFn = fn EfiStatus (FileProtocol*, ulong);
+alias FileGetInfoFn = fn EfiStatus (FileProtocol*, EfiGuid*, usz*, void*);
+alias FileSetInfoFn = fn EfiStatus (FileProtocol*, EfiGuid*, usz, void*);
+alias FileFlushFn = fn EfiStatus (FileProtocol*);
+
+alias FileSystemOpenVolumeFn = fn EfiStatus (FileSystemProtocol*, FileProtocol**);
+
+struct FileProtocol {
+ ulong revision;
+ FileOpenFn _open;
+ FileCloseFn _close;
+ FileDeleteFn _delete;
+ FileReadFn _read;
+ FileWriteFn _write;
+ FileGetPositionFn _get_position;
+ FileSetPositionFn _set_position;
+ FileGetInfoFn _get_info;
+ FileSetInfoFn _set_info;
+ FileFlushFn _flush;
+ void* _open_ex;
+ void* _read_ex;
+ void* _write_ex;
+ void* _flush_ex;
+}
+
+struct FileSystemProtocol {
+ ulong revision;
+ FileSystemOpenVolumeFn _open_volume;
+}
+
+struct FileInfo {
+ ulong size;
+ ulong fileSize;
+ ulong physicalSize;
+ EfiTime createTime;
+ EfiTime lastAccessTime;
+ EfiTime editTime;
+ ulong attribute;
+ WChar[*] filename;
+}
+
+struct FileSystemInfo {
+ ulong size;
+ bool readOnly;
+ ulong volumeSize;
+ ulong freeSpace;
+ uint blockSize;
+ WChar[*] volumeLabel;
+}