[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()
From: |
Konrad Rzeszutek Wilk |
Subject: |
Re: [Xen-devel] [PATCH v2 14/23] efi: split out efi_find_gop_mode() |
Date: |
Mon, 10 Aug 2015 15:31:16 -0400 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
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 <address@hidden>
Reviewed-by: Konrad Rzeszutek Wilk <address@hidden>
> ---
> 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
> address@hidden
> http://lists.xen.org/xen-devel
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Xen-devel] [PATCH v2 14/23] efi: split out efi_find_gop_mode(),
Konrad Rzeszutek Wilk <=