From owner-dev-commits-src-all@freebsd.org Sun Jan 17 13:34:14 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4F3374E90F3; Sun, 17 Jan 2021 13:34:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DJbVZ1qxQz4vpL; Sun, 17 Jan 2021 13:34:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 31BCF223BE; Sun, 17 Jan 2021 13:34:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 10HDYEvd099967; Sun, 17 Jan 2021 13:34:14 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 10HDYE6N099966; Sun, 17 Jan 2021 13:34:14 GMT (envelope-from git) Date: Sun, 17 Jan 2021 13:34:14 GMT Message-Id: <202101171334.10HDYE6N099966@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Toomas Soome Subject: git: 52ec89a93c79 - main - loader.efi: commands gop, uga and autoresize should use cached data MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tsoome X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 52ec89a93c796ca3f3f3da2eec867804fcdd1a4d Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Jan 2021 13:34:14 -0000 The branch main has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=52ec89a93c796ca3f3f3da2eec867804fcdd1a4d commit 52ec89a93c796ca3f3f3da2eec867804fcdd1a4d Author: Toomas Soome AuthorDate: 2021-01-17 13:07:27 +0000 Commit: Toomas Soome CommitDate: 2021-01-17 13:33:48 +0000 loader.efi: commands gop, uga and autoresize should use cached data We are setting up pointers for gop or uga protocol in efi_find_framebuffer(), reuse those pointers. --- stand/efi/loader/framebuffer.c | 47 +++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/stand/efi/loader/framebuffer.c b/stand/efi/loader/framebuffer.c index 0b23a42b1cdc..509c41844dcb 100644 --- a/stand/efi/loader/framebuffer.c +++ b/stand/efi/loader/framebuffer.c @@ -43,11 +43,14 @@ __FBSDID("$FreeBSD$"); #include "bootstrap.h" #include "framebuffer.h" -EFI_GUID conout_guid = EFI_CONSOLE_OUT_DEVICE_GUID; +static EFI_GUID conout_guid = EFI_CONSOLE_OUT_DEVICE_GUID; EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID; static EFI_GUID pciio_guid = EFI_PCI_IO_PROTOCOL_GUID; static EFI_GUID uga_guid = EFI_UGA_DRAW_PROTOCOL_GUID; +static EFI_GRAPHICS_OUTPUT *gop; +static EFI_UGA_DRAW_PROTOCOL *uga; + static struct named_resolution { const char *name; const char *alias; @@ -305,7 +308,7 @@ efifb_uga_locate_framebuffer(EFI_PCI_IO_PROTOCOL *pciio, uint64_t *addrp, } static int -efifb_from_uga(struct efi_fb *efifb, EFI_UGA_DRAW_PROTOCOL *uga) +efifb_from_uga(struct efi_fb *efifb) { EFI_PCI_IO_PROTOCOL *pciio; char *ev, *p; @@ -470,8 +473,6 @@ efi_find_framebuffer(teken_gfx_t *gfx_state) EFI_HANDLE h, *hlist; UINTN nhandles, i, hsize; struct efi_fb efifb; - EFI_GRAPHICS_OUTPUT *gop; - EFI_UGA_DRAW_PROTOCOL *uga; EFI_STATUS status; int rv; @@ -530,7 +531,7 @@ efi_find_framebuffer(teken_gfx_t *gfx_state) break; case FB_UGA: - rv = efifb_from_uga(&efifb, uga); + rv = efifb_from_uga(&efifb); break; default: @@ -624,7 +625,7 @@ efi_get_max_resolution(int *width, int *height) } static int -gop_autoresize(EFI_GRAPHICS_OUTPUT *gop) +gop_autoresize(void) { struct efi_fb efifb; EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info; @@ -690,7 +691,7 @@ text_autoresize() } static int -uga_autoresize(EFI_UGA_DRAW_PROTOCOL *uga) +uga_autoresize(void) { return (text_autoresize()); @@ -701,25 +702,18 @@ COMMAND_SET(efi_autoresize, "efi-autoresizecons", "EFI Auto-resize Console", com static int command_autoresize(int argc, char *argv[]) { - EFI_GRAPHICS_OUTPUT *gop; - EFI_UGA_DRAW_PROTOCOL *uga; char *textmode; - EFI_STATUS status; textmode = getenv("hw.vga.textmode"); /* If it's set and non-zero, we'll select a console mode instead */ if (textmode != NULL && strcmp(textmode, "0") != 0) return (text_autoresize()); - gop = NULL; - uga = NULL; - status = BS->LocateProtocol(&gop_guid, NULL, (VOID **)&gop); - if (EFI_ERROR(status) == 0) - return (gop_autoresize(gop)); + if (gop != NULL) + return (gop_autoresize()); - status = BS->LocateProtocol(&uga_guid, NULL, (VOID **)&uga); - if (EFI_ERROR(status) == 0) - return (uga_autoresize(uga)); + if (uga != NULL) + return (uga_autoresize()); snprintf(command_errbuf, sizeof(command_errbuf), "%s: Neither Graphics Output Protocol nor Universal Graphics Adapter present", @@ -740,15 +734,12 @@ static int command_gop(int argc, char *argv[]) { struct efi_fb efifb; - EFI_GRAPHICS_OUTPUT *gop; EFI_STATUS status; u_int mode; - status = BS->LocateProtocol(&gop_guid, NULL, (VOID **)&gop); - if (EFI_ERROR(status)) { + if (gop == NULL) { snprintf(command_errbuf, sizeof(command_errbuf), - "%s: Graphics Output Protocol not present (error=%lu)", - argv[0], EFI_ERROR_CODE(status)); + "%s: Graphics Output Protocol not present", argv[0]); return (CMD_ERROR); } @@ -813,21 +804,17 @@ static int command_uga(int argc, char *argv[]) { struct efi_fb efifb; - EFI_UGA_DRAW_PROTOCOL *uga; - EFI_STATUS status; - status = BS->LocateProtocol(&uga_guid, NULL, (VOID **)&uga); - if (EFI_ERROR(status)) { + if (uga == NULL) { snprintf(command_errbuf, sizeof(command_errbuf), - "%s: UGA Protocol not present (error=%lu)", - argv[0], EFI_ERROR_CODE(status)); + "%s: UGA Protocol not present", argv[0]); return (CMD_ERROR); } if (argc != 1) goto usage; - if (efifb_from_uga(&efifb, uga) != CMD_OK) { + if (efifb_from_uga(&efifb) != CMD_OK) { snprintf(command_errbuf, sizeof(command_errbuf), "%s: Unable to get UGA information", argv[0]); return (CMD_ERROR);