Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F110685249
D49073.id151261.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D49073.id151261.diff
View Options
diff --git a/stand/common/gfx_fb.c b/stand/common/gfx_fb.c
--- a/stand/common/gfx_fb.c
+++ b/stand/common/gfx_fb.c
@@ -161,6 +161,14 @@
8, 9, 10, 11, 12, 13, 14, 15
};
+/*
+ * It is reported very slow console draw in some systems.
+ * in order to exclude buggy gop->Blt(), we want option
+ * to use direct draw to framebuffer and avoid gop->Blt.
+ * Can be toggled with "gop" command.
+ */
+bool ignore_gop_blt = false;
+
struct text_pixel *screen_buffer;
#if defined(EFI)
static EFI_GRAPHICS_OUTPUT_BLT_PIXEL *GlyphBuffer;
@@ -795,7 +803,7 @@
* done as they are provided by protocols that disappear when exit
* boot services.
*/
- if (gop != NULL && boot_services_active) {
+ if (!ignore_gop_blt && gop != NULL && boot_services_active) {
tpl = BS->RaiseTPL(TPL_NOTIFY);
switch (BltOperation) {
case GfxFbBltVideoFill:
diff --git a/stand/efi/loader/framebuffer.c b/stand/efi/loader/framebuffer.c
--- a/stand/efi/loader/framebuffer.c
+++ b/stand/efi/loader/framebuffer.c
@@ -856,6 +856,7 @@
struct efi_fb efifb;
EFI_STATUS status;
u_int mode;
+ extern bool ignore_gop_blt;
if (gop == NULL) {
snprintf(command_errbuf, sizeof(command_errbuf),
@@ -866,7 +867,7 @@
if (argc < 2)
goto usage;
- if (!strcmp(argv[1], "set")) {
+ if (strcmp(argv[1], "set") == 0) {
char *cp;
if (argc != 3)
@@ -884,7 +885,26 @@
return (CMD_ERROR);
}
(void) cons_update_mode(true);
+ } else if (strcmp(argv[1], "blt") == 0) {
+ /*
+ * "blt on" does allow gop->Blt() to be used (default).
+ * "blt off" does block gop->Blt() to be used and use
+ * software rendering instead.
+ */
+ if (argc != 3)
+ goto usage;
+ if (strcmp(argv[2], "on") == 0)
+ ignore_gop_blt = false;
+ else if (strcmp(argv[2], "off") == 0)
+ ignore_gop_blt = true;
+ else
+ goto usage;
} else if (strcmp(argv[1], "off") == 0) {
+ /*
+ * Tell console to use SimpleTextOutput protocol.
+ * This means that we do not render the glyphs, but rely on
+ * UEFI firmware to draw on ConsOut device(s).
+ */
(void) cons_update_mode(false);
} else if (strcmp(argv[1], "get") == 0) {
edid_res_list_t res;
@@ -908,7 +928,7 @@
}
print_efifb(gop->Mode->Mode, &efifb, 1);
printf("\n");
- } else if (!strcmp(argv[1], "list")) {
+ } else if (strcmp(argv[1], "list") == 0) {
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
UINTN infosz;
@@ -931,7 +951,7 @@
usage:
snprintf(command_errbuf, sizeof(command_errbuf),
- "usage: %s [list | get | set <mode> | off]", argv[0]);
+ "usage: %s [list | get | set <mode> | off | blt <on|off>]", argv[0]);
return (CMD_ERROR);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 22, 9:28 PM (5 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16780487
Default Alt Text
D49073.id151261.diff (2 KB)
Attached To
Mode
D49073: loader.efi: add "gop blt <on|off>" command
Attached
Detach File
Event Timeline
Log In to Comment