@@ -59,7 +59,7 @@ pub struct BootServices {
59
59
) -> Status ,
60
60
signal_event : usize ,
61
61
close_event : usize ,
62
- check_event : usize ,
62
+ check_event : unsafe extern "efiapi" fn ( event : Event ) -> Status ,
63
63
64
64
// Protocol handlers
65
65
install_protocol_interface : usize ,
@@ -337,7 +337,17 @@ impl BootServices {
337
337
. into_with_val ( || event. assume_init ( ) )
338
338
}
339
339
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.
341
351
///
342
352
/// This function must be called at priority level `Tpl::APPLICATION`. If an
343
353
/// attempt is made to call it at any other priority level, an `Unsupported`
@@ -379,14 +389,17 @@ impl BootServices {
379
389
)
380
390
}
381
391
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
+ }
390
403
}
391
404
392
405
/// Query a handle for a certain protocol.
0 commit comments