[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 14/23] efi: split out efi_find_gop_mode()
On Mon, Jul 20, 2015 at 04:29:09PM +0200, Daniel Kiper wrote: > ..which finds suitable GOP mode. We want to re-use this > code to support multiboot2 protocol on EFI platforms. > > Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > --- > v2 - suggestions/fixes: > - improve commit message > (suggested by Jan Beulich). > --- > xen/common/efi/boot.c | 94 > ++++++++++++++++++++++++++++--------------------- > 1 file changed, 54 insertions(+), 40 deletions(-) > > diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c > index 6fad230..8d16470 100644 > --- a/xen/common/efi/boot.c > +++ b/xen/common/efi/boot.c > @@ -665,6 +665,58 @@ static EFI_GRAPHICS_OUTPUT_PROTOCOL __init > *efi_get_gop(void) > return gop; > } > > +static UINTN __init efi_find_gop_mode(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, > + UINTN cols, UINTN rows, UINTN depth) > +{ > + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info; > + EFI_STATUS status; > + UINTN gop_mode = ~0, info_size, size; > + unsigned int i; > + > + if ( !gop ) > + return gop_mode; > + > + for ( i = size = 0; i < gop->Mode->MaxMode; ++i ) > + { > + unsigned int bpp = 0; > + > + status = gop->QueryMode(gop, i, &info_size, &mode_info); > + if ( EFI_ERROR(status) ) > + continue; > + switch ( mode_info->PixelFormat ) > + { > + case PixelBitMask: > + bpp = hweight32(mode_info->PixelInformation.RedMask | > + mode_info->PixelInformation.GreenMask | > + mode_info->PixelInformation.BlueMask); > + break; > + case PixelRedGreenBlueReserved8BitPerColor: > + case PixelBlueGreenRedReserved8BitPerColor: > + bpp = 24; > + break; > + default: > + continue; > + } > + if ( cols == mode_info->HorizontalResolution && > + rows == mode_info->VerticalResolution && > + (!depth || bpp == depth) ) > + { > + gop_mode = i; > + break; > + } > + if ( !cols && !rows && > + mode_info->HorizontalResolution * > + mode_info->VerticalResolution > size ) > + { > + size = mode_info->HorizontalResolution * > + mode_info->VerticalResolution; > + gop_mode = i; > + } > + } > + > + return gop_mode; > +} > + > static void __init setup_efi_pci(void) > { > EFI_STATUS status; > @@ -978,46 +1030,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE > *SystemTable) > > dir_handle->Close(dir_handle); > > - if ( gop && !base_video ) > - { > - for ( i = size = 0; i < gop->Mode->MaxMode; ++i ) > - { > - unsigned int bpp = 0; > - > - status = gop->QueryMode(gop, i, &info_size, &mode_info); > - if ( EFI_ERROR(status) ) > - continue; > - switch ( mode_info->PixelFormat ) > - { > - case PixelBitMask: > - bpp = hweight32(mode_info->PixelInformation.RedMask | > - mode_info->PixelInformation.GreenMask | > - mode_info->PixelInformation.BlueMask); > - break; > - case PixelRedGreenBlueReserved8BitPerColor: > - case PixelBlueGreenRedReserved8BitPerColor: > - bpp = 24; > - break; > - default: > - continue; > - } > - if ( cols == mode_info->HorizontalResolution && > - rows == mode_info->VerticalResolution && > - (!depth || bpp == depth) ) > - { > - gop_mode = i; > - break; > - } > - if ( !cols && !rows && > - mode_info->HorizontalResolution * > - mode_info->VerticalResolution > size ) > - { > - size = mode_info->HorizontalResolution * > - mode_info->VerticalResolution; > - gop_mode = i; > - } > - } > - } > + if ( !base_video ) > + gop_mode = efi_find_gop_mode(gop, cols, rows, depth); > } > > efi_arch_edd(); > -- > 1.7.10.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |