1 use crate::{guid, Event, Guid, Status}; 2 use core::ffi::c_void; 3 4 #[derive(Debug)] 5 #[repr(C)] 6 pub struct DiskIoProtocol { 7 pub revision: u64, 8 pub read_disk: unsafe extern "efiapi" fn( 9 this: *const Self, 10 media_id: u32, 11 offset: u64, 12 buffer_size: usize, 13 buffer: *mut c_void, 14 ) -> Status, 15 pub write_disk: unsafe extern "efiapi" fn( 16 this: *mut Self, 17 media_id: u32, 18 offset: u64, 19 buffer_size: usize, 20 buffer: *const c_void, 21 ) -> Status, 22 } 23 24 impl DiskIoProtocol { 25 pub const GUID: Guid = guid!("ce345171-ba0b-11d2-8e4f-00a0c969723b"); 26 pub const REVISION: u64 = 0x00010000; 27 } 28 29 #[repr(C)] 30 #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)] 31 pub struct DiskIo2Token { 32 pub event: Event, 33 pub transaction_status: Status, 34 } 35 36 #[derive(Debug)] 37 #[repr(C)] 38 pub struct DiskIo2Protocol { 39 pub revision: u64, 40 pub cancel: unsafe extern "efiapi" fn(this: *mut Self) -> Status, 41 pub read_disk_ex: unsafe extern "efiapi" fn( 42 this: *const Self, 43 media_id: u32, 44 offset: u64, 45 token: *mut DiskIo2Token, 46 buffer_size: usize, 47 buffer: *mut c_void, 48 ) -> Status, 49 pub write_disk_ex: unsafe extern "efiapi" fn( 50 this: *mut Self, 51 media_id: u32, 52 offset: u64, 53 token: *mut DiskIo2Token, 54 buffer_size: usize, 55 buffer: *const c_void, 56 ) -> Status, 57 pub flush_disk_ex: 58 unsafe extern "efiapi" fn(this: *mut Self, token: *mut DiskIo2Token) -> Status, 59 } 60 61 impl DiskIo2Protocol { 62 pub const GUID: Guid = guid!("151c8eae-7f2c-472c-9e54-9828194f6a88"); 63 pub const REVISION: u64 = 0x00020000; 64 } 65