[haiku-commits] haiku: hrev52152 - src/system/boot/platform/efi src/system/boot/platform/generic headers/private/kernel/boot/platform/generic src/system/boot/platform/u-boot src/system/boot/platform/amiga_m68k

  • From: Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 1 Aug 2018 15:12:50 -0400 (EDT)

hrev52152 adds 1 changeset to branch 'master'
old head: 0594302a65c673ec378dd719b2b5cb331113ccd1
new head: 15db6949b6e25285e0bed89c23104a0d6d75ebf0
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=15db6949b6e2+%5E0594302a65c6

----------------------------------------------------------------------------

15db6949b6e2: Don't clear video mem on UEFI, efi video mode refactor
  
  Writes to videomem is slow without memory remapping
  Can't do the mapping without leaving UEFI, so skipping
  the clear. Afaict it should always be cleared by UEFI
  
  This saves ~10 seconds of booting on my machine
  (1920*1080*4 bytes)
  
  EFI video mode (should have been it's own commit)
   * Only do strcmp if there are enough params
   * break when found

                         [ Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev52152
Commit:      15db6949b6e25285e0bed89c23104a0d6d75ebf0
URL:         https://git.haiku-os.org/haiku/commit/?id=15db6949b6e2
Author:      Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx>
Date:        Wed Aug  1 18:08:04 2018 UTC

----------------------------------------------------------------------------

8 files changed, 22 insertions(+), 24 deletions(-)
.../private/kernel/boot/platform/generic/video.h |  2 +-
src/system/boot/platform/amiga_m68k/video.cpp    |  2 +-
src/system/boot/platform/atari_m68k/video.cpp    |  2 +-
src/system/boot/platform/bios_ia32/video.cpp     |  2 +-
src/system/boot/platform/efi/video.cpp           | 25 +++++++++-----------
.../boot/platform/generic/video_splash.cpp       |  8 +++----
src/system/boot/platform/openfirmware/video.cpp  |  3 ++-
src/system/boot/platform/u-boot/video.cpp        |  2 +-

----------------------------------------------------------------------------

diff --git a/headers/private/kernel/boot/platform/generic/video.h 
b/headers/private/kernel/boot/platform/generic/video.h
index b157372b90..50effc0f5b 100644
--- a/headers/private/kernel/boot/platform/generic/video.h
+++ b/headers/private/kernel/boot/platform/generic/video.h
@@ -32,7 +32,7 @@ void uncompress_24bit_RLE(const uint8 compressed[], uint8 
*uncompressed);
 void uncompress_8bit_RLE(const uint8 compressed[], uint8 *uncompressed);
 
 /* default splash display */
-status_t video_display_splash(addr_t frameBuffer);
+status_t video_display_splash(addr_t frameBuffer, bool clear);
 
 #ifdef __cplusplus
 }
diff --git a/src/system/boot/platform/amiga_m68k/video.cpp 
b/src/system/boot/platform/amiga_m68k/video.cpp
index 686b043872..031673a88d 100644
--- a/src/system/boot/platform/amiga_m68k/video.cpp
+++ b/src/system/boot/platform/amiga_m68k/video.cpp
@@ -234,7 +234,7 @@ platform_switch_to_logo(void)
        
        sFrameBuffer = gKernelArgs.frame_buffer.physical_buffer.start;
 
-       //video_display_splash(sFrameBuffer);
+       //video_display_splash(sFrameBuffer, true);
 
 }
 
diff --git a/src/system/boot/platform/atari_m68k/video.cpp 
b/src/system/boot/platform/atari_m68k/video.cpp
index 073f492db2..5e5cd7daf2 100644
--- a/src/system/boot/platform/atari_m68k/video.cpp
+++ b/src/system/boot/platform/atari_m68k/video.cpp
@@ -1153,7 +1153,7 @@ platform_switch_to_logo(void)
                        gKernelArgs.frame_buffer.physical_buffer.size, 
kDefaultPageFlags);
        }
 #endif
-       video_display_splash(sFrameBuffer);
+       video_display_splash(sFrameBuffer, true);
        dump_vars();
        spin(10000000);
        platform_switch_to_text_mode();
diff --git a/src/system/boot/platform/bios_ia32/video.cpp 
b/src/system/boot/platform/bios_ia32/video.cpp
index fa9b1fba8c..2800305571 100644
--- a/src/system/boot/platform/bios_ia32/video.cpp
+++ b/src/system/boot/platform/bios_ia32/video.cpp
@@ -877,7 +877,7 @@ fallback:
                        gKernelArgs.frame_buffer.physical_buffer.size, 
kDefaultPageFlags);
        }
 
