[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.