File tree Expand file tree Collapse file tree 3 files changed +54
-0
lines changed Expand file tree Collapse file tree 3 files changed +54
-0
lines changed Original file line number Diff line number Diff line change 7
7
- Added ` proto::hii::config::ConfigKeywordHandler ` .
8
8
- Added ` proto::hii::config::HiiConfigAccess ` .
9
9
- Added ` proto::hii::config_str::ConfigurationString ` .
10
+ - Added ` proto::hii::database::HiiDatabase ` .
10
11
11
12
## Changed
12
13
- ** Breaking:** ` boot::stall ` now take ` core::time::Duration ` instead of ` usize ` .
Original file line number Diff line number Diff line change
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+
3
+ //! HII Database protocol.
4
+
5
+ use alloc:: vec:: Vec ;
6
+ use uefi_macros:: unsafe_protocol;
7
+ use uefi_raw:: { Status , protocol:: hii:: database:: HiiDatabaseProtocol } ;
8
+
9
+ use crate :: StatusExt ;
10
+
11
+ /// The HII Configuration Access Protocol.
12
+ ///
13
+ /// # UEFI Spec Description
14
+ ///
15
+ /// Database manager for HII-related data structures.
16
+ #[ derive( Debug ) ]
17
+ #[ repr( transparent) ]
18
+ #[ unsafe_protocol( HiiDatabaseProtocol :: GUID ) ]
19
+ pub struct HiiDatabase ( HiiDatabaseProtocol ) ;
20
+
21
+ impl HiiDatabase {
22
+ /// Export all package lists as raw byte buffer.
23
+ #[ must_use]
24
+ pub fn export_all_raw ( & self ) -> crate :: Result < Vec < u8 > > {
25
+ // call the function with a buffer_size of 0 first, so it will fail with
26
+ // BUFFER_TOO_SMALL to tell us what size is required.
27
+ let mut buffer_size = 0 ;
28
+ unsafe {
29
+ let result = ( self . 0 . export_package_lists ) (
30
+ & self . 0 ,
31
+ core:: ptr:: null_mut ( ) ,
32
+ & mut buffer_size,
33
+ core:: ptr:: null_mut ( ) ,
34
+ ) ;
35
+ assert_eq ! ( result, Status :: BUFFER_TOO_SMALL ) ;
36
+ }
37
+
38
+ // allocate buffer with the requested size and call the method again
39
+ let mut buffer = Vec :: with_capacity ( buffer_size) ;
40
+ buffer. resize ( buffer_size, 0u8 ) ;
41
+ unsafe {
42
+ ( self . 0 . export_package_lists ) (
43
+ & self . 0 ,
44
+ core:: ptr:: null_mut ( ) ,
45
+ & mut buffer_size,
46
+ buffer. as_mut_ptr ( ) . cast ( ) ,
47
+ )
48
+ . to_result_with_val ( || buffer)
49
+ }
50
+ }
51
+ }
Original file line number Diff line number Diff line change 5
5
pub mod config;
6
6
#[ cfg( feature = "alloc" ) ]
7
7
pub mod config_str;
8
+ #[ cfg( feature = "alloc" ) ]
9
+ pub mod database;
You can’t perform that action at this time.
0 commit comments