//! Disk I/O 2 Protocol //! //! Extends the Disk I/O protocol interface to enable non-blocking / //! asynchronous byte-oriented disk operation. pub const PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields( 0x151c8eae, 0x7f2c, 0x472c, 0x9e, 0x54, &[0x98, 0x28, 0x19, 0x4f, 0x6a, 0x88], ); pub const REVISION: u64 = 0x0000000000020000u64; #[repr(C)] #[derive(Clone, Copy, Debug)] pub struct Token { event: crate::base::Event, transaction_status: crate::base::Status, } pub type ProtocolCancel = eficall! {fn( *mut Protocol, ) -> crate::base::Status}; pub type ProtocolReadDiskEx = eficall! {fn( *mut Protocol, u32, u64, *mut Token, usize, *mut core::ffi::c_void, ) -> crate::base::Status}; pub type ProtocolWriteDiskEx = eficall! {fn( *mut Protocol, u32, u64, *mut Token, usize, *mut core::ffi::c_void, ) -> crate::base::Status}; pub type ProtocolFlushDiskEx = eficall! {fn( *mut Protocol, *mut Token, ) -> crate::base::Status}; #[repr(C)] pub struct Protocol { pub revision: u64, pub cancel: ProtocolCancel, pub read_disk_ex: ProtocolReadDiskEx, pub write_disk_ex: ProtocolWriteDiskEx, pub flush_disk_ex: ProtocolFlushDiskEx, }