@@ -8,6 +8,7 @@ use bootloader_boot_config::BootConfig;
8
8
use bootloader_x86_64_common:: {
9
9
legacy_memory_region:: LegacyFrameAllocator , Kernel , RawFrameBufferInfo , SystemInfo ,
10
10
} ;
11
+ use raw_cpuid:: CpuId ;
11
12
use core:: {
12
13
cell:: UnsafeCell ,
13
14
ops:: { Deref , DerefMut } ,
@@ -469,26 +470,35 @@ fn init_logger(
469
470
} ;
470
471
471
472
let mode = {
472
- let modes = gop. modes ( ) ;
473
- match (
474
- config
475
- . frame_buffer
476
- . minimum_framebuffer_height
477
- . map ( |v| usize:: try_from ( v) . unwrap ( ) ) ,
478
- config
479
- . frame_buffer
480
- . minimum_framebuffer_width
481
- . map ( |v| usize:: try_from ( v) . unwrap ( ) ) ,
482
- ) {
483
- ( Some ( height) , Some ( width) ) => modes
484
- . filter ( |m| {
485
- let res = m. info ( ) . resolution ( ) ;
486
- res. 1 >= height && res. 0 >= width
487
- } )
488
- . last ( ) ,
489
- ( Some ( height) , None ) => modes. filter ( |m| m. info ( ) . resolution ( ) . 1 >= height) . last ( ) ,
490
- ( None , Some ( width) ) => modes. filter ( |m| m. info ( ) . resolution ( ) . 0 >= width) . last ( ) ,
491
- _ => None ,
473
+ let mut modes = gop. modes ( ) ;
474
+
475
+ if let Some ( _) = CpuId :: new ( ) . get_hypervisor_info ( ) {
476
+ match (
477
+ config
478
+ . frame_buffer
479
+ . minimum_framebuffer_height
480
+ . map ( |v| usize:: try_from ( v) . unwrap ( ) ) ,
481
+ config
482
+ . frame_buffer
483
+ . minimum_framebuffer_width
484
+ . map ( |v| usize:: try_from ( v) . unwrap ( ) ) ,
485
+ ) {
486
+ ( Some ( height) , Some ( width) ) => modes
487
+ . filter ( |m| {
488
+ let res = m. info ( ) . resolution ( ) ;
489
+ res. 1 >= height && res. 0 >= width
490
+ } )
491
+ . last ( ) ,
492
+ ( Some ( height) , None ) => modes. filter ( |m| m. info ( ) . resolution ( ) . 1 >= height) . last ( ) ,
493
+ ( None , Some ( width) ) => modes. filter ( |m| m. info ( ) . resolution ( ) . 0 >= width) . last ( ) ,
494
+ _ => None ,
495
+ }
496
+ } else {
497
+ // Default to using the highest resolution available on real hardware
498
+ let x = gop. modes ( ) . map ( |m| m. info ( ) . resolution ( ) . 0 ) . max ( ) . unwrap ( ) ;
499
+ let y = gop. modes ( ) . map ( |m| m. info ( ) . resolution ( ) . 1 ) . max ( ) . unwrap ( ) ;
500
+
501
+ modes. find ( |m| m. info ( ) . resolution ( ) . 0 == x && m. info ( ) . resolution ( ) . 1 == y)
492
502
}
493
503
} ;
494
504
if let Some ( mode) = mode {
0 commit comments