1 use crate::table::runtime; 2 use crate::{guid, Guid, Status}; 3 4 #[derive(Debug)] 5 #[repr(C)] 6 pub struct TimestampProtocol { 7 pub get_timestamp: unsafe extern "efiapi" fn() -> u64, 8 pub get_properties: unsafe extern "efiapi" fn(*mut TimestampProperties) -> Status, 9 } 10 11 impl TimestampProtocol { 12 pub const GUID: Guid = guid!("afbfde41-2e6e-4262-ba65-62b9236e5495"); 13 } 14 15 /// Properties of the timestamp counter. 16 #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)] 17 #[repr(C)] 18 pub struct TimestampProperties { 19 /// Timestamp counter frequency, in Hz. 20 pub frequency: u64, 21 22 /// The maximum value of the timestamp counter before it rolls over. For 23 /// example, a 24-bit counter would have an end value of `0xff_ffff`. 24 pub end_value: u64, 25 } 26 27 /// Properties of Reset Notification. 28 #[derive(Debug)] 29 #[repr(C)] 30 pub struct ResetNotificationProtocol { 31 pub register_reset_notify: 32 unsafe extern "efiapi" fn(this: *mut Self, reset_function: ResetSystemFn) -> Status, 33 pub unregister_reset_notify: 34 unsafe extern "efiapi" fn(this: *mut Self, reset_function: ResetSystemFn) -> Status, 35 } 36 37 impl ResetNotificationProtocol { 38 pub const GUID: Guid = guid!("9da34ae0-eaf9-4bbf-8ec3-fd60226c44be"); 39 } 40 41 /// Raw reset notification function, to be called if you register it when a ResetSystem() is executed. 42 pub type ResetSystemFn = unsafe extern "efiapi" fn( 43 rt: runtime::ResetType, 44 status: Status, 45 data_size: usize, 46 data: *const u8, 47 ); 48