summaryrefslogtreecommitdiff
path: root/lib/uefi.c3l/uefi/protocol/file.c3i
blob: 72c56d7c2f321ae89a4c0536d96bc1747546a129 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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;
}