3
3
4
4
pub mod layout;
5
5
6
+ use std:: cmp:: min;
7
+
6
8
use memory_model:: { GuestAddress , GuestMemory } ;
7
9
8
- /// Stub function that needs to be implemented when aarch64 functionality is added.
10
+ /// Returns a Vec of the valid memory addresses for aarch64.
11
+ /// See [`layout`](layout) module for a drawing of the specific memory model for this platform.
9
12
pub fn arch_memory_regions ( size : usize ) -> Vec < ( GuestAddress , usize ) > {
10
- vec ! [ ( GuestAddress ( 0 ) , size) ]
13
+ let dram_size = min ( size, layout:: DRAM_MEM_END ) ;
14
+ vec ! [ ( GuestAddress ( layout:: DRAM_MEM_START ) , dram_size) ]
11
15
}
12
16
13
17
/// Stub function that needs to be implemented when aarch64 functionality is added.
@@ -24,3 +28,24 @@ pub fn configure_system(
24
28
pub fn get_reserved_mem_addr ( ) -> usize {
25
29
0
26
30
}
31
+
32
+ #[ cfg( test) ]
33
+ mod tests {
34
+ use super :: * ;
35
+
36
+ #[ test]
37
+ fn regions_lt_1024gb ( ) {
38
+ let regions = arch_memory_regions ( 1usize << 29 ) ;
39
+ assert_eq ! ( 1 , regions. len( ) ) ;
40
+ assert_eq ! ( GuestAddress ( super :: layout:: DRAM_MEM_START ) , regions[ 0 ] . 0 ) ;
41
+ assert_eq ! ( 1usize << 29 , regions[ 0 ] . 1 ) ;
42
+ }
43
+
44
+ #[ test]
45
+ fn regions_gt_1024gb ( ) {
46
+ let regions = arch_memory_regions ( 1usize << 41 ) ;
47
+ assert_eq ! ( 1 , regions. len( ) ) ;
48
+ assert_eq ! ( GuestAddress ( super :: layout:: DRAM_MEM_START ) , regions[ 0 ] . 0 ) ;
49
+ assert_eq ! ( super :: layout:: DRAM_MEM_END , regions[ 0 ] . 1 ) ;
50
+ }
51
+ }
0 commit comments