blob: 4a66ce294988d0986a42a0a4b3e15301f56696f3 [file] [log] [blame]
//! File Protocol
//!
//! Provides an interface to interact with both files and directories. This protocol is typically
//! obtained via an EFI_SIMPLE_FILE_SYSTEM protocol or via another EFI_FILE_PROTOCOL.
pub const REVISION: u64 = 0x0000_0000_0001_0000u64;
pub const REVISION2: u64 = 0x0000_0000_0002_0000u64;
pub const LATEST_REVISION: u64 = REVISION2;
pub const MODE_READ: u64 = 0x0000000000000001u64;
pub const MODE_WRITE: u64 = 0x0000000000000002u64;
pub const MODE_CREATE: u64 = 0x8000000000000000u64;
pub const READ_ONLY: u64 = 0x0000000000000001u64;
pub const HIDDEN: u64 = 0x0000000000000002u64;
pub const SYSTEM: u64 = 0x0000000000000004u64;
pub const RESERVED: u64 = 0x0000000000000008u64;
pub const DIRECTORY: u64 = 0x0000000000000010u64;
pub const ARCHIVE: u64 = 0x0000000000000020u64;
pub const VALID_ATTR: u64 = 0x0000000000000037u64;
pub const INFO_ID: crate::base::Guid = crate::base::Guid::from_fields(
0x09576e92,
0x6d3f,
0x11d2,
0x8e,
0x39,
&[0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b],
);
pub const SYSTEM_INFO_ID: crate::base::Guid = crate::base::Guid::from_fields(
0x09576e93,
0x6d3f,
0x11d2,
0x8e,
0x39,
&[0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b],
);
pub const SYSTEM_VOLUME_LABEL_ID: crate::base::Guid = crate::base::Guid::from_fields(
0xdb47d7d3,
0xfe81,
0x11d3,
0x9a,
0x35,
&[0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d],
);
#[repr(C)]
#[derive(Clone, Copy, Debug)]
pub struct IoToken {
pub event: crate::base::Event,
pub status: crate::base::Status,
pub buffer_size: usize,
pub buffer: *mut core::ffi::c_void,
}
#[repr(C)]
#[derive(Clone, Copy, Debug)]
pub struct Info<const N: usize = 0> {
pub size: u64,
pub file_size: u64,
pub physical_size: u64,
pub create_time: crate::system::Time,
pub last_access_time: crate::system::Time,
pub modification_time: crate::system::Time,
pub attribute: u64,
pub file_name: [crate::base::Char16; N],
}
#[repr(C)]
#[derive(Clone, Copy, Debug)]
pub struct SystemInfo<const N: usize = 0> {
pub size: u64,
pub read_only: crate::base::Boolean,
pub volume_size: u64,
pub free_space: u64,
pub block_size: u32,
pub volume_label: [crate::base::Char16; N],
}
#[repr(C)]
#[derive(Clone, Copy, Debug)]
pub struct SystemVolumeLabel<const N: usize = 0> {
pub volume_label: [crate::base::Char16; N],
}
pub type ProtocolOpen = eficall! {fn(
*mut Protocol,
*mut *mut Protocol,
*mut crate::base::Char16,
u64,
u64,
) -> crate::base::Status};
pub type ProtocolClose = eficall! {fn(
*mut Protocol,
) -> crate::base::Status};
pub type ProtocolDelete = eficall! {fn(
*mut Protocol,
) -> crate::base::Status};
pub type ProtocolRead = eficall! {fn(
*mut Protocol,
*mut usize,
*mut core::ffi::c_void,
) -> crate::base::Status};
pub type ProtocolWrite = eficall! {fn(
*mut Protocol,
*mut usize,
*mut core::ffi::c_void,
) -> crate::base::Status};
pub type ProtocolGetPosition = eficall! {fn(
*mut Protocol,
*mut u64,
) -> crate::base::Status};
pub type ProtocolSetPosition = eficall! {fn(
*mut Protocol,
u64,
) -> crate::base::Status};
pub type ProtocolGetInfo = eficall! {fn(
*mut Protocol,
*mut crate::base::Guid,
*mut usize,
*mut core::ffi::c_void,
) -> crate::base::Status};
pub type ProtocolSetInfo = eficall! {fn(
*mut Protocol,
*mut crate::base::Guid,
usize,
*mut core::ffi::c_void,
) -> crate::base::Status};
pub type ProtocolFlush = eficall! {fn(
*mut Protocol,
) -> crate::base::Status};
pub type ProtocolOpenEx = eficall! {fn(
*mut Protocol,
*mut *mut Protocol,
*mut crate::base::Char16,
u64,
u64,
*mut IoToken,
) -> crate::base::Status};
pub type ProtocolReadEx = eficall! {fn(
*mut Protocol,
*mut IoToken,
) -> crate::base::Status};
pub type ProtocolWriteEx = eficall! {fn(
*mut Protocol,
*mut IoToken,
) -> crate::base::Status};
pub type ProtocolFlushEx = eficall! {fn(
*mut Protocol,
*mut IoToken,
) -> crate::base::Status};
#[repr(C)]
pub struct Protocol {
pub revision: u64,
pub open: ProtocolOpen,
pub close: ProtocolClose,
pub delete: ProtocolDelete,
pub read: ProtocolRead,
pub write: ProtocolWrite,
pub get_position: ProtocolGetPosition,
pub set_position: ProtocolSetPosition,
pub get_info: ProtocolGetInfo,
pub set_info: ProtocolSetInfo,
pub flush: ProtocolFlush,
pub open_ex: ProtocolOpenEx,
pub read_ex: ProtocolReadEx,
pub write_ex: ProtocolWriteEx,
pub flush_ex: ProtocolFlushEx,
}