@@ -59,7 +59,7 @@ pub struct BootServices {
5959 ) -> Status ,
6060 signal_event : usize ,
6161 close_event : usize ,
62- check_event : usize ,
62+ check_event : unsafe extern "efiapi" fn ( event : Event ) -> Status ,
6363
6464 // Protocol handlers
6565 install_protocol_interface : usize ,
@@ -337,7 +337,17 @@ impl BootServices {
337337 . into_with_val ( || event. assume_init ( ) )
338338 }
339339
340- /// Stops execution until an event is signaled
340+ /// Sets the trigger for `EventType::TIMER` event.
341+ pub fn set_timer ( & self , event : Event , trigger_time : TimerTrigger ) -> Result {
342+ let ( ty, time) = match trigger_time {
343+ TimerTrigger :: Cancel => ( 0 , 0 ) ,
344+ TimerTrigger :: Periodic ( hundreds_ns) => ( 1 , hundreds_ns) ,
345+ TimerTrigger :: Relative ( hundreds_ns) => ( 2 , hundreds_ns) ,
346+ } ;
347+ unsafe { ( self . set_timer ) ( event, ty, time) } . into ( )
348+ }
349+
350+ /// Stops execution until an event is signaled.
341351 ///
342352 /// This function must be called at priority level `Tpl::APPLICATION`. If an
343353 /// attempt is made to call it at any other priority level, an `Unsupported`
@@ -379,14 +389,17 @@ impl BootServices {
379389 )
380390 }
381391
382- /// Sets the trigger for `EventType::TIMER` event.
383- pub fn set_timer ( & self , event : Event , trigger_time : TimerTrigger ) -> Result {
384- let ( ty, time) = match trigger_time {
385- TimerTrigger :: Cancel => ( 0 , 0 ) ,
386- TimerTrigger :: Periodic ( hundreds_ns) => ( 1 , hundreds_ns) ,
387- TimerTrigger :: Relative ( hundreds_ns) => ( 2 , hundreds_ns) ,
388- } ;
389- unsafe { ( self . set_timer ) ( event, ty, time) } . into ( )
392+ /// Checks to see if an event is signaled, without blocking execution to wait for it.
393+ ///
394+ /// The returned value will be `true` if the event is in the signaled state,
395+ /// otherwise `false` is returned.
396+ pub fn check_event ( & self , event : Event ) -> Result < bool > {
397+ let status = unsafe { ( self . check_event ) ( event) } ;
398+ match status {
399+ Status :: SUCCESS => Ok ( true . into ( ) ) ,
400+ Status :: NOT_READY => Ok ( false . into ( ) ) ,
401+ _ => Err ( status. into ( ) ) ,
402+ }
390403 }
391404
392405 /// Query a handle for a certain protocol.
0 commit comments