[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [PATCH v2 13/23] efi: split out efi_get_gop()
From: |
Konrad Rzeszutek Wilk |
Subject: |
Re: [Xen-devel] [PATCH v2 13/23] efi: split out efi_get_gop() |
Date: |
Mon, 10 Aug 2015 15:27:07 -0400 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Mon, Jul 20, 2015 at 04:29:08PM +0200, Daniel Kiper wrote:
> ..which gets pointer to GOP device. 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 | 59
> ++++++++++++++++++++++++++++++-------------------
> 1 file changed, 36 insertions(+), 23 deletions(-)
>
> diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
> index 4614146..6fad230 100644
> --- a/xen/common/efi/boot.c
> +++ b/xen/common/efi/boot.c
> @@ -630,6 +630,41 @@ static void __init efi_console_set_mode(void)
> StdOut->SetMode(StdOut, best);
> }
>
> +static EFI_GRAPHICS_OUTPUT_PROTOCOL __init *efi_get_gop(void)
> +{
> + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info;
> + EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
> + EFI_HANDLE *handles;
> + EFI_STATUS status;
> + UINTN info_size, size = 0;
> + static EFI_GUID __initdata gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
> + unsigned int i;
> +
> + status = efi_bs->LocateHandle(ByProtocol, &gop_guid, NULL, &size, NULL);
> + if ( status == EFI_BUFFER_TOO_SMALL )
> + status = efi_bs->AllocatePool(EfiLoaderData, size, (void
> **)&handles);
> + if ( !EFI_ERROR(status) )
> + status = efi_bs->LocateHandle(ByProtocol, &gop_guid, NULL, &size,
> + handles);
> + if ( EFI_ERROR(status) )
> + size = 0;
> + for ( i = 0; i < size / sizeof(*handles); ++i )
> + {
> + status = efi_bs->HandleProtocol(handles[i], &gop_guid, (void
> **)&gop);
> + if ( EFI_ERROR(status) )
> + continue;
> + status = gop->QueryMode(gop, gop->Mode->Mode, &info_size,
> &mode_info);
> + if ( !EFI_ERROR(status) )
> + break;
> + }
> + if ( handles )
> + efi_bs->FreePool(handles);
> + if ( EFI_ERROR(status) )
> + gop = NULL;
> +
> + return gop;
> +}
> +
> static void __init setup_efi_pci(void)
> {
> EFI_STATUS status;
> @@ -736,14 +771,12 @@ void EFIAPI __init noreturn
> efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
> {
> static EFI_GUID __initdata loaded_image_guid = LOADED_IMAGE_PROTOCOL;
> - static EFI_GUID __initdata gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
> static EFI_GUID __initdata shim_lock_guid = SHIM_LOCK_PROTOCOL_GUID;
> EFI_LOADED_IMAGE *loaded_image;
> EFI_STATUS status;
> unsigned int i, argc;
> CHAR16 **argv, *file_name, *cfg_file_name = NULL, *options = NULL;
> UINTN map_key, info_size, gop_mode = ~0;
> - EFI_HANDLE *handles = NULL;
> EFI_SHIM_LOCK_PROTOCOL *shim_lock;
> EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
> EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info;
> @@ -837,27 +870,7 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE
> *SystemTable)
> &cols, &rows) == EFI_SUCCESS )
> efi_arch_console_init(cols, rows);
>
> - status = efi_bs->LocateHandle(ByProtocol, &gop_guid, NULL, &size,
> NULL);
> - if ( status == EFI_BUFFER_TOO_SMALL )
> - status = efi_bs->AllocatePool(EfiLoaderData, size, (void
> **)&handles);
> - if ( !EFI_ERROR(status) )
> - status = efi_bs->LocateHandle(ByProtocol, &gop_guid, NULL, &size,
> - handles);
> - if ( EFI_ERROR(status) )
> - size = 0;
> - for ( i = 0; i < size / sizeof(*handles); ++i )
> - {
> - status = efi_bs->HandleProtocol(handles[i], &gop_guid, (void
> **)&gop);
> - if ( EFI_ERROR(status) )
> - continue;
> - status = gop->QueryMode(gop, gop->Mode->Mode, &info_size,
> &mode_info);
> - if ( !EFI_ERROR(status) )
> - break;
> - }
> - if ( handles )
> - efi_bs->FreePool(handles);
> - if ( EFI_ERROR(status) )
> - gop = NULL;
> + gop = efi_get_gop();
>
> /* Get the file system interface. */
> dir_handle = get_parent_handle(loaded_image, &file_name);
> --
> 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 13/23] efi: split out efi_get_gop(),
Konrad Rzeszutek Wilk <=