-       video_display_splash(sFrameBuffer);
+       video_display_splash(sFrameBuffer, true);
 }
 
 
diff --git a/src/system/boot/platform/efi/video.cpp 
b/src/system/boot/platform/efi/video.cpp
index 3399c3b117..61ab14120a 100644
--- a/src/system/boot/platform/efi/video.cpp
+++ b/src/system/boot/platform/efi/video.cpp
@@ -118,8 +118,6 @@ get_mode_from_settings(void)
        if (handle == NULL)
                return;
 
-       bool found = false;
-
        const driver_settings *settings = get_driver_settings(handle);
        if (settings == NULL)
                goto out;
@@ -129,17 +127,16 @@ get_mode_from_settings(void)
        for (int32 i = 0; i < settings->parameter_count; i++) {
                driver_parameter &parameter = settings->parameters[i];
 
-               if (strcmp(parameter.name, "mode") == 0 && 
parameter.value_count > 2) {
-                       uint32 width = strtoul(parameter.values[0], NULL, 0);
-                       uint32 height = strtoul(parameter.values[1], NULL, 0);
-                       uint32 depth = strtoul(parameter.values[2], NULL, 0);
-
-                       // search mode that fits
-                       video_mode *mode = closest_video_mode(width, height, 
depth);
-                       if (mode != NULL) {
-                               found = true;
-                               sGraphicsMode = mode->mode;
-                       }
+               if (parameter.value_count < 3 || strcmp(parameter.name, "mode") 
!= 0) continue;
+               uint32 width = strtoul(parameter.values[0], NULL, 0);
+               uint32 height = strtoul(parameter.values[1], NULL, 0);
+               uint32 depth = strtoul(parameter.values[2], NULL, 0);
+
+               // search mode that fits
+               video_mode *mode = closest_video_mode(width, height, depth);
+               if (mode != NULL) {
+                       sGraphicsMode = mode->mode;
+                       break;
                }
        }
 
@@ -257,7 +254,7 @@ platform_switch_to_logo(void)
                sGraphicsOutput->Mode->Info->PixelsPerScanLine
                        * gKernelArgs.frame_buffer.depth / 8;
 
-       video_display_splash(gKernelArgs.frame_buffer.physical_buffer.start);
+       video_display_splash(gKernelArgs.frame_buffer.physical_buffer.start, 
false);
 }
 
 
diff --git a/src/system/boot/platform/generic/video_splash.cpp 
b/src/system/boot/platform/generic/video_splash.cpp
index 5d1c41166a..53f92763ce 100644
--- a/src/system/boot/platform/generic/video_splash.cpp
+++ b/src/system/boot/platform/generic/video_splash.cpp
@@ -81,14 +81,14 @@ uncompress(const uint8 compressed[], unsigned int 
compressedSize,
 
 
 extern "C" status_t
-video_display_splash(addr_t frameBuffer)
+video_display_splash(addr_t frameBuffer, bool clear)
 {
        if (!gKernelArgs.frame_buffer.enabled)
                return B_NO_INIT;
 
-       // clear the video memory
-       memset((void*)frameBuffer, 0,
-               gKernelArgs.frame_buffer.physical_buffer.size);
+       if (clear)
+               memset((void*)frameBuffer, 0,
+                       gKernelArgs.frame_buffer.physical_buffer.size);
 
        uint8* uncompressedLogo = NULL;
        unsigned int uncompressedSize = kSplashLogoWidth * kSplashLogoHeight;
diff --git a/src/system/boot/platform/openfirmware/video.cpp 
b/src/system/boot/platform/openfirmware/video.cpp
index 639723d09b..38c6646d6e 100644
--- a/src/system/boot/platform/openfirmware/video.cpp
+++ b/src/system/boot/platform/openfirmware/video.cpp
@@ -93,7 +93,8 @@ platform_switch_to_logo(void)
        gKernelArgs.frame_buffer.enabled = true;
 
        // the memory will be identity-mapped already
-       video_display_splash(gKernelArgs.frame_buffer.physical_buffer.start);
+       video_display_splash(gKernelArgs.frame_buffer.physical_buffer.start,
+               true);
 }
 
 
diff --git a/src/system/boot/platform/u-boot/video.cpp 
b/src/system/boot/platform/u-boot/video.cpp
index 1c149b0523..e2392c1146 100644
--- a/src/system/boot/platform/u-boot/video.cpp
+++ b/src/system/boot/platform/u-boot/video.cpp
@@ -89,7 +89,7 @@ platform_switch_to_logo(void)
                        return;
                }
 
-               err = video_display_splash(gFramebuffer->Base());
+               err = video_display_splash(gFramebuffer->Base(), true);
        }
 }
 


Other related posts: