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