uefi/
fs.rs

1use crate::prelude::*;
2use crate::time::Time;
3
4// Open modes
5pub const FILE_MODE_READ: u64 = 0x0000000000000001;
6pub const FILE_MODE_WRITE: u64 = 0x0000000000000002;
7pub const FILE_MODE_CREATE: u64 = 0x8000000000000000;
8
9// Attributes
10pub 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}