@@ -12,8 +12,8 @@ use crate::acpi::x86_64::{
12
12
} ;
13
13
use crate :: arch:: x86_64:: layout;
14
14
use crate :: device_manager:: DeviceManager ;
15
- use crate :: device_manager:: resources:: ResourceAllocator ;
16
15
use crate :: vstate:: memory:: { GuestAddress , GuestMemoryMmap } ;
16
+ use crate :: vstate:: resources:: ResourceAllocator ;
17
17
18
18
mod x86_64;
19
19
@@ -80,7 +80,11 @@ impl AcpiTableWriter<'_> {
80
80
}
81
81
82
82
/// Build the DSDT table for the guest
83
- fn build_dsdt ( & mut self , device_manager : & mut DeviceManager ) -> Result < u64 , AcpiError > {
83
+ fn build_dsdt (
84
+ & mut self ,
85
+ device_manager : & mut DeviceManager ,
86
+ resource_allocator : & ResourceAllocator ,
87
+ ) -> Result < u64 , AcpiError > {
84
88
let mut dsdt_data = Vec :: new ( ) ;
85
89
86
90
// Virtio-devices DSDT data
@@ -99,7 +103,7 @@ impl AcpiTableWriter<'_> {
99
103
setup_arch_dsdt ( & mut dsdt_data) ?;
100
104
101
105
let mut dsdt = Dsdt :: new ( OEM_ID , * b"FCVMDSDT" , OEM_REVISION , dsdt_data) ;
102
- self . write_acpi_table ( & device_manager . resource_allocator , & mut dsdt)
106
+ self . write_acpi_table ( resource_allocator, & mut dsdt)
103
107
}
104
108
105
109
/// Build the FADT table for the guest
@@ -193,26 +197,16 @@ impl AcpiTableWriter<'_> {
193
197
pub ( crate ) fn create_acpi_tables (
194
198
mem : & GuestMemoryMmap ,
195
199
device_manager : & mut DeviceManager ,
200
+ resource_allocator : & ResourceAllocator ,
196
201
vcpus : & [ Vcpu ] ,
197
202
) -> Result < ( ) , AcpiError > {
198
203
let mut writer = AcpiTableWriter { mem } ;
199
- let dsdt_addr = writer. build_dsdt ( device_manager) ?;
200
-
201
- let fadt_addr = writer. build_fadt ( & device_manager. resource_allocator , dsdt_addr) ?;
202
- let madt_addr = writer. build_madt (
203
- & device_manager. resource_allocator ,
204
- vcpus. len ( ) . try_into ( ) . unwrap ( ) ,
205
- ) ?;
206
- let mcfg_addr = writer. build_mcfg (
207
- & device_manager. resource_allocator ,
208
- layout:: PCI_MMCONFIG_START ,
209
- ) ?;
210
- let xsdt_addr = writer. build_xsdt (
211
- & device_manager. resource_allocator ,
212
- fadt_addr,
213
- madt_addr,
214
- mcfg_addr,
215
- ) ?;
204
+ let dsdt_addr = writer. build_dsdt ( device_manager, resource_allocator) ?;
205
+
206
+ let fadt_addr = writer. build_fadt ( resource_allocator, dsdt_addr) ?;
207
+ let madt_addr = writer. build_madt ( resource_allocator, vcpus. len ( ) . try_into ( ) . unwrap ( ) ) ?;
208
+ let mcfg_addr = writer. build_mcfg ( resource_allocator, layout:: PCI_MMCONFIG_START ) ?;
209
+ let xsdt_addr = writer. build_xsdt ( resource_allocator, fadt_addr, madt_addr, mcfg_addr) ?;
216
210
writer. build_rsdp ( xsdt_addr)
217
211
}
218
212
@@ -224,8 +218,8 @@ mod tests {
224
218
use crate :: acpi:: { AcpiError , AcpiTableWriter } ;
225
219
use crate :: arch:: x86_64:: layout:: { SYSTEM_MEM_SIZE , SYSTEM_MEM_START } ;
226
220
use crate :: builder:: tests:: default_vmm;
227
- use crate :: device_manager:: resources:: ResourceAllocator ;
228
221
use crate :: utils:: u64_to_usize;
222
+ use crate :: vstate:: resources:: ResourceAllocator ;
229
223
use crate :: vstate:: vm:: tests:: setup_vm_with_memory;
230
224
231
225
struct MockSdt ( Vec < u8 > ) ;
@@ -259,14 +253,14 @@ mod tests {
259
253
// This should succeed
260
254
let mut sdt = MockSdt ( vec ! [ 0 ; 4096 ] ) ;
261
255
let addr = writer
262
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
256
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
263
257
. unwrap ( ) ;
264
258
assert_eq ! ( addr, SYSTEM_MEM_START ) ;
265
259
266
260
// Let's try to write two 4K pages plus one byte
267
261
let mut sdt = MockSdt ( vec ! [ 0 ; usize :: try_from( SYSTEM_MEM_SIZE + 1 ) . unwrap( ) ] ) ;
268
262
let err = writer
269
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
263
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
270
264
. unwrap_err ( ) ;
271
265
assert ! (
272
266
matches!(
@@ -281,27 +275,27 @@ mod tests {
281
275
// succeed.
282
276
let mut sdt = MockSdt ( vec ! [ 0 ; 5 ] ) ;
283
277
let addr = writer
284
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
278
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
285
279
. unwrap ( ) ;
286
280
assert_eq ! ( addr, SYSTEM_MEM_START + 4096 ) ;
287
281
let mut sdt = MockSdt ( vec ! [ 0 ; 2 ] ) ;
288
282
let addr = writer
289
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
283
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
290
284
. unwrap ( ) ;
291
285
assert_eq ! ( addr, SYSTEM_MEM_START + 4101 ) ;
292
286
let mut sdt = MockSdt ( vec ! [ 0 ; 4 ] ) ;
293
287
let addr = writer
294
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
288
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
295
289
. unwrap ( ) ;
296
290
assert_eq ! ( addr, SYSTEM_MEM_START + 4103 ) ;
297
291
let mut sdt = MockSdt ( vec ! [ 0 ; 8 ] ) ;
298
292
let addr = writer
299
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
293
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
300
294
. unwrap ( ) ;
301
295
assert_eq ! ( addr, SYSTEM_MEM_START + 4107 ) ;
302
296
let mut sdt = MockSdt ( vec ! [ 0 ; 16 ] ) ;
303
297
let addr = writer
304
- . write_acpi_table ( & vmm. device_manager . resource_allocator , & mut sdt)
298
+ . write_acpi_table ( & vmm. vm . common . resource_allocator , & mut sdt)
305
299
. unwrap ( ) ;
306
300
assert_eq ! ( addr, SYSTEM_MEM_START + 4115 ) ;
307
301
}
0 commit comments