@@ -3,7 +3,7 @@ use crate::builder::traits::StructAsBytes;
3
3
use crate :: {
4
4
BasicMemoryInfoTag , BootInformationInner , BootLoaderNameTag , CommandLineTag ,
5
5
EFISdt32 , EFISdt64 , ElfSectionsTag , EndTag , FramebufferTag , MemoryMapTag ,
6
- ModuleTag , SmbiosTag ,
6
+ ModuleTag , RsdpV1Tag , RsdpV2Tag , SmbiosTag ,
7
7
} ;
8
8
9
9
use alloc:: boxed:: Box ;
@@ -24,6 +24,8 @@ pub struct Multiboot2InformationBuilder {
24
24
module_tags : Vec < Box < ModuleTag > > ,
25
25
efisdt32 : Option < EFISdt32 > ,
26
26
efisdt64 : Option < EFISdt64 > ,
27
+ rsdp_v1_tag : Option < RsdpV1Tag > ,
28
+ rsdp_v2_tag : Option < RsdpV2Tag > ,
27
29
smbios_tags : Vec < Box < SmbiosTag > > ,
28
30
}
29
31
@@ -39,6 +41,8 @@ impl Multiboot2InformationBuilder {
39
41
framebuffer_tag : None ,
40
42
memory_map_tag : None ,
41
43
module_tags : Vec :: new ( ) ,
44
+ rsdp_v1_tag : None ,
45
+ rsdp_v2_tag : None ,
42
46
smbios_tags : Vec :: new ( ) ,
43
47
}
44
48
}
@@ -91,6 +95,12 @@ impl Multiboot2InformationBuilder {
91
95
for tag in & self . module_tags {
92
96
len += Self :: size_or_up_aligned ( tag. byte_size ( ) )
93
97
}
98
+ if let Some ( tag) = & self . rsdp_v1_tag {
99
+ len += Self :: size_or_up_aligned ( tag. byte_size ( ) )
100
+ }
101
+ if let Some ( tag) = & self . rsdp_v2_tag {
102
+ len += Self :: size_or_up_aligned ( tag. byte_size ( ) )
103
+ }
94
104
for tag in & self . smbios_tags {
95
105
len += Self :: size_or_up_aligned ( tag. byte_size ( ) )
96
106
}
@@ -153,6 +163,12 @@ impl Multiboot2InformationBuilder {
153
163
for tag in self . module_tags {
154
164
Self :: build_add_bytes ( & mut data, & tag. struct_as_bytes ( ) , false )
155
165
}
166
+ if let Some ( tag) = self . rsdp_v1_tag . as_ref ( ) {
167
+ Self :: build_add_bytes ( & mut data, & tag. struct_as_bytes ( ) , false )
168
+ }
169
+ if let Some ( tag) = self . rsdp_v2_tag . as_ref ( ) {
170
+ Self :: build_add_bytes ( & mut data, & tag. struct_as_bytes ( ) , false )
171
+ }
156
172
for tag in self . smbios_tags {
157
173
Self :: build_add_bytes ( & mut data, & tag. struct_as_bytes ( ) , false )
158
174
}
@@ -198,6 +214,14 @@ impl Multiboot2InformationBuilder {
198
214
self . module_tags . push ( module_tag) ;
199
215
}
200
216
217
+ pub fn rsdp_v1_tag ( & mut self , rsdp_v1_tag : RsdpV1Tag ) {
218
+ self . rsdp_v1_tag = Some ( rsdp_v1_tag) ;
219
+ }
220
+
221
+ pub fn rsdp_v2_tag ( & mut self , rsdp_v2_tag : RsdpV2Tag ) {
222
+ self . rsdp_v2_tag = Some ( rsdp_v2_tag) ;
223
+ }
224
+
201
225
pub fn add_smbios_tag ( & mut self , smbios_tag : Box < SmbiosTag > ) {
202
226
self . smbios_tags . push ( smbios_tag) ;
203
227
}
0 commit comments