@@ -7,10 +7,12 @@ use core::fmt::{self, Debug, Display, Formatter};
7
7
use core:: mem:: MaybeUninit ;
8
8
use core:: ptr;
9
9
10
+ pub use uefi_raw:: capsule:: { CapsuleBlockDescriptor , CapsuleHeader } ;
10
11
pub use uefi_raw:: table:: runtime:: {
11
12
ResetType , TimeCapabilities , VariableAttributes , VariableVendor ,
12
13
} ;
13
14
pub use uefi_raw:: time:: Daylight ;
15
+ pub use uefi_raw:: PhysicalAddress ;
14
16
15
17
#[ cfg( feature = "alloc" ) ]
16
18
use {
@@ -290,6 +292,23 @@ impl RuntimeServices {
290
292
) -> Status {
291
293
( self . 0 . set_virtual_address_map ) ( map_size, desc_size, desc_version, virtual_map)
292
294
}
295
+
296
+ /// Passes capsules to the firmware. Capsules are most commonly used to update the firmware
297
+ /// or for by the operating system to have information persist across a system reset.
298
+ pub fn update_capsule (
299
+ & self ,
300
+ capsule_header_array : & [ & CapsuleHeader ] ,
301
+ capsule_block_descriptors : & [ CapsuleBlockDescriptor ] ,
302
+ ) -> Result {
303
+ unsafe {
304
+ ( self . 0 . update_capsule ) (
305
+ capsule_header_array. as_ptr ( ) . cast ( ) ,
306
+ capsule_header_array. len ( ) ,
307
+ capsule_block_descriptors. as_ptr ( ) as PhysicalAddress ,
308
+ )
309
+ . to_result ( )
310
+ }
311
+ }
293
312
}
294
313
295
314
impl super :: Table for RuntimeServices {
0 commit comments