[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()
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 <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 | 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 > 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 |