Hi,
Am 03.08.2018 um 13:41 schrieb Fredrik Holmqvist:
- if (clear)
- memset((void*)frameBuffer, 0,
- gKernelArgs.frame_buffer.physical_buffer.size);
+ addr_t pos = 0;
+ // Limit area to clear to estimated screen area
+ // UEFI can happily report a >256M framebuffer
+ addr_t size = min_c(gKernelArgs.frame_buffer.width
+ * gKernelArgs.frame_buffer.height * 4,
+ gKernelArgs.frame_buffer.physical_buffer.size);
+
+ if (size >= 64) {
+ // Align writes
+ for (addr_t align = 8 - (frameBuffer & 7); pos < align; pos++)
+ *(char*)(frameBuffer + pos) = 0;
+ // Write eight bytes, many many times, but not too many
+ for (addr_t alignSize = size - 8; pos < alignSize; pos +=8) {
+ *(uint32*)(frameBuffer + pos) = 0;
+ *(uint32*)(frameBuffer + pos + 4) = 0;
+ }
+ }
+ // Write a few bytes more
+ for (; pos < size; pos++)
+ *(char*)(frameBuffer + pos) = 0;