1use crate::prelude::*;
2use crate::time::Time;
3
4pub const FILE_MODE_READ: u64 = 0x0000000000000001;
6pub const FILE_MODE_WRITE: u64 = 0x0000000000000002;
7pub const FILE_MODE_CREATE: u64 = 0x8000000000000000;
8
9pub const FILE_READ_ONLY: u64 = 0x01;
11pub const FILE_HIDDEN: u64 = 0x02;
12pub const FILE_SYSTEM: u64 = 0x04;
13pub const FILE_RESERVED: u64 = 0x08;
14pub const FILE_DIRECTORY: u64 = 0x10;
15pub const FILE_ARCHIVE: u64 = 0x20;
16
17#[repr(C)]
18pub struct SimpleFileSystem {
19 pub Revision: u64,
20 pub OpenVolume: extern "efiapi" fn(&mut SimpleFileSystem, Root: &mut *mut File) -> Status,
21}
22
23impl SimpleFileSystem {
24 pub const GUID: Guid = guid!("964e5b22-6459-11d2-8e39-00a0c969723b");
25}
26
27#[repr(C)]
28pub struct FileInfo {
29 pub Size: u64,
30 pub FileSize: u64,
31 pub PhysicalSize: u64,
32 pub CreateTime: Time,
33 pub LastAccessTime: Time,
34 pub ModificationTime: Time,
35 pub Attribute: u64,
36 pub FileName: [u16; 256],
37}
38
39impl Default for FileInfo {
40 fn default() -> Self {
41 FileInfo {
42 Size: Default::default(),
43 FileSize: Default::default(),
44 PhysicalSize: Default::default(),
45 CreateTime: Default::default(),
46 LastAccessTime: Default::default(),
47 ModificationTime: Default::default(),
48 Attribute: Default::default(),
49 FileName: [0; 256],
50 }
51 }
52}
53
54impl FileInfo {
55 pub const ID: Guid = guid!("09576e92-6d3f-11d2-8e39-00a0c969723b");
56}
57
58#[repr(C)]
59pub struct File {
60 pub Revision: u64,
61 pub Open: extern "efiapi" fn(
62 &mut File,
63 NewHandle: &mut *mut File,
64 FileName: *const u16,
65 OpenMode: u64,
66 Attributes: u64,
67 ) -> Status,
68 pub Close: extern "efiapi" fn(&mut File) -> Status,
69 pub Delete: extern "efiapi" fn(&mut File) -> Status,
70 pub Read: extern "efiapi" fn(&mut File, BufferSize: &mut usize, Buffer: *mut u8) -> Status,
71 pub Write: extern "efiapi" fn(&mut File, BufferSize: &mut usize, Buffer: *const u8) -> Status,
72 pub SetPosition: extern "efiapi" fn(&mut File, Position: u64) -> Status,
73 pub GetPosition: extern "efiapi" fn(&mut File, Position: &mut u64) -> Status,
74 pub GetInfo: extern "efiapi" fn(
75 &mut File,
76 InformationType: &Guid,
77 BufferSize: &mut usize,
78 Buffer: *mut u8,
79 ) -> Status,
80 pub SetInfo: extern "efiapi" fn(
81 &mut File,
82 InformationType: &Guid,
83 BufferSize: &mut usize,
84 Buffer: *const u8,
85 ) -> Status,
86 pub Flush: extern "efiapi" fn(&mut File) -> Status,
87}