Author: smh
Date: Mon Jan 25 10:48:58 2016
New Revision: 294719
URL: https://svnweb.freebsd.org/changeset/base/294719

Log:
  MFC r281059 (by rpaulo):
  
  boot1 EFI: reset the screen and select the best mode.
  
  Sponsored by: Multiplay

Modified:
  stable/10/sys/boot/efi/boot1/boot1.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/boot/efi/boot1/boot1.c
==============================================================================
--- stable/10/sys/boot/efi/boot1/boot1.c        Mon Jan 25 10:45:18 2016        
(r294718)
+++ stable/10/sys/boot/efi/boot1/boot1.c        Mon Jan 25 10:48:58 2016        
(r294719)
@@ -108,11 +108,12 @@ EFI_STATUS efi_main(EFI_HANDLE Ximage, E
 {
        EFI_HANDLE handles[128];
        EFI_BLOCK_IO *blkio;
-       UINTN i, nparts = sizeof(handles);
+       UINTN i, nparts = sizeof(handles), cols, rows, max_dim, best_mode;
        EFI_STATUS status;
        EFI_DEVICE_PATH *devpath;
        EFI_BOOT_SERVICES *BS;
        EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl = NULL;
+       SIMPLE_TEXT_OUTPUT_INTERFACE *conout = NULL;
        char *path = _PATH_LOADER;
 
        systab = Xsystab;
@@ -124,6 +125,26 @@ EFI_STATUS efi_main(EFI_HANDLE Ximage, E
        if (status == EFI_SUCCESS)
                (void)ConsoleControl->SetMode(ConsoleControl,
                    EfiConsoleControlScreenText);
+       /*
+        * Reset the console and find the best text mode.
+        */
+       conout = systab->ConOut;
+       conout->Reset(conout, TRUE);
+       max_dim = best_mode = 0;
+       for (i = 0; ; i++) {
+               status = conout->QueryMode(conout, i,
+                   &cols, &rows);
+               if (EFI_ERROR(status))
+                       break;
+               if (cols * rows > max_dim) {
+                       max_dim = cols * rows;
+                       best_mode = i;
+               }
+       }
+       if (max_dim > 0)
+               conout->SetMode(conout, best_mode);
+       conout->EnableCursor(conout, TRUE);
+       conout->ClearScreen(conout);
 
        printf(" \n>> FreeBSD EFI boot block\n");
        printf("   Loader path: %s\n", path);
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to