From a9c0b699c0b6f43b4b60a6197ddccd34fb36efe4 Mon Sep 17 00:00:00 2001 From: Paulo Flabiano Smorigo Date: Sat, 11 May 2013 11:25:29 +0200 Subject: [PATCH 01/73] * grub-core/net/bootp.c (grub_cmd_bootp): Check if there is any card present. * include/grub/err.h (grub_err_t): New enum value GRUB_ERR_NET_NO_CARD. --- ChangeLog | 6 ++++++ grub-core/net/bootp.c | 3 +++ include/grub/err.h | 1 + 3 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0dedc844b..bbaed8412 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-05-11 Paulo Flabiano Smorigo + + * grub-core/net/bootp.c (grub_cmd_bootp): Check if there is any card + present. + * include/grub/err.h (grub_err_t): New enum value GRUB_ERR_NET_NO_CARD. + 2013-05-11 Vladimir Serbinenko * grub-core/tests/setjmp_test.c: Ignore missing noreturn. diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c index c8ef4d662..e0ab47e12 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -447,6 +447,9 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)), ncards++; } + if (ncards == 0) + return grub_error (GRUB_ERR_NET_NO_CARD, N_("no network card found")); + ifaces = grub_zalloc (ncards * sizeof (ifaces[0])); if (!ifaces) return grub_errno; diff --git a/include/grub/err.h b/include/grub/err.h index 0f9b20830..9896fccf9 100644 --- a/include/grub/err.h +++ b/include/grub/err.h @@ -62,6 +62,7 @@ typedef enum GRUB_ERR_NET_ROUTE_LOOP, GRUB_ERR_NET_NO_ROUTE, GRUB_ERR_NET_NO_ANSWER, + GRUB_ERR_NET_NO_CARD, GRUB_ERR_WAIT, GRUB_ERR_BUG, GRUB_ERR_NET_PORT_CLOSED, From 62b15edfd1b7c88ccb7f1d9f9292dc9c9a00f4cb Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 11 May 2013 15:48:08 +0200 Subject: [PATCH 03/73] Fix distfiles list. Reported by: Andrey Borzenkov --- ChangeLog | 7 ++++++- Makefile.am | 2 +- Makefile.util.def | 1 + conf/Makefile.extra-dist | 6 ++++-- gentpl.py | 1 + util/import_gcry.py | 16 +++++++++++++++- 6 files changed, 28 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index bbaed8412..9b9630376 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ -2013-05-11 Paulo Flabiano Smorigo +2013-05-11 Vladimir Serbinenko + + Fix distfiles list. + Reported by: Andrey Borzenkov + +2013-05-11 Paulo Flabiano Smorigo * grub-core/net/bootp.c (grub_cmd_bootp): Check if there is any card present. diff --git a/Makefile.am b/Makefile.am index 9889023e1..9ebe7a874 100644 --- a/Makefile.am +++ b/Makefile.am @@ -376,7 +376,7 @@ if COND_powerpc_ieee1275 BOOTCHECKS = bootcheck-linux-ppc endif -EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg +EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ diff --git a/Makefile.util.def b/Makefile.util.def index dc621db20..6cc15cbf2 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -550,6 +550,7 @@ script = { testcase; name = gettext_strings_test; common = tests/gettext_strings_test.in; + extra_dist = po/exclude.pot; }; script = { diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index 2e365008f..dc788a151 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -26,17 +26,18 @@ EXTRA_DIST += grub-core/gensymlist.sh EXTRA_DIST += grub-core/genemuinit.sh EXTRA_DIST += grub-core/genemuinitheader.sh -EXTRA_DIST += grub-core/lib/libgcrypt/cipher +EXTRA_DIST += grub-core/lib/libgcrypt +EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h') EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h') EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/gnulib -name '*.h') EXTRA_DIST += grub-core/efiemu/runtime/config.h -EXTRA_DIST += grub-core/lib/libgcrypt/src/gcrypt.h.in EXTRA_DIST += grub-core/lib/LzmaDec.c EXTRA_DIST += BUGS EXTRA_DIST += util/i386/efi/grub-dumpdevtree +EXTRA_DIST += util/spkmodem-recv.c EXTRA_DIST += util/import_gcrypth.sed EXTRA_DIST += m4/gnulib-cache.m4 @@ -53,3 +54,4 @@ EXTRA_DIST += m4/printf-posix.m4 EXTRA_DIST += m4/threadlib.m4 EXTRA_DIST += m4/uintmax_t.m4 EXTRA_DIST += m4/visibility.m4 +EXTRA_DIST += m4/math_h.m4 diff --git a/gentpl.py b/gentpl.py index 8674622f1..22a8b0e34 100644 --- a/gentpl.py +++ b/gentpl.py @@ -541,6 +541,7 @@ chmod a+x [+ name +] """) r += gvar_add("CLEANFILES", "[+ name +]") + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add("dist_noinst_DATA", platform_sources(platform)) return r diff --git a/util/import_gcry.py b/util/import_gcry.py index afa8e697e..342cba3a6 100644 --- a/util/import_gcry.py +++ b/util/import_gcry.py @@ -473,7 +473,17 @@ for cipher_file in cipher_files: cryptolist.close () for src in sorted (os.listdir (os.path.join (indir, "src"))): - if src == "versioninfo.rc.in": + if src == "versioninfo.rc.in" or src == "ath.c" or src == "ChangeLog-2011" \ + or src == "dumpsexp.c" or src == "fips.c" or src == "gcrypt.h.in" \ + or src == "gcryptrnd.c"or src == "getrandom.c" \ + or src == "global.c" or src == "hmac256.c" \ + or src == "hwfeatures.c" or src == "libgcrypt-config.in" \ + or src == "libgcrypt.def" or src == "libgcrypt.m4" \ + or src == "libgcrypt.vers" or src == "Makefile.am" \ + or src == "Manifest" or src == "misc.c" \ + or src == "missing-string.c" or src == "module.c" \ + or src == "secmem.c" or src == "sexp.c" \ + or src == "stdmem.c" or src == "visibility.c": continue outfile = os.path.join (basedir, "src", src) infile = os.path.join (indir, "src", src) @@ -499,6 +509,10 @@ for src in sorted (os.listdir (os.path.join (indir, "src"))): fw.close () for src in sorted (os.listdir (os.path.join (indir, "mpi"))): + if src == "config.links" or src == "ChangeLog-2011" \ + or src == "mpi-scan.c" or src == "Manifest" \ + or src == "Makefile.am": + continue infile = os.path.join (indir, "mpi", src) outfile = os.path.join (basedir, "mpi", src) if os.path.isdir (infile): From 50268344c07603de64b90b7cad593d00e22370ea Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 11 May 2013 15:54:22 +0200 Subject: [PATCH 04/73] * util/grub-install.in: Gettextize "Not found" message. --- ChangeLog | 4 ++++ util/grub-install.in | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b9630376..cd8213a1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-11 Vladimir Serbinenko + + * util/grub-install.in: Gettextize "Not found" message. + 2013-05-11 Vladimir Serbinenko Fix distfiles list. diff --git a/util/grub-install.in b/util/grub-install.in index 9fb0ee69b..3a33797cd 100644 --- a/util/grub-install.in +++ b/util/grub-install.in @@ -348,7 +348,9 @@ if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "$ if test -f "$1"; then : else - echo "$1: Not found." 1>&2 + # TRANSLATORS: This message is shown when required executable `%s' + # isn't found + gettext_printf "%s: Not found.\n" "$1" 1>&2 exit 1 fi fi @@ -357,7 +359,9 @@ set "$grub_mkimage" dummy if test -f "$1"; then : else - echo "$1: Not found." 1>&2 + # TRANSLATORS: This message is shown when required executable `%s' + # isn't found + gettext_printf "%s: Not found.\n" "$1" 1>&2 exit 1 fi @@ -697,14 +701,18 @@ elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-ieee1275" ] if test -f "$1"; then : else - echo "$1: Not found." 1>&2 + # TRANSLATORS: This message is shown when required executable `%s' + # isn't found + gettext_printf "%s: Not found.\n" "$1" 1>&2 exit 1 fi set "$nvsetenv" dummy if test -f "$1"; then : else - echo "$1: Not found." 1>&2 + # TRANSLATORS: This message is shown when required executable `%s' + # isn't found + gettext_printf "%s: Not found.\n" "$1" 1>&2 exit 1 fi if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" != "powerpc-ieee1275" ] \ From 1202c76486d02503551fa9fa068d4c549c5c72f1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 14 May 2013 08:41:39 +0200 Subject: [PATCH 05/73] * tests/util/grub-shell.in: Remove the temporary directory on grub-emu after the test. --- ChangeLog | 5 +++++ tests/util/grub-shell.in | 1 + 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index cd8213a1b..f7b3efe2a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-14 Vladimir Serbinenko + + * tests/util/grub-shell.in: Remove the temporary directory on grub-emu + after the test. + 2013-05-11 Vladimir Serbinenko * util/grub-install.in: Gettextize "Not found" message. diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index f259bb3f9..a0ec1ac23 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -418,6 +418,7 @@ elif [ x$boot = xemu ]; then cp "${cfgfile}" "$grubdir/grub.cfg" cp "${source}" "$grubdir/testcase.cfg" @builddir@/grub-core/grub-emu -m "$device_map" -d "$grubdir" | tr -d "\r" | do_trim + rm -rf "$grubdir" else timeout -s KILL $timeout "${qemu}" ${qemuopts} -nographic ${serial_null} -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | cat | tr -d "\r" | do_trim fi From a73b31ce5c5ab0cfb3f815c714371ff1412f27d3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 14 May 2013 08:47:10 +0200 Subject: [PATCH 06/73] * po/exclude.pot: Add missing string "%C". --- ChangeLog | 4 ++++ po/exclude.pot | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f7b3efe2a..0b0fa4ae6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-14 Vladimir Serbinenko + + * po/exclude.pot: Add missing string "%C". + 2013-05-14 Vladimir Serbinenko * tests/util/grub-shell.in: Remove the temporary directory on grub-emu diff --git a/po/exclude.pot b/po/exclude.pot index 341c45ec3..59938dcc2 100644 --- a/po/exclude.pot +++ b/po/exclude.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2013-05-07 00:07+0200\n" +"PO-Revision-Date: 2013-05-12 14:21+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -4986,3 +4986,7 @@ msgstr "" #, c-format msgid "guessing the root device failed, because of `%s'" msgstr "" +#: grub-core/commands/cat.c:106 +#, c-format +msgid "%C" +msgstr "" From c8d6cc3cf0fa120e2112317cb4bc5d083946c2c2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 14 May 2013 08:54:18 +0200 Subject: [PATCH 07/73] * grub-core/normal/cmdline.c (grub_cmdline_get): Fix off-by-one error to avoid losing last column. --- ChangeLog | 5 +++++ grub-core/normal/cmdline.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b0fa4ae6..00c23e229 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-14 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): Fix off-by-one error + to avoid losing last column. + 2013-05-14 Vladimir Serbinenko * po/exclude.pot: Add missing string "%C". diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c index a9627ca76..71d9bd1fc 100644 --- a/grub-core/normal/cmdline.c +++ b/grub-core/normal/cmdline.c @@ -237,9 +237,9 @@ grub_cmdline_get (const char *prompt_translated) void cl_set_pos (struct cmdline_term *cl_term) { - cl_term->xpos = (cl_term->prompt_len + lpos) % (cl_term->width - 1); + cl_term->xpos = (cl_term->prompt_len + lpos) % cl_term->width; cl_term->ypos = cl_term->ystart - + (cl_term->prompt_len + lpos) / (cl_term->width - 1); + + (cl_term->prompt_len + lpos) / cl_term->width; grub_term_gotoxy (cl_term->term, cl_term->xpos, cl_term->ypos); } From cdce14fad47960ab59a0a11e5909492b0fe3afd4 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 14 May 2013 08:57:18 +0200 Subject: [PATCH 08/73] Progressively skip menu elements on small terminals rather than crashing. --- ChangeLog | 5 + grub-core/normal/main.c | 17 +- grub-core/normal/menu_entry.c | 203 ++++---- grub-core/normal/menu_text.c | 350 ++++++++------ grub-core/normal/term.c | 53 +- grub-core/tests/checksums.h | 804 ++++++++++++++++--------------- grub-core/tests/video_checksum.c | 2 +- include/grub/normal.h | 18 +- include/grub/term.h | 20 - include/grub/unicode.h | 1 + 10 files changed, 798 insertions(+), 675 deletions(-) diff --git a/ChangeLog b/ChangeLog index 00c23e229..aff128113 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-14 Vladimir Serbinenko + + Progressively skip menu elements on small terminals rather + than crashing. + 2013-05-14 Vladimir Serbinenko * grub-core/normal/cmdline.c (grub_cmdline_get): Fix off-by-one error diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c index ffc2cd221..259c0aa4f 100644 --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c @@ -235,7 +235,8 @@ read_config_file (const char *config) /* Initialize the screen. */ void -grub_normal_init_page (struct grub_term_output *term) +grub_normal_init_page (struct grub_term_output *term, + int y) { grub_ssize_t msg_len; int posx; @@ -260,8 +261,10 @@ grub_normal_init_page (struct grub_term_output *term) } posx = grub_getstringwidth (unicode_msg, last_position, term); - posx = (grub_term_width (term) - posx) / 2; - grub_term_gotoxy (term, posx, 1); + posx = ((int) grub_term_width (term) - posx) / 2; + if (posx < 0) + posx = 0; + grub_term_gotoxy (term, posx, y); grub_print_ucs4 (unicode_msg, last_position, 0, 0, term); grub_putcode ('\n', term); @@ -405,10 +408,14 @@ grub_normal_reader_init (int nested) FOR_ACTIVE_TERM_OUTPUTS(term) { - grub_normal_init_page (term); + grub_normal_init_page (term, 1); grub_term_setcursor (term, 1); - grub_print_message_indented (msg_formatted, 3, STANDARD_MARGIN, term); + if (grub_term_width (term) > 3 + STANDARD_MARGIN + 20) + grub_print_message_indented (msg_formatted, 3, STANDARD_MARGIN, term); + else + grub_print_message_indented (msg_formatted, 0, 0, term); + grub_putcode ('\n', term); grub_putcode ('\n', term); grub_putcode ('\n', term); } diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c index fae258a3f..a26a50616 100644 --- a/grub-core/normal/menu_entry.c +++ b/grub-core/normal/menu_entry.c @@ -50,8 +50,7 @@ struct per_term_screen { struct grub_term_output *term; int y_line_start; - /* Number of entries. */ - int num_entries; + struct grub_term_screen_geometry geo; }; struct screen @@ -118,22 +117,13 @@ ensure_space (struct line *linep, int extra) return 1; } -/* The max column number of an entry. The last "-1" is for a - continuation marker. */ -static inline int -grub_term_entry_width (struct grub_term_output *term) -{ - return grub_term_border_width (term) - GRUB_TERM_MARGIN * 2 - 2; -} - - /* Return the number of lines occupied by this line on the screen. */ static int get_logical_num_lines (struct line *linep, struct per_term_screen *term_screen) { return (grub_getstringwidth (linep->buf, linep->buf + linep->len, term_screen->term) - / grub_term_entry_width (term_screen->term)) + 1; + / term_screen->geo.entry_width) + 1; } static void @@ -156,10 +146,28 @@ print_empty_line (int y, struct per_term_screen *term_screen) int i; grub_term_gotoxy (term_screen->term, - GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1, - y + GRUB_TERM_FIRST_ENTRY_Y); + term_screen->geo.first_entry_x, + y + term_screen->geo.first_entry_y); - for (i = 0; i < grub_term_entry_width (term_screen->term) + 1; i++) + for (i = 0; i < term_screen->geo.entry_width + 1; i++) + grub_putcode (' ', term_screen->term); +} + +static void +print_updown (int upflag, int downflag, struct per_term_screen *term_screen) +{ + grub_term_gotoxy (term_screen->term, term_screen->geo.first_entry_x + + term_screen->geo.entry_width + 1 + + term_screen->geo.border, + term_screen->geo.first_entry_y); + + if (upflag && downflag) + grub_putcode (GRUB_UNICODE_UPDOWNARROW, term_screen->term); + else if (upflag) + grub_putcode (GRUB_UNICODE_UPARROW, term_screen->term); + else if (downflag) + grub_putcode (GRUB_UNICODE_DOWNARROW, term_screen->term); + else grub_putcode (' ', term_screen->term); } @@ -167,9 +175,10 @@ print_empty_line (int y, struct per_term_screen *term_screen) static void print_up (int flag, struct per_term_screen *term_screen) { - grub_term_gotoxy (term_screen->term, GRUB_TERM_LEFT_BORDER_X - + grub_term_border_width (term_screen->term), - GRUB_TERM_FIRST_ENTRY_Y); + grub_term_gotoxy (term_screen->term, term_screen->geo.first_entry_x + + term_screen->geo.entry_width + 1 + + term_screen->geo.border, + term_screen->geo.first_entry_y); if (flag) grub_putcode (GRUB_UNICODE_UPARROW, term_screen->term); @@ -181,10 +190,11 @@ print_up (int flag, struct per_term_screen *term_screen) static void print_down (int flag, struct per_term_screen *term_screen) { - grub_term_gotoxy (term_screen->term, GRUB_TERM_LEFT_BORDER_X - + grub_term_border_width (term_screen->term), - GRUB_TERM_TOP_BORDER_Y - + term_screen->num_entries); + grub_term_gotoxy (term_screen->term, term_screen->geo.first_entry_x + + term_screen->geo.entry_width + 1 + + term_screen->geo.border, + term_screen->geo.first_entry_y + + term_screen->geo.num_entries - 1); if (flag) grub_putcode (GRUB_UNICODE_DOWNARROW, term_screen->term); @@ -210,17 +220,20 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen, for (i = 0; i < screen->line; i++, linep++) y += get_logical_num_lines (linep, term_screen); linep = screen->lines + screen->line; - y += grub_getstringwidth (linep->buf, linep->buf + screen->column, - term_screen->term) / grub_term_entry_width (term_screen->term); - + int t = grub_getstringwidth (linep->buf, linep->buf + screen->column, + term_screen->term); + y += t / term_screen->geo.entry_width; + if (t % term_screen->geo.entry_width == 0 + && t != 0 && screen->column == linep->len) + y--; /* Check if scrolling is necessary. */ - if (y < 0 || y >= term_screen->num_entries) + if (y < 0 || y >= term_screen->geo.num_entries) { int delta; if (y < 0) delta = -y; else - delta = term_screen->num_entries - 1 - y; + delta = term_screen->geo.num_entries - 1 - y; term_screen->y_line_start += delta; region_start = 0; @@ -265,24 +278,22 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen, if (i == region_start || linep == screen->lines + screen->line || (i > region_start && mode == ALL_LINES)) { - grub_term_gotoxy (term_screen->term, GRUB_TERM_LEFT_BORDER_X - + GRUB_TERM_MARGIN + 1, (y < 0 ? 0 : y) - + GRUB_TERM_FIRST_ENTRY_Y); + grub_term_gotoxy (term_screen->term, term_screen->geo.first_entry_x, + (y < 0 ? 0 : y) + + term_screen->geo.first_entry_y); grub_print_ucs4_menu (linep->buf, linep->buf + linep->len, - GRUB_TERM_LEFT_BORDER_X - + GRUB_TERM_MARGIN + 1, - GRUB_TERM_MARGIN - + GRUB_TERM_SCROLL_WIDTH, + term_screen->geo.first_entry_x, + term_screen->geo.right_margin, term_screen->term, (y < 0) ? -y : 0, - term_screen->num_entries + term_screen->geo.num_entries - ((y > 0) ? y : 0), '\\', *pos); } y += get_logical_num_lines (linep, term_screen); - if (y >= term_screen->num_entries) + if (y >= term_screen->geo.num_entries) { if (i + 1 < screen->num_lines) down_flag = 1; @@ -292,16 +303,25 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen, i++; if (mode == ALL_LINES && i == screen->num_lines) - for (; y < term_screen->num_entries; y++) + for (; y < term_screen->geo.num_entries; y++) print_empty_line (y, term_screen); } - while (y < term_screen->num_entries); + while (y < term_screen->geo.num_entries); /* Draw up and down arrows. */ - if (up) - print_up (up_flag, term_screen); - if (down) - print_down (down_flag, term_screen); + + if (term_screen->geo.num_entries == 1) + { + if (up || down) + print_updown (up_flag, down_flag, term_screen); + } + else + { + if (up) + print_up (up_flag, term_screen); + if (down) + print_down (down_flag, term_screen); + } } /* Place the cursor. */ @@ -318,15 +338,13 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen, y += get_logical_num_lines (screen->lines + i, term_screen); if (cpos >= &(screen->lines[screen->line].pos[term_screen - screen->terms])[0]) grub_term_gotoxy (term_screen->term, - cpos->x + GRUB_TERM_LEFT_BORDER_X - + GRUB_TERM_MARGIN + 1, + cpos->x + term_screen->geo.first_entry_x, cpos->y + y - + GRUB_TERM_FIRST_ENTRY_Y); + + term_screen->geo.first_entry_y); else grub_term_gotoxy (term_screen->term, - GRUB_TERM_LEFT_BORDER_X - + GRUB_TERM_MARGIN + 1, - y + GRUB_TERM_FIRST_ENTRY_Y); + term_screen->geo.first_entry_x, + y + term_screen->geo.first_entry_y); } @@ -1003,57 +1021,58 @@ complete (struct screen *screen, int continuous, int update) if (restore) for (i = 0; i < screen->nterms; i++) { + int width = grub_term_width (screen->terms[i].term) - 2; + if (width > 15) + width -= 6; int num_sections = ((completion_buffer.len - + grub_term_width (screen->terms[i].term) - - 8 - 1) - / (grub_term_width (screen->terms[i].term) - - 8)); + + width - 1) + / width); grub_uint32_t *endp; grub_uint16_t pos; grub_uint32_t *p = ucs4; pos = grub_term_getxy (screen->terms[i].term); - grub_term_gotoxy (screen->terms[i].term, 0, - grub_term_height (screen->terms[i].term) - 3); screen->completion_shown = 1; grub_term_gotoxy (screen->terms[i].term, 0, - grub_term_height (screen->terms[i].term) - 3); - grub_puts_terminal (" ", screen->terms[i].term); - switch (completion_type) + screen->terms[i].geo.timeout_y); + if (screen->terms[i].geo.timeout_lines >= 2) { - case GRUB_COMPLETION_TYPE_COMMAND: - grub_puts_terminal (_("Possible commands are:"), - screen->terms[i].term); - break; - case GRUB_COMPLETION_TYPE_DEVICE: - grub_puts_terminal (_("Possible devices are:"), - screen->terms[i].term); - break; - case GRUB_COMPLETION_TYPE_FILE: - grub_puts_terminal (_("Possible files are:"), - screen->terms[i].term); - break; - case GRUB_COMPLETION_TYPE_PARTITION: - grub_puts_terminal (_("Possible partitions are:"), - screen->terms[i].term); - break; - case GRUB_COMPLETION_TYPE_ARGUMENT: - grub_puts_terminal (_("Possible arguments are:"), - screen->terms[i].term); - break; - default: - grub_puts_terminal (_("Possible things are:"), - screen->terms[i].term); - break; + grub_puts_terminal (" ", screen->terms[i].term); + switch (completion_type) + { + case GRUB_COMPLETION_TYPE_COMMAND: + grub_puts_terminal (_("Possible commands are:"), + screen->terms[i].term); + break; + case GRUB_COMPLETION_TYPE_DEVICE: + grub_puts_terminal (_("Possible devices are:"), + screen->terms[i].term); + break; + case GRUB_COMPLETION_TYPE_FILE: + grub_puts_terminal (_("Possible files are:"), + screen->terms[i].term); + break; + case GRUB_COMPLETION_TYPE_PARTITION: + grub_puts_terminal (_("Possible partitions are:"), + screen->terms[i].term); + break; + case GRUB_COMPLETION_TYPE_ARGUMENT: + grub_puts_terminal (_("Possible arguments are:"), + screen->terms[i].term); + break; + default: + grub_puts_terminal (_("Possible things are:"), + screen->terms[i].term); + break; + } + + grub_puts_terminal ("\n ", screen->terms[i].term); } - grub_puts_terminal ("\n ", screen->terms[i].term); - - p += (count % num_sections) - * (grub_term_width (screen->terms[i].term) - 8); - endp = p + (grub_term_width (screen->terms[i].term) - 8); + p += (count % num_sections) * width; + endp = p + width; if (p != ucs4) grub_putcode (GRUB_UNICODE_LEFTARROW, screen->terms[i].term); @@ -1087,17 +1106,19 @@ static void clear_completions (struct per_term_screen *term_screen) { grub_uint16_t pos; - unsigned i, j; + unsigned j; + int i; pos = grub_term_getxy (term_screen->term); grub_term_gotoxy (term_screen->term, 0, - grub_term_height (term_screen->term) - 3); + term_screen->geo.timeout_y); - for (i = 0; i < 2; i++) + for (i = 0; i < term_screen->geo.timeout_lines; i++) { for (j = 0; j < grub_term_width (term_screen->term) - 1; j++) grub_putcode (' ', term_screen->term); - grub_putcode ('\n', term_screen->term); + if (i + 1 < term_screen->geo.timeout_lines) + grub_putcode ('\n', term_screen->term); } grub_term_gotoxy (term_screen->term, pos >> 8, pos & 0xFF); @@ -1249,7 +1270,7 @@ grub_menu_entry_run (grub_menu_entry_t entry) } /* Draw the screen. */ for (i = 0; i < screen->nterms; i++) - grub_menu_init_page (0, 1, &screen->terms[i].num_entries, + grub_menu_init_page (0, 1, &screen->terms[i].geo, screen->terms[i].term); update_screen_all (screen, 0, 0, 1, 1, ALL_LINES); for (i = 0; i < screen->nterms; i++) diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c index 36f8e738c..b6ec32ae5 100644 --- a/grub-core/normal/menu_text.c +++ b/grub-core/normal/menu_text.c @@ -34,17 +34,21 @@ static grub_uint8_t grub_color_menu_highlight; struct menu_viewer_data { int first, offset; - /* The number of entries shown at a time. */ - int num_entries; + struct grub_term_screen_geometry geo; + enum { + TIMEOUT_UNKNOWN, + TIMEOUT_NORMAL, + TIMEOUT_TERSE, + TIMEOUT_TERSE_NO_MARGIN + } timeout_msg; grub_menu_t menu; struct grub_term_output *term; }; static inline int -grub_term_cursor_x (struct grub_term_output *term) +grub_term_cursor_x (const struct grub_term_screen_geometry *geo) { - return (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term) - - GRUB_TERM_MARGIN - 1); + return (geo->first_entry_x + geo->entry_width); } grub_ssize_t @@ -83,15 +87,14 @@ grub_print_message_indented_real (const char *msg, int margin_left, (grub_uint8_t *) msg, -1, 0); last_position = unicode_msg + msg_len; - *last_position++ = '\n'; *last_position = 0; if (dry_run) ret = grub_ucs4_count_lines (unicode_msg, last_position, margin_left, margin_right, term); else - grub_print_ucs4 (unicode_msg, last_position, margin_left, - margin_right, term); + grub_print_ucs4_menu (unicode_msg, last_position, margin_left, + margin_right, term, 0, -1, 0, 0); grub_free (unicode_msg); @@ -106,39 +109,38 @@ grub_print_message_indented (const char *msg, int margin_left, int margin_right, } static void -draw_border (struct grub_term_output *term, int num_entries) +draw_border (struct grub_term_output *term, const struct grub_term_screen_geometry *geo) { - unsigned i; + int i; grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); - grub_term_gotoxy (term, GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y); + grub_term_gotoxy (term, geo->first_entry_x - 1, geo->first_entry_y - 1); grub_putcode (GRUB_UNICODE_CORNER_UL, term); - for (i = 0; i < (unsigned) grub_term_border_width (term) - 2; i++) + for (i = 0; i < geo->entry_width + 1; i++) grub_putcode (GRUB_UNICODE_HLINE, term); grub_putcode (GRUB_UNICODE_CORNER_UR, term); - for (i = 0; i < (unsigned) num_entries; i++) + for (i = 0; i < geo->num_entries; i++) { - grub_term_gotoxy (term, GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + i + 1); + grub_term_gotoxy (term, geo->first_entry_x - 1, geo->first_entry_y + i); grub_putcode (GRUB_UNICODE_VLINE, term); - grub_term_gotoxy (term, GRUB_TERM_MARGIN + grub_term_border_width (term) - - 1, - GRUB_TERM_TOP_BORDER_Y + i + 1); + grub_term_gotoxy (term, geo->first_entry_x + geo->entry_width + 1, + geo->first_entry_y + i); grub_putcode (GRUB_UNICODE_VLINE, term); } - grub_term_gotoxy (term, GRUB_TERM_MARGIN, - GRUB_TERM_TOP_BORDER_Y + num_entries + 1); + grub_term_gotoxy (term, geo->first_entry_x - 1, + geo->first_entry_y - 1 + geo->num_entries + 1); grub_putcode (GRUB_UNICODE_CORNER_LL, term); - for (i = 0; i < (unsigned) grub_term_border_width (term) - 2; i++) + for (i = 0; i < geo->entry_width + 1; i++) grub_putcode (GRUB_UNICODE_HLINE, term); grub_putcode (GRUB_UNICODE_CORNER_LR, term); grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); - grub_term_gotoxy (term, GRUB_TERM_MARGIN, - (GRUB_TERM_TOP_BORDER_Y + num_entries + grub_term_gotoxy (term, geo->first_entry_x - 1, + (geo->first_entry_y - 1 + geo->num_entries + GRUB_TERM_MARGIN + 1)); } @@ -150,10 +152,6 @@ print_message (int nested, int edit, struct grub_term_output *term, int dry_run) if (edit) { - if(dry_run) - ret++; - else - grub_putcode ('\n', term); ret += grub_print_message_indented_real (_("Minimum Emacs-like screen editing is \ supported. TAB lists completions. Press Ctrl-x or F10 to boot, Ctrl-c or F2 for a \ command-line or ESC to discard edits and return to the GRUB menu."), @@ -170,10 +168,6 @@ command-line or ESC to discard edits and return to the GRUB menu."), GRUB_UNICODE_DOWNARROW); if (!msg_translated) return 0; - if(dry_run) - ret++; - else - grub_putcode ('\n', term); ret += grub_print_message_indented_real (msg_translated, STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run); @@ -201,9 +195,8 @@ command-line or ESC to discard edits and return to the GRUB menu."), static void print_entry (int y, int highlight, grub_menu_entry_t entry, - struct grub_term_output *term) + const struct menu_viewer_data *data) { - int x; const char *title; grub_size_t title_len; grub_ssize_t len; @@ -231,78 +224,34 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, old_color_highlight = grub_term_highlight_color; grub_term_normal_color = grub_color_menu_normal; grub_term_highlight_color = grub_color_menu_highlight; - grub_term_setcolorstate (term, highlight + grub_term_setcolorstate (data->term, highlight ? GRUB_TERM_COLOR_HIGHLIGHT : GRUB_TERM_COLOR_NORMAL); - grub_term_gotoxy (term, GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y); - - int last_printed = 0; + grub_term_gotoxy (data->term, data->geo.first_entry_x, y); for (i = 0; i < len; i++) if (unicode_title[i] == '\n' || unicode_title[i] == '\b' || unicode_title[i] == '\r' || unicode_title[i] == '\e') unicode_title[i] = ' '; - for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 2, i = 0; - x < (int) (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term) - - GRUB_TERM_MARGIN);) - { - if (i < len - && x <= (int) (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term) - - GRUB_TERM_MARGIN - 1)) - { - grub_ssize_t width; - struct grub_unicode_glyph glyph; + if (data->geo.num_entries > 1) + grub_putcode (highlight ? '*' : ' ', data->term); - i += grub_unicode_aglomerate_comb (unicode_title + i, - len - i, &glyph); + grub_print_ucs4_menu (unicode_title, + unicode_title + len, + 0, + data->geo.right_margin, + data->term, 0, 1, + GRUB_UNICODE_RIGHTARROW, 0); - width = grub_term_getcharwidth (term, &glyph); - - grub_unicode_destroy_glyph (&glyph); - - if (x + width <= (int) (GRUB_TERM_LEFT_BORDER_X - + grub_term_border_width (term) - - GRUB_TERM_MARGIN - 1)) - last_printed = i; - x += width; - } - else - break; - } - - grub_putcode (highlight ? '*' : ' ', term); - - grub_print_ucs4 (unicode_title, - unicode_title + last_printed, 0, 0, term); - - if (last_printed != len) - { - grub_putcode (GRUB_UNICODE_RIGHTARROW, term); - struct grub_unicode_glyph pseudo_glyph = { - .base = GRUB_UNICODE_RIGHTARROW, - .variant = 0, - .attributes = 0, - .ncomb = 0, - .estimated_width = 1 - }; - x += grub_term_getcharwidth (term, &pseudo_glyph); - } - - for (; x < (int) (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term) - - GRUB_TERM_MARGIN); x++) - grub_putcode (' ', term); - - grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); - grub_putcode (' ', term); - - grub_term_gotoxy (term, grub_term_cursor_x (term), y); + grub_term_setcolorstate (data->term, GRUB_TERM_COLOR_NORMAL); + grub_term_gotoxy (data->term, grub_term_cursor_x (&data->geo), y); grub_term_normal_color = old_color_normal; grub_term_highlight_color = old_color_highlight; - grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); + grub_term_setcolorstate (data->term, GRUB_TERM_COLOR_NORMAL); grub_free (unicode_title); } @@ -313,49 +262,120 @@ print_entries (grub_menu_t menu, const struct menu_viewer_data *data) int i; grub_term_gotoxy (data->term, - GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (data->term), - GRUB_TERM_FIRST_ENTRY_Y); - - if (data->first) - grub_putcode (GRUB_UNICODE_UPARROW, data->term); - else - grub_putcode (' ', data->term); + data->geo.first_entry_x + data->geo.entry_width + + data->geo.border + 1, + data->geo.first_entry_y); + if (data->geo.num_entries != 1) + { + if (data->first) + grub_putcode (GRUB_UNICODE_UPARROW, data->term); + else + grub_putcode (' ', data->term); + } e = grub_menu_get_entry (menu, data->first); - for (i = 0; i < data->num_entries; i++) + for (i = 0; i < data->geo.num_entries; i++) { - print_entry (GRUB_TERM_FIRST_ENTRY_Y + i, data->offset == i, - e, data->term); + print_entry (data->geo.first_entry_y + i, data->offset == i, + e, data); if (e) e = e->next; } - grub_term_gotoxy (data->term, GRUB_TERM_LEFT_BORDER_X - + grub_term_border_width (data->term), - GRUB_TERM_TOP_BORDER_Y + data->num_entries); - - if (e) - grub_putcode (GRUB_UNICODE_DOWNARROW, data->term); + grub_term_gotoxy (data->term, data->geo.first_entry_x + data->geo.entry_width + + data->geo.border + 1, + data->geo.first_entry_y + data->geo.num_entries - 1); + if (data->geo.num_entries == 1) + { + if (data->first && e) + grub_putcode (GRUB_UNICODE_UPDOWNARROW, data->term); + else if (data->first) + grub_putcode (GRUB_UNICODE_UPARROW, data->term); + else if (e) + grub_putcode (GRUB_UNICODE_DOWNARROW, data->term); + else + grub_putcode (' ', data->term); + } else - grub_putcode (' ', data->term); + { + if (e) + grub_putcode (GRUB_UNICODE_DOWNARROW, data->term); + else + grub_putcode (' ', data->term); + } - grub_term_gotoxy (data->term, grub_term_cursor_x (data->term), - GRUB_TERM_FIRST_ENTRY_Y + data->offset); + grub_term_gotoxy (data->term, grub_term_cursor_x (&data->geo), + data->geo.first_entry_y + data->offset); } /* Initialize the screen. If NESTED is non-zero, assume that this menu is run from another menu or a command-line. If EDIT is non-zero, show a message for the menu entry editor. */ void -grub_menu_init_page (int nested, int edit, int *num_entries, +grub_menu_init_page (int nested, int edit, + struct grub_term_screen_geometry *geo, struct grub_term_output *term) { grub_uint8_t old_color_normal, old_color_highlight; + int msg_num_lines; + int bottom_message = 1; + int empty_lines = 1; + int version_msg = 1; + + geo->border = 1; + geo->first_entry_x = 1 /* margin */ + 1 /* border */; + geo->entry_width = grub_term_width (term) - 5; + + geo->first_entry_y = 2 /* two empty lines*/ + + 1 /* GNU GRUB version text */ + 1 /* top border */; + + geo->timeout_lines = 2; /* 3 lines for timeout message and bottom margin. 2 lines for the border. */ - *num_entries = grub_term_height (term) - GRUB_TERM_TOP_BORDER_Y - - (print_message (nested, edit, term, 1) + 3) - 2; + geo->num_entries = grub_term_height (term) - geo->first_entry_y + - 1 /* bottom border */ + - 1 /* empty line before info message*/ + - geo->timeout_lines /* timeout */ + - 1 /* empty final line */; + msg_num_lines = print_message (nested, edit, term, 1); + if (geo->num_entries - msg_num_lines < 3 + || geo->entry_width < 10) + { + geo->num_entries += 4; + geo->first_entry_y -= 2; + empty_lines = 0; + geo->first_entry_x -= 1; + geo->entry_width += 1; + } + if (geo->num_entries - msg_num_lines < 3 + || geo->entry_width < 10) + { + geo->num_entries += 2; + geo->first_entry_y -= 1; + geo->first_entry_x -= 1; + geo->entry_width += 2; + geo->border = 0; + } + + if (geo->num_entries - msg_num_lines < 3 + && geo->timeout_lines == 2) + { + geo->timeout_lines = 1; + geo->num_entries++; + } + + if (geo->num_entries - msg_num_lines < 3) + { + geo->num_entries += 1; + geo->first_entry_y -= 1; + version_msg = 0; + } + + if (geo->num_entries - msg_num_lines >= 2) + geo->num_entries -= msg_num_lines; + else + bottom_message = 0; /* By default, use the same colors for the menu. */ old_color_normal = grub_term_normal_color; @@ -369,13 +389,30 @@ grub_menu_init_page (int nested, int edit, int *num_entries, grub_parse_color_name_pair (&grub_color_menu_highlight, grub_env_get ("menu_color_highlight")); - grub_normal_init_page (term); + if (version_msg) + grub_normal_init_page (term, empty_lines); + else + grub_term_cls (term); + grub_term_normal_color = grub_color_menu_normal; grub_term_highlight_color = grub_color_menu_highlight; - draw_border (term, *num_entries); + if (geo->border) + draw_border (term, geo); grub_term_normal_color = old_color_normal; grub_term_highlight_color = old_color_highlight; - print_message (nested, edit, term, 0); + geo->timeout_y = geo->first_entry_y + geo->num_entries + + geo->border + empty_lines; + if (bottom_message) + { + grub_term_gotoxy (term, GRUB_TERM_MARGIN, + geo->timeout_y); + + print_message (nested, edit, term, 0); + geo->timeout_y += msg_num_lines; + } + geo->right_margin = grub_term_width (term) + - geo->first_entry_x + - geo->entry_width - 1; } static void @@ -383,13 +420,17 @@ menu_text_print_timeout (int timeout, void *dataptr) { const char *msg = _("The highlighted entry will be executed automatically in %ds."); + const char *msg_terse = _("%ds"); struct menu_viewer_data *data = dataptr; - char *msg_translated; - int posx; + char *msg_translated = 0; - grub_term_gotoxy (data->term, 0, grub_term_height (data->term) - 3); + grub_term_gotoxy (data->term, 0, data->geo.timeout_y); - msg_translated = grub_xasprintf (msg, timeout); + if (data->timeout_msg == TIMEOUT_TERSE + || data->timeout_msg == TIMEOUT_TERSE_NO_MARGIN) + msg_translated = grub_xasprintf (msg_terse, timeout); + else + msg_translated = grub_xasprintf (msg, timeout); if (!msg_translated) { grub_print_error (); @@ -397,15 +438,29 @@ menu_text_print_timeout (int timeout, void *dataptr) return; } - grub_print_message_indented (msg_translated, 3, 0, data->term); + if (data->timeout_msg == TIMEOUT_UNKNOWN) + { + data->timeout_msg = grub_print_message_indented_real (msg_translated, + 3, 1, data->term, 1) + <= data->geo.timeout_lines ? TIMEOUT_NORMAL : TIMEOUT_TERSE; + if (data->timeout_msg == TIMEOUT_TERSE) + { + grub_free (msg_translated); + msg_translated = grub_xasprintf (msg_terse, timeout); + if (grub_term_width (data->term) < 10) + data->timeout_msg = TIMEOUT_TERSE_NO_MARGIN; + } + } + + grub_print_message_indented (msg_translated, + data->timeout_msg == TIMEOUT_TERSE_NO_MARGIN ? 0 : 3, + data->timeout_msg == TIMEOUT_TERSE_NO_MARGIN ? 0 : 1, + data->term); grub_free (msg_translated); - - posx = grub_term_getxy (data->term) >> 8; - grub_print_spaces (data->term, grub_term_width (data->term) - posx - 1); grub_term_gotoxy (data->term, - grub_term_cursor_x (data->term), - GRUB_TERM_FIRST_ENTRY_Y + data->offset); + grub_term_cursor_x (&data->geo), + data->geo.first_entry_y + data->offset); grub_term_refresh (data->term); } @@ -417,10 +472,10 @@ menu_text_set_chosen_entry (int entry, void *dataptr) int complete_redraw = 0; data->offset = entry - data->first; - if (data->offset > data->num_entries - 1) + if (data->offset > data->geo.num_entries - 1) { - data->first = entry - (data->num_entries - 1); - data->offset = data->num_entries - 1; + data->first = entry - (data->geo.num_entries - 1); + data->offset = data->geo.num_entries - 1; complete_redraw = 1; } if (data->offset < 0) @@ -433,12 +488,12 @@ menu_text_set_chosen_entry (int entry, void *dataptr) print_entries (data->menu, data); else { - print_entry (GRUB_TERM_FIRST_ENTRY_Y + oldoffset, 0, + print_entry (data->geo.first_entry_y + oldoffset, 0, grub_menu_get_entry (data->menu, data->first + oldoffset), - data->term); - print_entry (GRUB_TERM_FIRST_ENTRY_Y + data->offset, 1, + data); + print_entry (data->geo.first_entry_y + data->offset, 1, grub_menu_get_entry (data->menu, data->first + data->offset), - data->term); + data); } grub_term_refresh (data->term); } @@ -457,13 +512,26 @@ static void menu_text_clear_timeout (void *dataptr) { struct menu_viewer_data *data = dataptr; + int i; - grub_term_gotoxy (data->term, 0, grub_term_height (data->term) - 3); - grub_print_spaces (data->term, grub_term_width (data->term) - 1); - grub_term_gotoxy (data->term, 0, grub_term_height (data->term) - 2); - grub_print_spaces (data->term, grub_term_width (data->term) - 1); - grub_term_gotoxy (data->term, grub_term_cursor_x (data->term), - GRUB_TERM_FIRST_ENTRY_Y + data->offset); + for (i = 0; i < data->geo.timeout_lines;i++) + { + grub_term_gotoxy (data->term, 0, data->geo.timeout_y + i); + grub_print_spaces (data->term, grub_term_width (data->term) - 1); + } + if (data->geo.num_entries <= 5 && !data->geo.border) + { + grub_term_gotoxy (data->term, data->geo.first_entry_x + data->geo.entry_width + + data->geo.border + 1, + data->geo.first_entry_y + data->geo.num_entries - 1); + grub_putcode (' ', data->term); + + data->geo.timeout_lines = 0; + data->geo.num_entries++; + print_entries (data->menu, data); + } + grub_term_gotoxy (data->term, grub_term_cursor_x (&data->geo), + data->geo.first_entry_y + data->offset); grub_term_refresh (data->term); } @@ -498,12 +566,12 @@ grub_menu_try_text (struct grub_term_output *term, data->first = 0; grub_term_setcursor (data->term, 0); - grub_menu_init_page (nested, 0, &data->num_entries, data->term); + grub_menu_init_page (nested, 0, &data->geo, data->term); - if (data->offset > data->num_entries - 1) + if (data->offset > data->geo.num_entries - 1) { - data->first = data->offset - (data->num_entries - 1); - data->offset = data->num_entries - 1; + data->first = data->offset - (data->geo.num_entries - 1); + data->offset = data->geo.num_entries - 1; } print_entries (menu, data); diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index 83b3bcef0..aba1a7336 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -50,7 +50,8 @@ print_ucs4_real (const grub_uint32_t * str, struct grub_term_output *term, int backlog, int dry_run, int fixed_tab, unsigned skip_lines, unsigned max_lines, - grub_uint32_t contchar, struct grub_term_pos *pos); + grub_uint32_t contchar, int fill_right, + struct grub_term_pos *pos); static struct term_state *term_states = NULL; @@ -132,6 +133,7 @@ grub_set_more (int onoff) enum { + GRUB_CP437_UPDOWNARROW = 0x12, GRUB_CP437_UPARROW = 0x18, GRUB_CP437_DOWNARROW = 0x19, GRUB_CP437_RIGHTARROW = 0x1a, @@ -159,6 +161,8 @@ map_code (grub_uint32_t in, struct grub_term_output *term) return GRUB_CP437_LEFTARROW; case GRUB_UNICODE_UPARROW: return GRUB_CP437_UPARROW; + case GRUB_UNICODE_UPDOWNARROW: + return GRUB_CP437_UPDOWNARROW; case GRUB_UNICODE_RIGHTARROW: return GRUB_CP437_RIGHTARROW; case GRUB_UNICODE_DOWNARROW: @@ -249,7 +253,7 @@ grub_puts_terminal (const char *str, struct grub_term_output *term) } print_ucs4_real (unicode_str, unicode_last_position, 0, 0, term, - 0, 0, 0, 0, -1, 0, 0); + 0, 0, 0, 0, -1, 0, 0, 0); grub_free (unicode_str); } @@ -562,7 +566,7 @@ print_ucs4_terminal (const grub_uint32_t * str, int dry_run, int fixed_tab, unsigned skip_lines, unsigned max_lines, grub_uint32_t contchar, - int primitive_wrap, struct grub_term_pos *pos) + int primitive_wrap, int fill_right, struct grub_term_pos *pos) { const grub_uint32_t *ptr; grub_ssize_t startwidth = dry_run ? 0 : get_startwidth (term, margin_left); @@ -587,6 +591,7 @@ print_ucs4_terminal (const grub_uint32_t * str, for (ptr = str; ptr < last_position; ptr++) { grub_ssize_t last_width = 0; + switch (*ptr) { case GRUB_UNICODE_LRE: @@ -667,10 +672,11 @@ print_ucs4_terminal (const grub_uint32_t * str, if (!wasn && contchar) putcode_real (contchar, term, fixed_tab); - if (contchar) + if (fill_right) fill_margin (term, margin_right); - grub_putcode ('\n', term); + if (!contchar || max_lines != 1) + grub_putcode ('\n', term); if (state != &local_state && ++state->num_lines >= (grub_ssize_t) grub_term_height (term) - 2) { @@ -724,11 +730,10 @@ print_ucs4_terminal (const grub_uint32_t * str, } if (line_start < last_position) - lines++; + lines++; if (!dry_run && !skip_lines && max_lines) { const grub_uint32_t *ptr2; - int sp; for (ptr2 = line_start; ptr2 < last_position; ptr2++) { @@ -741,12 +746,8 @@ print_ucs4_terminal (const grub_uint32_t * str, putcode_real (*ptr2, term, fixed_tab); } - if (contchar) - { - sp = max_width - pos[last_position - str].x + 1; - if (sp > 0) - grub_print_spaces (term, sp); - } + if (fill_right) + fill_margin (term, margin_right); } return dry_run ? lines : 0; } @@ -779,13 +780,14 @@ put_glyphs_terminal (struct grub_unicode_glyph *visual, int margin_left, int margin_right, struct grub_term_output *term, struct term_state *state, int fixed_tab, - grub_uint32_t contchar) + grub_uint32_t contchar, + int fill_right) { struct grub_unicode_glyph *visual_ptr; int since_last_nl = 1; for (visual_ptr = visual; visual_ptr < visual + visual_len; visual_ptr++) { - if (visual_ptr->base == '\n' && contchar) + if (visual_ptr->base == '\n' && fill_right) fill_margin (term, margin_right); putglyph (visual_ptr, term, fixed_tab); @@ -810,7 +812,7 @@ put_glyphs_terminal (struct grub_unicode_glyph *visual, } grub_unicode_destroy_glyph (visual_ptr); } - if (contchar && since_last_nl) + if (fill_right && since_last_nl) fill_margin (term, margin_right); return 0; @@ -832,7 +834,7 @@ print_backlog (struct grub_term_output *term, state->backlog_ucs4 + state->backlog_len, margin_left, margin_right, term, state, 0, state->backlog_fixed_tab, 0, -1, 0, 0, - 0); + 0, 0); if (!ret) { grub_free (state->free); @@ -849,7 +851,7 @@ print_backlog (struct grub_term_output *term, ret = put_glyphs_terminal (state->backlog_glyphs, state->backlog_len, margin_left, margin_right, term, state, - state->backlog_fixed_tab, 0); + state->backlog_fixed_tab, 0, 0); if (!ret) { grub_free (state->free); @@ -876,7 +878,8 @@ print_ucs4_real (const grub_uint32_t * str, struct grub_term_output *term, int backlog, int dry_run, int fixed_tab, unsigned skip_lines, unsigned max_lines, - grub_uint32_t contchar, struct grub_term_pos *pos) + grub_uint32_t contchar, int fill_right, + struct grub_term_pos *pos) { struct term_state *state = NULL; @@ -955,7 +958,7 @@ print_ucs4_real (const grub_uint32_t * str, { ret = put_glyphs_terminal (visual_show, visual_len_show, margin_left, margin_right, - term, state, fixed_tab, contchar); + term, state, fixed_tab, contchar, fill_right); if (!ret) grub_free (visual); @@ -966,7 +969,7 @@ print_ucs4_real (const grub_uint32_t * str, } return print_ucs4_terminal (str, last_position, margin_left, margin_right, term, state, dry_run, fixed_tab, skip_lines, - max_lines, contchar, !!contchar, pos); + max_lines, contchar, !!contchar, fill_right, pos); } void @@ -980,7 +983,7 @@ grub_print_ucs4_menu (const grub_uint32_t * str, { print_ucs4_real (str, last_position, margin_left, margin_right, term, 0, 0, 1, skip_lines, max_lines, - contchar, pos); + contchar, 1, pos); } void @@ -990,7 +993,7 @@ grub_print_ucs4 (const grub_uint32_t * str, struct grub_term_output *term) { print_ucs4_real (str, last_position, margin_left, margin_right, - term, 0, 0, 1, 0, -1, 0, 0); + term, 0, 0, 1, 0, -1, 0, 0, 0); } int @@ -1000,7 +1003,7 @@ grub_ucs4_count_lines (const grub_uint32_t * str, struct grub_term_output *term) { return print_ucs4_real (str, last_position, margin_left, margin_right, - term, 0, 1, 1, 0, -1, 0, 0); + term, 0, 1, 1, 0, -1, 0, 0, 0); } void @@ -1054,7 +1057,7 @@ grub_xnputs (const char *str, grub_size_t msg_len) { int cur; cur = print_ucs4_real (unicode_str, unicode_last_position, 0, 0, - term, grub_more, 0, 0, 0, -1, 0, 0); + term, grub_more, 0, 0, 0, -1, 0, 0, 0); if (cur) backlog = 1; } diff --git a/grub-core/tests/checksums.h b/grub-core/tests/checksums.h index 3539b64dd..2339d5a06 100644 --- a/grub-core/tests/checksums.h +++ b/grub-core/tests/checksums.h @@ -4,396 +4,420 @@ { "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xbb687653, 0xbb687653, 0xa81427a7, 0xa81427a7, 0x71d7f3b, 0x71d7f3b, 0x25fea6ca, 0x25fea6ca, 0x17c19d74, 0x17c19d74, 0x4779bf48, 0x4779bf48, 0xe424e759, 0xe424e759, 0xb57fb5ae, 0xb57fb5ae, 0xd877002b, 0xd877002b, 0xdd8d7442, 0xdd8d7442, 0xe2536fde, 0xe2536fde, 0x1ebba341, 0x1ebba341, 0xef042176, 0xef042176, 0x6137f228, 0x6137f228, 0xf04a8558, 0xf04a8558, 0xff72172d, 0xff72172d, 0x5f26278f, 0x5f26278f, 0x3ed777c, 0x3ed777c, 0xb1d686e, 0xb1d686e, 0x5cead249, 0x5cead249, 0x271487f6, 0x3b9ece9a, 0xccc3db5e, 0xccc3db5e, }, 45 }, { "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xd594219a, 0xd594219a, 0x254fa44c, 0x254fa44c, 0x30177d61, 0x30177d61, 0x1a576e20, 0x1a576e20, 0xe439395f, 0xe439395f, 0xb289a26f, 0xb289a26f, 0xc9eaceca, 0xc9eaceca, 0x9e76037b, 0x9e76037b, 0xfa098eb4, 0xfa098eb4, 0x5881d993, 0x5881d993, 0x3a4ac117, 0x3a4ac117, 0x203e9716, 0x203e9716, 0x67aed713, 0x67aed713, 0xb740eccb, 0xb740eccb, 0xd50247da, 0xd50247da, 0xe0c382bf, 0xe0c382bf, 0x95d81f9d, 0x95d81f9d, 0x1051b5ac, 0x1051b5ac, 0x71f00e30, 0x71f00e30, 0xe35fe082, 0xe35fe082, 0xeda25a7a, 0xc4543b1e, 0x4725b91c, 0x4725b91c, }, 45 }, { "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd803b53b, 0xd803b53b, 0x70b7ae8b, 0x70b7ae8b, 0xa20d9a15, 0xa20d9a15, 0x6113d33b, 0x6113d33b, 0xfd38d301, 0xfd38d301, 0x8b04db4, 0x8b04db4, 0xdae859df, 0xdae859df, 0x80cf138b, 0x80cf138b, 0xdfa6ef9, 0xdfa6ef9, 0x856adaf0, 0x856adaf0, 0x7023cc2d, 0x7023cc2d, 0xad7e7d54, 0xad7e7d54, 0xde8eff49, 0xde8eff49, 0x34355cc3, 0x34355cc3, 0x25adccda, 0x25adccda, 0x6d6c350d, 0x6d6c350d, 0x1c49b499, 0x1c49b499, 0x8188f1b4, 0x8188f1b4, 0x5556dc0c, 0x5556dc0c, 0xbd9ef1f5, 0xbd9ef1f5, 0x5176575b, 0xd3e2f7f1, 0xccda996c, 0xccda996c, }, 45 }, - { "gfxterm_menu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xa14ad466, 0x69520db1, 0xa14ad466, 0xe82e990f, 0x59c36f00, 0x59c36f00, 0xcba09304, 0xcba09304, 0xcba09304, 0x97b293e6, 0x97b293e6, 0x97b293e6, 0xd2fea778, 0xd2fea778, 0xd2fea778, 0x59c36f00, 0xe82e990f, 0xe82e990f, 0x59c36f00, }, 20 }, - { "gfxterm_menu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xa3faf149, 0xb4654ad0, 0xa3faf149, 0xff6942c6, 0xaa4593fe, 0xaa4593fe, 0xfda7eac8, 0xfda7eac8, 0xfda7eac8, 0x272045f3, 0x272045f3, 0x272045f3, 0x1b2c55ba, 0x1b2c55ba, 0x1b2c55ba, 0xaa4593fe, 0xff6942c6, 0xff6942c6, 0xaa4593fe, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xd5e4100a, 0x39522e26, 0xd5e4100a, 0x2e0276, 0xc9cbf769, 0xc9cbf769, 0x270340e6, 0x270340e6, 0x270340e6, 0x13ea67c8, 0x13ea67c8, 0x13ea67c8, 0x318e0f43, 0x318e0f43, 0x318e0f43, 0xc9cbf769, 0x2e0276, 0x2e0276, 0xc9cbf769, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x4df27666, 0xb8015ce1, 0x4df27666, 0x8bef2cac, 0x9813a416, 0x9813a416, 0x8c097a93, 0x8c097a93, 0x8c097a93, 0x87fc7e3c, 0x87fc7e3c, 0x87fc7e3c, 0x93febca5, 0x93febca5, 0x93febca5, 0x9813a416, 0x8bef2cac, 0x8bef2cac, 0x9813a416, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x6d1d5058, 0xb2d8ed2c, 0x6d1d5058, 0xe8936168, 0x5fcf013d, 0x5fcf013d, 0xcacb7f18, 0xcacb7f18, 0xcacb7f18, 0x3b887a05, 0x3b887a05, 0x3b887a05, 0x7c777982, 0x7c777982, 0x7c777982, 0x5fcf013d, 0xe8936168, 0xe8936168, 0x5fcf013d, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xeec86af1, 0x13493ea, 0xeec86af1, 0xee83739a, 0xdd28f52b, 0xdd28f52b, 0x35beeea3, 0x35beeea3, 0x35beeea3, 0x48a8a967, 0x48a8a967, 0x48a8a967, 0x2b9a774d, 0x2b9a774d, 0x2b9a774d, 0xdd28f52b, 0xee83739a, 0xee83739a, 0xdd28f52b, }, 20 }, - { "gfxterm_menu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xa14ad466, 0x69520db1, 0xa14ad466, 0xe82e990f, 0x59c36f00, 0x59c36f00, 0xcba09304, 0xcba09304, 0xcba09304, 0x97b293e6, 0x97b293e6, 0x97b293e6, 0xd2fea778, 0xd2fea778, 0xd2fea778, 0x59c36f00, 0xe82e990f, 0xe82e990f, 0x59c36f00, }, 20 }, - { "gfxterm_menu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xa3faf149, 0xb4654ad0, 0xa3faf149, 0xff6942c6, 0xaa4593fe, 0xaa4593fe, 0xfda7eac8, 0xfda7eac8, 0xfda7eac8, 0x272045f3, 0x272045f3, 0x272045f3, 0x1b2c55ba, 0x1b2c55ba, 0x1b2c55ba, 0xaa4593fe, 0xff6942c6, 0xff6942c6, 0xaa4593fe, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xd5e4100a, 0x39522e26, 0xd5e4100a, 0x2e0276, 0xc9cbf769, 0xc9cbf769, 0x270340e6, 0x270340e6, 0x270340e6, 0x13ea67c8, 0x13ea67c8, 0x13ea67c8, 0x318e0f43, 0x318e0f43, 0x318e0f43, 0xc9cbf769, 0x2e0276, 0x2e0276, 0xc9cbf769, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x9093f849, 0xc02929e3, 0x9093f849, 0xe2f077d4, 0x5387d57f, 0x5387d57f, 0x4e647c93, 0x4e647c93, 0x4e647c93, 0x6d05ba99, 0x6d05ba99, 0x6d05ba99, 0xc55eff54, 0xc55eff54, 0xc55eff54, 0x5387d57f, 0xe2f077d4, 0xe2f077d4, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbbe054f6, 0xbef13bfe, 0xbbe054f6, 0xa23fcfe0, 0xf83ee7aa, 0xf83ee7aa, 0xf25c3281, 0xf25c3281, 0xf25c3281, 0x366bb960, 0x366bb960, 0x366bb960, 0xf975ea72, 0xf975ea72, 0xf975ea72, 0xf83ee7aa, 0xa23fcfe0, 0xa23fcfe0, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x8cea8db2, 0x9688dd3b, 0x8cea8db2, 0x6fe82515, 0x724366e5, 0x724366e5, 0x10d1a394, 0x10d1a394, 0x10d1a394, 0xf3216bf2, 0xf3216bf2, 0xf3216bf2, 0x4d63fe8a, 0x4d63fe8a, 0x4d63fe8a, 0x724366e5, 0x6fe82515, 0x6fe82515, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x25e346a1, 0xbd5eb38b, 0x25e346a1, 0x9d469431, 0x5387d57f, 0x5387d57f, 0x4bd38a03, 0x4bd38a03, 0x4bd38a03, 0xb506d50a, 0xb506d50a, 0xb506d50a, 0xbdfe4c39, 0xbdfe4c39, 0xbdfe4c39, 0x5387d57f, 0x9d469431, 0x9d469431, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x6f33e7a0, 0x5716dafe, 0x6f33e7a0, 0xbfa18d18, 0xf83ee7aa, 0xf83ee7aa, 0x63d64c93, 0x63d64c93, 0x63d64c93, 0x2d80151e, 0x2d80151e, 0x2d80151e, 0xc75c6ed7, 0xc75c6ed7, 0xc75c6ed7, 0xf83ee7aa, 0xbfa18d18, 0xbfa18d18, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xffb24323, 0x6e8fa0be, 0xffb24323, 0xad5c8fa5, 0x724366e5, 0x724366e5, 0xe0762c40, 0xe0762c40, 0xe0762c40, 0x21ef3daa, 0x21ef3daa, 0x21ef3daa, 0xa5bab6e2, 0xa5bab6e2, 0xa5bab6e2, 0x724366e5, 0xad5c8fa5, 0xad5c8fa5, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x5a925b39, 0x36226b, 0x5a925b39, 0xafa322b7, 0x1c955882, 0x1c955882, 0x97519c3a, 0x97519c3a, 0x97519c3a, 0x1507738a, 0x1507738a, 0x1507738a, 0xdaeff6f6, 0xdaeff6f6, 0xdaeff6f6, 0x1c955882, 0xafa322b7, 0xafa322b7, 0x1c955882, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfb4aecf8, 0x17b91739, 0xfb4aecf8, 0xf7e3d211, 0x4d266f7a, 0x4d266f7a, 0x2d145f78, 0x2d145f78, 0x2d145f78, 0x61410c3e, 0x61410c3e, 0x61410c3e, 0x43e0bec0, 0x43e0bec0, 0x43e0bec0, 0x4d266f7a, 0xf7e3d211, 0xf7e3d211, 0x4d266f7a, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x4015c90f, 0x430ae98c, 0x4015c90f, 0xeb61f90d, 0x1ed9d731, 0x1ed9d731, 0xa1c3fdf0, 0xa1c3fdf0, 0xa1c3fdf0, 0x15c2bd78, 0x15c2bd78, 0x15c2bd78, 0x18eea13b, 0x18eea13b, 0x18eea13b, 0x1ed9d731, 0xeb61f90d, 0xeb61f90d, 0x1ed9d731, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x9093f849, 0xc02929e3, 0x9093f849, 0xe2f077d4, 0x5387d57f, 0x5387d57f, 0x4e647c93, 0x4e647c93, 0x4e647c93, 0x6d05ba99, 0x6d05ba99, 0x6d05ba99, 0xc55eff54, 0xc55eff54, 0xc55eff54, 0x5387d57f, 0xe2f077d4, 0xe2f077d4, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbbe054f6, 0xbef13bfe, 0xbbe054f6, 0xa23fcfe0, 0xf83ee7aa, 0xf83ee7aa, 0xf25c3281, 0xf25c3281, 0xf25c3281, 0x366bb960, 0x366bb960, 0x366bb960, 0xf975ea72, 0xf975ea72, 0xf975ea72, 0xf83ee7aa, 0xa23fcfe0, 0xa23fcfe0, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x8cea8db2, 0x9688dd3b, 0x8cea8db2, 0x6fe82515, 0x724366e5, 0x724366e5, 0x10d1a394, 0x10d1a394, 0x10d1a394, 0xf3216bf2, 0xf3216bf2, 0xf3216bf2, 0x4d63fe8a, 0x4d63fe8a, 0x4d63fe8a, 0x724366e5, 0x6fe82515, 0x6fe82515, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x25e346a1, 0xbd5eb38b, 0x25e346a1, 0x9d469431, 0x5387d57f, 0x5387d57f, 0x4bd38a03, 0x4bd38a03, 0x4bd38a03, 0xb506d50a, 0xb506d50a, 0xb506d50a, 0xbdfe4c39, 0xbdfe4c39, 0xbdfe4c39, 0x5387d57f, 0x9d469431, 0x9d469431, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x6f33e7a0, 0x5716dafe, 0x6f33e7a0, 0xbfa18d18, 0xf83ee7aa, 0xf83ee7aa, 0x63d64c93, 0x63d64c93, 0x63d64c93, 0x2d80151e, 0x2d80151e, 0x2d80151e, 0xc75c6ed7, 0xc75c6ed7, 0xc75c6ed7, 0xf83ee7aa, 0xbfa18d18, 0xbfa18d18, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xffb24323, 0x6e8fa0be, 0xffb24323, 0xad5c8fa5, 0x724366e5, 0x724366e5, 0xe0762c40, 0xe0762c40, 0xe0762c40, 0x21ef3daa, 0x21ef3daa, 0x21ef3daa, 0xa5bab6e2, 0xa5bab6e2, 0xa5bab6e2, 0x724366e5, 0xad5c8fa5, 0xad5c8fa5, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x5a925b39, 0x36226b, 0x5a925b39, 0xafa322b7, 0x1c955882, 0x1c955882, 0x97519c3a, 0x97519c3a, 0x97519c3a, 0x1507738a, 0x1507738a, 0x1507738a, 0xdaeff6f6, 0xdaeff6f6, 0xdaeff6f6, 0x1c955882, 0xafa322b7, 0xafa322b7, 0x1c955882, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfb4aecf8, 0x17b91739, 0xfb4aecf8, 0xf7e3d211, 0x4d266f7a, 0x4d266f7a, 0x2d145f78, 0x2d145f78, 0x2d145f78, 0x61410c3e, 0x61410c3e, 0x61410c3e, 0x43e0bec0, 0x43e0bec0, 0x43e0bec0, 0x4d266f7a, 0xf7e3d211, 0xf7e3d211, 0x4d266f7a, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x4015c90f, 0x430ae98c, 0x4015c90f, 0xeb61f90d, 0x1ed9d731, 0x1ed9d731, 0xa1c3fdf0, 0xa1c3fdf0, 0xa1c3fdf0, 0x15c2bd78, 0x15c2bd78, 0x15c2bd78, 0x18eea13b, 0x18eea13b, 0x18eea13b, 0x1ed9d731, 0xeb61f90d, 0xeb61f90d, 0x1ed9d731, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x4df27666, 0xb8015ce1, 0x4df27666, 0x8bef2cac, 0x9813a416, 0x9813a416, 0x8c097a93, 0x8c097a93, 0x8c097a93, 0x87fc7e3c, 0x87fc7e3c, 0x87fc7e3c, 0x93febca5, 0x93febca5, 0x93febca5, 0x9813a416, 0x8bef2cac, 0x8bef2cac, 0x9813a416, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x6d1d5058, 0xb2d8ed2c, 0x6d1d5058, 0xe8936168, 0x5fcf013d, 0x5fcf013d, 0xcacb7f18, 0xcacb7f18, 0xcacb7f18, 0x3b887a05, 0x3b887a05, 0x3b887a05, 0x7c777982, 0x7c777982, 0x7c777982, 0x5fcf013d, 0xe8936168, 0xe8936168, 0x5fcf013d, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xeec86af1, 0x13493ea, 0xeec86af1, 0xee83739a, 0xdd28f52b, 0xdd28f52b, 0x35beeea3, 0x35beeea3, 0x35beeea3, 0x48a8a967, 0x48a8a967, 0x48a8a967, 0x2b9a774d, 0x2b9a774d, 0x2b9a774d, 0xdd28f52b, 0xee83739a, 0xee83739a, 0xdd28f52b, }, 20 }, - { "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7a3f695f, 0xac449d41, 0x7a3f695f, 0x28a073b1, 0xf22da29a, 0x169cd2a2, 0x169cd2a2, 0x169cd2a2, 0xc3a67fb9, 0xc3a67fb9, 0xc3a67fb9, 0x6c67e914, 0x6c67e914, 0x6c67e914, 0x59c36f00, 0x28a073b1, 0x28a073b1, }, 18 }, - { "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x2ee70aea, 0x8f5328d2, 0x2ee70aea, 0x19fb9508, 0x2c3dfa69, 0x1f8453a4, 0x1f8453a4, 0x1f8453a4, 0xc9055b79, 0xc9055b79, 0xc9055b79, 0xef40ac6a, 0xef40ac6a, 0xef40ac6a, 0xaa4593fe, 0x19fb9508, 0x19fb9508, }, 18 }, - { "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xef842e14, 0x9b7cdc00, 0xef842e14, 0x750c3145, 0xb069b9a2, 0x3f87d41f, 0x3f87d41f, 0x3f87d41f, 0x8a031b3a, 0x8a031b3a, 0x8a031b3a, 0x4ed887f7, 0x4ed887f7, 0x4ed887f7, 0xc9cbf769, 0x750c3145, 0x750c3145, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0xf162dfa3, 0xe0f86fe6, 0xf162dfa3, 0x51f56384, 0xa9aef7c0, 0x7e4eeeb7, 0x7e4eeeb7, 0x7e4eeeb7, 0x902dc363, 0x902dc363, 0x902dc363, 0xd478551d, 0xd478551d, 0xd478551d, 0x1c3742c9, 0x51f56384, 0x51f56384, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x644b801, 0x8a201b04, 0x644b801, 0xa4508ec0, 0xcb189b31, 0x8279446f, 0x8279446f, 0x8279446f, 0x80b67d02, 0x80b67d02, 0x80b67d02, 0xa1cc8118, 0xa1cc8118, 0xa1cc8118, 0xcc5a7bed, 0xa4508ec0, 0xa4508ec0, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0x1e1a41fe, 0x237e53c4, 0x1e1a41fe, 0xd5890062, 0x7180f3ea, 0x6be1ad05, 0x6be1ad05, 0x6be1ad05, 0x680e4253, 0x680e4253, 0x680e4253, 0xed2cabb8, 0xed2cabb8, 0xed2cabb8, 0xef4a3312, 0xd5890062, 0xd5890062, }, 18 }, - { "gfxmenu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xcfa0e627, 0x8b7088da, 0xcfa0e627, 0xcd807142, 0xdc37dab7, 0x3886aa8f, 0x3886aa8f, 0x3886aa8f, 0xedbc0794, 0xedbc0794, 0xedbc0794, 0x427d9139, 0x427d9139, 0x427d9139, 0x59c36f00, 0xcd807142, 0xcd807142, }, 18 }, - { "gfxmenu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x64807934, 0x85d684c9, 0x64807934, 0x61726a79, 0x71c38b, 0x33c86a46, 0x33c86a46, 0x33c86a46, 0xe549629b, 0xe549629b, 0xe549629b, 0xc30c9588, 0xc30c9588, 0xc30c9588, 0xaa4593fe, 0x61726a79, 0x61726a79, }, 18 }, - { "gfxmenu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x9792b643, 0x1d769dd8, 0x9792b643, 0x3d74bd2f, 0x4411e313, 0xcbff8eae, 0xcbff8eae, 0xcbff8eae, 0x7e7b418b, 0x7e7b418b, 0x7e7b418b, 0xbaa0dd46, 0xbaa0dd46, 0xbaa0dd46, 0xc9cbf769, 0x3d74bd2f, 0x3d74bd2f, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xbdb8f583, 0x1e27b76, 0xbdb8f583, 0x91be6e17, 0xf93a81be, 0x8632932e, 0x8632932e, 0x8632932e, 0xa297894, 0xa297894, 0xa297894, 0x66f16747, 0x66f16747, 0x66f16747, 0x5387d57f, 0x91be6e17, 0x91be6e17, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbe72e1cb, 0x4943add3, 0xbe72e1cb, 0xa207f983, 0x58397d1d, 0x809530c5, 0x809530c5, 0x809530c5, 0x8b80ad8a, 0x8b80ad8a, 0x8b80ad8a, 0x425ad0af, 0x425ad0af, 0x425ad0af, 0xf83ee7aa, 0xa207f983, 0xa207f983, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xbc064047, 0x9e12d9ac, 0xbc064047, 0xf9bdce43, 0x7184c3f8, 0xc8fd1102, 0xc8fd1102, 0xc8fd1102, 0x81f910a3, 0x81f910a3, 0x81f910a3, 0xdb64e608, 0xdb64e608, 0xdb64e608, 0x724366e5, 0xf9bdce43, 0xf9bdce43, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x6181ad43, 0xe570d91, 0x6181ad43, 0x567fb1cc, 0xa8a3da, 0x5f74d9d, 0x5f74d9d, 0x5f74d9d, 0xed4861bc, 0xed4861bc, 0xed4861bc, 0xcd9c9ca8, 0xcd9c9ca8, 0xcd9c9ca8, 0x5387d57f, 0x567fb1cc, 0x567fb1cc, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1e5b6982, 0x789f961c, 0x1e5b6982, 0xc1ad694a, 0xbc4e843c, 0x27165c47, 0x27165c47, 0x27165c47, 0x5312181a, 0x5312181a, 0x5312181a, 0x9a1929fd, 0x9a1929fd, 0x9a1929fd, 0xf83ee7aa, 0xc1ad694a, 0xc1ad694a, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x73f85cef, 0x9469d68d, 0x73f85cef, 0x24779078, 0x6f964a90, 0x205a3335, 0x205a3335, 0x205a3335, 0x5d68cafd, 0x5d68cafd, 0x5d68cafd, 0x4129165e, 0x4129165e, 0x4129165e, 0x724366e5, 0x24779078, 0x24779078, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xa6ddcb95, 0xa3934314, 0xa6ddcb95, 0x16ab9b6c, 0x1755c99c, 0x1432b906, 0x1432b906, 0x1432b906, 0xb2aaa903, 0xb2aaa903, 0xb2aaa903, 0x3014dff7, 0x3014dff7, 0x3014dff7, 0x1c955882, 0x16ab9b6c, 0x16ab9b6c, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x18e25ecc, 0xe52f7def, 0x18e25ecc, 0x5bd10081, 0xf52b17e7, 0x781d42cf, 0x781d42cf, 0x781d42cf, 0x43cb6f95, 0x43cb6f95, 0x43cb6f95, 0xe7bb907d, 0xe7bb907d, 0xe7bb907d, 0x4d266f7a, 0x5bd10081, 0x5bd10081, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xa845bba2, 0xb67fe791, 0xa845bba2, 0x80452493, 0x437302fa, 0xbd263b46, 0xbd263b46, 0xbd263b46, 0xdd07a911, 0xdd07a911, 0xdd07a911, 0x75ab7095, 0x75ab7095, 0x75ab7095, 0x1ed9d731, 0x80452493, 0x80452493, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xa35a45c5, 0xacbc8410, 0xa35a45c5, 0xed2e11bd, 0x79f9376f, 0x6f125ff, 0x6f125ff, 0x6f125ff, 0x8aeace45, 0x8aeace45, 0x8aeace45, 0xe632d196, 0xe632d196, 0xe632d196, 0x5387d57f, 0xed2e11bd, 0xed2e11bd, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8a6fa170, 0x7605140e, 0x8a6fa170, 0xc030feb1, 0xa84da503, 0x70e1e8db, 0x70e1e8db, 0x70e1e8db, 0x7bf47594, 0x7bf47594, 0x7bf47594, 0xb22e08b1, 0xb22e08b1, 0xb22e08b1, 0xf83ee7aa, 0xc030feb1, 0xc030feb1, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x49ddd3e4, 0xbfaeedf9, 0x49ddd3e4, 0xcde1d4b5, 0xf7229851, 0x4e5b4aab, 0x4e5b4aab, 0x4e5b4aab, 0x75f4b0a, 0x75f4b0a, 0x75f4b0a, 0x5dc2bda1, 0x5dc2bda1, 0x5dc2bda1, 0x724366e5, 0xcde1d4b5, 0xcde1d4b5, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x98a8e7a8, 0xd9cab55f, 0x98a8e7a8, 0xf2b7dd05, 0xa199f4d7, 0xa4c61a90, 0xa4c61a90, 0xa4c61a90, 0x4c7936b1, 0x4c7936b1, 0x4c7936b1, 0x6cadcba5, 0x6cadcba5, 0x6cadcba5, 0x5387d57f, 0xf2b7dd05, 0xf2b7dd05, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa000334f, 0xa1b11a86, 0xa000334f, 0x8ac1b99f, 0xeaf098c4, 0x71a840bf, 0x71a840bf, 0x71a840bf, 0x5ac04e2, 0x5ac04e2, 0x5ac04e2, 0xcca73505, 0xcca73505, 0xcca73505, 0xf83ee7aa, 0x8ac1b99f, 0x8ac1b99f, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xc662fb1, 0x673baf90, 0xc662fb1, 0xfb88406, 0x8df6104e, 0xc23a69eb, 0xc23a69eb, 0xc23a69eb, 0xbf089023, 0xbf089023, 0xbf089023, 0xa3494c80, 0xa3494c80, 0xa3494c80, 0x724366e5, 0xfb88406, 0xfb88406, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x33d4530e, 0x11ff262b, 0x33d4530e, 0xbb511beb, 0xb3f7ca7e, 0xb090bae4, 0xb090bae4, 0xb090bae4, 0x1608aae1, 0x1608aae1, 0x1608aae1, 0x94b6dc15, 0x94b6dc15, 0x94b6dc15, 0x1c955882, 0xbb511beb, 0xbb511beb, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x8b2e9364, 0x1d99d298, 0x8b2e9364, 0x958d5e8d, 0xfdfd7cdc, 0x70cb29f4, 0x70cb29f4, 0x70cb29f4, 0x4b1d04ae, 0x4b1d04ae, 0x4b1d04ae, 0xef6dfb46, 0xef6dfb46, 0xef6dfb46, 0x4d266f7a, 0x958d5e8d, 0x958d5e8d, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x6e78baae, 0xaedcda00, 0x6e78baae, 0x9399bef9, 0xa685f2c7, 0x58d0cb7b, 0x58d0cb7b, 0x58d0cb7b, 0x38f1592c, 0x38f1592c, 0x38f1592c, 0x905d80a8, 0x905d80a8, 0x905d80a8, 0x1ed9d731, 0x9399bef9, 0x9399bef9, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x42860f9a, 0x57da9ef, 0x42860f9a, 0x221db42c, 0xdb3adfbf, 0xcdac6c8, 0xcdac6c8, 0xcdac6c8, 0xe2b9eb1c, 0xe2b9eb1c, 0xe2b9eb1c, 0xa6ec7d62, 0xa6ec7d62, 0xa6ec7d62, 0x1c3742c9, 0x221db42c, 0x221db42c, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x2ade7eff, 0xc91e0e0c, 0x2ade7eff, 0x8ad4bad6, 0x7f2729d6, 0x3646f688, 0x3646f688, 0x3646f688, 0x3489cfe5, 0x3489cfe5, 0x3489cfe5, 0x15f333ff, 0x15f333ff, 0x15f333ff, 0xcc5a7bed, 0x8ad4bad6, 0x8ad4bad6, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xef4a3312, 0x4c493c2d, 0x487c542b, 0x4c493c2d, 0xfec68cd6, 0x76f27cf8, 0x6c932217, 0x6c932217, 0x6c932217, 0x6f7ccd41, 0x6f7ccd41, 0x6f7ccd41, 0xea5e24aa, 0xea5e24aa, 0xea5e24aa, 0xef4a3312, 0xfec68cd6, 0xfec68cd6, }, 18 }, - { "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xb0361371, 0x1b06d274, 0xb0361371, 0xf9525e18, 0x59c36f00, 0x59c36f00, 0xbb825618, 0xbb825618, 0xbb825618, 0xe79056fa, 0xe79056fa, 0xe79056fa, 0xa2dc6264, 0xa2dc6264, 0xa2dc6264, 0x59c36f00, 0xf9525e18, 0xf9525e18, 0x59c36f00, }, 20 }, - { "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xd5e07c64, 0xd973835d, 0xcb531eb6, 0x97c0ad39, 0xaa4593fe, 0xaa4593fe, 0x470bd063, 0x470bd063, 0x470bd063, 0x9d8c7f58, 0x9d8c7f58, 0x9d8c7f58, 0xa1806f11, 0xa1806f11, 0xa1806f11, 0xaa4593fe, 0x8973cfeb, 0x97c0ad39, 0xaa4593fe, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xf652cbe1, 0xd6584e36, 0x993a7b88, 0x4cf069f4, 0xc9cbf769, 0xc9cbf769, 0x40f84477, 0x40f84477, 0x40f84477, 0x74116359, 0x74116359, 0x74116359, 0x56750bd2, 0x56750bd2, 0x56750bd2, 0xc9cbf769, 0x2398d99d, 0x4cf069f4, 0xc9cbf769, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x87ba7c21, 0x62eab185, 0x87ba7c21, 0x41a726eb, 0x9813a416, 0x9813a416, 0xcbe87745, 0xcbe87745, 0xcbe87745, 0xc01d73ea, 0xc01d73ea, 0xc01d73ea, 0xd41fb173, 0xd41fb173, 0xd41fb173, 0x9813a416, 0x41a726eb, 0x41a726eb, 0x9813a416, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x7cf854b5, 0x4d5395da, 0xbe7776c4, 0x3bf947f4, 0x5fcf013d, 0x5fcf013d, 0x5c1d4263, 0x5c1d4263, 0x5c1d4263, 0xad5e477e, 0xad5e477e, 0xad5e477e, 0xeaa144f9, 0xeaa144f9, 0xeaa144f9, 0x5fcf013d, 0xf9766585, 0x3bf947f4, 0x5fcf013d, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x9ab1c3a0, 0x3c2d2348, 0x4d30c6c3, 0x4d7bdfa8, 0xdd28f52b, 0xdd28f52b, 0x57f4ff36, 0x57f4ff36, 0x57f4ff36, 0x2ae2b8f2, 0x2ae2b8f2, 0x2ae2b8f2, 0x49d066d8, 0x49d066d8, 0x49d066d8, 0xdd28f52b, 0x9afadacb, 0x4d7bdfa8, 0xdd28f52b, }, 20 }, - { "gfxterm_ar", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xb0361371, 0x1b06d274, 0xb0361371, 0xf9525e18, 0x59c36f00, 0x59c36f00, 0xbb825618, 0xbb825618, 0xbb825618, 0xe79056fa, 0xe79056fa, 0xe79056fa, 0xa2dc6264, 0xa2dc6264, 0xa2dc6264, 0x59c36f00, 0xf9525e18, 0xf9525e18, 0x59c36f00, }, 20 }, - { "gfxterm_ar", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xd5e07c64, 0xd973835d, 0xcb531eb6, 0x97c0ad39, 0xaa4593fe, 0xaa4593fe, 0x470bd063, 0x470bd063, 0x470bd063, 0x9d8c7f58, 0x9d8c7f58, 0x9d8c7f58, 0xa1806f11, 0xa1806f11, 0xa1806f11, 0xaa4593fe, 0x8973cfeb, 0x97c0ad39, 0xaa4593fe, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xf652cbe1, 0xd6584e36, 0x993a7b88, 0x4cf069f4, 0xc9cbf769, 0xc9cbf769, 0x40f84477, 0x40f84477, 0x40f84477, 0x74116359, 0x74116359, 0x74116359, 0x56750bd2, 0x56750bd2, 0x56750bd2, 0xc9cbf769, 0x2398d99d, 0x4cf069f4, 0xc9cbf769, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x7b209cbf, 0x2f8bc59a, 0x7b209cbf, 0x9431322, 0x5387d57f, 0x5387d57f, 0x68f2d5ef, 0x68f2d5ef, 0x68f2d5ef, 0x4b9313e5, 0x4b9313e5, 0x4b9313e5, 0xe3c85628, 0xe3c85628, 0xe3c85628, 0x5387d57f, 0x9431322, 0x9431322, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe0d6abdc, 0x1fb5ebb5, 0xf2d32271, 0xeb0cb967, 0xf83ee7aa, 0xf83ee7aa, 0x5e332832, 0x5e332832, 0x5e332832, 0x9a04a3d3, 0x9a04a3d3, 0x9a04a3d3, 0x551af0c1, 0x551af0c1, 0x551af0c1, 0xf83ee7aa, 0xf90930ca, 0xeb0cb967, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xeeeb078a, 0xa8401f78, 0xc4e7df4d, 0x27e577ea, 0x724366e5, 0x724366e5, 0x3c69c88a, 0x3c69c88a, 0x3c69c88a, 0xdf9900ec, 0xdf9900ec, 0xdf9900ec, 0x61db9594, 0x61db9594, 0x61db9594, 0x724366e5, 0xde9af2d, 0x27e577ea, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x68a06b59, 0x5f199a13, 0x68a06b59, 0xd005b9c9, 0x5387d57f, 0x5387d57f, 0x8910bf0d, 0x8910bf0d, 0x8910bf0d, 0x77c5e004, 0x77c5e004, 0x77c5e004, 0x7f3d7937, 0x7f3d7937, 0x7f3d7937, 0x5387d57f, 0xd005b9c9, 0xd005b9c9, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9683ff51, 0xfcc9713a, 0x7efd6d3a, 0xae6f0782, 0xf83ee7aa, 0xf83ee7aa, 0x60155cd0, 0x60155cd0, 0x60155cd0, 0x2e43055d, 0x2e43055d, 0x2e43055d, 0xc49f7e94, 0xc49f7e94, 0xc49f7e94, 0xf83ee7aa, 0x461195e9, 0xae6f0782, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x6f6a363c, 0xb0e5b5b6, 0x6e302243, 0x3cdeeec5, 0x724366e5, 0x724366e5, 0x57309c73, 0x57309c73, 0x57309c73, 0x96a98d99, 0x96a98d99, 0x96a98d99, 0x12fc06d1, 0x12fc06d1, 0x12fc06d1, 0x724366e5, 0x3d84faba, 0x3cdeeec5, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x9253d5dd, 0xdd3a228f, 0x9253d5dd, 0x6762ac53, 0x1c955882, 0x1c955882, 0x6e256146, 0x6e256146, 0x6e256146, 0xec738ef6, 0xec738ef6, 0xec738ef6, 0x239b0b8a, 0x239b0b8a, 0x239b0b8a, 0x1c955882, 0x6762ac53, 0x6762ac53, 0x1c955882, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x2415bc63, 0x37b8de72, 0xee1dac36, 0xe2b492df, 0x4d266f7a, 0x4d266f7a, 0xd3a77460, 0xd3a77460, 0xd3a77460, 0x9ff22726, 0x9ff22726, 0x9ff22726, 0xbd5395d8, 0xbd5395d8, 0xbd5395d8, 0x4d266f7a, 0x28bc828a, 0xe2b492df, 0x4d266f7a, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x636f96aa, 0x39f2bbca, 0xb5259489, 0x1e51a48b, 0x1ed9d731, 0x1ed9d731, 0x9310ffef, 0x9310ffef, 0x9310ffef, 0x2711bf67, 0x2711bf67, 0x2711bf67, 0x2a3da324, 0x2a3da324, 0x2a3da324, 0x1ed9d731, 0xc81ba6a8, 0x1e51a48b, 0x1ed9d731, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x7b209cbf, 0x2f8bc59a, 0x7b209cbf, 0x9431322, 0x5387d57f, 0x5387d57f, 0x68f2d5ef, 0x68f2d5ef, 0x68f2d5ef, 0x4b9313e5, 0x4b9313e5, 0x4b9313e5, 0xe3c85628, 0xe3c85628, 0xe3c85628, 0x5387d57f, 0x9431322, 0x9431322, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe0d6abdc, 0x1fb5ebb5, 0xf2d32271, 0xeb0cb967, 0xf83ee7aa, 0xf83ee7aa, 0x5e332832, 0x5e332832, 0x5e332832, 0x9a04a3d3, 0x9a04a3d3, 0x9a04a3d3, 0x551af0c1, 0x551af0c1, 0x551af0c1, 0xf83ee7aa, 0xf90930ca, 0xeb0cb967, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xeeeb078a, 0xa8401f78, 0xc4e7df4d, 0x27e577ea, 0x724366e5, 0x724366e5, 0x3c69c88a, 0x3c69c88a, 0x3c69c88a, 0xdf9900ec, 0xdf9900ec, 0xdf9900ec, 0x61db9594, 0x61db9594, 0x61db9594, 0x724366e5, 0xde9af2d, 0x27e577ea, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x68a06b59, 0x5f199a13, 0x68a06b59, 0xd005b9c9, 0x5387d57f, 0x5387d57f, 0x8910bf0d, 0x8910bf0d, 0x8910bf0d, 0x77c5e004, 0x77c5e004, 0x77c5e004, 0x7f3d7937, 0x7f3d7937, 0x7f3d7937, 0x5387d57f, 0xd005b9c9, 0xd005b9c9, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9683ff51, 0xfcc9713a, 0x7efd6d3a, 0xae6f0782, 0xf83ee7aa, 0xf83ee7aa, 0x60155cd0, 0x60155cd0, 0x60155cd0, 0x2e43055d, 0x2e43055d, 0x2e43055d, 0xc49f7e94, 0xc49f7e94, 0xc49f7e94, 0xf83ee7aa, 0x461195e9, 0xae6f0782, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x6f6a363c, 0xb0e5b5b6, 0x6e302243, 0x3cdeeec5, 0x724366e5, 0x724366e5, 0x57309c73, 0x57309c73, 0x57309c73, 0x96a98d99, 0x96a98d99, 0x96a98d99, 0x12fc06d1, 0x12fc06d1, 0x12fc06d1, 0x724366e5, 0x3d84faba, 0x3cdeeec5, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x9253d5dd, 0xdd3a228f, 0x9253d5dd, 0x6762ac53, 0x1c955882, 0x1c955882, 0x6e256146, 0x6e256146, 0x6e256146, 0xec738ef6, 0xec738ef6, 0xec738ef6, 0x239b0b8a, 0x239b0b8a, 0x239b0b8a, 0x1c955882, 0x6762ac53, 0x6762ac53, 0x1c955882, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x2415bc63, 0x37b8de72, 0xee1dac36, 0xe2b492df, 0x4d266f7a, 0x4d266f7a, 0xd3a77460, 0xd3a77460, 0xd3a77460, 0x9ff22726, 0x9ff22726, 0x9ff22726, 0xbd5395d8, 0xbd5395d8, 0xbd5395d8, 0x4d266f7a, 0x28bc828a, 0xe2b492df, 0x4d266f7a, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x636f96aa, 0x39f2bbca, 0xb5259489, 0x1e51a48b, 0x1ed9d731, 0x1ed9d731, 0x9310ffef, 0x9310ffef, 0x9310ffef, 0x2711bf67, 0x2711bf67, 0x2711bf67, 0x2a3da324, 0x2a3da324, 0x2a3da324, 0x1ed9d731, 0xc81ba6a8, 0x1e51a48b, 0x1ed9d731, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x87ba7c21, 0x62eab185, 0x87ba7c21, 0x41a726eb, 0x9813a416, 0x9813a416, 0xcbe87745, 0xcbe87745, 0xcbe87745, 0xc01d73ea, 0xc01d73ea, 0xc01d73ea, 0xd41fb173, 0xd41fb173, 0xd41fb173, 0x9813a416, 0x41a726eb, 0x41a726eb, 0x9813a416, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x7cf854b5, 0x4d5395da, 0xbe7776c4, 0x3bf947f4, 0x5fcf013d, 0x5fcf013d, 0x5c1d4263, 0x5c1d4263, 0x5c1d4263, 0xad5e477e, 0xad5e477e, 0xad5e477e, 0xeaa144f9, 0xeaa144f9, 0xeaa144f9, 0x5fcf013d, 0xf9766585, 0x3bf947f4, 0x5fcf013d, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x9ab1c3a0, 0x3c2d2348, 0x4d30c6c3, 0x4d7bdfa8, 0xdd28f52b, 0xdd28f52b, 0x57f4ff36, 0x57f4ff36, 0x57f4ff36, 0x2ae2b8f2, 0x2ae2b8f2, 0x2ae2b8f2, 0x49d066d8, 0x49d066d8, 0x49d066d8, 0xdd28f52b, 0x9afadacb, 0x4d7bdfa8, 0xdd28f52b, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7cd7d588, 0xd97ec8cc, 0x7cd7d588, 0x35b398e1, 0x59c36f00, 0x59c36f00, 0x4834c117, 0x4834c117, 0x4834c117, 0x1426c1f5, 0x1426c1f5, 0x1426c1f5, 0x516af56b, 0x516af56b, 0x516af56b, 0x59c36f00, 0x35b398e1, 0x35b398e1, 0x59c36f00, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x77d5614b, 0xee38f19f, 0x77d5614b, 0x2b46d2c4, 0xaa4593fe, 0xaa4593fe, 0x88eefe02, 0x88eefe02, 0x88eefe02, 0x52695139, 0x52695139, 0x52695139, 0x6e654170, 0x6e654170, 0x6e654170, 0xaa4593fe, 0x2b46d2c4, 0x2b46d2c4, 0xaa4593fe, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xd5c774be, 0xd6ea481d, 0xd5c774be, 0xd66c2, 0xc9cbf769, 0xc9cbf769, 0x8ca7204, 0x8ca7204, 0x8ca7204, 0x3c23552a, 0x3c23552a, 0x3c23552a, 0x1e473da1, 0x1e473da1, 0x1e473da1, 0xc9cbf769, 0xd66c2, 0xd66c2, 0xc9cbf769, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x6ff25334, 0x60142559, 0x6ff25334, 0xa9ef09fe, 0x9813a416, 0x9813a416, 0xe9d151d6, 0xe9d151d6, 0xe9d151d6, 0xe2245579, 0xe2245579, 0xe2245579, 0xf62697e0, 0xf62697e0, 0xf62697e0, 0x9813a416, 0xa9ef09fe, 0xa9ef09fe, 0x9813a416, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x45387400, 0x1f12042f, 0x45387400, 0xc0b64530, 0x5fcf013d, 0x5fcf013d, 0xae65b130, 0xae65b130, 0xae65b130, 0x5f26b42d, 0x5f26b42d, 0x5f26b42d, 0x18d9b7aa, 0x18d9b7aa, 0x18d9b7aa, 0x5fcf013d, 0xc0b64530, 0xc0b64530, 0x5fcf013d, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xf22852b8, 0x64b58aed, 0xf22852b8, 0xf2634bd3, 0xdd28f52b, 0xdd28f52b, 0x6226cfea, 0x6226cfea, 0x6226cfea, 0x1f30882e, 0x1f30882e, 0x1f30882e, 0x7c025604, 0x7c025604, 0x7c025604, 0xdd28f52b, 0xf2634bd3, 0xf2634bd3, 0xdd28f52b, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7cd7d588, 0xd97ec8cc, 0x7cd7d588, 0x35b398e1, 0x59c36f00, 0x59c36f00, 0x4834c117, 0x4834c117, 0x4834c117, 0x1426c1f5, 0x1426c1f5, 0x1426c1f5, 0x516af56b, 0x516af56b, 0x516af56b, 0x59c36f00, 0x35b398e1, 0x35b398e1, 0x59c36f00, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x77d5614b, 0xee38f19f, 0x77d5614b, 0x2b46d2c4, 0xaa4593fe, 0xaa4593fe, 0x88eefe02, 0x88eefe02, 0x88eefe02, 0x52695139, 0x52695139, 0x52695139, 0x6e654170, 0x6e654170, 0x6e654170, 0xaa4593fe, 0x2b46d2c4, 0x2b46d2c4, 0xaa4593fe, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xd5c774be, 0xd6ea481d, 0xd5c774be, 0xd66c2, 0xc9cbf769, 0xc9cbf769, 0x8ca7204, 0x8ca7204, 0x8ca7204, 0x3c23552a, 0x3c23552a, 0x3c23552a, 0x1e473da1, 0x1e473da1, 0x1e473da1, 0xc9cbf769, 0xd66c2, 0xd66c2, 0xc9cbf769, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x44f24a9a, 0xb7ce71f6, 0x44f24a9a, 0x3691c507, 0x5387d57f, 0x5387d57f, 0x4ae6f1ac, 0x4ae6f1ac, 0x4ae6f1ac, 0x698737a6, 0x698737a6, 0x698737a6, 0xc1dc726b, 0xc1dc726b, 0xc1dc726b, 0x5387d57f, 0x3691c507, 0x3691c507, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf3703bd8, 0x8a9322ca, 0xf3703bd8, 0xeaafa0ce, 0xf83ee7aa, 0xf83ee7aa, 0xc41b64b6, 0xc41b64b6, 0xc41b64b6, 0x2cef57, 0x2cef57, 0x2cef57, 0xcf32bc45, 0xcf32bc45, 0xcf32bc45, 0xf83ee7aa, 0xeaafa0ce, 0xeaafa0ce, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x159757b3, 0x82f3937, 0x159757b3, 0xf695ff14, 0x724366e5, 0x724366e5, 0xd936d375, 0xd936d375, 0xd936d375, 0x3ac61b13, 0x3ac61b13, 0x3ac61b13, 0x84848e6b, 0x84848e6b, 0x84848e6b, 0x724366e5, 0xf695ff14, 0xf695ff14, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x96a35d83, 0x84b40f7d, 0x96a35d83, 0x2e068f13, 0x5387d57f, 0x5387d57f, 0x2512d363, 0x2512d363, 0x2512d363, 0xdbc78c6a, 0xdbc78c6a, 0xdbc78c6a, 0xd33f1559, 0xd33f1559, 0xd33f1559, 0x5387d57f, 0x2e068f13, 0x2e068f13, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1c900934, 0xece326ba, 0x1c900934, 0xcc02638c, 0xf83ee7aa, 0xf83ee7aa, 0x1dbd718d, 0x1dbd718d, 0x1dbd718d, 0x53eb2800, 0x53eb2800, 0x53eb2800, 0xb93753c9, 0xb93753c9, 0xb93753c9, 0xf83ee7aa, 0xcc02638c, 0xcc02638c, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x32265220, 0x42236b81, 0x32265220, 0x60c89ea6, 0x724366e5, 0x724366e5, 0x63c96d38, 0x63c96d38, 0x63c96d38, 0xa2507cd2, 0xa2507cd2, 0xa2507cd2, 0x2605f79a, 0x2605f79a, 0x2605f79a, 0x724366e5, 0x60c89ea6, 0x60c89ea6, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xdfe16fc4, 0xfeb34743, 0xdfe16fc4, 0x2ad0164a, 0x1c955882, 0x1c955882, 0xdc546008, 0xdc546008, 0xdc546008, 0x5e028fb8, 0x5e028fb8, 0x5e028fb8, 0x91ea0ac4, 0x91ea0ac4, 0x91ea0ac4, 0x1c955882, 0x2ad0164a, 0x2ad0164a, 0x1c955882, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xf988b96e, 0x28c3dbd0, 0xf988b96e, 0xf5218787, 0x4d266f7a, 0x4d266f7a, 0xe63989ae, 0xe63989ae, 0xe63989ae, 0xaa6cdae8, 0xaa6cdae8, 0xaa6cdae8, 0x88cd6816, 0x88cd6816, 0x88cd6816, 0x4d266f7a, 0xf5218787, 0xf5218787, 0x4d266f7a, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe189c1c0, 0x6e09d325, 0xe189c1c0, 0x4afdf1c2, 0x1ed9d731, 0x1ed9d731, 0xb7a388a2, 0xb7a388a2, 0xb7a388a2, 0x3a2c82a, 0x3a2c82a, 0x3a2c82a, 0xe8ed469, 0xe8ed469, 0xe8ed469, 0x1ed9d731, 0x4afdf1c2, 0x4afdf1c2, 0x1ed9d731, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x44f24a9a, 0xb7ce71f6, 0x44f24a9a, 0x3691c507, 0x5387d57f, 0x5387d57f, 0x4ae6f1ac, 0x4ae6f1ac, 0x4ae6f1ac, 0x698737a6, 0x698737a6, 0x698737a6, 0xc1dc726b, 0xc1dc726b, 0xc1dc726b, 0x5387d57f, 0x3691c507, 0x3691c507, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf3703bd8, 0x8a9322ca, 0xf3703bd8, 0xeaafa0ce, 0xf83ee7aa, 0xf83ee7aa, 0xc41b64b6, 0xc41b64b6, 0xc41b64b6, 0x2cef57, 0x2cef57, 0x2cef57, 0xcf32bc45, 0xcf32bc45, 0xcf32bc45, 0xf83ee7aa, 0xeaafa0ce, 0xeaafa0ce, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x159757b3, 0x82f3937, 0x159757b3, 0xf695ff14, 0x724366e5, 0x724366e5, 0xd936d375, 0xd936d375, 0xd936d375, 0x3ac61b13, 0x3ac61b13, 0x3ac61b13, 0x84848e6b, 0x84848e6b, 0x84848e6b, 0x724366e5, 0xf695ff14, 0xf695ff14, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x96a35d83, 0x84b40f7d, 0x96a35d83, 0x2e068f13, 0x5387d57f, 0x5387d57f, 0x2512d363, 0x2512d363, 0x2512d363, 0xdbc78c6a, 0xdbc78c6a, 0xdbc78c6a, 0xd33f1559, 0xd33f1559, 0xd33f1559, 0x5387d57f, 0x2e068f13, 0x2e068f13, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1c900934, 0xece326ba, 0x1c900934, 0xcc02638c, 0xf83ee7aa, 0xf83ee7aa, 0x1dbd718d, 0x1dbd718d, 0x1dbd718d, 0x53eb2800, 0x53eb2800, 0x53eb2800, 0xb93753c9, 0xb93753c9, 0xb93753c9, 0xf83ee7aa, 0xcc02638c, 0xcc02638c, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x32265220, 0x42236b81, 0x32265220, 0x60c89ea6, 0x724366e5, 0x724366e5, 0x63c96d38, 0x63c96d38, 0x63c96d38, 0xa2507cd2, 0xa2507cd2, 0xa2507cd2, 0x2605f79a, 0x2605f79a, 0x2605f79a, 0x724366e5, 0x60c89ea6, 0x60c89ea6, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xdfe16fc4, 0xfeb34743, 0xdfe16fc4, 0x2ad0164a, 0x1c955882, 0x1c955882, 0xdc546008, 0xdc546008, 0xdc546008, 0x5e028fb8, 0x5e028fb8, 0x5e028fb8, 0x91ea0ac4, 0x91ea0ac4, 0x91ea0ac4, 0x1c955882, 0x2ad0164a, 0x2ad0164a, 0x1c955882, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xf988b96e, 0x28c3dbd0, 0xf988b96e, 0xf5218787, 0x4d266f7a, 0x4d266f7a, 0xe63989ae, 0xe63989ae, 0xe63989ae, 0xaa6cdae8, 0xaa6cdae8, 0xaa6cdae8, 0x88cd6816, 0x88cd6816, 0x88cd6816, 0x4d266f7a, 0xf5218787, 0xf5218787, 0x4d266f7a, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe189c1c0, 0x6e09d325, 0xe189c1c0, 0x4afdf1c2, 0x1ed9d731, 0x1ed9d731, 0xb7a388a2, 0xb7a388a2, 0xb7a388a2, 0x3a2c82a, 0x3a2c82a, 0x3a2c82a, 0xe8ed469, 0xe8ed469, 0xe8ed469, 0x1ed9d731, 0x4afdf1c2, 0x4afdf1c2, 0x1ed9d731, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x6ff25334, 0x60142559, 0x6ff25334, 0xa9ef09fe, 0x9813a416, 0x9813a416, 0xe9d151d6, 0xe9d151d6, 0xe9d151d6, 0xe2245579, 0xe2245579, 0xe2245579, 0xf62697e0, 0xf62697e0, 0xf62697e0, 0x9813a416, 0xa9ef09fe, 0xa9ef09fe, 0x9813a416, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x45387400, 0x1f12042f, 0x45387400, 0xc0b64530, 0x5fcf013d, 0x5fcf013d, 0xae65b130, 0xae65b130, 0xae65b130, 0x5f26b42d, 0x5f26b42d, 0x5f26b42d, 0x18d9b7aa, 0x18d9b7aa, 0x18d9b7aa, 0x5fcf013d, 0xc0b64530, 0xc0b64530, 0x5fcf013d, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xf22852b8, 0x64b58aed, 0xf22852b8, 0xf2634bd3, 0xdd28f52b, 0xdd28f52b, 0x6226cfea, 0x6226cfea, 0x6226cfea, 0x1f30882e, 0x1f30882e, 0x1f30882e, 0x7c025604, 0x7c025604, 0x7c025604, 0xdd28f52b, 0xf2634bd3, 0xf2634bd3, 0xdd28f52b, }, 20 }, - { "gfxterm_heb", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5564b5ac, 0x60da9eee, 0xbd1e9681, 0xf47adbe8, 0x59c36f00, 0x59c36f00, 0x21d91745, 0x21d91745, 0x21d91745, 0x7dcb17a7, 0x7dcb17a7, 0x7dcb17a7, 0x38872339, 0x38872339, 0x38872339, 0x59c36f00, 0x1c00f8c5, 0xf47adbe8, 0x59c36f00, }, 20 }, - { "gfxterm_heb", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x76e5e86, 0x7b494fdd, 0x495a38ac, 0x15c98b23, 0xaa4593fe, 0xaa4593fe, 0x3eadf2ea, 0x3eadf2ea, 0x3eadf2ea, 0xe42a5dd1, 0xe42a5dd1, 0xe42a5dd1, 0xd8264d98, 0xd8264d98, 0xd8264d98, 0xaa4593fe, 0x5bfded09, 0x15c98b23, 0xaa4593fe, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xb6cb7893, 0x3d8832b4, 0xa83e25d, 0xdf49f021, 0xc9cbf769, 0xc9cbf769, 0xee497240, 0xee497240, 0xee497240, 0xdaa0556e, 0xdaa0556e, 0xdaa0556e, 0xf8c43de5, 0xf8c43de5, 0xf8c43de5, 0xc9cbf769, 0x63016aef, 0xdf49f021, 0xc9cbf769, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xaec0098e, 0x31dc5518, 0x6f2943a1, 0xa934196b, 0x9813a416, 0x9813a416, 0x27d7c19f, 0x27d7c19f, 0x27d7c19f, 0x2c22c530, 0x2c22c530, 0x2c22c530, 0x382007a9, 0x382007a9, 0x382007a9, 0x9813a416, 0x68dd5344, 0xa934196b, 0x9813a416, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x6840baa6, 0xe3649779, 0x3c42fbb8, 0xb9ccca88, 0x5fcf013d, 0x5fcf013d, 0x634fa67d, 0x634fa67d, 0x634fa67d, 0x920ca360, 0x920ca360, 0x920ca360, 0xd5f3a0e7, 0xd5f3a0e7, 0xd5f3a0e7, 0x5fcf013d, 0xedce8b96, 0xb9ccca88, 0x5fcf013d, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7b6f728f, 0x802df91c, 0x6fe59e4c, 0x6fae8727, 0xdd28f52b, 0xdd28f52b, 0xc591678c, 0xc591678c, 0xc591678c, 0xb8872048, 0xb8872048, 0xb8872048, 0xdbb5fe62, 0xdbb5fe62, 0xdbb5fe62, 0xdd28f52b, 0x7b246be4, 0x6fae8727, 0xdd28f52b, }, 20 }, - { "gfxterm_heb", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5564b5ac, 0x60da9eee, 0xbd1e9681, 0xf47adbe8, 0x59c36f00, 0x59c36f00, 0x21d91745, 0x21d91745, 0x21d91745, 0x7dcb17a7, 0x7dcb17a7, 0x7dcb17a7, 0x38872339, 0x38872339, 0x38872339, 0x59c36f00, 0x1c00f8c5, 0xf47adbe8, 0x59c36f00, }, 20 }, - { "gfxterm_heb", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x76e5e86, 0x7b494fdd, 0x495a38ac, 0x15c98b23, 0xaa4593fe, 0xaa4593fe, 0x3eadf2ea, 0x3eadf2ea, 0x3eadf2ea, 0xe42a5dd1, 0xe42a5dd1, 0xe42a5dd1, 0xd8264d98, 0xd8264d98, 0xd8264d98, 0xaa4593fe, 0x5bfded09, 0x15c98b23, 0xaa4593fe, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xb6cb7893, 0x3d8832b4, 0xa83e25d, 0xdf49f021, 0xc9cbf769, 0xc9cbf769, 0xee497240, 0xee497240, 0xee497240, 0xdaa0556e, 0xdaa0556e, 0xdaa0556e, 0xf8c43de5, 0xf8c43de5, 0xf8c43de5, 0xc9cbf769, 0x63016aef, 0xdf49f021, 0xc9cbf769, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe91b111e, 0xf17069cf, 0x6b0d417f, 0x196ecee2, 0x5387d57f, 0x5387d57f, 0x3a0bd784, 0x3a0bd784, 0x3a0bd784, 0x196a118e, 0x196a118e, 0x196a118e, 0xb1315443, 0xb1315443, 0xb1315443, 0x5387d57f, 0x9b789e83, 0x196ecee2, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x618a321d, 0x424668ca, 0xbb28dfaa, 0xa2f744bc, 0xf83ee7aa, 0xf83ee7aa, 0x3a74d341, 0x3a74d341, 0x3a74d341, 0xfe4358a0, 0xfe4358a0, 0xfe4358a0, 0x315d0bb2, 0x315d0bb2, 0x315d0bb2, 0xf83ee7aa, 0x7855a90b, 0xa2f744bc, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x87840389, 0x646994d2, 0x50ce49fd, 0xb3cce15a, 0x724366e5, 0x724366e5, 0x695c97b4, 0x695c97b4, 0x695c97b4, 0x8aac5fd2, 0x8aac5fd2, 0x8aac5fd2, 0x34eecaaa, 0x34eecaaa, 0x34eecaaa, 0x724366e5, 0x6486ab2e, 0xb3cce15a, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1ef83cc4, 0x8f37421b, 0xccc91d44, 0x746ccfd4, 0x5387d57f, 0x5387d57f, 0xce1861a0, 0xce1861a0, 0xce1861a0, 0x30cd3ea9, 0x30cd3ea9, 0x30cd3ea9, 0x3835a79a, 0x3835a79a, 0x3835a79a, 0x5387d57f, 0xa65dee54, 0x746ccfd4, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd4d7990, 0x3f81f76b, 0xab169d0e, 0x7b84f7b6, 0xf83ee7aa, 0xf83ee7aa, 0xb21afb9f, 0xb21afb9f, 0xb21afb9f, 0xfc4ca212, 0xfc4ca212, 0xfc4ca212, 0x1690d9db, 0x1690d9db, 0x1690d9db, 0xf83ee7aa, 0xdddf1328, 0x7b84f7b6, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xf484a7a, 0x1d016ff1, 0xa1efb839, 0xf30174bf, 0x724366e5, 0x724366e5, 0x20dd566e, 0x20dd566e, 0x20dd566e, 0xe1444784, 0xe1444784, 0xe1444784, 0x6511cccc, 0x6511cccc, 0x6511cccc, 0x724366e5, 0x5da686fc, 0xf30174bf, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xe6f2b3cc, 0xb53e897f, 0xcb165f0b, 0x3e272685, 0x1c955882, 0x1c955882, 0xcebb321, 0xcebb321, 0xcebb321, 0x8ebd5c91, 0x8ebd5c91, 0x8ebd5c91, 0x4155d9ed, 0x4155d9ed, 0x4155d9ed, 0x1c955882, 0x13c3ca42, 0x3e272685, 0x1c955882, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x79d3a961, 0x2abea675, 0x6d16d7f8, 0x61bfe911, 0x4d266f7a, 0x4d266f7a, 0xc6f457fe, 0xc6f457fe, 0xc6f457fe, 0x8aa104b8, 0x8aa104b8, 0x8aa104b8, 0xa800b646, 0xa800b646, 0xa800b646, 0x4d266f7a, 0x757a9788, 0x61bfe911, 0x4d266f7a, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x95a273e0, 0xa4c29c6, 0x5d827a2a, 0xf6f64a28, 0x1ed9d731, 0x1ed9d731, 0xb750ffe0, 0xb750ffe0, 0xb750ffe0, 0x351bf68, 0x351bf68, 0x351bf68, 0xe7da32b, 0xe7da32b, 0xe7da32b, 0x1ed9d731, 0x3ed643e2, 0xf6f64a28, 0x1ed9d731, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe91b111e, 0xf17069cf, 0x6b0d417f, 0x196ecee2, 0x5387d57f, 0x5387d57f, 0x3a0bd784, 0x3a0bd784, 0x3a0bd784, 0x196a118e, 0x196a118e, 0x196a118e, 0xb1315443, 0xb1315443, 0xb1315443, 0x5387d57f, 0x9b789e83, 0x196ecee2, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x618a321d, 0x424668ca, 0xbb28dfaa, 0xa2f744bc, 0xf83ee7aa, 0xf83ee7aa, 0x3a74d341, 0x3a74d341, 0x3a74d341, 0xfe4358a0, 0xfe4358a0, 0xfe4358a0, 0x315d0bb2, 0x315d0bb2, 0x315d0bb2, 0xf83ee7aa, 0x7855a90b, 0xa2f744bc, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x87840389, 0x646994d2, 0x50ce49fd, 0xb3cce15a, 0x724366e5, 0x724366e5, 0x695c97b4, 0x695c97b4, 0x695c97b4, 0x8aac5fd2, 0x8aac5fd2, 0x8aac5fd2, 0x34eecaaa, 0x34eecaaa, 0x34eecaaa, 0x724366e5, 0x6486ab2e, 0xb3cce15a, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1ef83cc4, 0x8f37421b, 0xccc91d44, 0x746ccfd4, 0x5387d57f, 0x5387d57f, 0xce1861a0, 0xce1861a0, 0xce1861a0, 0x30cd3ea9, 0x30cd3ea9, 0x30cd3ea9, 0x3835a79a, 0x3835a79a, 0x3835a79a, 0x5387d57f, 0xa65dee54, 0x746ccfd4, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd4d7990, 0x3f81f76b, 0xab169d0e, 0x7b84f7b6, 0xf83ee7aa, 0xf83ee7aa, 0xb21afb9f, 0xb21afb9f, 0xb21afb9f, 0xfc4ca212, 0xfc4ca212, 0xfc4ca212, 0x1690d9db, 0x1690d9db, 0x1690d9db, 0xf83ee7aa, 0xdddf1328, 0x7b84f7b6, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xf484a7a, 0x1d016ff1, 0xa1efb839, 0xf30174bf, 0x724366e5, 0x724366e5, 0x20dd566e, 0x20dd566e, 0x20dd566e, 0xe1444784, 0xe1444784, 0xe1444784, 0x6511cccc, 0x6511cccc, 0x6511cccc, 0x724366e5, 0x5da686fc, 0xf30174bf, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xe6f2b3cc, 0xb53e897f, 0xcb165f0b, 0x3e272685, 0x1c955882, 0x1c955882, 0xcebb321, 0xcebb321, 0xcebb321, 0x8ebd5c91, 0x8ebd5c91, 0x8ebd5c91, 0x4155d9ed, 0x4155d9ed, 0x4155d9ed, 0x1c955882, 0x13c3ca42, 0x3e272685, 0x1c955882, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x79d3a961, 0x2abea675, 0x6d16d7f8, 0x61bfe911, 0x4d266f7a, 0x4d266f7a, 0xc6f457fe, 0xc6f457fe, 0xc6f457fe, 0x8aa104b8, 0x8aa104b8, 0x8aa104b8, 0xa800b646, 0xa800b646, 0xa800b646, 0x4d266f7a, 0x757a9788, 0x61bfe911, 0x4d266f7a, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x95a273e0, 0xa4c29c6, 0x5d827a2a, 0xf6f64a28, 0x1ed9d731, 0x1ed9d731, 0xb750ffe0, 0xb750ffe0, 0xb750ffe0, 0x351bf68, 0x351bf68, 0x351bf68, 0xe7da32b, 0xe7da32b, 0xe7da32b, 0x1ed9d731, 0x3ed643e2, 0xf6f64a28, 0x1ed9d731, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xaec0098e, 0x31dc5518, 0x6f2943a1, 0xa934196b, 0x9813a416, 0x9813a416, 0x27d7c19f, 0x27d7c19f, 0x27d7c19f, 0x2c22c530, 0x2c22c530, 0x2c22c530, 0x382007a9, 0x382007a9, 0x382007a9, 0x9813a416, 0x68dd5344, 0xa934196b, 0x9813a416, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x6840baa6, 0xe3649779, 0x3c42fbb8, 0xb9ccca88, 0x5fcf013d, 0x5fcf013d, 0x634fa67d, 0x634fa67d, 0x634fa67d, 0x920ca360, 0x920ca360, 0x920ca360, 0xd5f3a0e7, 0xd5f3a0e7, 0xd5f3a0e7, 0x5fcf013d, 0xedce8b96, 0xb9ccca88, 0x5fcf013d, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7b6f728f, 0x802df91c, 0x6fe59e4c, 0x6fae8727, 0xdd28f52b, 0xdd28f52b, 0xc591678c, 0xc591678c, 0xc591678c, 0xb8872048, 0xb8872048, 0xb8872048, 0xdbb5fe62, 0xdbb5fe62, 0xdbb5fe62, 0xdd28f52b, 0x7b246be4, 0x6fae8727, 0xdd28f52b, }, 20 }, - { "gfxterm_gre", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x8c809d98, 0xa2deb5e8, 0x8c809d98, 0xc5e4d0f1, 0x59c36f00, 0x59c36f00, 0xcce4d070, 0xcce4d070, 0xcce4d070, 0x90f6d092, 0x90f6d092, 0x90f6d092, 0xd5bae40c, 0xd5bae40c, 0xd5bae40c, 0x59c36f00, 0xc5e4d0f1, 0xc5e4d0f1, 0x59c36f00, }, 20 }, - { "gfxterm_gre", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xd2952b24, 0xc43b8c16, 0xd2952b24, 0x8e0698ab, 0xaa4593fe, 0xaa4593fe, 0x72cbd134, 0x72cbd134, 0x72cbd134, 0xa84c7e0f, 0xa84c7e0f, 0xa84c7e0f, 0x94406e46, 0x94406e46, 0x94406e46, 0xaa4593fe, 0x8e0698ab, 0x8e0698ab, 0xaa4593fe, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x10e5e33e, 0xfaceb35c, 0x10e5e33e, 0xc52ff142, 0xc9cbf769, 0xc9cbf769, 0x4b7f7a, 0x4b7f7a, 0x4b7f7a, 0x34a25854, 0x34a25854, 0x34a25854, 0x16c630df, 0x16c630df, 0x16c630df, 0xc9cbf769, 0xc52ff142, 0xc52ff142, 0xc9cbf769, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x35eaca6c, 0xf1f3421e, 0x35eaca6c, 0xf3f790a6, 0x9813a416, 0x9813a416, 0x3a84c463, 0x3a84c463, 0x3a84c463, 0x3171c0cc, 0x3171c0cc, 0x3171c0cc, 0x25730255, 0x25730255, 0x25730255, 0x9813a416, 0xf3f790a6, 0xf3f790a6, 0x9813a416, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xc63e4058, 0x297346bb, 0xc63e4058, 0x43b07168, 0x5fcf013d, 0x5fcf013d, 0x814b6f45, 0x814b6f45, 0x814b6f45, 0x70086a58, 0x70086a58, 0x70086a58, 0x37f769df, 0x37f769df, 0x37f769df, 0x5fcf013d, 0x43b07168, 0x43b07168, 0x5fcf013d, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x42625965, 0xbdbab59d, 0x42625965, 0x4229400e, 0xdd28f52b, 0xdd28f52b, 0x74cb4529, 0x74cb4529, 0x74cb4529, 0x9dd02ed, 0x9dd02ed, 0x9dd02ed, 0x6aefdcc7, 0x6aefdcc7, 0x6aefdcc7, 0xdd28f52b, 0x4229400e, 0x4229400e, 0xdd28f52b, }, 20 }, - { "gfxterm_gre", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x8c809d98, 0xa2deb5e8, 0x8c809d98, 0xc5e4d0f1, 0x59c36f00, 0x59c36f00, 0xcce4d070, 0xcce4d070, 0xcce4d070, 0x90f6d092, 0x90f6d092, 0x90f6d092, 0xd5bae40c, 0xd5bae40c, 0xd5bae40c, 0x59c36f00, 0xc5e4d0f1, 0xc5e4d0f1, 0x59c36f00, }, 20 }, - { "gfxterm_gre", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xd2952b24, 0xc43b8c16, 0xd2952b24, 0x8e0698ab, 0xaa4593fe, 0xaa4593fe, 0x72cbd134, 0x72cbd134, 0x72cbd134, 0xa84c7e0f, 0xa84c7e0f, 0xa84c7e0f, 0x94406e46, 0x94406e46, 0x94406e46, 0xaa4593fe, 0x8e0698ab, 0x8e0698ab, 0xaa4593fe, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x10e5e33e, 0xfaceb35c, 0x10e5e33e, 0xc52ff142, 0xc9cbf769, 0xc9cbf769, 0x4b7f7a, 0x4b7f7a, 0x4b7f7a, 0x34a25854, 0x34a25854, 0x34a25854, 0x16c630df, 0x16c630df, 0x16c630df, 0xc9cbf769, 0xc52ff142, 0xc52ff142, 0xc9cbf769, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xf1d34c3f, 0xcb451cf, 0xf1d34c3f, 0x83b0c3a2, 0x5387d57f, 0x5387d57f, 0xdc42e576, 0xdc42e576, 0xdc42e576, 0xff23237c, 0xff23237c, 0xff23237c, 0x577866b1, 0x577866b1, 0x577866b1, 0x5387d57f, 0x83b0c3a2, 0x83b0c3a2, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1219f891, 0x3ea9e133, 0x1219f891, 0xbc66387, 0xf83ee7aa, 0xf83ee7aa, 0x4d56ad7d, 0x4d56ad7d, 0x4d56ad7d, 0x8961269c, 0x8961269c, 0x8961269c, 0x467f758e, 0x467f758e, 0x467f758e, 0xf83ee7aa, 0xbc66387, 0xbc66387, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x39dd8885, 0x9ff9b01d, 0x39dd8885, 0xdadf2022, 0x724366e5, 0x724366e5, 0x2a5a1ea5, 0x2a5a1ea5, 0x2a5a1ea5, 0xc9aad6c3, 0xc9aad6c3, 0xc9aad6c3, 0x77e843bb, 0x77e843bb, 0x77e843bb, 0x724366e5, 0xdadf2022, 0xdadf2022, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x9c06870a, 0xfb391ac3, 0x9c06870a, 0x24a3559a, 0x5387d57f, 0x5387d57f, 0x67afb6e7, 0x67afb6e7, 0x67afb6e7, 0x997ae9ee, 0x997ae9ee, 0x997ae9ee, 0x918270dd, 0x918270dd, 0x918270dd, 0x5387d57f, 0x24a3559a, 0x24a3559a, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x34160e54, 0xfa0d929, 0x34160e54, 0xe48464ec, 0xf83ee7aa, 0xf83ee7aa, 0xbada5191, 0xbada5191, 0xbada5191, 0xf48c081c, 0xf48c081c, 0xf48c081c, 0x1e5073d5, 0x1e5073d5, 0x1e5073d5, 0xf83ee7aa, 0xe48464ec, 0xe48464ec, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xf8b89646, 0xae36218f, 0xf8b89646, 0xaa565ac0, 0x724366e5, 0x724366e5, 0xc530c749, 0xc530c749, 0xc530c749, 0x4a9d6a3, 0x4a9d6a3, 0x4a9d6a3, 0x80fc5deb, 0x80fc5deb, 0x80fc5deb, 0x724366e5, 0xaa565ac0, 0xaa565ac0, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xc814e98c, 0xc80ea558, 0xc814e98c, 0x3d259002, 0x1c955882, 0x1c955882, 0xbaf29951, 0xbaf29951, 0xbaf29951, 0x38a476e1, 0x38a476e1, 0x38a476e1, 0xf74cf39d, 0xf74cf39d, 0xf74cf39d, 0x1c955882, 0x3d259002, 0x3d259002, 0x1c955882, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4d835add, 0x8e85c29e, 0x4d835add, 0x412a6434, 0x4d266f7a, 0x4d266f7a, 0x37157ce4, 0x37157ce4, 0x37157ce4, 0x7b402fa2, 0x7b402fa2, 0x7b402fa2, 0x59e19d5c, 0x59e19d5c, 0x59e19d5c, 0x4d266f7a, 0x412a6434, 0x412a6434, 0x4d266f7a, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x65f356c1, 0x687de513, 0x65f356c1, 0xce8766c3, 0x1ed9d731, 0x1ed9d731, 0xfb07ebd0, 0xfb07ebd0, 0xfb07ebd0, 0x4f06ab58, 0x4f06ab58, 0x4f06ab58, 0x422ab71b, 0x422ab71b, 0x422ab71b, 0x1ed9d731, 0xce8766c3, 0xce8766c3, 0x1ed9d731, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xf1d34c3f, 0xcb451cf, 0xf1d34c3f, 0x83b0c3a2, 0x5387d57f, 0x5387d57f, 0xdc42e576, 0xdc42e576, 0xdc42e576, 0xff23237c, 0xff23237c, 0xff23237c, 0x577866b1, 0x577866b1, 0x577866b1, 0x5387d57f, 0x83b0c3a2, 0x83b0c3a2, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1219f891, 0x3ea9e133, 0x1219f891, 0xbc66387, 0xf83ee7aa, 0xf83ee7aa, 0x4d56ad7d, 0x4d56ad7d, 0x4d56ad7d, 0x8961269c, 0x8961269c, 0x8961269c, 0x467f758e, 0x467f758e, 0x467f758e, 0xf83ee7aa, 0xbc66387, 0xbc66387, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x39dd8885, 0x9ff9b01d, 0x39dd8885, 0xdadf2022, 0x724366e5, 0x724366e5, 0x2a5a1ea5, 0x2a5a1ea5, 0x2a5a1ea5, 0xc9aad6c3, 0xc9aad6c3, 0xc9aad6c3, 0x77e843bb, 0x77e843bb, 0x77e843bb, 0x724366e5, 0xdadf2022, 0xdadf2022, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x9c06870a, 0xfb391ac3, 0x9c06870a, 0x24a3559a, 0x5387d57f, 0x5387d57f, 0x67afb6e7, 0x67afb6e7, 0x67afb6e7, 0x997ae9ee, 0x997ae9ee, 0x997ae9ee, 0x918270dd, 0x918270dd, 0x918270dd, 0x5387d57f, 0x24a3559a, 0x24a3559a, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x34160e54, 0xfa0d929, 0x34160e54, 0xe48464ec, 0xf83ee7aa, 0xf83ee7aa, 0xbada5191, 0xbada5191, 0xbada5191, 0xf48c081c, 0xf48c081c, 0xf48c081c, 0x1e5073d5, 0x1e5073d5, 0x1e5073d5, 0xf83ee7aa, 0xe48464ec, 0xe48464ec, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xf8b89646, 0xae36218f, 0xf8b89646, 0xaa565ac0, 0x724366e5, 0x724366e5, 0xc530c749, 0xc530c749, 0xc530c749, 0x4a9d6a3, 0x4a9d6a3, 0x4a9d6a3, 0x80fc5deb, 0x80fc5deb, 0x80fc5deb, 0x724366e5, 0xaa565ac0, 0xaa565ac0, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xc814e98c, 0xc80ea558, 0xc814e98c, 0x3d259002, 0x1c955882, 0x1c955882, 0xbaf29951, 0xbaf29951, 0xbaf29951, 0x38a476e1, 0x38a476e1, 0x38a476e1, 0xf74cf39d, 0xf74cf39d, 0xf74cf39d, 0x1c955882, 0x3d259002, 0x3d259002, 0x1c955882, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4d835add, 0x8e85c29e, 0x4d835add, 0x412a6434, 0x4d266f7a, 0x4d266f7a, 0x37157ce4, 0x37157ce4, 0x37157ce4, 0x7b402fa2, 0x7b402fa2, 0x7b402fa2, 0x59e19d5c, 0x59e19d5c, 0x59e19d5c, 0x4d266f7a, 0x412a6434, 0x412a6434, 0x4d266f7a, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x65f356c1, 0x687de513, 0x65f356c1, 0xce8766c3, 0x1ed9d731, 0x1ed9d731, 0xfb07ebd0, 0xfb07ebd0, 0xfb07ebd0, 0x4f06ab58, 0x4f06ab58, 0x4f06ab58, 0x422ab71b, 0x422ab71b, 0x422ab71b, 0x1ed9d731, 0xce8766c3, 0xce8766c3, 0x1ed9d731, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x35eaca6c, 0xf1f3421e, 0x35eaca6c, 0xf3f790a6, 0x9813a416, 0x9813a416, 0x3a84c463, 0x3a84c463, 0x3a84c463, 0x3171c0cc, 0x3171c0cc, 0x3171c0cc, 0x25730255, 0x25730255, 0x25730255, 0x9813a416, 0xf3f790a6, 0xf3f790a6, 0x9813a416, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xc63e4058, 0x297346bb, 0xc63e4058, 0x43b07168, 0x5fcf013d, 0x5fcf013d, 0x814b6f45, 0x814b6f45, 0x814b6f45, 0x70086a58, 0x70086a58, 0x70086a58, 0x37f769df, 0x37f769df, 0x37f769df, 0x5fcf013d, 0x43b07168, 0x43b07168, 0x5fcf013d, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x42625965, 0xbdbab59d, 0x42625965, 0x4229400e, 0xdd28f52b, 0xdd28f52b, 0x74cb4529, 0x74cb4529, 0x74cb4529, 0x9dd02ed, 0x9dd02ed, 0x9dd02ed, 0x6aefdcc7, 0x6aefdcc7, 0x6aefdcc7, 0xdd28f52b, 0x4229400e, 0x4229400e, 0xdd28f52b, }, 20 }, - { "gfxterm_ru", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xdbf44912, 0xc82adc43, 0xdbf44912, 0x9290047b, 0x59c36f00, 0x59c36f00, 0xab23d594, 0xab23d594, 0xab23d594, 0xf731d576, 0xf731d576, 0xf731d576, 0xb27de1e8, 0xb27de1e8, 0xb27de1e8, 0x59c36f00, 0x9290047b, 0x9290047b, 0x59c36f00, }, 20 }, - { "gfxterm_ru", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x62fabab4, 0xdbdedb42, 0x62fabab4, 0x3e69093b, 0xaa4593fe, 0xaa4593fe, 0x8573463b, 0x8573463b, 0x8573463b, 0x5ff4e900, 0x5ff4e900, 0x5ff4e900, 0x63f8f949, 0x63f8f949, 0x63f8f949, 0xaa4593fe, 0x3e69093b, 0x3e69093b, 0xaa4593fe, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xc4a0b1c4, 0xcaf9129f, 0xc4a0b1c4, 0x116aa3b8, 0xc9cbf769, 0xc9cbf769, 0xcd389b10, 0xcd389b10, 0xcd389b10, 0xf9d1bc3e, 0xf9d1bc3e, 0xf9d1bc3e, 0xdbb5d4b5, 0xdbb5d4b5, 0xdbb5d4b5, 0xc9cbf769, 0x116aa3b8, 0x116aa3b8, 0xc9cbf769, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x6efb4dad, 0x369b71a, 0x6efb4dad, 0xa8e61767, 0x9813a416, 0x9813a416, 0x3b4bf94, 0x3b4bf94, 0x3b4bf94, 0x841bb3b, 0x841bb3b, 0x841bb3b, 0x1c4379a2, 0x1c4379a2, 0x1c4379a2, 0x9813a416, 0xa8e61767, 0xa8e61767, 0x9813a416, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x179dd979, 0x1de58cc1, 0x179dd979, 0x9213e849, 0x5fcf013d, 0x5fcf013d, 0x349a05dc, 0x349a05dc, 0x349a05dc, 0xc5d900c1, 0xc5d900c1, 0xc5d900c1, 0x82260346, 0x82260346, 0x82260346, 0x5fcf013d, 0x9213e849, 0x9213e849, 0x5fcf013d, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5d07b0aa, 0x2682b6f8, 0x5d07b0aa, 0x5d4ca9c1, 0xdd28f52b, 0xdd28f52b, 0xd4dbe6e9, 0xd4dbe6e9, 0xd4dbe6e9, 0xa9cda12d, 0xa9cda12d, 0xa9cda12d, 0xcaff7f07, 0xcaff7f07, 0xcaff7f07, 0xdd28f52b, 0x5d4ca9c1, 0x5d4ca9c1, 0xdd28f52b, }, 20 }, - { "gfxterm_ru", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xdbf44912, 0xc82adc43, 0xdbf44912, 0x9290047b, 0x59c36f00, 0x59c36f00, 0xab23d594, 0xab23d594, 0xab23d594, 0xf731d576, 0xf731d576, 0xf731d576, 0xb27de1e8, 0xb27de1e8, 0xb27de1e8, 0x59c36f00, 0x9290047b, 0x9290047b, 0x59c36f00, }, 20 }, - { "gfxterm_ru", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x62fabab4, 0xdbdedb42, 0x62fabab4, 0x3e69093b, 0xaa4593fe, 0xaa4593fe, 0x8573463b, 0x8573463b, 0x8573463b, 0x5ff4e900, 0x5ff4e900, 0x5ff4e900, 0x63f8f949, 0x63f8f949, 0x63f8f949, 0xaa4593fe, 0x3e69093b, 0x3e69093b, 0xaa4593fe, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xc4a0b1c4, 0xcaf9129f, 0xc4a0b1c4, 0x116aa3b8, 0xc9cbf769, 0xc9cbf769, 0xcd389b10, 0xcd389b10, 0xcd389b10, 0xf9d1bc3e, 0xf9d1bc3e, 0xf9d1bc3e, 0xdbb5d4b5, 0xdbb5d4b5, 0xdbb5d4b5, 0xc9cbf769, 0x116aa3b8, 0x116aa3b8, 0xc9cbf769, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xbc31c24b, 0x83c43023, 0xbc31c24b, 0xce524dd6, 0x5387d57f, 0x5387d57f, 0xda49acb8, 0xda49acb8, 0xda49acb8, 0xf9286ab2, 0xf9286ab2, 0xf9286ab2, 0x51732f7f, 0x51732f7f, 0x51732f7f, 0x5387d57f, 0xce524dd6, 0xce524dd6, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xef057545, 0xac031794, 0xef057545, 0xf6daee53, 0xf83ee7aa, 0xf83ee7aa, 0xd2d55043, 0xd2d55043, 0xd2d55043, 0x16e2dba2, 0x16e2dba2, 0x16e2dba2, 0xd9fc88b0, 0xd9fc88b0, 0xd9fc88b0, 0xf83ee7aa, 0xf6daee53, 0xf6daee53, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xe302caa7, 0xaa205ee5, 0xe302caa7, 0x6200, 0x724366e5, 0x724366e5, 0xc267b9a4, 0xc267b9a4, 0xc267b9a4, 0x219771c2, 0x219771c2, 0x219771c2, 0x9fd5e4ba, 0x9fd5e4ba, 0x9fd5e4ba, 0x724366e5, 0x6200, 0x6200, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xe275ba72, 0xc0fca11, 0xe275ba72, 0x5ad068e2, 0x5387d57f, 0x5387d57f, 0x915873ea, 0x915873ea, 0x915873ea, 0x6f8d2ce3, 0x6f8d2ce3, 0x6f8d2ce3, 0x6775b5d0, 0x6775b5d0, 0x6775b5d0, 0x5387d57f, 0x5ad068e2, 0x5ad068e2, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1b78c823, 0x44f4ea59, 0x1b78c823, 0xcbeaa29b, 0xf83ee7aa, 0xf83ee7aa, 0x8a66a6d, 0x8a66a6d, 0x8a66a6d, 0x46f033e0, 0x46f033e0, 0x46f033e0, 0xac2c4829, 0xac2c4829, 0xac2c4829, 0xf83ee7aa, 0xcbeaa29b, 0xcbeaa29b, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xb17861b9, 0x4a460c5, 0xb17861b9, 0xe396ad3f, 0x724366e5, 0x724366e5, 0xb5604b13, 0xb5604b13, 0xb5604b13, 0x74f95af9, 0x74f95af9, 0x74f95af9, 0xf0acd1b1, 0xf0acd1b1, 0xf0acd1b1, 0x724366e5, 0xe396ad3f, 0xe396ad3f, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xf4baecd1, 0x8ac6b394, 0xf4baecd1, 0x18b955f, 0x1c955882, 0x1c955882, 0x96ffb153, 0x96ffb153, 0x96ffb153, 0x14a95ee3, 0x14a95ee3, 0x14a95ee3, 0xdb41db9f, 0xdb41db9f, 0xdb41db9f, 0x1c955882, 0x18b955f, 0x18b955f, 0x1c955882, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfd3793dc, 0x2db332c2, 0xfd3793dc, 0xf19ead35, 0x4d266f7a, 0x4d266f7a, 0x12ca05d7, 0x12ca05d7, 0x12ca05d7, 0x5e9f5691, 0x5e9f5691, 0x5e9f5691, 0x7c3ee46f, 0x7c3ee46f, 0x7c3ee46f, 0x4d266f7a, 0xf19ead35, 0xf19ead35, 0x4d266f7a, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xeeea770, 0x17ff444a, 0xeeea770, 0xa59a9772, 0x1ed9d731, 0x1ed9d731, 0x1d44b9f2, 0x1d44b9f2, 0x1d44b9f2, 0xa945f97a, 0xa945f97a, 0xa945f97a, 0xa469e539, 0xa469e539, 0xa469e539, 0x1ed9d731, 0xa59a9772, 0xa59a9772, 0x1ed9d731, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xbc31c24b, 0x83c43023, 0xbc31c24b, 0xce524dd6, 0x5387d57f, 0x5387d57f, 0xda49acb8, 0xda49acb8, 0xda49acb8, 0xf9286ab2, 0xf9286ab2, 0xf9286ab2, 0x51732f7f, 0x51732f7f, 0x51732f7f, 0x5387d57f, 0xce524dd6, 0xce524dd6, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xef057545, 0xac031794, 0xef057545, 0xf6daee53, 0xf83ee7aa, 0xf83ee7aa, 0xd2d55043, 0xd2d55043, 0xd2d55043, 0x16e2dba2, 0x16e2dba2, 0x16e2dba2, 0xd9fc88b0, 0xd9fc88b0, 0xd9fc88b0, 0xf83ee7aa, 0xf6daee53, 0xf6daee53, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xe302caa7, 0xaa205ee5, 0xe302caa7, 0x6200, 0x724366e5, 0x724366e5, 0xc267b9a4, 0xc267b9a4, 0xc267b9a4, 0x219771c2, 0x219771c2, 0x219771c2, 0x9fd5e4ba, 0x9fd5e4ba, 0x9fd5e4ba, 0x724366e5, 0x6200, 0x6200, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xe275ba72, 0xc0fca11, 0xe275ba72, 0x5ad068e2, 0x5387d57f, 0x5387d57f, 0x915873ea, 0x915873ea, 0x915873ea, 0x6f8d2ce3, 0x6f8d2ce3, 0x6f8d2ce3, 0x6775b5d0, 0x6775b5d0, 0x6775b5d0, 0x5387d57f, 0x5ad068e2, 0x5ad068e2, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1b78c823, 0x44f4ea59, 0x1b78c823, 0xcbeaa29b, 0xf83ee7aa, 0xf83ee7aa, 0x8a66a6d, 0x8a66a6d, 0x8a66a6d, 0x46f033e0, 0x46f033e0, 0x46f033e0, 0xac2c4829, 0xac2c4829, 0xac2c4829, 0xf83ee7aa, 0xcbeaa29b, 0xcbeaa29b, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xb17861b9, 0x4a460c5, 0xb17861b9, 0xe396ad3f, 0x724366e5, 0x724366e5, 0xb5604b13, 0xb5604b13, 0xb5604b13, 0x74f95af9, 0x74f95af9, 0x74f95af9, 0xf0acd1b1, 0xf0acd1b1, 0xf0acd1b1, 0x724366e5, 0xe396ad3f, 0xe396ad3f, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xf4baecd1, 0x8ac6b394, 0xf4baecd1, 0x18b955f, 0x1c955882, 0x1c955882, 0x96ffb153, 0x96ffb153, 0x96ffb153, 0x14a95ee3, 0x14a95ee3, 0x14a95ee3, 0xdb41db9f, 0xdb41db9f, 0xdb41db9f, 0x1c955882, 0x18b955f, 0x18b955f, 0x1c955882, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfd3793dc, 0x2db332c2, 0xfd3793dc, 0xf19ead35, 0x4d266f7a, 0x4d266f7a, 0x12ca05d7, 0x12ca05d7, 0x12ca05d7, 0x5e9f5691, 0x5e9f5691, 0x5e9f5691, 0x7c3ee46f, 0x7c3ee46f, 0x7c3ee46f, 0x4d266f7a, 0xf19ead35, 0xf19ead35, 0x4d266f7a, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xeeea770, 0x17ff444a, 0xeeea770, 0xa59a9772, 0x1ed9d731, 0x1ed9d731, 0x1d44b9f2, 0x1d44b9f2, 0x1d44b9f2, 0xa945f97a, 0xa945f97a, 0xa945f97a, 0xa469e539, 0xa469e539, 0xa469e539, 0x1ed9d731, 0xa59a9772, 0xa59a9772, 0x1ed9d731, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x6efb4dad, 0x369b71a, 0x6efb4dad, 0xa8e61767, 0x9813a416, 0x9813a416, 0x3b4bf94, 0x3b4bf94, 0x3b4bf94, 0x841bb3b, 0x841bb3b, 0x841bb3b, 0x1c4379a2, 0x1c4379a2, 0x1c4379a2, 0x9813a416, 0xa8e61767, 0xa8e61767, 0x9813a416, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x179dd979, 0x1de58cc1, 0x179dd979, 0x9213e849, 0x5fcf013d, 0x5fcf013d, 0x349a05dc, 0x349a05dc, 0x349a05dc, 0xc5d900c1, 0xc5d900c1, 0xc5d900c1, 0x82260346, 0x82260346, 0x82260346, 0x5fcf013d, 0x9213e849, 0x9213e849, 0x5fcf013d, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5d07b0aa, 0x2682b6f8, 0x5d07b0aa, 0x5d4ca9c1, 0xdd28f52b, 0xdd28f52b, 0xd4dbe6e9, 0xd4dbe6e9, 0xd4dbe6e9, 0xa9cda12d, 0xa9cda12d, 0xa9cda12d, 0xcaff7f07, 0xcaff7f07, 0xcaff7f07, 0xdd28f52b, 0x5d4ca9c1, 0x5d4ca9c1, 0xdd28f52b, }, 20 }, - { "gfxterm_fr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x78b258dc, 0x5543ab2b, 0x78b258dc, 0x31d615b5, 0x59c36f00, 0x59c36f00, 0xc73a1033, 0xc73a1033, 0xc73a1033, 0x9b2810d1, 0x9b2810d1, 0x9b2810d1, 0xde64244f, 0xde64244f, 0xde64244f, 0x59c36f00, 0x31d615b5, 0x31d615b5, 0x59c36f00, }, 20 }, - { "gfxterm_fr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8cfc9a2, 0xe48bee7d, 0x8cfc9a2, 0x545c7a2d, 0xaa4593fe, 0xaa4593fe, 0xb30e5e1c, 0xb30e5e1c, 0xb30e5e1c, 0x6989f127, 0x6989f127, 0x6989f127, 0x5585e16e, 0x5585e16e, 0x5585e16e, 0xaa4593fe, 0x545c7a2d, 0x545c7a2d, 0xaa4593fe, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x82e0293c, 0xef26570d, 0x82e0293c, 0x572a3b40, 0xc9cbf769, 0xc9cbf769, 0x9056af5f, 0x9056af5f, 0x9056af5f, 0xa4bf8871, 0xa4bf8871, 0xa4bf8871, 0x86dbe0fa, 0x86dbe0fa, 0x86dbe0fa, 0xc9cbf769, 0x572a3b40, 0x572a3b40, 0xc9cbf769, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xbc06fffc, 0x364aa5c7, 0xbc06fffc, 0x7a1ba536, 0x9813a416, 0x9813a416, 0xabce4a73, 0xabce4a73, 0xabce4a73, 0xa03b4edc, 0xa03b4edc, 0xa03b4edc, 0xb4398c45, 0xb4398c45, 0xb4398c45, 0x9813a416, 0x7a1ba536, 0x7a1ba536, 0x9813a416, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb0b4fa0c, 0xc7b12a4e, 0xb0b4fa0c, 0x353acb3c, 0x5fcf013d, 0x5fcf013d, 0xe300c643, 0xe300c643, 0xe300c643, 0x1243c35e, 0x1243c35e, 0x1243c35e, 0x55bcc0d9, 0x55bcc0d9, 0x55bcc0d9, 0x5fcf013d, 0x353acb3c, 0x353acb3c, 0x5fcf013d, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x20eb710, 0x97329eb5, 0x20eb710, 0x245ae7b, 0xdd28f52b, 0xdd28f52b, 0x7a1d74fd, 0x7a1d74fd, 0x7a1d74fd, 0x70b3339, 0x70b3339, 0x70b3339, 0x6439ed13, 0x6439ed13, 0x6439ed13, 0xdd28f52b, 0x245ae7b, 0x245ae7b, 0xdd28f52b, }, 20 }, - { "gfxterm_fr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x78b258dc, 0x5543ab2b, 0x78b258dc, 0x31d615b5, 0x59c36f00, 0x59c36f00, 0xc73a1033, 0xc73a1033, 0xc73a1033, 0x9b2810d1, 0x9b2810d1, 0x9b2810d1, 0xde64244f, 0xde64244f, 0xde64244f, 0x59c36f00, 0x31d615b5, 0x31d615b5, 0x59c36f00, }, 20 }, - { "gfxterm_fr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x8cfc9a2, 0xe48bee7d, 0x8cfc9a2, 0x545c7a2d, 0xaa4593fe, 0xaa4593fe, 0xb30e5e1c, 0xb30e5e1c, 0xb30e5e1c, 0x6989f127, 0x6989f127, 0x6989f127, 0x5585e16e, 0x5585e16e, 0x5585e16e, 0xaa4593fe, 0x545c7a2d, 0x545c7a2d, 0xaa4593fe, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x82e0293c, 0xef26570d, 0x82e0293c, 0x572a3b40, 0xc9cbf769, 0xc9cbf769, 0x9056af5f, 0x9056af5f, 0x9056af5f, 0xa4bf8871, 0xa4bf8871, 0xa4bf8871, 0x86dbe0fa, 0x86dbe0fa, 0x86dbe0fa, 0xc9cbf769, 0x572a3b40, 0x572a3b40, 0xc9cbf769, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x5e677bb0, 0x10a60901, 0x5e677bb0, 0x2c04f42d, 0x5387d57f, 0x5387d57f, 0x8c4b382b, 0x8c4b382b, 0x8c4b382b, 0xaf2afe21, 0xaf2afe21, 0xaf2afe21, 0x771bbec, 0x771bbec, 0x771bbec, 0x5387d57f, 0x2c04f42d, 0x2c04f42d, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9cd2ed2a, 0xf0d4a2d6, 0x9cd2ed2a, 0x850d763c, 0xf83ee7aa, 0xf83ee7aa, 0xd8cdc484, 0xd8cdc484, 0xd8cdc484, 0x1cfa4f65, 0x1cfa4f65, 0x1cfa4f65, 0xd3e41c77, 0xd3e41c77, 0xd3e41c77, 0xf83ee7aa, 0x850d763c, 0x850d763c, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x9a851848, 0xa76e7d2d, 0x9a851848, 0x7987b0ef, 0x724366e5, 0x724366e5, 0xdcd2c529, 0xdcd2c529, 0xdcd2c529, 0x3f220d4f, 0x3f220d4f, 0x3f220d4f, 0x81609837, 0x81609837, 0x81609837, 0x724366e5, 0x7987b0ef, 0x7987b0ef, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x97619707, 0x6f50f077, 0x97619707, 0x2fc44597, 0x5387d57f, 0x5387d57f, 0x50f935e4, 0x50f935e4, 0x50f935e4, 0xae2c6aed, 0xae2c6aed, 0xae2c6aed, 0xa6d4f3de, 0xa6d4f3de, 0xa6d4f3de, 0x5387d57f, 0x2fc44597, 0x2fc44597, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa1fd9dc7, 0xe73a78a6, 0xa1fd9dc7, 0x716ff77f, 0xf83ee7aa, 0xf83ee7aa, 0x78dde9c4, 0x78dde9c4, 0x78dde9c4, 0x368bb049, 0x368bb049, 0x368bb049, 0xdc57cb80, 0xdc57cb80, 0xdc57cb80, 0xf83ee7aa, 0x716ff77f, 0x716ff77f, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xbb37d363, 0x5f4bb8c9, 0xbb37d363, 0xe9d91fe5, 0x724366e5, 0x724366e5, 0x9a5fce9e, 0x9a5fce9e, 0x9a5fce9e, 0x5bc6df74, 0x5bc6df74, 0x5bc6df74, 0xdf93543c, 0xdf93543c, 0xdf93543c, 0x724366e5, 0xe9d91fe5, 0xe9d91fe5, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xd073c0ae, 0x88549625, 0xd073c0ae, 0x2542b920, 0x1c955882, 0x1c955882, 0xf8a21e7d, 0xf8a21e7d, 0xf8a21e7d, 0x7af4f1cd, 0x7af4f1cd, 0x7af4f1cd, 0xb51c74b1, 0xb51c74b1, 0xb51c74b1, 0x1c955882, 0x2542b920, 0x2542b920, 0x1c955882, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x11271f36, 0x6ea425b6, 0x11271f36, 0x1d8e21df, 0x4d266f7a, 0x4d266f7a, 0xbc41aef9, 0xbc41aef9, 0xbc41aef9, 0xf014fdbf, 0xf014fdbf, 0xf014fdbf, 0xd2b54f41, 0xd2b54f41, 0xd2b54f41, 0x4d266f7a, 0x1d8e21df, 0x1d8e21df, 0x4d266f7a, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x58a685bc, 0x38ce9715, 0x58a685bc, 0xf3d2b5be, 0x1ed9d731, 0x1ed9d731, 0x8cc54d61, 0x8cc54d61, 0x8cc54d61, 0x38c40de9, 0x38c40de9, 0x38c40de9, 0x35e811aa, 0x35e811aa, 0x35e811aa, 0x1ed9d731, 0xf3d2b5be, 0xf3d2b5be, 0x1ed9d731, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x5e677bb0, 0x10a60901, 0x5e677bb0, 0x2c04f42d, 0x5387d57f, 0x5387d57f, 0x8c4b382b, 0x8c4b382b, 0x8c4b382b, 0xaf2afe21, 0xaf2afe21, 0xaf2afe21, 0x771bbec, 0x771bbec, 0x771bbec, 0x5387d57f, 0x2c04f42d, 0x2c04f42d, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9cd2ed2a, 0xf0d4a2d6, 0x9cd2ed2a, 0x850d763c, 0xf83ee7aa, 0xf83ee7aa, 0xd8cdc484, 0xd8cdc484, 0xd8cdc484, 0x1cfa4f65, 0x1cfa4f65, 0x1cfa4f65, 0xd3e41c77, 0xd3e41c77, 0xd3e41c77, 0xf83ee7aa, 0x850d763c, 0x850d763c, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x9a851848, 0xa76e7d2d, 0x9a851848, 0x7987b0ef, 0x724366e5, 0x724366e5, 0xdcd2c529, 0xdcd2c529, 0xdcd2c529, 0x3f220d4f, 0x3f220d4f, 0x3f220d4f, 0x81609837, 0x81609837, 0x81609837, 0x724366e5, 0x7987b0ef, 0x7987b0ef, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x97619707, 0x6f50f077, 0x97619707, 0x2fc44597, 0x5387d57f, 0x5387d57f, 0x50f935e4, 0x50f935e4, 0x50f935e4, 0xae2c6aed, 0xae2c6aed, 0xae2c6aed, 0xa6d4f3de, 0xa6d4f3de, 0xa6d4f3de, 0x5387d57f, 0x2fc44597, 0x2fc44597, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa1fd9dc7, 0xe73a78a6, 0xa1fd9dc7, 0x716ff77f, 0xf83ee7aa, 0xf83ee7aa, 0x78dde9c4, 0x78dde9c4, 0x78dde9c4, 0x368bb049, 0x368bb049, 0x368bb049, 0xdc57cb80, 0xdc57cb80, 0xdc57cb80, 0xf83ee7aa, 0x716ff77f, 0x716ff77f, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xbb37d363, 0x5f4bb8c9, 0xbb37d363, 0xe9d91fe5, 0x724366e5, 0x724366e5, 0x9a5fce9e, 0x9a5fce9e, 0x9a5fce9e, 0x5bc6df74, 0x5bc6df74, 0x5bc6df74, 0xdf93543c, 0xdf93543c, 0xdf93543c, 0x724366e5, 0xe9d91fe5, 0xe9d91fe5, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xd073c0ae, 0x88549625, 0xd073c0ae, 0x2542b920, 0x1c955882, 0x1c955882, 0xf8a21e7d, 0xf8a21e7d, 0xf8a21e7d, 0x7af4f1cd, 0x7af4f1cd, 0x7af4f1cd, 0xb51c74b1, 0xb51c74b1, 0xb51c74b1, 0x1c955882, 0x2542b920, 0x2542b920, 0x1c955882, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x11271f36, 0x6ea425b6, 0x11271f36, 0x1d8e21df, 0x4d266f7a, 0x4d266f7a, 0xbc41aef9, 0xbc41aef9, 0xbc41aef9, 0xf014fdbf, 0xf014fdbf, 0xf014fdbf, 0xd2b54f41, 0xd2b54f41, 0xd2b54f41, 0x4d266f7a, 0x1d8e21df, 0x1d8e21df, 0x4d266f7a, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x58a685bc, 0x38ce9715, 0x58a685bc, 0xf3d2b5be, 0x1ed9d731, 0x1ed9d731, 0x8cc54d61, 0x8cc54d61, 0x8cc54d61, 0x38c40de9, 0x38c40de9, 0x38c40de9, 0x35e811aa, 0x35e811aa, 0x35e811aa, 0x1ed9d731, 0xf3d2b5be, 0xf3d2b5be, 0x1ed9d731, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xbc06fffc, 0x364aa5c7, 0xbc06fffc, 0x7a1ba536, 0x9813a416, 0x9813a416, 0xabce4a73, 0xabce4a73, 0xabce4a73, 0xa03b4edc, 0xa03b4edc, 0xa03b4edc, 0xb4398c45, 0xb4398c45, 0xb4398c45, 0x9813a416, 0x7a1ba536, 0x7a1ba536, 0x9813a416, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb0b4fa0c, 0xc7b12a4e, 0xb0b4fa0c, 0x353acb3c, 0x5fcf013d, 0x5fcf013d, 0xe300c643, 0xe300c643, 0xe300c643, 0x1243c35e, 0x1243c35e, 0x1243c35e, 0x55bcc0d9, 0x55bcc0d9, 0x55bcc0d9, 0x5fcf013d, 0x353acb3c, 0x353acb3c, 0x5fcf013d, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x20eb710, 0x97329eb5, 0x20eb710, 0x245ae7b, 0xdd28f52b, 0xdd28f52b, 0x7a1d74fd, 0x7a1d74fd, 0x7a1d74fd, 0x70b3339, 0x70b3339, 0x70b3339, 0x6439ed13, 0x6439ed13, 0x6439ed13, 0xdd28f52b, 0x245ae7b, 0x245ae7b, 0xdd28f52b, }, 20 }, - { "gfxterm_quot", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xe229a7f0, 0x2a317e27, 0xe229a7f0, 0xab4dea99, 0x59c36f00, 0x59c36f00, 0xcba09304, 0xcba09304, 0xcba09304, 0x97b293e6, 0x97b293e6, 0x97b293e6, 0xd2fea778, 0xd2fea778, 0xd2fea778, 0x59c36f00, 0xab4dea99, 0xab4dea99, 0x59c36f00, }, 20 }, - { "gfxterm_quot", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8639bc17, 0x91a6078e, 0x8639bc17, 0xdaaa0f98, 0xaa4593fe, 0xaa4593fe, 0xfda7eac8, 0xfda7eac8, 0xfda7eac8, 0x272045f3, 0x272045f3, 0x272045f3, 0x1b2c55ba, 0x1b2c55ba, 0x1b2c55ba, 0xaa4593fe, 0xdaaa0f98, 0xdaaa0f98, 0xaa4593fe, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xe6177bfd, 0xaa145d1, 0xe6177bfd, 0x33dd6981, 0xc9cbf769, 0xc9cbf769, 0x270340e6, 0x270340e6, 0x270340e6, 0x13ea67c8, 0x13ea67c8, 0x13ea67c8, 0x318e0f43, 0x318e0f43, 0x318e0f43, 0xc9cbf769, 0x33dd6981, 0x33dd6981, 0xc9cbf769, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xec257a83, 0x19d65004, 0xec257a83, 0x2a382049, 0x9813a416, 0x9813a416, 0x8c097a93, 0x8c097a93, 0x8c097a93, 0x87fc7e3c, 0x87fc7e3c, 0x87fc7e3c, 0x93febca5, 0x93febca5, 0x93febca5, 0x9813a416, 0x2a382049, 0x2a382049, 0x9813a416, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x3255e8e, 0xdce0e3fa, 0x3255e8e, 0x86ab6fbe, 0x5fcf013d, 0x5fcf013d, 0xcacb7f18, 0xcacb7f18, 0xcacb7f18, 0x3b887a05, 0x3b887a05, 0x3b887a05, 0x7c777982, 0x7c777982, 0x7c777982, 0x5fcf013d, 0x86ab6fbe, 0x86ab6fbe, 0x5fcf013d, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x673a2dc2, 0x88c6d4d9, 0x673a2dc2, 0x677134a9, 0xdd28f52b, 0xdd28f52b, 0x35beeea3, 0x35beeea3, 0x35beeea3, 0x48a8a967, 0x48a8a967, 0x48a8a967, 0x2b9a774d, 0x2b9a774d, 0x2b9a774d, 0xdd28f52b, 0x677134a9, 0x677134a9, 0xdd28f52b, }, 20 }, - { "gfxterm_quot", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xe229a7f0, 0x2a317e27, 0xe229a7f0, 0xab4dea99, 0x59c36f00, 0x59c36f00, 0xcba09304, 0xcba09304, 0xcba09304, 0x97b293e6, 0x97b293e6, 0x97b293e6, 0xd2fea778, 0xd2fea778, 0xd2fea778, 0x59c36f00, 0xab4dea99, 0xab4dea99, 0x59c36f00, }, 20 }, - { "gfxterm_quot", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x8639bc17, 0x91a6078e, 0x8639bc17, 0xdaaa0f98, 0xaa4593fe, 0xaa4593fe, 0xfda7eac8, 0xfda7eac8, 0xfda7eac8, 0x272045f3, 0x272045f3, 0x272045f3, 0x1b2c55ba, 0x1b2c55ba, 0x1b2c55ba, 0xaa4593fe, 0xdaaa0f98, 0xdaaa0f98, 0xaa4593fe, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xe6177bfd, 0xaa145d1, 0xe6177bfd, 0x33dd6981, 0xc9cbf769, 0xc9cbf769, 0x270340e6, 0x270340e6, 0x270340e6, 0x13ea67c8, 0x13ea67c8, 0x13ea67c8, 0x318e0f43, 0x318e0f43, 0x318e0f43, 0xc9cbf769, 0x33dd6981, 0x33dd6981, 0xc9cbf769, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x29e73016, 0x795de1bc, 0x29e73016, 0x5b84bf8b, 0x5387d57f, 0x5387d57f, 0x4e647c93, 0x4e647c93, 0x4e647c93, 0x6d05ba99, 0x6d05ba99, 0x6d05ba99, 0xc55eff54, 0xc55eff54, 0xc55eff54, 0x5387d57f, 0x5b84bf8b, 0x5b84bf8b, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa14eb75d, 0xa45fd855, 0xa14eb75d, 0xb8912c4b, 0xf83ee7aa, 0xf83ee7aa, 0xf25c3281, 0xf25c3281, 0xf25c3281, 0x366bb960, 0x366bb960, 0x366bb960, 0xf975ea72, 0xf975ea72, 0xf975ea72, 0xf83ee7aa, 0xb8912c4b, 0xb8912c4b, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xa97a7639, 0xb31826b0, 0xa97a7639, 0x4a78de9e, 0x724366e5, 0x724366e5, 0x10d1a394, 0x10d1a394, 0x10d1a394, 0xf3216bf2, 0xf3216bf2, 0xf3216bf2, 0x4d63fe8a, 0x4d63fe8a, 0x4d63fe8a, 0x724366e5, 0x4a78de9e, 0x4a78de9e, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xd37ff64e, 0x4bc20364, 0xd37ff64e, 0x6bda24de, 0x5387d57f, 0x5387d57f, 0x4bd38a03, 0x4bd38a03, 0x4bd38a03, 0xb506d50a, 0xb506d50a, 0xb506d50a, 0xbdfe4c39, 0xbdfe4c39, 0xbdfe4c39, 0x5387d57f, 0x6bda24de, 0x6bda24de, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x83a05a57, 0xbb856709, 0x83a05a57, 0x533230ef, 0xf83ee7aa, 0xf83ee7aa, 0x63d64c93, 0x63d64c93, 0x63d64c93, 0x2d80151e, 0x2d80151e, 0x2d80151e, 0xc75c6ed7, 0xc75c6ed7, 0xc75c6ed7, 0xf83ee7aa, 0x533230ef, 0x533230ef, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x6bb86239, 0xfa8581a4, 0x6bb86239, 0x3956aebf, 0x724366e5, 0x724366e5, 0xe0762c40, 0xe0762c40, 0xe0762c40, 0x21ef3daa, 0x21ef3daa, 0x21ef3daa, 0xa5bab6e2, 0xa5bab6e2, 0xa5bab6e2, 0x724366e5, 0x3956aebf, 0x3956aebf, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x8c1945b9, 0xd6bd3ceb, 0x8c1945b9, 0x79283c37, 0x1c955882, 0x1c955882, 0x97519c3a, 0x97519c3a, 0x97519c3a, 0x1507738a, 0x1507738a, 0x1507738a, 0xdaeff6f6, 0xdaeff6f6, 0xdaeff6f6, 0x1c955882, 0x79283c37, 0x79283c37, 0x1c955882, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x1a7618f6, 0xf685e337, 0x1a7618f6, 0x16df261f, 0x4d266f7a, 0x4d266f7a, 0x2d145f78, 0x2d145f78, 0x2d145f78, 0x61410c3e, 0x61410c3e, 0x61410c3e, 0x43e0bec0, 0x43e0bec0, 0x43e0bec0, 0x4d266f7a, 0x16df261f, 0x16df261f, 0x4d266f7a, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x86d73465, 0x85c814e6, 0x86d73465, 0x2da30467, 0x1ed9d731, 0x1ed9d731, 0xa1c3fdf0, 0xa1c3fdf0, 0xa1c3fdf0, 0x15c2bd78, 0x15c2bd78, 0x15c2bd78, 0x18eea13b, 0x18eea13b, 0x18eea13b, 0x1ed9d731, 0x2da30467, 0x2da30467, 0x1ed9d731, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x29e73016, 0x795de1bc, 0x29e73016, 0x5b84bf8b, 0x5387d57f, 0x5387d57f, 0x4e647c93, 0x4e647c93, 0x4e647c93, 0x6d05ba99, 0x6d05ba99, 0x6d05ba99, 0xc55eff54, 0xc55eff54, 0xc55eff54, 0x5387d57f, 0x5b84bf8b, 0x5b84bf8b, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa14eb75d, 0xa45fd855, 0xa14eb75d, 0xb8912c4b, 0xf83ee7aa, 0xf83ee7aa, 0xf25c3281, 0xf25c3281, 0xf25c3281, 0x366bb960, 0x366bb960, 0x366bb960, 0xf975ea72, 0xf975ea72, 0xf975ea72, 0xf83ee7aa, 0xb8912c4b, 0xb8912c4b, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xa97a7639, 0xb31826b0, 0xa97a7639, 0x4a78de9e, 0x724366e5, 0x724366e5, 0x10d1a394, 0x10d1a394, 0x10d1a394, 0xf3216bf2, 0xf3216bf2, 0xf3216bf2, 0x4d63fe8a, 0x4d63fe8a, 0x4d63fe8a, 0x724366e5, 0x4a78de9e, 0x4a78de9e, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xd37ff64e, 0x4bc20364, 0xd37ff64e, 0x6bda24de, 0x5387d57f, 0x5387d57f, 0x4bd38a03, 0x4bd38a03, 0x4bd38a03, 0xb506d50a, 0xb506d50a, 0xb506d50a, 0xbdfe4c39, 0xbdfe4c39, 0xbdfe4c39, 0x5387d57f, 0x6bda24de, 0x6bda24de, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x83a05a57, 0xbb856709, 0x83a05a57, 0x533230ef, 0xf83ee7aa, 0xf83ee7aa, 0x63d64c93, 0x63d64c93, 0x63d64c93, 0x2d80151e, 0x2d80151e, 0x2d80151e, 0xc75c6ed7, 0xc75c6ed7, 0xc75c6ed7, 0xf83ee7aa, 0x533230ef, 0x533230ef, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x6bb86239, 0xfa8581a4, 0x6bb86239, 0x3956aebf, 0x724366e5, 0x724366e5, 0xe0762c40, 0xe0762c40, 0xe0762c40, 0x21ef3daa, 0x21ef3daa, 0x21ef3daa, 0xa5bab6e2, 0xa5bab6e2, 0xa5bab6e2, 0x724366e5, 0x3956aebf, 0x3956aebf, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x8c1945b9, 0xd6bd3ceb, 0x8c1945b9, 0x79283c37, 0x1c955882, 0x1c955882, 0x97519c3a, 0x97519c3a, 0x97519c3a, 0x1507738a, 0x1507738a, 0x1507738a, 0xdaeff6f6, 0xdaeff6f6, 0xdaeff6f6, 0x1c955882, 0x79283c37, 0x79283c37, 0x1c955882, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x1a7618f6, 0xf685e337, 0x1a7618f6, 0x16df261f, 0x4d266f7a, 0x4d266f7a, 0x2d145f78, 0x2d145f78, 0x2d145f78, 0x61410c3e, 0x61410c3e, 0x61410c3e, 0x43e0bec0, 0x43e0bec0, 0x43e0bec0, 0x4d266f7a, 0x16df261f, 0x16df261f, 0x4d266f7a, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x86d73465, 0x85c814e6, 0x86d73465, 0x2da30467, 0x1ed9d731, 0x1ed9d731, 0xa1c3fdf0, 0xa1c3fdf0, 0xa1c3fdf0, 0x15c2bd78, 0x15c2bd78, 0x15c2bd78, 0x18eea13b, 0x18eea13b, 0x18eea13b, 0x1ed9d731, 0x2da30467, 0x2da30467, 0x1ed9d731, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xec257a83, 0x19d65004, 0xec257a83, 0x2a382049, 0x9813a416, 0x9813a416, 0x8c097a93, 0x8c097a93, 0x8c097a93, 0x87fc7e3c, 0x87fc7e3c, 0x87fc7e3c, 0x93febca5, 0x93febca5, 0x93febca5, 0x9813a416, 0x2a382049, 0x2a382049, 0x9813a416, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x3255e8e, 0xdce0e3fa, 0x3255e8e, 0x86ab6fbe, 0x5fcf013d, 0x5fcf013d, 0xcacb7f18, 0xcacb7f18, 0xcacb7f18, 0x3b887a05, 0x3b887a05, 0x3b887a05, 0x7c777982, 0x7c777982, 0x7c777982, 0x5fcf013d, 0x86ab6fbe, 0x86ab6fbe, 0x5fcf013d, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x673a2dc2, 0x88c6d4d9, 0x673a2dc2, 0x677134a9, 0xdd28f52b, 0xdd28f52b, 0x35beeea3, 0x35beeea3, 0x35beeea3, 0x48a8a967, 0x48a8a967, 0x48a8a967, 0x2b9a774d, 0x2b9a774d, 0x2b9a774d, 0xdd28f52b, 0x677134a9, 0x677134a9, 0xdd28f52b, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xae107385, 0xbf8fb82e, 0xae107385, 0xe7743eec, 0x59c36f00, 0x59c36f00, 0xebc12bda, 0xebc12bda, 0xebc12bda, 0xb7d32b38, 0xb7d32b38, 0xb7d32b38, 0xf29f1fa6, 0xf29f1fa6, 0xf29f1fa6, 0x59c36f00, 0xe7743eec, 0xe7743eec, 0x59c36f00, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xfbcace84, 0x6f1a084e, 0xfbcace84, 0xa7597d0b, 0xaa4593fe, 0xaa4593fe, 0x3ae147d7, 0x3ae147d7, 0x3ae147d7, 0xe066e8ec, 0xe066e8ec, 0xe066e8ec, 0xdc6af8a5, 0xdc6af8a5, 0xdc6af8a5, 0xaa4593fe, 0xa7597d0b, 0xa7597d0b, 0xaa4593fe, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xffa6bec, 0x6dcf8053, 0xffa6bec, 0xda307990, 0xc9cbf769, 0xc9cbf769, 0x5a4cfacb, 0x5a4cfacb, 0x5a4cfacb, 0x6ea5dde5, 0x6ea5dde5, 0x6ea5dde5, 0x4cc1b56e, 0x4cc1b56e, 0x4cc1b56e, 0xc9cbf769, 0xda307990, 0xda307990, 0xc9cbf769, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xfa42c2ea, 0xea757246, 0xfa42c2ea, 0x3c5f9820, 0x9813a416, 0x9813a416, 0x290af708, 0x290af708, 0x290af708, 0x22fff3a7, 0x22fff3a7, 0x22fff3a7, 0x36fd313e, 0x36fd313e, 0x36fd313e, 0x9813a416, 0x3c5f9820, 0x3c5f9820, 0x9813a416, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x2ca306b9, 0x97e67cf5, 0x2ca306b9, 0xa92d3789, 0x5fcf013d, 0x5fcf013d, 0x5b42cac9, 0x5b42cac9, 0x5b42cac9, 0xaa01cfd4, 0xaa01cfd4, 0xaa01cfd4, 0xedfecc53, 0xedfecc53, 0xedfecc53, 0x5fcf013d, 0xa92d3789, 0xa92d3789, 0x5fcf013d, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x3a839aae, 0x89837837, 0x3a839aae, 0x3ac883c5, 0xdd28f52b, 0xdd28f52b, 0x8de395a5, 0x8de395a5, 0x8de395a5, 0xf0f5d261, 0xf0f5d261, 0xf0f5d261, 0x93c70c4b, 0x93c70c4b, 0x93c70c4b, 0xdd28f52b, 0x3ac883c5, 0x3ac883c5, 0xdd28f52b, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xae107385, 0xbf8fb82e, 0xae107385, 0xe7743eec, 0x59c36f00, 0x59c36f00, 0xebc12bda, 0xebc12bda, 0xebc12bda, 0xb7d32b38, 0xb7d32b38, 0xb7d32b38, 0xf29f1fa6, 0xf29f1fa6, 0xf29f1fa6, 0x59c36f00, 0xe7743eec, 0xe7743eec, 0x59c36f00, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xfbcace84, 0x6f1a084e, 0xfbcace84, 0xa7597d0b, 0xaa4593fe, 0xaa4593fe, 0x3ae147d7, 0x3ae147d7, 0x3ae147d7, 0xe066e8ec, 0xe066e8ec, 0xe066e8ec, 0xdc6af8a5, 0xdc6af8a5, 0xdc6af8a5, 0xaa4593fe, 0xa7597d0b, 0xa7597d0b, 0xaa4593fe, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xffa6bec, 0x6dcf8053, 0xffa6bec, 0xda307990, 0xc9cbf769, 0xc9cbf769, 0x5a4cfacb, 0x5a4cfacb, 0x5a4cfacb, 0x6ea5dde5, 0x6ea5dde5, 0x6ea5dde5, 0x4cc1b56e, 0x4cc1b56e, 0x4cc1b56e, 0xc9cbf769, 0xda307990, 0xda307990, 0xc9cbf769, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x46bfc6c9, 0x8e4ed344, 0x46bfc6c9, 0x34dc4954, 0x5387d57f, 0x5387d57f, 0xc95c2bb9, 0xc95c2bb9, 0xc95c2bb9, 0xea3dedb3, 0xea3dedb3, 0xea3dedb3, 0x4266a87e, 0x4266a87e, 0x4266a87e, 0x5387d57f, 0x34dc4954, 0x34dc4954, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf8fa8dd6, 0x46e7e0cb, 0xf8fa8dd6, 0xe12516c0, 0xf83ee7aa, 0xf83ee7aa, 0xff88f7e1, 0xff88f7e1, 0xff88f7e1, 0x3bbf7c00, 0x3bbf7c00, 0x3bbf7c00, 0xf4a12f12, 0xf4a12f12, 0xf4a12f12, 0xf83ee7aa, 0xe12516c0, 0xe12516c0, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x64084d93, 0x156d5456, 0x64084d93, 0x870ae534, 0x724366e5, 0x724366e5, 0x4c4f3106, 0x4c4f3106, 0x4c4f3106, 0xafbff960, 0xafbff960, 0xafbff960, 0x11fd6c18, 0x11fd6c18, 0x11fd6c18, 0x724366e5, 0x870ae534, 0x870ae534, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc2887c69, 0xe0257645, 0xc2887c69, 0x7a2daef9, 0x5387d57f, 0x5387d57f, 0xf127fce0, 0xf127fce0, 0xf127fce0, 0xff2a3e9, 0xff2a3e9, 0xff2a3e9, 0x70a3ada, 0x70a3ada, 0x70a3ada, 0x5387d57f, 0x7a2daef9, 0x7a2daef9, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8486eeef, 0x5e732c64, 0x8486eeef, 0x54148457, 0xf83ee7aa, 0xf83ee7aa, 0x143cae9e, 0x143cae9e, 0x143cae9e, 0x5a6af713, 0x5a6af713, 0x5a6af713, 0xb0b68cda, 0xb0b68cda, 0xb0b68cda, 0xf83ee7aa, 0x54148457, 0x54148457, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xaad4c3b8, 0x90ce661c, 0xaad4c3b8, 0xf83a0f3e, 0x724366e5, 0x724366e5, 0xa7ac6799, 0xa7ac6799, 0xa7ac6799, 0x66357673, 0x66357673, 0x66357673, 0xe260fd3b, 0xe260fd3b, 0xe260fd3b, 0x724366e5, 0xf83a0f3e, 0xf83a0f3e, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x60563832, 0xa0d8e41f, 0x60563832, 0x956741bc, 0x1c955882, 0x1c955882, 0x9abc058d, 0x9abc058d, 0x9abc058d, 0x18eaea3d, 0x18eaea3d, 0x18eaea3d, 0xd7026f41, 0xd7026f41, 0xd7026f41, 0x1c955882, 0x956741bc, 0x956741bc, 0x1c955882, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9f11c3db, 0x5e6faffc, 0x9f11c3db, 0x93b8fd32, 0x4d266f7a, 0x4d266f7a, 0xdddadbb1, 0xdddadbb1, 0xdddadbb1, 0x918f88f7, 0x918f88f7, 0x918f88f7, 0xb32e3a09, 0xb32e3a09, 0xb32e3a09, 0x4d266f7a, 0x93b8fd32, 0x93b8fd32, 0x4d266f7a, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd58db96, 0x29ecb6a6, 0xd58db96, 0xa62ceb94, 0x1ed9d731, 0x1ed9d731, 0x65cad63c, 0x65cad63c, 0x65cad63c, 0xd1cb96b4, 0xd1cb96b4, 0xd1cb96b4, 0xdce78af7, 0xdce78af7, 0xdce78af7, 0x1ed9d731, 0xa62ceb94, 0xa62ceb94, 0x1ed9d731, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x46bfc6c9, 0x8e4ed344, 0x46bfc6c9, 0x34dc4954, 0x5387d57f, 0x5387d57f, 0xc95c2bb9, 0xc95c2bb9, 0xc95c2bb9, 0xea3dedb3, 0xea3dedb3, 0xea3dedb3, 0x4266a87e, 0x4266a87e, 0x4266a87e, 0x5387d57f, 0x34dc4954, 0x34dc4954, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf8fa8dd6, 0x46e7e0cb, 0xf8fa8dd6, 0xe12516c0, 0xf83ee7aa, 0xf83ee7aa, 0xff88f7e1, 0xff88f7e1, 0xff88f7e1, 0x3bbf7c00, 0x3bbf7c00, 0x3bbf7c00, 0xf4a12f12, 0xf4a12f12, 0xf4a12f12, 0xf83ee7aa, 0xe12516c0, 0xe12516c0, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x64084d93, 0x156d5456, 0x64084d93, 0x870ae534, 0x724366e5, 0x724366e5, 0x4c4f3106, 0x4c4f3106, 0x4c4f3106, 0xafbff960, 0xafbff960, 0xafbff960, 0x11fd6c18, 0x11fd6c18, 0x11fd6c18, 0x724366e5, 0x870ae534, 0x870ae534, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc2887c69, 0xe0257645, 0xc2887c69, 0x7a2daef9, 0x5387d57f, 0x5387d57f, 0xf127fce0, 0xf127fce0, 0xf127fce0, 0xff2a3e9, 0xff2a3e9, 0xff2a3e9, 0x70a3ada, 0x70a3ada, 0x70a3ada, 0x5387d57f, 0x7a2daef9, 0x7a2daef9, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8486eeef, 0x5e732c64, 0x8486eeef, 0x54148457, 0xf83ee7aa, 0xf83ee7aa, 0x143cae9e, 0x143cae9e, 0x143cae9e, 0x5a6af713, 0x5a6af713, 0x5a6af713, 0xb0b68cda, 0xb0b68cda, 0xb0b68cda, 0xf83ee7aa, 0x54148457, 0x54148457, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xaad4c3b8, 0x90ce661c, 0xaad4c3b8, 0xf83a0f3e, 0x724366e5, 0x724366e5, 0xa7ac6799, 0xa7ac6799, 0xa7ac6799, 0x66357673, 0x66357673, 0x66357673, 0xe260fd3b, 0xe260fd3b, 0xe260fd3b, 0x724366e5, 0xf83a0f3e, 0xf83a0f3e, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x60563832, 0xa0d8e41f, 0x60563832, 0x956741bc, 0x1c955882, 0x1c955882, 0x9abc058d, 0x9abc058d, 0x9abc058d, 0x18eaea3d, 0x18eaea3d, 0x18eaea3d, 0xd7026f41, 0xd7026f41, 0xd7026f41, 0x1c955882, 0x956741bc, 0x956741bc, 0x1c955882, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9f11c3db, 0x5e6faffc, 0x9f11c3db, 0x93b8fd32, 0x4d266f7a, 0x4d266f7a, 0xdddadbb1, 0xdddadbb1, 0xdddadbb1, 0x918f88f7, 0x918f88f7, 0x918f88f7, 0xb32e3a09, 0xb32e3a09, 0xb32e3a09, 0x4d266f7a, 0x93b8fd32, 0x93b8fd32, 0x4d266f7a, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd58db96, 0x29ecb6a6, 0xd58db96, 0xa62ceb94, 0x1ed9d731, 0x1ed9d731, 0x65cad63c, 0x65cad63c, 0x65cad63c, 0xd1cb96b4, 0xd1cb96b4, 0xd1cb96b4, 0xdce78af7, 0xdce78af7, 0xdce78af7, 0x1ed9d731, 0xa62ceb94, 0xa62ceb94, 0x1ed9d731, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xfa42c2ea, 0xea757246, 0xfa42c2ea, 0x3c5f9820, 0x9813a416, 0x9813a416, 0x290af708, 0x290af708, 0x290af708, 0x22fff3a7, 0x22fff3a7, 0x22fff3a7, 0x36fd313e, 0x36fd313e, 0x36fd313e, 0x9813a416, 0x3c5f9820, 0x3c5f9820, 0x9813a416, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x2ca306b9, 0x97e67cf5, 0x2ca306b9, 0xa92d3789, 0x5fcf013d, 0x5fcf013d, 0x5b42cac9, 0x5b42cac9, 0x5b42cac9, 0xaa01cfd4, 0xaa01cfd4, 0xaa01cfd4, 0xedfecc53, 0xedfecc53, 0xedfecc53, 0x5fcf013d, 0xa92d3789, 0xa92d3789, 0x5fcf013d, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x3a839aae, 0x89837837, 0x3a839aae, 0x3ac883c5, 0xdd28f52b, 0xdd28f52b, 0x8de395a5, 0x8de395a5, 0x8de395a5, 0xf0f5d261, 0xf0f5d261, 0xf0f5d261, 0x93c70c4b, 0x93c70c4b, 0x93c70c4b, 0xdd28f52b, 0x3ac883c5, 0x3ac883c5, 0xdd28f52b, }, 20 }, - { "gfxterm_ch", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xbad0b774, 0x11b3aba3, 0xbad0b774, 0xf3b4fa1d, 0x59c36f00, 0x59c36f00, 0x8fd469d6, 0x8fd469d6, 0x8fd469d6, 0xd3c66934, 0xd3c66934, 0xd3c66934, 0x968a5daa, 0x968a5daa, 0x968a5daa, 0x59c36f00, 0xf3b4fa1d, 0xf3b4fa1d, 0x59c36f00, }, 20 }, - { "gfxterm_ch", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x65ca84be, 0xf8d1eb4f, 0x65ca84be, 0x39593731, 0xaa4593fe, 0xaa4593fe, 0xdb2e71a5, 0xdb2e71a5, 0xdb2e71a5, 0x1a9de9e, 0x1a9de9e, 0x1a9de9e, 0x3da5ced7, 0x3da5ced7, 0x3da5ced7, 0xaa4593fe, 0x39593731, 0x39593731, 0xaa4593fe, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xdea05d4f, 0xb662c223, 0xdea05d4f, 0xb6a4f33, 0xc9cbf769, 0xc9cbf769, 0xadcc90df, 0xadcc90df, 0xadcc90df, 0x9925b7f1, 0x9925b7f1, 0x9925b7f1, 0xbb41df7a, 0xbb41df7a, 0xbb41df7a, 0xc9cbf769, 0xb6a4f33, 0xb6a4f33, 0xc9cbf769, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x97582aea, 0x106653a, 0x97582aea, 0x51457020, 0x9813a416, 0x9813a416, 0x6fbc18ae, 0x6fbc18ae, 0x6fbc18ae, 0x64491c01, 0x64491c01, 0x64491c01, 0x704bde98, 0x704bde98, 0x704bde98, 0x9813a416, 0x51457020, 0x51457020, 0x9813a416, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x964f65ea, 0x34ae6fb6, 0x964f65ea, 0x13c154da, 0x5fcf013d, 0x5fcf013d, 0xa4ebbaa6, 0xa4ebbaa6, 0xa4ebbaa6, 0x55a8bfbb, 0x55a8bfbb, 0x55a8bfbb, 0x1257bc3c, 0x1257bc3c, 0x1257bc3c, 0x5fcf013d, 0x13c154da, 0x13c154da, 0x5fcf013d, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x75e6834a, 0x28165e16, 0x75e6834a, 0x75ad9a21, 0xdd28f52b, 0xdd28f52b, 0x6ae4a429, 0x6ae4a429, 0x6ae4a429, 0x17f2e3ed, 0x17f2e3ed, 0x17f2e3ed, 0x74c03dc7, 0x74c03dc7, 0x74c03dc7, 0xdd28f52b, 0x75ad9a21, 0x75ad9a21, 0xdd28f52b, }, 20 }, - { "gfxterm_ch", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xbad0b774, 0x11b3aba3, 0xbad0b774, 0xf3b4fa1d, 0x59c36f00, 0x59c36f00, 0x8fd469d6, 0x8fd469d6, 0x8fd469d6, 0xd3c66934, 0xd3c66934, 0xd3c66934, 0x968a5daa, 0x968a5daa, 0x968a5daa, 0x59c36f00, 0xf3b4fa1d, 0xf3b4fa1d, 0x59c36f00, }, 20 }, - { "gfxterm_ch", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x65ca84be, 0xf8d1eb4f, 0x65ca84be, 0x39593731, 0xaa4593fe, 0xaa4593fe, 0xdb2e71a5, 0xdb2e71a5, 0xdb2e71a5, 0x1a9de9e, 0x1a9de9e, 0x1a9de9e, 0x3da5ced7, 0x3da5ced7, 0x3da5ced7, 0xaa4593fe, 0x39593731, 0x39593731, 0xaa4593fe, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xdea05d4f, 0xb662c223, 0xdea05d4f, 0xb6a4f33, 0xc9cbf769, 0xc9cbf769, 0xadcc90df, 0xadcc90df, 0xadcc90df, 0x9925b7f1, 0x9925b7f1, 0x9925b7f1, 0xbb41df7a, 0xbb41df7a, 0xbb41df7a, 0xc9cbf769, 0xb6a4f33, 0xb6a4f33, 0xc9cbf769, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xb382d720, 0xb8de6436, 0xb382d720, 0xc1e158bd, 0x5387d57f, 0x5387d57f, 0x929048c4, 0x929048c4, 0x929048c4, 0xb1f18ece, 0xb1f18ece, 0xb1f18ece, 0x19aacb03, 0x19aacb03, 0x19aacb03, 0x5387d57f, 0xc1e158bd, 0xc1e158bd, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3f3d9790, 0xa35395ab, 0x3f3d9790, 0x26e20c86, 0xf83ee7aa, 0xf83ee7aa, 0xf9737ced, 0xf9737ced, 0xf9737ced, 0x3d44f70c, 0x3d44f70c, 0x3d44f70c, 0xf25aa41e, 0xf25aa41e, 0xf25aa41e, 0xf83ee7aa, 0x26e20c86, 0x26e20c86, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x758a32e3, 0xdee0d5cb, 0x758a32e3, 0x96889a44, 0x724366e5, 0x724366e5, 0xb047ef22, 0xb047ef22, 0xb047ef22, 0x53b72744, 0x53b72744, 0x53b72744, 0xedf5b23c, 0xedf5b23c, 0xedf5b23c, 0x724366e5, 0x96889a44, 0x96889a44, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1dc9c0fa, 0x33ac9864, 0x1dc9c0fa, 0xa56c126a, 0x5387d57f, 0x5387d57f, 0xba18c4c3, 0xba18c4c3, 0xba18c4c3, 0x44cd9bca, 0x44cd9bca, 0x44cd9bca, 0x4c3502f9, 0x4c3502f9, 0x4c3502f9, 0x5387d57f, 0xa56c126a, 0xa56c126a, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd974fae3, 0x3ccb6dc6, 0xd974fae3, 0x9e6905b, 0xf83ee7aa, 0xf83ee7aa, 0xc06251ed, 0xc06251ed, 0xc06251ed, 0x8e340860, 0x8e340860, 0x8e340860, 0x64e873a9, 0x64e873a9, 0x64e873a9, 0xf83ee7aa, 0x9e6905b, 0x9e6905b, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xe1a82093, 0xb564e19c, 0xe1a82093, 0xb346ec15, 0x724366e5, 0x724366e5, 0x97406bcb, 0x97406bcb, 0x97406bcb, 0x56d97a21, 0x56d97a21, 0x56d97a21, 0xd28cf169, 0xd28cf169, 0xd28cf169, 0x724366e5, 0xb346ec15, 0xb346ec15, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xd60d9c2e, 0x8d9d3fca, 0xd60d9c2e, 0x233ce5a0, 0x1c955882, 0x1c955882, 0xf3109705, 0xf3109705, 0xf3109705, 0x714678b5, 0x714678b5, 0x714678b5, 0xbeaefdc9, 0xbeaefdc9, 0xbeaefdc9, 0x1c955882, 0x233ce5a0, 0x233ce5a0, 0x1c955882, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x8ae42c6c, 0xbf04c68c, 0x8ae42c6c, 0x864d1285, 0x4d266f7a, 0x4d266f7a, 0xdf5e9f05, 0xdf5e9f05, 0xdf5e9f05, 0x930bcc43, 0x930bcc43, 0x930bcc43, 0xb1aa7ebd, 0xb1aa7ebd, 0xb1aa7ebd, 0x4d266f7a, 0x864d1285, 0x864d1285, 0x4d266f7a, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xbb7bd38a, 0x76b75720, 0xbb7bd38a, 0x100fe388, 0x1ed9d731, 0x1ed9d731, 0x9dccb1ba, 0x9dccb1ba, 0x9dccb1ba, 0x29cdf132, 0x29cdf132, 0x29cdf132, 0x24e1ed71, 0x24e1ed71, 0x24e1ed71, 0x1ed9d731, 0x100fe388, 0x100fe388, 0x1ed9d731, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xb382d720, 0xb8de6436, 0xb382d720, 0xc1e158bd, 0x5387d57f, 0x5387d57f, 0x929048c4, 0x929048c4, 0x929048c4, 0xb1f18ece, 0xb1f18ece, 0xb1f18ece, 0x19aacb03, 0x19aacb03, 0x19aacb03, 0x5387d57f, 0xc1e158bd, 0xc1e158bd, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3f3d9790, 0xa35395ab, 0x3f3d9790, 0x26e20c86, 0xf83ee7aa, 0xf83ee7aa, 0xf9737ced, 0xf9737ced, 0xf9737ced, 0x3d44f70c, 0x3d44f70c, 0x3d44f70c, 0xf25aa41e, 0xf25aa41e, 0xf25aa41e, 0xf83ee7aa, 0x26e20c86, 0x26e20c86, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x758a32e3, 0xdee0d5cb, 0x758a32e3, 0x96889a44, 0x724366e5, 0x724366e5, 0xb047ef22, 0xb047ef22, 0xb047ef22, 0x53b72744, 0x53b72744, 0x53b72744, 0xedf5b23c, 0xedf5b23c, 0xedf5b23c, 0x724366e5, 0x96889a44, 0x96889a44, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1dc9c0fa, 0x33ac9864, 0x1dc9c0fa, 0xa56c126a, 0x5387d57f, 0x5387d57f, 0xba18c4c3, 0xba18c4c3, 0xba18c4c3, 0x44cd9bca, 0x44cd9bca, 0x44cd9bca, 0x4c3502f9, 0x4c3502f9, 0x4c3502f9, 0x5387d57f, 0xa56c126a, 0xa56c126a, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd974fae3, 0x3ccb6dc6, 0xd974fae3, 0x9e6905b, 0xf83ee7aa, 0xf83ee7aa, 0xc06251ed, 0xc06251ed, 0xc06251ed, 0x8e340860, 0x8e340860, 0x8e340860, 0x64e873a9, 0x64e873a9, 0x64e873a9, 0xf83ee7aa, 0x9e6905b, 0x9e6905b, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xe1a82093, 0xb564e19c, 0xe1a82093, 0xb346ec15, 0x724366e5, 0x724366e5, 0x97406bcb, 0x97406bcb, 0x97406bcb, 0x56d97a21, 0x56d97a21, 0x56d97a21, 0xd28cf169, 0xd28cf169, 0xd28cf169, 0x724366e5, 0xb346ec15, 0xb346ec15, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xd60d9c2e, 0x8d9d3fca, 0xd60d9c2e, 0x233ce5a0, 0x1c955882, 0x1c955882, 0xf3109705, 0xf3109705, 0xf3109705, 0x714678b5, 0x714678b5, 0x714678b5, 0xbeaefdc9, 0xbeaefdc9, 0xbeaefdc9, 0x1c955882, 0x233ce5a0, 0x233ce5a0, 0x1c955882, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x8ae42c6c, 0xbf04c68c, 0x8ae42c6c, 0x864d1285, 0x4d266f7a, 0x4d266f7a, 0xdf5e9f05, 0xdf5e9f05, 0xdf5e9f05, 0x930bcc43, 0x930bcc43, 0x930bcc43, 0xb1aa7ebd, 0xb1aa7ebd, 0xb1aa7ebd, 0x4d266f7a, 0x864d1285, 0x864d1285, 0x4d266f7a, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xbb7bd38a, 0x76b75720, 0xbb7bd38a, 0x100fe388, 0x1ed9d731, 0x1ed9d731, 0x9dccb1ba, 0x9dccb1ba, 0x9dccb1ba, 0x29cdf132, 0x29cdf132, 0x29cdf132, 0x24e1ed71, 0x24e1ed71, 0x24e1ed71, 0x1ed9d731, 0x100fe388, 0x100fe388, 0x1ed9d731, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x97582aea, 0x106653a, 0x97582aea, 0x51457020, 0x9813a416, 0x9813a416, 0x6fbc18ae, 0x6fbc18ae, 0x6fbc18ae, 0x64491c01, 0x64491c01, 0x64491c01, 0x704bde98, 0x704bde98, 0x704bde98, 0x9813a416, 0x51457020, 0x51457020, 0x9813a416, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x964f65ea, 0x34ae6fb6, 0x964f65ea, 0x13c154da, 0x5fcf013d, 0x5fcf013d, 0xa4ebbaa6, 0xa4ebbaa6, 0xa4ebbaa6, 0x55a8bfbb, 0x55a8bfbb, 0x55a8bfbb, 0x1257bc3c, 0x1257bc3c, 0x1257bc3c, 0x5fcf013d, 0x13c154da, 0x13c154da, 0x5fcf013d, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x75e6834a, 0x28165e16, 0x75e6834a, 0x75ad9a21, 0xdd28f52b, 0xdd28f52b, 0x6ae4a429, 0x6ae4a429, 0x6ae4a429, 0x17f2e3ed, 0x17f2e3ed, 0x17f2e3ed, 0x74c03dc7, 0x74c03dc7, 0x74c03dc7, 0xdd28f52b, 0x75ad9a21, 0x75ad9a21, 0xdd28f52b, }, 20 }, - { "gfxterm_red", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5cf3c4a7, 0x94eb1d70, 0x5cf3c4a7, 0x5e6250e4, 0x59c36f00, 0x59c36f00, 0xd9b250a8, 0xd9b250a8, 0xd9b250a8, 0x85a0504a, 0x85a0504a, 0x85a0504a, 0xc0ec64d4, 0xc0ec64d4, 0xc0ec64d4, 0x59c36f00, 0x5e6250e4, 0x5e6250e4, 0x59c36f00, }, 20 }, - { "gfxterm_red", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xcf628ae2, 0xd8fd317b, 0xcf628ae2, 0x7b7418a9, 0xaa4593fe, 0xaa4593fe, 0x1f6005c4, 0x1f6005c4, 0x1f6005c4, 0xc5e7aaff, 0xc5e7aaff, 0xc5e7aaff, 0xf9ebbab6, 0xf9ebbab6, 0xf9ebbab6, 0xaa4593fe, 0x7b7418a9, 0x7b7418a9, 0xaa4593fe, }, 20 }, - { "gfxterm_red", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x7dd5389a, 0x916306b6, 0x7dd5389a, 0x6f3ea6a4, 0xc9cbf769, 0xc9cbf769, 0x38e2544b, 0x38e2544b, 0x38e2544b, 0xc0b7365, 0xc0b7365, 0xc0b7365, 0x2e6f1bee, 0x2e6f1bee, 0x2e6f1bee, 0xc9cbf769, 0x6f3ea6a4, 0x6f3ea6a4, 0xc9cbf769, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xaa0df0af, 0x5ffeda28, 0xaa0df0af, 0xd27f25fe, 0x9813a416, 0x9813a416, 0xe30e3d0b, 0xe30e3d0b, 0xe30e3d0b, 0xe8fb39a4, 0xe8fb39a4, 0xe8fb39a4, 0xfcf9fb3d, 0xfcf9fb3d, 0xfcf9fb3d, 0x9813a416, 0xd27f25fe, 0xd27f25fe, 0x9813a416, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xdb0cf5b5, 0x4c948c1, 0xdb0cf5b5, 0x67c135cd, 0x5fcf013d, 0x5fcf013d, 0xafc78d19, 0xafc78d19, 0xafc78d19, 0x5e848804, 0x5e848804, 0x5e848804, 0x197b8b83, 0x197b8b83, 0x197b8b83, 0x5fcf013d, 0x67c135cd, 0x67c135cd, 0x5fcf013d, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xa9bbe611, 0x46471f0a, 0xa9bbe611, 0xeca63699, 0xdd28f52b, 0xdd28f52b, 0x9bb2ba8d, 0x9bb2ba8d, 0x9bb2ba8d, 0xe6a4fd49, 0xe6a4fd49, 0xe6a4fd49, 0x85962363, 0x85962363, 0x85962363, 0xdd28f52b, 0xeca63699, 0xeca63699, 0xdd28f52b, }, 20 }, - { "gfxterm_red", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5cf3c4a7, 0x94eb1d70, 0x5cf3c4a7, 0x5e6250e4, 0x59c36f00, 0x59c36f00, 0xd9b250a8, 0xd9b250a8, 0xd9b250a8, 0x85a0504a, 0x85a0504a, 0x85a0504a, 0xc0ec64d4, 0xc0ec64d4, 0xc0ec64d4, 0x59c36f00, 0x5e6250e4, 0x5e6250e4, 0x59c36f00, }, 20 }, - { "gfxterm_red", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xcf628ae2, 0xd8fd317b, 0xcf628ae2, 0x7b7418a9, 0xaa4593fe, 0xaa4593fe, 0x1f6005c4, 0x1f6005c4, 0x1f6005c4, 0xc5e7aaff, 0xc5e7aaff, 0xc5e7aaff, 0xf9ebbab6, 0xf9ebbab6, 0xf9ebbab6, 0xaa4593fe, 0x7b7418a9, 0x7b7418a9, 0xaa4593fe, }, 20 }, - { "gfxterm_red", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x7dd5389a, 0x916306b6, 0x7dd5389a, 0x6f3ea6a4, 0xc9cbf769, 0xc9cbf769, 0x38e2544b, 0x38e2544b, 0x38e2544b, 0xc0b7365, 0xc0b7365, 0xc0b7365, 0x2e6f1bee, 0x2e6f1bee, 0x2e6f1bee, 0xc9cbf769, 0x6f3ea6a4, 0x6f3ea6a4, 0xc9cbf769, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xf7a6bbc0, 0xa71c6a6a, 0xf7a6bbc0, 0x2c00e54, 0x5387d57f, 0x5387d57f, 0x9a524c3, 0x9a524c3, 0x9a524c3, 0x2ac4e2c9, 0x2ac4e2c9, 0x2ac4e2c9, 0x829fa704, 0x829fa704, 0x829fa704, 0x5387d57f, 0x2c00e54, 0x2c00e54, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x336ec267, 0x367fad6f, 0x336ec267, 0xf645cfe7, 0xf83ee7aa, 0xf83ee7aa, 0xf286d882, 0xf286d882, 0xf286d882, 0x36b15363, 0x36b15363, 0x36b15363, 0xf9af0071, 0xf9af0071, 0xf9af0071, 0xf83ee7aa, 0xf645cfe7, 0xf645cfe7, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x2c87bcd6, 0x36e5ec5f, 0x2c87bcd6, 0xc87d72f9, 0x724366e5, 0x724366e5, 0x46a60453, 0x46a60453, 0x46a60453, 0xa556cc35, 0xa556cc35, 0xa556cc35, 0x1b14594d, 0x1b14594d, 0x1b14594d, 0x724366e5, 0xc87d72f9, 0xc87d72f9, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xf34510a5, 0x6bf8e58f, 0xf34510a5, 0xd44e115c, 0x5387d57f, 0x5387d57f, 0xf35640b5, 0xf35640b5, 0xf35640b5, 0xd831fbc, 0xd831fbc, 0xd831fbc, 0x57b868f, 0x57b868f, 0x57b868f, 0x5387d57f, 0xd44e115c, 0xd44e115c, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd50edb2e, 0xed2be670, 0xd50edb2e, 0xab5fbf82, 0xf83ee7aa, 0xf83ee7aa, 0x9d8f9101, 0x9d8f9101, 0x9d8f9101, 0xd3d9c88c, 0xd3d9c88c, 0xd3d9c88c, 0x3905b345, 0x3905b345, 0x3905b345, 0xf83ee7aa, 0xab5fbf82, 0xab5fbf82, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x12b2c01b, 0x838f2386, 0x12b2c01b, 0xcc209686, 0x724366e5, 0x724366e5, 0x2fc9378e, 0x2fc9378e, 0x2fc9378e, 0xee502664, 0xee502664, 0xee502664, 0x6a05ad2c, 0x6a05ad2c, 0x6a05ad2c, 0x724366e5, 0xcc209686, 0xcc209686, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xbd1e8fde, 0xe7baf68c, 0xbd1e8fde, 0xf81e08b0, 0x1c955882, 0x1c955882, 0xcf34908a, 0xcf34908a, 0xcf34908a, 0x4d627f3a, 0x4d627f3a, 0x4d627f3a, 0x828afa46, 0x828afa46, 0x828afa46, 0x1c955882, 0xf81e08b0, 0xf81e08b0, 0x1c955882, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xeacfb81e, 0x63c43df, 0xeacfb81e, 0xb7b61016, 0x4d266f7a, 0x4d266f7a, 0xe07e5e3f, 0xe07e5e3f, 0xe07e5e3f, 0xac2b0d79, 0xac2b0d79, 0xac2b0d79, 0x8e8abf87, 0x8e8abf87, 0x8e8abf87, 0x4d266f7a, 0xb7b61016, 0xb7b61016, 0x4d266f7a, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xfd37e5b2, 0xfe28c531, 0xfd37e5b2, 0xdbb7d339, 0x1ed9d731, 0x1ed9d731, 0x1976c7dc, 0x1976c7dc, 0x1976c7dc, 0xad778754, 0xad778754, 0xad778754, 0xa05b9b17, 0xa05b9b17, 0xa05b9b17, 0x1ed9d731, 0xdbb7d339, 0xdbb7d339, 0x1ed9d731, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x7e970e8f, 0x2e2ddf25, 0x7e970e8f, 0x2f4a6620, 0x5387d57f, 0x5387d57f, 0x3bb33ccf, 0x3bb33ccf, 0x3bb33ccf, 0x18d2fac5, 0x18d2fac5, 0x18d2fac5, 0xb089bf08, 0xb089bf08, 0xb089bf08, 0x5387d57f, 0x2f4a6620, 0x2f4a6620, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb8a2e5df, 0xbdb38ad7, 0xb8a2e5df, 0x8002db7c, 0xf83ee7aa, 0xf83ee7aa, 0xc1252296, 0xc1252296, 0xc1252296, 0x512a977, 0x512a977, 0x512a977, 0xca0cfa65, 0xca0cfa65, 0xca0cfa65, 0xf83ee7aa, 0x8002db7c, 0x8002db7c, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x9b5f3db9, 0x813d6d30, 0x9b5f3db9, 0x181c309c, 0x724366e5, 0x724366e5, 0x4b2cfbfc, 0x4b2cfbfc, 0x4b2cfbfc, 0xa8dc339a, 0xa8dc339a, 0xa8dc339a, 0x169ea6e2, 0x169ea6e2, 0x169ea6e2, 0x724366e5, 0x181c309c, 0x181c309c, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xe2b12f83, 0x7a0cdaa9, 0xe2b12f83, 0xaf70144a, 0x5387d57f, 0x5387d57f, 0xc2ca0f0b, 0xc2ca0f0b, 0xc2ca0f0b, 0x3c1f5002, 0x3c1f5002, 0x3c1f5002, 0x34e7c931, 0x34e7c931, 0x34e7c931, 0x5387d57f, 0xaf70144a, 0xaf70144a, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xcc7f1afa, 0xf45a27a4, 0xcc7f1afa, 0xed3bbe5b, 0xf83ee7aa, 0xf83ee7aa, 0xb7cca9d4, 0xb7cca9d4, 0xb7cca9d4, 0xf99af059, 0xf99af059, 0xf99af059, 0x13468b90, 0x13468b90, 0x13468b90, 0xf83ee7aa, 0xed3bbe5b, 0xed3bbe5b, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x5c3aa415, 0xcd074788, 0x5c3aa415, 0xc18dd60, 0x724366e5, 0x724366e5, 0x6b991528, 0x6b991528, 0x6b991528, 0xaa0004c2, 0xaa0004c2, 0xaa0004c2, 0x2e558f8a, 0x2e558f8a, 0x2e558f8a, 0x724366e5, 0xc18dd60, 0xc18dd60, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xa53a6439, 0xff9e1d6b, 0xa53a6439, 0x50714ec2, 0x1c955882, 0x1c955882, 0x4ad2fbd7, 0x4ad2fbd7, 0x4ad2fbd7, 0xc8841467, 0xc8841467, 0xc8841467, 0x76c911b, 0x76c911b, 0x76c911b, 0x1c955882, 0x50714ec2, 0x50714ec2, 0x1c955882, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xd93e9fad, 0x35cd646c, 0xd93e9fad, 0xb5499771, 0x4d266f7a, 0x4d266f7a, 0x65922dd6, 0x65922dd6, 0x65922dd6, 0x29c77e90, 0x29c77e90, 0x29c77e90, 0xb66cc6e, 0xb66cc6e, 0xb66cc6e, 0x4d266f7a, 0xb5499771, 0xb5499771, 0x4d266f7a, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd555d094, 0xd64af017, 0xd555d094, 0xffdaa0c9, 0x1ed9d731, 0x1ed9d731, 0x3538bf56, 0x3538bf56, 0x3538bf56, 0x8139ffde, 0x8139ffde, 0x8139ffde, 0x8c15e39d, 0x8c15e39d, 0x8c15e39d, 0x1ed9d731, 0xffdaa0c9, 0xffdaa0c9, 0x1ed9d731, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x579012d2, 0xa2633855, 0x579012d2, 0x1b8a22e1, 0x9813a416, 0x9813a416, 0x4e6d1775, 0x4e6d1775, 0x4e6d1775, 0x459813da, 0x459813da, 0x459813da, 0x519ad143, 0x519ad143, 0x519ad143, 0x9813a416, 0x1b8a22e1, 0x1b8a22e1, 0x9813a416, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xd0e01f27, 0xf25a253, 0xd0e01f27, 0x345a8b55, 0x5fcf013d, 0x5fcf013d, 0x7d7b66d1, 0x7d7b66d1, 0x7d7b66d1, 0x8c3863cc, 0x8c3863cc, 0x8c3863cc, 0xcbc7604b, 0xcbc7604b, 0xcbc7604b, 0x5fcf013d, 0x345a8b55, 0x345a8b55, 0x5fcf013d, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x8afabe5a, 0x65064741, 0x8afabe5a, 0xc2abbdb0, 0xdd28f52b, 0xdd28f52b, 0x762c541c, 0x762c541c, 0x762c541c, 0xb3a13d8, 0xb3a13d8, 0xb3a13d8, 0x6808cdf2, 0x6808cdf2, 0x6808cdf2, 0xdd28f52b, 0xc2abbdb0, 0xc2abbdb0, 0xdd28f52b, }, 20 }, - { "gfxterm_high", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7e8663fd, 0xb69eba2a, 0x7e8663fd, 0xf10bac5f, 0x59c36f00, 0x59c36f00, 0xcba09304, 0xcba09304, 0xcba09304, 0x97b293e6, 0x97b293e6, 0x97b293e6, 0xd2fea778, 0xd2fea778, 0xd2fea778, 0x59c36f00, 0xf10bac5f, 0xf10bac5f, 0x59c36f00, }, 20 }, - { "gfxterm_high", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x1dc170f, 0x1643ac96, 0x1dc170f, 0x218c75e1, 0xaa4593fe, 0xaa4593fe, 0xfda7eac8, 0xfda7eac8, 0xfda7eac8, 0x272045f3, 0x272045f3, 0x272045f3, 0x1b2c55ba, 0x1b2c55ba, 0x1b2c55ba, 0xaa4593fe, 0x218c75e1, 0x218c75e1, 0xaa4593fe, }, 20 }, - { "gfxterm_high", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xf8ec494, 0xe338fab8, 0xf8ec494, 0x78b294ad, 0xc9cbf769, 0xc9cbf769, 0x270340e6, 0x270340e6, 0x270340e6, 0x13ea67c8, 0x13ea67c8, 0x13ea67c8, 0x318e0f43, 0x318e0f43, 0x318e0f43, 0xc9cbf769, 0x78b294ad, 0x78b294ad, 0xc9cbf769, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x7c5fb1db, 0x89ac9b5c, 0x7c5fb1db, 0xd6bcbd37, 0x9813a416, 0x9813a416, 0x8c097a93, 0x8c097a93, 0x8c097a93, 0x87fc7e3c, 0x87fc7e3c, 0x87fc7e3c, 0x93febca5, 0x93febca5, 0x93febca5, 0x9813a416, 0xd6bcbd37, 0xd6bcbd37, 0x9813a416, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x2c17ec5e, 0xf3d2512a, 0x2c17ec5e, 0xc24c3b8e, 0x5fcf013d, 0x5fcf013d, 0xcacb7f18, 0xcacb7f18, 0xcacb7f18, 0x3b887a05, 0x3b887a05, 0x3b887a05, 0x7c777982, 0x7c777982, 0x7c777982, 0x5fcf013d, 0xc24c3b8e, 0xc24c3b8e, 0x5fcf013d, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x962fd585, 0x79d32c9e, 0x962fd585, 0x4acac797, 0xdd28f52b, 0xdd28f52b, 0x35beeea3, 0x35beeea3, 0x35beeea3, 0x48a8a967, 0x48a8a967, 0x48a8a967, 0x2b9a774d, 0x2b9a774d, 0x2b9a774d, 0xdd28f52b, 0x4acac797, 0x4acac797, 0xdd28f52b, }, 20 }, - { "gfxterm_high", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7e8663fd, 0xb69eba2a, 0x7e8663fd, 0xf10bac5f, 0x59c36f00, 0x59c36f00, 0xcba09304, 0xcba09304, 0xcba09304, 0x97b293e6, 0x97b293e6, 0x97b293e6, 0xd2fea778, 0xd2fea778, 0xd2fea778, 0x59c36f00, 0xf10bac5f, 0xf10bac5f, 0x59c36f00, }, 20 }, - { "gfxterm_high", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x1dc170f, 0x1643ac96, 0x1dc170f, 0x218c75e1, 0xaa4593fe, 0xaa4593fe, 0xfda7eac8, 0xfda7eac8, 0xfda7eac8, 0x272045f3, 0x272045f3, 0x272045f3, 0x1b2c55ba, 0x1b2c55ba, 0x1b2c55ba, 0xaa4593fe, 0x218c75e1, 0x218c75e1, 0xaa4593fe, }, 20 }, - { "gfxterm_high", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xf8ec494, 0xe338fab8, 0xf8ec494, 0x78b294ad, 0xc9cbf769, 0xc9cbf769, 0x270340e6, 0x270340e6, 0x270340e6, 0x13ea67c8, 0x13ea67c8, 0x13ea67c8, 0x318e0f43, 0x318e0f43, 0x318e0f43, 0xc9cbf769, 0x78b294ad, 0x78b294ad, 0xc9cbf769, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x451af230, 0x15a0239a, 0x451af230, 0x8fa4a0e3, 0x5387d57f, 0x5387d57f, 0x4e647c93, 0x4e647c93, 0x4e647c93, 0x6d05ba99, 0x6d05ba99, 0x6d05ba99, 0xc55eff54, 0xc55eff54, 0xc55eff54, 0x5387d57f, 0x8fa4a0e3, 0x8fa4a0e3, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x626e4125, 0x677f2e2d, 0x626e4125, 0x1739712c, 0xf83ee7aa, 0xf83ee7aa, 0xf25c3281, 0xf25c3281, 0xf25c3281, 0x366bb960, 0x366bb960, 0x366bb960, 0xf975ea72, 0xf975ea72, 0xf975ea72, 0xf83ee7aa, 0x1739712c, 0x1739712c, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x24d014be, 0x3eb24437, 0x24d014be, 0xa4cf9a3c, 0x724366e5, 0x724366e5, 0x10d1a394, 0x10d1a394, 0x10d1a394, 0xf3216bf2, 0xf3216bf2, 0xf3216bf2, 0x4d63fe8a, 0x4d63fe8a, 0x4d63fe8a, 0x724366e5, 0xa4cf9a3c, 0xa4cf9a3c, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xfc4a546f, 0x64f7a145, 0xfc4a546f, 0xf9e32ee9, 0x5387d57f, 0x5387d57f, 0x4bd38a03, 0x4bd38a03, 0x4bd38a03, 0xb506d50a, 0xb506d50a, 0xb506d50a, 0xbdfe4c39, 0xbdfe4c39, 0xbdfe4c39, 0x5387d57f, 0xf9e32ee9, 0xf9e32ee9, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd61baafd, 0xee3e97a3, 0xd61baafd, 0x8ee7986d, 0xf83ee7aa, 0xf83ee7aa, 0x63d64c93, 0x63d64c93, 0x63d64c93, 0x2d80151e, 0x2d80151e, 0x2d80151e, 0xc75c6ed7, 0xc75c6ed7, 0xc75c6ed7, 0xf83ee7aa, 0x8ee7986d, 0x8ee7986d, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x6822467e, 0xf91fa5e3, 0x6822467e, 0xc7c3650b, 0x724366e5, 0x724366e5, 0xe0762c40, 0xe0762c40, 0xe0762c40, 0x21ef3daa, 0x21ef3daa, 0x21ef3daa, 0xa5bab6e2, 0xa5bab6e2, 0xa5bab6e2, 0x724366e5, 0xc7c3650b, 0xc7c3650b, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x50ace7c2, 0xa089e90, 0x50ace7c2, 0x1a5ebad4, 0x1c955882, 0x1c955882, 0x97519c3a, 0x97519c3a, 0x97519c3a, 0x1507738a, 0x1507738a, 0x1507738a, 0xdaeff6f6, 0xdaeff6f6, 0xdaeff6f6, 0x1c955882, 0x1a5ebad4, 0x1a5ebad4, 0x1c955882, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x179140a7, 0xfb62bb66, 0x179140a7, 0xf545d06d, 0x4d266f7a, 0x4d266f7a, 0x2d145f78, 0x2d145f78, 0x2d145f78, 0x61410c3e, 0x61410c3e, 0x61410c3e, 0x43e0bec0, 0x43e0bec0, 0x43e0bec0, 0x4d266f7a, 0xf545d06d, 0xf545d06d, 0x4d266f7a, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x679bf29f, 0x6484d21c, 0x679bf29f, 0x653f204e, 0x1ed9d731, 0x1ed9d731, 0xa1c3fdf0, 0xa1c3fdf0, 0xa1c3fdf0, 0x15c2bd78, 0x15c2bd78, 0x15c2bd78, 0x18eea13b, 0x18eea13b, 0x18eea13b, 0x1ed9d731, 0x653f204e, 0x653f204e, 0x1ed9d731, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x4fce7a63, 0x1f74abc9, 0x4fce7a63, 0x21cbf58b, 0x5387d57f, 0x5387d57f, 0x4e647c93, 0x4e647c93, 0x4e647c93, 0x6d05ba99, 0x6d05ba99, 0x6d05ba99, 0xc55eff54, 0xc55eff54, 0xc55eff54, 0x5387d57f, 0x21cbf58b, 0x21cbf58b, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc49c3074, 0xc18d5f7c, 0xc49c3074, 0x4c40335e, 0xf83ee7aa, 0xf83ee7aa, 0xf25c3281, 0xf25c3281, 0xf25c3281, 0x366bb960, 0x366bb960, 0x366bb960, 0xf975ea72, 0xf975ea72, 0xf975ea72, 0xf83ee7aa, 0x4c40335e, 0x4c40335e, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x877bea63, 0x9d19baea, 0x877bea63, 0x60dda7eb, 0x724366e5, 0x724366e5, 0x10d1a394, 0x10d1a394, 0x10d1a394, 0xf3216bf2, 0xf3216bf2, 0xf3216bf2, 0x4d63fe8a, 0x4d63fe8a, 0x4d63fe8a, 0x724366e5, 0x60dda7eb, 0x60dda7eb, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xadddaf19, 0x35605a33, 0xadddaf19, 0xc2beefaf, 0x5387d57f, 0x5387d57f, 0x4bd38a03, 0x4bd38a03, 0x4bd38a03, 0xb506d50a, 0xb506d50a, 0xb506d50a, 0xbdfe4c39, 0xbdfe4c39, 0xbdfe4c39, 0x5387d57f, 0xc2beefaf, 0xc2beefaf, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x44a04df, 0x3c6f3981, 0x44a04df, 0x3a3f642, 0xf83ee7aa, 0xf83ee7aa, 0x63d64c93, 0x63d64c93, 0x63d64c93, 0x2d80151e, 0x2d80151e, 0x2d80151e, 0xc75c6ed7, 0xc75c6ed7, 0xc75c6ed7, 0xf83ee7aa, 0x3a3f642, 0x3a3f642, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xb9287527, 0x281596ba, 0xb9287527, 0x987979ba, 0x724366e5, 0x724366e5, 0xe0762c40, 0xe0762c40, 0xe0762c40, 0x21ef3daa, 0x21ef3daa, 0x21ef3daa, 0xa5bab6e2, 0xa5bab6e2, 0xa5bab6e2, 0x724366e5, 0x987979ba, 0x987979ba, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x63bc909f, 0x3918e9cd, 0x63bc909f, 0x9905601c, 0x1c955882, 0x1c955882, 0x97519c3a, 0x97519c3a, 0x97519c3a, 0x1507738a, 0x1507738a, 0x1507738a, 0xdaeff6f6, 0xdaeff6f6, 0xdaeff6f6, 0x1c955882, 0x9905601c, 0x9905601c, 0x1c955882, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x134e846f, 0xffbd7fae, 0x134e846f, 0xc094b471, 0x4d266f7a, 0x4d266f7a, 0x2d145f78, 0x2d145f78, 0x2d145f78, 0x61410c3e, 0x61410c3e, 0x61410c3e, 0x43e0bec0, 0x43e0bec0, 0x43e0bec0, 0x4d266f7a, 0xc094b471, 0xc094b471, 0x4d266f7a, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd9dd0da7, 0xdac22d24, 0xd9dd0da7, 0xd77699a0, 0x1ed9d731, 0x1ed9d731, 0xa1c3fdf0, 0xa1c3fdf0, 0xa1c3fdf0, 0x15c2bd78, 0x15c2bd78, 0x15c2bd78, 0x18eea13b, 0x18eea13b, 0x18eea13b, 0x1ed9d731, 0xd77699a0, 0xd77699a0, 0x1ed9d731, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x6bb5fb50, 0x9e46d1d7, 0x6bb5fb50, 0xf53e12de, 0x9813a416, 0x9813a416, 0x8c097a93, 0x8c097a93, 0x8c097a93, 0x87fc7e3c, 0x87fc7e3c, 0x87fc7e3c, 0x93febca5, 0x93febca5, 0x93febca5, 0x9813a416, 0xf53e12de, 0xf53e12de, 0x9813a416, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb2497aec, 0x6d8cc798, 0xb2497aec, 0x465f936, 0x5fcf013d, 0x5fcf013d, 0xcacb7f18, 0xcacb7f18, 0xcacb7f18, 0x3b887a05, 0x3b887a05, 0x3b887a05, 0x7c777982, 0x7c777982, 0x7c777982, 0x5fcf013d, 0x465f936, 0x465f936, 0x5fcf013d, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x404f2a96, 0xafb3d38d, 0x404f2a96, 0x91e6ebe6, 0xdd28f52b, 0xdd28f52b, 0x35beeea3, 0x35beeea3, 0x35beeea3, 0x48a8a967, 0x48a8a967, 0x48a8a967, 0x2b9a774d, 0x2b9a774d, 0x2b9a774d, 0xdd28f52b, 0x91e6ebe6, 0x91e6ebe6, 0xdd28f52b, }, 20 }, + { "cmdline_cat", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7dbff368, 0x7dbff368, 0x5a5bdc8d, 0x5a5bdc8d, 0x79753177, 0x79753177, 0xd01ede5b, 0xd01ede5b, 0x13708a73, 0x13708a73, 0x90186de3, 0x90186de3, 0xe63d02a2, 0xe63d02a2, 0x2c9dc262, 0x2c9dc262, 0x3eebd7b, 0x3eebd7b, 0xe8f3a5d8, 0xe8f3a5d8, 0xd38ecfe3, 0xd38ecfe3, 0x51878485, 0x51878485, 0xcbdb6d67, 0xcbdb6d67, 0xca25582, 0xca25582, 0x5bea0484, 0x5bea0484, 0x9ec5f71d, 0x9ec5f71d, 0x3f0bd7bc, 0x3f0bd7bc, 0xdbb0a5d2, 0xdbb0a5d2, 0xea710e2f, 0xea710e2f, 0xd14933fe, 0xd14933fe, 0x4906b783, 0xad94ffeb, 0xf31c9259, 0xf31c9259, }, 45 }, + { "cmdline_cat", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xfeea303f, 0xfeea303f, 0x9a6d5200, 0x9a6d5200, 0x784f6e43, 0x784f6e43, 0xc3973f40, 0xc3973f40, 0x954a7cb1, 0x954a7cb1, 0x8b7c607f, 0x8b7c607f, 0x290bf4b3, 0x290bf4b3, 0x5d67148d, 0x5d67148d, 0x37008df4, 0x37008df4, 0xce9d51c7, 0xce9d51c7, 0xe29b4663, 0xe29b4663, 0xefb7cd59, 0xefb7cd59, 0xe12cc621, 0xe12cc621, 0xd6d4461f, 0xd6d4461f, 0x4d4490ef, 0x4d4490ef, 0x6ce4a360, 0x6ce4a360, 0x812e6359, 0x812e6359, 0xe2f82bc9, 0xe2f82bc9, 0x9621917d, 0x9621917d, 0xbbe37c69, 0xbbe37c69, 0x719d9b99, 0xe95c1cc3, 0xe0476ad0, 0xe0476ad0, }, 45 }, + { "cmdline_cat", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x50b82239, 0x50b82239, 0x82c36c12, 0x82c36c12, 0x6311208d, 0x6311208d, 0x816bd4b3, 0x816bd4b3, 0xc9281fd0, 0xc9281fd0, 0x75767bac, 0x75767bac, 0x52edeac, 0x52edeac, 0xfdb551f7, 0xfdb551f7, 0xba21cd3, 0xba21cd3, 0xf2b3468a, 0xf2b3468a, 0xd5560323, 0xd5560323, 0x12c650f6, 0x12c650f6, 0x3d6c5861, 0x3d6c5861, 0x50062423, 0x50062423, 0x2ce22983, 0x2ce22983, 0x4996bc4d, 0x4996bc4d, 0x50450525, 0x50450525, 0xe1c94312, 0xe1c94312, 0x21224aac, 0x21224aac, 0x94cbe214, 0x94cbe214, 0x4578c664, 0xcb360887, 0x5a749f1d, 0x5a749f1d, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x93fbd3a3, 0x93fbd3a3, 0x1617bee0, 0x1617bee0, 0x4bfbae7f, 0x4bfbae7f, 0xa3558248, 0xa3558248, 0xaf468a11, 0xaf468a11, 0x68ac5986, 0x68ac5986, 0xd8065600, 0xd8065600, 0xef6c6222, 0xef6c6222, 0x1a04371, 0x1a04371, 0xc92981b6, 0xc92981b6, 0x53f9bfc8, 0x53f9bfc8, 0xfef01300, 0xfef01300, 0xce753805, 0xce753805, 0x858f6540, 0x858f6540, 0x6429dae4, 0x6429dae4, 0x19222aa5, 0x19222aa5, 0x3f9a0303, 0x3f9a0303, 0x978a47da, 0x978a47da, 0x6bf7f199, 0x6bf7f199, 0x97dab6d, 0x97dab6d, 0xeb643dbd, 0x550f5f8f, 0xe193f4d2, 0xe193f4d2, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x76ccc774, 0x76ccc774, 0x98fe3b7, 0x98fe3b7, 0xca4fb383, 0xca4fb383, 0x7c96c0b0, 0x7c96c0b0, 0x2e247de1, 0x2e247de1, 0x13eba5d3, 0x13eba5d3, 0xb8eee962, 0xb8eee962, 0xc9e8c791, 0xc9e8c791, 0x42ab69c2, 0x42ab69c2, 0x564457bc, 0x564457bc, 0xcb44a632, 0xcb44a632, 0x9f213022, 0x9f213022, 0xc0a90c8a, 0xc0a90c8a, 0x501e7270, 0x501e7270, 0x1f3d02b1, 0x1f3d02b1, 0x384f7a25, 0x384f7a25, 0xd927326, 0xd927326, 0xd53f190e, 0xd53f190e, 0x14580b31, 0x14580b31, 0xab958892, 0xab958892, 0xea73f407, 0xb83e8860, 0xd809749b, 0xd809749b, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xccbd401, 0xccbd401, 0x35859629, 0x35859629, 0x269f013b, 0x269f013b, 0xe8c8196, 0xe8c8196, 0x95e2849c, 0x95e2849c, 0xb2019543, 0xb2019543, 0xf739b6c9, 0xf739b6c9, 0xd8227519, 0xd8227519, 0x6b1ae8cf, 0x6b1ae8cf, 0x84fbe9b2, 0x84fbe9b2, 0xed69a305, 0xed69a305, 0x15f4f0cf, 0x15f4f0cf, 0x57ce0973, 0x57ce0973, 0x3f5b0b97, 0x3f5b0b97, 0xc3e87bef, 0xc3e87bef, 0x3ac7584b, 0x3ac7584b, 0xdb95f2c7, 0xdb95f2c7, 0xc1942d4c, 0xc1942d4c, 0x17e9634e, 0x17e9634e, 0xd8dd41a3, 0xd8dd41a3, 0x927a8a2f, 0x93601438, 0x99734c52, 0x99734c52, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa06498a0, 0xa06498a0, 0xd1336ad7, 0xd1336ad7, 0x68c888e0, 0x68c888e0, 0xf01fb74, 0xf01fb74, 0x6b743235, 0x6b743235, 0xe7b71a49, 0xe7b71a49, 0x798da4d7, 0x798da4d7, 0x5398f44b, 0x5398f44b, 0x4794ee5e, 0x4794ee5e, 0x61c2cb0d, 0x61c2cb0d, 0xad3fcef3, 0xad3fcef3, 0xd9b6f291, 0xd9b6f291, 0xbaf0962d, 0xbaf0962d, 0x11848b9e, 0x11848b9e, 0xb8f3d2bf, 0xb8f3d2bf, 0x3f9978, 0x3f9978, 0xafd76c24, 0xafd76c24, 0xee0b9b9e, 0xee0b9b9e, 0x1f80451e, 0x1f80451e, 0x817e030a, 0x817e030a, 0x64ee9a5d, 0x30cb16a0, 0x9f133607, 0x9f133607, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8004336f, 0x8004336f, 0xad06caa7, 0xad06caa7, 0xe5239f6d, 0xe5239f6d, 0xd1a80f62, 0xd1a80f62, 0x9b64514c, 0x9b64514c, 0xd21e6b10, 0xd21e6b10, 0x7ab967ae, 0x7ab967ae, 0x7d706a4a, 0x7d706a4a, 0xf2b0f702, 0xf2b0f702, 0x9696e0f7, 0x9696e0f7, 0x77e0f417, 0x77e0f417, 0xf45e418d, 0xf45e418d, 0x2e5b6a0a, 0x2e5b6a0a, 0x1be1c567, 0x1be1c567, 0xf8c9e2fa, 0xf8c9e2fa, 0xd574e688, 0xd574e688, 0x3092ce78, 0x3092ce78, 0x265dd1a4, 0x265dd1a4, 0x62543ca1, 0x62543ca1, 0xcabbab6d, 0xcabbab6d, 0xc600820f, 0xd923e667, 0xafaf4e69, 0xafaf4e69, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x698515fa, 0x698515fa, 0xc313ebe6, 0xc313ebe6, 0x32b9228f, 0x32b9228f, 0xa58d78e8, 0xa58d78e8, 0xf41d5153, 0xf41d5153, 0xdfa3af16, 0xdfa3af16, 0xd4a68422, 0xd4a68422, 0xa7ea67e0, 0xa7ea67e0, 0xaee4c8f6, 0xaee4c8f6, 0x78ddd8aa, 0x78ddd8aa, 0xe662b827, 0xe662b827, 0x190ab892, 0x190ab892, 0x7c1e04ab, 0x7c1e04ab, 0xae4e2ed2, 0xae4e2ed2, 0x9ac52f8d, 0x9ac52f8d, 0x7e7b6776, 0x7e7b6776, 0x21c37700, 0x21c37700, 0x4fc11e7c, 0x4fc11e7c, 0x612a17d, 0x612a17d, 0x1f549440, 0x1f549440, 0xd6ce5af0, 0x224035b9, 0x44f3a671, 0x44f3a671, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x7a06e04b, 0x7a06e04b, 0x122f59ab, 0x122f59ab, 0x993a50b9, 0x993a50b9, 0x5545f8f, 0x5545f8f, 0xcdd2b587, 0xcdd2b587, 0x18bec138, 0x18bec138, 0xa9b4345d, 0xa9b4345d, 0x92c6eb1c, 0x92c6eb1c, 0x2aa44d63, 0x2aa44d63, 0xc9e7b549, 0xc9e7b549, 0x24732d85, 0x24732d85, 0xeedce06, 0xeedce06, 0x69a732a1, 0x69a732a1, 0xc53906e5, 0xc53906e5, 0x306e0f4b, 0x306e0f4b, 0x895e6f09, 0x895e6f09, 0x27f1c24e, 0x27f1c24e, 0x76a2b606, 0x76a2b606, 0x9fdd1ff3, 0x9fdd1ff3, 0x408d0a19, 0x408d0a19, 0xc9b3f877, 0xc61012d1, 0x84f4c7c7, 0x84f4c7c7, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xc75a4c6f, 0xc75a4c6f, 0xf155d437, 0xf155d437, 0x5c0c9c6d, 0x5c0c9c6d, 0x32b70f0b, 0x32b70f0b, 0x15b49b81, 0x15b49b81, 0xe0ac73bd, 0xe0ac73bd, 0xc1f20b9b, 0xc1f20b9b, 0xf123f819, 0xf123f819, 0xb9d31c70, 0xb9d31c70, 0x1af8bb11, 0x1af8bb11, 0xde51611e, 0xde51611e, 0x555bf1a9, 0x555bf1a9, 0x7fc1c1ac, 0x7fc1c1ac, 0x10f80e90, 0x10f80e90, 0xdf2c47d, 0xdf2c47d, 0x2b0b3367, 0x2b0b3367, 0x10e958fb, 0x10e958fb, 0x84fa0fc1, 0x84fa0fc1, 0x17e0c3af, 0x17e0c3af, 0xfb8ccf09, 0xfb8ccf09, 0xcb360cda, 0xc99cbad4, 0x83b5c166, 0x83b5c166, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x7d9b5dd7, 0x7d9b5dd7, 0x42e1176a, 0x42e1176a, 0x7e2da576, 0x7e2da576, 0xd5a8afa, 0xd5a8afa, 0x3eb2146b, 0x3eb2146b, 0x60d9b3, 0x60d9b3, 0xb893f5ca, 0xb893f5ca, 0xd431b2bf, 0xd431b2bf, 0x8ea1b6a6, 0x8ea1b6a6, 0x4d730ad0, 0x4d730ad0, 0x28d1888b, 0x28d1888b, 0x6d8c3672, 0x6d8c3672, 0x65dec2dd, 0x65dec2dd, 0x9d7c6d99, 0x9d7c6d99, 0xdfcd1eba, 0xdfcd1eba, 0xed4fb650, 0xed4fb650, 0xd9f1574c, 0xd9f1574c, 0x2b05a17e, 0x2b05a17e, 0x64e652f5, 0x64e652f5, 0x5f83fdb1, 0x5f83fdb1, 0x7918b180, 0xa6808ee8, 0xb1a2407c, 0xb1a2407c, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x93fbd3a3, 0x93fbd3a3, 0x1617bee0, 0x1617bee0, 0x4bfbae7f, 0x4bfbae7f, 0xa3558248, 0xa3558248, 0xaf468a11, 0xaf468a11, 0x68ac5986, 0x68ac5986, 0xd8065600, 0xd8065600, 0xef6c6222, 0xef6c6222, 0x1a04371, 0x1a04371, 0xc92981b6, 0xc92981b6, 0x53f9bfc8, 0x53f9bfc8, 0xfef01300, 0xfef01300, 0xce753805, 0xce753805, 0x858f6540, 0x858f6540, 0x6429dae4, 0x6429dae4, 0x19222aa5, 0x19222aa5, 0x3f9a0303, 0x3f9a0303, 0x978a47da, 0x978a47da, 0x6bf7f199, 0x6bf7f199, 0x97dab6d, 0x97dab6d, 0xeb643dbd, 0x550f5f8f, 0xe193f4d2, 0xe193f4d2, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x76ccc774, 0x76ccc774, 0x98fe3b7, 0x98fe3b7, 0xca4fb383, 0xca4fb383, 0x7c96c0b0, 0x7c96c0b0, 0x2e247de1, 0x2e247de1, 0x13eba5d3, 0x13eba5d3, 0xb8eee962, 0xb8eee962, 0xc9e8c791, 0xc9e8c791, 0x42ab69c2, 0x42ab69c2, 0x564457bc, 0x564457bc, 0xcb44a632, 0xcb44a632, 0x9f213022, 0x9f213022, 0xc0a90c8a, 0xc0a90c8a, 0x501e7270, 0x501e7270, 0x1f3d02b1, 0x1f3d02b1, 0x384f7a25, 0x384f7a25, 0xd927326, 0xd927326, 0xd53f190e, 0xd53f190e, 0x14580b31, 0x14580b31, 0xab958892, 0xab958892, 0xea73f407, 0xb83e8860, 0xd809749b, 0xd809749b, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xccbd401, 0xccbd401, 0x35859629, 0x35859629, 0x269f013b, 0x269f013b, 0xe8c8196, 0xe8c8196, 0x95e2849c, 0x95e2849c, 0xb2019543, 0xb2019543, 0xf739b6c9, 0xf739b6c9, 0xd8227519, 0xd8227519, 0x6b1ae8cf, 0x6b1ae8cf, 0x84fbe9b2, 0x84fbe9b2, 0xed69a305, 0xed69a305, 0x15f4f0cf, 0x15f4f0cf, 0x57ce0973, 0x57ce0973, 0x3f5b0b97, 0x3f5b0b97, 0xc3e87bef, 0xc3e87bef, 0x3ac7584b, 0x3ac7584b, 0xdb95f2c7, 0xdb95f2c7, 0xc1942d4c, 0xc1942d4c, 0x17e9634e, 0x17e9634e, 0xd8dd41a3, 0xd8dd41a3, 0x927a8a2f, 0x93601438, 0x99734c52, 0x99734c52, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa06498a0, 0xa06498a0, 0xd1336ad7, 0xd1336ad7, 0x68c888e0, 0x68c888e0, 0xf01fb74, 0xf01fb74, 0x6b743235, 0x6b743235, 0xe7b71a49, 0xe7b71a49, 0x798da4d7, 0x798da4d7, 0x5398f44b, 0x5398f44b, 0x4794ee5e, 0x4794ee5e, 0x61c2cb0d, 0x61c2cb0d, 0xad3fcef3, 0xad3fcef3, 0xd9b6f291, 0xd9b6f291, 0xbaf0962d, 0xbaf0962d, 0x11848b9e, 0x11848b9e, 0xb8f3d2bf, 0xb8f3d2bf, 0x3f9978, 0x3f9978, 0xafd76c24, 0xafd76c24, 0xee0b9b9e, 0xee0b9b9e, 0x1f80451e, 0x1f80451e, 0x817e030a, 0x817e030a, 0x64ee9a5d, 0x30cb16a0, 0x9f133607, 0x9f133607, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8004336f, 0x8004336f, 0xad06caa7, 0xad06caa7, 0xe5239f6d, 0xe5239f6d, 0xd1a80f62, 0xd1a80f62, 0x9b64514c, 0x9b64514c, 0xd21e6b10, 0xd21e6b10, 0x7ab967ae, 0x7ab967ae, 0x7d706a4a, 0x7d706a4a, 0xf2b0f702, 0xf2b0f702, 0x9696e0f7, 0x9696e0f7, 0x77e0f417, 0x77e0f417, 0xf45e418d, 0xf45e418d, 0x2e5b6a0a, 0x2e5b6a0a, 0x1be1c567, 0x1be1c567, 0xf8c9e2fa, 0xf8c9e2fa, 0xd574e688, 0xd574e688, 0x3092ce78, 0x3092ce78, 0x265dd1a4, 0x265dd1a4, 0x62543ca1, 0x62543ca1, 0xcabbab6d, 0xcabbab6d, 0xc600820f, 0xd923e667, 0xafaf4e69, 0xafaf4e69, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x698515fa, 0x698515fa, 0xc313ebe6, 0xc313ebe6, 0x32b9228f, 0x32b9228f, 0xa58d78e8, 0xa58d78e8, 0xf41d5153, 0xf41d5153, 0xdfa3af16, 0xdfa3af16, 0xd4a68422, 0xd4a68422, 0xa7ea67e0, 0xa7ea67e0, 0xaee4c8f6, 0xaee4c8f6, 0x78ddd8aa, 0x78ddd8aa, 0xe662b827, 0xe662b827, 0x190ab892, 0x190ab892, 0x7c1e04ab, 0x7c1e04ab, 0xae4e2ed2, 0xae4e2ed2, 0x9ac52f8d, 0x9ac52f8d, 0x7e7b6776, 0x7e7b6776, 0x21c37700, 0x21c37700, 0x4fc11e7c, 0x4fc11e7c, 0x612a17d, 0x612a17d, 0x1f549440, 0x1f549440, 0xd6ce5af0, 0x224035b9, 0x44f3a671, 0x44f3a671, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x7a06e04b, 0x7a06e04b, 0x122f59ab, 0x122f59ab, 0x993a50b9, 0x993a50b9, 0x5545f8f, 0x5545f8f, 0xcdd2b587, 0xcdd2b587, 0x18bec138, 0x18bec138, 0xa9b4345d, 0xa9b4345d, 0x92c6eb1c, 0x92c6eb1c, 0x2aa44d63, 0x2aa44d63, 0xc9e7b549, 0xc9e7b549, 0x24732d85, 0x24732d85, 0xeedce06, 0xeedce06, 0x69a732a1, 0x69a732a1, 0xc53906e5, 0xc53906e5, 0x306e0f4b, 0x306e0f4b, 0x895e6f09, 0x895e6f09, 0x27f1c24e, 0x27f1c24e, 0x76a2b606, 0x76a2b606, 0x9fdd1ff3, 0x9fdd1ff3, 0x408d0a19, 0x408d0a19, 0xc9b3f877, 0xc61012d1, 0x84f4c7c7, 0x84f4c7c7, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xc75a4c6f, 0xc75a4c6f, 0xf155d437, 0xf155d437, 0x5c0c9c6d, 0x5c0c9c6d, 0x32b70f0b, 0x32b70f0b, 0x15b49b81, 0x15b49b81, 0xe0ac73bd, 0xe0ac73bd, 0xc1f20b9b, 0xc1f20b9b, 0xf123f819, 0xf123f819, 0xb9d31c70, 0xb9d31c70, 0x1af8bb11, 0x1af8bb11, 0xde51611e, 0xde51611e, 0x555bf1a9, 0x555bf1a9, 0x7fc1c1ac, 0x7fc1c1ac, 0x10f80e90, 0x10f80e90, 0xdf2c47d, 0xdf2c47d, 0x2b0b3367, 0x2b0b3367, 0x10e958fb, 0x10e958fb, 0x84fa0fc1, 0x84fa0fc1, 0x17e0c3af, 0x17e0c3af, 0xfb8ccf09, 0xfb8ccf09, 0xcb360cda, 0xc99cbad4, 0x83b5c166, 0x83b5c166, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x7d9b5dd7, 0x7d9b5dd7, 0x42e1176a, 0x42e1176a, 0x7e2da576, 0x7e2da576, 0xd5a8afa, 0xd5a8afa, 0x3eb2146b, 0x3eb2146b, 0x60d9b3, 0x60d9b3, 0xb893f5ca, 0xb893f5ca, 0xd431b2bf, 0xd431b2bf, 0x8ea1b6a6, 0x8ea1b6a6, 0x4d730ad0, 0x4d730ad0, 0x28d1888b, 0x28d1888b, 0x6d8c3672, 0x6d8c3672, 0x65dec2dd, 0x65dec2dd, 0x9d7c6d99, 0x9d7c6d99, 0xdfcd1eba, 0xdfcd1eba, 0xed4fb650, 0xed4fb650, 0xd9f1574c, 0xd9f1574c, 0x2b05a17e, 0x2b05a17e, 0x64e652f5, 0x64e652f5, 0x5f83fdb1, 0x5f83fdb1, 0x7918b180, 0xa6808ee8, 0xb1a2407c, 0xb1a2407c, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xbb687653, 0xbb687653, 0xa81427a7, 0xa81427a7, 0x71d7f3b, 0x71d7f3b, 0x25fea6ca, 0x25fea6ca, 0x17c19d74, 0x17c19d74, 0x4779bf48, 0x4779bf48, 0xe424e759, 0xe424e759, 0xb57fb5ae, 0xb57fb5ae, 0xd877002b, 0xd877002b, 0xdd8d7442, 0xdd8d7442, 0xe2536fde, 0xe2536fde, 0x1ebba341, 0x1ebba341, 0xef042176, 0xef042176, 0x6137f228, 0x6137f228, 0xf04a8558, 0xf04a8558, 0xff72172d, 0xff72172d, 0x5f26278f, 0x5f26278f, 0x3ed777c, 0x3ed777c, 0xb1d686e, 0xb1d686e, 0x5cead249, 0x5cead249, 0x271487f6, 0x3b9ece9a, 0xccc3db5e, 0xccc3db5e, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xd594219a, 0xd594219a, 0x254fa44c, 0x254fa44c, 0x30177d61, 0x30177d61, 0x1a576e20, 0x1a576e20, 0xe439395f, 0xe439395f, 0xb289a26f, 0xb289a26f, 0xc9eaceca, 0xc9eaceca, 0x9e76037b, 0x9e76037b, 0xfa098eb4, 0xfa098eb4, 0x5881d993, 0x5881d993, 0x3a4ac117, 0x3a4ac117, 0x203e9716, 0x203e9716, 0x67aed713, 0x67aed713, 0xb740eccb, 0xb740eccb, 0xd50247da, 0xd50247da, 0xe0c382bf, 0xe0c382bf, 0x95d81f9d, 0x95d81f9d, 0x1051b5ac, 0x1051b5ac, 0x71f00e30, 0x71f00e30, 0xe35fe082, 0xe35fe082, 0xeda25a7a, 0xc4543b1e, 0x4725b91c, 0x4725b91c, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd803b53b, 0xd803b53b, 0x70b7ae8b, 0x70b7ae8b, 0xa20d9a15, 0xa20d9a15, 0x6113d33b, 0x6113d33b, 0xfd38d301, 0xfd38d301, 0x8b04db4, 0x8b04db4, 0xdae859df, 0xdae859df, 0x80cf138b, 0x80cf138b, 0xdfa6ef9, 0xdfa6ef9, 0x856adaf0, 0x856adaf0, 0x7023cc2d, 0x7023cc2d, 0xad7e7d54, 0xad7e7d54, 0xde8eff49, 0xde8eff49, 0x34355cc3, 0x34355cc3, 0x25adccda, 0x25adccda, 0x6d6c350d, 0x6d6c350d, 0x1c49b499, 0x1c49b499, 0x8188f1b4, 0x8188f1b4, 0x5556dc0c, 0x5556dc0c, 0xbd9ef1f5, 0xbd9ef1f5, 0x5176575b, 0xd3e2f7f1, 0xccda996c, 0xccda996c, }, 45 }, + { "gfxterm_menu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x25243020, 0xed3ce9f7, 0x25243020, 0xd57a2224, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd57a2224, 0xd57a2224, 0x59c36f00, }, 20 }, + { "gfxterm_menu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x9e32a220, 0x89ad19b9, 0x9e32a220, 0x795f1aca, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x795f1aca, 0x795f1aca, 0xaa4593fe, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x11e11a4c, 0xfd572460, 0x11e11a4c, 0x198b75, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x198b75, 0x198b75, 0xc9cbf769, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x9a418b1d, 0x6fb2a19a, 0x9a418b1d, 0x3c3e7993, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x3c3e7993, 0x3c3e7993, 0x9813a416, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x66cb2267, 0xb90e9f13, 0x66cb2267, 0x79874749, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x79874749, 0x79874749, 0x5fcf013d, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd3d2838d, 0x3c2e7a96, 0xd3d2838d, 0x993b0962, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x993b0962, 0x993b0962, 0xdd28f52b, }, 20 }, + { "gfxterm_menu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x25243020, 0xed3ce9f7, 0x25243020, 0xd57a2224, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd57a2224, 0xd57a2224, 0x59c36f00, }, 20 }, + { "gfxterm_menu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x9e32a220, 0x89ad19b9, 0x9e32a220, 0x795f1aca, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x795f1aca, 0x795f1aca, 0xaa4593fe, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x11e11a4c, 0xfd572460, 0x11e11a4c, 0x198b75, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x198b75, 0x198b75, 0xc9cbf769, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xce16a2fb, 0x9eac7351, 0xce16a2fb, 0xbea374ca, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0xbea374ca, 0xbea374ca, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x978ea174, 0x929fce7c, 0x978ea174, 0x84cb51c9, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x84cb51c9, 0x84cb51c9, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x28b0c05b, 0x32d290d2, 0x28b0c05b, 0xb92ef4c6, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xb92ef4c6, 0xb92ef4c6, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xcbe03110, 0x535dc43a, 0xcbe03110, 0xb8c87995, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xb8c87995, 0xb8c87995, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbad8adf, 0x3388b781, 0xbad8adf, 0xd1863a2f, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0xd1863a2f, 0xd1863a2f, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x45d03c1b, 0xd4eddf86, 0x45d03c1b, 0x22ab0b9f, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x22ab0b9f, 0x22ab0b9f, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xb6b65234, 0xec122b66, 0xb6b65234, 0x706c3177, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x706c3177, 0x706c3177, 0x1c955882, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4a693032, 0xa69acbf3, 0x4a693032, 0xbfcd9a65, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xbfcd9a65, 0xbfcd9a65, 0x4d266f7a, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1329653a, 0x103645b9, 0x1329653a, 0x668d01b5, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0x668d01b5, 0x668d01b5, 0x1ed9d731, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xce16a2fb, 0x9eac7351, 0xce16a2fb, 0xbea374ca, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0xbea374ca, 0xbea374ca, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x978ea174, 0x929fce7c, 0x978ea174, 0x84cb51c9, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x84cb51c9, 0x84cb51c9, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x28b0c05b, 0x32d290d2, 0x28b0c05b, 0xb92ef4c6, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xb92ef4c6, 0xb92ef4c6, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xcbe03110, 0x535dc43a, 0xcbe03110, 0xb8c87995, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xb8c87995, 0xb8c87995, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbad8adf, 0x3388b781, 0xbad8adf, 0xd1863a2f, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0xd1863a2f, 0xd1863a2f, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x45d03c1b, 0xd4eddf86, 0x45d03c1b, 0x22ab0b9f, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x22ab0b9f, 0x22ab0b9f, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xb6b65234, 0xec122b66, 0xb6b65234, 0x706c3177, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x706c3177, 0x706c3177, 0x1c955882, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4a693032, 0xa69acbf3, 0x4a693032, 0xbfcd9a65, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xbfcd9a65, 0xbfcd9a65, 0x4d266f7a, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1329653a, 0x103645b9, 0x1329653a, 0x668d01b5, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0x668d01b5, 0x668d01b5, 0x1ed9d731, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x9a418b1d, 0x6fb2a19a, 0x9a418b1d, 0x3c3e7993, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x3c3e7993, 0x3c3e7993, 0x9813a416, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x66cb2267, 0xb90e9f13, 0x66cb2267, 0x79874749, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x79874749, 0x79874749, 0x5fcf013d, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd3d2838d, 0x3c2e7a96, 0xd3d2838d, 0x993b0962, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x993b0962, 0x993b0962, 0xdd28f52b, }, 20 }, + { "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7a3f695f, 0xac449d41, 0x7a3f695f, 0x28a073b1, 0xf22da29a, 0xa59283dd, 0xa59283dd, 0xa59283dd, 0x397018b, 0x397018b, 0x397018b, 0xe978830f, 0xe978830f, 0xe978830f, 0x59c36f00, 0x28a073b1, 0x28a073b1, }, 18 }, + { "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x2ee70aea, 0x8f5328d2, 0x2ee70aea, 0x19fb9508, 0x2c3dfa69, 0x3af36cbe, 0x3af36cbe, 0x3af36cbe, 0x413d5d99, 0x413d5d99, 0x413d5d99, 0xf53dc062, 0xf53dc062, 0xf53dc062, 0xaa4593fe, 0x19fb9508, 0x19fb9508, }, 18 }, + { "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xef842e14, 0x9b7cdc00, 0xef842e14, 0x750c3145, 0xb069b9a2, 0xa8a14595, 0xa8a14595, 0xa8a14595, 0x9d10cb77, 0x9d10cb77, 0x9d10cb77, 0x24ffafe5, 0x24ffafe5, 0x24ffafe5, 0xc9cbf769, 0x750c3145, 0x750c3145, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0xf162dfa3, 0xe0f86fe6, 0xf162dfa3, 0x51f56384, 0xa9aef7c0, 0x91aae164, 0x91aae164, 0x91aae164, 0xa9dc15a0, 0xa9dc15a0, 0xa9dc15a0, 0x7f3ef36f, 0x7f3ef36f, 0x7f3ef36f, 0x1c3742c9, 0x51f56384, 0x51f56384, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x644b801, 0x8a201b04, 0x644b801, 0xa4508ec0, 0xcb189b31, 0x31a6403d, 0x31a6403d, 0x31a6403d, 0x482af006, 0x482af006, 0x482af006, 0x27fb2b69, 0x27fb2b69, 0x27fb2b69, 0xcc5a7bed, 0xa4508ec0, 0xa4508ec0, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0x1e1a41fe, 0x237e53c4, 0x1e1a41fe, 0xd5890062, 0x7180f3ea, 0xb5a59013, 0xb5a59013, 0xb5a59013, 0x198743f5, 0x198743f5, 0x198743f5, 0x46ce6df4, 0x46ce6df4, 0x46ce6df4, 0xef4a3312, 0xd5890062, 0xd5890062, }, 18 }, + { "gfxmenu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xcfa0e627, 0x8b7088da, 0xcfa0e627, 0xcd807142, 0xdc37dab7, 0x8b88fbf0, 0x8b88fbf0, 0x8b88fbf0, 0x2d8d79a6, 0x2d8d79a6, 0x2d8d79a6, 0xc762fb22, 0xc762fb22, 0xc762fb22, 0x59c36f00, 0xcd807142, 0xcd807142, }, 18 }, + { "gfxmenu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x64807934, 0x85d684c9, 0x64807934, 0x61726a79, 0x71c38b, 0x16bf555c, 0x16bf555c, 0x16bf555c, 0x6d71647b, 0x6d71647b, 0x6d71647b, 0xd971f980, 0xd971f980, 0xd971f980, 0xaa4593fe, 0x61726a79, 0x61726a79, }, 18 }, + { "gfxmenu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x9792b643, 0x1d769dd8, 0x9792b643, 0x3d74bd2f, 0x4411e313, 0x5cd91f24, 0x5cd91f24, 0x5cd91f24, 0x696891c6, 0x696891c6, 0x696891c6, 0xd087f554, 0xd087f554, 0xd087f554, 0xc9cbf769, 0x3d74bd2f, 0x3d74bd2f, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xbdb8f583, 0x1e27b76, 0xbdb8f583, 0x91be6e17, 0xf93a81be, 0x3458d277, 0x3458d277, 0x3458d277, 0x6475af82, 0x6475af82, 0x6475af82, 0x89de01be, 0x89de01be, 0x89de01be, 0x5387d57f, 0x91be6e17, 0x91be6e17, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbe72e1cb, 0x4943add3, 0xbe72e1cb, 0xa207f983, 0x58397d1d, 0xf2c9c339, 0xf2c9c339, 0xf2c9c339, 0xf702b00c, 0xf702b00c, 0xf702b00c, 0x3a7f3ab7, 0x3a7f3ab7, 0x3a7f3ab7, 0xf83ee7aa, 0xa207f983, 0xa207f983, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xbc064047, 0x9e12d9ac, 0xbc064047, 0xf9bdce43, 0x7184c3f8, 0x31049190, 0x31049190, 0x31049190, 0xd3f9aeb0, 0xd3f9aeb0, 0xd3f9aeb0, 0x1f1da1fb, 0x1f1da1fb, 0x1f1da1fb, 0x724366e5, 0xf9bdce43, 0xf9bdce43, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x6181ad43, 0xe570d91, 0x6181ad43, 0x567fb1cc, 0xa8a3da, 0x2c2f026d, 0x2c2f026d, 0x2c2f026d, 0x6dbdc460, 0x6dbdc460, 0x6dbdc460, 0xb5dd76de, 0xb5dd76de, 0xb5dd76de, 0x5387d57f, 0x567fb1cc, 0x567fb1cc, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1e5b6982, 0x789f961c, 0x1e5b6982, 0xc1ad694a, 0xbc4e843c, 0x5f240733, 0x5f240733, 0x5f240733, 0x3f8bff2a, 0x3f8bff2a, 0x3f8bff2a, 0x1537f8a3, 0x1537f8a3, 0x1537f8a3, 0xf83ee7aa, 0xc1ad694a, 0xc1ad694a, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x73f85cef, 0x9469d68d, 0x73f85cef, 0x24779078, 0x6f964a90, 0xe50e1c95, 0xe50e1c95, 0xe50e1c95, 0xe705abee, 0xe705abee, 0xe705abee, 0x430c0324, 0x430c0324, 0x430c0324, 0x724366e5, 0x24779078, 0x24779078, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xa6ddcb95, 0xa3934314, 0xa6ddcb95, 0x16ab9b6c, 0x1755c99c, 0x667d9b75, 0x667d9b75, 0x667d9b75, 0xd5a12156, 0xd5a12156, 0xd5a12156, 0x293b5b40, 0x293b5b40, 0x293b5b40, 0x1c955882, 0x16ab9b6c, 0x16ab9b6c, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x18e25ecc, 0xe52f7def, 0x18e25ecc, 0x5bd10081, 0xf52b17e7, 0x8edc5455, 0x8edc5455, 0x8edc5455, 0xfa6c9077, 0xfa6c9077, 0xfa6c9077, 0x30d86449, 0x30d86449, 0x30d86449, 0x4d266f7a, 0x5bd10081, 0x5bd10081, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xa845bba2, 0xb67fe791, 0xa845bba2, 0x80452493, 0x437302fa, 0x5690e5a0, 0x5690e5a0, 0x5690e5a0, 0x7174a0bc, 0x7174a0bc, 0x7174a0bc, 0xed45d558, 0xed45d558, 0xed45d558, 0x1ed9d731, 0x80452493, 0x80452493, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xa35a45c5, 0xacbc8410, 0xa35a45c5, 0xed2e11bd, 0x79f9376f, 0xb49b64a6, 0xb49b64a6, 0xb49b64a6, 0xe4b61953, 0xe4b61953, 0xe4b61953, 0x91db76f, 0x91db76f, 0x91db76f, 0x5387d57f, 0xed2e11bd, 0xed2e11bd, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8a6fa170, 0x7605140e, 0x8a6fa170, 0xc030feb1, 0xa84da503, 0x2bd1b27, 0x2bd1b27, 0x2bd1b27, 0x7766812, 0x7766812, 0x7766812, 0xca0be2a9, 0xca0be2a9, 0xca0be2a9, 0xf83ee7aa, 0xc030feb1, 0xc030feb1, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x49ddd3e4, 0xbfaeedf9, 0x49ddd3e4, 0xcde1d4b5, 0xf7229851, 0xb7a2ca39, 0xb7a2ca39, 0xb7a2ca39, 0x555ff519, 0x555ff519, 0x555ff519, 0x99bbfa52, 0x99bbfa52, 0x99bbfa52, 0x724366e5, 0xcde1d4b5, 0xcde1d4b5, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x98a8e7a8, 0xd9cab55f, 0x98a8e7a8, 0xf2b7dd05, 0xa199f4d7, 0x8d1e5560, 0x8d1e5560, 0x8d1e5560, 0xcc8c936d, 0xcc8c936d, 0xcc8c936d, 0x14ec21d3, 0x14ec21d3, 0x14ec21d3, 0x5387d57f, 0xf2b7dd05, 0xf2b7dd05, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa000334f, 0xa1b11a86, 0xa000334f, 0x8ac1b99f, 0xeaf098c4, 0x99a1bcb, 0x99a1bcb, 0x99a1bcb, 0x6935e3d2, 0x6935e3d2, 0x6935e3d2, 0x4389e45b, 0x4389e45b, 0x4389e45b, 0xf83ee7aa, 0x8ac1b99f, 0x8ac1b99f, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xc662fb1, 0x673baf90, 0xc662fb1, 0xfb88406, 0x8df6104e, 0x76e464b, 0x76e464b, 0x76e464b, 0x565f130, 0x565f130, 0x565f130, 0xa16c59fa, 0xa16c59fa, 0xa16c59fa, 0x724366e5, 0xfb88406, 0xfb88406, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x33d4530e, 0x11ff262b, 0x33d4530e, 0xbb511beb, 0xb3f7ca7e, 0xc2df9897, 0xc2df9897, 0xc2df9897, 0x710322b4, 0x710322b4, 0x710322b4, 0x8d9958a2, 0x8d9958a2, 0x8d9958a2, 0x1c955882, 0xbb511beb, 0xbb511beb, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x8b2e9364, 0x1d99d298, 0x8b2e9364, 0x958d5e8d, 0xfdfd7cdc, 0x860a3f6e, 0x860a3f6e, 0x860a3f6e, 0xf2bafb4c, 0xf2bafb4c, 0xf2bafb4c, 0x380e0f72, 0x380e0f72, 0x380e0f72, 0x4d266f7a, 0x958d5e8d, 0x958d5e8d, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x6e78baae, 0xaedcda00, 0x6e78baae, 0x9399bef9, 0xa685f2c7, 0xb366159d, 0xb366159d, 0xb366159d, 0x94825081, 0x94825081, 0x94825081, 0x8b32565, 0x8b32565, 0x8b32565, 0x1ed9d731, 0x9399bef9, 0x9399bef9, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x42860f9a, 0x57da9ef, 0x42860f9a, 0x221db42c, 0xdb3adfbf, 0xe33ec91b, 0xe33ec91b, 0xe33ec91b, 0xdb483ddf, 0xdb483ddf, 0xdb483ddf, 0xdaadb10, 0xdaadb10, 0xdaadb10, 0x1c3742c9, 0x221db42c, 0x221db42c, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x2ade7eff, 0xc91e0e0c, 0x2ade7eff, 0x8ad4bad6, 0x7f2729d6, 0x8599f2da, 0x8599f2da, 0x8599f2da, 0xfc1542e1, 0xfc1542e1, 0xfc1542e1, 0x93c4998e, 0x93c4998e, 0x93c4998e, 0xcc5a7bed, 0x8ad4bad6, 0x8ad4bad6, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xef4a3312, 0x4c493c2d, 0x487c542b, 0x4c493c2d, 0xfec68cd6, 0x76f27cf8, 0xb2d71f01, 0xb2d71f01, 0xb2d71f01, 0x1ef5cce7, 0x1ef5cce7, 0x1ef5cce7, 0x41bce2e6, 0x41bce2e6, 0x41bce2e6, 0xef4a3312, 0xfec68cd6, 0xfec68cd6, }, 18 }, + { "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3458f737, 0x9f683632, 0x3458f737, 0xc406e533, 0x59c36f00, 0x59c36f00, 0x487ab5e4, 0x487ab5e4, 0x487ab5e4, 0x7fd259c4, 0x7fd259c4, 0x7fd259c4, 0x9e9c916, 0x9e9c916, 0x9e9c916, 0x59c36f00, 0xc406e533, 0xc406e533, 0x59c36f00, }, 20 }, + { "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xf69b4ddf, 0xe4bbd034, 0xf69b4ddf, 0x11f6f535, 0xaa4593fe, 0xaa4593fe, 0x5f72cd5e, 0x5f72cd5e, 0x5f72cd5e, 0x2d53a3c0, 0x2d53a3c0, 0x2d53a3c0, 0xc354a564, 0xc354a564, 0xc354a564, 0xaa4593fe, 0x11f6f535, 0x11f6f535, 0xaa4593fe, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x5d3f71ce, 0x125d4470, 0x5d3f71ce, 0x4cc7e0f7, 0xc9cbf769, 0xc9cbf769, 0x5cd2badc, 0x5cd2badc, 0x5cd2badc, 0xec33730a, 0xec33730a, 0xec33730a, 0x1a030f57, 0x1a030f57, 0x1a030f57, 0xc9cbf769, 0x4cc7e0f7, 0x4cc7e0f7, 0xc9cbf769, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x5009815a, 0xb5594cfe, 0x5009815a, 0xf67673d4, 0x9813a416, 0x9813a416, 0xafb29c6f, 0xafb29c6f, 0xafb29c6f, 0x9d60948b, 0x9d60948b, 0x9d60948b, 0xaee74ff6, 0xaee74ff6, 0xaee74ff6, 0x9813a416, 0xf67673d4, 0xf67673d4, 0x9813a416, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb5a104fb, 0x4685e7e5, 0xb5a104fb, 0xaaed61d5, 0x5fcf013d, 0x5fcf013d, 0xc329daff, 0xc329daff, 0xc329daff, 0xbabb3557, 0xbabb3557, 0xbabb3557, 0x7b5d8710, 0x7b5d8710, 0x7b5d8710, 0x5fcf013d, 0xaaed61d5, 0xaaed61d5, 0x5fcf013d, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x702a2fbf, 0x137ca34, 0x702a2fbf, 0x3ac3a550, 0xdd28f52b, 0xdd28f52b, 0x75c4e836, 0x75c4e836, 0x75c4e836, 0x1f5655c1, 0x1f5655c1, 0x1f5655c1, 0xc94c0214, 0xc94c0214, 0xc94c0214, 0xdd28f52b, 0x3ac3a550, 0x3ac3a550, 0xdd28f52b, }, 20 }, + { "gfxterm_ar", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x3458f737, 0x9f683632, 0x3458f737, 0xc406e533, 0x59c36f00, 0x59c36f00, 0x487ab5e4, 0x487ab5e4, 0x487ab5e4, 0x7fd259c4, 0x7fd259c4, 0x7fd259c4, 0x9e9c916, 0x9e9c916, 0x9e9c916, 0x59c36f00, 0xc406e533, 0xc406e533, 0x59c36f00, }, 20 }, + { "gfxterm_ar", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xf69b4ddf, 0xe4bbd034, 0xf69b4ddf, 0x11f6f535, 0xaa4593fe, 0xaa4593fe, 0x5f72cd5e, 0x5f72cd5e, 0x5f72cd5e, 0x2d53a3c0, 0x2d53a3c0, 0x2d53a3c0, 0xc354a564, 0xc354a564, 0xc354a564, 0xaa4593fe, 0x11f6f535, 0x11f6f535, 0xaa4593fe, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x5d3f71ce, 0x125d4470, 0x5d3f71ce, 0x4cc7e0f7, 0xc9cbf769, 0xc9cbf769, 0x5cd2badc, 0x5cd2badc, 0x5cd2badc, 0xec33730a, 0xec33730a, 0xec33730a, 0x1a030f57, 0x1a030f57, 0x1a030f57, 0xc9cbf769, 0x4cc7e0f7, 0x4cc7e0f7, 0xc9cbf769, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x25a5c60d, 0x710e9f28, 0x25a5c60d, 0x5510103c, 0x5387d57f, 0x5387d57f, 0x56907307, 0x56907307, 0x56907307, 0x3dfe4b30, 0x3dfe4b30, 0x3dfe4b30, 0xd7730474, 0xd7730474, 0xd7730474, 0x5387d57f, 0x5510103c, 0x5510103c, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdebdd7f3, 0x33db1e37, 0xdebdd7f3, 0xcdf8274e, 0xf83ee7aa, 0xf83ee7aa, 0x84173ffc, 0x84173ffc, 0x84173ffc, 0x8b00f39f, 0x8b00f39f, 0x8b00f39f, 0x26a20d25, 0x26a20d25, 0x26a20d25, 0xf83ee7aa, 0xcdf8274e, 0xcdf8274e, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x60bd92a4, 0xc1a5291, 0x60bd92a4, 0xf123a639, 0x724366e5, 0x724366e5, 0xae152dbb, 0xae152dbb, 0xae152dbb, 0x10937a63, 0x10937a63, 0x10937a63, 0x90096d6b, 0x90096d6b, 0x90096d6b, 0x724366e5, 0xf123a639, 0xf123a639, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x86a31ce8, 0xb11aeda2, 0x86a31ce8, 0xf58b546d, 0x5387d57f, 0x5387d57f, 0xf6282a9d, 0xf6282a9d, 0xf6282a9d, 0xcbf551f5, 0xcbf551f5, 0xcbf551f5, 0xf019c753, 0xf019c753, 0xf019c753, 0x5387d57f, 0xf58b546d, 0xf58b546d, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1a630045, 0x98571c45, 0x1a630045, 0xc048b0b5, 0xf83ee7aa, 0xf83ee7aa, 0xacc07607, 0xacc07607, 0xacc07607, 0xc9f589d6, 0xc9f589d6, 0xc9f589d6, 0x70e1b560, 0x70e1b560, 0x70e1b560, 0xf83ee7aa, 0xc048b0b5, 0xc048b0b5, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xd4525d7b, 0xa87ca8e, 0xd4525d7b, 0xb3296aff, 0x724366e5, 0x724366e5, 0x8733800b, 0x8733800b, 0x8733800b, 0x3aab0496, 0x3aab0496, 0x3aab0496, 0x9e644025, 0x9e644025, 0x9e644025, 0x724366e5, 0xb3296aff, 0xb3296aff, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x7e77dcd0, 0x311e2b82, 0x7e77dcd0, 0xb8adbf93, 0x1c955882, 0x1c955882, 0x68965652, 0x68965652, 0x68965652, 0x5a808c66, 0x5a808c66, 0x5a808c66, 0x7714bef6, 0x7714bef6, 0x7714bef6, 0x1c955882, 0xb8adbf93, 0xb8adbf93, 0x1c955882, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x5f3e70fc, 0x869b02b8, 0x5f3e70fc, 0xaa9adaab, 0x4d266f7a, 0x4d266f7a, 0x8c12bf3a, 0x8c12bf3a, 0x8c12bf3a, 0x677c6119, 0x677c6119, 0x677c6119, 0x551f417c, 0x551f417c, 0x551f417c, 0x4d266f7a, 0xaa9adaab, 0xaa9adaab, 0x4d266f7a, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe61938bc, 0x6ace17ff, 0xe61938bc, 0x93bd5c33, 0x1ed9d731, 0x1ed9d731, 0x3b4b0d2d, 0x3b4b0d2d, 0x3b4b0d2d, 0x53ebfbfe, 0x53ebfbfe, 0x53ebfbfe, 0xdf47124f, 0xdf47124f, 0xdf47124f, 0x1ed9d731, 0x93bd5c33, 0x93bd5c33, 0x1ed9d731, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x25a5c60d, 0x710e9f28, 0x25a5c60d, 0x5510103c, 0x5387d57f, 0x5387d57f, 0x56907307, 0x56907307, 0x56907307, 0x3dfe4b30, 0x3dfe4b30, 0x3dfe4b30, 0xd7730474, 0xd7730474, 0xd7730474, 0x5387d57f, 0x5510103c, 0x5510103c, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdebdd7f3, 0x33db1e37, 0xdebdd7f3, 0xcdf8274e, 0xf83ee7aa, 0xf83ee7aa, 0x84173ffc, 0x84173ffc, 0x84173ffc, 0x8b00f39f, 0x8b00f39f, 0x8b00f39f, 0x26a20d25, 0x26a20d25, 0x26a20d25, 0xf83ee7aa, 0xcdf8274e, 0xcdf8274e, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x60bd92a4, 0xc1a5291, 0x60bd92a4, 0xf123a639, 0x724366e5, 0x724366e5, 0xae152dbb, 0xae152dbb, 0xae152dbb, 0x10937a63, 0x10937a63, 0x10937a63, 0x90096d6b, 0x90096d6b, 0x90096d6b, 0x724366e5, 0xf123a639, 0xf123a639, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x86a31ce8, 0xb11aeda2, 0x86a31ce8, 0xf58b546d, 0x5387d57f, 0x5387d57f, 0xf6282a9d, 0xf6282a9d, 0xf6282a9d, 0xcbf551f5, 0xcbf551f5, 0xcbf551f5, 0xf019c753, 0xf019c753, 0xf019c753, 0x5387d57f, 0xf58b546d, 0xf58b546d, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1a630045, 0x98571c45, 0x1a630045, 0xc048b0b5, 0xf83ee7aa, 0xf83ee7aa, 0xacc07607, 0xacc07607, 0xacc07607, 0xc9f589d6, 0xc9f589d6, 0xc9f589d6, 0x70e1b560, 0x70e1b560, 0x70e1b560, 0xf83ee7aa, 0xc048b0b5, 0xc048b0b5, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xd4525d7b, 0xa87ca8e, 0xd4525d7b, 0xb3296aff, 0x724366e5, 0x724366e5, 0x8733800b, 0x8733800b, 0x8733800b, 0x3aab0496, 0x3aab0496, 0x3aab0496, 0x9e644025, 0x9e644025, 0x9e644025, 0x724366e5, 0xb3296aff, 0xb3296aff, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x7e77dcd0, 0x311e2b82, 0x7e77dcd0, 0xb8adbf93, 0x1c955882, 0x1c955882, 0x68965652, 0x68965652, 0x68965652, 0x5a808c66, 0x5a808c66, 0x5a808c66, 0x7714bef6, 0x7714bef6, 0x7714bef6, 0x1c955882, 0xb8adbf93, 0xb8adbf93, 0x1c955882, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x5f3e70fc, 0x869b02b8, 0x5f3e70fc, 0xaa9adaab, 0x4d266f7a, 0x4d266f7a, 0x8c12bf3a, 0x8c12bf3a, 0x8c12bf3a, 0x677c6119, 0x677c6119, 0x677c6119, 0x551f417c, 0x551f417c, 0x551f417c, 0x4d266f7a, 0xaa9adaab, 0xaa9adaab, 0x4d266f7a, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe61938bc, 0x6ace17ff, 0xe61938bc, 0x93bd5c33, 0x1ed9d731, 0x1ed9d731, 0x3b4b0d2d, 0x3b4b0d2d, 0x3b4b0d2d, 0x53ebfbfe, 0x53ebfbfe, 0x53ebfbfe, 0xdf47124f, 0xdf47124f, 0xdf47124f, 0x1ed9d731, 0x93bd5c33, 0x93bd5c33, 0x1ed9d731, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x5009815a, 0xb5594cfe, 0x5009815a, 0xf67673d4, 0x9813a416, 0x9813a416, 0xafb29c6f, 0xafb29c6f, 0xafb29c6f, 0x9d60948b, 0x9d60948b, 0x9d60948b, 0xaee74ff6, 0xaee74ff6, 0xaee74ff6, 0x9813a416, 0xf67673d4, 0xf67673d4, 0x9813a416, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb5a104fb, 0x4685e7e5, 0xb5a104fb, 0xaaed61d5, 0x5fcf013d, 0x5fcf013d, 0xc329daff, 0xc329daff, 0xc329daff, 0xbabb3557, 0xbabb3557, 0xbabb3557, 0x7b5d8710, 0x7b5d8710, 0x7b5d8710, 0x5fcf013d, 0xaaed61d5, 0xaaed61d5, 0x5fcf013d, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x702a2fbf, 0x137ca34, 0x702a2fbf, 0x3ac3a550, 0xdd28f52b, 0xdd28f52b, 0x75c4e836, 0x75c4e836, 0x75c4e836, 0x1f5655c1, 0x1f5655c1, 0x1f5655c1, 0xc94c0214, 0xc94c0214, 0xc94c0214, 0xdd28f52b, 0x3ac3a550, 0x3ac3a550, 0xdd28f52b, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xf8b931ce, 0x5d102c8a, 0xf8b931ce, 0x8e723ca, 0x59c36f00, 0x59c36f00, 0xbbcc22eb, 0xbbcc22eb, 0xbbcc22eb, 0x8c64cecb, 0x8c64cecb, 0x8c64cecb, 0xfa5f5e19, 0xfa5f5e19, 0xfa5f5e19, 0x59c36f00, 0x8e723ca, 0x8e723ca, 0x59c36f00, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x4a1d3222, 0xd3f0a2f6, 0x4a1d3222, 0xad708ac8, 0xaa4593fe, 0xaa4593fe, 0x9097e33f, 0x9097e33f, 0x9097e33f, 0xe2b68da1, 0xe2b68da1, 0xe2b68da1, 0xcb18b05, 0xcb18b05, 0xcb18b05, 0xaa4593fe, 0xad708ac8, 0xad708ac8, 0xaa4593fe, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x11c27ef8, 0x12ef425b, 0x11c27ef8, 0x3aefc1, 0xc9cbf769, 0xc9cbf769, 0x154ce430, 0x154ce430, 0x154ce430, 0xa5ad2de6, 0xa5ad2de6, 0xa5ad2de6, 0x539d51bb, 0x539d51bb, 0x539d51bb, 0xc9cbf769, 0x3aefc1, 0x3aefc1, 0xc9cbf769, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb841ae4f, 0xb7a7d822, 0xb841ae4f, 0x1e3e5cc1, 0x9813a416, 0x9813a416, 0x8d8bbafc, 0x8d8bbafc, 0x8d8bbafc, 0xbf59b218, 0xbf59b218, 0xbf59b218, 0x8cde6965, 0x8cde6965, 0x8cde6965, 0x9813a416, 0x1e3e5cc1, 0x1e3e5cc1, 0x9813a416, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x4eee063f, 0x14c47610, 0x4eee063f, 0x51a26311, 0x5fcf013d, 0x5fcf013d, 0x315129ac, 0x315129ac, 0x315129ac, 0x48c3c604, 0x48c3c604, 0x48c3c604, 0x89257443, 0x89257443, 0x89257443, 0x5fcf013d, 0x51a26311, 0x51a26311, 0x5fcf013d, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xcf32bbc4, 0x59af6391, 0xcf32bbc4, 0x85db312b, 0xdd28f52b, 0xdd28f52b, 0xf0818ff6, 0xf0818ff6, 0xf0818ff6, 0x9a133201, 0x9a133201, 0x9a133201, 0x4c0965d4, 0x4c0965d4, 0x4c0965d4, 0xdd28f52b, 0x85db312b, 0x85db312b, 0xdd28f52b, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xf8b931ce, 0x5d102c8a, 0xf8b931ce, 0x8e723ca, 0x59c36f00, 0x59c36f00, 0xbbcc22eb, 0xbbcc22eb, 0xbbcc22eb, 0x8c64cecb, 0x8c64cecb, 0x8c64cecb, 0xfa5f5e19, 0xfa5f5e19, 0xfa5f5e19, 0x59c36f00, 0x8e723ca, 0x8e723ca, 0x59c36f00, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x4a1d3222, 0xd3f0a2f6, 0x4a1d3222, 0xad708ac8, 0xaa4593fe, 0xaa4593fe, 0x9097e33f, 0x9097e33f, 0x9097e33f, 0xe2b68da1, 0xe2b68da1, 0xe2b68da1, 0xcb18b05, 0xcb18b05, 0xcb18b05, 0xaa4593fe, 0xad708ac8, 0xad708ac8, 0xaa4593fe, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x11c27ef8, 0x12ef425b, 0x11c27ef8, 0x3aefc1, 0xc9cbf769, 0xc9cbf769, 0x154ce430, 0x154ce430, 0x154ce430, 0xa5ad2de6, 0xa5ad2de6, 0xa5ad2de6, 0x539d51bb, 0x539d51bb, 0x539d51bb, 0xc9cbf769, 0x3aefc1, 0x3aefc1, 0xc9cbf769, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x1a771028, 0xe94b2b44, 0x1a771028, 0x6ac2c619, 0x5387d57f, 0x5387d57f, 0x74845744, 0x74845744, 0x74845744, 0x1fea6f73, 0x1fea6f73, 0x1fea6f73, 0xf5672037, 0xf5672037, 0xf5672037, 0x5387d57f, 0x6ac2c619, 0x6ac2c619, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdf1ece5a, 0xa6fdd748, 0xdf1ece5a, 0xcc5b3ee7, 0xf83ee7aa, 0xf83ee7aa, 0x1e3f7378, 0x1e3f7378, 0x1e3f7378, 0x1128bf1b, 0x1128bf1b, 0x1128bf1b, 0xbc8a41a1, 0xbc8a41a1, 0xbc8a41a1, 0xf83ee7aa, 0xcc5b3ee7, 0xcc5b3ee7, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xb1cd1a5a, 0xac7574de, 0xb1cd1a5a, 0x20532ec7, 0x724366e5, 0x724366e5, 0x6dc4c04, 0x6dc4c04, 0x6dc4c04, 0xb85a1bdc, 0xb85a1bdc, 0xb85a1bdc, 0x38c00cd4, 0x38c00cd4, 0x38c00cd4, 0x724366e5, 0x20532ec7, 0x20532ec7, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x78a02a32, 0x6ab778cc, 0x78a02a32, 0xb8862b7, 0x5387d57f, 0x5387d57f, 0x5a2a46f3, 0x5a2a46f3, 0x5a2a46f3, 0x67f73d9b, 0x67f73d9b, 0x67f73d9b, 0x5c1bab3d, 0x5c1bab3d, 0x5c1bab3d, 0x5387d57f, 0xb8862b7, 0xb8862b7, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x780e644b, 0x887d4bc5, 0x780e644b, 0xa225d4bb, 0xf83ee7aa, 0xf83ee7aa, 0xd1685b5a, 0xd1685b5a, 0xd1685b5a, 0xb45da48b, 0xb45da48b, 0xb45da48b, 0xd49983d, 0xd49983d, 0xd49983d, 0xf83ee7aa, 0xa225d4bb, 0xa225d4bb, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x88442d18, 0xf84114b9, 0x88442d18, 0xef3f1a9c, 0x724366e5, 0x724366e5, 0x4605d5f9, 0x4605d5f9, 0x4605d5f9, 0xfb9d5164, 0xfb9d5164, 0xfb9d5164, 0x5f5215d7, 0x5f5215d7, 0x5f5215d7, 0x724366e5, 0xef3f1a9c, 0xef3f1a9c, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x33c566c9, 0x12974e4e, 0x33c566c9, 0xf51f058a, 0x1c955882, 0x1c955882, 0xdae7571c, 0xdae7571c, 0xdae7571c, 0xe8f18d28, 0xe8f18d28, 0xe8f18d28, 0xc565bfb8, 0xc565bfb8, 0xc565bfb8, 0x1c955882, 0xf51f058a, 0xf51f058a, 0x1c955882, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x48ab65a4, 0x99e0071a, 0x48ab65a4, 0xbd0fcff3, 0x4d266f7a, 0x4d266f7a, 0xb98c42f4, 0xb98c42f4, 0xb98c42f4, 0x52e29cd7, 0x52e29cd7, 0x52e29cd7, 0x6081bcb2, 0x6081bcb2, 0x6081bcb2, 0x4d266f7a, 0xbd0fcff3, 0xbd0fcff3, 0x4d266f7a, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb2b56df5, 0x3d357f10, 0xb2b56df5, 0xc711097a, 0x1ed9d731, 0x1ed9d731, 0x280ecefd, 0x280ecefd, 0x280ecefd, 0x40ae382e, 0x40ae382e, 0x40ae382e, 0xcc02d19f, 0xcc02d19f, 0xcc02d19f, 0x1ed9d731, 0xc711097a, 0xc711097a, 0x1ed9d731, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x1a771028, 0xe94b2b44, 0x1a771028, 0x6ac2c619, 0x5387d57f, 0x5387d57f, 0x74845744, 0x74845744, 0x74845744, 0x1fea6f73, 0x1fea6f73, 0x1fea6f73, 0xf5672037, 0xf5672037, 0xf5672037, 0x5387d57f, 0x6ac2c619, 0x6ac2c619, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdf1ece5a, 0xa6fdd748, 0xdf1ece5a, 0xcc5b3ee7, 0xf83ee7aa, 0xf83ee7aa, 0x1e3f7378, 0x1e3f7378, 0x1e3f7378, 0x1128bf1b, 0x1128bf1b, 0x1128bf1b, 0xbc8a41a1, 0xbc8a41a1, 0xbc8a41a1, 0xf83ee7aa, 0xcc5b3ee7, 0xcc5b3ee7, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xb1cd1a5a, 0xac7574de, 0xb1cd1a5a, 0x20532ec7, 0x724366e5, 0x724366e5, 0x6dc4c04, 0x6dc4c04, 0x6dc4c04, 0xb85a1bdc, 0xb85a1bdc, 0xb85a1bdc, 0x38c00cd4, 0x38c00cd4, 0x38c00cd4, 0x724366e5, 0x20532ec7, 0x20532ec7, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x78a02a32, 0x6ab778cc, 0x78a02a32, 0xb8862b7, 0x5387d57f, 0x5387d57f, 0x5a2a46f3, 0x5a2a46f3, 0x5a2a46f3, 0x67f73d9b, 0x67f73d9b, 0x67f73d9b, 0x5c1bab3d, 0x5c1bab3d, 0x5c1bab3d, 0x5387d57f, 0xb8862b7, 0xb8862b7, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x780e644b, 0x887d4bc5, 0x780e644b, 0xa225d4bb, 0xf83ee7aa, 0xf83ee7aa, 0xd1685b5a, 0xd1685b5a, 0xd1685b5a, 0xb45da48b, 0xb45da48b, 0xb45da48b, 0xd49983d, 0xd49983d, 0xd49983d, 0xf83ee7aa, 0xa225d4bb, 0xa225d4bb, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x88442d18, 0xf84114b9, 0x88442d18, 0xef3f1a9c, 0x724366e5, 0x724366e5, 0x4605d5f9, 0x4605d5f9, 0x4605d5f9, 0xfb9d5164, 0xfb9d5164, 0xfb9d5164, 0x5f5215d7, 0x5f5215d7, 0x5f5215d7, 0x724366e5, 0xef3f1a9c, 0xef3f1a9c, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x33c566c9, 0x12974e4e, 0x33c566c9, 0xf51f058a, 0x1c955882, 0x1c955882, 0xdae7571c, 0xdae7571c, 0xdae7571c, 0xe8f18d28, 0xe8f18d28, 0xe8f18d28, 0xc565bfb8, 0xc565bfb8, 0xc565bfb8, 0x1c955882, 0xf51f058a, 0xf51f058a, 0x1c955882, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x48ab65a4, 0x99e0071a, 0x48ab65a4, 0xbd0fcff3, 0x4d266f7a, 0x4d266f7a, 0xb98c42f4, 0xb98c42f4, 0xb98c42f4, 0x52e29cd7, 0x52e29cd7, 0x52e29cd7, 0x6081bcb2, 0x6081bcb2, 0x6081bcb2, 0x4d266f7a, 0xbd0fcff3, 0xbd0fcff3, 0x4d266f7a, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb2b56df5, 0x3d357f10, 0xb2b56df5, 0xc711097a, 0x1ed9d731, 0x1ed9d731, 0x280ecefd, 0x280ecefd, 0x280ecefd, 0x40ae382e, 0x40ae382e, 0x40ae382e, 0xcc02d19f, 0xcc02d19f, 0xcc02d19f, 0x1ed9d731, 0xc711097a, 0xc711097a, 0x1ed9d731, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xb841ae4f, 0xb7a7d822, 0xb841ae4f, 0x1e3e5cc1, 0x9813a416, 0x9813a416, 0x8d8bbafc, 0x8d8bbafc, 0x8d8bbafc, 0xbf59b218, 0xbf59b218, 0xbf59b218, 0x8cde6965, 0x8cde6965, 0x8cde6965, 0x9813a416, 0x1e3e5cc1, 0x1e3e5cc1, 0x9813a416, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x4eee063f, 0x14c47610, 0x4eee063f, 0x51a26311, 0x5fcf013d, 0x5fcf013d, 0x315129ac, 0x315129ac, 0x315129ac, 0x48c3c604, 0x48c3c604, 0x48c3c604, 0x89257443, 0x89257443, 0x89257443, 0x5fcf013d, 0x51a26311, 0x51a26311, 0x5fcf013d, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xcf32bbc4, 0x59af6391, 0xcf32bbc4, 0x85db312b, 0xdd28f52b, 0xdd28f52b, 0xf0818ff6, 0xf0818ff6, 0xf0818ff6, 0x9a133201, 0x9a133201, 0x9a133201, 0x4c0965d4, 0x4c0965d4, 0x4c0965d4, 0xdd28f52b, 0x85db312b, 0x85db312b, 0xdd28f52b, }, 20 }, + { "gfxterm_heb", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xeeece42, 0xd32ac62d, 0xeeece42, 0xfeb0dc46, 0x59c36f00, 0x59c36f00, 0xb87b7d77, 0xb87b7d77, 0xb87b7d77, 0x8fd39157, 0x8fd39157, 0x8fd39157, 0xf9e80185, 0xf9e80185, 0xf9e80185, 0x59c36f00, 0xfeb0dc46, 0xfeb0dc46, 0x59c36f00, }, 20 }, + { "gfxterm_heb", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x74926bc5, 0x46811cb4, 0x74926bc5, 0x93ffd32f, 0xaa4593fe, 0xaa4593fe, 0x1577dcdd, 0x1577dcdd, 0x1577dcdd, 0x6756b243, 0x6756b243, 0x6756b243, 0x8951b4e7, 0x8951b4e7, 0x8951b4e7, 0xaa4593fe, 0x93ffd32f, 0x93ffd32f, 0xaa4593fe, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x8e4764e5, 0xb94cb40c, 0x8e4764e5, 0x9fbff5dc, 0xc9cbf769, 0xc9cbf769, 0x49324147, 0x49324147, 0x49324147, 0xf9d38891, 0xf9d38891, 0xf9d38891, 0xfe3f4cc, 0xfe3f4cc, 0xfe3f4cc, 0xc9cbf769, 0x9fbff5dc, 0x9fbff5dc, 0xc9cbf769, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xf61aa867, 0xa8efbede, 0xf61aa867, 0x50655ae9, 0x9813a416, 0x9813a416, 0x284e60ab, 0x284e60ab, 0x284e60ab, 0x1a9c684f, 0x1a9c684f, 0x1a9c684f, 0x291bb332, 0x291bb332, 0x291bb332, 0x9813a416, 0x50655ae9, 0x50655ae9, 0x9813a416, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x37948987, 0xe8b2e546, 0x37948987, 0x28d8eca9, 0x5fcf013d, 0x5fcf013d, 0xa253c90f, 0xa253c90f, 0xa253c90f, 0xdbc126a7, 0xdbc126a7, 0xdbc126a7, 0x1a2794e0, 0x1a2794e0, 0x1a2794e0, 0x5fcf013d, 0x28d8eca9, 0x28d8eca9, 0x5fcf013d, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xde8ea380, 0x3146c4d0, 0xde8ea380, 0x9467296f, 0xdd28f52b, 0xdd28f52b, 0x28df5b61, 0x28df5b61, 0x28df5b61, 0x424de696, 0x424de696, 0x424de696, 0x9457b143, 0x9457b143, 0x9457b143, 0xdd28f52b, 0x9467296f, 0x9467296f, 0xdd28f52b, }, 20 }, + { "gfxterm_heb", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xeeece42, 0xd32ac62d, 0xeeece42, 0xfeb0dc46, 0x59c36f00, 0x59c36f00, 0xb87b7d77, 0xb87b7d77, 0xb87b7d77, 0x8fd39157, 0x8fd39157, 0x8fd39157, 0xf9e80185, 0xf9e80185, 0xf9e80185, 0x59c36f00, 0xfeb0dc46, 0xfeb0dc46, 0x59c36f00, }, 20 }, + { "gfxterm_heb", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x74926bc5, 0x46811cb4, 0x74926bc5, 0x93ffd32f, 0xaa4593fe, 0xaa4593fe, 0x1577dcdd, 0x1577dcdd, 0x1577dcdd, 0x6756b243, 0x6756b243, 0x6756b243, 0x8951b4e7, 0x8951b4e7, 0x8951b4e7, 0xaa4593fe, 0x93ffd32f, 0x93ffd32f, 0xaa4593fe, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x8e4764e5, 0xb94cb40c, 0x8e4764e5, 0x9fbff5dc, 0xc9cbf769, 0xc9cbf769, 0x49324147, 0x49324147, 0x49324147, 0xf9d38891, 0xf9d38891, 0xf9d38891, 0xfe3f4cc, 0xfe3f4cc, 0xfe3f4cc, 0xc9cbf769, 0x9fbff5dc, 0x9fbff5dc, 0xc9cbf769, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x4bb8bd52, 0xd1c595e2, 0x4bb8bd52, 0x3b0d6b63, 0x5387d57f, 0x5387d57f, 0xa166c9ac, 0xa166c9ac, 0xa166c9ac, 0xca08f19b, 0xca08f19b, 0xca08f19b, 0x2085bedf, 0x2085bedf, 0x2085bedf, 0x5387d57f, 0x3b0d6b63, 0x3b0d6b63, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x97462a28, 0x6e289d48, 0x97462a28, 0x8403da95, 0xf83ee7aa, 0xf83ee7aa, 0x1a6f8010, 0x1a6f8010, 0x1a6f8010, 0x15784c73, 0x15784c73, 0x15784c73, 0xb8dab2c9, 0xb8dab2c9, 0xb8dab2c9, 0xf83ee7aa, 0x8403da95, 0x8403da95, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xbfd6acef, 0x8b7171c0, 0xbfd6acef, 0x2e489872, 0x724366e5, 0x724366e5, 0xfc86ebe7, 0xfc86ebe7, 0xfc86ebe7, 0x4200bc3f, 0x4200bc3f, 0x4200bc3f, 0xc29aab37, 0xc29aab37, 0xc29aab37, 0x724366e5, 0x2e489872, 0x2e489872, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc72519d6, 0x84db4689, 0xc72519d6, 0xb40d5153, 0x5387d57f, 0x5387d57f, 0x5b19d18d, 0x5b19d18d, 0x5b19d18d, 0x66c4aae5, 0x66c4aae5, 0x66c4aae5, 0x5d283c43, 0x5d283c43, 0x5d283c43, 0x5387d57f, 0xb40d5153, 0xb40d5153, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xcf88f071, 0x5b1f9a14, 0xcf88f071, 0x15a34081, 0xf83ee7aa, 0xf83ee7aa, 0xac05dae3, 0xac05dae3, 0xac05dae3, 0xc9302532, 0xc9302532, 0xc9302532, 0x70241984, 0x70241984, 0x70241984, 0xf83ee7aa, 0x15a34081, 0x15a34081, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x876ef22b, 0x3b8025e3, 0x876ef22b, 0xe015c5af, 0x724366e5, 0x724366e5, 0xe6ef3c30, 0xe6ef3c30, 0xe6ef3c30, 0x5b77b8ad, 0x5b77b8ad, 0x5b77b8ad, 0xffb8fc1e, 0xffb8fc1e, 0xffb8fc1e, 0x724366e5, 0xe015c5af, 0xe015c5af, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x483c4536, 0x36149342, 0x483c4536, 0x8ee62675, 0x1c955882, 0x1c955882, 0xd0692bee, 0xd0692bee, 0xd0692bee, 0xe27ff1da, 0xe27ff1da, 0xe27ff1da, 0xcfebc34a, 0xcfebc34a, 0xcfebc34a, 0x1c955882, 0x8ee62675, 0x8ee62675, 0x1c955882, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xdc350b32, 0x9b9d7abf, 0xdc350b32, 0x2991a165, 0x4d266f7a, 0x4d266f7a, 0x12ea18e7, 0x12ea18e7, 0x12ea18e7, 0xf984c6c4, 0xf984c6c4, 0xf984c6c4, 0xcbe7e6a1, 0xcbe7e6a1, 0xcbe7e6a1, 0x4d266f7a, 0x2991a165, 0x2991a165, 0x4d266f7a, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1ae35856, 0x4d2d0bba, 0x1ae35856, 0x6f473cd9, 0x1ed9d731, 0x1ed9d731, 0x8b94f0c0, 0x8b94f0c0, 0x8b94f0c0, 0xe3340613, 0xe3340613, 0xe3340613, 0x6f98efa2, 0x6f98efa2, 0x6f98efa2, 0x1ed9d731, 0x6f473cd9, 0x6f473cd9, 0x1ed9d731, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x4bb8bd52, 0xd1c595e2, 0x4bb8bd52, 0x3b0d6b63, 0x5387d57f, 0x5387d57f, 0xa166c9ac, 0xa166c9ac, 0xa166c9ac, 0xca08f19b, 0xca08f19b, 0xca08f19b, 0x2085bedf, 0x2085bedf, 0x2085bedf, 0x5387d57f, 0x3b0d6b63, 0x3b0d6b63, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x97462a28, 0x6e289d48, 0x97462a28, 0x8403da95, 0xf83ee7aa, 0xf83ee7aa, 0x1a6f8010, 0x1a6f8010, 0x1a6f8010, 0x15784c73, 0x15784c73, 0x15784c73, 0xb8dab2c9, 0xb8dab2c9, 0xb8dab2c9, 0xf83ee7aa, 0x8403da95, 0x8403da95, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xbfd6acef, 0x8b7171c0, 0xbfd6acef, 0x2e489872, 0x724366e5, 0x724366e5, 0xfc86ebe7, 0xfc86ebe7, 0xfc86ebe7, 0x4200bc3f, 0x4200bc3f, 0x4200bc3f, 0xc29aab37, 0xc29aab37, 0xc29aab37, 0x724366e5, 0x2e489872, 0x2e489872, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc72519d6, 0x84db4689, 0xc72519d6, 0xb40d5153, 0x5387d57f, 0x5387d57f, 0x5b19d18d, 0x5b19d18d, 0x5b19d18d, 0x66c4aae5, 0x66c4aae5, 0x66c4aae5, 0x5d283c43, 0x5d283c43, 0x5d283c43, 0x5387d57f, 0xb40d5153, 0xb40d5153, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xcf88f071, 0x5b1f9a14, 0xcf88f071, 0x15a34081, 0xf83ee7aa, 0xf83ee7aa, 0xac05dae3, 0xac05dae3, 0xac05dae3, 0xc9302532, 0xc9302532, 0xc9302532, 0x70241984, 0x70241984, 0x70241984, 0xf83ee7aa, 0x15a34081, 0x15a34081, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x876ef22b, 0x3b8025e3, 0x876ef22b, 0xe015c5af, 0x724366e5, 0x724366e5, 0xe6ef3c30, 0xe6ef3c30, 0xe6ef3c30, 0x5b77b8ad, 0x5b77b8ad, 0x5b77b8ad, 0xffb8fc1e, 0xffb8fc1e, 0xffb8fc1e, 0x724366e5, 0xe015c5af, 0xe015c5af, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x483c4536, 0x36149342, 0x483c4536, 0x8ee62675, 0x1c955882, 0x1c955882, 0xd0692bee, 0xd0692bee, 0xd0692bee, 0xe27ff1da, 0xe27ff1da, 0xe27ff1da, 0xcfebc34a, 0xcfebc34a, 0xcfebc34a, 0x1c955882, 0x8ee62675, 0x8ee62675, 0x1c955882, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xdc350b32, 0x9b9d7abf, 0xdc350b32, 0x2991a165, 0x4d266f7a, 0x4d266f7a, 0x12ea18e7, 0x12ea18e7, 0x12ea18e7, 0xf984c6c4, 0xf984c6c4, 0xf984c6c4, 0xcbe7e6a1, 0xcbe7e6a1, 0xcbe7e6a1, 0x4d266f7a, 0x2991a165, 0x2991a165, 0x4d266f7a, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1ae35856, 0x4d2d0bba, 0x1ae35856, 0x6f473cd9, 0x1ed9d731, 0x1ed9d731, 0x8b94f0c0, 0x8b94f0c0, 0x8b94f0c0, 0xe3340613, 0xe3340613, 0xe3340613, 0x6f98efa2, 0x6f98efa2, 0x6f98efa2, 0x1ed9d731, 0x6f473cd9, 0x6f473cd9, 0x1ed9d731, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xf61aa867, 0xa8efbede, 0xf61aa867, 0x50655ae9, 0x9813a416, 0x9813a416, 0x284e60ab, 0x284e60ab, 0x284e60ab, 0x1a9c684f, 0x1a9c684f, 0x1a9c684f, 0x291bb332, 0x291bb332, 0x291bb332, 0x9813a416, 0x50655ae9, 0x50655ae9, 0x9813a416, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x37948987, 0xe8b2e546, 0x37948987, 0x28d8eca9, 0x5fcf013d, 0x5fcf013d, 0xa253c90f, 0xa253c90f, 0xa253c90f, 0xdbc126a7, 0xdbc126a7, 0xdbc126a7, 0x1a2794e0, 0x1a2794e0, 0x1a2794e0, 0x5fcf013d, 0x28d8eca9, 0x28d8eca9, 0x5fcf013d, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xde8ea380, 0x3146c4d0, 0xde8ea380, 0x9467296f, 0xdd28f52b, 0xdd28f52b, 0x28df5b61, 0x28df5b61, 0x28df5b61, 0x424de696, 0x424de696, 0x424de696, 0x9457b143, 0x9457b143, 0x9457b143, 0xdd28f52b, 0x9467296f, 0x9467296f, 0xdd28f52b, }, 20 }, + { "gfxterm_gre", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x8ee79de, 0x26b051ae, 0x8ee79de, 0xf8b06bda, 0x59c36f00, 0x59c36f00, 0x3f1c338c, 0x3f1c338c, 0x3f1c338c, 0x8b4dfac, 0x8b4dfac, 0x8b4dfac, 0x7e8f4f7e, 0x7e8f4f7e, 0x7e8f4f7e, 0x59c36f00, 0xf8b06bda, 0xf8b06bda, 0x59c36f00, }, 20 }, + { "gfxterm_gre", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xef5d784d, 0xf9f3df7f, 0xef5d784d, 0x830c0a7, 0xaa4593fe, 0xaa4593fe, 0x6ab2cc09, 0x6ab2cc09, 0x6ab2cc09, 0x1893a297, 0x1893a297, 0x1893a297, 0xf694a433, 0xf694a433, 0xf694a433, 0xaa4593fe, 0x830c0a7, 0x830c0a7, 0xaa4593fe, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xd4e0e978, 0x3ecbb91a, 0xd4e0e978, 0xc5187841, 0xc9cbf769, 0xc9cbf769, 0x1dcde94e, 0x1dcde94e, 0x1dcde94e, 0xad2c2098, 0xad2c2098, 0xad2c2098, 0x5b1c5cc5, 0x5b1c5cc5, 0x5b1c5cc5, 0xc9cbf769, 0xc5187841, 0xc5187841, 0xc9cbf769, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xe2593717, 0x2640bf65, 0xe2593717, 0x4426c599, 0x9813a416, 0x9813a416, 0x5ede2f49, 0x5ede2f49, 0x5ede2f49, 0x6c0c27ad, 0x6c0c27ad, 0x6c0c27ad, 0x5f8bfcd0, 0x5f8bfcd0, 0x5f8bfcd0, 0x9813a416, 0x4426c599, 0x4426c599, 0x9813a416, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xcde83267, 0x22a53484, 0xcde83267, 0xd2a45749, 0x5fcf013d, 0x5fcf013d, 0x1e7ff7d9, 0x1e7ff7d9, 0x1e7ff7d9, 0x67ed1871, 0x67ed1871, 0x67ed1871, 0xa60baa36, 0xa60baa36, 0xa60baa36, 0x5fcf013d, 0xd2a45749, 0xd2a45749, 0x5fcf013d, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7f78b019, 0x80a05ce1, 0x7f78b019, 0x35913af6, 0xdd28f52b, 0xdd28f52b, 0xe66c0535, 0xe66c0535, 0xe66c0535, 0x8cfeb8c2, 0x8cfeb8c2, 0x8cfeb8c2, 0x5ae4ef17, 0x5ae4ef17, 0x5ae4ef17, 0xdd28f52b, 0x35913af6, 0x35913af6, 0xdd28f52b, }, 20 }, + { "gfxterm_gre", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x8ee79de, 0x26b051ae, 0x8ee79de, 0xf8b06bda, 0x59c36f00, 0x59c36f00, 0x3f1c338c, 0x3f1c338c, 0x3f1c338c, 0x8b4dfac, 0x8b4dfac, 0x8b4dfac, 0x7e8f4f7e, 0x7e8f4f7e, 0x7e8f4f7e, 0x59c36f00, 0xf8b06bda, 0xf8b06bda, 0x59c36f00, }, 20 }, + { "gfxterm_gre", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xef5d784d, 0xf9f3df7f, 0xef5d784d, 0x830c0a7, 0xaa4593fe, 0xaa4593fe, 0x6ab2cc09, 0x6ab2cc09, 0x6ab2cc09, 0x1893a297, 0x1893a297, 0x1893a297, 0xf694a433, 0xf694a433, 0xf694a433, 0xaa4593fe, 0x830c0a7, 0x830c0a7, 0xaa4593fe, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xd4e0e978, 0x3ecbb91a, 0xd4e0e978, 0xc5187841, 0xc9cbf769, 0xc9cbf769, 0x1dcde94e, 0x1dcde94e, 0x1dcde94e, 0xad2c2098, 0xad2c2098, 0xad2c2098, 0x5b1c5cc5, 0x5b1c5cc5, 0x5b1c5cc5, 0xc9cbf769, 0xc5187841, 0xc5187841, 0xc9cbf769, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xaf56168d, 0x52310b7d, 0xaf56168d, 0xdfe3c0bc, 0x5387d57f, 0x5387d57f, 0xe220439e, 0xe220439e, 0xe220439e, 0x894e7ba9, 0x894e7ba9, 0x894e7ba9, 0x63c334ed, 0x63c334ed, 0x63c334ed, 0x5387d57f, 0xdfe3c0bc, 0xdfe3c0bc, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3e770d13, 0x12c714b1, 0x3e770d13, 0x2d32fdae, 0xf83ee7aa, 0xf83ee7aa, 0x9772bab3, 0x9772bab3, 0x9772bab3, 0x986576d0, 0x986576d0, 0x986576d0, 0x35c7886a, 0x35c7886a, 0x35c7886a, 0xf83ee7aa, 0x2d32fdae, 0x2d32fdae, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x9d87c56c, 0x3ba3fdf4, 0x9d87c56c, 0xc19f1f1, 0x724366e5, 0x724366e5, 0xf5b081d4, 0xf5b081d4, 0xf5b081d4, 0x4b36d60c, 0x4b36d60c, 0x4b36d60c, 0xcbacc104, 0xcbacc104, 0xcbacc104, 0x724366e5, 0xc19f1f1, 0xc19f1f1, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7205f0bb, 0x153a6d72, 0x7205f0bb, 0x12db83e, 0x5387d57f, 0x5387d57f, 0x18972377, 0x18972377, 0x18972377, 0x254a581f, 0x254a581f, 0x254a581f, 0x1ea6ceb9, 0x1ea6ceb9, 0x1ea6ceb9, 0x5387d57f, 0x12db83e, 0x12db83e, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5088632b, 0x6b3eb456, 0x5088632b, 0x8aa3d3db, 0xf83ee7aa, 0xf83ee7aa, 0x760f7b46, 0x760f7b46, 0x760f7b46, 0x133a8497, 0x133a8497, 0x133a8497, 0xaa2eb821, 0xaa2eb821, 0xaa2eb821, 0xf83ee7aa, 0x8aa3d3db, 0x8aa3d3db, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x42dae97e, 0x14545eb7, 0x42dae97e, 0x25a1defa, 0x724366e5, 0x724366e5, 0xe0fc7f88, 0xe0fc7f88, 0xe0fc7f88, 0x5d64fb15, 0x5d64fb15, 0x5d64fb15, 0xf9abbfa6, 0xf9abbfa6, 0xf9abbfa6, 0x724366e5, 0x25a1defa, 0x25a1defa, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x2430e081, 0x242aac55, 0x2430e081, 0xe2ea83c2, 0x1c955882, 0x1c955882, 0xbc41ae45, 0xbc41ae45, 0xbc41ae45, 0x8e577471, 0x8e577471, 0x8e577471, 0xa3c346e1, 0xa3c346e1, 0xa3c346e1, 0x1c955882, 0xe2ea83c2, 0xe2ea83c2, 0x1c955882, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfca08617, 0x3fa61e54, 0xfca08617, 0x9042c40, 0x4d266f7a, 0x4d266f7a, 0x68a0b7be, 0x68a0b7be, 0x68a0b7be, 0x83ce699d, 0x83ce699d, 0x83ce699d, 0xb1ad49f8, 0xb1ad49f8, 0xb1ad49f8, 0x4d266f7a, 0x9042c40, 0x9042c40, 0x4d266f7a, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x36cffaf4, 0x3b414926, 0x36cffaf4, 0x436b9e7b, 0x1ed9d731, 0x1ed9d731, 0x64aaad8f, 0x64aaad8f, 0x64aaad8f, 0xc0a5b5c, 0xc0a5b5c, 0xc0a5b5c, 0x80a6b2ed, 0x80a6b2ed, 0x80a6b2ed, 0x1ed9d731, 0x436b9e7b, 0x436b9e7b, 0x1ed9d731, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xaf56168d, 0x52310b7d, 0xaf56168d, 0xdfe3c0bc, 0x5387d57f, 0x5387d57f, 0xe220439e, 0xe220439e, 0xe220439e, 0x894e7ba9, 0x894e7ba9, 0x894e7ba9, 0x63c334ed, 0x63c334ed, 0x63c334ed, 0x5387d57f, 0xdfe3c0bc, 0xdfe3c0bc, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3e770d13, 0x12c714b1, 0x3e770d13, 0x2d32fdae, 0xf83ee7aa, 0xf83ee7aa, 0x9772bab3, 0x9772bab3, 0x9772bab3, 0x986576d0, 0x986576d0, 0x986576d0, 0x35c7886a, 0x35c7886a, 0x35c7886a, 0xf83ee7aa, 0x2d32fdae, 0x2d32fdae, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x9d87c56c, 0x3ba3fdf4, 0x9d87c56c, 0xc19f1f1, 0x724366e5, 0x724366e5, 0xf5b081d4, 0xf5b081d4, 0xf5b081d4, 0x4b36d60c, 0x4b36d60c, 0x4b36d60c, 0xcbacc104, 0xcbacc104, 0xcbacc104, 0x724366e5, 0xc19f1f1, 0xc19f1f1, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7205f0bb, 0x153a6d72, 0x7205f0bb, 0x12db83e, 0x5387d57f, 0x5387d57f, 0x18972377, 0x18972377, 0x18972377, 0x254a581f, 0x254a581f, 0x254a581f, 0x1ea6ceb9, 0x1ea6ceb9, 0x1ea6ceb9, 0x5387d57f, 0x12db83e, 0x12db83e, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5088632b, 0x6b3eb456, 0x5088632b, 0x8aa3d3db, 0xf83ee7aa, 0xf83ee7aa, 0x760f7b46, 0x760f7b46, 0x760f7b46, 0x133a8497, 0x133a8497, 0x133a8497, 0xaa2eb821, 0xaa2eb821, 0xaa2eb821, 0xf83ee7aa, 0x8aa3d3db, 0x8aa3d3db, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x42dae97e, 0x14545eb7, 0x42dae97e, 0x25a1defa, 0x724366e5, 0x724366e5, 0xe0fc7f88, 0xe0fc7f88, 0xe0fc7f88, 0x5d64fb15, 0x5d64fb15, 0x5d64fb15, 0xf9abbfa6, 0xf9abbfa6, 0xf9abbfa6, 0x724366e5, 0x25a1defa, 0x25a1defa, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x2430e081, 0x242aac55, 0x2430e081, 0xe2ea83c2, 0x1c955882, 0x1c955882, 0xbc41ae45, 0xbc41ae45, 0xbc41ae45, 0x8e577471, 0x8e577471, 0x8e577471, 0xa3c346e1, 0xa3c346e1, 0xa3c346e1, 0x1c955882, 0xe2ea83c2, 0xe2ea83c2, 0x1c955882, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfca08617, 0x3fa61e54, 0xfca08617, 0x9042c40, 0x4d266f7a, 0x4d266f7a, 0x68a0b7be, 0x68a0b7be, 0x68a0b7be, 0x83ce699d, 0x83ce699d, 0x83ce699d, 0xb1ad49f8, 0xb1ad49f8, 0xb1ad49f8, 0x4d266f7a, 0x9042c40, 0x9042c40, 0x4d266f7a, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x36cffaf4, 0x3b414926, 0x36cffaf4, 0x436b9e7b, 0x1ed9d731, 0x1ed9d731, 0x64aaad8f, 0x64aaad8f, 0x64aaad8f, 0xc0a5b5c, 0xc0a5b5c, 0xc0a5b5c, 0x80a6b2ed, 0x80a6b2ed, 0x80a6b2ed, 0x1ed9d731, 0x436b9e7b, 0x436b9e7b, 0x1ed9d731, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xe2593717, 0x2640bf65, 0xe2593717, 0x4426c599, 0x9813a416, 0x9813a416, 0x5ede2f49, 0x5ede2f49, 0x5ede2f49, 0x6c0c27ad, 0x6c0c27ad, 0x6c0c27ad, 0x5f8bfcd0, 0x5f8bfcd0, 0x5f8bfcd0, 0x9813a416, 0x4426c599, 0x4426c599, 0x9813a416, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xcde83267, 0x22a53484, 0xcde83267, 0xd2a45749, 0x5fcf013d, 0x5fcf013d, 0x1e7ff7d9, 0x1e7ff7d9, 0x1e7ff7d9, 0x67ed1871, 0x67ed1871, 0x67ed1871, 0xa60baa36, 0xa60baa36, 0xa60baa36, 0x5fcf013d, 0xd2a45749, 0xd2a45749, 0x5fcf013d, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7f78b019, 0x80a05ce1, 0x7f78b019, 0x35913af6, 0xdd28f52b, 0xdd28f52b, 0xe66c0535, 0xe66c0535, 0xe66c0535, 0x8cfeb8c2, 0x8cfeb8c2, 0x8cfeb8c2, 0x5ae4ef17, 0x5ae4ef17, 0x5ae4ef17, 0xdd28f52b, 0x35913af6, 0x35913af6, 0xdd28f52b, }, 20 }, + { "gfxterm_ru", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5f9aad54, 0x4c443805, 0x5f9aad54, 0xafc4bf50, 0x59c36f00, 0x59c36f00, 0x58db3668, 0x58db3668, 0x58db3668, 0x6f73da48, 0x6f73da48, 0x6f73da48, 0x19484a9a, 0x19484a9a, 0x19484a9a, 0x59c36f00, 0xafc4bf50, 0xafc4bf50, 0x59c36f00, }, 20 }, + { "gfxterm_ru", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x5f32e9dd, 0xe616882b, 0x5f32e9dd, 0xb85f5137, 0xaa4593fe, 0xaa4593fe, 0x9d0a5b06, 0x9d0a5b06, 0x9d0a5b06, 0xef2b3598, 0xef2b3598, 0xef2b3598, 0x12c333c, 0x12c333c, 0x12c333c, 0xaa4593fe, 0xb85f5137, 0xb85f5137, 0xaa4593fe, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xa5bb82, 0xefc18d9, 0xa5bb82, 0x115d2abb, 0xc9cbf769, 0xc9cbf769, 0xd0be0d24, 0xd0be0d24, 0xd0be0d24, 0x605fc4f2, 0x605fc4f2, 0x605fc4f2, 0x966fb8af, 0x966fb8af, 0x966fb8af, 0xc9cbf769, 0x115d2abb, 0x115d2abb, 0xc9cbf769, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb948b0d6, 0xd4da4a61, 0xb948b0d6, 0x1f374258, 0x9813a416, 0x9813a416, 0x67ee54be, 0x67ee54be, 0x67ee54be, 0x553c5c5a, 0x553c5c5a, 0x553c5c5a, 0x66bb8727, 0x66bb8727, 0x66bb8727, 0x9813a416, 0x1f374258, 0x1f374258, 0x9813a416, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x1c4bab46, 0x1633fefe, 0x1c4bab46, 0x307ce68, 0x5fcf013d, 0x5fcf013d, 0xabae9d40, 0xabae9d40, 0xabae9d40, 0xd23c72e8, 0xd23c72e8, 0xd23c72e8, 0x13dac0af, 0x13dac0af, 0x13dac0af, 0x5fcf013d, 0x307ce68, 0x307ce68, 0x5fcf013d, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x601d59d6, 0x1b985f84, 0x601d59d6, 0x2af4d339, 0xdd28f52b, 0xdd28f52b, 0x467ca6f5, 0x467ca6f5, 0x467ca6f5, 0x2cee1b02, 0x2cee1b02, 0x2cee1b02, 0xfaf44cd7, 0xfaf44cd7, 0xfaf44cd7, 0xdd28f52b, 0x2af4d339, 0x2af4d339, 0xdd28f52b, }, 20 }, + { "gfxterm_ru", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5f9aad54, 0x4c443805, 0x5f9aad54, 0xafc4bf50, 0x59c36f00, 0x59c36f00, 0x58db3668, 0x58db3668, 0x58db3668, 0x6f73da48, 0x6f73da48, 0x6f73da48, 0x19484a9a, 0x19484a9a, 0x19484a9a, 0x59c36f00, 0xafc4bf50, 0xafc4bf50, 0x59c36f00, }, 20 }, + { "gfxterm_ru", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x5f32e9dd, 0xe616882b, 0x5f32e9dd, 0xb85f5137, 0xaa4593fe, 0xaa4593fe, 0x9d0a5b06, 0x9d0a5b06, 0x9d0a5b06, 0xef2b3598, 0xef2b3598, 0xef2b3598, 0x12c333c, 0x12c333c, 0x12c333c, 0xaa4593fe, 0xb85f5137, 0xb85f5137, 0xaa4593fe, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xa5bb82, 0xefc18d9, 0xa5bb82, 0x115d2abb, 0xc9cbf769, 0xc9cbf769, 0xd0be0d24, 0xd0be0d24, 0xd0be0d24, 0x605fc4f2, 0x605fc4f2, 0x605fc4f2, 0x966fb8af, 0x966fb8af, 0x966fb8af, 0xc9cbf769, 0x115d2abb, 0x115d2abb, 0xc9cbf769, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe2b498f9, 0xdd416a91, 0xe2b498f9, 0x92014ec8, 0x5387d57f, 0x5387d57f, 0xe42b0a50, 0xe42b0a50, 0xe42b0a50, 0x8f453267, 0x8f453267, 0x8f453267, 0x65c87d23, 0x65c87d23, 0x65c87d23, 0x5387d57f, 0x92014ec8, 0x92014ec8, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc36b80c7, 0x806de216, 0xc36b80c7, 0xd02e707a, 0xf83ee7aa, 0xf83ee7aa, 0x8f1478d, 0x8f1478d, 0x8f1478d, 0x7e68bee, 0x7e68bee, 0x7e68bee, 0xaa447554, 0xaa447554, 0xaa447554, 0xf83ee7aa, 0xd02e707a, 0xd02e707a, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x4758874e, 0xe7a130c, 0x4758874e, 0xd6c6b3d3, 0x724366e5, 0x724366e5, 0x1d8d26d5, 0x1d8d26d5, 0x1d8d26d5, 0xa30b710d, 0xa30b710d, 0xa30b710d, 0x23916605, 0x23916605, 0x23916605, 0x724366e5, 0xd6c6b3d3, 0xd6c6b3d3, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc76cdc3, 0xe20cbda0, 0xc76cdc3, 0x7f5e8546, 0x5387d57f, 0x5387d57f, 0xee60e67a, 0xee60e67a, 0xee60e67a, 0xd3bd9d12, 0xd3bd9d12, 0xd3bd9d12, 0xe8510bb4, 0xe8510bb4, 0xe8510bb4, 0x5387d57f, 0x7f5e8546, 0x7f5e8546, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x7fe6a55c, 0x206a8726, 0x7fe6a55c, 0xa5cd15ac, 0xf83ee7aa, 0xf83ee7aa, 0xc47340ba, 0xc47340ba, 0xc47340ba, 0xa146bf6b, 0xa146bf6b, 0xa146bf6b, 0x185283dd, 0x185283dd, 0x185283dd, 0xf83ee7aa, 0xa5cd15ac, 0xa5cd15ac, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xb1a1e81, 0xbec61ffd, 0xb1a1e81, 0x6c612905, 0x724366e5, 0x724366e5, 0x90acf3d2, 0x90acf3d2, 0x90acf3d2, 0x2d34774f, 0x2d34774f, 0x2d34774f, 0x89fb33fc, 0x89fb33fc, 0x89fb33fc, 0x724366e5, 0x6c612905, 0x6c612905, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x189ee5dc, 0x66e2ba99, 0x189ee5dc, 0xde44869f, 0x1c955882, 0x1c955882, 0x904c8647, 0x904c8647, 0x904c8647, 0xa25a5c73, 0xa25a5c73, 0xa25a5c73, 0x8fce6ee3, 0x8fce6ee3, 0x8fce6ee3, 0x1c955882, 0xde44869f, 0xde44869f, 0x1c955882, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4c144f16, 0x9c90ee08, 0x4c144f16, 0xb9b0e541, 0x4d266f7a, 0x4d266f7a, 0x4d7fce8d, 0x4d7fce8d, 0x4d7fce8d, 0xa61110ae, 0xa61110ae, 0xa61110ae, 0x947230cb, 0x947230cb, 0x947230cb, 0x4d266f7a, 0xb9b0e541, 0xb9b0e541, 0x4d266f7a, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5dd20b45, 0x44c3e87f, 0x5dd20b45, 0x28766fca, 0x1ed9d731, 0x1ed9d731, 0x82e9ffad, 0x82e9ffad, 0x82e9ffad, 0xea49097e, 0xea49097e, 0xea49097e, 0x66e5e0cf, 0x66e5e0cf, 0x66e5e0cf, 0x1ed9d731, 0x28766fca, 0x28766fca, 0x1ed9d731, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe2b498f9, 0xdd416a91, 0xe2b498f9, 0x92014ec8, 0x5387d57f, 0x5387d57f, 0xe42b0a50, 0xe42b0a50, 0xe42b0a50, 0x8f453267, 0x8f453267, 0x8f453267, 0x65c87d23, 0x65c87d23, 0x65c87d23, 0x5387d57f, 0x92014ec8, 0x92014ec8, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc36b80c7, 0x806de216, 0xc36b80c7, 0xd02e707a, 0xf83ee7aa, 0xf83ee7aa, 0x8f1478d, 0x8f1478d, 0x8f1478d, 0x7e68bee, 0x7e68bee, 0x7e68bee, 0xaa447554, 0xaa447554, 0xaa447554, 0xf83ee7aa, 0xd02e707a, 0xd02e707a, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x4758874e, 0xe7a130c, 0x4758874e, 0xd6c6b3d3, 0x724366e5, 0x724366e5, 0x1d8d26d5, 0x1d8d26d5, 0x1d8d26d5, 0xa30b710d, 0xa30b710d, 0xa30b710d, 0x23916605, 0x23916605, 0x23916605, 0x724366e5, 0xd6c6b3d3, 0xd6c6b3d3, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc76cdc3, 0xe20cbda0, 0xc76cdc3, 0x7f5e8546, 0x5387d57f, 0x5387d57f, 0xee60e67a, 0xee60e67a, 0xee60e67a, 0xd3bd9d12, 0xd3bd9d12, 0xd3bd9d12, 0xe8510bb4, 0xe8510bb4, 0xe8510bb4, 0x5387d57f, 0x7f5e8546, 0x7f5e8546, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x7fe6a55c, 0x206a8726, 0x7fe6a55c, 0xa5cd15ac, 0xf83ee7aa, 0xf83ee7aa, 0xc47340ba, 0xc47340ba, 0xc47340ba, 0xa146bf6b, 0xa146bf6b, 0xa146bf6b, 0x185283dd, 0x185283dd, 0x185283dd, 0xf83ee7aa, 0xa5cd15ac, 0xa5cd15ac, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xb1a1e81, 0xbec61ffd, 0xb1a1e81, 0x6c612905, 0x724366e5, 0x724366e5, 0x90acf3d2, 0x90acf3d2, 0x90acf3d2, 0x2d34774f, 0x2d34774f, 0x2d34774f, 0x89fb33fc, 0x89fb33fc, 0x89fb33fc, 0x724366e5, 0x6c612905, 0x6c612905, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x189ee5dc, 0x66e2ba99, 0x189ee5dc, 0xde44869f, 0x1c955882, 0x1c955882, 0x904c8647, 0x904c8647, 0x904c8647, 0xa25a5c73, 0xa25a5c73, 0xa25a5c73, 0x8fce6ee3, 0x8fce6ee3, 0x8fce6ee3, 0x1c955882, 0xde44869f, 0xde44869f, 0x1c955882, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4c144f16, 0x9c90ee08, 0x4c144f16, 0xb9b0e541, 0x4d266f7a, 0x4d266f7a, 0x4d7fce8d, 0x4d7fce8d, 0x4d7fce8d, 0xa61110ae, 0xa61110ae, 0xa61110ae, 0x947230cb, 0x947230cb, 0x947230cb, 0x4d266f7a, 0xb9b0e541, 0xb9b0e541, 0x4d266f7a, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5dd20b45, 0x44c3e87f, 0x5dd20b45, 0x28766fca, 0x1ed9d731, 0x1ed9d731, 0x82e9ffad, 0x82e9ffad, 0x82e9ffad, 0xea49097e, 0xea49097e, 0xea49097e, 0x66e5e0cf, 0x66e5e0cf, 0x66e5e0cf, 0x1ed9d731, 0x28766fca, 0x28766fca, 0x1ed9d731, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xb948b0d6, 0xd4da4a61, 0xb948b0d6, 0x1f374258, 0x9813a416, 0x9813a416, 0x67ee54be, 0x67ee54be, 0x67ee54be, 0x553c5c5a, 0x553c5c5a, 0x553c5c5a, 0x66bb8727, 0x66bb8727, 0x66bb8727, 0x9813a416, 0x1f374258, 0x1f374258, 0x9813a416, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x1c4bab46, 0x1633fefe, 0x1c4bab46, 0x307ce68, 0x5fcf013d, 0x5fcf013d, 0xabae9d40, 0xabae9d40, 0xabae9d40, 0xd23c72e8, 0xd23c72e8, 0xd23c72e8, 0x13dac0af, 0x13dac0af, 0x13dac0af, 0x5fcf013d, 0x307ce68, 0x307ce68, 0x5fcf013d, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x601d59d6, 0x1b985f84, 0x601d59d6, 0x2af4d339, 0xdd28f52b, 0xdd28f52b, 0x467ca6f5, 0x467ca6f5, 0x467ca6f5, 0x2cee1b02, 0x2cee1b02, 0x2cee1b02, 0xfaf44cd7, 0xfaf44cd7, 0xfaf44cd7, 0xdd28f52b, 0x2af4d339, 0x2af4d339, 0xdd28f52b, }, 20 }, + { "gfxterm_fr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xfcdcbc9a, 0xd12d4f6d, 0xfcdcbc9a, 0xc82ae9e, 0x59c36f00, 0x59c36f00, 0x34c2f3cf, 0x34c2f3cf, 0x34c2f3cf, 0x36a1fef, 0x36a1fef, 0x36a1fef, 0x75518f3d, 0x75518f3d, 0x75518f3d, 0x59c36f00, 0xc82ae9e, 0xc82ae9e, 0x59c36f00, }, 20 }, + { "gfxterm_fr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x35079acb, 0xd943bd14, 0x35079acb, 0xd26a2221, 0xaa4593fe, 0xaa4593fe, 0xab774321, 0xab774321, 0xab774321, 0xd9562dbf, 0xd9562dbf, 0xd9562dbf, 0x37512b1b, 0x37512b1b, 0x37512b1b, 0xaa4593fe, 0xd26a2221, 0xd26a2221, 0xaa4593fe, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x46e5237a, 0x2b235d4b, 0x46e5237a, 0x571db243, 0xc9cbf769, 0xc9cbf769, 0x8dd0396b, 0x8dd0396b, 0x8dd0396b, 0x3d31f0bd, 0x3d31f0bd, 0x3d31f0bd, 0xcb018ce0, 0xcb018ce0, 0xcb018ce0, 0xc9cbf769, 0x571db243, 0x571db243, 0xc9cbf769, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x6bb50287, 0xe1f958bc, 0x6bb50287, 0xcdcaf009, 0x9813a416, 0x9813a416, 0xcf94a159, 0xcf94a159, 0xcf94a159, 0xfd46a9bd, 0xfd46a9bd, 0xfd46a9bd, 0xcec172c0, 0xcec172c0, 0xcec172c0, 0x9813a416, 0xcdcaf009, 0xcdcaf009, 0x9813a416, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbb628833, 0xcc675871, 0xbb628833, 0xa42eed1d, 0x5fcf013d, 0x5fcf013d, 0x7c345edf, 0x7c345edf, 0x7c345edf, 0x5a6b177, 0x5a6b177, 0x5a6b177, 0xc4400330, 0xc4400330, 0xc4400330, 0x5fcf013d, 0xa42eed1d, 0xa42eed1d, 0x5fcf013d, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x3f145e6c, 0xaa2877c9, 0x3f145e6c, 0x75fdd483, 0xdd28f52b, 0xdd28f52b, 0xe8ba34e1, 0xe8ba34e1, 0xe8ba34e1, 0x82288916, 0x82288916, 0x82288916, 0x5432dec3, 0x5432dec3, 0x5432dec3, 0xdd28f52b, 0x75fdd483, 0x75fdd483, 0xdd28f52b, }, 20 }, + { "gfxterm_fr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xfcdcbc9a, 0xd12d4f6d, 0xfcdcbc9a, 0xc82ae9e, 0x59c36f00, 0x59c36f00, 0x34c2f3cf, 0x34c2f3cf, 0x34c2f3cf, 0x36a1fef, 0x36a1fef, 0x36a1fef, 0x75518f3d, 0x75518f3d, 0x75518f3d, 0x59c36f00, 0xc82ae9e, 0xc82ae9e, 0x59c36f00, }, 20 }, + { "gfxterm_fr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x35079acb, 0xd943bd14, 0x35079acb, 0xd26a2221, 0xaa4593fe, 0xaa4593fe, 0xab774321, 0xab774321, 0xab774321, 0xd9562dbf, 0xd9562dbf, 0xd9562dbf, 0x37512b1b, 0x37512b1b, 0x37512b1b, 0xaa4593fe, 0xd26a2221, 0xd26a2221, 0xaa4593fe, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x46e5237a, 0x2b235d4b, 0x46e5237a, 0x571db243, 0xc9cbf769, 0xc9cbf769, 0x8dd0396b, 0x8dd0396b, 0x8dd0396b, 0x3d31f0bd, 0x3d31f0bd, 0x3d31f0bd, 0xcb018ce0, 0xcb018ce0, 0xcb018ce0, 0xc9cbf769, 0x571db243, 0x571db243, 0xc9cbf769, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe22102, 0x4e2353b3, 0xe22102, 0x7057f733, 0x5387d57f, 0x5387d57f, 0xb2299ec3, 0xb2299ec3, 0xb2299ec3, 0xd947a6f4, 0xd947a6f4, 0xd947a6f4, 0x33cae9b0, 0x33cae9b0, 0x33cae9b0, 0x5387d57f, 0x7057f733, 0x7057f733, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb0bc18a8, 0xdcba5754, 0xb0bc18a8, 0xa3f9e815, 0xf83ee7aa, 0xf83ee7aa, 0x2e9d34a, 0x2e9d34a, 0x2e9d34a, 0xdfe1f29, 0xdfe1f29, 0xdfe1f29, 0xa05ce193, 0xa05ce193, 0xa05ce193, 0xf83ee7aa, 0xa3f9e815, 0xa3f9e815, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x3edf55a1, 0x33430c4, 0x3edf55a1, 0xaf41613c, 0x724366e5, 0x724366e5, 0x3385a58, 0x3385a58, 0x3385a58, 0xbdbe0d80, 0xbdbe0d80, 0xbdbe0d80, 0x3d241a88, 0x3d241a88, 0x3d241a88, 0x724366e5, 0xaf41613c, 0xaf41613c, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7962e0b6, 0x815387c6, 0x7962e0b6, 0xa4aa833, 0x5387d57f, 0x5387d57f, 0x2fc1a074, 0x2fc1a074, 0x2fc1a074, 0x121cdb1c, 0x121cdb1c, 0x121cdb1c, 0x29f04dba, 0x29f04dba, 0x29f04dba, 0x5387d57f, 0xa4aa833, 0xa4aa833, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc563f0b8, 0x83a415d9, 0xc563f0b8, 0x1f484048, 0xf83ee7aa, 0xf83ee7aa, 0xb408c313, 0xb408c313, 0xb408c313, 0xd13d3cc2, 0xd13d3cc2, 0xd13d3cc2, 0x68290074, 0x68290074, 0x68290074, 0xf83ee7aa, 0x1f484048, 0x1f484048, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x155ac5b, 0xe529c7f1, 0x155ac5b, 0x662e9bdf, 0x724366e5, 0x724366e5, 0xbf93765f, 0xbf93765f, 0xbf93765f, 0x20bf2c2, 0x20bf2c2, 0x20bf2c2, 0xa6c4b671, 0xa6c4b671, 0xa6c4b671, 0x724366e5, 0x662e9bdf, 0x662e9bdf, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x3c57c9a3, 0x64709f28, 0x3c57c9a3, 0xfa8daae0, 0x1c955882, 0x1c955882, 0xfe112969, 0xfe112969, 0xfe112969, 0xcc07f35d, 0xcc07f35d, 0xcc07f35d, 0xe193c1cd, 0xe193c1cd, 0xe193c1cd, 0x1c955882, 0xfa8daae0, 0xfa8daae0, 0x1c955882, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xa004c3fc, 0xdf87f97c, 0xa004c3fc, 0x55a069ab, 0x4d266f7a, 0x4d266f7a, 0xe3f465a3, 0xe3f465a3, 0xe3f465a3, 0x89abb80, 0x89abb80, 0x89abb80, 0x3af99be5, 0x3af99be5, 0x3af99be5, 0x4d266f7a, 0x55a069ab, 0x55a069ab, 0x4d266f7a, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb9a2989, 0x6bf23b20, 0xb9a2989, 0x7e3e4d06, 0x1ed9d731, 0x1ed9d731, 0x13680b3e, 0x13680b3e, 0x13680b3e, 0x7bc8fded, 0x7bc8fded, 0x7bc8fded, 0xf764145c, 0xf764145c, 0xf764145c, 0x1ed9d731, 0x7e3e4d06, 0x7e3e4d06, 0x1ed9d731, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe22102, 0x4e2353b3, 0xe22102, 0x7057f733, 0x5387d57f, 0x5387d57f, 0xb2299ec3, 0xb2299ec3, 0xb2299ec3, 0xd947a6f4, 0xd947a6f4, 0xd947a6f4, 0x33cae9b0, 0x33cae9b0, 0x33cae9b0, 0x5387d57f, 0x7057f733, 0x7057f733, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb0bc18a8, 0xdcba5754, 0xb0bc18a8, 0xa3f9e815, 0xf83ee7aa, 0xf83ee7aa, 0x2e9d34a, 0x2e9d34a, 0x2e9d34a, 0xdfe1f29, 0xdfe1f29, 0xdfe1f29, 0xa05ce193, 0xa05ce193, 0xa05ce193, 0xf83ee7aa, 0xa3f9e815, 0xa3f9e815, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x3edf55a1, 0x33430c4, 0x3edf55a1, 0xaf41613c, 0x724366e5, 0x724366e5, 0x3385a58, 0x3385a58, 0x3385a58, 0xbdbe0d80, 0xbdbe0d80, 0xbdbe0d80, 0x3d241a88, 0x3d241a88, 0x3d241a88, 0x724366e5, 0xaf41613c, 0xaf41613c, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7962e0b6, 0x815387c6, 0x7962e0b6, 0xa4aa833, 0x5387d57f, 0x5387d57f, 0x2fc1a074, 0x2fc1a074, 0x2fc1a074, 0x121cdb1c, 0x121cdb1c, 0x121cdb1c, 0x29f04dba, 0x29f04dba, 0x29f04dba, 0x5387d57f, 0xa4aa833, 0xa4aa833, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc563f0b8, 0x83a415d9, 0xc563f0b8, 0x1f484048, 0xf83ee7aa, 0xf83ee7aa, 0xb408c313, 0xb408c313, 0xb408c313, 0xd13d3cc2, 0xd13d3cc2, 0xd13d3cc2, 0x68290074, 0x68290074, 0x68290074, 0xf83ee7aa, 0x1f484048, 0x1f484048, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x155ac5b, 0xe529c7f1, 0x155ac5b, 0x662e9bdf, 0x724366e5, 0x724366e5, 0xbf93765f, 0xbf93765f, 0xbf93765f, 0x20bf2c2, 0x20bf2c2, 0x20bf2c2, 0xa6c4b671, 0xa6c4b671, 0xa6c4b671, 0x724366e5, 0x662e9bdf, 0x662e9bdf, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x3c57c9a3, 0x64709f28, 0x3c57c9a3, 0xfa8daae0, 0x1c955882, 0x1c955882, 0xfe112969, 0xfe112969, 0xfe112969, 0xcc07f35d, 0xcc07f35d, 0xcc07f35d, 0xe193c1cd, 0xe193c1cd, 0xe193c1cd, 0x1c955882, 0xfa8daae0, 0xfa8daae0, 0x1c955882, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xa004c3fc, 0xdf87f97c, 0xa004c3fc, 0x55a069ab, 0x4d266f7a, 0x4d266f7a, 0xe3f465a3, 0xe3f465a3, 0xe3f465a3, 0x89abb80, 0x89abb80, 0x89abb80, 0x3af99be5, 0x3af99be5, 0x3af99be5, 0x4d266f7a, 0x55a069ab, 0x55a069ab, 0x4d266f7a, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb9a2989, 0x6bf23b20, 0xb9a2989, 0x7e3e4d06, 0x1ed9d731, 0x1ed9d731, 0x13680b3e, 0x13680b3e, 0x13680b3e, 0x7bc8fded, 0x7bc8fded, 0x7bc8fded, 0xf764145c, 0xf764145c, 0xf764145c, 0x1ed9d731, 0x7e3e4d06, 0x7e3e4d06, 0x1ed9d731, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x6bb50287, 0xe1f958bc, 0x6bb50287, 0xcdcaf009, 0x9813a416, 0x9813a416, 0xcf94a159, 0xcf94a159, 0xcf94a159, 0xfd46a9bd, 0xfd46a9bd, 0xfd46a9bd, 0xcec172c0, 0xcec172c0, 0xcec172c0, 0x9813a416, 0xcdcaf009, 0xcdcaf009, 0x9813a416, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbb628833, 0xcc675871, 0xbb628833, 0xa42eed1d, 0x5fcf013d, 0x5fcf013d, 0x7c345edf, 0x7c345edf, 0x7c345edf, 0x5a6b177, 0x5a6b177, 0x5a6b177, 0xc4400330, 0xc4400330, 0xc4400330, 0x5fcf013d, 0xa42eed1d, 0xa42eed1d, 0x5fcf013d, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x3f145e6c, 0xaa2877c9, 0x3f145e6c, 0x75fdd483, 0xdd28f52b, 0xdd28f52b, 0xe8ba34e1, 0xe8ba34e1, 0xe8ba34e1, 0x82288916, 0x82288916, 0x82288916, 0x5432dec3, 0x5432dec3, 0x5432dec3, 0xdd28f52b, 0x75fdd483, 0x75fdd483, 0xdd28f52b, }, 20 }, + { "gfxterm_quot", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x664743b6, 0xae5f9a61, 0x664743b6, 0x961951b2, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0x961951b2, 0x961951b2, 0x59c36f00, }, 20 }, + { "gfxterm_quot", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xbbf1ef7e, 0xac6e54e7, 0xbbf1ef7e, 0x5c9c5794, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x5c9c5794, 0x5c9c5794, 0xaa4593fe, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x221271bb, 0xcea44f97, 0x221271bb, 0x33eae082, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x33eae082, 0x33eae082, 0xc9cbf769, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x3b9687f8, 0xce65ad7f, 0x3b9687f8, 0x9de97576, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x9de97576, 0x9de97576, 0x9813a416, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8f32cb1, 0xd73691c5, 0x8f32cb1, 0x17bf499f, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x17bf499f, 0x17bf499f, 0x5fcf013d, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5a20c4be, 0xb5dc3da5, 0x5a20c4be, 0x10c94e51, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x10c94e51, 0x10c94e51, 0xdd28f52b, }, 20 }, + { "gfxterm_quot", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x664743b6, 0xae5f9a61, 0x664743b6, 0x961951b2, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0x961951b2, 0x961951b2, 0x59c36f00, }, 20 }, + { "gfxterm_quot", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xbbf1ef7e, 0xac6e54e7, 0xbbf1ef7e, 0x5c9c5794, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x5c9c5794, 0x5c9c5794, 0xaa4593fe, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x221271bb, 0xcea44f97, 0x221271bb, 0x33eae082, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x33eae082, 0x33eae082, 0xc9cbf769, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x77626aa4, 0x27d8bb0e, 0x77626aa4, 0x7d7bc95, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x7d7bc95, 0x7d7bc95, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8d2042df, 0x88312dd7, 0x8d2042df, 0x9e65b262, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x9e65b262, 0x9e65b262, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xd203bd0, 0x17426b59, 0xd203bd0, 0x9cbe0f4d, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0x9cbe0f4d, 0x9cbe0f4d, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x3d7c81ff, 0xa5c174d5, 0x3d7c81ff, 0x4e54c97a, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0x4e54c97a, 0x4e54c97a, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe73e3728, 0xdf1b0a76, 0xe73e3728, 0x3d1587d8, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0x3d1587d8, 0x3d1587d8, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xd1da1d01, 0x40e7fe9c, 0xd1da1d01, 0xb6a12a85, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0xb6a12a85, 0xb6a12a85, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x603d4cb4, 0x3a9935e6, 0x603d4cb4, 0xa6e72ff7, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0xa6e72ff7, 0xa6e72ff7, 0x1c955882, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xab55c43c, 0x47a63ffd, 0xab55c43c, 0x5ef16e6b, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0x5ef16e6b, 0x5ef16e6b, 0x4d266f7a, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd5eb9850, 0xd6f4b8d3, 0xd5eb9850, 0xa04ffcdf, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xa04ffcdf, 0xa04ffcdf, 0x1ed9d731, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x77626aa4, 0x27d8bb0e, 0x77626aa4, 0x7d7bc95, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x7d7bc95, 0x7d7bc95, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8d2042df, 0x88312dd7, 0x8d2042df, 0x9e65b262, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x9e65b262, 0x9e65b262, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xd203bd0, 0x17426b59, 0xd203bd0, 0x9cbe0f4d, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0x9cbe0f4d, 0x9cbe0f4d, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x3d7c81ff, 0xa5c174d5, 0x3d7c81ff, 0x4e54c97a, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0x4e54c97a, 0x4e54c97a, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe73e3728, 0xdf1b0a76, 0xe73e3728, 0x3d1587d8, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0x3d1587d8, 0x3d1587d8, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xd1da1d01, 0x40e7fe9c, 0xd1da1d01, 0xb6a12a85, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0xb6a12a85, 0xb6a12a85, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x603d4cb4, 0x3a9935e6, 0x603d4cb4, 0xa6e72ff7, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0xa6e72ff7, 0xa6e72ff7, 0x1c955882, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xab55c43c, 0x47a63ffd, 0xab55c43c, 0x5ef16e6b, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0x5ef16e6b, 0x5ef16e6b, 0x4d266f7a, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd5eb9850, 0xd6f4b8d3, 0xd5eb9850, 0xa04ffcdf, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xa04ffcdf, 0xa04ffcdf, 0x1ed9d731, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x3b9687f8, 0xce65ad7f, 0x3b9687f8, 0x9de97576, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x9de97576, 0x9de97576, 0x9813a416, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8f32cb1, 0xd73691c5, 0x8f32cb1, 0x17bf499f, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x17bf499f, 0x17bf499f, 0x5fcf013d, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5a20c4be, 0xb5dc3da5, 0x5a20c4be, 0x10c94e51, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x10c94e51, 0x10c94e51, 0xdd28f52b, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x2a7e97c3, 0x3be15c68, 0x2a7e97c3, 0xda2085c7, 0x59c36f00, 0x59c36f00, 0x1839c826, 0x1839c826, 0x1839c826, 0x2f912406, 0x2f912406, 0x2f912406, 0x59aab4d4, 0x59aab4d4, 0x59aab4d4, 0x59c36f00, 0xda2085c7, 0xda2085c7, 0x59c36f00, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xc6029ded, 0x52d25b27, 0xc6029ded, 0x216f2507, 0xaa4593fe, 0xaa4593fe, 0x22985aea, 0x22985aea, 0x22985aea, 0x50b93474, 0x50b93474, 0x50b93474, 0xbebe32d0, 0xbebe32d0, 0xbebe32d0, 0xaa4593fe, 0x216f2507, 0x216f2507, 0xaa4593fe, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xcbff61aa, 0xa9ca8a15, 0xcbff61aa, 0xda07f093, 0xc9cbf769, 0xc9cbf769, 0x47ca6cff, 0x47ca6cff, 0x47ca6cff, 0xf72ba529, 0xf72ba529, 0xf72ba529, 0x11bd974, 0x11bd974, 0x11bd974, 0xc9cbf769, 0xda07f093, 0xda07f093, 0xc9cbf769, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x2df13f91, 0x3dc68f3d, 0x2df13f91, 0x8b8ecd1f, 0x9813a416, 0x9813a416, 0x4d501c22, 0x4d501c22, 0x4d501c22, 0x7f8214c6, 0x7f8214c6, 0x7f8214c6, 0x4c05cfbb, 0x4c05cfbb, 0x4c05cfbb, 0x9813a416, 0x8b8ecd1f, 0x8b8ecd1f, 0x9813a416, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x27757486, 0x9c300eca, 0x27757486, 0x383911a8, 0x5fcf013d, 0x5fcf013d, 0xc4765255, 0xc4765255, 0xc4765255, 0xbde4bdfd, 0xbde4bdfd, 0xbde4bdfd, 0x7c020fba, 0x7c020fba, 0x7c020fba, 0x5fcf013d, 0x383911a8, 0x383911a8, 0x5fcf013d, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x79973d2, 0xb499914b, 0x79973d2, 0x4d70f93d, 0xdd28f52b, 0xdd28f52b, 0x1f44d5b9, 0x1f44d5b9, 0x1f44d5b9, 0x75d6684e, 0x75d6684e, 0x75d6684e, 0xa3cc3f9b, 0xa3cc3f9b, 0xa3cc3f9b, 0xdd28f52b, 0x4d70f93d, 0x4d70f93d, 0xdd28f52b, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x2a7e97c3, 0x3be15c68, 0x2a7e97c3, 0xda2085c7, 0x59c36f00, 0x59c36f00, 0x1839c826, 0x1839c826, 0x1839c826, 0x2f912406, 0x2f912406, 0x2f912406, 0x59aab4d4, 0x59aab4d4, 0x59aab4d4, 0x59c36f00, 0xda2085c7, 0xda2085c7, 0x59c36f00, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xc6029ded, 0x52d25b27, 0xc6029ded, 0x216f2507, 0xaa4593fe, 0xaa4593fe, 0x22985aea, 0x22985aea, 0x22985aea, 0x50b93474, 0x50b93474, 0x50b93474, 0xbebe32d0, 0xbebe32d0, 0xbebe32d0, 0xaa4593fe, 0x216f2507, 0x216f2507, 0xaa4593fe, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xcbff61aa, 0xa9ca8a15, 0xcbff61aa, 0xda07f093, 0xc9cbf769, 0xc9cbf769, 0x47ca6cff, 0x47ca6cff, 0x47ca6cff, 0xf72ba529, 0xf72ba529, 0xf72ba529, 0x11bd974, 0x11bd974, 0x11bd974, 0xc9cbf769, 0xda07f093, 0xda07f093, 0xc9cbf769, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x183a9c7b, 0xd0cb89f6, 0x183a9c7b, 0x688f4a4a, 0x5387d57f, 0x5387d57f, 0xf73e8d51, 0xf73e8d51, 0xf73e8d51, 0x9c50b566, 0x9c50b566, 0x9c50b566, 0x76ddfa22, 0x76ddfa22, 0x76ddfa22, 0x5387d57f, 0x688f4a4a, 0x688f4a4a, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd4947854, 0x6a891549, 0xd4947854, 0xc7d188e9, 0xf83ee7aa, 0xf83ee7aa, 0x25ace02f, 0x25ace02f, 0x25ace02f, 0x2abb2c4c, 0x2abb2c4c, 0x2abb2c4c, 0x8719d2f6, 0x8719d2f6, 0x8719d2f6, 0xf83ee7aa, 0xc7d188e9, 0xc7d188e9, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xc052007a, 0xb13719bf, 0xc052007a, 0x51cc34e7, 0x724366e5, 0x724366e5, 0x93a5ae77, 0x93a5ae77, 0x93a5ae77, 0x2d23f9af, 0x2d23f9af, 0x2d23f9af, 0xadb9eea7, 0xadb9eea7, 0xadb9eea7, 0x724366e5, 0x51cc34e7, 0x51cc34e7, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x2c8b0bd8, 0xe2601f4, 0x2c8b0bd8, 0x5fa3435d, 0x5387d57f, 0x5387d57f, 0x8e1f6970, 0x8e1f6970, 0x8e1f6970, 0xb3c21218, 0xb3c21218, 0xb3c21218, 0x882e84be, 0x882e84be, 0x882e84be, 0x5387d57f, 0x5fa3435d, 0x5fa3435d, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe0188390, 0x3aed411b, 0xe0188390, 0x3a333360, 0xf83ee7aa, 0xf83ee7aa, 0xd8e98449, 0xd8e98449, 0xd8e98449, 0xbddc7b98, 0xbddc7b98, 0xbddc7b98, 0x4c8472e, 0x4c8472e, 0x4c8472e, 0xf83ee7aa, 0x3a333360, 0x3a333360, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x10b6bc80, 0x2aac1924, 0x10b6bc80, 0x77cd8b04, 0x724366e5, 0x724366e5, 0x8260df58, 0x8260df58, 0x8260df58, 0x3ff85bc5, 0x3ff85bc5, 0x3ff85bc5, 0x9b371f76, 0x9b371f76, 0x9b371f76, 0x724366e5, 0x77cd8b04, 0x77cd8b04, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x8c72313f, 0x4cfced12, 0x8c72313f, 0x4aa8527c, 0x1c955882, 0x1c955882, 0x9c0f3299, 0x9c0f3299, 0x9c0f3299, 0xae19e8ad, 0xae19e8ad, 0xae19e8ad, 0x838dda3d, 0x838dda3d, 0x838dda3d, 0x1c955882, 0x4aa8527c, 0x4aa8527c, 0x1c955882, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x2e321f11, 0xef4c7336, 0x2e321f11, 0xdb96b546, 0x4d266f7a, 0x4d266f7a, 0x826f10eb, 0x826f10eb, 0x826f10eb, 0x6901cec8, 0x6901cec8, 0x6901cec8, 0x5b62eead, 0x5b62eead, 0x5b62eead, 0x4d266f7a, 0xdb96b546, 0xdb96b546, 0x4d266f7a, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5e6477a3, 0x7ad01a93, 0x5e6477a3, 0x2bc0132c, 0x1ed9d731, 0x1ed9d731, 0xfa679063, 0xfa679063, 0xfa679063, 0x92c766b0, 0x92c766b0, 0x92c766b0, 0x1e6b8f01, 0x1e6b8f01, 0x1e6b8f01, 0x1ed9d731, 0x2bc0132c, 0x2bc0132c, 0x1ed9d731, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x183a9c7b, 0xd0cb89f6, 0x183a9c7b, 0x688f4a4a, 0x5387d57f, 0x5387d57f, 0xf73e8d51, 0xf73e8d51, 0xf73e8d51, 0x9c50b566, 0x9c50b566, 0x9c50b566, 0x76ddfa22, 0x76ddfa22, 0x76ddfa22, 0x5387d57f, 0x688f4a4a, 0x688f4a4a, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd4947854, 0x6a891549, 0xd4947854, 0xc7d188e9, 0xf83ee7aa, 0xf83ee7aa, 0x25ace02f, 0x25ace02f, 0x25ace02f, 0x2abb2c4c, 0x2abb2c4c, 0x2abb2c4c, 0x8719d2f6, 0x8719d2f6, 0x8719d2f6, 0xf83ee7aa, 0xc7d188e9, 0xc7d188e9, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xc052007a, 0xb13719bf, 0xc052007a, 0x51cc34e7, 0x724366e5, 0x724366e5, 0x93a5ae77, 0x93a5ae77, 0x93a5ae77, 0x2d23f9af, 0x2d23f9af, 0x2d23f9af, 0xadb9eea7, 0xadb9eea7, 0xadb9eea7, 0x724366e5, 0x51cc34e7, 0x51cc34e7, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x2c8b0bd8, 0xe2601f4, 0x2c8b0bd8, 0x5fa3435d, 0x5387d57f, 0x5387d57f, 0x8e1f6970, 0x8e1f6970, 0x8e1f6970, 0xb3c21218, 0xb3c21218, 0xb3c21218, 0x882e84be, 0x882e84be, 0x882e84be, 0x5387d57f, 0x5fa3435d, 0x5fa3435d, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe0188390, 0x3aed411b, 0xe0188390, 0x3a333360, 0xf83ee7aa, 0xf83ee7aa, 0xd8e98449, 0xd8e98449, 0xd8e98449, 0xbddc7b98, 0xbddc7b98, 0xbddc7b98, 0x4c8472e, 0x4c8472e, 0x4c8472e, 0xf83ee7aa, 0x3a333360, 0x3a333360, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x10b6bc80, 0x2aac1924, 0x10b6bc80, 0x77cd8b04, 0x724366e5, 0x724366e5, 0x8260df58, 0x8260df58, 0x8260df58, 0x3ff85bc5, 0x3ff85bc5, 0x3ff85bc5, 0x9b371f76, 0x9b371f76, 0x9b371f76, 0x724366e5, 0x77cd8b04, 0x77cd8b04, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x8c72313f, 0x4cfced12, 0x8c72313f, 0x4aa8527c, 0x1c955882, 0x1c955882, 0x9c0f3299, 0x9c0f3299, 0x9c0f3299, 0xae19e8ad, 0xae19e8ad, 0xae19e8ad, 0x838dda3d, 0x838dda3d, 0x838dda3d, 0x1c955882, 0x4aa8527c, 0x4aa8527c, 0x1c955882, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x2e321f11, 0xef4c7336, 0x2e321f11, 0xdb96b546, 0x4d266f7a, 0x4d266f7a, 0x826f10eb, 0x826f10eb, 0x826f10eb, 0x6901cec8, 0x6901cec8, 0x6901cec8, 0x5b62eead, 0x5b62eead, 0x5b62eead, 0x4d266f7a, 0xdb96b546, 0xdb96b546, 0x4d266f7a, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5e6477a3, 0x7ad01a93, 0x5e6477a3, 0x2bc0132c, 0x1ed9d731, 0x1ed9d731, 0xfa679063, 0xfa679063, 0xfa679063, 0x92c766b0, 0x92c766b0, 0x92c766b0, 0x1e6b8f01, 0x1e6b8f01, 0x1e6b8f01, 0x1ed9d731, 0x2bc0132c, 0x2bc0132c, 0x1ed9d731, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x2df13f91, 0x3dc68f3d, 0x2df13f91, 0x8b8ecd1f, 0x9813a416, 0x9813a416, 0x4d501c22, 0x4d501c22, 0x4d501c22, 0x7f8214c6, 0x7f8214c6, 0x7f8214c6, 0x4c05cfbb, 0x4c05cfbb, 0x4c05cfbb, 0x9813a416, 0x8b8ecd1f, 0x8b8ecd1f, 0x9813a416, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x27757486, 0x9c300eca, 0x27757486, 0x383911a8, 0x5fcf013d, 0x5fcf013d, 0xc4765255, 0xc4765255, 0xc4765255, 0xbde4bdfd, 0xbde4bdfd, 0xbde4bdfd, 0x7c020fba, 0x7c020fba, 0x7c020fba, 0x5fcf013d, 0x383911a8, 0x383911a8, 0x5fcf013d, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x79973d2, 0xb499914b, 0x79973d2, 0x4d70f93d, 0xdd28f52b, 0xdd28f52b, 0x1f44d5b9, 0x1f44d5b9, 0x1f44d5b9, 0x75d6684e, 0x75d6684e, 0x75d6684e, 0xa3cc3f9b, 0xa3cc3f9b, 0xa3cc3f9b, 0xdd28f52b, 0x4d70f93d, 0x4d70f93d, 0xdd28f52b, }, 20 }, + { "gfxterm_ch", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3ebe5332, 0x95dd4fe5, 0x3ebe5332, 0xcee04136, 0x59c36f00, 0x59c36f00, 0x7c2c8a2a, 0x7c2c8a2a, 0x7c2c8a2a, 0x4b84660a, 0x4b84660a, 0x4b84660a, 0x3dbff6d8, 0x3dbff6d8, 0x3dbff6d8, 0x59c36f00, 0xcee04136, 0xcee04136, 0x59c36f00, }, 20 }, + { "gfxterm_ch", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x5802d7d7, 0xc519b826, 0x5802d7d7, 0xbf6f6f3d, 0xaa4593fe, 0xaa4593fe, 0xc3576c98, 0xc3576c98, 0xc3576c98, 0xb1760206, 0xb1760206, 0xb1760206, 0x5f7104a2, 0x5f7104a2, 0x5f7104a2, 0xaa4593fe, 0xbf6f6f3d, 0xbf6f6f3d, 0xaa4593fe, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x1aa55709, 0x7267c865, 0x1aa55709, 0xb5dc630, 0xc9cbf769, 0xc9cbf769, 0xb04a06eb, 0xb04a06eb, 0xb04a06eb, 0xabcf3d, 0xabcf3d, 0xabcf3d, 0xf69bb360, 0xf69bb360, 0xf69bb360, 0xc9cbf769, 0xb5dc630, 0xb5dc630, 0xc9cbf769, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x40ebd791, 0xd6b59841, 0x40ebd791, 0xe694251f, 0x9813a416, 0x9813a416, 0xbe6f384, 0xbe6f384, 0xbe6f384, 0x3934fb60, 0x3934fb60, 0x3934fb60, 0xab3201d, 0xab3201d, 0xab3201d, 0x9813a416, 0xe694251f, 0xe694251f, 0x9813a416, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9d9917d5, 0x3f781d89, 0x9d9917d5, 0x82d572fb, 0x5fcf013d, 0x5fcf013d, 0x3bdf223a, 0x3bdf223a, 0x3bdf223a, 0x424dcd92, 0x424dcd92, 0x424dcd92, 0x83ab7fd5, 0x83ab7fd5, 0x83ab7fd5, 0x5fcf013d, 0x82d572fb, 0x82d572fb, 0x5fcf013d, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x48fc6a36, 0x150cb76a, 0x48fc6a36, 0x215e0d9, 0xdd28f52b, 0xdd28f52b, 0xf843e435, 0xf843e435, 0xf843e435, 0x92d159c2, 0x92d159c2, 0x92d159c2, 0x44cb0e17, 0x44cb0e17, 0x44cb0e17, 0xdd28f52b, 0x215e0d9, 0x215e0d9, 0xdd28f52b, }, 20 }, + { "gfxterm_ch", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x3ebe5332, 0x95dd4fe5, 0x3ebe5332, 0xcee04136, 0x59c36f00, 0x59c36f00, 0x7c2c8a2a, 0x7c2c8a2a, 0x7c2c8a2a, 0x4b84660a, 0x4b84660a, 0x4b84660a, 0x3dbff6d8, 0x3dbff6d8, 0x3dbff6d8, 0x59c36f00, 0xcee04136, 0xcee04136, 0x59c36f00, }, 20 }, + { "gfxterm_ch", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x5802d7d7, 0xc519b826, 0x5802d7d7, 0xbf6f6f3d, 0xaa4593fe, 0xaa4593fe, 0xc3576c98, 0xc3576c98, 0xc3576c98, 0xb1760206, 0xb1760206, 0xb1760206, 0x5f7104a2, 0x5f7104a2, 0x5f7104a2, 0xaa4593fe, 0xbf6f6f3d, 0xbf6f6f3d, 0xaa4593fe, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x1aa55709, 0x7267c865, 0x1aa55709, 0xb5dc630, 0xc9cbf769, 0xc9cbf769, 0xb04a06eb, 0xb04a06eb, 0xb04a06eb, 0xabcf3d, 0xabcf3d, 0xabcf3d, 0xf69bb360, 0xf69bb360, 0xf69bb360, 0xc9cbf769, 0xb5dc630, 0xb5dc630, 0xc9cbf769, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xed078d92, 0xe65b3e84, 0xed078d92, 0x9db25ba3, 0x5387d57f, 0x5387d57f, 0xacf2ee2c, 0xacf2ee2c, 0xacf2ee2c, 0xc79cd61b, 0xc79cd61b, 0xc79cd61b, 0x2d11995f, 0x2d11995f, 0x2d11995f, 0x5387d57f, 0x9db25ba3, 0x9db25ba3, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x13536212, 0x8f3d6029, 0x13536212, 0x1692af, 0xf83ee7aa, 0xf83ee7aa, 0x23576b23, 0x23576b23, 0x23576b23, 0x2c40a740, 0x2c40a740, 0x2c40a740, 0x81e259fa, 0x81e259fa, 0x81e259fa, 0xf83ee7aa, 0x1692af, 0x1692af, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xd1d07f0a, 0x7aba9822, 0xd1d07f0a, 0x404e4b97, 0x724366e5, 0x724366e5, 0x6fad7053, 0x6fad7053, 0x6fad7053, 0xd12b278b, 0xd12b278b, 0xd12b278b, 0x51b13083, 0x51b13083, 0x51b13083, 0x724366e5, 0x404e4b97, 0x404e4b97, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xf3cab74b, 0xddafefd5, 0xf3cab74b, 0x80e2ffce, 0x5387d57f, 0x5387d57f, 0xc5205153, 0xc5205153, 0xc5205153, 0xf8fd2a3b, 0xf8fd2a3b, 0xf8fd2a3b, 0xc311bc9d, 0xc311bc9d, 0xc311bc9d, 0x5387d57f, 0x80e2ffce, 0x80e2ffce, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbdea979c, 0x585500b9, 0xbdea979c, 0x67c1276c, 0xf83ee7aa, 0xf83ee7aa, 0xcb77b3a, 0xcb77b3a, 0xcb77b3a, 0x698284eb, 0x698284eb, 0x698284eb, 0xd096b85d, 0xd096b85d, 0xd096b85d, 0xf83ee7aa, 0x67c1276c, 0x67c1276c, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x5bca5fab, 0xf069ea4, 0x5bca5fab, 0x3cb1682f, 0x724366e5, 0x724366e5, 0xb28cd30a, 0xb28cd30a, 0xb28cd30a, 0xf145797, 0xf145797, 0xf145797, 0xabdb1324, 0xabdb1324, 0xabdb1324, 0x724366e5, 0x3cb1682f, 0x3cb1682f, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x3a299523, 0x61b936c7, 0x3a299523, 0xfcf3f660, 0x1c955882, 0x1c955882, 0xf5a3a011, 0xf5a3a011, 0xf5a3a011, 0xc7b57a25, 0xc7b57a25, 0xc7b57a25, 0xea2148b5, 0xea2148b5, 0xea2148b5, 0x1c955882, 0xfcf3f660, 0xfcf3f660, 0x1c955882, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x3bc7f0a6, 0xe271a46, 0x3bc7f0a6, 0xce635af1, 0x4d266f7a, 0x4d266f7a, 0x80eb545f, 0x80eb545f, 0x80eb545f, 0x6b858a7c, 0x6b858a7c, 0x6b858a7c, 0x59e6aa19, 0x59e6aa19, 0x59e6aa19, 0x4d266f7a, 0xce635af1, 0xce635af1, 0x4d266f7a, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe8477fbf, 0x258bfb15, 0xe8477fbf, 0x9de31b30, 0x1ed9d731, 0x1ed9d731, 0x261f7e5, 0x261f7e5, 0x261f7e5, 0x6ac10136, 0x6ac10136, 0x6ac10136, 0xe66de887, 0xe66de887, 0xe66de887, 0x1ed9d731, 0x9de31b30, 0x9de31b30, 0x1ed9d731, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xed078d92, 0xe65b3e84, 0xed078d92, 0x9db25ba3, 0x5387d57f, 0x5387d57f, 0xacf2ee2c, 0xacf2ee2c, 0xacf2ee2c, 0xc79cd61b, 0xc79cd61b, 0xc79cd61b, 0x2d11995f, 0x2d11995f, 0x2d11995f, 0x5387d57f, 0x9db25ba3, 0x9db25ba3, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x13536212, 0x8f3d6029, 0x13536212, 0x1692af, 0xf83ee7aa, 0xf83ee7aa, 0x23576b23, 0x23576b23, 0x23576b23, 0x2c40a740, 0x2c40a740, 0x2c40a740, 0x81e259fa, 0x81e259fa, 0x81e259fa, 0xf83ee7aa, 0x1692af, 0x1692af, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xd1d07f0a, 0x7aba9822, 0xd1d07f0a, 0x404e4b97, 0x724366e5, 0x724366e5, 0x6fad7053, 0x6fad7053, 0x6fad7053, 0xd12b278b, 0xd12b278b, 0xd12b278b, 0x51b13083, 0x51b13083, 0x51b13083, 0x724366e5, 0x404e4b97, 0x404e4b97, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xf3cab74b, 0xddafefd5, 0xf3cab74b, 0x80e2ffce, 0x5387d57f, 0x5387d57f, 0xc5205153, 0xc5205153, 0xc5205153, 0xf8fd2a3b, 0xf8fd2a3b, 0xf8fd2a3b, 0xc311bc9d, 0xc311bc9d, 0xc311bc9d, 0x5387d57f, 0x80e2ffce, 0x80e2ffce, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbdea979c, 0x585500b9, 0xbdea979c, 0x67c1276c, 0xf83ee7aa, 0xf83ee7aa, 0xcb77b3a, 0xcb77b3a, 0xcb77b3a, 0x698284eb, 0x698284eb, 0x698284eb, 0xd096b85d, 0xd096b85d, 0xd096b85d, 0xf83ee7aa, 0x67c1276c, 0x67c1276c, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x5bca5fab, 0xf069ea4, 0x5bca5fab, 0x3cb1682f, 0x724366e5, 0x724366e5, 0xb28cd30a, 0xb28cd30a, 0xb28cd30a, 0xf145797, 0xf145797, 0xf145797, 0xabdb1324, 0xabdb1324, 0xabdb1324, 0x724366e5, 0x3cb1682f, 0x3cb1682f, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x3a299523, 0x61b936c7, 0x3a299523, 0xfcf3f660, 0x1c955882, 0x1c955882, 0xf5a3a011, 0xf5a3a011, 0xf5a3a011, 0xc7b57a25, 0xc7b57a25, 0xc7b57a25, 0xea2148b5, 0xea2148b5, 0xea2148b5, 0x1c955882, 0xfcf3f660, 0xfcf3f660, 0x1c955882, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x3bc7f0a6, 0xe271a46, 0x3bc7f0a6, 0xce635af1, 0x4d266f7a, 0x4d266f7a, 0x80eb545f, 0x80eb545f, 0x80eb545f, 0x6b858a7c, 0x6b858a7c, 0x6b858a7c, 0x59e6aa19, 0x59e6aa19, 0x59e6aa19, 0x4d266f7a, 0xce635af1, 0xce635af1, 0x4d266f7a, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe8477fbf, 0x258bfb15, 0xe8477fbf, 0x9de31b30, 0x1ed9d731, 0x1ed9d731, 0x261f7e5, 0x261f7e5, 0x261f7e5, 0x6ac10136, 0x6ac10136, 0x6ac10136, 0xe66de887, 0xe66de887, 0xe66de887, 0x1ed9d731, 0x9de31b30, 0x9de31b30, 0x1ed9d731, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x40ebd791, 0xd6b59841, 0x40ebd791, 0xe694251f, 0x9813a416, 0x9813a416, 0xbe6f384, 0xbe6f384, 0xbe6f384, 0x3934fb60, 0x3934fb60, 0x3934fb60, 0xab3201d, 0xab3201d, 0xab3201d, 0x9813a416, 0xe694251f, 0xe694251f, 0x9813a416, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9d9917d5, 0x3f781d89, 0x9d9917d5, 0x82d572fb, 0x5fcf013d, 0x5fcf013d, 0x3bdf223a, 0x3bdf223a, 0x3bdf223a, 0x424dcd92, 0x424dcd92, 0x424dcd92, 0x83ab7fd5, 0x83ab7fd5, 0x83ab7fd5, 0x5fcf013d, 0x82d572fb, 0x82d572fb, 0x5fcf013d, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x48fc6a36, 0x150cb76a, 0x48fc6a36, 0x215e0d9, 0xdd28f52b, 0xdd28f52b, 0xf843e435, 0xf843e435, 0xf843e435, 0x92d159c2, 0x92d159c2, 0x92d159c2, 0x44cb0e17, 0x44cb0e17, 0x44cb0e17, 0xdd28f52b, 0x215e0d9, 0x215e0d9, 0xdd28f52b, }, 20 }, + { "gfxterm_red", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5ada9562, 0x92c24cb5, 0x5ada9562, 0xa87078ee, 0x59c36f00, 0x59c36f00, 0xa3fd4fe2, 0xa3fd4fe2, 0xa3fd4fe2, 0x9455a3c2, 0x9455a3c2, 0x9455a3c2, 0xe26e3310, 0xe26e3310, 0xe26e3310, 0x59c36f00, 0xa87078ee, 0xa87078ee, 0x59c36f00, }, 20 }, + { "gfxterm_red", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x91306ec6, 0x86afd55f, 0x91306ec6, 0xb0176694, 0xaa4593fe, 0xaa4593fe, 0x7382c9ba, 0x7382c9ba, 0x7382c9ba, 0x1a3a724, 0x1a3a724, 0x1a3a724, 0xefa4a180, 0xefa4a180, 0xefa4a180, 0xaa4593fe, 0xb0176694, 0xb0176694, 0xaa4593fe, }, 20 }, + { "gfxterm_red", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x48e9c7c, 0xe838a250, 0x48e9c7c, 0xa076757e, 0xc9cbf769, 0xc9cbf769, 0x3c2c18d0, 0x3c2c18d0, 0x3c2c18d0, 0x8ccdd106, 0x8ccdd106, 0x8ccdd106, 0x7afdad5b, 0x7afdad5b, 0x7afdad5b, 0xc9cbf769, 0xa076757e, 0xa076757e, 0xc9cbf769, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x5bf4143b, 0xae073ebc, 0x5bf4143b, 0x9ceeeaa, 0x9813a416, 0x9813a416, 0xa85652ac, 0xa85652ac, 0xa85652ac, 0x9a845a48, 0x9a845a48, 0x9a845a48, 0xa9038135, 0xa9038135, 0xa9038135, 0x9813a416, 0x9ceeeaa, 0x9ceeeaa, 0x9813a416, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbd34a4fd, 0x62f11989, 0xbd34a4fd, 0x2f699dd0, 0x5fcf013d, 0x5fcf013d, 0xeedf78d6, 0xeedf78d6, 0xeedf78d6, 0x974d977e, 0x974d977e, 0x974d977e, 0x56ab2539, 0x56ab2539, 0x56ab2539, 0x5fcf013d, 0x2f699dd0, 0x2f699dd0, 0x5fcf013d, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x45d0878, 0xeba1f163, 0x45d0878, 0xec51a5d6, 0xdd28f52b, 0xdd28f52b, 0x9515070, 0x9515070, 0x9515070, 0x63c3ed87, 0x63c3ed87, 0x63c3ed87, 0xb5d9ba52, 0xb5d9ba52, 0xb5d9ba52, 0xdd28f52b, 0xec51a5d6, 0xec51a5d6, 0xdd28f52b, }, 20 }, + { "gfxterm_red", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5ada9562, 0x92c24cb5, 0x5ada9562, 0xa87078ee, 0x59c36f00, 0x59c36f00, 0xa3fd4fe2, 0xa3fd4fe2, 0xa3fd4fe2, 0x9455a3c2, 0x9455a3c2, 0x9455a3c2, 0xe26e3310, 0xe26e3310, 0xe26e3310, 0x59c36f00, 0xa87078ee, 0xa87078ee, 0x59c36f00, }, 20 }, + { "gfxterm_red", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x91306ec6, 0x86afd55f, 0x91306ec6, 0xb0176694, 0xaa4593fe, 0xaa4593fe, 0x7382c9ba, 0x7382c9ba, 0x7382c9ba, 0x1a3a724, 0x1a3a724, 0x1a3a724, 0xefa4a180, 0xefa4a180, 0xefa4a180, 0xaa4593fe, 0xb0176694, 0xb0176694, 0xaa4593fe, }, 20 }, + { "gfxterm_red", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x48e9c7c, 0xe838a250, 0x48e9c7c, 0xa076757e, 0xc9cbf769, 0xc9cbf769, 0x3c2c18d0, 0x3c2c18d0, 0x3c2c18d0, 0x8ccdd106, 0x8ccdd106, 0x8ccdd106, 0x7afdad5b, 0x7afdad5b, 0x7afdad5b, 0xc9cbf769, 0xa076757e, 0xa076757e, 0xc9cbf769, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x9120de67, 0xc19a0fcd, 0x9120de67, 0x44c1dda9, 0x5387d57f, 0x5387d57f, 0xfdf685d8, 0xfdf685d8, 0xfdf685d8, 0x9698bdef, 0x9698bdef, 0x9698bdef, 0x7c15f2ab, 0x7c15f2ab, 0x7c15f2ab, 0x5387d57f, 0x44c1dda9, 0x44c1dda9, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x184154d1, 0x1d503bd9, 0x184154d1, 0x4b75ac8d, 0xf83ee7aa, 0xf83ee7aa, 0xae5d776f, 0xae5d776f, 0xae5d776f, 0xa14abb0c, 0xa14abb0c, 0xa14abb0c, 0xce845b6, 0xce845b6, 0xce845b6, 0xf83ee7aa, 0x4b75ac8d, 0x4b75ac8d, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xe87666b4, 0xf214363d, 0xe87666b4, 0xd5c94cc1, 0x724366e5, 0x724366e5, 0xb8d9e8e3, 0xb8d9e8e3, 0xb8d9e8e3, 0x65fbf3b, 0x65fbf3b, 0x65fbf3b, 0x86c5a833, 0x86c5a833, 0x86c5a833, 0x724366e5, 0xd5c94cc1, 0xd5c94cc1, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x25455801, 0xbdf8ad2b, 0x25455801, 0xeb922c1b, 0x5387d57f, 0x5387d57f, 0x465fd2d6, 0x465fd2d6, 0x465fd2d6, 0x7b82a9be, 0x7b82a9be, 0x7b82a9be, 0x406e3f18, 0x406e3f18, 0x406e3f18, 0x5387d57f, 0xeb922c1b, 0xeb922c1b, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb6d1d565, 0x8ef4e83b, 0xb6d1d565, 0x5ebcf5f6, 0xf83ee7aa, 0xf83ee7aa, 0xd7a503f5, 0xd7a503f5, 0xd7a503f5, 0xb290fc24, 0xb290fc24, 0xb290fc24, 0xb84c092, 0xb84c092, 0xb84c092, 0xf83ee7aa, 0x5ebcf5f6, 0x5ebcf5f6, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xc87b28a8, 0x5946cb35, 0xc87b28a8, 0x88a5fd57, 0x724366e5, 0x724366e5, 0x2b90fc8e, 0x2b90fc8e, 0x2b90fc8e, 0x96087813, 0x96087813, 0x96087813, 0x32c73ca0, 0x32c73ca0, 0x32c73ca0, 0x724366e5, 0x88a5fd57, 0x88a5fd57, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xa8076777, 0xf2a31e25, 0xa8076777, 0xbf35b130, 0x1c955882, 0x1c955882, 0xb36b5cb2, 0xb36b5cb2, 0xb36b5cb2, 0x817d8686, 0x817d8686, 0x817d8686, 0xace9b416, 0xace9b416, 0xace9b416, 0x1c955882, 0xbf35b130, 0xbf35b130, 0x1c955882, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xde4259da, 0x32b1a21b, 0xde4259da, 0x9c5d04b9, 0x4d266f7a, 0x4d266f7a, 0xea54a927, 0xea54a927, 0xea54a927, 0x13a7704, 0x13a7704, 0x13a7704, 0x33595761, 0x33595761, 0x33595761, 0x4d266f7a, 0x9c5d04b9, 0x9c5d04b9, 0x4d266f7a, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x9fc03765, 0x9cdf17e6, 0x9fc03765, 0x5f01fbae, 0x1ed9d731, 0x1ed9d731, 0x9bc2d37f, 0x9bc2d37f, 0x9bc2d37f, 0xf36225ac, 0xf36225ac, 0xf36225ac, 0x7fcecc1d, 0x7fcecc1d, 0x7fcecc1d, 0x1ed9d731, 0x5f01fbae, 0x5f01fbae, 0x1ed9d731, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x127281ce, 0x42c85064, 0x127281ce, 0xd1aa3cd6, 0x5387d57f, 0x5387d57f, 0x54b2ad21, 0x54b2ad21, 0x54b2ad21, 0x3fdc9516, 0x3fdc9516, 0x3fdc9516, 0xd551da52, 0xd551da52, 0xd551da52, 0x5387d57f, 0xd1aa3cd6, 0xd1aa3cd6, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf2b9b5f0, 0xf7a8daf8, 0xf2b9b5f0, 0xb9206400, 0xf83ee7aa, 0xf83ee7aa, 0x63cb3448, 0x63cb3448, 0x63cb3448, 0x6cdcf82b, 0x6cdcf82b, 0x6cdcf82b, 0xc17e0691, 0xc17e0691, 0xc17e0691, 0xf83ee7aa, 0xb9206400, 0xb9206400, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x994b78e5, 0x8329286c, 0x994b78e5, 0x82441b7c, 0x724366e5, 0x724366e5, 0x2083c3c9, 0x2083c3c9, 0x2083c3c9, 0x9e059411, 0x9e059411, 0x9e059411, 0x1e9f8319, 0x1e9f8319, 0x1e9f8319, 0x724366e5, 0x82441b7c, 0x82441b7c, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x6873f3d4, 0xf0ce06fe, 0x6873f3d4, 0xca743ccf, 0x5387d57f, 0x5387d57f, 0x1f34f497, 0x1f34f497, 0x1f34f497, 0x22e98fff, 0x22e98fff, 0x22e98fff, 0x19051959, 0x19051959, 0x19051959, 0x5387d57f, 0xca743ccf, 0xca743ccf, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x640a3cdf, 0x5c2f0181, 0x640a3cdf, 0xbcb04bc6, 0xf83ee7aa, 0xf83ee7aa, 0x8a8d8123, 0x8a8d8123, 0x8a8d8123, 0xefb87ef2, 0xefb87ef2, 0xefb87ef2, 0x56ac4244, 0x56ac4244, 0x56ac4244, 0xf83ee7aa, 0xbcb04bc6, 0xbcb04bc6, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xaf28bcb6, 0x3e155f2b, 0xaf28bcb6, 0x1ad2ad3c, 0x724366e5, 0x724366e5, 0x23329590, 0x23329590, 0x23329590, 0x9eaa110d, 0x9eaa110d, 0x9eaa110d, 0x3a6555be, 0x3a6555be, 0x3a6555be, 0x724366e5, 0x1ad2ad3c, 0x1ad2ad3c, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xf8a8cc62, 0xa20cb530, 0xf8a8cc62, 0x8eaf041b, 0x1c955882, 0x1c955882, 0x86072f57, 0x86072f57, 0x86072f57, 0xb411f563, 0xb411f563, 0xb411f563, 0x9985c7f3, 0x9985c7f3, 0x9985c7f3, 0x1c955882, 0x8eaf041b, 0x8eaf041b, 0x1c955882, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9036a827, 0x7cc553e6, 0x9036a827, 0xc550ea8d, 0x4d266f7a, 0x4d266f7a, 0x103e2373, 0x103e2373, 0x103e2373, 0xfb50fd50, 0xfb50fd50, 0xfb50fd50, 0xc933dd35, 0xc933dd35, 0xc933dd35, 0x4d266f7a, 0xc550ea8d, 0xc550ea8d, 0x4d266f7a, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xddfc793c, 0xdee359bf, 0xddfc793c, 0xb0605af0, 0x1ed9d731, 0x1ed9d731, 0xb81f75e2, 0xb81f75e2, 0xb81f75e2, 0xd0bf8331, 0xd0bf8331, 0xd0bf8331, 0x5c136a80, 0x5c136a80, 0x5c136a80, 0x1ed9d731, 0xb0605af0, 0xb0605af0, 0x1ed9d731, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x5077b270, 0xa58498f7, 0x5077b270, 0xf29d394a, 0x9813a416, 0x9813a416, 0xc07edf73, 0xc07edf73, 0xc07edf73, 0xf2acd797, 0xf2acd797, 0xf2acd797, 0xc12b0cea, 0xc12b0cea, 0xc12b0cea, 0x9813a416, 0xf29d394a, 0xf29d394a, 0x9813a416, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8e57eb03, 0x51925677, 0x8e57eb03, 0xd8a275cd, 0x5fcf013d, 0x5fcf013d, 0xaa4efae1, 0xaa4efae1, 0xaa4efae1, 0xd3dc1549, 0xd3dc1549, 0xd3dc1549, 0x123aa70e, 0x123aa70e, 0x123aa70e, 0x5fcf013d, 0xd8a275cd, 0xd8a275cd, 0x5fcf013d, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xc7a54f9b, 0x2859b680, 0xc7a54f9b, 0xc9b13f25, 0xdd28f52b, 0xdd28f52b, 0x64978e18, 0x64978e18, 0x64978e18, 0xe0533ef, 0xe0533ef, 0xe0533ef, 0xd81f643a, 0xd81f643a, 0xd81f643a, 0xdd28f52b, 0xc9b13f25, 0xc9b13f25, 0xdd28f52b, }, 20 }, + { "gfxterm_high", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7c405813, 0xb45881c4, 0x7c405813, 0xd2257bc8, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd2257bc8, 0xd2257bc8, 0x59c36f00, }, 20 }, + { "gfxterm_high", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8a5abcca, 0x9dc50753, 0x8a5abcca, 0x11349bd4, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x11349bd4, 0x11349bd4, 0xaa4593fe, }, 20 }, + { "gfxterm_high", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xf12c93f6, 0x1d9aadda, 0xf12c93f6, 0x4b7b64da, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x4b7b64da, 0x4b7b64da, 0xc9cbf769, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xac0bec02, 0x59f8c685, 0xac0bec02, 0x887af3a3, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x887af3a3, 0x887af3a3, 0x9813a416, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x79766a45, 0xa6b3d731, 0x79766a45, 0xbfa0e337, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0xbfa0e337, 0xbfa0e337, 0x5fcf013d, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe66acd38, 0x9963423, 0xe66acd38, 0x36683ffa, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x36683ffa, 0x36683ffa, 0xdd28f52b, }, 20 }, + { "gfxterm_high", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7c405813, 0xb45881c4, 0x7c405813, 0xd2257bc8, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd2257bc8, 0xd2257bc8, 0x59c36f00, }, 20 }, + { "gfxterm_high", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x8a5abcca, 0x9dc50753, 0x8a5abcca, 0x11349bd4, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x11349bd4, 0x11349bd4, 0xaa4593fe, }, 20 }, + { "gfxterm_high", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xf12c93f6, 0x1d9aadda, 0xf12c93f6, 0x4b7b64da, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x4b7b64da, 0x4b7b64da, 0xc9cbf769, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x777a27c3, 0x27c0f669, 0x777a27c3, 0x2d17f90b, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x2d17f90b, 0x2d17f90b, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x41be488, 0x10a8b80, 0x41be488, 0x8ef5079, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x8ef5079, 0x8ef5079, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x829e1c0b, 0x98fc4c82, 0x829e1c0b, 0xe851600f, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xe851600f, 0xe851600f, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x988bff89, 0x360aa3, 0x988bff89, 0xb969ebc8, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xb969ebc8, 0xb969ebc8, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1af0e1a7, 0x22d5dcf9, 0x1af0e1a7, 0xb14bdac7, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0xb14bdac7, 0xb14bdac7, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x215221e5, 0xb06fc278, 0x215221e5, 0x5efe916d, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x5efe916d, 0x5efe916d, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xe11a4694, 0xbbbe3fc6, 0xe11a4694, 0x1b4fe3cd, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x1b4fe3cd, 0x1b4fe3cd, 0x1c955882, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xefbaabe7, 0x3495026, 0xefbaabe7, 0xcd72e5e5, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xcd72e5e5, 0xcd72e5e5, 0x4d266f7a, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x3c0ef702, 0x3f11d781, 0x3c0ef702, 0xa76922cf, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xa76922cf, 0xa76922cf, 0x1ed9d731, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x77cd4576, 0x277794dc, 0x77cd4576, 0x3b992568, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x3b992568, 0x3b992568, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc3dd5340, 0xc6cc3c48, 0xc3dd5340, 0xd784ce1d, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0xd784ce1d, 0xd784ce1d, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xe7d07de8, 0xfdb22d61, 0xe7d07de8, 0xabaf4800, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xabaf4800, 0xabaf4800, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x95de900c, 0xd636526, 0x95de900c, 0xd8ec3f4c, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xd8ec3f4c, 0xd8ec3f4c, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x30b67eb, 0x3b2e5ab5, 0x30b67eb, 0x98670b01, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0x98670b01, 0x98670b01, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xd983e2ac, 0x48be0131, 0xd983e2ac, 0x530b9651, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x530b9651, 0x530b9651, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x9a81713b, 0xc0250869, 0x9a81713b, 0x1e1ca5c, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x1e1ca5c, 0x1e1ca5c, 0x1c955882, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x96e0b961, 0x7a1342a0, 0x96e0b961, 0xa351e8aa, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xa351e8aa, 0xa351e8aa, 0x4d266f7a, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe8167345, 0xeb0953c6, 0xe8167345, 0xde2c498f, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xde2c498f, 0xde2c498f, 0x1ed9d731, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x4dffe2bf, 0xb80cc838, 0x4dffe2bf, 0x995e8cb5, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x995e8cb5, 0x995e8cb5, 0x9813a416, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xdfa7599b, 0x62e4ef, 0xdfa7599b, 0xddd9770a, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0xddd9770a, 0xddd9770a, 0x5fcf013d, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd0b32d83, 0x3f4fd498, 0xd0b32d83, 0xe6a90251, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0xe6a90251, 0xe6a90251, 0xdd28f52b, }, 20 }, { "videotest", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x7f1853ba, 0x7f1853ba, 0x7f1853ba, 0x7f1853ba, 0x7f1853ba, }, 5 }, { "videotest", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xff1957f0, 0xff1957f0, 0xff1957f0, 0xff1957f0, 0xff1957f0, }, 5 }, { "videotest", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xcb45d8c5, 0xcb45d8c5, 0xcb45d8c5, 0xcb45d8c5, 0xcb45d8c5, }, 5 }, diff --git a/grub-core/tests/video_checksum.c b/grub-core/tests/video_checksum.c index a11e2dd85..fff179cc1 100644 --- a/grub-core/tests/video_checksum.c +++ b/grub-core/tests/video_checksum.c @@ -469,7 +469,7 @@ grub_video_checksum_get_modename (void) return buf; } -//#define GENERATE_MODE 1 +#define GENERATE_MODE 1 //#define SAVE_ALL_IMAGES //#define COLLECT_TIME_STATISTICS 1 diff --git a/include/grub/normal.h b/include/grub/normal.h index c32bc96a0..d753fc184 100644 --- a/include/grub/normal.h +++ b/include/grub/normal.h @@ -48,9 +48,23 @@ extern int grub_normal_exit_level; /* Defined in `main.c'. */ void grub_enter_normal_mode (const char *config); void grub_normal_execute (const char *config, int nested, int batch); -void grub_menu_init_page (int nested, int edit, int *num_entries, +struct grub_term_screen_geometry +{ + /* The number of entries shown at a time. */ + int num_entries; + int first_entry_y; + int first_entry_x; + int entry_width; + int timeout_y; + int timeout_lines; + int border; + int right_margin; +}; + +void grub_menu_init_page (int nested, int edit, + struct grub_term_screen_geometry *geo, struct grub_term_output *term); -void grub_normal_init_page (struct grub_term_output *term); +void grub_normal_init_page (struct grub_term_output *term, int y); char *grub_file_getline (grub_file_t file); void grub_cmdline_run (int nested); diff --git a/include/grub/term.h b/include/grub/term.h index 565d14f7b..9ba33f2ec 100644 --- a/include/grub/term.h +++ b/include/grub/term.h @@ -124,25 +124,12 @@ grub_term_color_state; /* Menu-related geometrical constants. */ -/* The number of lines of "GRUB version..." at the top. */ -#define GRUB_TERM_INFO_HEIGHT 1 - /* The number of columns/lines between messages/borders/etc. */ #define GRUB_TERM_MARGIN 1 /* The number of columns of scroll information. */ #define GRUB_TERM_SCROLL_WIDTH 1 -/* The Y position of the top border. */ -#define GRUB_TERM_TOP_BORDER_Y (GRUB_TERM_MARGIN + GRUB_TERM_INFO_HEIGHT \ - + GRUB_TERM_MARGIN) - -/* The X position of the left border. */ -#define GRUB_TERM_LEFT_BORDER_X GRUB_TERM_MARGIN - -/* The Y position of the first entry. */ -#define GRUB_TERM_FIRST_ENTRY_Y (GRUB_TERM_TOP_BORDER_Y + 1) - struct grub_term_input { /* The next terminal. */ @@ -340,13 +327,6 @@ static inline unsigned grub_term_height (struct grub_term_output *term) return (term->getwh(term)&0xFF); } -/* The width of the border. */ -static inline unsigned -grub_term_border_width (struct grub_term_output *term) -{ - return grub_term_width (term) - GRUB_TERM_MARGIN * 2; -} - static inline grub_uint16_t grub_term_getxy (struct grub_term_output *term) { diff --git a/include/grub/unicode.h b/include/grub/unicode.h index d38ddbf62..07a2dec25 100644 --- a/include/grub/unicode.h +++ b/include/grub/unicode.h @@ -210,6 +210,7 @@ enum GRUB_UNICODE_UPARROW = 0x2191, GRUB_UNICODE_RIGHTARROW = 0x2192, GRUB_UNICODE_DOWNARROW = 0x2193, + GRUB_UNICODE_UPDOWNARROW = 0x2195, GRUB_UNICODE_LIGHT_HLINE = 0x2500, GRUB_UNICODE_HLINE = 0x2501, GRUB_UNICODE_LIGHT_VLINE = 0x2502, From 17806392f18bec10aa8e29ce8cc0b9cfb91809d5 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Tue, 14 May 2013 20:54:05 +0400 Subject: [PATCH 09/73] * gentpl.py: Replace EXTRA_DIST with dist_noinst_DATA or dist__DATA. EXTRA_DIST is ignored by automake inside false conditions. * conf/Makefile.common: define dist_grubconf_DATA --- ChangeLog | 7 +++++++ conf/Makefile.common | 2 +- gentpl.py | 15 +++++++-------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index aff128113..e40ca0a4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-05-14 Andrey Borzenkov + + * gentpl.py: Replace EXTRA_DIST with dist_noinst_DATA or + dist__DATA. EXTRA_DIST is ignored by automake inside + false conditions. + * conf/Makefile.common: define dist_grubconf_DATA + 2013-05-14 Vladimir Serbinenko Progressively skip menu elements on small terminals rather diff --git a/conf/Makefile.common b/conf/Makefile.common index ca1cb17f6..70bbf8b24 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -151,7 +151,7 @@ bin_PROGRAMS = platform_DATA = sbin_PROGRAMS = check_SCRIPTS = -grubconf_DATA = +dist_grubconf_DATA = check_PROGRAMS = noinst_SCRIPTS = noinst_PROGRAMS = diff --git a/gentpl.py b/gentpl.py index 22a8b0e34..cc56f7d97 100644 --- a/gentpl.py +++ b/gentpl.py @@ -382,7 +382,7 @@ def module(platform): r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", extra_dist()) + r += gvar_add("dist_noinst_DATA", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -410,7 +410,7 @@ def kernel(platform): r += var_set(cname() + "_STRIPFLAGS", "$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) " + platform_stripflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", extra_dist()) + r += gvar_add("dist_noinst_DATA", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -443,7 +443,7 @@ def image(platform): r += var_set(cname() + "_OBJCOPYFLAGS", "$(OBJCOPYFLAGS_IMAGE) " + platform_objcopyflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", extra_dist()) + r += gvar_add("dist_noinst_DATA", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -476,7 +476,7 @@ def library(platform): r += var_add(cname() + "_CCASFLAGS", first_time("$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) ") + platform_ccasflags(platform)) # r += var_add(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", extra_dist()) + r += gvar_add("dist_noinst_DATA", extra_dist()) r += first_time(gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)")) r += first_time(gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)")) return r @@ -515,15 +515,14 @@ def program(platform, test=False): r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", extra_dist()) + r += gvar_add("dist_noinst_DATA", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") return r def data(platform): - r = gvar_add("EXTRA_DIST", platform_sources(platform)) - r += gvar_add("EXTRA_DIST", extra_dist()) - r += var_add(installdir() + "_DATA", platform_sources(platform)) + r = var_add("dist_" + installdir() + "_DATA", platform_sources(platform)) + r += gvar_add("dist_noinst_DATA", extra_dist()) return r def script(platform): From 1359e4740a728c7ba516a4210157064fc97e04ea Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 15 May 2013 10:11:25 +0200 Subject: [PATCH 10/73] * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix empty path checking. Reported by: Francesco Lavra. --- ChangeLog | 6 ++++++ grub-core/kern/corecmd.c | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e40ca0a4a..b59e31134 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-05-15 Vladimir Serbinenko + + * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix empty path + checking. + Reported by: Francesco Lavra. + 2013-05-14 Andrey Borzenkov * gentpl.py: Replace EXTRA_DIST with dist_noinst_DATA or diff --git a/grub-core/kern/corecmd.c b/grub-core/kern/corecmd.c index cfab676dc..e1bb4832e 100644 --- a/grub-core/kern/corecmd.c +++ b/grub-core/kern/corecmd.c @@ -134,18 +134,18 @@ grub_core_cmd_ls (struct grub_command *cmd __attribute__ ((unused)), fs = grub_fs_probe (dev); path = grub_strchr (argv[0], ')'); - if (! path) + if (! *path) path = argv[0]; else path++; - if (! path && ! device_name) + if (! *path && ! device_name) { grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument"); goto fail; } - if (! path) + if (! *path) { if (grub_errno == GRUB_ERR_UNKNOWN_FS) grub_errno = GRUB_ERR_NONE; From 1e908b34a6c13ac04362a1c71799f2bf31908760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szymczyszyn?= Date: Wed, 15 May 2013 17:26:49 +0200 Subject: [PATCH 11/73] * grub-core/partmap/dfly.c: New partition map. --- ChangeLog | 4 + Makefile.util.def | 1 + grub-core/Makefile.core.def | 5 + grub-core/partmap/dfly.c | 133 +++++++++++++++++++++++++++ tests/dfly-mbr-mbexample.dfly.img.gz | Bin 0 -> 124 bytes tests/dfly-mbr-mbexample.mbr.img.gz | Bin 0 -> 41 bytes tests/partmap_test.in | 17 ++++ 7 files changed, 160 insertions(+) create mode 100644 grub-core/partmap/dfly.c create mode 100644 tests/dfly-mbr-mbexample.dfly.img.gz create mode 100644 tests/dfly-mbr-mbexample.mbr.img.gz diff --git a/ChangeLog b/ChangeLog index b59e31134..e2e38f307 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-15 Radosław Szymczyszyn + + * grub-core/partmap/dfly.c: New partition map. + 2013-05-15 Vladimir Serbinenko * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix empty path diff --git a/Makefile.util.def b/Makefile.util.def index 6cc15cbf2..17fdfa569 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -130,6 +130,7 @@ library = { common = grub-core/partmap/dvh.c; common = grub-core/partmap/sunpc.c; common = grub-core/partmap/bsdlabel.c; + common = grub-core/partmap/dfly.c; common = grub-core/script/function.c; common = grub-core/script/lexer.c; common = grub-core/script/main.c; diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 602b49765..b63d33d0f 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1652,6 +1652,11 @@ module = { common = partmap/sunpc.c; }; +module = { + name = part_dfly; + common = partmap/dfly.c; +}; + module = { name = msdospart; common = parttool/msdospart.c; diff --git a/grub-core/partmap/dfly.c b/grub-core/partmap/dfly.c new file mode 100644 index 000000000..e72b799e4 --- /dev/null +++ b/grub-core/partmap/dfly.c @@ -0,0 +1,133 @@ +/* dfly.c - Read DragonFly BSD disklabel64. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static struct grub_partition_map grub_dfly_partition_map; + +#define GRUB_PARTITION_DISKLABEL64_HEADER_SIZE 200 + +/* Full entry is 64 bytes however we really care only + about offset and size which are in first 16 bytes. + Avoid using too much stack. */ +#define GRUB_PARTITION_DISKLABEL64_ENTRY_SIZE 64 +struct grub_partition_disklabel64_entry +{ + grub_uint64_t boffset; + grub_uint64_t bsize; +}; + +/* Full entry is 200 bytes however we really care only + about magic and number of partitions which are in first 16 bytes. + Avoid using too much stack. */ +struct grub_partition_disklabel64 +{ + grub_uint32_t magic; +#define GRUB_DISKLABEL64_MAGIC ((grub_uint32_t)0xc4464c59) + grub_uint32_t crc; + grub_uint32_t unused; + grub_uint32_t npartitions; +}; + +static grub_err_t +dfly_partition_map_iterate (grub_disk_t disk, + grub_partition_iterate_hook_t hook, + void *hook_data) +{ + struct grub_partition part; + unsigned partno, pos; + struct grub_partition_disklabel64 label; + + part.partmap = &grub_dfly_partition_map; + + if (grub_disk_read (disk, 1, 0, sizeof (label), &label)) + return grub_errno; + + if (label.magic != grub_cpu_to_le32_compile_time (GRUB_DISKLABEL64_MAGIC)) + { + grub_dprintf ("partition", + "bad magic (found 0x%" PRIxGRUB_UINT32_T "; " + "wanted 0x%" PRIxGRUB_UINT32_T ")\n", + grub_le_to_cpu32 (label.magic), + GRUB_DISKLABEL64_MAGIC); + return grub_error (GRUB_ERR_BAD_PART_TABLE, "disklabel64 not found"); + } + + pos = GRUB_PARTITION_DISKLABEL64_HEADER_SIZE + GRUB_DISK_SECTOR_SIZE; + + for (partno = 0; + partno < grub_le_to_cpu32 (label.npartitions); ++partno) + { + grub_disk_addr_t sector = pos >> GRUB_DISK_SECTOR_BITS; + grub_off_t offset = pos & (GRUB_DISK_SECTOR_SIZE - 1); + struct grub_partition_disklabel64_entry dpart; + + pos += GRUB_PARTITION_DISKLABEL64_ENTRY_SIZE; + if (grub_disk_read (disk, sector, offset, sizeof (dpart), &dpart)) + return grub_errno; + + grub_dprintf ("partition", + "partition %2d: offset 0x%" PRIxGRUB_UINT64_T ", " + "size 0x%" PRIxGRUB_UINT64_T "\n", + partno, + grub_le_to_cpu64 (dpart.boffset), + grub_le_to_cpu64 (dpart.bsize)); + + /* Is partition initialized? */ + if (dpart.bsize == 0) + continue; + + part.number = partno; + part.start = grub_le_to_cpu64 (dpart.boffset) >> GRUB_DISK_SECTOR_BITS; + part.len = grub_le_to_cpu64 (dpart.bsize) >> GRUB_DISK_SECTOR_BITS; + + /* This is counter-intuitive, but part.offset and sector have + * the same type, and offset (NOT part.offset) is guaranteed + * to fit into part.index. */ + part.offset = sector; + part.index = offset; + + if (hook (disk, &part, hook_data)) + return grub_errno; + } + + return GRUB_ERR_NONE; +} + +/* Partition map type. */ +static struct grub_partition_map grub_dfly_partition_map = +{ + .name = "dfly", + .iterate = dfly_partition_map_iterate, +}; + +GRUB_MOD_INIT(part_dfly) +{ + grub_partition_map_register (&grub_dfly_partition_map); +} + +GRUB_MOD_FINI(part_dfly) +{ + grub_partition_map_unregister (&grub_dfly_partition_map); +} diff --git a/tests/dfly-mbr-mbexample.dfly.img.gz b/tests/dfly-mbr-mbexample.dfly.img.gz new file mode 100644 index 0000000000000000000000000000000000000000..b63595d4eb5cba0220718a85a94dc15d54c368d6 GIT binary patch literal 124 zcmV-?0E7P@iwFQArIS$r1B>)=JEBk}oX#M?0749B)R`<#dOZ^C+{nqG?s~F>;eb6O z0|*E(K!5|3u>mR$rBl*!Ds^*{igb$&83qKv+$9hVrq~H6x75EKgW}JCY>31L8=~~L en4sxrSOL{Pohbc97U=p11^@uT3_t?_0ssI^hB2uC literal 0 HcmV?d00001 diff --git a/tests/dfly-mbr-mbexample.mbr.img.gz b/tests/dfly-mbr-mbexample.mbr.img.gz new file mode 100644 index 0000000000000000000000000000000000000000..add2b13379c8b7eacd7d789ee35d56448154ce3c GIT binary patch literal 41 xcmb2|=3v;qWO5(_b8-ShBb%FB+tP1bhqxTRHUH#MX}%E35HC~Z;K9Ja001k14aooi literal 0 HcmV?d00001 diff --git a/tests/partmap_test.in b/tests/partmap_test.in index 5be7b9dfb..7786ccfbc 100644 --- a/tests/partmap_test.in +++ b/tests/partmap_test.in @@ -28,6 +28,14 @@ create_disk_image () { dd if=/dev/zero of="${name}" bs=512 count=1 seek=$((size * 2048 - 1)) status=noxfer > /dev/null } +create_dfly_image () { + name="$1" + rm -f ${name} + + gunzip < "@srcdir@/tests/dfly-mbr-mbexample.mbr.img.gz" | dd of=${name} bs=1 seek=440 count=72 conv=notrunc > /dev/null + gunzip < "@srcdir@/tests/dfly-mbr-mbexample.dfly.img.gz" | dd of=${name} bs=512 seek=33 count=1 conv=notrunc > /dev/null +} + check_output () { outfile=$1 shift @@ -461,3 +469,12 @@ ${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M list_parts part_amiga "${imgfile}" "${outfile}" check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 $disk,amiga3 $disk,amiga4 $disk,amiga5 $disk,amiga6 $disk,amiga7 +# +# DragonFly BSD disklabel64 +# + +echo "Checking DragonFly BSD disklabel64..." + +create_dfly_image "${imgfile}" +list_parts part_dfly "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos1,dfly1 $disk,msdos1,dfly2 $disk,msdos1,dfly3 From 4fd42c53f333d7090936e4170e316a452ff242c2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 21:32:01 +0200 Subject: [PATCH 12/73] * grub-core/commands/acpihalt.c: Fix handling of DSDT in presence of SSDT. --- ChangeLog | 5 +++++ grub-core/commands/acpihalt.c | 31 +++++++++++++------------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2e38f307..02bdf6fd2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c: Fix handling of DSDT in presence of + SSDT. + 2013-05-15 Radosław Szymczyszyn * grub-core/partmap/dfly.c: New partition map. diff --git a/grub-core/commands/acpihalt.c b/grub-core/commands/acpihalt.c index 6f156fd05..a6c8db659 100644 --- a/grub-core/commands/acpihalt.c +++ b/grub-core/commands/acpihalt.c @@ -22,6 +22,7 @@ #include #include #include +#include #define grub_dprintf(cond, args...) printf ( args ) #define grub_printf printf @@ -184,7 +185,6 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end, grub_uint8_t *scope, int scope_len) { grub_uint8_t *prev = table; - int sleep_type = -2; if (!ptr) ptr = table + sizeof (struct grub_acpi_table_header); @@ -233,14 +233,11 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end, switch (*ptr2) { case GRUB_ACPI_OPCODE_ZERO: - sleep_type = 0; - break; + return 0; case GRUB_ACPI_OPCODE_ONE: - sleep_type = 1; - break; + return 1; case GRUB_ACPI_OPCODE_BYTE_CONST: - sleep_type = ptr2[1]; - break; + return ptr2[1]; default: grub_printf ("Unknown data type in _S5: 0x%x\n", *ptr2); return -1; @@ -286,8 +283,7 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end, } } - grub_dprintf ("acpi", "TYP = %d\n", sleep_type); - return sleep_type; + return -2; } #ifdef GRUB_DSDT_TEST @@ -317,7 +313,7 @@ main (int argc, char **argv) } if (fread (buf, 1, len, f) != len) { - printf (_("cannot read `%s': %s"), strerror (errno)); + printf (_("cannot read `%s': %s"), argv[1], strerror (errno)); free (buf); fclose (f); return 2; @@ -369,11 +365,13 @@ grub_acpi_halt (void) grub_dprintf ("acpi", "PM1a port=%x\n", port); if (grub_memcmp (dsdt->signature, "DSDT", - sizeof (dsdt->signature)) == 0) + sizeof (dsdt->signature)) == 0 + && sleep_type < 0) sleep_type = get_sleep_type (buf, NULL, buf + dsdt->length, NULL, 0); } - else if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "SSDT", 4) == 0) + else if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "SSDT", 4) == 0 + && sleep_type < 0) { struct grub_acpi_table_header *ssdt = (struct grub_acpi_table_header *) (grub_addr_t) *entry_ptr; @@ -385,13 +383,10 @@ grub_acpi_halt (void) } } + grub_dprintf ("acpi", "SLP_TYP = %d, port = 0x%x\n", sleep_type, port); if (port && sleep_type >= 0 && sleep_type < 8) - { - grub_dprintf ("acpi", "SLP_TYP = %d, port = 0x%x\n", sleep_type, port); - - grub_outw (GRUB_ACPI_SLP_EN | (sleep_type << GRUB_ACPI_SLP_TYP_OFFSET), - port & 0xffff); - } + grub_outw (GRUB_ACPI_SLP_EN | (sleep_type << GRUB_ACPI_SLP_TYP_OFFSET), + port & 0xffff); grub_millisleep (1500); From 57e0c20cb5dfc075289506b24464cf037ce9610d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 21:36:12 +0200 Subject: [PATCH 13/73] * Makefile.am, conf/Makefile.common: Fix compilation problem with some automake versions. --- ChangeLog | 5 +++++ Makefile.am | 24 ++++++++++++------------ conf/Makefile.common | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 02bdf6fd2..682936b3d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Vladimir Serbinenko + + * Makefile.am, conf/Makefile.common: Fix compilation problem with some + automake versions. + 2013-05-30 Vladimir Serbinenko * grub-core/commands/acpihalt.c: Fix handling of DSDT in presence of diff --git a/Makefile.am b/Makefile.am index 9ebe7a874..6032a3a26 100644 --- a/Makefile.am +++ b/Makefile.am @@ -71,15 +71,15 @@ starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/s if COND_STARFIELD starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files) dejavu_10.pf2: $(DJVU_FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE) + ./grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE) dejavu_12.pf2: $(DJVU_FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE) + ./grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE) dejavu_14.pf2: $(DJVU_FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE) + ./grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE) dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE) + ./grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE) dejavu_16.pf2: $(DJVU_FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE) + ./grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE) else starfield_DATA = endif @@ -88,7 +88,7 @@ EXTRA_DIST += $(starfield_theme_files) EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf unicode.pf2: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) + ./grub-mkfont -o $@ $(FONT_SOURCE) CLEANFILES += unicode.pf2 # Arrows and lines are needed to draw the menu, so always include them @@ -96,27 +96,27 @@ UNICODE_ARROWS=0x2190-0x2193 UNICODE_LINES=0x2501-0x251B ascii.pf2: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) + ./grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) CLEANFILES += ascii.pf2 euro.pf2: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) + ./grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) CLEANFILES += euro.pf2 ascii.bitmaps: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE) + ./grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE) CLEANFILES += ascii.bitmaps ascii.h: ascii.bitmaps grub-bin2h - $(builddir)/grub-bin2h ascii_bitmaps < $< > $@ + ./grub-bin2h ascii_bitmaps < $< > $@ CLEANFILES += ascii.h $(top_builddir)/grub-core/include/ascii.h widthspec.bin: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont --width-spec -o $@ $(FONT_SOURCE) + ./grub-mkfont --width-spec -o $@ $(FONT_SOURCE) CLEANFILES += widthspec.bin widthspec.h: widthspec.bin grub-bin2h - $(builddir)/grub-bin2h widthspec < $< > $@ + ./grub-bin2h widthspec < $< > $@ CLEANFILES += widthspec.h # Install config.h into platformdir diff --git a/conf/Makefile.common b/conf/Makefile.common index 70bbf8b24..7543dadc5 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -54,7 +54,7 @@ CPPFLAGS_DEFAULT += -I$(top_srcdir)/include CPPFLAGS_DEFAULT += -I$(top_builddir)/include CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/include CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/ -CCASFLAGS_DEFAULT = -DASM_FILE=1 +CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1 LDADD_KERNEL = From 4b80e43c8c796cb35fbd12c24f9bb8adbe18e702 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 21:51:34 +0200 Subject: [PATCH 14/73] * configure.ac: Add Ubuntu path to unifont and report unifont path used. --- ChangeLog | 4 ++++ configure.ac | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 682936b3d..b468a0ae4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-30 Vladimir Serbinenko + + * configure.ac: Add Ubuntu path to unifont and report unifont path used. + 2013-05-30 Vladimir Serbinenko * Makefile.am, conf/Makefile.common: Fix compilation problem with some diff --git a/configure.ac b/configure.ac index bb4071a90..c151550e4 100644 --- a/configure.ac +++ b/configure.ac @@ -277,7 +277,7 @@ fi FONT_SOURCE= for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do - for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont; do if test -f "$dir/unifont.$ext"; then FONT_SOURCE="$dir/unifont.$ext" break 2 @@ -1288,5 +1288,10 @@ echo With libzfs support: Yes else echo With libzfs support: No "($libzfs_excuse)" fi +if test "x$FONT_SOURCE" = x ; then +echo "Without unifont" +else +echo "With unifont from $FONT_SOURCE" +fi echo "*******************************************************" ] From 3cc1878faf7e5cc8c3d797cdafeeb3c92e5b46b5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 21:55:18 +0200 Subject: [PATCH 15/73] * grub-core/Makefile.am: Fix compilation problem with some automake versions. --- ChangeLog | 5 +++++ grub-core/Makefile.am | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b468a0ae4..fae4b6c19 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Vladimir Serbinenko + + * grub-core/Makefile.am: Fix compilation problem with some + automake versions. + 2013-05-30 Vladimir Serbinenko * configure.ac: Add Ubuntu path to unifont and report unifont path used. diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index c350b5ab1..bc63a55a8 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -37,7 +37,7 @@ CLEANFILES += gentrigtables # trigtables.c trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac - $(builddir)/gentrigtables > $@ + ./gentrigtables > $@ CLEANFILES += trigtables.c gensm712: video/sm712.c From f7a9c7c9d7d71a20386b566d8196f3ba76c02187 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 21:56:57 +0200 Subject: [PATCH 16/73] Add few more autogenerated files to .bzrignore --- .bzrignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.bzrignore b/.bzrignore index e33c74de4..533046727 100644 --- a/.bzrignore +++ b/.bzrignore @@ -176,3 +176,8 @@ include/grub/gcrypt/gcrypt.h include/grub/gcrypt/g10lib.h po/POTFILES.in po/POTFILES-shell.in +grub-glue-efi +grub-render-label +grub-core/gnulib/locale.h +grub-core/gnulib/unitypes.h +grub-core/gnulib/uniwidth.h From b8323067e88b9c03ea014ffd18e89e25ebd6e739 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 21:58:24 +0200 Subject: [PATCH 17/73] * grub-core/font/font.c, include/grub/font.h: Inline simple font functions. --- ChangeLog | 5 +++++ grub-core/font/font.c | 31 ------------------------------- include/grub/font.h | 34 +++++++++++++++++++++++++++++++--- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index fae4b6c19..e3bbe35fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Vladimir Serbinenko + + * grub-core/font/font.c, include/grub/font.h: Inline simple font + functions. + 2013-05-30 Vladimir Serbinenko * grub-core/Makefile.am: Fix compilation problem with some diff --git a/grub-core/font/font.c b/grub-core/font/font.c index 3a380b9a9..481c958ef 100644 --- a/grub-core/font/font.c +++ b/grub-core/font/font.c @@ -55,23 +55,6 @@ struct char_index_entry #define FONT_WEIGHT_BOLD 200 #define ASCII_BITMAP_SIZE 16 -struct grub_font -{ - char *name; - grub_file_t file; - char *family; - short point_size; - short weight; - short max_char_width; - short max_char_height; - short ascent; - short descent; - short leading; - grub_uint32_t num_chars; - struct char_index_entry *char_index; - grub_uint16_t *bmp_idx; -}; - /* Definition of font registry. */ struct grub_font_node *grub_font_list; @@ -909,20 +892,6 @@ grub_font_get_max_char_width (grub_font_t font) return font->max_char_width; } -/* Get the maximum height of any character in the font in pixels. */ -int -grub_font_get_max_char_height (grub_font_t font) -{ - return font->max_char_height; -} - -/* Get the distance in pixels from the top of characters to the baseline. */ -int -grub_font_get_ascent (grub_font_t font) -{ - return font->ascent; -} - /* Get the distance in pixels from the baseline to the lowest descenders (for instance, in a lowercase 'y', 'g', etc.). */ int diff --git a/include/grub/font.h b/include/grub/font.h index aed7e1c2b..708fa42ac 100644 --- a/include/grub/font.h +++ b/include/grub/font.h @@ -27,7 +27,25 @@ /* Forward declaration of opaque structure grub_font. Users only pass struct grub_font pointers to the font module functions, and do not have knowledge of the structure contents. */ -struct grub_font; +/* Full structure was moved here for inline function but still + shouldn't be used directly. + */ +struct grub_font +{ + char *name; + grub_file_t file; + char *family; + short point_size; + short weight; + short max_char_width; + short max_char_height; + short ascent; + short descent; + short leading; + grub_uint32_t num_chars; + struct char_index_entry *char_index; + grub_uint16_t *bmp_idx; +}; /* Font type used to access font functions. */ typedef struct grub_font *grub_font_t; @@ -93,9 +111,19 @@ const char *EXPORT_FUNC (grub_font_get_name) (grub_font_t font); int EXPORT_FUNC (grub_font_get_max_char_width) (grub_font_t font); -int EXPORT_FUNC (grub_font_get_max_char_height) (grub_font_t font); +/* Get the maximum height of any character in the font in pixels. */ +static inline int +grub_font_get_max_char_height (grub_font_t font) +{ + return font->max_char_height; +} -int EXPORT_FUNC (grub_font_get_ascent) (grub_font_t font); +/* Get the distance in pixels from the top of characters to the baseline. */ +static inline int +grub_font_get_ascent (grub_font_t font) +{ + return font->ascent; +} int EXPORT_FUNC (grub_font_get_descent) (grub_font_t font); From 6570b2050e7c56dc370142f724a143f43975107c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 30 May 2013 22:06:28 +0200 Subject: [PATCH 18/73] Move blit and fill dispatcher to appropriate files to decrease export and relocation overhead. --- ChangeLog | 5 + grub-core/video/fb/fbblit.c | 361 +++++++++++++++++++++++++++++++--- grub-core/video/fb/fbfill.c | 41 +++- grub-core/video/fb/video_fb.c | 338 +------------------------------ include/grub/fbblit.h | 162 +-------------- include/grub/fbfill.h | 26 +-- include/grub/video_fb.h | 62 +----- 7 files changed, 394 insertions(+), 601 deletions(-) diff --git a/ChangeLog b/ChangeLog index e3bbe35fa..056d1a4fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Vladimir Serbinenko + + Move blit and fill dispatcher to appropriate files to decrease export + and relocation overhead. + 2013-05-30 Vladimir Serbinenko * grub-core/font/font.c, include/grub/font.h: Inline simple font diff --git a/grub-core/video/fb/fbblit.c b/grub-core/video/fb/fbblit.c index 789507e28..972976e5c 100644 --- a/grub-core/video/fb/fbblit.c +++ b/grub-core/video/fb/fbblit.c @@ -35,7 +35,7 @@ #include /* Generic replacing blitter (slow). Works for every supported format. */ -void +static void grub_video_fbblit_replace (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, int width, int height, @@ -68,7 +68,7 @@ grub_video_fbblit_replace (struct grub_video_fbblit_info *dst, } /* Block copy replacing blitter. Works with modes multiple of 8 bits. */ -void +static void grub_video_fbblit_replace_directN (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, int width, int height, @@ -92,7 +92,7 @@ grub_video_fbblit_replace_directN (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 32bit. */ -void +static void grub_video_fbblit_replace_32bit_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -163,7 +163,7 @@ grub_video_fbblit_replace_32bit_1bit (struct grub_video_fbblit_info *dst, #ifdef GRUB_HAVE_UNALIGNED_ACCESS /* Optimized replacing blitter for 1-bit to 24-bit. */ -void +static void grub_video_fbblit_replace_24bit_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -252,7 +252,7 @@ grub_video_fbblit_replace_24bit_1bit (struct grub_video_fbblit_info *dst, #endif /* Optimized replacing blitter for 1-bit to 16-bit. */ -void +static void grub_video_fbblit_replace_16bit_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -321,7 +321,7 @@ grub_video_fbblit_replace_16bit_1bit (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 8-bit. */ -void +static void grub_video_fbblit_replace_8bit_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -389,7 +389,7 @@ grub_video_fbblit_replace_8bit_1bit (struct grub_video_fbblit_info *dst, } } -void +static void grub_video_fbblit_replace_32bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -434,7 +434,7 @@ grub_video_fbblit_replace_32bit_indexa (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 16bit. */ -void +static void grub_video_fbblit_replace_24bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -488,7 +488,7 @@ grub_video_fbblit_replace_24bit_indexa (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 16bit. */ -void +static void grub_video_fbblit_replace_16bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -533,7 +533,7 @@ grub_video_fbblit_replace_16bit_indexa (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 8bit. */ -void +static void grub_video_fbblit_replace_8bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -578,7 +578,7 @@ grub_video_fbblit_replace_8bit_indexa (struct grub_video_fbblit_info *dst, } -void +static void grub_video_fbblit_blend_32bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -620,7 +620,7 @@ grub_video_fbblit_blend_32bit_indexa (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 16bit. */ -void +static void grub_video_fbblit_blend_24bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -675,7 +675,7 @@ grub_video_fbblit_blend_24bit_indexa (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 16bit. */ -void +static void grub_video_fbblit_blend_16bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -717,7 +717,7 @@ grub_video_fbblit_blend_16bit_indexa (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for 1-bit to 8bit. */ -void +static void grub_video_fbblit_blend_8bit_indexa (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -760,7 +760,7 @@ grub_video_fbblit_blend_8bit_indexa (struct grub_video_fbblit_info *dst, /* Optimized replacing blitter for RGBX8888 to BGRX8888. */ -void +static void grub_video_fbblit_replace_BGRX8888_RGBX8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -813,7 +813,7 @@ grub_video_fbblit_replace_BGRX8888_RGBX8888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGB888 to BGRX8888. */ -void +static void grub_video_fbblit_replace_BGRX8888_RGB888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -864,7 +864,7 @@ grub_video_fbblit_replace_BGRX8888_RGB888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGBX8888 to BGR888. */ -void +static void grub_video_fbblit_replace_BGR888_RGBX8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -918,7 +918,7 @@ grub_video_fbblit_replace_BGR888_RGBX8888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGB888 to BGR888. */ -void +static void grub_video_fbblit_replace_BGR888_RGB888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -959,7 +959,7 @@ grub_video_fbblit_replace_BGR888_RGB888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGB888 to RGBX8888. */ -void +static void grub_video_fbblit_replace_RGBX8888_RGB888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1006,7 +1006,7 @@ grub_video_fbblit_replace_RGBX8888_RGB888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGBX8888 to RGB888. */ -void +static void grub_video_fbblit_replace_RGB888_RGBX8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1055,7 +1055,7 @@ grub_video_fbblit_replace_RGB888_RGBX8888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGBX8888 to indexed color. */ -void +static void grub_video_fbblit_replace_index_RGBX8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1098,7 +1098,7 @@ grub_video_fbblit_replace_index_RGBX8888 (struct grub_video_fbblit_info *dst, } /* Optimized replacing blitter for RGB888 to indexed color. */ -void +static void grub_video_fbblit_replace_index_RGB888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1146,7 +1146,7 @@ grub_video_fbblit_replace_index_RGB888 (struct grub_video_fbblit_info *dst, } /* Generic blending blitter. Works for every supported format. */ -void +static void grub_video_fbblit_blend (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, int width, int height, @@ -1207,7 +1207,7 @@ grub_video_fbblit_blend (struct grub_video_fbblit_info *dst, } /* Optimized blending blitter for RGBA8888 to BGRA8888. */ -void +static void grub_video_fbblit_blend_BGRA8888_RGBA8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1288,7 +1288,7 @@ grub_video_fbblit_blend_BGRA8888_RGBA8888 (struct grub_video_fbblit_info *dst, } /* Optimized blending blitter for RGBA8888 to BGR888. */ -void +static void grub_video_fbblit_blend_BGR888_RGBA8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1382,7 +1382,7 @@ grub_video_fbblit_blend_BGR888_RGBA8888 (struct grub_video_fbblit_info *dst, } /* Optimized blending blitter for RGBA888 to RGBA8888. */ -void +static void grub_video_fbblit_blend_RGBA8888_RGBA8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1454,7 +1454,7 @@ grub_video_fbblit_blend_RGBA8888_RGBA8888 (struct grub_video_fbblit_info *dst, } /* Optimized blending blitter for RGBA8888 to RGB888. */ -void +static void grub_video_fbblit_blend_RGB888_RGBA8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1545,7 +1545,7 @@ grub_video_fbblit_blend_RGB888_RGBA8888 (struct grub_video_fbblit_info *dst, } /* Optimized blending blitter for RGBA8888 to indexed color. */ -void +static void grub_video_fbblit_blend_index_RGBA8888 (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1615,7 +1615,7 @@ grub_video_fbblit_blend_index_RGBA8888 (struct grub_video_fbblit_info *dst, } /* Optimized blending blitter for 1-bit to XXXA8888. */ -void +static void grub_video_fbblit_blend_XXXA8888_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1714,7 +1714,7 @@ grub_video_fbblit_blend_XXXA8888_1bit (struct grub_video_fbblit_info *dst, /* Optimized blending blitter for 1-bit to XXX888. */ #ifdef GRUB_HAVE_UNALIGNED_ACCESS -void +static void grub_video_fbblit_blend_XXX888_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1820,7 +1820,7 @@ grub_video_fbblit_blend_XXX888_1bit (struct grub_video_fbblit_info *dst, #endif /* Optimized blending blitter for 1-bit to XXX888. */ -void +static void grub_video_fbblit_blend_XXX565_1bit (struct grub_video_fbblit_info *dst, struct grub_video_fbblit_info *src, int x, int y, @@ -1915,3 +1915,302 @@ grub_video_fbblit_blend_XXX565_1bit (struct grub_video_fbblit_info *dst, GRUB_VIDEO_FB_ADVANCE_POINTER (dstptr, dstrowskip); } } + +/* NOTE: This function assumes that given coordinates are within bounds of + handled data. */ +void +grub_video_fb_dispatch_blit (struct grub_video_fbblit_info *target, + struct grub_video_fbblit_info *source, + enum grub_video_blit_operators oper, int x, int y, + unsigned int width, unsigned int height, + int offset_x, int offset_y) +{ + if (oper == GRUB_VIDEO_BLIT_REPLACE) + { + /* Try to figure out more optimized version for replace operator. */ + switch (source->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + grub_video_fbblit_replace_directN (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + grub_video_fbblit_replace_BGRX8888_RGBX8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_BGR_888: + grub_video_fbblit_replace_BGR888_RGBX8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + grub_video_fbblit_replace_RGB888_RGBX8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: + grub_video_fbblit_replace_index_RGBX8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + grub_video_fbblit_replace_BGRX8888_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + grub_video_fbblit_replace_RGBX8888_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_BGR_888: + grub_video_fbblit_replace_BGR888_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + grub_video_fbblit_replace_directN (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: + grub_video_fbblit_replace_index_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + grub_video_fbblit_replace_directN (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR_ALPHA: + grub_video_fbblit_replace_directN (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR_ALPHA: + switch (target->mode_info->bytes_per_pixel) + { + case 4: + grub_video_fbblit_replace_32bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 3: + grub_video_fbblit_replace_24bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 2: + grub_video_fbblit_replace_16bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 1: + grub_video_fbblit_replace_8bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED: + switch (target->mode_info->bytes_per_pixel) + { + case 4: + grub_video_fbblit_replace_32bit_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; +#ifdef GRUB_HAVE_UNALIGNED_ACCESS + case 3: + grub_video_fbblit_replace_24bit_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; +#endif + case 2: + grub_video_fbblit_replace_16bit_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 1: + grub_video_fbblit_replace_8bit_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; + } + break; + default: + break; + } + + /* No optimized replace operator found, use default (slow) blitter. */ + grub_video_fbblit_replace (target, source, x, y, width, height, + offset_x, offset_y); + } + else + { + /* Try to figure out more optimized blend operator. */ + switch (source->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + grub_video_fbblit_blend_BGRA8888_RGBA8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + grub_video_fbblit_blend_RGBA8888_RGBA8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_BGR_888: + grub_video_fbblit_blend_BGR888_RGBA8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + grub_video_fbblit_blend_RGB888_RGBA8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: + grub_video_fbblit_blend_index_RGBA8888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + /* Note: There is really no alpha information here, so blend is + changed to replace. */ + + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + grub_video_fbblit_replace_BGRX8888_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + grub_video_fbblit_replace_RGBX8888_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_BGR_888: + grub_video_fbblit_replace_BGR888_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + grub_video_fbblit_replace_directN (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: + grub_video_fbblit_replace_index_RGB888 (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED: + switch (target->mode_info->blit_format) + { + case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: + case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: + grub_video_fbblit_blend_XXXA8888_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; +#ifdef GRUB_HAVE_UNALIGNED_ACCESS + case GRUB_VIDEO_BLIT_FORMAT_BGR_888: + case GRUB_VIDEO_BLIT_FORMAT_RGB_888: + grub_video_fbblit_blend_XXX888_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; +#endif + case GRUB_VIDEO_BLIT_FORMAT_BGR_565: + case GRUB_VIDEO_BLIT_FORMAT_RGB_565: + grub_video_fbblit_blend_XXX565_1bit (target, source, + x, y, width, height, + offset_x, offset_y); + return; + default: + break; + } + break; + case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR_ALPHA: + switch (target->mode_info->bytes_per_pixel) + { + case 4: + grub_video_fbblit_blend_32bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 3: + grub_video_fbblit_blend_24bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 2: + grub_video_fbblit_blend_16bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + case 1: + grub_video_fbblit_blend_8bit_indexa (target, source, + x, y, width, height, + offset_x, offset_y); + return; + } + break; + default: + break; + } + + /* No optimized blend operation found, use default (slow) blitter. */ + grub_video_fbblit_blend (target, source, x, y, width, height, + offset_x, offset_y); + } +} diff --git a/grub-core/video/fb/fbfill.c b/grub-core/video/fb/fbfill.c index 74b157bea..11816d07a 100644 --- a/grub-core/video/fb/fbfill.c +++ b/grub-core/video/fb/fbfill.c @@ -34,7 +34,7 @@ #include /* Generic filler that works for every supported mode. */ -void +static void grub_video_fbfill (struct grub_video_fbblit_info *dst, grub_video_color_t color, int x, int y, int width, int height) @@ -49,7 +49,7 @@ grub_video_fbfill (struct grub_video_fbblit_info *dst, /* Optimized filler for direct color 32 bit modes. It is assumed that color is already mapped to destination format. */ -void +static void grub_video_fbfill_direct32 (struct grub_video_fbblit_info *dst, grub_video_color_t color, int x, int y, int width, int height) @@ -78,7 +78,7 @@ grub_video_fbfill_direct32 (struct grub_video_fbblit_info *dst, /* Optimized filler for direct color 24 bit modes. It is assumed that color is already mapped to destination format. */ -void +static void grub_video_fbfill_direct24 (struct grub_video_fbblit_info *dst, grub_video_color_t color, int x, int y, int width, int height) @@ -119,7 +119,7 @@ grub_video_fbfill_direct24 (struct grub_video_fbblit_info *dst, /* Optimized filler for direct color 16 bit modes. It is assumed that color is already mapped to destination format. */ -void +static void grub_video_fbfill_direct16 (struct grub_video_fbblit_info *dst, grub_video_color_t color, int x, int y, int width, int height) @@ -148,7 +148,7 @@ grub_video_fbfill_direct16 (struct grub_video_fbblit_info *dst, /* Optimized filler for index color. It is assumed that color is already mapped to destination format. */ -void +static void grub_video_fbfill_direct8 (struct grub_video_fbblit_info *dst, grub_video_color_t color, int x, int y, int width, int height) @@ -175,3 +175,34 @@ grub_video_fbfill_direct8 (struct grub_video_fbblit_info *dst, dstptr += rowskip; } } + +void +grub_video_fb_fill_dispatch (struct grub_video_fbblit_info *target, + grub_video_color_t color, int x, int y, + unsigned int width, unsigned int height) +{ + /* Try to figure out more optimized version. Note that color is already + mapped to target format so we can make assumptions based on that. */ + switch (target->mode_info->bytes_per_pixel) + { + case 4: + grub_video_fbfill_direct32 (target, color, x, y, + width, height); + return; + case 3: + grub_video_fbfill_direct24 (target, color, x, y, + width, height); + return; + case 2: + grub_video_fbfill_direct16 (target, color, x, y, + width, height); + return; + case 1: + grub_video_fbfill_direct8 (target, color, x, y, + width, height); + return; + } + + /* No optimized version found, use default (slow) filler. */ + grub_video_fbfill (target, color, x, y, width, height); +} diff --git a/grub-core/video/fb/video_fb.c b/grub-core/video/fb/video_fb.c index 22a0128a1..f903addca 100644 --- a/grub-core/video/fb/video_fb.c +++ b/grub-core/video/fb/video_fb.c @@ -748,335 +748,11 @@ grub_video_fb_fill_rect (grub_video_color_t color, int x, int y, target.mode_info = &framebuffer.render_target->mode_info; target.data = framebuffer.render_target->data; - /* Try to figure out more optimized version. Note that color is already - mapped to target format so we can make assumptions based on that. */ - switch (target.mode_info->bytes_per_pixel) - { - case 4: - grub_video_fbfill_direct32 (&target, color, x, y, - width, height); - return GRUB_ERR_NONE; - case 3: - grub_video_fbfill_direct24 (&target, color, x, y, - width, height); - return GRUB_ERR_NONE; - case 2: - grub_video_fbfill_direct16 (&target, color, x, y, - width, height); - return GRUB_ERR_NONE; - case 1: - grub_video_fbfill_direct8 (&target, color, x, y, - width, height); - return GRUB_ERR_NONE; - } - - /* No optimized version found, use default (slow) filler. */ - grub_video_fbfill (&target, color, x, y, width, height); - + grub_video_fb_fill_dispatch (&target, color, x, y, + width, height); return GRUB_ERR_NONE; } -/* NOTE: This function assumes that given coordinates are within bounds of - handled data. */ -static void -common_blitter (struct grub_video_fbblit_info *target, - struct grub_video_fbblit_info *source, - enum grub_video_blit_operators oper, int x, int y, - unsigned int width, unsigned int height, - int offset_x, int offset_y) -{ - dirty (y, height); - - if (oper == GRUB_VIDEO_BLIT_REPLACE) - { - /* Try to figure out more optimized version for replace operator. */ - switch (source->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - grub_video_fbblit_replace_directN (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - grub_video_fbblit_replace_BGRX8888_RGBX8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_BGR_888: - grub_video_fbblit_replace_BGR888_RGBX8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - grub_video_fbblit_replace_RGB888_RGBX8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: - grub_video_fbblit_replace_index_RGBX8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - grub_video_fbblit_replace_BGRX8888_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - grub_video_fbblit_replace_RGBX8888_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_BGR_888: - grub_video_fbblit_replace_BGR888_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - grub_video_fbblit_replace_directN (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: - grub_video_fbblit_replace_index_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - grub_video_fbblit_replace_directN (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR_ALPHA: - grub_video_fbblit_replace_directN (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR_ALPHA: - switch (target->mode_info->bytes_per_pixel) - { - case 4: - grub_video_fbblit_replace_32bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 3: - grub_video_fbblit_replace_24bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 2: - grub_video_fbblit_replace_16bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 1: - grub_video_fbblit_replace_8bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED: - switch (target->mode_info->bytes_per_pixel) - { - case 4: - grub_video_fbblit_replace_32bit_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; -#ifdef GRUB_HAVE_UNALIGNED_ACCESS - case 3: - grub_video_fbblit_replace_24bit_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; -#endif - case 2: - grub_video_fbblit_replace_16bit_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 1: - grub_video_fbblit_replace_8bit_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; - } - break; - default: - break; - } - - /* No optimized replace operator found, use default (slow) blitter. */ - grub_video_fbblit_replace (target, source, x, y, width, height, - offset_x, offset_y); - } - else - { - /* Try to figure out more optimized blend operator. */ - switch (source->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - grub_video_fbblit_blend_BGRA8888_RGBA8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - grub_video_fbblit_blend_RGBA8888_RGBA8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_BGR_888: - grub_video_fbblit_blend_BGR888_RGBA8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - grub_video_fbblit_blend_RGB888_RGBA8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: - grub_video_fbblit_blend_index_RGBA8888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - /* Note: There is really no alpha information here, so blend is - changed to replace. */ - - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - grub_video_fbblit_replace_BGRX8888_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - grub_video_fbblit_replace_RGBX8888_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_BGR_888: - grub_video_fbblit_replace_BGR888_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - grub_video_fbblit_replace_directN (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR: - grub_video_fbblit_replace_index_RGB888 (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED: - switch (target->mode_info->blit_format) - { - case GRUB_VIDEO_BLIT_FORMAT_BGRA_8888: - case GRUB_VIDEO_BLIT_FORMAT_RGBA_8888: - grub_video_fbblit_blend_XXXA8888_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; -#ifdef GRUB_HAVE_UNALIGNED_ACCESS - case GRUB_VIDEO_BLIT_FORMAT_BGR_888: - case GRUB_VIDEO_BLIT_FORMAT_RGB_888: - grub_video_fbblit_blend_XXX888_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; -#endif - case GRUB_VIDEO_BLIT_FORMAT_BGR_565: - case GRUB_VIDEO_BLIT_FORMAT_RGB_565: - grub_video_fbblit_blend_XXX565_1bit (target, source, - x, y, width, height, - offset_x, offset_y); - return; - default: - break; - } - break; - case GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR_ALPHA: - switch (target->mode_info->bytes_per_pixel) - { - case 4: - grub_video_fbblit_blend_32bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 3: - grub_video_fbblit_blend_24bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 2: - grub_video_fbblit_blend_16bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - case 1: - grub_video_fbblit_blend_8bit_indexa (target, source, - x, y, width, height, - offset_x, offset_y); - return; - } - break; - default: - break; - } - - /* No optimized blend operation found, use default (slow) blitter. */ - grub_video_fbblit_blend (target, source, x, y, width, height, - offset_x, offset_y); - } -} - grub_err_t grub_video_fb_blit_bitmap (struct grub_video_bitmap *bitmap, enum grub_video_blit_operators oper, int x, int y, @@ -1162,8 +838,9 @@ grub_video_fb_blit_bitmap (struct grub_video_bitmap *bitmap, target.data = framebuffer.render_target->data; /* Do actual blitting. */ - common_blitter (&target, &source, oper, x, y, width, height, - offset_x, offset_y); + dirty (y, height); + grub_video_fb_dispatch_blit (&target, &source, oper, x, y, width, height, + offset_x, offset_y); return GRUB_ERR_NONE; } @@ -1253,8 +930,9 @@ grub_video_fb_blit_render_target (struct grub_video_fbrender_target *source, target_info.data = framebuffer.render_target->data; /* Do actual blitting. */ - common_blitter (&target_info, &source_info, oper, x, y, width, height, - offset_x, offset_y); + dirty (y, height); + grub_video_fb_dispatch_blit (&target_info, &source_info, oper, x, y, width, height, + offset_x, offset_y); return GRUB_ERR_NONE; } diff --git a/include/grub/fbblit.h b/include/grub/fbblit.h index af97dfb97..66d1005e7 100644 --- a/include/grub/fbblit.h +++ b/include/grub/fbblit.h @@ -24,159 +24,13 @@ struct grub_video_fbblit_info; +/* NOTE: This function assumes that given coordinates are within bounds of + handled data. */ void -grub_video_fbblit_replace (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_directN (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_BGRX8888_RGBX8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_BGRX8888_RGB888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_BGR888_RGBX8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_BGR888_RGB888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_RGBX8888_RGB888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_RGB888_RGBX8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_index_RGBX8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_index_RGB888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_BGRA8888_RGBA8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_BGR888_RGBA8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_RGBA8888_RGBA8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_RGB888_RGBA8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_index_RGBA8888 (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_32bit_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_24bit_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_16bit_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_replace_8bit_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_XXXA8888_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_XXX888_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -grub_video_fbblit_blend_XXX565_1bit (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); +grub_video_fb_dispatch_blit (struct grub_video_fbblit_info *target, + struct grub_video_fbblit_info *source, + enum grub_video_blit_operators oper, + int x, int y, + unsigned int width, unsigned int height, + int offset_x, int offset_y); #endif /* ! GRUB_FBBLIT_HEADER */ diff --git a/include/grub/fbfill.h b/include/grub/fbfill.h index c85fa12dd..12d164bd6 100644 --- a/include/grub/fbfill.h +++ b/include/grub/fbfill.h @@ -48,28 +48,8 @@ struct grub_video_fbrender_target }; void -grub_video_fbfill (struct grub_video_fbblit_info *dst, - grub_video_color_t color, int x, int y, - int width, int height); - -void -grub_video_fbfill_direct32 (struct grub_video_fbblit_info *dst, - grub_video_color_t color, int x, int y, - int width, int height); - -void -grub_video_fbfill_direct24 (struct grub_video_fbblit_info *dst, - grub_video_color_t color, int x, int y, - int width, int height); - -void -grub_video_fbfill_direct16 (struct grub_video_fbblit_info *dst, - grub_video_color_t color, int x, int y, - int width, int height); - -void -grub_video_fbfill_direct8 (struct grub_video_fbblit_info *dst, - grub_video_color_t color, int x, int y, - int width, int height); +grub_video_fb_fill_dispatch (struct grub_video_fbblit_info *target, + grub_video_color_t color, int x, int y, + unsigned int width, unsigned int height); #endif /* ! GRUB_FBFILL_HEADER */ diff --git a/include/grub/video_fb.h b/include/grub/video_fb.h index 88bc75d9d..d1560d982 100644 --- a/include/grub/video_fb.h +++ b/include/grub/video_fb.h @@ -118,72 +118,18 @@ EXPORT_FUNC(grub_video_fb_get_active_render_target) (struct grub_video_fbrender_ grub_err_t EXPORT_FUNC(grub_video_fb_set_active_render_target) (struct grub_video_fbrender_target *target); -void -EXPORT_FUNC (grub_video_fbblit_blend_32bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -EXPORT_FUNC (grub_video_fbblit_blend_24bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); -void -EXPORT_FUNC (grub_video_fbblit_blend_16bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); -void -EXPORT_FUNC (grub_video_fbblit_blend_8bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - - -void -EXPORT_FUNC (grub_video_fbblit_replace_32bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -EXPORT_FUNC (grub_video_fbblit_replace_24bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - -void -EXPORT_FUNC (grub_video_fbblit_replace_16bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); -void -EXPORT_FUNC (grub_video_fbblit_replace_8bit_indexa) (struct grub_video_fbblit_info *dst, - struct grub_video_fbblit_info *src, - int x, int y, - int width, int height, - int offset_x, int offset_y); - typedef grub_err_t (*grub_video_fb_set_page_t) (int page); grub_err_t -grub_video_fb_setup (unsigned int mode_type, unsigned int mode_mask, +EXPORT_FUNC (grub_video_fb_setup) (unsigned int mode_type, unsigned int mode_mask, struct grub_video_mode_info *mode_info, volatile void *page0_ptr, grub_video_fb_set_page_t set_page_in, volatile void *page1_ptr); grub_err_t -grub_video_fb_swap_buffers (void); +EXPORT_FUNC (grub_video_fb_swap_buffers) (void); grub_err_t -grub_video_fb_get_info_and_fini (struct grub_video_mode_info *mode_info, - void **framebuf); +EXPORT_FUNC (grub_video_fb_get_info_and_fini) (struct grub_video_mode_info *mode_info, + void **framebuf); #endif /* ! GRUB_VIDEO_FB_HEADER */ From fc4c4fddf68fc6704648a8ea53140dc56cbc5611 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 31 May 2013 00:42:33 +0200 Subject: [PATCH 19/73] Detach optional parts of gfxterm and integrate in with coreboot init. --- ChangeLog | 4 + gentpl.py | 2 +- grub-core/Makefile.am | 9 +- grub-core/Makefile.core.def | 36 +++-- grub-core/font/font_cmd.c | 4 +- grub-core/gfxmenu/gui_label.c | 1 + grub-core/gfxmenu/gui_list.c | 1 + grub-core/gfxmenu/gui_progress_bar.c | 1 + grub-core/gfxmenu/theme_loader.c | 1 + grub-core/kern/i386/coreboot/init.c | 8 + grub-core/kern/mips/qemu_mips/init.c | 2 - grub-core/term/gfxterm.c | 230 +++++---------------------- grub-core/term/gfxterm_background.c | 190 ++++++++++++++++++++++ grub-core/term/i386/pc/mda_text.c | 10 ++ grub-core/term/i386/pc/vga_text.c | 25 +-- grub-core/video/bitmap.c | 20 --- grub-core/video/colors.c | 1 + grub-core/video/fb/fbutil.c | 35 ---- grub-core/video/i386/coreboot/cbfb.c | 53 +++--- include/grub/bitmap.h | 21 ++- include/grub/color.h | 30 ++++ include/grub/fbutil.h | 11 +- include/grub/gfxterm.h | 18 ++- include/grub/i386/coreboot/console.h | 7 + include/grub/video.h | 6 - util/grub-render-label.c | 1 + 26 files changed, 410 insertions(+), 317 deletions(-) create mode 100644 grub-core/term/gfxterm_background.c create mode 100644 include/grub/color.h diff --git a/ChangeLog b/ChangeLog index 056d1a4fe..0da4f9e34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-30 Vladimir Serbinenko + + Detach optional parts of gfxterm and integrate in with coreboot init. + 2013-05-30 Vladimir Serbinenko Move blit and fill dispatcher to appropriate files to decrease export diff --git a/gentpl.py b/gentpl.py index cc56f7d97..776b4067e 100644 --- a/gentpl.py +++ b/gentpl.py @@ -52,7 +52,7 @@ GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"] GROUPS["usb"] = GROUPS["pci"] # If gfxterm is main output console integrate it into kernel -GROUPS["videoinkernel"] = ["mips_loongson", "mips_qemu_mips"] +GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ] GROUPS["videomodules"] = GRUB_PLATFORMS[:]; for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i) diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index bc63a55a8..f71e05c5d 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -112,6 +112,11 @@ if COND_i386_coreboot KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h endif if COND_i386_multiboot @@ -158,12 +163,10 @@ if COND_mips_qemu_mips KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap_scale.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h @@ -177,12 +180,10 @@ KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/time.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap_scale.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cs5536.h diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index b63d33d0f..ba77a21c9 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -138,6 +138,7 @@ kernel = { i386_multiboot = kern/i386/coreboot/init.c; i386_qemu = kern/i386/qemu/init.c; i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c; + i386_coreboot = video/i386/coreboot/cbfb.c; efi = disk/efi/efidisk.c; efi = kern/efi/efi.c; @@ -180,6 +181,7 @@ kernel = { mips_qemu_mips = term/ns8250.c; mips_qemu_mips = term/serial.c; mips_qemu_mips = term/at_keyboard.c; + mips_qemu_mips = commands/boot.c; mips_qemu_mips = commands/keylayouts.c; mips_qemu_mips = term/i386/pc/vga_text.c; mips_qemu_mips = kern/vga_init.c; @@ -194,6 +196,7 @@ kernel = { mips_loongson = bus/pci.c; mips_loongson = kern/mips/loongson/init.c; mips_loongson = term/at_keyboard.c; + mips_loongson = commands/boot.c; mips_loongson = term/serial.c; mips_loongson = video/sm712.c; mips_loongson = video/sis315pro.c; @@ -227,17 +230,12 @@ kernel = { videoinkernel = font/font.c; videoinkernel = font/font_cmd.c; videoinkernel = io/bufio.c; - videoinkernel = video/bitmap.c; - videoinkernel = video/bitmap_scale.c; - videoinkernel = video/colors.c; videoinkernel = video/fb/fbblit.c; videoinkernel = video/fb/fbfill.c; videoinkernel = video/fb/fbutil.c; videoinkernel = video/fb/video_fb.c; videoinkernel = video/video.c; - videoinkernel = commands/boot.c; - extra_dist = kern/i386/int.S; extra_dist = kern/i386/realmode.S; extra_dist = boot/i386/pc/lzma_decode.S; @@ -656,7 +654,12 @@ module = { name = boot; common = commands/boot.c; i386_pc = lib/i386/pc/biosnum.c; - enable = videomodules; + enable = x86; + enable = emu; + enable = sparc64_ieee1275; + enable = powerpc_ieee1275; + enable = mips_arc; + enable = ia64_efi; }; module = { @@ -1674,6 +1677,11 @@ module = { enable = videomodules; }; +module = { + name = gfxterm_background; + common = term/gfxterm_background.c; +}; + module = { name = serial; common = term/serial.c; @@ -1775,13 +1783,11 @@ module = { module = { name = bitmap; common = video/bitmap.c; - enable = videomodules; }; module = { name = bitmap_scale; common = video/bitmap_scale.c; - enable = videomodules; }; module = { @@ -1830,22 +1836,20 @@ module = { module = { name = video; common = video/video.c; - common = video/colors.c; enable = videomodules; }; +module = { + name = video_colors; + common = video/colors.c; +}; + module = { name = ieee1275_fb; ieee1275 = video/ieee1275.c; enable = powerpc_ieee1275; }; -module = { - name = coreboot_fb; - common = video/i386/coreboot/cbfb.c; - enable = i386_coreboot; -}; - module = { name = sdl; emu = video/emu/sdl.c; @@ -1959,7 +1963,7 @@ module = { module = { name = keylayouts; common = commands/keylayouts.c; - enable = videomodules; + enable = x86; }; module = { diff --git a/grub-core/font/font_cmd.c b/grub-core/font/font_cmd.c index 1d9ddea54..f3b36f2d6 100644 --- a/grub-core/font/font_cmd.c +++ b/grub-core/font/font_cmd.c @@ -61,7 +61,7 @@ lsfonts_command (grub_command_t cmd __attribute__ ((unused)), static grub_command_t cmd_loadfont, cmd_lsfonts; -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) +#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COREBOOT) void grub_font_init (void) #else GRUB_MOD_INIT(font) @@ -78,7 +78,7 @@ GRUB_MOD_INIT(font) 0, N_("List the loaded fonts.")); } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) +#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COREBOOT) void grub_font_fini (void) #else GRUB_MOD_FINI(font) diff --git a/grub-core/gfxmenu/gui_label.c b/grub-core/gfxmenu/gui_label.c index 637578f77..507c01014 100644 --- a/grub-core/gfxmenu/gui_label.c +++ b/grub-core/gfxmenu/gui_label.c @@ -23,6 +23,7 @@ #include #include #include +#include static const char *align_options[] = { diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c index 3d227eec4..12c352863 100644 --- a/grub-core/gfxmenu/gui_list.c +++ b/grub-core/gfxmenu/gui_list.c @@ -23,6 +23,7 @@ #include #include #include +#include struct grub_gui_list_impl { diff --git a/grub-core/gfxmenu/gui_progress_bar.c b/grub-core/gfxmenu/gui_progress_bar.c index b29efc016..4294b7beb 100644 --- a/grub-core/gfxmenu/gui_progress_bar.c +++ b/grub-core/gfxmenu/gui_progress_bar.c @@ -25,6 +25,7 @@ #include #include #include +#include struct grub_gui_progress_bar { diff --git a/grub-core/gfxmenu/theme_loader.c b/grub-core/gfxmenu/theme_loader.c index f9c711d3e..4aaa35219 100644 --- a/grub-core/gfxmenu/theme_loader.c +++ b/grub-core/gfxmenu/theme_loader.c @@ -30,6 +30,7 @@ #include #include #include +#include /* Construct a new box widget using ABSPATTERN to find the pixmap files for it, storing the new box instance at *BOXPTR. diff --git a/grub-core/kern/i386/coreboot/init.c b/grub-core/kern/i386/coreboot/init.c index 7cd530db8..9385411ca 100644 --- a/grub-core/kern/i386/coreboot/init.c +++ b/grub-core/kern/i386/coreboot/init.c @@ -34,6 +34,7 @@ #include #include #include +#include extern grub_uint8_t _start[]; extern grub_uint8_t _end[]; @@ -89,6 +90,8 @@ grub_machine_init (void) { modend = grub_modules_get_end (); + grub_video_coreboot_fb_early_init (); + grub_vga_text_init (); #ifdef GRUB_MACHINE_MULTIBOOT @@ -96,6 +99,11 @@ grub_machine_init (void) #endif grub_machine_mmap_iterate (heap_init, NULL); + grub_video_coreboot_fb_late_init (); + + grub_font_init (); + grub_gfxterm_init (); + grub_tsc_init (); } diff --git a/grub-core/kern/mips/qemu_mips/init.c b/grub-core/kern/mips/qemu_mips/init.c index 050f19f6a..e003976ef 100644 --- a/grub-core/kern/mips/qemu_mips/init.c +++ b/grub-core/kern/mips/qemu_mips/init.c @@ -69,8 +69,6 @@ grub_machine_init (void) grub_serial_init (); grub_boot_init (); - - grub_gfxterm_init (); } void diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index 0e5bcd95f..ae4a39030 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -28,7 +28,6 @@ #include #include #include -#include #include GRUB_MOD_LICENSE ("GPLv3+"); @@ -113,7 +112,6 @@ static struct grub_video_render_target *render_target; void (*grub_gfxterm_decorator_hook) (void) = NULL; static struct grub_gfxterm_window window; static struct grub_virtual_screen virtual_screen; -static grub_gfxterm_repaint_callback_t repaint_callback; static int repaint_scheduled = 0; static int repaint_was_scheduled = 0; @@ -121,11 +119,7 @@ static void destroy_window (void); static struct grub_video_render_target *text_layer; -static unsigned int bitmap_width; -static unsigned int bitmap_height; -static struct grub_video_bitmap *bitmap; -static int blend_text_bg; -static grub_video_rgba_color_t default_bg_color = { 0, 0, 0, 0 }; +struct grub_gfxterm_background grub_gfxterm_background; static struct grub_dirty_region dirty_region; @@ -262,7 +256,7 @@ grub_virtual_screen_setup (unsigned int x, unsigned int y, grub_video_set_active_render_target (render_target); virtual_screen.bg_color_display = - grub_video_map_rgba_color (default_bg_color); + grub_video_map_rgba_color (grub_gfxterm_background.default_bg_color); /* Clear out text buffer. */ for (i = 0; i < virtual_screen.columns * virtual_screen.rows; i++) @@ -336,7 +330,7 @@ grub_gfxterm_fullscreen (void) && !(mode_info.mode_type & GRUB_VIDEO_MODE_TYPE_UPDATING_SWAP); /* Make sure screen is set to the default background color. */ - color = grub_video_map_rgba_color (default_bg_color); + color = grub_video_map_rgba_color (grub_gfxterm_background.default_bg_color); grub_video_fill_rect (color, 0, 0, mode_info.width, mode_info.height); if (double_redraw) { @@ -395,7 +389,6 @@ grub_gfxterm_term_init (struct grub_term_output *term __attribute__ ((unused))) static void destroy_window (void) { - repaint_callback = 0; grub_virtual_screen_free (); } @@ -433,10 +426,11 @@ redraw_screen_rect (unsigned int x, unsigned int y, (unsigned *) &saved_view.height); grub_video_set_viewport (window.x, window.y, window.width, window.height); - if (bitmap) + if (grub_gfxterm_background.bitmap) { /* Render bitmap as background. */ - grub_video_blit_bitmap (bitmap, GRUB_VIDEO_BLIT_REPLACE, x, y, + grub_video_blit_bitmap (grub_gfxterm_background.bitmap, + GRUB_VIDEO_BLIT_REPLACE, x, y, x, y, width, height); @@ -445,20 +439,21 @@ redraw_screen_rect (unsigned int x, unsigned int y, color = virtual_screen.bg_color_display; /* Fill right side of the bitmap if needed. */ - if ((x + width >= bitmap_width) && (y < bitmap_height)) + if ((x + width >= grub_gfxterm_background.bitmap->mode_info.width) + && (y < grub_gfxterm_background.bitmap->mode_info.height)) { - int w = (x + width) - bitmap_width; + int w = (x + width) - grub_gfxterm_background.bitmap->mode_info.width; int h = height; unsigned int tx = x; - if (y + height >= bitmap_height) + if (y + height >= grub_gfxterm_background.bitmap->mode_info.height) { - h = bitmap_height - y; + h = grub_gfxterm_background.bitmap->mode_info.height - y; } - if (bitmap_width > tx) + if (grub_gfxterm_background.bitmap->mode_info.width > tx) { - tx = bitmap_width; + tx = grub_gfxterm_background.bitmap->mode_info.width; } /* Render background layer. */ @@ -466,14 +461,14 @@ redraw_screen_rect (unsigned int x, unsigned int y, } /* Fill bottom side of the bitmap if needed. */ - if (y + height >= bitmap_height) + if (y + height >= grub_gfxterm_background.bitmap->mode_info.height) { - int h = (y + height) - bitmap_height; + int h = (y + height) - grub_gfxterm_background.bitmap->mode_info.height; unsigned int ty = y; - if (bitmap_height > ty) + if (grub_gfxterm_background.bitmap->mode_info.height > ty) { - ty = bitmap_height; + ty = grub_gfxterm_background.bitmap->mode_info.height; } /* Render background layer. */ @@ -487,7 +482,7 @@ redraw_screen_rect (unsigned int x, unsigned int y, grub_video_fill_rect (color, x, y, width, height); } - if (blend_text_bg) + if (grub_gfxterm_background.blend_text_bg) /* Render text layer as blended. */ grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, x, y, x - virtual_screen.offset_x, @@ -504,9 +499,6 @@ redraw_screen_rect (unsigned int x, unsigned int y, grub_video_set_viewport (saved_view.x, saved_view.y, saved_view.width, saved_view.height); grub_video_set_active_render_target (render_target); - - if (repaint_callback) - repaint_callback (x, y, width, height); } static void @@ -561,8 +553,8 @@ dirty_region_add (int x, int y, unsigned int width, unsigned int height) if (repaint_scheduled) { - dirty_region_add_real (virtual_screen.offset_x, virtual_screen.offset_y, - virtual_screen.width, virtual_screen.height); + dirty_region_add_real (0, 0, + window.width, window.height); repaint_scheduled = 0; repaint_was_scheduled = 1; } @@ -707,7 +699,7 @@ real_scroll (void) return; /* If we have bitmap, re-draw screen, otherwise scroll physical screen too. */ - if (bitmap) + if (grub_gfxterm_background.bitmap) { /* Scroll physical screen. */ grub_video_set_active_render_target (text_layer); @@ -791,9 +783,6 @@ real_scroll (void) /* Draw cursor if visible. */ if (virtual_screen.cursor_state) draw_cursor (1); - - if (repaint_callback) - repaint_callback (window.x, window.y, window.width, window.height); } static void @@ -1092,145 +1081,6 @@ grub_gfxterm_refresh (struct grub_term_output *term __attribute__ ((unused))) dirty_region_reset (); } -void -grub_gfxterm_set_repaint_callback (grub_gfxterm_repaint_callback_t func) -{ - repaint_callback = func; -} - -/* Option array indices. */ -#define BACKGROUND_CMD_ARGINDEX_MODE 0 - -static const struct grub_arg_option background_image_cmd_options[] = - { - {"mode", 'm', 0, N_("Background image mode."), - /* TRANSLATORS: This refers to background image mode (stretched or - in left-top corner). Note that GRUB will accept only original - keywords stretch and normal, not the translated ones. - So please put both in translation - e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). - The percents mark the translated version. Since many people - may not know the word stretch or normal I recommend - putting the translation either here or in "Background image mode." - string. */ - N_("stretch|normal"), - ARG_TYPE_STRING}, - {0, 0, 0, 0, 0, 0} - }; - -static grub_err_t -grub_gfxterm_background_image_cmd (grub_extcmd_context_t ctxt, - int argc, char **args) -{ - struct grub_arg_list *state = ctxt->state; - - /* Check that we have video adapter active. */ - if (grub_video_get_info(NULL) != GRUB_ERR_NONE) - return grub_errno; - - /* Destroy existing background bitmap if loaded. */ - if (bitmap) - { - grub_video_bitmap_destroy (bitmap); - bitmap = 0; - blend_text_bg = 0; - - /* Mark whole screen as dirty. */ - dirty_region_add (0, 0, window.width, window.height); - } - - /* If filename was provided, try to load that. */ - if (argc >= 1) - { - /* Try to load new one. */ - grub_video_bitmap_load (&bitmap, args[0]); - if (grub_errno != GRUB_ERR_NONE) - return grub_errno; - - /* Determine if the bitmap should be scaled to fit the screen. */ - if (!state[BACKGROUND_CMD_ARGINDEX_MODE].set - || grub_strcmp (state[BACKGROUND_CMD_ARGINDEX_MODE].arg, - "stretch") == 0) - { - if (window.width != grub_video_bitmap_get_width (bitmap) - || window.height != grub_video_bitmap_get_height (bitmap)) - { - struct grub_video_bitmap *scaled_bitmap; - grub_video_bitmap_create_scaled (&scaled_bitmap, - window.width, - window.height, - bitmap, - GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST); - if (grub_errno == GRUB_ERR_NONE) - { - /* Replace the original bitmap with the scaled one. */ - grub_video_bitmap_destroy (bitmap); - bitmap = scaled_bitmap; - } - } - } - - /* If bitmap was loaded correctly, display it. */ - if (bitmap) - { - blend_text_bg = 1; - - /* Determine bitmap dimensions. */ - bitmap_width = grub_video_bitmap_get_width (bitmap); - bitmap_height = grub_video_bitmap_get_height (bitmap); - - /* Mark whole screen as dirty. */ - dirty_region_add (0, 0, window.width, window.height); - } - } - - /* All was ok. */ - grub_errno = GRUB_ERR_NONE; - return grub_errno; -} - -static grub_err_t -grub_gfxterm_background_color_cmd (grub_command_t cmd __attribute__ ((unused)), - int argc, char **args) -{ - struct grub_video_render_target *old_target; - - if (argc != 1) - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); - - /* Check that we have video adapter active. */ - if (grub_video_get_info (NULL) != GRUB_ERR_NONE) - return grub_errno; - - if (grub_video_parse_color (args[0], &default_bg_color) != GRUB_ERR_NONE) - return grub_errno; - - /* Destroy existing background bitmap if loaded. */ - if (bitmap) - { - grub_video_bitmap_destroy (bitmap); - bitmap = 0; - - /* Mark whole screen as dirty. */ - dirty_region_add (0, 0, window.width, window.height); - } - - /* Set the background and border colors. The background color needs to be - compatible with the text layer. */ - grub_video_get_active_render_target (&old_target); - grub_video_set_active_render_target (text_layer); - virtual_screen.bg_color = grub_video_map_rgba_color (default_bg_color); - grub_video_set_active_render_target (old_target); - virtual_screen.bg_color_display = - grub_video_map_rgba_color (default_bg_color); - blend_text_bg = 1; - - /* Mark whole screen as dirty. */ - dirty_region_add (0, 0, window.width, window.height); - - return GRUB_ERR_NONE; -} - static struct grub_term_output grub_video_term = { .name = "gfxterm", @@ -1250,36 +1100,40 @@ static struct grub_term_output grub_video_term = .next = 0 }; -static grub_extcmd_t background_image_cmd_handle; -static grub_command_t background_color_cmd_handle; +void +grub_gfxterm_video_update_color (void) +{ + struct grub_video_render_target *old_target; -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) + grub_video_get_active_render_target (&old_target); + grub_video_set_active_render_target (text_layer); + virtual_screen.bg_color = grub_video_map_rgba_color (grub_gfxterm_background.default_bg_color); + grub_video_set_active_render_target (old_target); + virtual_screen.bg_color_display = + grub_video_map_rgba_color (grub_gfxterm_background.default_bg_color); +} + +void +grub_gfxterm_get_dimensions (unsigned *width, unsigned *height) +{ + *width = window.width; + *height = window.height; +} + +#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COREBOOT) void grub_gfxterm_init (void) #else GRUB_MOD_INIT(gfxterm) #endif { grub_term_register_output ("gfxterm", &grub_video_term); - background_image_cmd_handle = - grub_register_extcmd ("background_image", - grub_gfxterm_background_image_cmd, 0, - N_("[-m (stretch|normal)] FILE"), - N_("Load background image for active terminal."), - background_image_cmd_options); - background_color_cmd_handle = - grub_register_command ("background_color", - grub_gfxterm_background_color_cmd, - N_("COLOR"), - N_("Set background color for active terminal.")); } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) +#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COEBOOT) void grub_gfxterm_fini (void) #else GRUB_MOD_FINI(gfxterm) #endif { - grub_unregister_command (background_color_cmd_handle); - grub_unregister_extcmd (background_image_cmd_handle); grub_term_unregister_output (&grub_video_term); } diff --git a/grub-core/term/gfxterm_background.c b/grub-core/term/gfxterm_background.c new file mode 100644 index 000000000..8da71a8c8 --- /dev/null +++ b/grub-core/term/gfxterm_background.c @@ -0,0 +1,190 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Option array indices. */ +enum + { + BACKGROUND_CMD_ARGINDEX_MODE = 0 + }; + +static const struct grub_arg_option background_image_cmd_options[] = + { + {"mode", 'm', 0, N_("Background image mode."), + /* TRANSLATORS: This refers to background image mode (stretched or + in left-top corner). Note that GRUB will accept only original + keywords stretch and normal, not the translated ones. + So please put both in translation + e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). + The percents mark the translated version. Since many people + may not know the word stretch or normal I recommend + putting the translation either here or in "Background image mode." + string. */ + N_("stretch|normal"), + ARG_TYPE_STRING}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +grub_gfxterm_background_image_cmd (grub_extcmd_context_t ctxt, + int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + + /* Check that we have video adapter active. */ + if (grub_video_get_info(NULL) != GRUB_ERR_NONE) + return grub_errno; + + /* Destroy existing background bitmap if loaded. */ + if (grub_gfxterm_background.bitmap) + { + grub_video_bitmap_destroy (grub_gfxterm_background.bitmap); + grub_gfxterm_background.bitmap = 0; + grub_gfxterm_background.blend_text_bg = 0; + + /* Mark whole screen as dirty. */ + grub_gfxterm_schedule_repaint (); + } + + /* If filename was provided, try to load that. */ + if (argc >= 1) + { + /* Try to load new one. */ + grub_video_bitmap_load (&grub_gfxterm_background.bitmap, args[0]); + if (grub_errno != GRUB_ERR_NONE) + return grub_errno; + + /* Determine if the bitmap should be scaled to fit the screen. */ + if (!state[BACKGROUND_CMD_ARGINDEX_MODE].set + || grub_strcmp (state[BACKGROUND_CMD_ARGINDEX_MODE].arg, + "stretch") == 0) + { + unsigned int width, height; + grub_gfxterm_get_dimensions (&width, &height); + if (width + != grub_video_bitmap_get_width (grub_gfxterm_background.bitmap) + || height + != grub_video_bitmap_get_height (grub_gfxterm_background.bitmap)) + { + struct grub_video_bitmap *scaled_bitmap; + grub_video_bitmap_create_scaled (&scaled_bitmap, + width, + height, + grub_gfxterm_background.bitmap, + GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST); + if (grub_errno == GRUB_ERR_NONE) + { + /* Replace the original bitmap with the scaled one. */ + grub_video_bitmap_destroy (grub_gfxterm_background.bitmap); + grub_gfxterm_background.bitmap = scaled_bitmap; + } + } + } + + /* If bitmap was loaded correctly, display it. */ + if (grub_gfxterm_background.bitmap) + { + grub_gfxterm_background.blend_text_bg = 1; + + /* Mark whole screen as dirty. */ + grub_gfxterm_schedule_repaint (); + } + } + + /* All was ok. */ + grub_errno = GRUB_ERR_NONE; + return grub_errno; +} + +static grub_err_t +grub_gfxterm_background_color_cmd (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + /* Check that we have video adapter active. */ + if (grub_video_get_info (NULL) != GRUB_ERR_NONE) + return grub_errno; + + if (grub_video_parse_color (args[0], + &grub_gfxterm_background.default_bg_color) + != GRUB_ERR_NONE) + return grub_errno; + + /* Destroy existing background bitmap if loaded. */ + if (grub_gfxterm_background.bitmap) + { + grub_video_bitmap_destroy (grub_gfxterm_background.bitmap); + grub_gfxterm_background.bitmap = 0; + + /* Mark whole screen as dirty. */ + grub_gfxterm_schedule_repaint (); + } + + /* Set the background and border colors. The background color needs to be + compatible with the text layer. */ + grub_gfxterm_video_update_color (); + grub_gfxterm_background.blend_text_bg = 1; + + /* Mark whole screen as dirty. */ + grub_gfxterm_schedule_repaint (); + + return GRUB_ERR_NONE; +} + +static grub_extcmd_t background_image_cmd_handle; +static grub_command_t background_color_cmd_handle; + +GRUB_MOD_INIT(gfxterm_background) +{ + background_image_cmd_handle = + grub_register_extcmd ("background_image", + grub_gfxterm_background_image_cmd, 0, + N_("[-m (stretch|normal)] FILE"), + N_("Load background image for active terminal."), + background_image_cmd_options); + background_color_cmd_handle = + grub_register_command ("background_color", + grub_gfxterm_background_color_cmd, + N_("COLOR"), + N_("Set background color for active terminal.")); +} + +GRUB_MOD_FINI(gfxterm_background) +{ + grub_unregister_command (background_color_cmd_handle); + grub_unregister_extcmd (background_image_cmd_handle); +} diff --git a/grub-core/term/i386/pc/mda_text.c b/grub-core/term/i386/pc/mda_text.c index 907a36ebb..c3a5a1788 100644 --- a/grub-core/term/i386/pc/mda_text.c +++ b/grub-core/term/i386/pc/mda_text.c @@ -1,3 +1,13 @@ #define MODE_MDA 1 #include "vga_text.c" +GRUB_MOD_INIT(mda_text) +{ + grub_term_register_output ("mda_text", &grub_vga_text_term); +} + +GRUB_MOD_FINI(mda_text) +{ + grub_term_unregister_output (&grub_vga_text_term); +} + diff --git a/grub-core/term/i386/pc/vga_text.c b/grub-core/term/i386/pc/vga_text.c index e976aec9b..06850ac40 100644 --- a/grub-core/term/i386/pc/vga_text.c +++ b/grub-core/term/i386/pc/vga_text.c @@ -22,6 +22,10 @@ #include #include +#if defined (GRUB_MACHINE_COREBOOT) +#include +#endif + /* MODESET is used for testing to force monochrome or colour mode. You shouldn't use mda_text on vga. */ @@ -267,24 +271,23 @@ static struct grub_term_output grub_vga_text_term = .flags = GRUB_TERM_CODE_TYPE_CP437, }; -#ifdef MODE_MDA -GRUB_MOD_INIT(mda_text) -#elif defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_MULTIBOOT) +/* FIXME: this is was too spaghetti. */ + +#ifndef MODE_MDA + +#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_MULTIBOOT) void grub_vga_text_init (void) #else GRUB_MOD_INIT(vga_text) #endif { -#ifdef MODE_MDA - grub_term_register_output ("mda_text", &grub_vga_text_term); -#else - grub_term_register_output ("vga_text", &grub_vga_text_term); +#ifdef GRUB_MACHINE_COREBOOT + if (!grub_video_coreboot_fbtable) #endif + grub_term_register_output ("vga_text", &grub_vga_text_term); } -#ifdef MODE_MDA -GRUB_MOD_FINI(mda_text) -#elif defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_MULTIBOOT) +#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_MULTIBOOT) void grub_vga_text_fini (void) #else GRUB_MOD_FINI(vga_text) @@ -292,3 +295,5 @@ GRUB_MOD_FINI(vga_text) { grub_term_unregister_output (&grub_vga_text_term); } + +#endif diff --git a/grub-core/video/bitmap.c b/grub-core/video/bitmap.c index bb41d10cb..b2e031566 100644 --- a/grub-core/video/bitmap.c +++ b/grub-core/video/bitmap.c @@ -210,26 +210,6 @@ grub_video_bitmap_load (struct grub_video_bitmap **bitmap, " unsupported format"), filename); } -/* Return bitmap width. */ -unsigned int -grub_video_bitmap_get_width (struct grub_video_bitmap *bitmap) -{ - if (!bitmap) - return 0; - - return bitmap->mode_info.width; -} - -/* Return bitmap height. */ -unsigned int -grub_video_bitmap_get_height (struct grub_video_bitmap *bitmap) -{ - if (!bitmap) - return 0; - - return bitmap->mode_info.height; -} - /* Return mode info for bitmap. */ void grub_video_bitmap_get_mode_info (struct grub_video_bitmap *bitmap, struct grub_video_mode_info *mode_info) diff --git a/grub-core/video/colors.c b/grub-core/video/colors.c index 76359eaf0..485ebb4ab 100644 --- a/grub-core/video/colors.c +++ b/grub-core/video/colors.c @@ -23,6 +23,7 @@ #include #include #include +#include GRUB_MOD_LICENSE ("GPLv3+"); diff --git a/grub-core/video/fb/fbutil.c b/grub-core/video/fb/fbutil.c index 81b3860ac..b98bb51fe 100644 --- a/grub-core/video/fb/fbutil.c +++ b/grub-core/video/fb/fbutil.c @@ -31,41 +31,6 @@ #include #include -void * -grub_video_fb_get_video_ptr (struct grub_video_fbblit_info *source, - unsigned int x, unsigned int y) -{ - grub_uint8_t *ptr = 0; - - switch (source->mode_info->bpp) - { - case 32: - ptr = source->data + y * source->mode_info->pitch + x * 4; - break; - - case 24: - ptr = source->data + y * source->mode_info->pitch + x * 3; - break; - - case 16: - case 15: - ptr = source->data + y * source->mode_info->pitch + x * 2; - break; - - case 8: - ptr = source->data + y * source->mode_info->pitch + x; - break; - - case 1: - /* For 1-bit bitmaps, addressing needs to be done at the bit level - and it doesn't make sense, in general, to ask for a pointer - to a particular pixel's data. */ - break; - } - - return ptr; -} - grub_video_color_t get_pixel (struct grub_video_fbblit_info *source, unsigned int x, unsigned int y) diff --git a/grub-core/video/i386/coreboot/cbfb.c b/grub-core/video/i386/coreboot/cbfb.c index 984b5943e..62b86db2b 100644 --- a/grub-core/video/i386/coreboot/cbfb.c +++ b/grub-core/video/i386/coreboot/cbfb.c @@ -26,10 +26,9 @@ #include #include #include +#include -GRUB_MOD_LICENSE ("GPLv3+"); - -static struct grub_linuxbios_table_framebuffer *cbfb; +struct grub_linuxbios_table_framebuffer *grub_video_coreboot_fbtable; static struct { @@ -50,22 +49,22 @@ grub_video_cbfb_fill_mode_info (struct grub_video_mode_info *out) { grub_memset (out, 0, sizeof (*out)); - out->width = cbfb->width; - out->height = cbfb->height; - out->pitch = cbfb->pitch; + out->width = grub_video_coreboot_fbtable->width; + out->height = grub_video_coreboot_fbtable->height; + out->pitch = grub_video_coreboot_fbtable->pitch; - out->red_field_pos = cbfb->red_field_pos; - out->red_mask_size = cbfb->red_mask_size; - out->green_field_pos = cbfb->green_field_pos; - out->green_mask_size = cbfb->green_mask_size; - out->blue_field_pos = cbfb->blue_field_pos; - out->blue_mask_size = cbfb->blue_mask_size; - out->reserved_field_pos = cbfb->reserved_field_pos; - out->reserved_mask_size = cbfb->reserved_mask_size; + out->red_field_pos = grub_video_coreboot_fbtable->red_field_pos; + out->red_mask_size = grub_video_coreboot_fbtable->red_mask_size; + out->green_field_pos = grub_video_coreboot_fbtable->green_field_pos; + out->green_mask_size = grub_video_coreboot_fbtable->green_mask_size; + out->blue_field_pos = grub_video_coreboot_fbtable->blue_field_pos; + out->blue_mask_size = grub_video_coreboot_fbtable->blue_mask_size; + out->reserved_field_pos = grub_video_coreboot_fbtable->reserved_field_pos; + out->reserved_mask_size = grub_video_coreboot_fbtable->reserved_mask_size; out->mode_type = GRUB_VIDEO_MODE_TYPE_RGB; - out->bpp = cbfb->bpp; - out->bytes_per_pixel = (cbfb->bpp + 7) / 8; + out->bpp = grub_video_coreboot_fbtable->bpp; + out->bytes_per_pixel = (grub_video_coreboot_fbtable->bpp + 7) / 8; out->number_of_colors = 256; out->blit_format = grub_video_get_blit_format (out); @@ -79,10 +78,10 @@ grub_video_cbfb_setup (unsigned int width, unsigned int height, { grub_err_t err; - if (!cbfb) + if (!grub_video_coreboot_fbtable) return grub_error (GRUB_ERR_IO, "Couldn't find display device."); - if (!((width == cbfb->width && height == cbfb->height) + if (!((width == grub_video_coreboot_fbtable->width && height == grub_video_coreboot_fbtable->height) || (width == 0 && height == 0))) return grub_error (GRUB_ERR_IO, "can't set mode %dx%d", width, height); @@ -93,7 +92,7 @@ grub_video_cbfb_setup (unsigned int width, unsigned int height, return err; } - framebuffer.ptr = (void *) (grub_addr_t) cbfb->lfb; + framebuffer.ptr = (void *) (grub_addr_t) grub_video_coreboot_fbtable->lfb; grub_dprintf ("video", "CBFB: initialising FB @ %p %dx%dx%d\n", framebuffer.ptr, framebuffer.mode_info.width, @@ -162,20 +161,26 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, { if (table_item->tag != GRUB_LINUXBIOS_MEMBER_FRAMEBUFFER) return 0; - cbfb = (struct grub_linuxbios_table_framebuffer *) (table_item + 1); + grub_video_coreboot_fbtable = (struct grub_linuxbios_table_framebuffer *) (table_item + 1); return 1; } -GRUB_MOD_INIT(coreboot_fb) +void +grub_video_coreboot_fb_early_init (void) { grub_linuxbios_table_iterate (iterate_linuxbios_table, 0); +} - if (cbfb) +void +grub_video_coreboot_fb_late_init (void) +{ + if (grub_video_coreboot_fbtable) grub_video_register (&grub_video_cbfb_adapter); } -GRUB_MOD_FINI(coreboot_fb) +void +grub_video_coreboot_fb_fini (void) { - if (cbfb) + if (grub_video_coreboot_fbtable) grub_video_unregister (&grub_video_cbfb_adapter); } diff --git a/include/grub/bitmap.h b/include/grub/bitmap.h index 6e300391a..5728f8ca3 100644 --- a/include/grub/bitmap.h +++ b/include/grub/bitmap.h @@ -59,8 +59,25 @@ grub_err_t EXPORT_FUNC (grub_video_bitmap_destroy) (struct grub_video_bitmap *bi grub_err_t EXPORT_FUNC (grub_video_bitmap_load) (struct grub_video_bitmap **bitmap, const char *filename); -unsigned int EXPORT_FUNC (grub_video_bitmap_get_width) (struct grub_video_bitmap *bitmap); -unsigned int EXPORT_FUNC (grub_video_bitmap_get_height) (struct grub_video_bitmap *bitmap); +/* Return bitmap width. */ +static inline unsigned int +grub_video_bitmap_get_width (struct grub_video_bitmap *bitmap) +{ + if (!bitmap) + return 0; + + return bitmap->mode_info.width; +} + +/* Return bitmap height. */ +static inline unsigned int +grub_video_bitmap_get_height (struct grub_video_bitmap *bitmap) +{ + if (!bitmap) + return 0; + + return bitmap->mode_info.height; +} void EXPORT_FUNC (grub_video_bitmap_get_mode_info) (struct grub_video_bitmap *bitmap, struct grub_video_mode_info *mode_info); diff --git a/include/grub/color.h b/include/grub/color.h new file mode 100644 index 000000000..cb004a9a1 --- /dev/null +++ b/include/grub/color.h @@ -0,0 +1,30 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#ifndef GRUB_VIDEO_COLOR_HEADER +#define GRUB_VIDEO_COLOR_HEADER 1 + +#include + +int grub_video_get_named_color (const char *name, + grub_video_rgba_color_t *color); + +grub_err_t grub_video_parse_color (const char *s, + grub_video_rgba_color_t *color); + +#endif diff --git a/include/grub/fbutil.h b/include/grub/fbutil.h index f68db43b1..4205eb917 100644 --- a/include/grub/fbutil.h +++ b/include/grub/fbutil.h @@ -31,8 +31,15 @@ struct grub_video_fbblit_info grub_uint8_t *data; }; -void *grub_video_fb_get_video_ptr (struct grub_video_fbblit_info *source, - unsigned int x, unsigned int y); +/* Don't use for 1-bit bitmaps, addressing needs to be done at the bit level + and it doesn't make sense, in general, to ask for a pointer + to a particular pixel's data. */ +static inline void * +grub_video_fb_get_video_ptr (struct grub_video_fbblit_info *source, + unsigned int x, unsigned int y) +{ + return source->data + y * source->mode_info->pitch + x * source->mode_info->bytes_per_pixel; +} /* Advance pointer by VAL bytes. If there is no unaligned access available, VAL has to be divisible by size of pointed type. diff --git a/include/grub/gfxterm.h b/include/grub/gfxterm.h index 361f73e50..7e1ff6dfc 100644 --- a/include/grub/gfxterm.h +++ b/include/grub/gfxterm.h @@ -31,13 +31,21 @@ EXPORT_FUNC (grub_gfxterm_set_window) (struct grub_video_render_target *target, int double_repaint, grub_font_t font, int border_width); -typedef void (*grub_gfxterm_repaint_callback_t)(int x, int y, - int width, int height); - -void grub_gfxterm_set_repaint_callback (grub_gfxterm_repaint_callback_t func); - void EXPORT_FUNC (grub_gfxterm_schedule_repaint) (void); extern void (*EXPORT_VAR (grub_gfxterm_decorator_hook)) (void); +struct grub_gfxterm_background +{ + struct grub_video_bitmap *bitmap; + int blend_text_bg; + grub_video_rgba_color_t default_bg_color; +}; + +extern struct grub_gfxterm_background EXPORT_VAR (grub_gfxterm_background); + +void EXPORT_FUNC (grub_gfxterm_video_update_color) (void); +void +EXPORT_FUNC (grub_gfxterm_get_dimensions) (unsigned *width, unsigned *height); + #endif /* ! GRUB_GFXTERM_HEADER */ diff --git a/include/grub/i386/coreboot/console.h b/include/grub/i386/coreboot/console.h index 2ffef7300..9cfa24759 100644 --- a/include/grub/i386/coreboot/console.h +++ b/include/grub/i386/coreboot/console.h @@ -22,4 +22,11 @@ void grub_vga_text_init (void); void grub_vga_text_fini (void); +void grub_video_coreboot_fb_init (void); +void grub_video_coreboot_fb_early_init (void); +void grub_video_coreboot_fb_late_init (void); +void grub_video_coreboot_fb_fini (void); + +extern struct grub_linuxbios_table_framebuffer *grub_video_coreboot_fbtable; + #endif /* ! GRUB_MACHINE_CONSOLE_HEADER */ diff --git a/include/grub/video.h b/include/grub/video.h index b2d145812..c444536bf 100644 --- a/include/grub/video.h +++ b/include/grub/video.h @@ -531,12 +531,6 @@ grub_video_map_rgba_color (grub_video_rgba_color_t c) return grub_video_map_rgba (c.red, c.green, c.blue, c.alpha); } -int EXPORT_FUNC (grub_video_get_named_color) (const char *name, - grub_video_rgba_color_t *color); - -grub_err_t EXPORT_FUNC (grub_video_parse_color) (const char *s, - grub_video_rgba_color_t *color); - #ifndef GRUB_MACHINE_EMU extern void grub_font_init (void); extern void grub_font_fini (void); diff --git a/util/grub-render-label.c b/util/grub-render-label.c index 325af6d69..2af7eff13 100644 --- a/util/grub-render-label.c +++ b/util/grub-render-label.c @@ -24,6 +24,7 @@ #include #include #include +#include #define _GNU_SOURCE 1 From e40b459617da712dd661e6ce906cf0f4b76e65f4 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Fri, 31 May 2013 00:59:02 +0200 Subject: [PATCH 20/73] * grub-core/normal/cmdline.c (grub_cmdline_get): Fix Ctrl-u handling to copy the killed characters to the kill buffer as UCS4 stored as grub_uint32_t rather than as 8-bit characters stored as char. Eliminates UCS4 truncation and corruption observed when killing characters with Ctrl-u and yanking them back with Ctrl-y. --- ChangeLog | 9 +++++++++ grub-core/normal/cmdline.c | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0da4f9e34..e9ef17e7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-05-30 Josh Triplett + + * grub-core/normal/cmdline.c (grub_cmdline_get): Fix Ctrl-u + handling to copy the killed characters to the kill buffer as + UCS4 stored as grub_uint32_t rather than as 8-bit characters + stored as char. Eliminates UCS4 truncation and corruption + observed when killing characters with Ctrl-u and yanking them + back with Ctrl-y. + 2013-05-30 Vladimir Serbinenko Detach optional parts of gfxterm and integrate in with coreboot init. diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c index 71d9bd1fc..eb974efee 100644 --- a/grub-core/normal/cmdline.c +++ b/grub-core/normal/cmdline.c @@ -587,7 +587,7 @@ grub_cmdline_get (const char *prompt_translated) grub_free (kill_buf); - kill_buf = grub_malloc (n + 1); + kill_buf = grub_malloc ((n + 1) * sizeof(grub_uint32_t)); if (grub_errno) { grub_print_error (); @@ -595,8 +595,8 @@ grub_cmdline_get (const char *prompt_translated) } if (kill_buf) { - grub_memcpy (kill_buf, buf, n); - kill_buf[n] = '\0'; + grub_memcpy (kill_buf, buf, n * sizeof(grub_uint32_t)); + kill_buf[n] = 0; } lpos = 0; From cec5cf0ced75119b7e74e30c552415253f0d7243 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 31 May 2013 18:10:31 +0200 Subject: [PATCH 21/73] * configure.ac: Add yet another path to unifont. For parabola. --- ChangeLog | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index e9ef17e7c..c22a9e9b4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-31 Vladimir Serbinenko + + * configure.ac: Add yet another path to unifont. For parabola. + 2013-05-30 Josh Triplett * grub-core/normal/cmdline.c (grub_cmdline_get): Fix Ctrl-u diff --git a/configure.ac b/configure.ac index c151550e4..1c05a11f1 100644 --- a/configure.ac +++ b/configure.ac @@ -277,7 +277,7 @@ fi FONT_SOURCE= for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do - for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do if test -f "$dir/unifont.$ext"; then FONT_SOURCE="$dir/unifont.$ext" break 2 From f25870887b7f758c8a66811bcda1f0e6e0e4521f Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Fri, 31 May 2013 20:29:03 +0400 Subject: [PATCH 22/73] * util/grub.d/30_os-prober.in: Add support for probing EFI System Partition (as of os-prober 1.58). --- ChangeLog | 5 +++++ util/grub.d/30_os-prober.in | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/ChangeLog b/ChangeLog index c22a9e9b4..95324644b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-05-31 Andrey Borzenkov + + * util/grub.d/30_os-prober.in: Add support for probing EFI + System Partition (as of os-prober 1.58). + 2013-05-31 Vladimir Serbinenko * configure.ac: Add yet another path to unifont. For parabola. diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in index 04f32a146..5e3c5d863 100644 --- a/util/grub.d/30_os-prober.in +++ b/util/grub.d/30_os-prober.in @@ -147,6 +147,22 @@ EOF cat < Date: Fri, 7 Jun 2013 15:35:16 +0200 Subject: [PATCH 23/73] Fix typo (failback vs fallback). --- ChangeLog | 4 ++++ conf/Makefile.common | 2 +- grub-core/Makefile.am | 2 +- grub-core/Makefile.core.def | 2 +- grub-core/font/font.c | 6 +++--- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 95324644b..fa6c165d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-07 Vladimir Serbinenko + + Fix typo (failback vs fallback). + 2013-05-31 Andrey Borzenkov * util/grub.d/30_os-prober.in: Add support for probing EFI diff --git a/conf/Makefile.common b/conf/Makefile.common index 7543dadc5..2e4d5ec88 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -27,7 +27,7 @@ if COND_i386_ieee1275 endif if COND_mips_loongson CFLAGS_PLATFORM += -mexplicit-relocs - CPPFLAGS_PLATFORM = -DUSE_ASCII_FAILBACK + CPPFLAGS_PLATFORM = -DUSE_ASCII_FALLBACK endif if COND_mips CFLAGS_PLATFORM += -mflush-func=grub_red_herring diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index f71e05c5d..c0441d2b3 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -10,7 +10,7 @@ CCAS=$(TARGET_CC) if COND_GRUB_MKFONT if COND_HAVE_FONT_SOURCE -TARGET_CFLAGS += -DUSE_ASCII_FAILBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1 +TARGET_CFLAGS += -DUSE_ASCII_FALLBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1 endif endif diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index ba77a21c9..6c98a01de 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -77,7 +77,7 @@ kernel = { mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000'; mips_arc_cppflags = '-DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR)'; - mips_loongson_cppflags = '-DUSE_ASCII_FAILBACK'; + mips_loongson_cppflags = '-DUSE_ASCII_FALLBACK'; i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; emu_cflags = '$(CFLAGS_GNULIB)'; emu_cppflags = '$(CPPFLAGS_GNULIB)'; diff --git a/grub-core/font/font.c b/grub-core/font/font.c index 481c958ef..d603dbe04 100644 --- a/grub-core/font/font.c +++ b/grub-core/font/font.c @@ -33,7 +33,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); -#ifdef USE_ASCII_FAILBACK +#ifdef USE_ASCII_FALLBACK #include "ascii.h" #endif @@ -110,14 +110,14 @@ static struct grub_font null_font; /* Flag to ensure module is initialized only once. */ static grub_uint8_t font_loader_initialized; -#ifdef USE_ASCII_FAILBACK +#ifdef USE_ASCII_FALLBACK static struct grub_font_glyph *ascii_font_glyph[0x80]; #endif static struct grub_font_glyph * ascii_glyph_lookup (grub_uint32_t code) { -#ifdef USE_ASCII_FAILBACK +#ifdef USE_ASCII_FALLBACK static int ascii_failback_initialized = 0; if (code >= 0x80) From 96dbe64813217b78484247ab7e1611794e8ad4de Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 7 Jun 2013 15:41:10 +0200 Subject: [PATCH 24/73] * grub-core/disk/diskfilter.c (insert_array): Fix order to discover ambigouos RAID before discovering RAIDs on top of it. Reported by: bodom. --- ChangeLog | 6 ++++++ grub-core/disk/diskfilter.c | 17 +++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index fa6c165d7..7a8391789 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-06-07 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (insert_array): Fix order to discover + ambigouos RAID before discovering RAIDs on top of it. + Reported by: bodom. + 2013-06-07 Vladimir Serbinenko Fix typo (failback vs fallback). diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index c4eb97eb7..c8d267a6b 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -1045,10 +1045,14 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id, { struct grub_diskfilter_pv *pv; - grub_dprintf ("diskfilter", "Inserting %s into %s (%s)\n", disk->name, + grub_dprintf ("diskfilter", "Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name, + (unsigned long long) grub_partition_get_start (disk->partition), + (unsigned long long) grub_disk_get_size (disk), array->name, diskfilter->name); #ifdef GRUB_UTIL - grub_util_info ("Inserting %s into %s (%s)\n", disk->name, + grub_util_info ("Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name, + (unsigned long long) grub_partition_get_start (disk->partition), + (unsigned long long) grub_disk_get_size (disk), array->name, diskfilter->name); array->driver = diskfilter; #endif @@ -1092,14 +1096,7 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id, /* Add the device to the array. */ for (lv = array->lvs; lv; lv = lv->next) if (!lv->became_readable_at && lv->fullname && is_lv_readable (lv, 0)) - { - lv->became_readable_at = ++inscnt; - if (is_lv_readable (lv, 1)) - { - scan_disk (lv->fullname, 1); - lv->scanned = 1; - } - } + lv->became_readable_at = ++inscnt; break; } From 69544d1e4386ad53530d6926ed4b8bb672e2825a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 7 Jun 2013 16:02:16 +0200 Subject: [PATCH 25/73] Remove enable_executable_check as it's not needed anymore. Reported by: dougray. --- ChangeLog | 5 +++++ acinclude.m4 | 26 -------------------------- config.h.in | 2 -- configure.ac | 1 - 4 files changed, 5 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a8391789..28d3e41c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-07 Vladimir Serbinenko + + Remove enable_executable_check as it's not needed anymore. + Reported by: dougray. + 2013-06-07 Vladimir Serbinenko * grub-core/disk/diskfilter.c (insert_array): Fix order to discover diff --git a/acinclude.m4 b/acinclude.m4 index 49a1a75d1..6242fa699 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -313,32 +313,6 @@ else fi ]) -dnl Check if the C compiler generates calls to `__enable_execute_stack()'. -AC_DEFUN([grub_CHECK_ENABLE_EXECUTE_STACK],[ -AC_MSG_CHECKING([whether `$CC' generates calls to `__enable_execute_stack()']) -AC_LANG_CONFTEST([AC_LANG_SOURCE([[ -void f (int (*p) (void)); -void g (int i) -{ - int nestedfunc (void) { return i; } - f (nestedfunc); -} -]])]) -if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then - true -else - AC_MSG_ERROR([${CC-cc} failed to produce assembly code]) -fi -if grep __enable_execute_stack conftest.s >/dev/null 2>&1; then - NEED_ENABLE_EXECUTE_STACK=1 - AC_MSG_RESULT([yes]) -else - NEED_ENABLE_EXECUTE_STACK=0 - AC_MSG_RESULT([no]) -fi -rm -f conftest* -]) - dnl Check if the C compiler supports `-fstack-protector'. AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[ diff --git a/config.h.in b/config.h.in index 065db78b8..160e3717e 100644 --- a/config.h.in +++ b/config.h.in @@ -39,8 +39,6 @@ #define GRUB_BOOT_DIR_NAME "@bootdirname@" /* Default grub directory name */ #define GRUB_DIR_NAME "@grubdirname@" -/* Define to 1 if GCC generates calls to __enable_execute_stack(). */ -#define NEED_ENABLE_EXECUTE_STACK @NEED_ENABLE_EXECUTE_STACK@ /* Define to 1 if GCC generates calls to __register_frame_info(). */ #define NEED_REGISTER_FRAME_INFO @NEED_REGISTER_FRAME_INFO@ diff --git a/configure.ac b/configure.ac index 1c05a11f1..2f7b8b3c4 100644 --- a/configure.ac +++ b/configure.ac @@ -1137,7 +1137,6 @@ AC_SUBST(BSS_START_SYMBOL) AC_SUBST(END_SYMBOL) AC_SUBST(PACKAGE) AC_SUBST(VERSION) -AC_SUBST(NEED_ENABLE_EXECUTE_STACK) AC_SUBST(NEED_REGISTER_FRAME_INFO) # From b8578da640f54e2c685320bd3e058043b2518eab Mon Sep 17 00:00:00 2001 From: Francesco Lavra Date: Fri, 7 Jun 2013 16:28:13 +0200 Subject: [PATCH 26/73] * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix handling of paths without a device name. --- ChangeLog | 5 +++++ grub-core/kern/corecmd.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 28d3e41c9..15fd56227 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-02 Francesco Lavra + + * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix handling of paths + without a device name. + 2013-06-07 Vladimir Serbinenko Remove enable_executable_check as it's not needed anymore. diff --git a/grub-core/kern/corecmd.c b/grub-core/kern/corecmd.c index e1bb4832e..bee216649 100644 --- a/grub-core/kern/corecmd.c +++ b/grub-core/kern/corecmd.c @@ -134,7 +134,7 @@ grub_core_cmd_ls (struct grub_command *cmd __attribute__ ((unused)), fs = grub_fs_probe (dev); path = grub_strchr (argv[0], ')'); - if (! *path) + if (! path) path = argv[0]; else path++; From cc28411296521d2952a498eb36a29f413802ae12 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Fri, 7 Jun 2013 18:23:08 +0200 Subject: [PATCH 27/73] Fix make dist on non-pc. --- ChangeLog | 6 +++++- grub-core/Makefile.am | 9 +++------ grub-core/Makefile.core.def | 2 ++ grub-core/boot/i386/pc/startup_raw.S | 2 +- grub-core/boot/mips/loongson/fwstart.S | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 15fd56227..6fd2366b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,8 @@ -2013-06-02 Francesco Lavra +2013-06-07 Andrey Borzenkov + + Fix make dist on non-pc. + +2013-06-07 Francesco Lavra * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix handling of paths without a device name. diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index c0441d2b3..e0fc14db1 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -45,9 +45,9 @@ gensm712: video/sm712.c CLEANFILES += gensm712 # trigtables.c -sm712_start.S: gensm712 video/sm712.c $(top_srcdir)/configure.ac +sm712_start.h: gensm712 video/sm712.c $(top_srcdir)/configure.ac $(builddir)/gensm712 > $@ -CLEANFILES += sm712_start.S +CLEANFILES += sm712_start.h # XXX Use Automake's LEX & YACC support grub_script.tab.h: script/parser.y @@ -60,12 +60,9 @@ grub_script.yy.h: script/yylex.l $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $< grub_script.yy.c: grub_script.yy.h -rs_decoder.S: $(srcdir)/lib/reed_solomon.c +rs_decoder.h: $(srcdir)/lib/reed_solomon.c $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Os -I$(top_builddir) -S -DSTANDALONE -o $@ $< -g0 -mregparm=3 -ffreestanding -boot/i386/pc/startup_raw.S: $(builddir)/rs_decoder.S -boot/mips/loongson/fwstart.S: $(builddir)/sm712_start.S - CLEANFILES += grub_script.yy.c grub_script.yy.h include $(srcdir)/Makefile.core.am diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 6c98a01de..6aeb79b59 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -394,6 +394,7 @@ image = { image = { name = lzma_decompress; i386_pc = boot/i386/pc/startup_raw.S; + i386_pc_nodist = rs_decoder.h; objcopyflags = '-O binary'; ldflags = '$(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200'; @@ -403,6 +404,7 @@ image = { image = { name = fwstart; mips_loongson = boot/mips/loongson/fwstart.S; + mips_loongson_nodist = sm712_start.h; objcopyflags = '-O binary'; ldflags = '-static-libgcc -lgcc -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic'; enable = mips_loongson; diff --git a/grub-core/boot/i386/pc/startup_raw.S b/grub-core/boot/i386/pc/startup_raw.S index 81c0bc457..06dec8c06 100644 --- a/grub-core/boot/i386/pc/startup_raw.S +++ b/grub-core/boot/i386/pc/startup_raw.S @@ -119,7 +119,7 @@ LOCAL (codestart): #include "../../../kern/i386/realmode.S" -#include +#include .text diff --git a/grub-core/boot/mips/loongson/fwstart.S b/grub-core/boot/mips/loongson/fwstart.S index ec57be6a1..11ad1c91a 100644 --- a/grub-core/boot/mips/loongson/fwstart.S +++ b/grub-core/boot/mips/loongson/fwstart.S @@ -886,7 +886,7 @@ table_cont: b init_end nop init_table: -#include "sm712_start.S" +#include "sm712_start.h" init_table_end: .align 4 init_end: From 63c298492274a81191b885f0461065c6d0dfd48c Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Fri, 7 Jun 2013 18:25:19 +0200 Subject: [PATCH 28/73] * grub-core/kern/corecmd.c (grub_core_cmd_set): Use grub_env_get to fetch values when listing. --- ChangeLog | 5 +++++ grub-core/kern/corecmd.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6fd2366b5..4148be186 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-07 Andrey Borzenkov + + * grub-core/kern/corecmd.c (grub_core_cmd_set): Use grub_env_get + to fetch values when listing. + 2013-06-07 Andrey Borzenkov Fix make dist on non-pc. diff --git a/grub-core/kern/corecmd.c b/grub-core/kern/corecmd.c index bee216649..d9412a316 100644 --- a/grub-core/kern/corecmd.c +++ b/grub-core/kern/corecmd.c @@ -40,7 +40,7 @@ grub_core_cmd_set (struct grub_command *cmd __attribute__ ((unused)), { struct grub_env_var *env; FOR_SORTED_ENV (env) - grub_printf ("%s=%s\n", env->name, env->value); + grub_printf ("%s=%s\n", env->name, grub_env_get (env->name)); return 0; } From 593e430cd63a8f369582ef793882bad3e0df4ec4 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Fri, 7 Jun 2013 18:36:42 +0200 Subject: [PATCH 29/73] * grub-core/script/execute.c (grub_script_execute_sourcecode): Split off new function grub_script_execute_new_scope. Change callers to use either of them as appropriate. * grub-core/commands/eval.c: New command eval. * docs/grub.texi (Commands): Document it. --- ChangeLog | 8 ++++++++ docs/grub.texi | 10 ++++++++++ grub-core/Makefile.core.def | 5 +++++ grub-core/normal/menu.c | 2 +- grub-core/normal/menu_entry.c | 2 +- grub-core/script/execute.c | 33 +++++++++++++++++++++++---------- include/grub/script_sh.h | 3 ++- 7 files changed, 50 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4148be186..4d8f34370 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2013-06-07 Andrey Borzenkov + + * grub-core/script/execute.c (grub_script_execute_sourcecode): Split + off new function grub_script_execute_new_scope. Change callers to use + either of them as appropriate. + * grub-core/commands/eval.c: New command eval. + * docs/grub.texi (Commands): Document it. + 2013-06-07 Andrey Borzenkov * grub-core/kern/corecmd.c (grub_core_cmd_set): Use grub_env_get diff --git a/docs/grub.texi b/docs/grub.texi index 75a5ea4ce..9dcfa2d40 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -3435,6 +3435,7 @@ you forget a command, you can run the command @command{help} * date:: Display or set current date and time * drivemap:: Map a drive to another * echo:: Display a line of text +* eval:: Evaluate agruments as GRUB commands * export:: Export an environment variable * false:: Do nothing, unsuccessfully * gettext:: Translate a string @@ -3812,6 +3813,15 @@ character will print that character. @end deffn +@node eval +@subsection eval + +@deffn Command eval string ... +Concatenate arguments together using single space as separator and evaluate +result as sequence of GRUB commands. +@end deffn + + @node export @subsection export diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 6aeb79b59..ed4b72724 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -703,6 +703,11 @@ module = { common = commands/echo.c; }; +module = { + name = eval; + common = commands/eval.c; +}; + module = { name = extcmd; common = commands/extcmd.c; diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c index fba19db99..9b88290cf 100644 --- a/grub-core/normal/menu.c +++ b/grub-core/normal/menu.c @@ -245,7 +245,7 @@ grub_menu_execute_entry(grub_menu_entry_t entry, int auto_boot) else grub_env_unset ("default"); - grub_script_execute_sourcecode (entry->sourcecode, entry->argc, entry->args); + grub_script_execute_new_scope (entry->sourcecode, entry->argc, entry->args); if (errs_before != grub_err_printed_errors) grub_wait_after_message (); diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c index a26a50616..6aa33071c 100644 --- a/grub-core/normal/menu_entry.c +++ b/grub-core/normal/menu_entry.c @@ -1181,7 +1181,7 @@ run (struct screen *screen) } script[size] = '\0'; } - grub_script_execute_sourcecode (script, 0, dummy); + grub_script_execute_new_scope (script, 0, dummy); grub_free (script); if (errs_before != grub_err_printed_errors) diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c index 9babbeee2..afd551320 100644 --- a/grub-core/script/execute.c +++ b/grub-core/script/execute.c @@ -856,19 +856,10 @@ grub_script_execute_sourcecode_getline (char **line, /* Execute a source script. */ grub_err_t -grub_script_execute_sourcecode (const char *source, int argc, char **args) +grub_script_execute_sourcecode (const char *source) { grub_err_t ret = 0; struct grub_script *parsed_script; - struct grub_script_scope new_scope; - struct grub_script_scope *old_scope; - - new_scope.argv.argc = argc; - new_scope.argv.args = args; - new_scope.flags = 0; - - old_scope = scope; - scope = &new_scope; while (source) { @@ -880,13 +871,35 @@ grub_script_execute_sourcecode (const char *source, int argc, char **args) if (! parsed_script) { ret = grub_errno; + grub_free (line); break; } ret = grub_script_execute (parsed_script); + grub_script_free (parsed_script); grub_free (line); } + return ret; +} + +/* Execute a source script in new scope. */ +grub_err_t +grub_script_execute_new_scope (const char *source, int argc, char **args) +{ + grub_err_t ret = 0; + struct grub_script_scope new_scope; + struct grub_script_scope *old_scope; + + new_scope.argv.argc = argc; + new_scope.argv.args = args; + new_scope.flags = 0; + + old_scope = scope; + scope = &new_scope; + + ret = grub_script_execute_sourcecode (source); + scope = old_scope; return ret; } diff --git a/include/grub/script_sh.h b/include/grub/script_sh.h index 78602e4ad..57bdd4d3c 100644 --- a/include/grub/script_sh.h +++ b/include/grub/script_sh.h @@ -329,7 +329,8 @@ grub_err_t grub_script_execute_cmdwhile (struct grub_script_cmd *cmd); /* Execute any GRUB pre-parsed command or script. */ grub_err_t grub_script_execute (struct grub_script *script); -grub_err_t grub_script_execute_sourcecode (const char *source, int argc, char **args); +grub_err_t grub_script_execute_sourcecode (const char *source); +grub_err_t grub_script_execute_new_scope (const char *source, int argc, char **args); /* Break command for loops. */ grub_err_t grub_script_break (grub_command_t cmd, int argc, char *argv[]); From 356670f1f2c3d2884604cf292a3bdf797eca0f4f Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Fri, 7 Jun 2013 18:40:37 +0200 Subject: [PATCH 30/73] * grub-core/script/execute.c (grub_script_execute_sourcecode): Split off new function grub_script_execute_new_scope. Change callers to use either of them as appropriate. * grub-core/commands/eval.c: New command eval. * docs/grub.texi (Commands): Document it. --- grub-core/commands/eval.c | 71 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 grub-core/commands/eval.c diff --git a/grub-core/commands/eval.c b/grub-core/commands/eval.c new file mode 100644 index 000000000..f826a4f22 --- /dev/null +++ b/grub-core/commands/eval.c @@ -0,0 +1,71 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_eval (grub_command_t cmd __attribute__((__unused__)), + int argc, char *argv[]) +{ + int i; + grub_size_t size = argc; /* +1 for final zero */ + char *str, *p; + grub_err_t ret; + + if (argc == 0) + return GRUB_ERR_NONE; + + for (i = 0; i < argc; i++) + size += grub_strlen (argv[i]); + + str = p = grub_malloc (size); + if (!str) + return grub_errno; + + for (i = 0; i < argc; i++) + { + p = grub_stpcpy (p, argv[i]); + *p++ = ' '; + } + *--p = '\0'; + + ret = grub_script_execute_sourcecode (str); + grub_free (str); + return ret; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(eval) +{ + cmd = grub_register_command ("eval", grub_cmd_eval, N_("STRING ..."), + N_("Evaluate arguments as GRUB commands")); +} + +GRUB_MOD_FINI(eval) +{ + grub_unregister_command (cmd); +} + From 3d84cb17933852cd8bf90e4bbe8191ce17231df1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 14 Jun 2013 20:44:59 +0200 Subject: [PATCH 31/73] Move flavour-specific parts out of common cpio.c file and rename remaining to cpio_common.c --- ChangeLog | 5 + Makefile.util.def | 6 + grub-core/fs/cpio.c | 727 +------------------------------------ grub-core/fs/cpio_be.c | 64 +++- grub-core/fs/cpio_common.c | 611 +++++++++++++++++++++++++++++++ grub-core/fs/newc.c | 76 +++- grub-core/fs/odc.c | 63 +++- grub-core/fs/tar.c | 68 +++- include/grub/fat.h | 5 + 9 files changed, 894 insertions(+), 731 deletions(-) create mode 100644 grub-core/fs/cpio_common.c diff --git a/ChangeLog b/ChangeLog index 4d8f34370..cd10ed37a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-14 Vladimir Serbinenko + + Move flavour-specific parts out of common cpio.c file and + rename remaining to cpio_common.c + 2013-06-07 Andrey Borzenkov * grub-core/script/execute.c (grub_script_execute_sourcecode): Split diff --git a/Makefile.util.def b/Makefile.util.def index 17fdfa569..220bf6ac4 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -590,6 +590,12 @@ script = { common = tests/example_grub_script_test.in; }; +script = { + testcase; + name = grub_script_eval; + common = tests/grub_script_eval.in; +}; + script = { testcase; name = grub_script_test; diff --git a/grub-core/fs/cpio.c b/grub-core/fs/cpio.c index 71d7fa405..628680d23 100644 --- a/grub-core/fs/cpio.c +++ b/grub-core/fs/cpio.c @@ -1,7 +1,7 @@ /* cpio.c - cpio and tar filesystem. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2007,2008,2009 Free Software Foundation, Inc. + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,66 +17,11 @@ * along with this program. If not, see . */ -#include -#include #include -#include -#include -#include -GRUB_MOD_LICENSE ("GPLv3+"); - -#define ATTR_TYPE 0160000 -#define ATTR_FILE 0100000 -#define ATTR_DIR 0040000 -#define ATTR_LNK 0120000 - -#ifdef MODE_ODC -#define ALIGN_CPIO(x) x -#define MAGIC "070707" -struct head -{ - char magic[6]; - char dev[6]; - char ino[6]; - char mode[6]; - char uid[6]; - char gid[6]; - char nlink[6]; - char rdev[6]; - char mtime[11]; - char namesize[6]; - char filesize[11]; -} __attribute__ ((packed)); -#elif defined (MODE_NEWC) -#define ALIGN_CPIO(x) (ALIGN_UP ((x), 4)) -#define MAGIC "070701" -#define MAGIC2 "070702" -struct head -{ - char magic[6]; - char ino[8]; - char mode[8]; - char uid[8]; - char gid[8]; - char nlink[8]; - char mtime[8]; - char filesize[8]; - char devmajor[8]; - char devminor[8]; - char rdevmajor[8]; - char rdevminor[8]; - char namesize[8]; - char check[8]; -} __attribute__ ((packed)); -#elif !defined (MODE_USTAR) /* cpio support */ #define ALIGN_CPIO(x) (ALIGN_UP ((x), 2)) -#ifdef MODE_BIGENDIAN -#define MAGIC "\x71\xc7" -#else #define MAGIC "\xc7\x71" -#endif struct head { grub_uint16_t magic[1]; @@ -91,693 +36,27 @@ struct head grub_uint16_t namesize[1]; grub_uint16_t filesize[2]; } __attribute__ ((packed)); -#else -/* tar support */ -#define MAGIC "ustar" -struct head -{ - char name[100]; - char mode[8]; - char uid[8]; - char gid[8]; - char size[12]; - char mtime[12]; - char chksum[8]; - char typeflag; - char linkname[100]; - char magic[6]; - char version[2]; - char uname[32]; - char gname[32]; - char devmajor[8]; - char devminor[8]; - char prefix[155]; -} __attribute__ ((packed)); -#endif -struct grub_cpio_data -{ - grub_disk_t disk; - grub_off_t hofs; - grub_off_t dofs; - grub_off_t size; -#ifdef MODE_USTAR - char *linkname; - grub_size_t linkname_alloc; -#endif -}; - -static grub_dl_t my_mod; - -static inline void -canonicalize (char *name) -{ - char *iptr, *optr; - for (iptr = name, optr = name; *iptr; ) - { - while (*iptr == '/') - iptr++; - if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0)) - { - iptr += 2; - continue; - } - if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0)) - { - iptr += 3; - if (optr == name) - continue; - for (optr -= 2; optr >= name && *optr != '/'; optr--); - optr++; - continue; - } - while (*iptr && *iptr != '/') - *optr++ = *iptr++; - if (*iptr) - *optr++ = *iptr++; - } - *optr = 0; -} - -#if defined (MODE_ODC) || defined (MODE_USTAR) -static inline unsigned long long -read_number (const char *str, grub_size_t size) -{ - unsigned long long ret = 0; - while (size-- && *str >= '0' && *str <= '7') - ret = (ret << 3) | (*str++ & 0xf); - return ret; -} -#elif defined (MODE_NEWC) -static inline unsigned long long -read_number (const char *str, grub_size_t size) -{ - unsigned long long ret = 0; - while (size-- && grub_isxdigit (*str)) - { - char dig = *str++; - if (dig >= '0' && dig <= '9') - dig &= 0xf; - else if (dig >= 'a' && dig <= 'f') - dig -= 'a' - 10; - else - dig -= 'A' - 10; - ret = (ret << 4) | (dig); - } - return ret; -} -#else static inline unsigned long long read_number (const grub_uint16_t *arr, grub_size_t size) { long long ret = 0; -#ifdef MODE_BIGENDIAN - while (size--) - ret = (ret << 16) | grub_be_to_cpu16 (*arr++); -#else while (size--) ret = (ret << 16) | grub_le_to_cpu16 (*arr++); -#endif return ret; } -#endif -static grub_err_t -grub_cpio_find_file (struct grub_cpio_data *data, char **name, - grub_int32_t *mtime, grub_disk_addr_t *ofs, - grub_uint32_t *mode) -{ -#ifndef MODE_USTAR - struct head hd; - grub_size_t namesize; - grub_uint32_t modeval; +#define FSNAME "cpiofs" - if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) - return grub_errno; +#include "cpio_common.c" - if (grub_memcmp (hd.magic, MAGIC, sizeof (hd.magic)) != 0 -#ifdef MAGIC2 - && grub_memcmp (hd.magic, MAGIC2, sizeof (hd.magic)) != 0 -#endif - ) - return grub_error (GRUB_ERR_BAD_FS, "invalid cpio archive"); - data->size = read_number (hd.filesize, ARRAY_SIZE (hd.filesize)); - if (mtime) - *mtime = read_number (hd.mtime, ARRAY_SIZE (hd.mtime)); - modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode)); - namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize)); - - if (mode) - *mode = modeval; - - *name = grub_malloc (namesize + 1); - if (*name == NULL) - return grub_errno; - - if (grub_disk_read (data->disk, 0, data->hofs + sizeof (hd), - namesize, *name)) - { - grub_free (*name); - return grub_errno; - } - (*name)[namesize] = 0; - - if (data->size == 0 && modeval == 0 && namesize == 11 - && grub_memcmp(*name, "TRAILER!!!", 11) == 0) - { - *ofs = 0; - grub_free (*name); - return GRUB_ERR_NONE; - } - - canonicalize (*name); - - data->dofs = data->hofs + ALIGN_CPIO (sizeof (hd) + namesize); - *ofs = data->dofs + ALIGN_CPIO (data->size); -#else - struct head hd; - int reread = 0, have_longname = 0, have_longlink = 0; - - for (reread = 0; reread < 3; reread++) - { - if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) - return grub_errno; - - if (!hd.name[0] && !hd.prefix[0]) - { - *ofs = 0; - return GRUB_ERR_NONE; - } - - if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) - return grub_error (GRUB_ERR_BAD_FS, "invalid tar archive"); - - if (hd.typeflag == 'L') - { - grub_err_t err; - grub_size_t namesize = read_number (hd.size, sizeof (hd.size)); - *name = grub_malloc (namesize + 1); - if (*name == NULL) - return grub_errno; - err = grub_disk_read (data->disk, 0, - data->hofs + GRUB_DISK_SECTOR_SIZE, namesize, - *name); - (*name)[namesize] = 0; - if (err) - return err; - data->hofs += GRUB_DISK_SECTOR_SIZE - + ((namesize + GRUB_DISK_SECTOR_SIZE - 1) & - ~(GRUB_DISK_SECTOR_SIZE - 1)); - have_longname = 1; - continue; - } - - if (hd.typeflag == 'K') - { - grub_err_t err; - grub_size_t linksize = read_number (hd.size, sizeof (hd.size)); - if (data->linkname_alloc < linksize + 1) - { - char *n; - n = grub_malloc (2 * (linksize + 1)); - if (!n) - return grub_errno; - grub_free (data->linkname); - data->linkname = n; - data->linkname_alloc = 2 * (linksize + 1); - } - - err = grub_disk_read (data->disk, 0, - data->hofs + GRUB_DISK_SECTOR_SIZE, linksize, - data->linkname); - if (err) - return err; - data->linkname[linksize] = 0; - data->hofs += GRUB_DISK_SECTOR_SIZE - + ((linksize + GRUB_DISK_SECTOR_SIZE - 1) & - ~(GRUB_DISK_SECTOR_SIZE - 1)); - have_longlink = 1; - continue; - } - - if (!have_longname) - { - grub_size_t extra_size = 0; - - while (extra_size < sizeof (hd.prefix) - && hd.prefix[extra_size]) - extra_size++; - *name = grub_malloc (sizeof (hd.name) + extra_size + 2); - if (*name == NULL) - return grub_errno; - if (hd.prefix[0]) - { - grub_memcpy (*name, hd.prefix, extra_size); - (*name)[extra_size++] = '/'; - } - grub_memcpy (*name + extra_size, hd.name, sizeof (hd.name)); - (*name)[extra_size + sizeof (hd.name)] = 0; - } - - data->size = read_number (hd.size, sizeof (hd.size)); - data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE; - *ofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) & - ~(GRUB_DISK_SECTOR_SIZE - 1)); - if (mtime) - *mtime = read_number (hd.mtime, sizeof (hd.mtime)); - if (mode) - { - *mode = read_number (hd.mode, sizeof (hd.mode)); - switch (hd.typeflag) - { - /* Hardlink. */ - case '1': - /* Symlink. */ - case '2': - *mode |= ATTR_LNK; - break; - case '0': - *mode |= ATTR_FILE; - break; - case '5': - *mode |= ATTR_DIR; - break; - } - } - if (!have_longlink) - { - if (data->linkname_alloc < 101) - { - char *n; - n = grub_malloc (101); - if (!n) - return grub_errno; - grub_free (data->linkname); - data->linkname = n; - data->linkname_alloc = 101; - } - grub_memcpy (data->linkname, hd.linkname, sizeof (hd.linkname)); - data->linkname[100] = 0; - } - - canonicalize (*name); - return GRUB_ERR_NONE; - } -#endif - return GRUB_ERR_NONE; -} - -static struct grub_cpio_data * -grub_cpio_mount (grub_disk_t disk) -{ - struct head hd; - struct grub_cpio_data *data; - - if (grub_disk_read (disk, 0, 0, sizeof (hd), &hd)) - goto fail; - - if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1) -#ifdef MAGIC2 - && grub_memcmp (hd.magic, MAGIC2, sizeof (MAGIC2) - 1) -#endif - ) - goto fail; - - data = (struct grub_cpio_data *) grub_zalloc (sizeof (*data)); - if (!data) - goto fail; - - data->disk = disk; - - return data; - -fail: - grub_error (GRUB_ERR_BAD_FS, "not a " -#ifdef MODE_USTAR - "tar" -#else - "cpio" -#endif - " filesystem"); - return 0; -} - -static grub_err_t -handle_symlink (struct grub_cpio_data *data, - const char *fn, char **name, - grub_uint32_t mode, int *restart) -{ - grub_size_t flen; - char *target; -#ifndef MODE_USTAR - grub_err_t err; -#endif - char *ptr; - char *lastslash; - grub_size_t prefixlen; - char *rest; - grub_size_t size; - - *restart = 0; - - if ((mode & ATTR_TYPE) != ATTR_LNK) - return GRUB_ERR_NONE; - flen = grub_strlen (fn); - if (grub_memcmp (*name, fn, flen) != 0 - || ((*name)[flen] != 0 && (*name)[flen] != '/')) - return GRUB_ERR_NONE; - rest = *name + flen; - lastslash = rest; - if (*rest) - rest++; - while (lastslash >= *name && *lastslash != '/') - lastslash--; - if (lastslash >= *name) - prefixlen = lastslash - *name; - else - prefixlen = 0; - - if (prefixlen) - prefixlen++; - -#ifdef MODE_USTAR - size = grub_strlen (data->linkname); -#else - size = data->size; -#endif - if (size == 0) - return GRUB_ERR_NONE; - target = grub_malloc (size + grub_strlen (*name) + 2); - if (!target) - return grub_errno; - -#ifdef MODE_USTAR - grub_memcpy (target + prefixlen, data->linkname, size); -#else - err = grub_disk_read (data->disk, 0, data->dofs, data->size, - target + prefixlen); - if (err) - return err; -#endif - if (target[prefixlen] == '/') - { - grub_memmove (target, target + prefixlen, size); - ptr = target + size; - ptr = grub_stpcpy (ptr, rest); - *ptr = 0; - grub_dprintf ("cpio", "symlink redirected %s to %s\n", - *name, target); - grub_free (*name); - - canonicalize (target); - *name = target; - *restart = 1; - return GRUB_ERR_NONE; - } - if (prefixlen) - { - grub_memcpy (target, *name, prefixlen); - target[prefixlen-1] = '/'; - } - ptr = target + prefixlen + size; - ptr = grub_stpcpy (ptr, rest); - *ptr = 0; - grub_dprintf ("cpio", "symlink redirected %s to %s\n", - *name, target); - grub_free (*name); - canonicalize (target); - *name = target; - *restart = 1; - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_cpio_dir (grub_device_t device, const char *path_in, - grub_fs_dir_hook_t hook, void *hook_data) -{ - struct grub_cpio_data *data; - grub_disk_addr_t ofs; - char *prev, *name, *path, *ptr; - grub_size_t len; - int symlinknest = 0; - - path = grub_strdup (path_in + 1); - if (!path) - return grub_errno; - canonicalize (path); - for (ptr = path + grub_strlen (path) - 1; ptr >= path && *ptr == '/'; ptr--) - *ptr = 0; - - grub_dl_ref (my_mod); - - prev = 0; - - data = grub_cpio_mount (device->disk); - if (!data) - { - grub_free (path); - return grub_errno; - } - - len = grub_strlen (path); - data->hofs = 0; - while (1) - { - grub_int32_t mtime; - grub_uint32_t mode; - grub_err_t err; - - if (grub_cpio_find_file (data, &name, &mtime, &ofs, &mode)) - goto fail; - - if (!ofs) - break; - - if (grub_memcmp (path, name, len) == 0 - && (name[len] == 0 || name[len] == '/' || len == 0)) - { - char *p, *n; - - n = name + len; - while (*n == '/') - n++; - - p = grub_strchr (n, '/'); - if (p) - *p = 0; - - if (((!prev) || (grub_strcmp (prev, name) != 0)) && *n != 0) - { - struct grub_dirhook_info info; - grub_memset (&info, 0, sizeof (info)); - info.dir = (p != NULL) || ((mode & ATTR_TYPE) == ATTR_DIR); - info.mtime = mtime; - info.mtimeset = 1; - - if (hook (n, &info, hook_data)) - { - grub_free (name); - goto fail; - } - grub_free (prev); - prev = name; - } - else - { - int restart = 0; - err = handle_symlink (data, name, &path, mode, &restart); - grub_free (name); - if (err) - goto fail; - if (restart) - { - len = grub_strlen (path); - if (++symlinknest == 8) - { - grub_error (GRUB_ERR_SYMLINK_LOOP, - N_("too deep nesting of symlinks")); - goto fail; - } - ofs = 0; - } - } - } - else - grub_free (name); - data->hofs = ofs; - } - -fail: - - grub_free (path); - grub_free (prev); -#ifdef MODE_USTAR - grub_free (data->linkname); -#endif - grub_free (data); - - grub_dl_unref (my_mod); - - return grub_errno; -} - -static grub_err_t -grub_cpio_open (grub_file_t file, const char *name_in) -{ - struct grub_cpio_data *data; - grub_disk_addr_t ofs; - char *fn; - char *name = grub_strdup (name_in + 1); - int symlinknest = 0; - - if (!name) - return grub_errno; - - canonicalize (name); - - grub_dl_ref (my_mod); - - data = grub_cpio_mount (file->device->disk); - if (!data) - { - grub_free (name); - return grub_errno; - } - - data->hofs = 0; - while (1) - { - grub_uint32_t mode; - int restart; - - if (grub_cpio_find_file (data, &fn, NULL, &ofs, &mode)) - goto fail; - - if (!ofs) - { - grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name_in); - break; - } - - if (handle_symlink (data, fn, &name, mode, &restart)) - { - grub_free (fn); - goto fail; - } - - if (restart) - { - ofs = 0; - if (++symlinknest == 8) - { - grub_error (GRUB_ERR_SYMLINK_LOOP, - N_("too deep nesting of symlinks")); - goto fail; - } - goto no_match; - } - - if (grub_strcmp (name, fn) != 0) - goto no_match; - - file->data = data; - file->size = data->size; - grub_free (fn); - grub_free (name); - - return GRUB_ERR_NONE; - - no_match: - - grub_free (fn); - data->hofs = ofs; - } - -fail: -#ifdef MODE_USTAR - grub_free (data->linkname); -#endif - grub_free (data); - grub_free (name); - - grub_dl_unref (my_mod); - - return grub_errno; -} - -static grub_ssize_t -grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) -{ - struct grub_cpio_data *data; - - data = file->data; - return (grub_disk_read (data->disk, 0, data->dofs + file->offset, - len, buf)) ? -1 : (grub_ssize_t) len; -} - -static grub_err_t -grub_cpio_close (grub_file_t file) -{ - struct grub_cpio_data *data; - - data = file->data; -#ifdef MODE_USTAR - grub_free (data->linkname); -#endif - grub_free (data); - - grub_dl_unref (my_mod); - - return grub_errno; -} - -static struct grub_fs grub_cpio_fs = { -#ifdef MODE_USTAR - .name = "tarfs", -#elif defined (MODE_ODC) - .name = "odc", -#elif defined (MODE_NEWC) - .name = "newc", -#else - .name = "cpiofs", -#endif - .dir = grub_cpio_dir, - .open = grub_cpio_open, - .read = grub_cpio_read, - .close = grub_cpio_close, -#ifdef GRUB_UTIL - .reserved_first_sector = 0, - .blocklist_install = 0, -#endif -}; - -#ifdef MODE_USTAR -GRUB_MOD_INIT (tar) -#elif defined (MODE_ODC) -GRUB_MOD_INIT (odc) -#elif defined (MODE_NEWC) -GRUB_MOD_INIT (newc) -#elif defined (MODE_BIGENDIAN) -GRUB_MOD_INIT (cpio_be) -#else GRUB_MOD_INIT (cpio) -#endif { grub_fs_register (&grub_cpio_fs); my_mod = mod; } -#ifdef MODE_USTAR -GRUB_MOD_FINI (tar) -#elif defined (MODE_ODC) -GRUB_MOD_FINI (odc) -#elif defined (MODE_NEWC) -GRUB_MOD_FINI (newc) -#elif defined (MODE_BIGENDIAN) -GRUB_MOD_FINI (cpio_be) -#else GRUB_MOD_FINI (cpio) -#endif { grub_fs_unregister (&grub_cpio_fs); } diff --git a/grub-core/fs/cpio_be.c b/grub-core/fs/cpio_be.c index 8bad314cd..40894b97e 100644 --- a/grub-core/fs/cpio_be.c +++ b/grub-core/fs/cpio_be.c @@ -1,2 +1,62 @@ -#define MODE_BIGENDIAN 1 -#include "cpio.c" +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define ALIGN_CPIO(x) (ALIGN_UP ((x), 2)) +#define MAGIC "\x71\xc7" + +struct head +{ + grub_uint16_t magic[1]; + grub_uint16_t dev; + grub_uint16_t ino; + grub_uint16_t mode[1]; + grub_uint16_t uid; + grub_uint16_t gid; + grub_uint16_t nlink; + grub_uint16_t rdev; + grub_uint16_t mtime[2]; + grub_uint16_t namesize[1]; + grub_uint16_t filesize[2]; +} __attribute__ ((packed)); + +static inline unsigned long long +read_number (const grub_uint16_t *arr, grub_size_t size) +{ + long long ret = 0; + while (size--) + ret = (ret << 16) | grub_be_to_cpu16 (*arr++); + return ret; +} + +#define FSNAME "cpiofs_be" + +#include "cpio_common.c" + +GRUB_MOD_INIT (cpio_be) +{ + grub_fs_register (&grub_cpio_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (cpio_be) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/cpio_common.c b/grub-core/fs/cpio_common.c new file mode 100644 index 000000000..ee1bc4e9c --- /dev/null +++ b/grub-core/fs/cpio_common.c @@ -0,0 +1,611 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define ATTR_TYPE 0160000 +#define ATTR_FILE 0100000 +#define ATTR_DIR 0040000 +#define ATTR_LNK 0120000 + +struct grub_cpio_data +{ + grub_disk_t disk; + grub_off_t hofs; + grub_off_t dofs; + grub_off_t size; +#ifdef MODE_USTAR + char *linkname; + grub_size_t linkname_alloc; +#endif +}; + +static grub_dl_t my_mod; + +static inline void +canonicalize (char *name) +{ + char *iptr, *optr; + for (iptr = name, optr = name; *iptr; ) + { + while (*iptr == '/') + iptr++; + if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0)) + { + iptr += 2; + continue; + } + if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0)) + { + iptr += 3; + if (optr == name) + continue; + for (optr -= 2; optr >= name && *optr != '/'; optr--); + optr++; + continue; + } + while (*iptr && *iptr != '/') + *optr++ = *iptr++; + if (*iptr) + *optr++ = *iptr++; + } + *optr = 0; +} + +static grub_err_t +grub_cpio_find_file (struct grub_cpio_data *data, char **name, + grub_int32_t *mtime, grub_disk_addr_t *ofs, + grub_uint32_t *mode) +{ +#ifndef MODE_USTAR + struct head hd; + grub_size_t namesize; + grub_uint32_t modeval; + + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (grub_memcmp (hd.magic, MAGIC, sizeof (hd.magic)) != 0 +#ifdef MAGIC2 + && grub_memcmp (hd.magic, MAGIC2, sizeof (hd.magic)) != 0 +#endif + ) + return grub_error (GRUB_ERR_BAD_FS, "invalid cpio archive"); + data->size = read_number (hd.filesize, ARRAY_SIZE (hd.filesize)); + if (mtime) + *mtime = read_number (hd.mtime, ARRAY_SIZE (hd.mtime)); + modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode)); + namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize)); + + if (mode) + *mode = modeval; + + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + + if (grub_disk_read (data->disk, 0, data->hofs + sizeof (hd), + namesize, *name)) + { + grub_free (*name); + return grub_errno; + } + (*name)[namesize] = 0; + + if (data->size == 0 && modeval == 0 && namesize == 11 + && grub_memcmp(*name, "TRAILER!!!", 11) == 0) + { + *ofs = 0; + grub_free (*name); + return GRUB_ERR_NONE; + } + + canonicalize (*name); + + data->dofs = data->hofs + ALIGN_CPIO (sizeof (hd) + namesize); + *ofs = data->dofs + ALIGN_CPIO (data->size); +#else + struct head hd; + int reread = 0, have_longname = 0, have_longlink = 0; + + for (reread = 0; reread < 3; reread++) + { + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (!hd.name[0] && !hd.prefix[0]) + { + *ofs = 0; + return GRUB_ERR_NONE; + } + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) + return grub_error (GRUB_ERR_BAD_FS, "invalid tar archive"); + + if (hd.typeflag == 'L') + { + grub_err_t err; + grub_size_t namesize = read_number (hd.size, sizeof (hd.size)); + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + err = grub_disk_read (data->disk, 0, + data->hofs + GRUB_DISK_SECTOR_SIZE, namesize, + *name); + (*name)[namesize] = 0; + if (err) + return err; + data->hofs += GRUB_DISK_SECTOR_SIZE + + ((namesize + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + have_longname = 1; + continue; + } + + if (hd.typeflag == 'K') + { + grub_err_t err; + grub_size_t linksize = read_number (hd.size, sizeof (hd.size)); + if (data->linkname_alloc < linksize + 1) + { + char *n; + n = grub_malloc (2 * (linksize + 1)); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; + data->linkname_alloc = 2 * (linksize + 1); + } + + err = grub_disk_read (data->disk, 0, + data->hofs + GRUB_DISK_SECTOR_SIZE, linksize, + data->linkname); + if (err) + return err; + data->linkname[linksize] = 0; + data->hofs += GRUB_DISK_SECTOR_SIZE + + ((linksize + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + have_longlink = 1; + continue; + } + + if (!have_longname) + { + grub_size_t extra_size = 0; + + while (extra_size < sizeof (hd.prefix) + && hd.prefix[extra_size]) + extra_size++; + *name = grub_malloc (sizeof (hd.name) + extra_size + 2); + if (*name == NULL) + return grub_errno; + if (hd.prefix[0]) + { + grub_memcpy (*name, hd.prefix, extra_size); + (*name)[extra_size++] = '/'; + } + grub_memcpy (*name + extra_size, hd.name, sizeof (hd.name)); + (*name)[extra_size + sizeof (hd.name)] = 0; + } + + data->size = read_number (hd.size, sizeof (hd.size)); + data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE; + *ofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + if (mtime) + *mtime = read_number (hd.mtime, sizeof (hd.mtime)); + if (mode) + { + *mode = read_number (hd.mode, sizeof (hd.mode)); + switch (hd.typeflag) + { + /* Hardlink. */ + case '1': + /* Symlink. */ + case '2': + *mode |= ATTR_LNK; + break; + case '0': + *mode |= ATTR_FILE; + break; + case '5': + *mode |= ATTR_DIR; + break; + } + } + if (!have_longlink) + { + if (data->linkname_alloc < 101) + { + char *n; + n = grub_malloc (101); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; + data->linkname_alloc = 101; + } + grub_memcpy (data->linkname, hd.linkname, sizeof (hd.linkname)); + data->linkname[100] = 0; + } + + canonicalize (*name); + return GRUB_ERR_NONE; + } +#endif + return GRUB_ERR_NONE; +} + +static struct grub_cpio_data * +grub_cpio_mount (grub_disk_t disk) +{ + struct head hd; + struct grub_cpio_data *data; + + if (grub_disk_read (disk, 0, 0, sizeof (hd), &hd)) + goto fail; + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1) +#ifdef MAGIC2 + && grub_memcmp (hd.magic, MAGIC2, sizeof (MAGIC2) - 1) +#endif + ) + goto fail; + + data = (struct grub_cpio_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->disk = disk; + + return data; + +fail: + grub_error (GRUB_ERR_BAD_FS, "not a " FSNAME " filesystem"); + return 0; +} + +static grub_err_t +handle_symlink (struct grub_cpio_data *data, + const char *fn, char **name, + grub_uint32_t mode, int *restart) +{ + grub_size_t flen; + char *target; +#ifndef MODE_USTAR + grub_err_t err; +#endif + char *ptr; + char *lastslash; + grub_size_t prefixlen; + char *rest; + grub_size_t size; + + *restart = 0; + + if ((mode & ATTR_TYPE) != ATTR_LNK) + return GRUB_ERR_NONE; + flen = grub_strlen (fn); + if (grub_memcmp (*name, fn, flen) != 0 + || ((*name)[flen] != 0 && (*name)[flen] != '/')) + return GRUB_ERR_NONE; + rest = *name + flen; + lastslash = rest; + if (*rest) + rest++; + while (lastslash >= *name && *lastslash != '/') + lastslash--; + if (lastslash >= *name) + prefixlen = lastslash - *name; + else + prefixlen = 0; + + if (prefixlen) + prefixlen++; + +#ifdef MODE_USTAR + size = grub_strlen (data->linkname); +#else + size = data->size; +#endif + if (size == 0) + return GRUB_ERR_NONE; + target = grub_malloc (size + grub_strlen (*name) + 2); + if (!target) + return grub_errno; + +#ifdef MODE_USTAR + grub_memcpy (target + prefixlen, data->linkname, size); +#else + err = grub_disk_read (data->disk, 0, data->dofs, data->size, + target + prefixlen); + if (err) + return err; +#endif + if (target[prefixlen] == '/') + { + grub_memmove (target, target + prefixlen, size); + ptr = target + size; + ptr = grub_stpcpy (ptr, rest); + *ptr = 0; + grub_dprintf ("cpio", "symlink redirected %s to %s\n", + *name, target); + grub_free (*name); + + canonicalize (target); + *name = target; + *restart = 1; + return GRUB_ERR_NONE; + } + if (prefixlen) + { + grub_memcpy (target, *name, prefixlen); + target[prefixlen-1] = '/'; + } + ptr = target + prefixlen + size; + ptr = grub_stpcpy (ptr, rest); + *ptr = 0; + grub_dprintf ("cpio", "symlink redirected %s to %s\n", + *name, target); + grub_free (*name); + canonicalize (target); + *name = target; + *restart = 1; + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cpio_dir (grub_device_t device, const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_cpio_data *data; + grub_disk_addr_t ofs; + char *prev, *name, *path, *ptr; + grub_size_t len; + int symlinknest = 0; + + path = grub_strdup (path_in + 1); + if (!path) + return grub_errno; + canonicalize (path); + for (ptr = path + grub_strlen (path) - 1; ptr >= path && *ptr == '/'; ptr--) + *ptr = 0; + + grub_dl_ref (my_mod); + + prev = 0; + + data = grub_cpio_mount (device->disk); + if (!data) + { + grub_free (path); + return grub_errno; + } + + len = grub_strlen (path); + data->hofs = 0; + while (1) + { + grub_int32_t mtime; + grub_uint32_t mode; + grub_err_t err; + + if (grub_cpio_find_file (data, &name, &mtime, &ofs, &mode)) + goto fail; + + if (!ofs) + break; + + if (grub_memcmp (path, name, len) == 0 + && (name[len] == 0 || name[len] == '/' || len == 0)) + { + char *p, *n; + + n = name + len; + while (*n == '/') + n++; + + p = grub_strchr (n, '/'); + if (p) + *p = 0; + + if (((!prev) || (grub_strcmp (prev, name) != 0)) && *n != 0) + { + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + info.dir = (p != NULL) || ((mode & ATTR_TYPE) == ATTR_DIR); + info.mtime = mtime; + info.mtimeset = 1; + + if (hook (n, &info, hook_data)) + { + grub_free (name); + goto fail; + } + grub_free (prev); + prev = name; + } + else + { + int restart = 0; + err = handle_symlink (data, name, &path, mode, &restart); + grub_free (name); + if (err) + goto fail; + if (restart) + { + len = grub_strlen (path); + if (++symlinknest == 8) + { + grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + goto fail; + } + ofs = 0; + } + } + } + else + grub_free (name); + data->hofs = ofs; + } + +fail: + + grub_free (path); + grub_free (prev); +#ifdef MODE_USTAR + grub_free (data->linkname); +#endif + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_cpio_open (grub_file_t file, const char *name_in) +{ + struct grub_cpio_data *data; + grub_disk_addr_t ofs; + char *fn; + char *name = grub_strdup (name_in + 1); + int symlinknest = 0; + + if (!name) + return grub_errno; + + canonicalize (name); + + grub_dl_ref (my_mod); + + data = grub_cpio_mount (file->device->disk); + if (!data) + { + grub_free (name); + return grub_errno; + } + + data->hofs = 0; + while (1) + { + grub_uint32_t mode; + int restart; + + if (grub_cpio_find_file (data, &fn, NULL, &ofs, &mode)) + goto fail; + + if (!ofs) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name_in); + break; + } + + if (handle_symlink (data, fn, &name, mode, &restart)) + { + grub_free (fn); + goto fail; + } + + if (restart) + { + ofs = 0; + if (++symlinknest == 8) + { + grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + goto fail; + } + goto no_match; + } + + if (grub_strcmp (name, fn) != 0) + goto no_match; + + file->data = data; + file->size = data->size; + grub_free (fn); + grub_free (name); + + return GRUB_ERR_NONE; + + no_match: + + grub_free (fn); + data->hofs = ofs; + } + +fail: +#ifdef MODE_USTAR + grub_free (data->linkname); +#endif + grub_free (data); + grub_free (name); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_ssize_t +grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_cpio_data *data; + + data = file->data; + return (grub_disk_read (data->disk, 0, data->dofs + file->offset, + len, buf)) ? -1 : (grub_ssize_t) len; +} + +static grub_err_t +grub_cpio_close (grub_file_t file) +{ + struct grub_cpio_data *data; + + data = file->data; +#ifdef MODE_USTAR + grub_free (data->linkname); +#endif + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static struct grub_fs grub_cpio_fs = { + .name = FSNAME, + .dir = grub_cpio_dir, + .open = grub_cpio_open, + .read = grub_cpio_read, + .close = grub_cpio_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif +}; diff --git a/grub-core/fs/newc.c b/grub-core/fs/newc.c index fdcc160e8..0a911e543 100644 --- a/grub-core/fs/newc.c +++ b/grub-core/fs/newc.c @@ -1,2 +1,74 @@ -#define MODE_NEWC 1 -#include "cpio.c" +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define ALIGN_CPIO(x) (ALIGN_UP ((x), 4)) +#define MAGIC "070701" +#define MAGIC2 "070702" +struct head +{ + char magic[6]; + char ino[8]; + char mode[8]; + char uid[8]; + char gid[8]; + char nlink[8]; + char mtime[8]; + char filesize[8]; + char devmajor[8]; + char devminor[8]; + char rdevmajor[8]; + char rdevminor[8]; + char namesize[8]; + char check[8]; +} __attribute__ ((packed)); + +static inline unsigned long long +read_number (const char *str, grub_size_t size) +{ + unsigned long long ret = 0; + while (size-- && grub_isxdigit (*str)) + { + char dig = *str++; + if (dig >= '0' && dig <= '9') + dig &= 0xf; + else if (dig >= 'a' && dig <= 'f') + dig -= 'a' - 10; + else + dig -= 'A' - 10; + ret = (ret << 4) | (dig); + } + return ret; +} + +#define FSNAME "newc" + +#include "cpio_common.c" + +GRUB_MOD_INIT (newc) +{ + grub_fs_register (&grub_cpio_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (newc) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/odc.c b/grub-core/fs/odc.c index 5fa88e3f9..99e9cd629 100644 --- a/grub-core/fs/odc.c +++ b/grub-core/fs/odc.c @@ -1,2 +1,61 @@ -#define MODE_ODC 1 -#include "cpio.c" +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define ALIGN_CPIO(x) x +#define MAGIC "070707" +struct head +{ + char magic[6]; + char dev[6]; + char ino[6]; + char mode[6]; + char uid[6]; + char gid[6]; + char nlink[6]; + char rdev[6]; + char mtime[11]; + char namesize[6]; + char filesize[11]; +} __attribute__ ((packed)); + +static inline unsigned long long +read_number (const char *str, grub_size_t size) +{ + unsigned long long ret = 0; + while (size-- && *str >= '0' && *str <= '7') + ret = (ret << 3) | (*str++ & 0xf); + return ret; +} + +#define FSNAME "odc" + +#include "cpio_common.c" + +GRUB_MOD_INIT (odc) +{ + grub_fs_register (&grub_cpio_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (odc) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c index 6ab62bca7..bf3ce8c3f 100644 --- a/grub-core/fs/tar.c +++ b/grub-core/fs/tar.c @@ -1,2 +1,68 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + #define MODE_USTAR 1 -#include "cpio.c" + +/* tar support */ +#define MAGIC "ustar" +struct head +{ + char name[100]; + char mode[8]; + char uid[8]; + char gid[8]; + char size[12]; + char mtime[12]; + char chksum[8]; + char typeflag; + char linkname[100]; + char magic[6]; + char version[2]; + char uname[32]; + char gname[32]; + char devmajor[8]; + char devminor[8]; + char prefix[155]; +} __attribute__ ((packed)); + +static inline unsigned long long +read_number (const char *str, grub_size_t size) +{ + unsigned long long ret = 0; + while (size-- && *str >= '0' && *str <= '7') + ret = (ret << 3) | (*str++ & 0xf); + return ret; +} + +#define FSNAME "tarfs" + +#include "cpio_common.c" + +GRUB_MOD_INIT (tar) +{ + grub_fs_register (&grub_cpio_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (tar) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/include/grub/fat.h b/include/grub/fat.h index 7d8e51ad5..491ddfdb0 100644 --- a/include/grub/fat.h +++ b/include/grub/fat.h @@ -29,13 +29,18 @@ struct grub_fat_bpb grub_uint8_t sectors_per_cluster; grub_uint16_t num_reserved_sectors; grub_uint8_t num_fats; + /* 0x10 */ grub_uint16_t num_root_entries; grub_uint16_t num_total_sectors_16; grub_uint8_t media; + /*0 x15 */ grub_uint16_t sectors_per_fat_16; grub_uint16_t sectors_per_track; + /*0 x19 */ grub_uint16_t num_heads; + /*0 x1b */ grub_uint32_t num_hidden_sectors; + /* 0x1f */ grub_uint32_t num_total_sectors_32; union { From 0301a8b36d94df9e4f28311f35abadce296c2c84 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 15 Jun 2013 17:39:45 +0200 Subject: [PATCH 32/73] * tests/grub_script_eval.in: Really add the eval test. --- ChangeLog | 4 ++++ tests/grub_script_eval.in | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 tests/grub_script_eval.in diff --git a/ChangeLog b/ChangeLog index cd10ed37a..abed6fa0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-15 Vladimir Serbinenko + + * tests/grub_script_eval.in: Really add the eval test. + 2013-06-14 Vladimir Serbinenko Move flavour-specific parts out of common cpio.c file and diff --git a/tests/grub_script_eval.in b/tests/grub_script_eval.in new file mode 100644 index 000000000..c97b78d77 --- /dev/null +++ b/tests/grub_script_eval.in @@ -0,0 +1,6 @@ +#! @builddir@/grub-shell-tester + +eval echo "Hello world" +valname=tst +eval $valname=hi +echo $tst \ No newline at end of file From a5b55c4b32bc2fc1b424527b8b7067fca91b0d1a Mon Sep 17 00:00:00 2001 From: David Michael Date: Sat, 15 Jun 2013 21:13:04 +0200 Subject: [PATCH 33/73] * configure.ac (FREETYPE): Change AC_CHECK_PROGS to AC_CHECK_TOOLS. (freetype_cflags,freetype_libs): Change freetype-config to $FREETYPE. --- ChangeLog | 5 +++++ configure.ac | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index abed6fa0d..4e7abb564 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-15 David Michael + + * configure.ac (FREETYPE): Change AC_CHECK_PROGS to AC_CHECK_TOOLS. + (freetype_cflags,freetype_libs): Change freetype-config to $FREETYPE. + 2013-06-15 Vladimir Serbinenko * tests/grub_script_eval.in: Really add the eval test. diff --git a/configure.ac b/configure.ac index 2f7b8b3c4..536de2908 100644 --- a/configure.ac +++ b/configure.ac @@ -944,7 +944,7 @@ fi if test x"$grub_mkfont_excuse" = x ; then # Check for freetype libraries. - AC_CHECK_PROGS([FREETYPE], [freetype-config]) + AC_CHECK_TOOLS([FREETYPE], [freetype-config]) if test "x$FREETYPE" = x ; then grub_mkfont_excuse=["need freetype2 library"] fi @@ -952,8 +952,8 @@ fi if test x"$grub_mkfont_excuse" = x ; then # Check for freetype libraries. - freetype_cflags=`freetype-config --cflags` - freetype_libs=`freetype-config --libs` + freetype_cflags=`$FREETYPE --cflags` + freetype_libs=`$FREETYPE --libs` SAVED_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $freetype_cflags" AC_CHECK_HEADERS([ft2build.h], [], From 5027af38cf2b4257b40a5fe883d47345c666ce0e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 16 Jun 2013 00:06:13 +0200 Subject: [PATCH 34/73] Support for cbfs. Also factor out the part which is common for all archives to a separate module. This splits tar from cpio as they are very different but keeps cpio, cpio_be, odc and newc together since they're very similar. --- ChangeLog | 7 + Makefile.util.def | 2 + grub-core/Makefile.core.def | 10 + grub-core/commands/nativedisk.c | 4 + grub-core/fs/archelp.c | 298 +++++++++++++++++++ grub-core/fs/cbfs.c | 382 ++++++++++++++++++++++++ grub-core/fs/cpio.c | 1 - grub-core/fs/cpio_be.c | 1 - grub-core/fs/cpio_common.c | 511 ++++---------------------------- grub-core/fs/newc.c | 1 - grub-core/fs/odc.c | 2 +- grub-core/fs/tar.c | 278 ++++++++++++++++- include/grub/archelp.h | 63 ++++ include/grub/cbfs_core.h | 178 +++++++++++ include/grub/disk.h | 1 + 15 files changed, 1285 insertions(+), 454 deletions(-) create mode 100644 grub-core/fs/archelp.c create mode 100644 grub-core/fs/cbfs.c create mode 100644 include/grub/archelp.h create mode 100644 include/grub/cbfs_core.h diff --git a/ChangeLog b/ChangeLog index 4e7abb564..83e90df94 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-06-15 Vladimir Serbinenko + + Support for cbfs. Also factor out the part which is common + for all archives to a separate module. This splits tar from cpio + as they are very different but keeps cpio, cpio_be, odc and newc + together since they're very similar. + 2013-06-15 David Michael * configure.ac (FREETYPE): Change AC_CHECK_PROGS to AC_CHECK_TOOLS. diff --git a/Makefile.util.def b/Makefile.util.def index 220bf6ac4..97abd84c2 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -75,6 +75,8 @@ library = { common = grub-core/fs/afs.c; common = grub-core/fs/bfs.c; common = grub-core/fs/btrfs.c; + common = grub-core/fs/cbfs.c; + common = grub-core/fs/archelp.c; common = grub-core/fs/cpio.c; common = grub-core/fs/cpio_be.c; common = grub-core/fs/odc.c; diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index ed4b72724..9d177c674 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1145,6 +1145,16 @@ module = { cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; }; +module = { + name = archelp; + common = fs/archelp.c; +}; + +module = { + name = cbfs; + common = fs/cbfs.c; +}; + module = { name = cpio; common = fs/cpio.c; diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c index 71d7bc410..af3191313 100644 --- a/grub-core/commands/nativedisk.c +++ b/grub-core/commands/nativedisk.c @@ -78,8 +78,12 @@ get_uuid (const char *name, char **uuid, int getnative) break; /* Virtual disks. */ + /* GRUB dynamically generated files. */ case GRUB_DISK_DEVICE_PROCFS_ID: + /* To access through host OS routines (grub-emu only). */ case GRUB_DISK_DEVICE_HOST_ID: + /* To access coreboot roms. */ + case GRUB_DISK_DEVICE_CBFSDISK_ID: /* GRUB-only memdisk. Can't match any of firmware devices. */ case GRUB_DISK_DEVICE_MEMDISK_ID: grub_dprintf ("nativedisk", "Skipping native disk %s\n", diff --git a/grub-core/fs/archelp.c b/grub-core/fs/archelp.c new file mode 100644 index 000000000..4a7ace117 --- /dev/null +++ b/grub-core/fs/archelp.c @@ -0,0 +1,298 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static inline void +canonicalize (char *name) +{ + char *iptr, *optr; + for (iptr = name, optr = name; *iptr; ) + { + while (*iptr == '/') + iptr++; + if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0)) + { + iptr += 2; + continue; + } + if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0)) + { + iptr += 3; + if (optr == name) + continue; + for (optr -= 2; optr >= name && *optr != '/'; optr--); + optr++; + continue; + } + while (*iptr && *iptr != '/') + *optr++ = *iptr++; + if (*iptr) + *optr++ = *iptr++; + } + *optr = 0; +} + +static grub_err_t +handle_symlink (struct grub_archelp_data *data, + struct grub_archelp_ops *arcops, + const char *fn, char **name, + grub_uint32_t mode, int *restart) +{ + grub_size_t flen; + char *target; + char *ptr; + char *lastslash; + grub_size_t prefixlen; + char *rest; + char *linktarget; + + *restart = 0; + + if ((mode & GRUB_ARCHELP_ATTR_TYPE) != GRUB_ARCHELP_ATTR_LNK + || !arcops->get_link_target) + return GRUB_ERR_NONE; + flen = grub_strlen (fn); + if (grub_memcmp (*name, fn, flen) != 0 + || ((*name)[flen] != 0 && (*name)[flen] != '/')) + return GRUB_ERR_NONE; + rest = *name + flen; + lastslash = rest; + if (*rest) + rest++; + while (lastslash >= *name && *lastslash != '/') + lastslash--; + if (lastslash >= *name) + prefixlen = lastslash - *name; + else + prefixlen = 0; + + if (prefixlen) + prefixlen++; + + linktarget = arcops->get_link_target (data); + if (!linktarget) + return grub_errno; + if (linktarget[0] == '\0') + return GRUB_ERR_NONE; + target = grub_malloc (grub_strlen (linktarget) + grub_strlen (*name) + 2); + if (!target) + return grub_errno; + + grub_strcpy (target + prefixlen, linktarget); + grub_free (linktarget); + if (target[prefixlen] == '/') + { + ptr = grub_stpcpy (target, target + prefixlen); + ptr = grub_stpcpy (ptr, rest); + *ptr = 0; + grub_dprintf ("archelp", "symlink redirected %s to %s\n", + *name, target); + grub_free (*name); + + canonicalize (target); + *name = target; + *restart = 1; + return GRUB_ERR_NONE; + } + if (prefixlen) + { + grub_memcpy (target, *name, prefixlen); + target[prefixlen-1] = '/'; + } + grub_strcat (target, rest); + grub_dprintf ("archelp", "symlink redirected %s to %s\n", + *name, target); + grub_free (*name); + canonicalize (target); + *name = target; + *restart = 1; + return GRUB_ERR_NONE; +} + +grub_err_t +grub_archelp_dir (struct grub_archelp_data *data, + struct grub_archelp_ops *arcops, + const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + char *prev, *name, *path, *ptr; + grub_size_t len; + int symlinknest = 0; + + path = grub_strdup (path_in + 1); + if (!path) + return grub_errno; + canonicalize (path); + for (ptr = path + grub_strlen (path) - 1; ptr >= path && *ptr == '/'; ptr--) + *ptr = 0; + + prev = 0; + + len = grub_strlen (path); + while (1) + { + grub_int32_t mtime; + grub_uint32_t mode; + grub_err_t err; + + if (arcops->find_file (data, &name, &mtime, &mode)) + goto fail; + + if (mode == GRUB_ARCHELP_ATTR_END) + break; + + canonicalize (name); + + if (grub_memcmp (path, name, len) == 0 + && (name[len] == 0 || name[len] == '/' || len == 0)) + { + char *p, *n; + + n = name + len; + while (*n == '/') + n++; + + p = grub_strchr (n, '/'); + if (p) + *p = 0; + + if (((!prev) || (grub_strcmp (prev, name) != 0)) && *n != 0) + { + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + info.dir = (p != NULL) || ((mode & GRUB_ARCHELP_ATTR_TYPE) + == GRUB_ARCHELP_ATTR_DIR); + if (!(mode & GRUB_ARCHELP_ATTR_NOTIME)) + { + info.mtime = mtime; + info.mtimeset = 1; + } + if (hook (n, &info, hook_data)) + { + grub_free (name); + goto fail; + } + grub_free (prev); + prev = name; + } + else + { + int restart = 0; + err = handle_symlink (data, arcops, name, + &path, mode, &restart); + grub_free (name); + if (err) + goto fail; + if (restart) + { + len = grub_strlen (path); + if (++symlinknest == 8) + { + grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + goto fail; + } + arcops->rewind (data); + } + } + } + else + grub_free (name); + } + +fail: + + grub_free (path); + grub_free (prev); + + return grub_errno; +} + +grub_err_t +grub_archelp_open (struct grub_archelp_data *data, + struct grub_archelp_ops *arcops, + const char *name_in) +{ + char *fn; + char *name = grub_strdup (name_in + 1); + int symlinknest = 0; + + if (!name) + return grub_errno; + + canonicalize (name); + + while (1) + { + grub_uint32_t mode; + int restart; + + if (arcops->find_file (data, &fn, NULL, &mode)) + goto fail; + + if (mode == GRUB_ARCHELP_ATTR_END) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name_in); + break; + } + + canonicalize (fn); + + if (handle_symlink (data, arcops, fn, &name, mode, &restart)) + { + grub_free (fn); + goto fail; + } + + if (restart) + { + arcops->rewind (data); + if (++symlinknest == 8) + { + grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + goto fail; + } + goto no_match; + } + + if (grub_strcmp (name, fn) != 0) + goto no_match; + + grub_free (fn); + grub_free (name); + + return GRUB_ERR_NONE; + + no_match: + + grub_free (fn); + } + +fail: + grub_free (name); + + return grub_errno; +} diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c new file mode 100644 index 000000000..d1631f152 --- /dev/null +++ b/grub-core/fs/cbfs.c @@ -0,0 +1,382 @@ +/* cbfs.c - cbfs and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + + +struct grub_archelp_data +{ + grub_disk_t disk; + grub_off_t hofs, next_hofs; + grub_off_t dofs; + grub_off_t size; + grub_off_t cbfs_start; + grub_off_t cbfs_end; + grub_off_t cbfs_align; +}; + +static grub_err_t +grub_cbfs_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, + grub_uint32_t *mode) +{ + grub_size_t offset; + for (;; + data->dofs = data->hofs + offset, + data->next_hofs = ALIGN_UP (data->dofs + data->size, data->cbfs_align)) + { + struct cbfs_file hd; + grub_size_t namesize; + + data->hofs = data->next_hofs; + + if (data->hofs >= data->cbfs_end) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (grub_memcmp (hd.magic, CBFS_FILE_MAGIC, sizeof (hd.magic)) != 0) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + data->size = grub_be_to_cpu32 (hd.len); + (void) mtime; + offset = grub_be_to_cpu32 (hd.offset); + + if (mode) + *mode = GRUB_ARCHELP_ATTR_FILE | GRUB_ARCHELP_ATTR_NOTIME; + + namesize = offset; + if (namesize >= sizeof (hd)) + namesize -= sizeof (hd); + if (namesize == 0) + continue; + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + + if (grub_disk_read (data->disk, 0, data->hofs + sizeof (hd), + namesize, *name)) + { + grub_free (*name); + return grub_errno; + } + + if ((*name)[0] == '\0') + { + grub_free (*name); + *name = NULL; + continue; + } + + (*name)[namesize] = 0; + + data->dofs = data->hofs + offset; + data->next_hofs = ALIGN_UP (data->dofs + data->size, data->cbfs_align); + return GRUB_ERR_NONE; + } +} + +static void +grub_cbfs_rewind (struct grub_archelp_data *data) +{ + data->next_hofs = data->cbfs_start; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_cbfs_find_file, + .rewind = grub_cbfs_rewind + }; + +static int +validate_head (struct cbfs_header *head) +{ + return (head->magic == grub_cpu_to_be32_compile_time (CBFS_HEADER_MAGIC) + && (head->version + == grub_cpu_to_be32_compile_time (CBFS_HEADER_VERSION1) + || head->version + == grub_cpu_to_be32_compile_time (CBFS_HEADER_VERSION2)) + && (grub_be_to_cpu32 (head->bootblocksize) + < grub_be_to_cpu32 (head->romsize)) + && (grub_be_to_cpu32 (head->offset) + < grub_be_to_cpu32 (head->romsize)) + && (grub_be_to_cpu32 (head->offset) + + grub_be_to_cpu32 (head->bootblocksize) + < grub_be_to_cpu32 (head->romsize)) + && head->align != 0 + && (head->align & (head->align - 1)) == 0 + && head->romsize != 0); +} + +static struct grub_archelp_data * +grub_cbfs_mount (grub_disk_t disk) +{ + struct cbfs_file hd; + struct grub_archelp_data *data; + grub_uint32_t ptr; + grub_off_t header_off; + struct cbfs_header head; + + if (grub_disk_read (disk, grub_disk_get_size (disk) - 1, + GRUB_DISK_SECTOR_SIZE - sizeof (ptr), + sizeof (ptr), &ptr)) + goto fail; + + ptr = grub_cpu_to_le32 (ptr); + header_off = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS) + + (grub_int32_t) ptr; + + if (grub_disk_read (disk, 0, header_off, + sizeof (head), &head)) + goto fail; + + if (!validate_head (&head)) + goto fail; + + data = (struct grub_archelp_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->cbfs_start = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS) + - (grub_be_to_cpu32 (head.romsize) - grub_be_to_cpu32 (head.offset)); + data->cbfs_end = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS) + - grub_be_to_cpu32 (head.bootblocksize); + data->cbfs_align = grub_be_to_cpu32 (head.align); + + if (data->cbfs_start >= (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)) + goto fail; + if (data->cbfs_end > (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)) + data->cbfs_end = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS); + + data->next_hofs = data->cbfs_start; + + if (grub_disk_read (disk, 0, data->cbfs_start, sizeof (hd), &hd)) + goto fail; + + if (grub_memcmp (hd.magic, CBFS_FILE_MAGIC, sizeof (CBFS_FILE_MAGIC) - 1)) + goto fail; + + data->disk = disk; + + return data; + +fail: + grub_error (GRUB_ERR_BAD_FS, "not a cbfs filesystem"); + return 0; +} + +static grub_err_t +grub_cbfs_dir (grub_device_t device, const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cbfs_mount (device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_dir (data, &arcops, + path_in, hook, hook_data); + + grub_free (data); + + return err; +} + +static grub_err_t +grub_cbfs_open (grub_file_t file, const char *name_in) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cbfs_mount (file->device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_open (data, &arcops, name_in); + if (err) + { + grub_free (data); + } + else + { + file->data = data; + file->size = data->size; + } + return err; +} + +static grub_ssize_t +grub_cbfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_archelp_data *data; + + data = file->data; + return (grub_disk_read (data->disk, 0, data->dofs + file->offset, + len, buf)) ? -1 : (grub_ssize_t) len; +} + +static grub_err_t +grub_cbfs_close (grub_file_t file) +{ + struct grub_archelp_data *data; + + data = file->data; + grub_free (data); + + return grub_errno; +} + +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) + +static char *cbfsdisk_addr; +static grub_off_t cbfsdisk_size = 0; + +static int +grub_cbfsdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + return hook ("cbfsdisk", hook_data); +} + +static grub_err_t +grub_cbfsdisk_open (const char *name, grub_disk_t disk) +{ + if (grub_strcmp (name, "cbfsdisk")) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a cbfsdisk"); + + disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE; + disk->id = (unsigned long) "cbfs"; + + return GRUB_ERR_NONE; +} + +static void +grub_cbfsdisk_close (grub_disk_t disk __attribute((unused))) +{ +} + +static grub_err_t +grub_cbfsdisk_read (grub_disk_t disk __attribute((unused)), + grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_memcpy (buf, cbfsdisk_addr + (sector << GRUB_DISK_SECTOR_BITS), + size << GRUB_DISK_SECTOR_BITS); + return 0; +} + +static grub_err_t +grub_cbfsdisk_write (grub_disk_t disk __attribute__ ((unused)), + grub_disk_addr_t sector __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused)), + const char *buf __attribute__ ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "rom flashing isn't implemented yet"); +} + +static struct grub_disk_dev grub_cbfsdisk_dev = + { + .name = "cbfsdisk", + .id = GRUB_DISK_DEVICE_CBFSDISK_ID, + .iterate = grub_cbfsdisk_iterate, + .open = grub_cbfsdisk_open, + .close = grub_cbfsdisk_close, + .read = grub_cbfsdisk_read, + .write = grub_cbfsdisk_write, + .next = 0 + }; + +static void +init_cbfsdisk (void) +{ + grub_uint32_t ptr; + struct cbfs_header *head; + + ptr = *(grub_uint32_t *) 0xfffffffc; + head = (struct cbfs_header *) ptr; + + if (!validate_head (head)) + return; + + cbfsdisk_size = ALIGN_UP (grub_be_to_cpu32 (head->romsize), + GRUB_DISK_SECTOR_SIZE); + cbfsdisk_addr = (void *) (grub_addr_t) (0x100000000ULL - cbfsdisk_size); + + grub_disk_dev_register (&grub_cbfsdisk_dev); +} + +static void +fini_cbfsdisk (void) +{ + if (! cbfsdisk_size) + return; + grub_disk_dev_unregister (&grub_cbfsdisk_dev); +} + +#endif + +static struct grub_fs grub_cbfs_fs = { + .name = "cbfs", + .dir = grub_cbfs_dir, + .open = grub_cbfs_open, + .read = grub_cbfs_read, + .close = grub_cbfs_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif +}; + +GRUB_MOD_INIT (cbfs) +{ +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) + init_cbfsdisk (); +#endif + grub_fs_register (&grub_cbfs_fs); +} + +GRUB_MOD_FINI (cbfs) +{ + grub_fs_unregister (&grub_cbfs_fs); +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) + fini_cbfsdisk (); +#endif +} diff --git a/grub-core/fs/cpio.c b/grub-core/fs/cpio.c index 628680d23..b14e190f9 100644 --- a/grub-core/fs/cpio.c +++ b/grub-core/fs/cpio.c @@ -53,7 +53,6 @@ read_number (const grub_uint16_t *arr, grub_size_t size) GRUB_MOD_INIT (cpio) { grub_fs_register (&grub_cpio_fs); - my_mod = mod; } GRUB_MOD_FINI (cpio) diff --git a/grub-core/fs/cpio_be.c b/grub-core/fs/cpio_be.c index 40894b97e..83df8195b 100644 --- a/grub-core/fs/cpio_be.c +++ b/grub-core/fs/cpio_be.c @@ -53,7 +53,6 @@ read_number (const grub_uint16_t *arr, grub_size_t size) GRUB_MOD_INIT (cpio_be) { grub_fs_register (&grub_cpio_fs); - my_mod = mod; } GRUB_MOD_FINI (cpio_be) diff --git a/grub-core/fs/cpio_common.c b/grub-core/fs/cpio_common.c index ee1bc4e9c..370324ceb 100644 --- a/grub-core/fs/cpio_common.c +++ b/grub-core/fs/cpio_common.c @@ -23,68 +23,29 @@ #include #include #include +#include GRUB_MOD_LICENSE ("GPLv3+"); -#define ATTR_TYPE 0160000 -#define ATTR_FILE 0100000 -#define ATTR_DIR 0040000 -#define ATTR_LNK 0120000 - -struct grub_cpio_data +struct grub_archelp_data { grub_disk_t disk; grub_off_t hofs; + grub_off_t next_hofs; grub_off_t dofs; grub_off_t size; -#ifdef MODE_USTAR - char *linkname; - grub_size_t linkname_alloc; -#endif }; -static grub_dl_t my_mod; - -static inline void -canonicalize (char *name) -{ - char *iptr, *optr; - for (iptr = name, optr = name; *iptr; ) - { - while (*iptr == '/') - iptr++; - if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0)) - { - iptr += 2; - continue; - } - if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0)) - { - iptr += 3; - if (optr == name) - continue; - for (optr -= 2; optr >= name && *optr != '/'; optr--); - optr++; - continue; - } - while (*iptr && *iptr != '/') - *optr++ = *iptr++; - if (*iptr) - *optr++ = *iptr++; - } - *optr = 0; -} - static grub_err_t -grub_cpio_find_file (struct grub_cpio_data *data, char **name, - grub_int32_t *mtime, grub_disk_addr_t *ofs, - grub_uint32_t *mode) +grub_cpio_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, grub_uint32_t *mode) { -#ifndef MODE_USTAR struct head hd; grub_size_t namesize; grub_uint32_t modeval; + data->hofs = data->next_hofs; + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) return grub_errno; @@ -118,153 +79,57 @@ grub_cpio_find_file (struct grub_cpio_data *data, char **name, if (data->size == 0 && modeval == 0 && namesize == 11 && grub_memcmp(*name, "TRAILER!!!", 11) == 0) { - *ofs = 0; + *mode = GRUB_ARCHELP_ATTR_END; grub_free (*name); return GRUB_ERR_NONE; } - canonicalize (*name); - data->dofs = data->hofs + ALIGN_CPIO (sizeof (hd) + namesize); - *ofs = data->dofs + ALIGN_CPIO (data->size); -#else - struct head hd; - int reread = 0, have_longname = 0, have_longlink = 0; - - for (reread = 0; reread < 3; reread++) - { - if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) - return grub_errno; - - if (!hd.name[0] && !hd.prefix[0]) - { - *ofs = 0; - return GRUB_ERR_NONE; - } - - if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) - return grub_error (GRUB_ERR_BAD_FS, "invalid tar archive"); - - if (hd.typeflag == 'L') - { - grub_err_t err; - grub_size_t namesize = read_number (hd.size, sizeof (hd.size)); - *name = grub_malloc (namesize + 1); - if (*name == NULL) - return grub_errno; - err = grub_disk_read (data->disk, 0, - data->hofs + GRUB_DISK_SECTOR_SIZE, namesize, - *name); - (*name)[namesize] = 0; - if (err) - return err; - data->hofs += GRUB_DISK_SECTOR_SIZE - + ((namesize + GRUB_DISK_SECTOR_SIZE - 1) & - ~(GRUB_DISK_SECTOR_SIZE - 1)); - have_longname = 1; - continue; - } - - if (hd.typeflag == 'K') - { - grub_err_t err; - grub_size_t linksize = read_number (hd.size, sizeof (hd.size)); - if (data->linkname_alloc < linksize + 1) - { - char *n; - n = grub_malloc (2 * (linksize + 1)); - if (!n) - return grub_errno; - grub_free (data->linkname); - data->linkname = n; - data->linkname_alloc = 2 * (linksize + 1); - } - - err = grub_disk_read (data->disk, 0, - data->hofs + GRUB_DISK_SECTOR_SIZE, linksize, - data->linkname); - if (err) - return err; - data->linkname[linksize] = 0; - data->hofs += GRUB_DISK_SECTOR_SIZE - + ((linksize + GRUB_DISK_SECTOR_SIZE - 1) & - ~(GRUB_DISK_SECTOR_SIZE - 1)); - have_longlink = 1; - continue; - } - - if (!have_longname) - { - grub_size_t extra_size = 0; - - while (extra_size < sizeof (hd.prefix) - && hd.prefix[extra_size]) - extra_size++; - *name = grub_malloc (sizeof (hd.name) + extra_size + 2); - if (*name == NULL) - return grub_errno; - if (hd.prefix[0]) - { - grub_memcpy (*name, hd.prefix, extra_size); - (*name)[extra_size++] = '/'; - } - grub_memcpy (*name + extra_size, hd.name, sizeof (hd.name)); - (*name)[extra_size + sizeof (hd.name)] = 0; - } - - data->size = read_number (hd.size, sizeof (hd.size)); - data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE; - *ofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) & - ~(GRUB_DISK_SECTOR_SIZE - 1)); - if (mtime) - *mtime = read_number (hd.mtime, sizeof (hd.mtime)); - if (mode) - { - *mode = read_number (hd.mode, sizeof (hd.mode)); - switch (hd.typeflag) - { - /* Hardlink. */ - case '1': - /* Symlink. */ - case '2': - *mode |= ATTR_LNK; - break; - case '0': - *mode |= ATTR_FILE; - break; - case '5': - *mode |= ATTR_DIR; - break; - } - } - if (!have_longlink) - { - if (data->linkname_alloc < 101) - { - char *n; - n = grub_malloc (101); - if (!n) - return grub_errno; - grub_free (data->linkname); - data->linkname = n; - data->linkname_alloc = 101; - } - grub_memcpy (data->linkname, hd.linkname, sizeof (hd.linkname)); - data->linkname[100] = 0; - } - - canonicalize (*name); - return GRUB_ERR_NONE; - } -#endif + data->next_hofs = data->dofs + ALIGN_CPIO (data->size); return GRUB_ERR_NONE; } -static struct grub_cpio_data * +static char * +grub_cpio_get_link_target (struct grub_archelp_data *data) +{ + char *ret; + grub_err_t err; + + if (data->size == 0) + return grub_strdup (""); + ret = grub_malloc (data->size + 1); + if (!ret) + return NULL; + + err = grub_disk_read (data->disk, 0, data->dofs, data->size, + ret); + if (err) + { + grub_free (ret); + return NULL; + } + ret[data->size] = '\0'; + return ret; +} + +static void +grub_cpio_rewind (struct grub_archelp_data *data) +{ + data->next_hofs = 0; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_cpio_find_file, + .get_link_target = grub_cpio_get_link_target, + .rewind = grub_cpio_rewind + }; + +static struct grub_archelp_data * grub_cpio_mount (grub_disk_t disk) { struct head hd; - struct grub_cpio_data *data; + struct grub_archelp_data *data; if (grub_disk_read (disk, 0, 0, sizeof (hd), &hd)) goto fail; @@ -276,7 +141,7 @@ grub_cpio_mount (grub_disk_t disk) ) goto fail; - data = (struct grub_cpio_data *) grub_zalloc (sizeof (*data)); + data = (struct grub_archelp_data *) grub_zalloc (sizeof (*data)); if (!data) goto fail; @@ -289,293 +154,52 @@ fail: return 0; } -static grub_err_t -handle_symlink (struct grub_cpio_data *data, - const char *fn, char **name, - grub_uint32_t mode, int *restart) -{ - grub_size_t flen; - char *target; -#ifndef MODE_USTAR - grub_err_t err; -#endif - char *ptr; - char *lastslash; - grub_size_t prefixlen; - char *rest; - grub_size_t size; - - *restart = 0; - - if ((mode & ATTR_TYPE) != ATTR_LNK) - return GRUB_ERR_NONE; - flen = grub_strlen (fn); - if (grub_memcmp (*name, fn, flen) != 0 - || ((*name)[flen] != 0 && (*name)[flen] != '/')) - return GRUB_ERR_NONE; - rest = *name + flen; - lastslash = rest; - if (*rest) - rest++; - while (lastslash >= *name && *lastslash != '/') - lastslash--; - if (lastslash >= *name) - prefixlen = lastslash - *name; - else - prefixlen = 0; - - if (prefixlen) - prefixlen++; - -#ifdef MODE_USTAR - size = grub_strlen (data->linkname); -#else - size = data->size; -#endif - if (size == 0) - return GRUB_ERR_NONE; - target = grub_malloc (size + grub_strlen (*name) + 2); - if (!target) - return grub_errno; - -#ifdef MODE_USTAR - grub_memcpy (target + prefixlen, data->linkname, size); -#else - err = grub_disk_read (data->disk, 0, data->dofs, data->size, - target + prefixlen); - if (err) - return err; -#endif - if (target[prefixlen] == '/') - { - grub_memmove (target, target + prefixlen, size); - ptr = target + size; - ptr = grub_stpcpy (ptr, rest); - *ptr = 0; - grub_dprintf ("cpio", "symlink redirected %s to %s\n", - *name, target); - grub_free (*name); - - canonicalize (target); - *name = target; - *restart = 1; - return GRUB_ERR_NONE; - } - if (prefixlen) - { - grub_memcpy (target, *name, prefixlen); - target[prefixlen-1] = '/'; - } - ptr = target + prefixlen + size; - ptr = grub_stpcpy (ptr, rest); - *ptr = 0; - grub_dprintf ("cpio", "symlink redirected %s to %s\n", - *name, target); - grub_free (*name); - canonicalize (target); - *name = target; - *restart = 1; - return GRUB_ERR_NONE; -} - static grub_err_t grub_cpio_dir (grub_device_t device, const char *path_in, grub_fs_dir_hook_t hook, void *hook_data) { - struct grub_cpio_data *data; - grub_disk_addr_t ofs; - char *prev, *name, *path, *ptr; - grub_size_t len; - int symlinknest = 0; - - path = grub_strdup (path_in + 1); - if (!path) - return grub_errno; - canonicalize (path); - for (ptr = path + grub_strlen (path) - 1; ptr >= path && *ptr == '/'; ptr--) - *ptr = 0; - - grub_dl_ref (my_mod); - - prev = 0; + struct grub_archelp_data *data; + grub_err_t err; data = grub_cpio_mount (device->disk); if (!data) - { - grub_free (path); - return grub_errno; - } + return grub_errno; - len = grub_strlen (path); - data->hofs = 0; - while (1) - { - grub_int32_t mtime; - grub_uint32_t mode; - grub_err_t err; + err = grub_archelp_dir (data, &arcops, + path_in, hook, hook_data); - if (grub_cpio_find_file (data, &name, &mtime, &ofs, &mode)) - goto fail; - - if (!ofs) - break; - - if (grub_memcmp (path, name, len) == 0 - && (name[len] == 0 || name[len] == '/' || len == 0)) - { - char *p, *n; - - n = name + len; - while (*n == '/') - n++; - - p = grub_strchr (n, '/'); - if (p) - *p = 0; - - if (((!prev) || (grub_strcmp (prev, name) != 0)) && *n != 0) - { - struct grub_dirhook_info info; - grub_memset (&info, 0, sizeof (info)); - info.dir = (p != NULL) || ((mode & ATTR_TYPE) == ATTR_DIR); - info.mtime = mtime; - info.mtimeset = 1; - - if (hook (n, &info, hook_data)) - { - grub_free (name); - goto fail; - } - grub_free (prev); - prev = name; - } - else - { - int restart = 0; - err = handle_symlink (data, name, &path, mode, &restart); - grub_free (name); - if (err) - goto fail; - if (restart) - { - len = grub_strlen (path); - if (++symlinknest == 8) - { - grub_error (GRUB_ERR_SYMLINK_LOOP, - N_("too deep nesting of symlinks")); - goto fail; - } - ofs = 0; - } - } - } - else - grub_free (name); - data->hofs = ofs; - } - -fail: - - grub_free (path); - grub_free (prev); -#ifdef MODE_USTAR - grub_free (data->linkname); -#endif grub_free (data); - grub_dl_unref (my_mod); - - return grub_errno; + return err; } static grub_err_t grub_cpio_open (grub_file_t file, const char *name_in) { - struct grub_cpio_data *data; - grub_disk_addr_t ofs; - char *fn; - char *name = grub_strdup (name_in + 1); - int symlinknest = 0; - - if (!name) - return grub_errno; - - canonicalize (name); - - grub_dl_ref (my_mod); + struct grub_archelp_data *data; + grub_err_t err; data = grub_cpio_mount (file->device->disk); if (!data) + return grub_errno; + + err = grub_archelp_open (data, &arcops, name_in); + if (err) { - grub_free (name); - return grub_errno; + grub_free (data); } - - data->hofs = 0; - while (1) + else { - grub_uint32_t mode; - int restart; - - if (grub_cpio_find_file (data, &fn, NULL, &ofs, &mode)) - goto fail; - - if (!ofs) - { - grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name_in); - break; - } - - if (handle_symlink (data, fn, &name, mode, &restart)) - { - grub_free (fn); - goto fail; - } - - if (restart) - { - ofs = 0; - if (++symlinknest == 8) - { - grub_error (GRUB_ERR_SYMLINK_LOOP, - N_("too deep nesting of symlinks")); - goto fail; - } - goto no_match; - } - - if (grub_strcmp (name, fn) != 0) - goto no_match; - file->data = data; file->size = data->size; - grub_free (fn); - grub_free (name); - - return GRUB_ERR_NONE; - - no_match: - - grub_free (fn); - data->hofs = ofs; } - -fail: -#ifdef MODE_USTAR - grub_free (data->linkname); -#endif - grub_free (data); - grub_free (name); - - grub_dl_unref (my_mod); - - return grub_errno; + return err; } static grub_ssize_t grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) { - struct grub_cpio_data *data; + struct grub_archelp_data *data; data = file->data; return (grub_disk_read (data->disk, 0, data->dofs + file->offset, @@ -585,16 +209,11 @@ grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) static grub_err_t grub_cpio_close (grub_file_t file) { - struct grub_cpio_data *data; + struct grub_archelp_data *data; data = file->data; -#ifdef MODE_USTAR - grub_free (data->linkname); -#endif grub_free (data); - grub_dl_unref (my_mod); - return grub_errno; } diff --git a/grub-core/fs/newc.c b/grub-core/fs/newc.c index 0a911e543..c7767ed3b 100644 --- a/grub-core/fs/newc.c +++ b/grub-core/fs/newc.c @@ -65,7 +65,6 @@ read_number (const char *str, grub_size_t size) GRUB_MOD_INIT (newc) { grub_fs_register (&grub_cpio_fs); - my_mod = mod; } GRUB_MOD_FINI (newc) diff --git a/grub-core/fs/odc.c b/grub-core/fs/odc.c index 99e9cd629..7b8a7220e 100644 --- a/grub-core/fs/odc.c +++ b/grub-core/fs/odc.c @@ -20,6 +20,7 @@ #include #define ALIGN_CPIO(x) x + #define MAGIC "070707" struct head { @@ -52,7 +53,6 @@ read_number (const char *str, grub_size_t size) GRUB_MOD_INIT (odc) { grub_fs_register (&grub_cpio_fs); - my_mod = mod; } GRUB_MOD_FINI (odc) diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c index bf3ce8c3f..85382974c 100644 --- a/grub-core/fs/tar.c +++ b/grub-core/fs/tar.c @@ -18,8 +18,15 @@ */ #include +#include +#include -#define MODE_USTAR 1 +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); /* tar support */ #define MAGIC "ustar" @@ -52,14 +59,277 @@ read_number (const char *str, grub_size_t size) return ret; } -#define FSNAME "tarfs" +struct grub_archelp_data +{ + grub_disk_t disk; + grub_off_t hofs, next_hofs; + grub_off_t dofs; + grub_off_t size; + char *linkname; + grub_size_t linkname_alloc; +}; -#include "cpio_common.c" +static grub_err_t +grub_cpio_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, + grub_uint32_t *mode) +{ + struct head hd; + int reread = 0, have_longname = 0, have_longlink = 0; + + data->hofs = data->next_hofs; + + for (reread = 0; reread < 3; reread++) + { + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (!hd.name[0] && !hd.prefix[0]) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) + return grub_error (GRUB_ERR_BAD_FS, "invalid tar archive"); + + if (hd.typeflag == 'L') + { + grub_err_t err; + grub_size_t namesize = read_number (hd.size, sizeof (hd.size)); + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + err = grub_disk_read (data->disk, 0, + data->hofs + GRUB_DISK_SECTOR_SIZE, namesize, + *name); + (*name)[namesize] = 0; + if (err) + return err; + data->hofs += GRUB_DISK_SECTOR_SIZE + + ((namesize + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + have_longname = 1; + continue; + } + + if (hd.typeflag == 'K') + { + grub_err_t err; + grub_size_t linksize = read_number (hd.size, sizeof (hd.size)); + if (data->linkname_alloc < linksize + 1) + { + char *n; + n = grub_malloc (2 * (linksize + 1)); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; + data->linkname_alloc = 2 * (linksize + 1); + } + + err = grub_disk_read (data->disk, 0, + data->hofs + GRUB_DISK_SECTOR_SIZE, linksize, + data->linkname); + if (err) + return err; + data->linkname[linksize] = 0; + data->hofs += GRUB_DISK_SECTOR_SIZE + + ((linksize + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + have_longlink = 1; + continue; + } + + if (!have_longname) + { + grub_size_t extra_size = 0; + + while (extra_size < sizeof (hd.prefix) + && hd.prefix[extra_size]) + extra_size++; + *name = grub_malloc (sizeof (hd.name) + extra_size + 2); + if (*name == NULL) + return grub_errno; + if (hd.prefix[0]) + { + grub_memcpy (*name, hd.prefix, extra_size); + (*name)[extra_size++] = '/'; + } + grub_memcpy (*name + extra_size, hd.name, sizeof (hd.name)); + (*name)[extra_size + sizeof (hd.name)] = 0; + } + + data->size = read_number (hd.size, sizeof (hd.size)); + data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE; + data->next_hofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + if (mtime) + *mtime = read_number (hd.mtime, sizeof (hd.mtime)); + if (mode) + { + *mode = read_number (hd.mode, sizeof (hd.mode)); + switch (hd.typeflag) + { + /* Hardlink. */ + case '1': + /* Symlink. */ + case '2': + *mode |= GRUB_ARCHELP_ATTR_LNK; + break; + case '0': + *mode |= GRUB_ARCHELP_ATTR_FILE; + break; + case '5': + *mode |= GRUB_ARCHELP_ATTR_DIR; + break; + } + } + if (!have_longlink) + { + if (data->linkname_alloc < 101) + { + char *n; + n = grub_malloc (101); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; + data->linkname_alloc = 101; + } + grub_memcpy (data->linkname, hd.linkname, sizeof (hd.linkname)); + data->linkname[100] = 0; + } + return GRUB_ERR_NONE; + } + return GRUB_ERR_NONE; +} + +static char * +grub_cpio_get_link_target (struct grub_archelp_data *data) +{ + return grub_strdup (data->linkname); +} + +static void +grub_cpio_rewind (struct grub_archelp_data *data) +{ + data->next_hofs = 0; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_cpio_find_file, + .get_link_target = grub_cpio_get_link_target, + .rewind = grub_cpio_rewind + }; + +static struct grub_archelp_data * +grub_cpio_mount (grub_disk_t disk) +{ + struct head hd; + struct grub_archelp_data *data; + + if (grub_disk_read (disk, 0, 0, sizeof (hd), &hd)) + goto fail; + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) + goto fail; + + data = (struct grub_archelp_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->disk = disk; + + return data; + +fail: + grub_error (GRUB_ERR_BAD_FS, "not a tarfs filesystem"); + return 0; +} + +static grub_err_t +grub_cpio_dir (grub_device_t device, const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cpio_mount (device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_dir (data, &arcops, + path_in, hook, hook_data); + + grub_free (data->linkname); + grub_free (data); + + return err; +} + +static grub_err_t +grub_cpio_open (grub_file_t file, const char *name_in) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cpio_mount (file->device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_open (data, &arcops, name_in); + if (err) + { + grub_free (data->linkname); + grub_free (data); + } + else + { + file->data = data; + file->size = data->size; + } + return err; +} + +static grub_ssize_t +grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_archelp_data *data; + + data = file->data; + return (grub_disk_read (data->disk, 0, data->dofs + file->offset, + len, buf)) ? -1 : (grub_ssize_t) len; +} + +static grub_err_t +grub_cpio_close (grub_file_t file) +{ + struct grub_archelp_data *data; + + data = file->data; + grub_free (data->linkname); + grub_free (data); + + return grub_errno; +} + +static struct grub_fs grub_cpio_fs = { + .name = "tarfs", + .dir = grub_cpio_dir, + .open = grub_cpio_open, + .read = grub_cpio_read, + .close = grub_cpio_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif +}; GRUB_MOD_INIT (tar) { grub_fs_register (&grub_cpio_fs); - my_mod = mod; } GRUB_MOD_FINI (tar) diff --git a/include/grub/archelp.h b/include/grub/archelp.h new file mode 100644 index 000000000..2611d7f45 --- /dev/null +++ b/include/grub/archelp.h @@ -0,0 +1,63 @@ +/* archelp.h -- Archive helper functions */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#ifndef GRUB_ARCHELP_HEADER +#define GRUB_ARCHELP_HEADER 1 + +#include +#include + +typedef enum + { + GRUB_ARCHELP_ATTR_TYPE = 0160000, + GRUB_ARCHELP_ATTR_FILE = 0100000, + GRUB_ARCHELP_ATTR_DIR = 0040000, + GRUB_ARCHELP_ATTR_LNK = 0120000, + GRUB_ARCHELP_ATTR_NOTIME = 0x80000000, + GRUB_ARCHELP_ATTR_END = 0xffffffff + } grub_archelp_mode_t; + +struct grub_archelp_data; + +struct grub_archelp_ops +{ + grub_err_t + (*find_file) (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, + grub_archelp_mode_t *mode); + + char * + (*get_link_target) (struct grub_archelp_data *data); + + void + (*rewind) (struct grub_archelp_data *data); +}; + +grub_err_t +grub_archelp_dir (struct grub_archelp_data *data, + struct grub_archelp_ops *ops, + const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data); + +grub_err_t +grub_archelp_open (struct grub_archelp_data *data, + struct grub_archelp_ops *ops, + const char *name_in); + +#endif diff --git a/include/grub/cbfs_core.h b/include/grub/cbfs_core.h new file mode 100644 index 000000000..5067b6ef7 --- /dev/null +++ b/include/grub/cbfs_core.h @@ -0,0 +1,178 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2008 Jordan Crouse + * Copyright (C) 2012 Google, Inc. + * Copyright (C) 2013 The Chromium OS Authors. All rights reserved. + * + * This file is dual-licensed. You can choose between: + * - The GNU GPL, version 2, as published by the Free Software Foundation + * - The revised BSD license (without advertising clause) + * + * --------------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA + * --------------------------------------------------------------------------- + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * --------------------------------------------------------------------------- + */ + +#ifndef _CBFS_CORE_H_ +#define _CBFS_CORE_H_ + +#include + +/** These are standard values for the known compression + alogrithms that coreboot knows about for stages and + payloads. Of course, other CBFS users can use whatever + values they want, as long as they understand them. */ + +#define CBFS_COMPRESS_NONE 0 +#define CBFS_COMPRESS_LZMA 1 + +/** These are standard component types for well known + components (i.e - those that coreboot needs to consume. + Users are welcome to use any other value for their + components */ + +#define CBFS_TYPE_STAGE 0x10 +#define CBFS_TYPE_PAYLOAD 0x20 +#define CBFS_TYPE_OPTIONROM 0x30 +#define CBFS_TYPE_BOOTSPLASH 0x40 +#define CBFS_TYPE_RAW 0x50 +#define CBFS_TYPE_VSA 0x51 +#define CBFS_TYPE_MBI 0x52 +#define CBFS_TYPE_MICROCODE 0x53 +#define CBFS_COMPONENT_CMOS_DEFAULT 0xaa +#define CBFS_COMPONENT_CMOS_LAYOUT 0x01aa + +#define CBFS_HEADER_MAGIC 0x4F524243 +#define CBFS_HEADER_VERSION1 0x31313131 +#define CBFS_HEADER_VERSION2 0x31313132 +#define CBFS_HEADER_VERSION CBFS_HEADER_VERSION2 + +#define CBFS_HEADER_INVALID_ADDRESS ((void*)(0xffffffff)) + +/** this is the master cbfs header - it need to be located somewhere available + to bootblock (to load romstage). Where it actually lives is up to coreboot. + On x86, a pointer to this header will live at 0xFFFFFFFC. + For other platforms, you need to define CONFIG_CBFS_HEADER_ROM_OFFSET */ + +struct cbfs_header { + grub_uint32_t magic; + grub_uint32_t version; + grub_uint32_t romsize; + grub_uint32_t bootblocksize; + grub_uint32_t align; + grub_uint32_t offset; + grub_uint32_t architecture; + grub_uint32_t pad[1]; +} __attribute__((packed)); + +/* "Unknown" refers to CBFS headers version 1, + * before the architecture was defined (i.e., x86 only). + */ +#define CBFS_ARCHITECTURE_UNKNOWN 0xFFFFFFFF +#define CBFS_ARCHITECTURE_X86 0x00000001 +#define CBFS_ARCHITECTURE_ARMV7 0x00000010 + +/** This is a component header - every entry in the CBFS + will have this header. + + This is how the component is arranged in the ROM: + + -------------- <- 0 + component header + -------------- <- sizeof(struct component) + component name + -------------- <- offset + data + ... + -------------- <- offset + len +*/ + +#define CBFS_FILE_MAGIC "LARCHIVE" + +struct cbfs_file { + char magic[8]; + grub_uint32_t len; + grub_uint32_t type; + grub_uint32_t checksum; + grub_uint32_t offset; +} __attribute__((packed)); + +/*** Component sub-headers ***/ + +/* Following are component sub-headers for the "standard" + component types */ + +/** This is the sub-header for stage components. Stages are + loaded by coreboot during the normal boot process */ + +struct cbfs_stage { + grub_uint32_t compression; /** Compression type */ + grub_uint64_t entry; /** entry point */ + grub_uint64_t load; /** Where to load in memory */ + grub_uint32_t len; /** length of data to load */ + grub_uint32_t memlen; /** total length of object in memory */ +} __attribute__((packed)); + +/** this is the sub-header for payload components. Payloads + are loaded by coreboot at the end of the boot process */ + +struct cbfs_payload_segment { + grub_uint32_t type; + grub_uint32_t compression; + grub_uint32_t offset; + grub_uint64_t load_addr; + grub_uint32_t len; + grub_uint32_t mem_len; +} __attribute__((packed)); + +struct cbfs_payload { + struct cbfs_payload_segment segments; +}; + +#define PAYLOAD_SEGMENT_CODE 0x45444F43 +#define PAYLOAD_SEGMENT_DATA 0x41544144 +#define PAYLOAD_SEGMENT_BSS 0x20535342 +#define PAYLOAD_SEGMENT_PARAMS 0x41524150 +#define PAYLOAD_SEGMENT_ENTRY 0x52544E45 + +struct cbfs_optionrom { + grub_uint32_t compression; + grub_uint32_t len; +} __attribute__((packed)); + +#endif diff --git a/include/grub/disk.h b/include/grub/disk.h index 8fa09a6df..c91583dfd 100644 --- a/include/grub/disk.h +++ b/include/grub/disk.h @@ -46,6 +46,7 @@ enum grub_disk_dev_id GRUB_DISK_DEVICE_ARCDISK_ID, GRUB_DISK_DEVICE_HOSTDISK_ID, GRUB_DISK_DEVICE_PROCFS_ID, + GRUB_DISK_DEVICE_CBFSDISK_ID }; struct grub_disk; From e6930a454d6854a44862675a9c7f0b61ef30a9e7 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 16 Jun 2013 01:57:55 +0200 Subject: [PATCH 35/73] Enable coreboot information commands even when not loaded as coreboot payload (e.g. when loaded from SeaBIOS-as-payload). --- ChangeLog | 5 ++ grub-core/Makefile.core.def | 18 +++++- grub-core/kern/i386/coreboot/cbtable.c | 83 ++++++++++++++++++++++++++ grub-core/kern/i386/coreboot/mmap.c | 59 +----------------- grub-core/term/i386/coreboot/cbmemc.c | 2 +- 5 files changed, 105 insertions(+), 62 deletions(-) create mode 100644 grub-core/kern/i386/coreboot/cbtable.c diff --git a/ChangeLog b/ChangeLog index 83e90df94..7d7483012 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-16 Vladimir Serbinenko + + Enable coreboot information commands even when not loaded as + coreboot payload (e.g. when loaded from SeaBIOS-as-payload). + 2013-06-15 Vladimir Serbinenko Support for cbfs. Also factor out the part which is common diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 9d177c674..fcf8a1402 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -170,6 +170,7 @@ kernel = { i386_qemu = kern/i386/qemu/mmap.c; i386_coreboot = kern/i386/coreboot/mmap.c; + i386_coreboot = kern/i386/coreboot/cbtable.c; i386_multiboot = kern/i386/multiboot_mmap.c; @@ -558,22 +559,33 @@ module = { enable = x86; }; +module = { + name = cbtable; + common = kern/i386/coreboot/cbtable.c; + enable = i386_pc; + enable = i386_efi; + enable = i386_qemu; + enable = i386_multiboot; + enable = i386_ieee1275; + enable = x86_64_efi; +}; + module = { name = cbtime; common = commands/i386/coreboot/cb_timestamps.c; - enable = i386_coreboot; + enable = x86; }; module = { name = cbls; common = commands/i386/coreboot/cbls.c; - enable = i386_coreboot; + enable = x86; }; module = { name = cbmemc; common = term/i386/coreboot/cbmemc.c; - enable = i386_coreboot; + enable = x86; }; module = { diff --git a/grub-core/kern/i386/coreboot/cbtable.c b/grub-core/kern/i386/coreboot/cbtable.c new file mode 100644 index 000000000..6cdfc9645 --- /dev/null +++ b/grub-core/kern/i386/coreboot/cbtable.c @@ -0,0 +1,83 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for grub_linuxbios_table_iterate. */ +static int +check_signature (grub_linuxbios_table_header_t tbl_header) +{ + if (! grub_memcmp (tbl_header->signature, "LBIO", 4)) + return 1; + + return 0; +} + +grub_err_t +grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t, + void *), + void *hook_data) +{ + grub_linuxbios_table_header_t table_header; + grub_linuxbios_table_item_t table_item; + + /* Assuming table_header is aligned to its size (8 bytes). */ + + for (table_header = (grub_linuxbios_table_header_t) 0x500; + table_header < (grub_linuxbios_table_header_t) 0x1000; table_header++) + if (check_signature (table_header)) + goto signature_found; + + for (table_header = (grub_linuxbios_table_header_t) 0xf0000; + table_header < (grub_linuxbios_table_header_t) 0x100000; table_header++) + if (check_signature (table_header)) + goto signature_found; + + grub_fatal ("Could not find coreboot table\n"); + +signature_found: + + table_item = + (grub_linuxbios_table_item_t) ((long) table_header + + (long) table_header->header_size); + for (; table_item < (grub_linuxbios_table_item_t) ((long) table_header + + (long) table_header->header_size + + (long) table_header->table_size); + table_item = (grub_linuxbios_table_item_t) ((long) table_item + (long) table_item->size)) + { + if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK + && check_signature ((grub_linuxbios_table_header_t) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1))) + { + table_header = (grub_linuxbios_table_header_t) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1); + goto signature_found; + } + if (hook (table_item, hook_data)) + return 1; + } + + return 0; +} diff --git a/grub-core/kern/i386/coreboot/mmap.c b/grub-core/kern/i386/coreboot/mmap.c index 0aade62e1..119797551 100644 --- a/grub-core/kern/i386/coreboot/mmap.c +++ b/grub-core/kern/i386/coreboot/mmap.c @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2007,2008 Free Software Foundation, Inc. + * Copyright (C) 2007,2008,2013 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,63 +22,6 @@ #include #include -/* Helper for grub_linuxbios_table_iterate. */ -static int -check_signature (grub_linuxbios_table_header_t tbl_header) -{ - if (! grub_memcmp (tbl_header->signature, "LBIO", 4)) - return 1; - - return 0; -} - -grub_err_t -grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t, - void *), - void *hook_data) -{ - grub_linuxbios_table_header_t table_header; - grub_linuxbios_table_item_t table_item; - - /* Assuming table_header is aligned to its size (8 bytes). */ - - for (table_header = (grub_linuxbios_table_header_t) 0x500; - table_header < (grub_linuxbios_table_header_t) 0x1000; table_header++) - if (check_signature (table_header)) - goto signature_found; - - for (table_header = (grub_linuxbios_table_header_t) 0xf0000; - table_header < (grub_linuxbios_table_header_t) 0x100000; table_header++) - if (check_signature (table_header)) - goto signature_found; - - grub_fatal ("Could not find coreboot table\n"); - -signature_found: - - table_item = - (grub_linuxbios_table_item_t) ((long) table_header + - (long) table_header->header_size); - for (; table_item < (grub_linuxbios_table_item_t) ((long) table_header - + (long) table_header->header_size - + (long) table_header->table_size); - table_item = (grub_linuxbios_table_item_t) ((long) table_item + (long) table_item->size)) - { - if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK - && check_signature ((grub_linuxbios_table_header_t) (grub_addr_t) - *(grub_uint64_t *) (table_item + 1))) - { - table_header = (grub_linuxbios_table_header_t) (grub_addr_t) - *(grub_uint64_t *) (table_item + 1); - goto signature_found; - } - if (hook (table_item, hook_data)) - return 1; - } - - return 0; -} - /* Context for grub_machine_mmap_iterate. */ struct grub_machine_mmap_iterate_ctx { diff --git a/grub-core/term/i386/coreboot/cbmemc.c b/grub-core/term/i386/coreboot/cbmemc.c index c58d671a4..f9f7ed9ef 100644 --- a/grub-core/term/i386/coreboot/cbmemc.c +++ b/grub-core/term/i386/coreboot/cbmemc.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include From 99c971afd35d50a42517ce42fd85dc6633bc91dc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 16 Jun 2013 02:54:37 +0200 Subject: [PATCH 36/73] Add support for processed coreboot payload chainloading. --- ChangeLog | 4 + grub-core/loader/i386/coreboot/chainloader.c | 243 +++++++++++++++---- 2 files changed, 197 insertions(+), 50 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7d7483012..6240a3548 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-16 Vladimir Serbinenko + + Add support for processed coreboot payload chainloading. + 2013-06-16 Vladimir Serbinenko Enable coreboot information commands even when not loaded as diff --git a/grub-core/loader/i386/coreboot/chainloader.c b/grub-core/loader/i386/coreboot/chainloader.c index 505aa0b6e..ea3048912 100644 --- a/grub-core/loader/i386/coreboot/chainloader.c +++ b/grub-core/loader/i386/coreboot/chainloader.c @@ -29,6 +29,7 @@ #include #include #include +#include GRUB_MOD_LICENSE ("GPLv3+"); @@ -55,14 +56,176 @@ grub_chain_unload (void) return GRUB_ERR_NONE; } +static grub_err_t +load_elf (grub_file_t file, const char *filename) +{ + grub_elf_t elf; + Elf32_Phdr *phdr; + grub_err_t err; + + elf = grub_elf_file (file, filename); + if (!elf) + return grub_errno; + + if (!grub_elf_is_elf32 (elf)) + return grub_error (GRUB_ERR_BAD_OS, "only ELF32 can be coreboot payload"); + + entry = elf->ehdr.ehdr32.e_entry; + + FOR_ELF32_PHDRS(elf, phdr) + { + grub_uint8_t *load_addr; + grub_relocator_chunk_t ch; + + if (phdr->p_type != PT_LOAD) + continue; + + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + phdr->p_paddr, phdr->p_memsz); + if (err) + { + elf->file = 0; + grub_elf_close (elf); + return err; + } + + load_addr = get_virtual_current_address (ch); + + if (grub_file_seek (elf->file, phdr->p_offset) == (grub_off_t) -1) + { + elf->file = 0; + grub_elf_close (elf); + return grub_errno; + } + + if (phdr->p_filesz) + { + grub_ssize_t read; + read = grub_file_read (elf->file, load_addr, phdr->p_filesz); + if (read != (grub_ssize_t) phdr->p_filesz) + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, + N_("premature end of file %s"), + filename); + elf->file = 0; + grub_elf_close (elf); + return grub_errno; + } + } + + if (phdr->p_filesz < phdr->p_memsz) + grub_memset ((load_addr + phdr->p_filesz), + 0, phdr->p_memsz - phdr->p_filesz); + } + + elf->file = 0; + grub_elf_close (elf); + return GRUB_ERR_NONE; +} + +static grub_err_t +load_segment (grub_file_t file, const char *filename, + void *load_addr, grub_uint32_t comp, + grub_size_t size) +{ + switch (comp) + { + case grub_cpu_to_be32_compile_time (CBFS_COMPRESS_NONE): + if (grub_file_read (file, load_addr, size) + != (grub_ssize_t) size) + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, + N_("premature end of file %s"), + filename); + return grub_errno; + } + return GRUB_ERR_NONE; + default: + return grub_error (GRUB_ERR_BAD_OS, "unsupported compression %d", + grub_be_to_cpu32 (comp)); + } +} + +static grub_err_t +load_chewed (grub_file_t file, const char *filename) +{ + grub_size_t i; + for (i = 0;; i++) + { + struct cbfs_payload_segment segment; + grub_err_t err; + + if (grub_file_seek (file, sizeof (segment) * i) == (grub_off_t) -1 + || grub_file_read (file, &segment, sizeof (segment)) + != sizeof (segment)) + { + if (!grub_errno) + return grub_error (GRUB_ERR_BAD_OS, + "payload is too short"); + return grub_errno; + } + + switch (segment.type) + { + case PAYLOAD_SEGMENT_PARAMS: + break; + + case PAYLOAD_SEGMENT_ENTRY: + entry = grub_be_to_cpu64 (segment.load_addr); + return GRUB_ERR_NONE; + + case PAYLOAD_SEGMENT_BSS: + segment.len = 0; + segment.offset = 0; + segment.len = 0; + case PAYLOAD_SEGMENT_CODE: + case PAYLOAD_SEGMENT_DATA: + { + grub_uint32_t target = grub_be_to_cpu64 (segment.load_addr); + grub_uint32_t memsize = grub_be_to_cpu32 (segment.mem_len); + grub_uint32_t filesize = grub_be_to_cpu32 (segment.len); + grub_uint8_t *load_addr; + grub_relocator_chunk_t ch; + + if (memsize < filesize) + memsize = filesize; + + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + target, memsize); + if (err) + return err; + + load_addr = get_virtual_current_address (ch); + + if (filesize) + { + if (grub_file_seek (file, grub_be_to_cpu32 (segment.offset)) + == (grub_off_t) -1) + return grub_errno; + + err = load_segment (file, filename, load_addr, + segment.compression, filesize); + if (err) + return err; + } + + if (filesize < memsize) + grub_memset ((load_addr + filesize), + 0, memsize - filesize); + } + } + } +} + static grub_err_t grub_cmd_chain (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]) { grub_err_t err; grub_file_t file; - grub_elf_t elf; - Elf32_Phdr *phdr; + grub_uint32_t head; if (argc != 1) return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); @@ -80,63 +243,43 @@ grub_cmd_chain (grub_command_t cmd __attribute__ ((unused)), return grub_errno; } - elf = grub_elf_file (file, argv[0]); - if (!elf) + if (grub_file_read (file, &head, sizeof (head)) != sizeof (head) + || grub_file_seek (file, 0) == (grub_off_t) -1) { - grub_relocator_unload (relocator); - relocator = 0; grub_file_close (file); + grub_relocator_unload (relocator); + relocator = 0; + if (!grub_errno) + return grub_error (GRUB_ERR_BAD_OS, + "payload is too short"); + return grub_errno; } + + switch (head) + { + case ELFMAG0 | (ELFMAG1 << 8) | (ELFMAG2 << 16) | (ELFMAG3 << 24): + err = load_elf (file, argv[0]); + break; + case PAYLOAD_SEGMENT_CODE: + case PAYLOAD_SEGMENT_DATA: + case PAYLOAD_SEGMENT_PARAMS: + case PAYLOAD_SEGMENT_BSS: + case PAYLOAD_SEGMENT_ENTRY: + err = load_chewed (file, argv[0]); + break; - if (!grub_elf_is_elf32 (elf)) + default: + err = grub_error (GRUB_ERR_BAD_OS, "unrecognised payload type"); + break; + } + grub_file_close (file); + if (err) { grub_relocator_unload (relocator); relocator = 0; - grub_elf_close (elf); + return err; } - entry = elf->ehdr.ehdr32.e_entry; - - FOR_ELF32_PHDRS(elf, phdr) - { - grub_uint8_t *load_addr; - grub_relocator_chunk_t ch; - - if (phdr->p_type != PT_LOAD) - continue; - - err = grub_relocator_alloc_chunk_addr (relocator, &ch, - phdr->p_paddr, phdr->p_memsz); - if (err) - break; - - load_addr = get_virtual_current_address (ch); - - if (grub_file_seek (elf->file, phdr->p_offset) == (grub_off_t) -1) - return grub_errno; - - if (phdr->p_filesz) - { - grub_ssize_t read; - read = grub_file_read (elf->file, load_addr, phdr->p_filesz); - if (read != (grub_ssize_t) phdr->p_filesz) - { - if (!grub_errno) - grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), - argv[0]); - break; - } - } - - if (phdr->p_filesz < phdr->p_memsz) - grub_memset ((load_addr + phdr->p_filesz), - 0, phdr->p_memsz - phdr->p_filesz); - } - - grub_elf_close (elf); - if (grub_errno) - return grub_errno; - grub_loader_set (grub_chain_boot, grub_chain_unload, 0); return GRUB_ERR_NONE; } From 837222cc30fc4babb55289737e5eddd538eb193f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 16 Jun 2013 03:53:07 +0200 Subject: [PATCH 37/73] * grub-core/term/gfxterm.c: USe right background color when scrolling. --- ChangeLog | 4 ++++ grub-core/term/gfxterm.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6240a3548..89020ed6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-16 Vladimir Serbinenko + + * grub-core/term/gfxterm.c: USe right background color when scrolling. + 2013-06-16 Vladimir Serbinenko Add support for processed coreboot payload chainloading. diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index ae4a39030..b1d070762 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -721,7 +721,7 @@ real_scroll (void) i = window.double_repaint ? 2 : 1; - color = virtual_screen.bg_color; + color = virtual_screen.bg_color_display; while (i--) { From 93d8479b705edb45237b31b0d9e77518d2591f1d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 16 Jun 2013 04:06:41 +0200 Subject: [PATCH 38/73] Don't try to detect cbfs on *-emu. --- ChangeLog | 4 ++++ grub-core/fs/cbfs.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 89020ed6e..8208b09d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-16 Vladimir Serbinenko + + Don't try to detect cbfs on *-emu. + 2013-06-16 Vladimir Serbinenko * grub-core/term/gfxterm.c: USe right background color when scrolling. diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c index d1631f152..e298db362 100644 --- a/grub-core/fs/cbfs.c +++ b/grub-core/fs/cbfs.c @@ -260,7 +260,7 @@ grub_cbfs_close (grub_file_t file) return grub_errno; } -#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) static char *cbfsdisk_addr; static grub_off_t cbfsdisk_size = 0; @@ -367,7 +367,7 @@ static struct grub_fs grub_cbfs_fs = { GRUB_MOD_INIT (cbfs) { -#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) init_cbfsdisk (); #endif grub_fs_register (&grub_cbfs_fs); @@ -376,7 +376,7 @@ GRUB_MOD_INIT (cbfs) GRUB_MOD_FINI (cbfs) { grub_fs_unregister (&grub_cbfs_fs); -#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) fini_cbfsdisk (); #endif } From 4aa237c8a400d1a70e75be45e97b6f205b34413e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 16 Jun 2013 04:19:38 +0200 Subject: [PATCH 39/73] Fix casts when compiling coreboot-specific code for 64-bit EFI. --- ChangeLog | 4 ++++ grub-core/commands/i386/coreboot/cbls.c | 3 ++- grub-core/fs/cbfs.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8208b09d7..e71a84854 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-16 Vladimir Serbinenko + + Fix casts when compiling coreboot-specific code for 64-bit EFI. + 2013-06-16 Vladimir Serbinenko Don't try to detect cbfs on *-emu. diff --git a/grub-core/commands/i386/coreboot/cbls.c b/grub-core/commands/i386/coreboot/cbls.c index a3542f372..e0a10596f 100644 --- a/grub-core/commands/i386/coreboot/cbls.c +++ b/grub-core/commands/i386/coreboot/cbls.c @@ -84,7 +84,8 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, grub_printf (": %dx%dx%d pitch=%d lfb=0x%llx %d/%d/%d/%d %d/%d/%d/%d", fb->width, fb->height, - fb->bpp, fb->pitch, fb->lfb, + fb->bpp, fb->pitch, + (unsigned long long) fb->lfb, fb->red_mask_size, fb->green_mask_size, fb->blue_mask_size, fb->reserved_mask_size, fb->red_field_pos, fb->green_field_pos, diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c index e298db362..58a8427d5 100644 --- a/grub-core/fs/cbfs.c +++ b/grub-core/fs/cbfs.c @@ -331,7 +331,7 @@ init_cbfsdisk (void) struct cbfs_header *head; ptr = *(grub_uint32_t *) 0xfffffffc; - head = (struct cbfs_header *) ptr; + head = (struct cbfs_header *) (grub_addr_t) ptr; if (!validate_head (head)) return; From aa62a5b7f1db8d6c7d9e7852403f34eb34c5e152 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sun, 16 Jun 2013 16:12:50 +0400 Subject: [PATCH 40/73] * grub-core/disk/diskfilter.c (scan_devices): Iteratively rescan diskfilter devices until nothing new is found. --- ChangeLog | 5 +++++ grub-core/disk/diskfilter.c | 29 +++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index e71a84854..d8d85ede4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-16 Andrey Borzenkov + + * grub-core/disk/diskfilter.c (scan_devices): Iteratively + rescan diskfilter devices until nothing new is found. + 2013-06-16 Vladimir Serbinenko Fix casts when compiling coreboot-specific code for 64-bit EFI. diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index c8d267a6b..045517726 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -188,6 +188,7 @@ scan_disk (const char *name, int accept_diskfilter) if (!accept_diskfilter && is_valid_diskfilter_name (name)) return 0; + /* FIXME do we still need it? It is not called recursively anymore */ if (scan_depth > 100) return 0; @@ -219,6 +220,8 @@ scan_devices (const char *arname) grub_disk_pull_t pull; struct grub_diskfilter_vg *vg; struct grub_diskfilter_lv *lv = NULL; + int scan_depth; + int need_rescan; for (pull = 0; pull < GRUB_DISK_PULL_MAX; pull++) for (p = grub_disk_dev_list; p; p = p->next) @@ -231,16 +234,26 @@ scan_devices (const char *arname) return; } - for (vg = array_list; vg; vg = vg->next) + scan_depth = 0; + need_rescan = 1; + while (need_rescan && scan_depth++ < 100) { - if (vg->lvs) - for (lv = vg->lvs; lv; lv = lv->next) - if (!lv->scanned && lv->fullname && lv->became_readable_at) - { - scan_disk (lv->fullname, 1); - lv->scanned = 1; - } + need_rescan = 0; + for (vg = array_list; vg; vg = vg->next) + { + if (vg->lvs) + for (lv = vg->lvs; lv; lv = lv->next) + if (!lv->scanned && lv->fullname && lv->became_readable_at) + { + scan_disk (lv->fullname, 1); + lv->scanned = 1; + need_rescan = 1; + } + } } + + if (need_rescan) + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "DISKFILTER scan depth exceeded"); } static int From 702da5c9bfefbe77a10d56494d99568da7f7e83b Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sun, 16 Jun 2013 16:20:44 +0400 Subject: [PATCH 41/73] * conf/Makefile.extra-dist: Add grub-core/fs/cpio_common.c. --- ChangeLog | 4 ++++ conf/Makefile.extra-dist | 2 ++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index d8d85ede4..d44c5dbdb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-16 Andrey Borzenkov + + * conf/Makefile.extra-dist: Add grub-core/fs/cpio_common.c. + 2013-06-16 Andrey Borzenkov * grub-core/disk/diskfilter.c (scan_devices): Iteratively diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index dc788a151..a76083bbe 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -35,6 +35,8 @@ EXTRA_DIST += grub-core/efiemu/runtime/config.h EXTRA_DIST += grub-core/lib/LzmaDec.c +EXTRA_DIST += grub-core/fs/cpio_common.c + EXTRA_DIST += BUGS EXTRA_DIST += util/i386/efi/grub-dumpdevtree EXTRA_DIST += util/spkmodem-recv.c From 5b06b53cbd257d883af2566b3231f1f19cfd513b Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sun, 16 Jun 2013 16:24:05 +0400 Subject: [PATCH 42/73] * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Use grub_term_normal_color, do not hardcode GRUB_TERM_DEFAULT_NORMAL_COLOR. --- ChangeLog | 5 +++++ grub-core/term/gfxterm.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d44c5dbdb..f7fa7106d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-16 Andrey Borzenkov + + * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Use + grub_term_normal_color, do not hardcode GRUB_TERM_DEFAULT_NORMAL_COLOR. + 2013-06-16 Andrey Borzenkov * conf/Makefile.extra-dist: Add grub-core/fs/cpio_common.c. diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index b1d070762..7e0067868 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -249,7 +249,7 @@ grub_virtual_screen_setup (unsigned int x, unsigned int y, virtual_screen.standard_color_setting = DEFAULT_STANDARD_COLOR; - virtual_screen.term_color = GRUB_TERM_DEFAULT_NORMAL_COLOR; + virtual_screen.term_color = grub_term_normal_color; set_term_color (virtual_screen.term_color); From a4c89b17313e50c4d0494d4cde90ee93da6f95ce Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sun, 16 Jun 2013 16:35:20 +0400 Subject: [PATCH 43/73] * grub-core/disk/diskfilter.c: Forgot to remove comment from previous commit. --- ChangeLog | 5 +++++ grub-core/disk/diskfilter.c | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f7fa7106d..cce65e87f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-16 Andrey Borzenkov + + * grub-core/disk/diskfilter.c: Forgot to remove comment + from previous commit. + 2013-06-16 Andrey Borzenkov * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Use diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index 045517726..99bf9e5c3 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -188,7 +188,6 @@ scan_disk (const char *name, int accept_diskfilter) if (!accept_diskfilter && is_valid_diskfilter_name (name)) return 0; - /* FIXME do we still need it? It is not called recursively anymore */ if (scan_depth > 100) return 0; From e639c204e0b74226a34defbfa326e3793b8689fe Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Tue, 25 Jun 2013 15:08:11 +0100 Subject: [PATCH 44/73] * util/grub-script-check.c: Fail on scripts containing no commands, to guard against corrupted grub-mkconfig setups that produce no useful output. * tests/grub_script_no_commands.in: New test. * Makefile.util.def (grub_script_no_commands): Add. Reported by Hans Putter. Fixes Debian bug #713886. --- ChangeLog | 9 +++++++++ Makefile.util.def | 6 ++++++ tests/grub_script_no_commands.in | 21 +++++++++++++++++++++ util/grub-script-check.c | 10 +++++++++- 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/grub_script_no_commands.in diff --git a/ChangeLog b/ChangeLog index cce65e87f..0aae8dffc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-06-25 Colin Watson + + * util/grub-script-check.c: Fail on scripts containing no + commands, to guard against corrupted grub-mkconfig setups that + produce no useful output. + * tests/grub_script_no_commands.in: New test. + * Makefile.util.def (grub_script_no_commands): Add. + Reported by Hans Putter. Fixes Debian bug #713886. + 2013-06-16 Andrey Borzenkov * grub-core/disk/diskfilter.c: Forgot to remove comment diff --git a/Makefile.util.def b/Makefile.util.def index 97abd84c2..0b9f56ccc 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -748,6 +748,12 @@ script = { common = tests/grub_script_not.in; }; +script = { + testcase; + name = grub_script_no_commands; + common = tests/grub_script_no_commands.in; +}; + script = { testcase; name = partmap_test; diff --git a/tests/grub_script_no_commands.in b/tests/grub_script_no_commands.in new file mode 100644 index 000000000..c31d267e5 --- /dev/null +++ b/tests/grub_script_no_commands.in @@ -0,0 +1,21 @@ +#! /bin/sh +set -e + +# grub-script-check refuses to pass a file with no commands; this usually +# indicates a bug in the code generating that file. + +@builddir@/grub-script-check <cmd) + found_cmd = 1; grub_script_execute (script); grub_script_free (script); } @@ -202,6 +204,12 @@ main (int argc, char *argv[]) fprintf (stderr, _("Syntax error at line %u\n"), ctx.lineno); return 1; } + if (! found_cmd) + { + fprintf (stderr, _("Script contains no commands and will do nothing\n"), + ctx.arguments.filename); + return 1; + } return 0; } From a9e5abee0fcb5c1a7e4a15f5181ca41ab0583d01 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Tue, 25 Jun 2013 15:32:36 +0100 Subject: [PATCH 45/73] * .bzrignore: Update with a number of new test-related files. --- .bzrignore | 32 ++++++++++++++++++++++++++++++++ ChangeLog | 4 ++++ 2 files changed, 36 insertions(+) diff --git a/.bzrignore b/.bzrignore index 533046727..40c206522 100644 --- a/.bzrignore +++ b/.bzrignore @@ -7,11 +7,14 @@ *.1 *.8 aclocal.m4 +ahci_test ascii.bitmaps ascii.h autom4te.cache build_env.mk .bzrignore +cdboot_test +cmp_test config.cache config.guess config.h @@ -21,22 +24,29 @@ config.log config.status config.sub configure +core_compress_test DISTLIST docs/*.info docs/stamp-vti docs/version.texi +ehci_test *.elf example_grub_script_test example_scripted_test example_unit_test *.exec +fddboot_test genkernsyms.sh gensymlist.sh gentrigtables +gettext_strings_test grub-bin2h grub-bios-setup +grub_cmd_date grub_cmd_echo grub_cmd_regexp +grub_cmd_set_date +grub_cmd_sleep grub-editenv grub-emu grub_emu_init.c @@ -44,6 +54,7 @@ grub_emu_init.h grub-fstest grub_fstest_init.c grub_fstest_init.h +grub_func_test grub-install grub-kbdcomp grub-macho2img @@ -67,15 +78,22 @@ grub_script_continue grub_script_dollar grub_script_echo1 grub_script_echo_keywords +grub_script_escape_comma +grub_script_eval grub_script_expansion grub_script_final_semicolon grub_script_for1 grub_script_functions +grub_script_gettext grub_script_if +grub_script_leading_whitespace +grub_script_no_commands grub_script_not grub_script_return grub_script_setparams grub_script_shift +grub_script_strcmp +grub_script_test grub_script_vars1 grub_script_while1 grub_script.tab.c @@ -89,6 +107,9 @@ grub_setup_init.h grub-shell grub-shell-tester grub-sparc64-setup +gzcompress_test +hddboot_test +help_test *.img *.image include/grub/cpu @@ -96,27 +117,38 @@ include/grub/machine install-sh lib/libgcrypt-grub libgrub_a_init.c +*.log *.lst +lzocompress_test *.marker Makefile *.mod mod-*.c missing +netboot_test +ohci_test partmap_test +pata_test *.pf2 *.pp po/*.mo po/grub.pot po/POTFILES po/stamp-po +printf_test +priority_queue_unit_test +pseries_test stamp-h stamp-h1 stamp-h.in symlist.c symlist.h trigtables.c +*.trs +uhci_test update-grub_lib unidata.c +xzcompress_test Makefile.in GPATH GRTAGS diff --git a/ChangeLog b/ChangeLog index 0aae8dffc..9e35eab31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-25 Colin Watson + + * .bzrignore: Update with a number of new test-related files. + 2013-06-25 Colin Watson * util/grub-script-check.c: Fail on scripts containing no From eb272d84a4e5207128a5fb0344d738b4dc78252f Mon Sep 17 00:00:00 2001 From: Paul Wise Date: Thu, 11 Jul 2013 13:18:43 +0200 Subject: [PATCH 46/73] * util/grub-reboot.in: Document submenu usage. Also-By: Craig Sanders --- ChangeLog | 5 +++++ util/grub-reboot.in | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9e35eab31..817582706 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-06-21 Paul Wise +2013-06-21 Craig Sanders + + * util/grub-reboot.in: Document submenu usage. + 2013-06-25 Colin Watson * .bzrignore: Update with a number of new test-related files. diff --git a/util/grub-reboot.in b/util/grub-reboot.in index d132e4f30..f0d93617c 100644 --- a/util/grub-reboot.in +++ b/util/grub-reboot.in @@ -51,7 +51,11 @@ usage () { dirmsg="$(gettext_printf "expect GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")" print_option_help "--boot-directory=$(gettext "DIR")" "$dirmsg" echo - gettext "MENU_ENTRY is a number, a menu item title or a menu item identifier."; echo + gettext "MENU_ENTRY is a number, a menu item title or a menu item identifier. Please note that menu items in +submenus or sub-submenus require specifying the submenu components and then the +menu item component. The titles should be separated using the greater-than +character (>) with no extra spaces. Depending on your shell some characters including > may need escpaing. More information about this is available +in the GRUB Manual in the section about the 'default' command. "; echo echo gettext "Report bugs to ."; echo } From 64fce2d829b65fd63f199c00051e4526f9222247 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 13:22:11 +0200 Subject: [PATCH 47/73] * configure.ac: Indicate which liblzma is used if any. --- ChangeLog | 4 ++++ configure.ac | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/ChangeLog b/ChangeLog index 817582706..48b27ac34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-11 Vladimir Serbinenko + + * configure.ac: Indicate which liblzma is used if any. + 2013-06-21 Paul Wise 2013-06-21 Craig Sanders diff --git a/configure.ac b/configure.ac index 536de2908..060568d54 100644 --- a/configure.ac +++ b/configure.ac @@ -1293,4 +1293,9 @@ else echo "With unifont from $FONT_SOURCE" fi echo "*******************************************************" +if test "x$LIBLZMA" = x ; then +echo "Without liblzma (no support for XZ-compressed mips images)" +else +echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" +fi ] From a2371e19b3b85548c47198176ebac23481479633 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 13:34:20 +0200 Subject: [PATCH 48/73] * grub-core/normal/charset.c (bidi_line_wrap): Fix spurios warning. --- ChangeLog | 4 ++++ grub-core/normal/charset.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 48b27ac34..66eb729ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-11 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Fix spurios warning. + 2013-07-11 Vladimir Serbinenko * configure.ac: Indicate which liblzma is used if any. diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c index f4268ec02..54e9d8b6e 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -547,7 +547,7 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { struct grub_unicode_glyph t; unsigned i; - int a, b; + int a = 0, b = 0; if (pos) { a = pos[visual[start].orig_pos].x; From 6f80a7b2318c819941774e8545e1780313734a54 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 13:50:18 +0200 Subject: [PATCH 49/73] * util/grub-mkfont.c (write_font_ascii_bitmap): Fix handling of glyphs not filling whole 8x16 space. --- ChangeLog | 5 +++++ util/grub-mkfont.c | 44 +++++++++++++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66eb729ee..f404fd7d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-11 Vladimir Serbinenko + + * util/grub-mkfont.c (write_font_ascii_bitmap): Fix handling of glyphs + not filling whole 8x16 space. + 2013-07-11 Vladimir Serbinenko * grub-core/normal/charset.c (bidi_line_wrap): Fix spurios warning. diff --git a/util/grub-mkfont.c b/util/grub-mkfont.c index 0343fd293..985e09897 100644 --- a/util/grub-mkfont.c +++ b/util/grub-mkfont.c @@ -784,24 +784,38 @@ write_font_ascii_bitmap (struct grub_font_info *font_info, char *output_file) grub_util_error (_("cannot write to `%s': %s"), output_file, strerror (errno)); - int correct_size; for (glyph = font_info->glyphs_sorted, num = 0; num < font_info->num_glyphs; glyph++, num++) { - correct_size = 1; - if (glyph->width != 8 || glyph->height != 16) - { - /* printf ("Width or height from glyph U+%04x not supported, skipping.\n", glyph->char_code); */ - correct_size = 0; - } - int row; - for (row = 0; row < glyph->height; row++) - { - if (correct_size) - fwrite (&glyph->bitmap[row], sizeof(glyph->bitmap[row]), 1, file); - else - fwrite (&correct_size, 1, 1, file); - } + if (glyph->width == 8 && glyph->height == 16 + && glyph->x_ofs == 0 && glyph->y_ofs == 0) + fwrite (glyph->bitmap, 16, 1, file); + else + { + grub_uint8_t glph[16]; + int p = 0, mask = 0x80; + int row, col; + int dy = 12 - glyph->height - glyph->y_ofs; + for (row = 0; row < 16; row++) + glph[row] = 0; + for (row = 0; row < glyph->height; row++) + for (col = 0; col < glyph->width; col++) + { + int val = glyph->bitmap[p] & mask; + mask >>= 1; + if (mask == 0) + { + mask = 0x80; + p++; + } + if (val && dy + row >= 0 + && dy + row < 16 + && glyph->x_ofs + col >= 0 + && glyph->x_ofs + col < 8) + glph[dy + row] |= 1 << (7 - (glyph->x_ofs + col)); + } + fwrite (glph, 16, 1, file); + } } fclose (file); } From efa8640adbc98e934c97438262e459abe82ec4bc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 14:52:46 +0200 Subject: [PATCH 50/73] * grub-core/bus/usb/usbhub.c: Fix recheck logic. --- ChangeLog | 4 ++++ grub-core/bus/usb/usbhub.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f404fd7d5..21ff3848c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-11 Vladimir Serbinenko + + * grub-core/bus/usb/usbhub.c: Fix recheck logic. + 2013-07-11 Vladimir Serbinenko * util/grub-mkfont.c (write_font_ascii_bitmap): Fix handling of glyphs diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c index e3b7d4032..cec39702b 100644 --- a/grub-core/bus/usb/usbhub.c +++ b/grub-core/bus/usb/usbhub.c @@ -688,10 +688,12 @@ grub_usb_poll_devices (int wait_for_completion) * addressed properly, timeout happened */ hub->controller->dev->pending_reset = 0; npending--; - speed = hub->controller->dev->detect_dev (hub->controller, - i, &changed); } } + if (!hub->controller->dev->pending_reset) + speed = hub->controller->dev->detect_dev (hub->controller, + i, &changed); + if (changed) { detach_device (hub->devices[i]); From 513696149865a6df120514599bffa28106fb00b5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 14:54:49 +0200 Subject: [PATCH 51/73] * configure.ac: Move delimiter after the infos. --- ChangeLog | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 21ff3848c..60cc71a1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-11 Vladimir Serbinenko + + * configure.ac: Move delimiter after the infos. + 2013-07-11 Vladimir Serbinenko * grub-core/bus/usb/usbhub.c: Fix recheck logic. diff --git a/configure.ac b/configure.ac index 060568d54..c9884d25b 100644 --- a/configure.ac +++ b/configure.ac @@ -1292,10 +1292,10 @@ echo "Without unifont" else echo "With unifont from $FONT_SOURCE" fi -echo "*******************************************************" if test "x$LIBLZMA" = x ; then echo "Without liblzma (no support for XZ-compressed mips images)" else echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" fi +echo "*******************************************************" ] From c6a61bda9bb3c484a2a9dddb9eb698d0bb4a1ccb Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 16:02:22 +0200 Subject: [PATCH 52/73] * grub-core/commands/sleep.c: Refresh screen before sleeping. --- ChangeLog | 4 ++++ grub-core/commands/sleep.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 60cc71a1a..55394ae84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-11 Vladimir Serbinenko + + * grub-core/commands/sleep.c: Refresh screen before sleeping. + 2013-07-11 Vladimir Serbinenko * configure.ac: Move delimiter after the infos. diff --git a/grub-core/commands/sleep.c b/grub-core/commands/sleep.c index 98e6280a5..c0989bcb8 100644 --- a/grub-core/commands/sleep.c +++ b/grub-core/commands/sleep.c @@ -78,6 +78,8 @@ grub_cmd_sleep (grub_extcmd_context_t ctxt, int argc, char **args) return 0; } + grub_refresh (); + pos = grub_term_save_pos (); for (; n; n--) From 139072b83ad445cf14e6907fc1b59b9f34214b51 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 16:11:03 +0200 Subject: [PATCH 53/73] * grub-core/commands/pcidump.c: Remove static variables. --- ChangeLog | 4 +++ grub-core/commands/pcidump.c | 64 +++++++++++++++++++++--------------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 55394ae84..ebceca3ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-11 Vladimir Serbinenko + + * grub-core/commands/pcidump.c: Remove static variables. + 2013-07-11 Vladimir Serbinenko * grub-core/commands/sleep.c: Refresh screen before sleeping. diff --git a/grub-core/commands/pcidump.c b/grub-core/commands/pcidump.c index a49cf9393..223d86a74 100644 --- a/grub-core/commands/pcidump.c +++ b/grub-core/commands/pcidump.c @@ -27,9 +27,12 @@ GRUB_MOD_LICENSE ("GPLv3+"); -static grub_uint32_t pciid_check_mask, pciid_check_value; -static int bus, device, function; -static int check_bus, check_device, check_function; +struct iter_cxt +{ + grub_uint32_t pciid_check_mask, pciid_check_value; + int bus, device, function; + int check_bus, check_device, check_function; +}; static const struct grub_arg_option options[] = { @@ -42,21 +45,22 @@ static const struct grub_arg_option options[] = static int grub_pcidump_iter (grub_pci_device_t dev, grub_pci_id_t pciid, - void *data __attribute__ ((unused))) + void *data) { + struct iter_cxt *ctx = data; grub_pci_address_t addr; int i; - if ((pciid & pciid_check_mask) != pciid_check_value) + if ((pciid & ctx->pciid_check_mask) != ctx->pciid_check_value) return 0; - if (check_bus && grub_pci_get_bus (dev) != bus) + if (ctx->check_bus && grub_pci_get_bus (dev) != ctx->bus) return 0; - if (check_device && grub_pci_get_device (dev) != device) + if (ctx->check_device && grub_pci_get_device (dev) != ctx->device) return 0; - if (check_function && grub_pci_get_function (dev) != function) + if (ctx->check_function && grub_pci_get_function (dev) != ctx->function) return 0; for (i = 0; i < 256; i += 4) @@ -76,37 +80,43 @@ grub_cmd_pcidump (grub_extcmd_context_t ctxt, char **argv __attribute__ ((unused))) { const char *ptr; - - pciid_check_value = 0; - pciid_check_mask = 0; + struct iter_cxt ctx = + { + .pciid_check_value = 0, + .pciid_check_mask = 0, + .check_bus = 0, + .check_device = 0, + .check_function = 0, + .bus = 0, + .function = 0, + .device = 0 + }; if (ctxt->state[0].set) { ptr = ctxt->state[0].arg; - pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff); + ctx.pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff); if (grub_errno == GRUB_ERR_BAD_NUMBER) { grub_errno = GRUB_ERR_NONE; ptr = ctxt->state[0].arg; } else - pciid_check_mask |= 0xffff; + ctx.pciid_check_mask |= 0xffff; if (grub_errno) return grub_errno; if (*ptr != ':') return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("missing `%c' symbol"), ':'); ptr++; - pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff) + ctx.pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff) << 16; if (grub_errno == GRUB_ERR_BAD_NUMBER) grub_errno = GRUB_ERR_NONE; else - pciid_check_mask |= 0xffff0000; + ctx.pciid_check_mask |= 0xffff0000; } - pciid_check_value &= pciid_check_mask; - - check_bus = check_device = check_function = 0; + ctx.pciid_check_value &= ctx.pciid_check_mask; if (ctxt->state[1].set) { @@ -114,52 +124,52 @@ grub_cmd_pcidump (grub_extcmd_context_t ctxt, ptr = ctxt->state[1].arg; optr = ptr; - bus = grub_strtoul (ptr, (char **) &ptr, 16); + ctx.bus = grub_strtoul (ptr, (char **) &ptr, 16); if (grub_errno == GRUB_ERR_BAD_NUMBER) { grub_errno = GRUB_ERR_NONE; ptr = optr; } else - check_bus = 1; + ctx.check_bus = 1; if (grub_errno) return grub_errno; if (*ptr != ':') return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("missing `%c' symbol"), ':'); ptr++; optr = ptr; - device = grub_strtoul (ptr, (char **) &ptr, 16); + ctx.device = grub_strtoul (ptr, (char **) &ptr, 16); if (grub_errno == GRUB_ERR_BAD_NUMBER) { grub_errno = GRUB_ERR_NONE; ptr = optr; } else - check_device = 1; + ctx.check_device = 1; if (*ptr == '.') { ptr++; - function = grub_strtoul (ptr, (char **) &ptr, 16); + ctx.function = grub_strtoul (ptr, (char **) &ptr, 16); if (grub_errno) return grub_errno; - check_function = 1; + ctx.check_function = 1; } } - grub_pci_iterate (grub_pcidump_iter, NULL); + grub_pci_iterate (grub_pcidump_iter, &ctx); return GRUB_ERR_NONE; } static grub_extcmd_t cmd; -GRUB_MOD_INIT(setpci) +GRUB_MOD_INIT(pcidump) { cmd = grub_register_extcmd ("pcidump", grub_cmd_pcidump, 0, N_("[-s POSITION] [-d DEVICE]"), N_("Dump PCI configuration space."), options); } -GRUB_MOD_FINI(setpci) +GRUB_MOD_FINI(pcidump) { grub_unregister_extcmd (cmd); } From 9c28da2a898135934be9d49f229139cb8a79867d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Jul 2013 16:24:35 +0200 Subject: [PATCH 54/73] Remove early sm712 init as there is no reason for it (the "watchdog" effect was due to wrong GPIO map). --- ChangeLog | 5 + grub-core/Makefile.am | 9 -- grub-core/Makefile.core.def | 1 - grub-core/boot/mips/loongson/fwstart.S | 137 ------------------------- util/grub-mkimage.c | 19 ++-- 5 files changed, 15 insertions(+), 156 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebceca3ad..c07f858db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-11 Vladimir Serbinenko + + Remove early sm712 init as there is no reason for it (the "watchdog" + effect was due to wrong GPIO map). + 2013-07-11 Vladimir Serbinenko * grub-core/commands/pcidump.c: Remove static variables. diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index e0fc14db1..5145d180d 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -40,15 +40,6 @@ trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac ./gentrigtables > $@ CLEANFILES += trigtables.c -gensm712: video/sm712.c - $(BUILD_CC) -DGENINIT -o $@ -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include $(CPPFLAGS) $< -CLEANFILES += gensm712 - -# trigtables.c -sm712_start.h: gensm712 video/sm712.c $(top_srcdir)/configure.ac - $(builddir)/gensm712 > $@ -CLEANFILES += sm712_start.h - # XXX Use Automake's LEX & YACC support grub_script.tab.h: script/parser.y $(YACC) -d -p grub_script_yy -b grub_script $< diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index fcf8a1402..c4e13947c 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -405,7 +405,6 @@ image = { image = { name = fwstart; mips_loongson = boot/mips/loongson/fwstart.S; - mips_loongson_nodist = sm712_start.h; objcopyflags = '-O binary'; ldflags = '-static-libgcc -lgcc -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic'; enable = mips_loongson; diff --git a/grub-core/boot/mips/loongson/fwstart.S b/grub-core/boot/mips/loongson/fwstart.S index 11ad1c91a..c62b28fe9 100644 --- a/grub-core/boot/mips/loongson/fwstart.S +++ b/grub-core/boot/mips/loongson/fwstart.S @@ -754,140 +754,3 @@ continue: #endif cached_continue: -#ifndef FULOONG2F - /* We have to init video early enough or watchdog will reboot us. */ - - /* Setup PCI controller. */ - - lui $t0, %hi (GRUB_CPU_LOONGSON_PCI_HIT1_SEL_LO) - lui $t1, %hi(0x8000000c) - addiu $t1, $t1, %lo(0x8000000c) - - sw $t1, %lo (GRUB_CPU_LOONGSON_PCI_HIT1_SEL_LO) ($t0) - li $t1, 0xffffffff - sw $t1, %lo (GRUB_CPU_LOONGSON_PCI_HIT1_SEL_HI) ($t0) - - li $t0, GRUB_MACHINE_PCI_CONTROLLER_HEADER - li $t1, (GRUB_PCI_COMMAND_PARITY_ERROR | GRUB_PCI_COMMAND_BUS_MASTER \ - | GRUB_PCI_COMMAND_MEM_ENABLED) - sh $t0, GRUB_PCI_REG_COMMAND ($t1) - li $t1, ((1 << GRUB_PCI_STATUS_DEVSEL_TIMING_SHIFT) \ - | GRUB_PCI_STATUS_FAST_B2B_CAPABLE \ - | GRUB_PCI_STATUS_66MHZ_CAPABLE \ - | GRUB_PCI_STATUS_CAPABILITIES) - sh $t0, GRUB_PCI_REG_STATUS ($t1) - li $t0, 0xff - sw $t0, GRUB_PCI_REG_CACHELINE ($t1) - lui $t1, %hi(0x80000000 | GRUB_PCI_ADDR_MEM_TYPE_64 \ - | GRUB_PCI_ADDR_MEM_PREFETCH) - addiu $t1, $t1, %lo(0x80000000 | GRUB_PCI_ADDR_MEM_TYPE_64 \ - | GRUB_PCI_ADDR_MEM_PREFETCH) - sw $t0, GRUB_PCI_REG_ADDRESS_REG0 ($t1) - sw $zero, GRUB_PCI_REG_ADDRESS_REG1 ($t1) - - /* Find video. */ - /* $t4 chooses device in priority encoding. */ - /* Resulting value is kept in GRUB_MACHINE_PCI_CONF_CTRL_REG. - This way we don't need to sacrifice a register for it. */ -retry_sm712: - /* We have only one bus (0). Function is 0. */ - lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) - lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE) - lui $t3, %hi(GRUB_SM712_PCIID) - addiu $t3, $t3, %lo(GRUB_SM712_PCIID) - ori $t4, $zero, 1 -1: - andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES) - 1) - /* In case of failure try again. SM712 may be slow to come up. */ - beql $t4, $zero, retry_sm712 - nop - sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0) - lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_PCI_ID) ($t1) - bnel $t2, $t3, 1b - sll $t4, $t4, 1 - - /* FIXME: choose address dynamically if needed. */ -#define SM712_MAP 0x04000000 - - lui $t2, %hi(SM712_MAP) - sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0) - sw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_ADDRESS_REG0) ($t1) - - /* Set latency. */ - li $t2, 0x8 - sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0) - sw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_CACHELINE) ($t1) - - /* Enable address spaces. */ - li $t2, 0x7 - sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0) - sw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_COMMAND) ($t1) - - lui $t3, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_SR_INDEX) - li $t2, 0x18 - sb $t2, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_SR_INDEX)($t3) - - lui $t3, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_SR_DATA) - li $t2, 0x11 - sb $t2, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_SR_DATA)($t3) - - li $t2, ((((SM712_MAP & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK) \ - >> GRUB_MACHINE_PCI_WIN_SHIFT) \ - & GRUB_MACHINE_PCI_WIN_MASK)) - lui $t3, %hi(0xbfe00110) - addiu $t3, $t3, %lo(0xbfe00110) - sw $t2, 0 ($t3) - li $t2, (GRUB_MACHINE_PCI_WIN1_ADDR \ - | (SM712_MAP & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)) - - lui $t3, %hi(GRUB_SM712_REG_BASE) - addiu $t3, $t3, %lo(GRUB_SM712_REG_BASE) - addu $t2, $t2, $t3 - lui $t0, %hi(init_table - 0x20000000) - addiu $t0, $t0, %lo(init_table - 0x20000000) - lui $t1, %hi(init_table_end - 0x20000000) - addiu $t1, $t1, %lo(init_table_end - 0x20000000) - li $t5, 0x80 - addiu $t6, $t2, 0x3c0 - -table_cont: - lb $t3, 0($t0) - andi $t5, $t3, 0x80 - andi $t3, $t3, 0x7f - addu $t3, $t3, $t6 - lb $t4, 1($t0) - - bne $zero, $t5, 1f - addiu $t0, $t0, 2 - b 2f - sb $t4, 0($t3) -1: - lb $t4, 0($t3) -2: - bne $t0, $t1, table_cont - nop - - lui $t3, %hi(0x40c000 - GRUB_SM712_REG_BASE) - addiu $t3, $t3, %lo(0x40c000 - GRUB_SM712_REG_BASE) - addu $t1, $t2, $t3 - sw $zero, 0xc ($t1) - sw $zero, 0x40 ($t1) - li $t3, 0x20000 - sw $t3, 0x0 ($t1) - lui $t3, %hi(0x1020100) - addiu $t3, $t3, %lo(0x1020100) - sw $t3, 0x10 ($t1) - - li $t4, 0x16 - sb $t4, GRUB_VGA_IO_SR_INDEX($t2) - - lb $t4, GRUB_VGA_IO_SR_DATA($t2) - - b init_end - nop -init_table: -#include "sm712_start.h" -init_table_end: - .align 4 -init_end: -#endif diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c index 7edf77a3f..daecf24ab 100644 --- a/util/grub-mkimage.c +++ b/util/grub-mkimage.c @@ -1407,15 +1407,16 @@ generate_image (const char *dir, const char *prefix, /* fwstart.img is the only part which can't be tested by using *-elf target. Check it against the checksum. */ const grub_uint8_t yeeloong_fwstart_good_hash[512 / 8] = - { - 0x11, 0x7f, 0xfd, 0x7e, 0xd9, 0xbb, 0x82, 0xe7, - 0x5f, 0xcc, 0xbf, 0x09, 0x1d, 0xfe, 0xfa, 0xd5, - 0x97, 0xfb, 0xbb, 0xd8, 0x76, 0x4b, 0xfc, 0x0a, - 0x4e, 0x3c, 0x91, 0x06, 0x98, 0xa0, 0xe0, 0xda, - 0x4f, 0x74, 0x17, 0x6f, 0x95, 0xd2, 0xec, 0x1b, - 0x7f, 0x12, 0x80, 0x23, 0xcb, 0xa0, 0x2d, 0x59, - 0x15, 0x82, 0x70, 0x3d, 0x23, 0xbf, 0xee, 0x93, - 0x5e, 0x5c, 0xbd, 0x1c, 0x51, 0x0b, 0x0b, 0x45 }; + { + 0x5f, 0x67, 0x46, 0x57, 0x31, 0x30, 0xc5, 0x0a, + 0xe9, 0x98, 0x18, 0xc9, 0xf3, 0xca, 0x45, 0xa5, + 0x75, 0x64, 0x6b, 0xbb, 0x24, 0xcd, 0xb4, 0xbc, + 0xf2, 0x3e, 0x23, 0xf9, 0xc2, 0x6a, 0x8c, 0xde, + 0x3b, 0x94, 0x9c, 0xcc, 0xa5, 0xa7, 0x58, 0xb1, + 0xbe, 0x8b, 0x3d, 0x73, 0x98, 0x18, 0x7e, 0x68, + 0x5e, 0x5f, 0x23, 0x7d, 0x7a, 0xe8, 0x51, 0xf7, + 0x1a, 0xaf, 0x2f, 0x54, 0x11, 0x2e, 0x5c, 0x25 + }; const grub_uint8_t fuloong2f_fwstart_good_hash[512 / 8] = { 0x76, 0x9b, 0xad, 0x6e, 0xa2, 0x39, 0x47, 0x62, From f5ae3717e4c148c7e6d50c3c4d6a698734b3d20f Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sat, 13 Jul 2013 18:44:27 +0400 Subject: [PATCH 55/73] * util/grub-mknetdir.in: Remove stray line from help output. --- ChangeLog | 4 ++++ util/grub-mknetdir.in | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c07f858db..ad6b5e767 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-13 Andrey Borzenkov + + * util/grub-mknetdir.in: Remove stray line from help output. + 2013-07-11 Vladimir Serbinenko Remove early sm712 init as there is no reason for it (the "watchdog" diff --git a/util/grub-mknetdir.in b/util/grub-mknetdir.in index 97d4155e3..b7b59da41 100644 --- a/util/grub-mknetdir.in +++ b/util/grub-mknetdir.in @@ -37,7 +37,6 @@ itanium_dir="${libdir}/@PACKAGE@/ia64-efi" # Print the usage. usage () { gettext_printf "Usage: %s [OPTION]\n" "$self" - gettext; echo "Install GRUB on your drive."; echo echo print_option_help "-h, --help" "$(gettext "print this message and exit")" grub_print_install_files_help From 8e67b50fdf4d37c216b987338fe17ff3d337116a Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sat, 13 Jul 2013 18:48:34 +0400 Subject: [PATCH 56/73] * docs/grub.texi (Commands): Document postition parameters for menuentry command. --- ChangeLog | 5 +++++ docs/grub.texi | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ad6b5e767..45c1df169 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-13 Andrey Borzenkov + + * docs/grub.texi (Commands): Document postition parameters + for menuentry command. + 2013-07-13 Andrey Borzenkov * util/grub-mknetdir.in: Remove stray line from help output. diff --git a/docs/grub.texi b/docs/grub.texi index 9dcfa2d40..1e533641d 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -3264,7 +3264,7 @@ These commands can only be used in the menu: @deffn Command menuentry @var{title} @ [@option{--class=class} @dots{}] [@option{--users=users}] @ [@option{--unrestricted}] [@option{--hotkey=key}] [@option{--id=id}] @ - @{ @var{command}; @dots{} @} + [@var{arg} @dots{}] @{ @var{command}; @dots{} @} This defines a GRUB menu entry named @var{title}. When this entry is selected from the menu, GRUB will set the @var{chosen} environment variable to value of @option{--id} if @option{--id} is given, execute the list of @@ -3288,6 +3288,9 @@ The @option{--hotkey} option associates a hotkey with a menu entry. The @option{--id} may be used to associate unique identifier with a menu entry. @var{id} is string of ASCII aphanumeric characters, underscore and hyphen and should not start with a digit. + +All other arguments including @var{title} are passed as positional parameters +when list of commands is executed with @var{title} always assigned to @code{$1}. @end deffn From 53618046da08fb1514ff70ff67ae372edbac54ad Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 13:49:01 +0200 Subject: [PATCH 57/73] * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfsinfo.c | 20 +++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 45c1df169..8a7c7665f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +20013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting. + 2013-07-13 Andrey Borzenkov * docs/grub.texi (Commands): Document postition parameters diff --git a/grub-core/fs/zfs/zfsinfo.c b/grub-core/fs/zfs/zfsinfo.c index fdb587a4c..c96bf2183 100644 --- a/grub-core/fs/zfs/zfsinfo.c +++ b/grub-core/fs/zfs/zfsinfo.c @@ -132,21 +132,31 @@ print_vdev_info (char *nvlist, int tab) grub_free (path); return GRUB_ERR_NONE; } + char is_mirror=(grub_strcmp(type,VDEV_TYPE_MIRROR) == 0); + char is_raidz=(grub_strcmp(type,VDEV_TYPE_RAIDZ) == 0); - if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0) + if (is_mirror || is_raidz) { int nelm, i; nelm = grub_zfs_nvlist_lookup_nvlist_array_get_nelm (nvlist, ZPOOL_CONFIG_CHILDREN); + if(is_mirror){ + grub_puts_ (N_("This VDEV is a mirror")); + } + else if(is_raidz){ + grub_uint64_t parity; + grub_zfs_nvlist_lookup_uint64(nvlist,"nparity",&parity); + grub_printf_ (N_("This VDEV is a RAIDZ%llu\n"),(unsigned long long)parity); + } print_tabs (tab); if (nelm <= 0) { - grub_puts_ (N_("Incorrect mirror")); + grub_puts_ (N_("Incorrect VDEV")); return GRUB_ERR_NONE; } - grub_printf_ (N_("Mirror with %d children\n"), nelm); + grub_printf_ (N_("VDEV with %d children\n"), nelm); print_state (nvlist, tab); for (i = 0; i < nelm; i++) { @@ -162,14 +172,14 @@ print_vdev_info (char *nvlist, int tab) total element number. And the number itself is fine, only the element isn't. */ - grub_printf_ (N_("Mirror element number %d isn't correct\n"), i); + grub_printf_ (N_("VDEV element number %d isn't correct\n"), i); continue; } /* TRANSLATORS: it's the element carying the number %d, not total element number. This is used in enumeration "Element number 1", "Element number 2", ... */ - grub_printf_ (N_("Mirror element number %d:\n"), i); + grub_printf_ (N_("VDEV element number %d:\n"), i); print_vdev_info (child, tab + 1); grub_free (child); From c71dbd40a9f788d5cdba26e8293dbb95b70f33be Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 14:01:27 +0200 Subject: [PATCH 58/73] * grub-core/fs/zfs/zfs.c (uberblock_verify): Accept version 5000. (check_pool_label): Likewise. * include/grub/zfs/zfs.h: Rewrite SPA_VERSION_* macros. --- ChangeLog | 8 +++++++- grub-core/fs/zfs/zfs.c | 14 +++++--------- include/grub/zfs/zfs.h | 8 ++++++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a7c7665f..a36426a71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,10 @@ -20013-07-14 Massimo Maggi +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c (uberblock_verify): Accept version 5000. + (check_pool_label): Likewise. + * include/grub/zfs/zfs.h: Rewrite SPA_VERSION_* macros. + +2013-07-14 Massimo Maggi * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index 3d57978f4..beea55509 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -490,15 +490,11 @@ uberblock_verify (uberblock_phys_t * ub, grub_uint64_t offset, if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_LITTLE_ENDIAN) == UBERBLOCK_MAGIC - && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN) > 0 - && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN) - <= SPA_VERSION) - endian = GRUB_ZFS_LITTLE_ENDIAN; + && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN))) + endian = GRUB_ZFS_LITTLE_ENDIAN; if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_BIG_ENDIAN) == UBERBLOCK_MAGIC - && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN) > 0 - && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN) - <= SPA_VERSION) + && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN))) endian = GRUB_ZFS_BIG_ENDIAN; if (endian == GRUB_ZFS_UNKNOWN_ENDIAN) @@ -845,13 +841,13 @@ check_pool_label (struct grub_zfs_data *data, } grub_dprintf ("zfs", "check 8 passed\n"); - if (version > SPA_VERSION) + if (!SPA_VERSION_IS_SUPPORTED(version)) { grub_free (nvlist); return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "too new version %llu > %llu", (unsigned long long) version, - (unsigned long long) SPA_VERSION); + (unsigned long long) SPA_VERSION_BEFORE_FEATURES); } grub_dprintf ("zfs", "check 9 passed\n"); diff --git a/include/grub/zfs/zfs.h b/include/grub/zfs/zfs.h index e326c8b2f..429424820 100644 --- a/include/grub/zfs/zfs.h +++ b/include/grub/zfs/zfs.h @@ -36,8 +36,12 @@ typedef enum grub_zfs_endian /* * On-disk version number. */ -#define SPA_VERSION 33ULL - +#define SPA_VERSION_INITIAL 1ULL +#define SPA_VERSION_BEFORE_FEATURES 33ULL +#define SPA_VERSION_FEATURES 5000ULL +#define SPA_VERSION_IS_SUPPORTED(v) \ + (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \ + ((v) == SPA_VERSION_FEATURES)) /* * The following are configuration names used in the nvlist describing a pool's * configuration. From 776bdce291293ff1e124648819360ab07acc897e Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 14:10:42 +0200 Subject: [PATCH 59/73] * grub-core/fs/zfs/zfs.c: Check for feature compatibility. --- ChangeLog | 4 ++ grub-core/fs/zfs/zfs.c | 109 ++++++++++++++++++++++++++++++++++++++++- include/grub/zfs/dmu.h | 46 ++++++++++++++++- include/grub/zfs/zfs.h | 1 + 4 files changed, 157 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index a36426a71..0e118b973 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c: Check for feature compatibility. + 2013-07-14 Massimo Maggi * grub-core/fs/zfs/zfs.c (uberblock_verify): Accept version 5000. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index beea55509..e9c2fe999 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -271,6 +271,20 @@ grub_crypto_cipher_handle_t (*grub_zfs_load_key) (const struct grub_zfs_key *key grub_size_t keysize, grub_uint64_t salt, grub_uint64_t algo) = NULL; +/* + * List of pool features that the grub implementation of ZFS supports for + * read. Note that features that are only required for write do not need + * to be listed here since grub opens pools in read-only mode. + */ +#define MAX_SUPPORTED_FEATURE_STRLEN 50 +static const char *spa_feature_names[] = { + "max.test:feat1",NULL +}; + +static int +check_feature(const char *name, grub_uint64_t val, struct grub_zfs_dir_ctx *ctx); +static int +check_mos_features(dnode_phys_t *mosmdn_phys,grub_zfs_endian_t endian,struct grub_zfs_data* data ); static grub_err_t zlib_decompress (void *s, void *d, @@ -777,7 +791,7 @@ check_pool_label (struct grub_zfs_data *data, int *inserted) { grub_uint64_t pool_state, txg = 0; - char *nvlist; + char *nvlist,*features; #if 0 char *nv; #endif @@ -897,7 +911,31 @@ check_pool_label (struct grub_zfs_data *data, grub_free (nv); } grub_dprintf ("zfs", "check 10 passed\n"); - + features = grub_zfs_nvlist_lookup_nvlist(nvlist, + ZPOOL_CONFIG_FEATURES_FOR_READ); + if (features) + { + const char *nvp=NULL; + char name[MAX_SUPPORTED_FEATURE_STRLEN + 1]; + char *nameptr; + int namelen; + while ((nvp = nvlist_next_nvpair(features, nvp)) != NULL) + { + nvpair_name(nvp, &nameptr,&namelen); + if(namelen > MAX_SUPPORTED_FEATURE_STRLEN) + namelen = MAX_SUPPORTED_FEATURE_STRLEN; + grub_strncpy(name,nameptr,namelen); + name[namelen]=0; + grub_dprintf("zfs","namelen=%u str=%s\n",namelen,name); + if (check_feature(name,1, NULL) != 0) + { + grub_dprintf("zfs","feature missing in check_pool_label:%s\n",name); + err= grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET," check_pool_label missing feature '%s' for read",name); + return err; + } + } + } + grub_dprintf ("zfs", "check 12 passed (feature flags)\n"); grub_free (nvlist); return GRUB_ERR_NONE; @@ -3416,6 +3454,11 @@ zfs_mount (grub_device_t dev) return NULL; } + if (ub->ub_version >= SPA_VERSION_FEATURES && + check_mos_features(&((objset_phys_t *) osp)->os_meta_dnode,ub_endian, + data) != 0) + return NULL; + /* Got the MOS. Save it at the memory addr MOS. */ grub_memmove (&(data->mos.dn), &((objset_phys_t *) osp)->os_meta_dnode, DNODE_SIZE); @@ -3983,6 +4026,68 @@ grub_zfs_dir (grub_device_t device, const char *path, return grub_errno; } +static int +check_feature(const char *name, grub_uint64_t val,__attribute__((unused)) struct grub_zfs_dir_ctx *ctx) +{ + int i; + if(val ==0) return 0; + if(*name==0) return 0; + for (i = 0; spa_feature_names[i] != NULL; i++) + { + if (grub_strcmp(name, spa_feature_names[i]) == 0) + return 0; + } + grub_printf("missing feature for read '%s'\n",name); + return 1; +} + +/* + * Checks whether the MOS features that are active are supported by this + * (GRUB's) implementation of ZFS. + * + * Return: + * 0: Success. + * errnum: Failure. + */ + +static int +check_mos_features(dnode_phys_t *mosmdn_phys,grub_zfs_endian_t endian,struct grub_zfs_data* data ) +{ + grub_uint64_t objnum; + grub_uint8_t errnum = 0; + dnode_end_t dn,mosmdn; + mzap_phys_t* mzp; + grub_zfs_endian_t endianzap; + int size; + grub_memmove(&(mosmdn.dn),mosmdn_phys,sizeof(dnode_phys_t)); + mosmdn.endian=endian; + errnum = dnode_get(&mosmdn, DMU_POOL_DIRECTORY_OBJECT, + DMU_OT_OBJECT_DIRECTORY, &dn,data); + if (errnum != 0) + return errnum; + + /* + * Find the object number for 'features_for_read' and retrieve its + * corresponding dnode. Note that we don't check features_for_write + * because GRUB is not opening the pool for write. + */ + errnum = zap_lookup(&dn, DMU_POOL_FEATURES_FOR_READ, &objnum, data,0); + if (errnum != 0) + return errnum; + + errnum = dnode_get(&mosmdn, objnum, DMU_OTN_ZAP_METADATA, &dn, data); + if (errnum != 0) + return errnum; + + errnum = dmu_read(&dn, 0, (void**)&mzp, &endianzap,data); + if (errnum != 0) + return errnum; + + size = grub_zfs_to_cpu16 (dn.dn.dn_datablkszsec, dn.endian) << SPA_MINBLOCKSHIFT; + return mzap_iterate (mzp,endianzap, size, check_feature,NULL); +} + + #ifdef GRUB_UTIL static grub_err_t grub_zfs_embed (grub_device_t device __attribute__ ((unused)), diff --git a/include/grub/zfs/dmu.h b/include/grub/zfs/dmu.h index 8fc6dc5b5..4ad616c74 100644 --- a/include/grub/zfs/dmu.h +++ b/include/grub/zfs/dmu.h @@ -22,6 +22,39 @@ #ifndef _SYS_DMU_H #define _SYS_DMU_H +#define B_FALSE 0 +#define B_TRUE 1 + +#define DMU_OT_NEWTYPE 0x80 +#define DMU_OT_METADATA 0x40 +#define DMU_OT_BYTESWAP_MASK 0x3f + +#define DMU_OT(byteswap, metadata) \ + (DMU_OT_NEWTYPE | \ + ((metadata) ? DMU_OT_METADATA : 0) | \ + ((byteswap) & DMU_OT_BYTESWAP_MASK)) + +#define DMU_OT_IS_VALID(ot) (((ot) & DMU_OT_NEWTYPE) ? \ + ((ot) & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS : \ + (ot) < DMU_OT_NUMTYPES) + +#define DMU_OT_IS_METADATA(ot) (((ot) & DMU_OT_NEWTYPE) ? \ + ((ot) & DMU_OT_METADATA) : \ + dmu_ot[(ot)].ot_metadata) + +typedef enum dmu_object_byteswap { + DMU_BSWAP_UINT8, + DMU_BSWAP_UINT16, + DMU_BSWAP_UINT32, + DMU_BSWAP_UINT64, + DMU_BSWAP_ZAP, + DMU_BSWAP_DNODE, + DMU_BSWAP_OBJSET, + DMU_BSWAP_ZNODE, + DMU_BSWAP_OLDACL, + DMU_BSWAP_ACL, + DMU_BSWAP_NUMFUNCS +} dmu_object_byteswap_t; /* * This file describes the interface that the DMU provides for its @@ -89,7 +122,17 @@ typedef enum dmu_object_type { DMU_OT_SA_ATTR_REGISTRATION, /* ZAP */ DMU_OT_SA_ATTR_LAYOUTS, /* ZAP */ DMU_OT_DSL_KEYCHAIN = 54, - DMU_OT_NUMTYPES + DMU_OT_NUMTYPES, + DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE), + DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE), + DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE), + DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE), + DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE), + DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE), + DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE), + DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE), + DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE), + DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE), } dmu_object_type_t; typedef enum dmu_objset_type { @@ -116,5 +159,6 @@ typedef enum dmu_objset_type { #define DMU_POOL_HISTORY "history" #define DMU_POOL_PROPS "pool_props" #define DMU_POOL_L2CACHE "l2cache" +#define DMU_POOL_FEATURES_FOR_READ "features_for_read" #endif /* _SYS_DMU_H */ diff --git a/include/grub/zfs/zfs.h b/include/grub/zfs/zfs.h index 429424820..8bf091974 100644 --- a/include/grub/zfs/zfs.h +++ b/include/grub/zfs/zfs.h @@ -80,6 +80,7 @@ typedef enum grub_zfs_endian #define ZPOOL_CONFIG_DDT_HISTOGRAM "ddt_histogram" #define ZPOOL_CONFIG_DDT_OBJ_STATS "ddt_object_stats" #define ZPOOL_CONFIG_DDT_STATS "ddt_stats" +#define ZPOOL_CONFIG_FEATURES_FOR_READ "features_for_read" /* * The persistent vdev state is stored as separate values rather than a single * 'vdev_state' entry. This is because a device can be in multiple states, such From 038016f48a6193c84207c135c20fc71db4806d08 Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 14:12:58 +0200 Subject: [PATCH 60/73] * grub-core/fs/zfs/zfs_lz4.c: New file. * grub-core/fs/zfs/zfs.c: Tie up lz4 decompression. --- ChangeLog | 5 + Makefile.util.def | 1 + grub-core/Makefile.core.def | 1 + grub-core/fs/zfs/zfs.c | 7 +- grub-core/fs/zfs/zfs_lz4.c | 321 ++++++++++++++++++++++++++++++++++++ include/grub/zfs/zio.h | 1 + 6 files changed, 334 insertions(+), 2 deletions(-) create mode 100644 grub-core/fs/zfs/zfs_lz4.c diff --git a/ChangeLog b/ChangeLog index 0e118b973..3f1382949 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs_lz4.c: New file. + * grub-core/fs/zfs/zfs.c: Tie up lz4 decompression. + 2013-07-14 Massimo Maggi * grub-core/fs/zfs/zfs.c: Check for feature compatibility. diff --git a/Makefile.util.def b/Makefile.util.def index 0b9f56ccc..59de0c9d5 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -113,6 +113,7 @@ library = { common = grub-core/fs/zfs/zfs.c; common = grub-core/fs/zfs/zfsinfo.c; common = grub-core/fs/zfs/zfs_lzjb.c; + common = grub-core/fs/zfs/zfs_lz4.c; common = grub-core/fs/zfs/zfs_sha256.c; common = grub-core/fs/zfs/zfs_fletcher.c; common = grub-core/lib/envblk.c; diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index c4e13947c..ed9e251b2 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1332,6 +1332,7 @@ module = { name = zfs; common = fs/zfs/zfs.c; common = fs/zfs/zfs_lzjb.c; + common = fs/zfs/zfs_lz4.c; common = fs/zfs/zfs_sha256.c; common = fs/zfs/zfs_fletcher.c; }; diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index e9c2fe999..d409fd43e 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -153,11 +153,13 @@ ZAP_LEAF_ENTRY(zap_leaf_phys_t *l, int bs, int idx) /* - * Decompression Entry - lzjb + * Decompression Entry - lzjb & lz4 */ extern grub_err_t lzjb_decompress (void *, void *, grub_size_t, grub_size_t); +extern grub_err_t lz4_decompress (void *, void *, grub_size_t, grub_size_t); + typedef grub_err_t zfs_decomp_func_t (void *s_start, void *d_start, grub_size_t s_len, grub_size_t d_len); typedef struct decomp_entry @@ -278,7 +280,7 @@ grub_crypto_cipher_handle_t (*grub_zfs_load_key) (const struct grub_zfs_key *key */ #define MAX_SUPPORTED_FEATURE_STRLEN 50 static const char *spa_feature_names[] = { - "max.test:feat1",NULL + "org.illumos:lz4_compress",NULL }; static int @@ -344,6 +346,7 @@ static decomp_entry_t decomp_table[ZIO_COMPRESS_FUNCTIONS] = { {"gzip-8", zlib_decompress}, /* ZIO_COMPRESS_GZIP8 */ {"gzip-9", zlib_decompress}, /* ZIO_COMPRESS_GZIP9 */ {"zle", zle_decompress}, /* ZIO_COMPRESS_ZLE */ + {"lz4", lz4_decompress}, /* ZIO_COMPRESS_LZ4 */ }; static grub_err_t zio_read_data (blkptr_t * bp, grub_zfs_endian_t endian, diff --git a/grub-core/fs/zfs/zfs_lz4.c b/grub-core/fs/zfs/zfs_lz4.c new file mode 100644 index 000000000..f19943483 --- /dev/null +++ b/grub-core/fs/zfs/zfs_lz4.c @@ -0,0 +1,321 @@ +/* + * LZ4 - Fast LZ compression algorithm + * Header File + * Copyright (C) 2011-2013, Yann Collet. + * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at : + * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + * - LZ4 source repository : http://code.google.com/p/lz4/ + */ + +#include +#include +#include +#include + +static int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, + int isize, int maxOutputSize); + +/* + * CPU Feature Detection + */ + +/* 32 or 64 bits ? */ +#if (defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || \ + defined(__amd64) || defined(__ppc64__) || defined(_WIN64) || \ + defined(__LP64__) || defined(_LP64)) +#define LZ4_ARCH64 1 +#else +#define LZ4_ARCH64 0 +#endif + +/* + * Little Endian or Big Endian? + * Note: overwrite the below #define if you know your architecture endianess. + */ +#if (defined(__BIG_ENDIAN__) || defined(__BIG_ENDIAN) || \ + defined(_BIG_ENDIAN) || defined(_ARCH_PPC) || defined(__PPC__) || \ + defined(__PPC) || defined(PPC) || defined(__powerpc__) || \ + defined(__powerpc) || defined(powerpc) || \ + ((defined(__BYTE_ORDER__)&&(__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)))) +#define LZ4_BIG_ENDIAN 1 +#else + /* + * Little Endian assumed. PDP Endian and other very rare endian format + * are unsupported. + */ +#endif + +/* + * Compiler Options + */ + +#if __STDC_VERSION__ >= 199901L /* C99 */ +/* "restrict" is a known keyword */ +#else +/* Disable restrict */ +#ifndef restrict +#define restrict /* Only if somebody already didn't take care of that.*/ +#endif +#endif + +#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) + +#define lz4_bswap16(x) ((unsigned short int) ((((x) >> 8) & 0xffu) \ + | (((x) & 0xffu) << 8))) + +#if (GCC_VERSION >= 302) || (__INTEL_COMPILER >= 800) || defined(__clang__) +#define expect(expr, value) (__builtin_expect((expr), (value))) +#else +#define expect(expr, value) (expr) +#endif + +#define likely(expr) expect((expr) != 0, 1) +#define unlikely(expr) expect((expr) != 0, 0) + +/* Basic types */ +#define BYTE grub_uint8_t +#define U16 grub_uint16_t +#define U32 grub_uint32_t +#define S32 grub_int32_t +#define U64 grub_uint64_t +typedef grub_size_t size_t; + +typedef struct _U16_S { + U16 v; +} U16_S; +typedef struct _U32_S { + U32 v; +} U32_S; +typedef struct _U64_S { + U64 v; +} U64_S; + +#define A64(x) (((U64_S *)(x))->v) +#define A32(x) (((U32_S *)(x))->v) +#define A16(x) (((U16_S *)(x))->v) + +/* + * Constants + */ +#define MINMATCH 4 + +#define COPYLENGTH 8 +#define LASTLITERALS 5 + +#define ML_BITS 4 +#define ML_MASK ((1U< s_len) + return grub_error(GRUB_ERR_BAD_FS,"lz4 decompression failed."); + + /* + * Returns 0 on success (decompression function returned non-negative) + * and appropriate error on failure (decompression function returned negative). + */ + return (LZ4_uncompress_unknownOutputSize((char*)s_start + 4, d_start, bufsiz, + d_len) < 0)?grub_error(GRUB_ERR_BAD_FS,"lz4 decompression failed."):0; +} + +static int +LZ4_uncompress_unknownOutputSize(const char *source, + char *dest, int isize, int maxOutputSize) +{ + /* Local Variables */ + const BYTE *restrict ip = (const BYTE *) source; + const BYTE *const iend = ip + isize; + const BYTE *restrict ref; + + BYTE *restrict op = (BYTE *) dest; + BYTE *const oend = op + maxOutputSize; + BYTE *cpy; + + size_t dec[] = { 0, 3, 2, 3, 0, 0, 0, 0 }; + + /* Main Loop */ + while (ip < iend) { + BYTE token; + int length; + + /* get runlength */ + token = *ip++; + if ((length = (token >> ML_BITS)) == RUN_MASK) { + int s = 255; + while ((ip < iend) && (s == 255)) { + s = *ip++; + length += s; + } + } + /* copy literals */ + cpy = op + length; + if ((cpy > oend - COPYLENGTH) || + (ip + length > iend - COPYLENGTH)) { + if (cpy > oend) + /* + * Error: request to write beyond destination + * buffer. + */ + goto _output_error; + if (ip + length > iend) + /* + * Error : request to read beyond source + * buffer. + */ + goto _output_error; + grub_memcpy(op, ip, length); + op += length; + ip += length; + if (ip < iend) + /* Error : LZ4 format violation */ + goto _output_error; + /* Necessarily EOF, due to parsing restrictions. */ + break; + } + LZ4_WILDCOPY(ip, op, cpy); + ip -= (op - cpy); + op = cpy; + + /* get offset */ + LZ4_READ_LITTLEENDIAN_16(ref, cpy, ip); + ip += 2; + if (ref < (BYTE * const) dest) + /* + * Error: offset creates reference outside of + * destination buffer. + */ + goto _output_error; + + /* get matchlength */ + if ((length = (token & ML_MASK)) == ML_MASK) { + while (ip < iend) { + int s = *ip++; + length += s; + if (s == 255) + continue; + break; + } + } + /* copy repeated sequence */ + if unlikely(op - ref < STEPSIZE) { +#if LZ4_ARCH64 + size_t dec2table[] = { 0, 0, 0, -1, 0, 1, 2, 3 }; + size_t dec2 = dec2table[op - ref]; +#else + const int dec2 = 0; +#endif + *op++ = *ref++; + *op++ = *ref++; + *op++ = *ref++; + *op++ = *ref++; + ref -= dec[op - ref]; + A32(op) = A32(ref); + op += STEPSIZE - 4; + ref -= dec2; + } else { + LZ4_COPYSTEP(ref, op); + } + cpy = op + length - (STEPSIZE - 4); + if (cpy > oend - COPYLENGTH) { + if (cpy > oend) + /* + * Error: request to write outside of + * destination buffer. + */ + goto _output_error; + LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH)); + while (op < cpy) + *op++ = *ref++; + op = cpy; + if (op == oend) + /* + * Check EOF (should never happen, since last + * 5 bytes are supposed to be literals). + */ + break; + continue; + } + LZ4_SECURECOPY(ref, op, cpy); + op = cpy; /* correction */ + } + + /* end of decoding */ + return (int)(((char *)op) - dest); + + /* write overflow error detected */ + _output_error: + return (int)(-(((char *)ip) - source)); +} diff --git a/include/grub/zfs/zio.h b/include/grub/zfs/zio.h index b1c46da3a..8fad2cc09 100644 --- a/include/grub/zfs/zio.h +++ b/include/grub/zfs/zio.h @@ -88,6 +88,7 @@ enum zio_compress { ZIO_COMPRESS_GZIP8, ZIO_COMPRESS_GZIP9, ZIO_COMPRESS_ZLE, + ZIO_COMPRESS_LZ4, ZIO_COMPRESS_FUNCTIONS }; From 6d0ddff3d9e3d7dd87b402176087070596cb2581 Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 14:17:36 +0200 Subject: [PATCH 61/73] * grub-core/fs/zfs/zfs.c: Split nvpair iterators into separate functions. --- ChangeLog | 5 + grub-core/fs/zfs/zfs.c | 230 ++++++++++++++++++++++++++++------------- 2 files changed, 163 insertions(+), 72 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3f1382949..25bd9d429 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c: Split nvpair iterators into separate + functions. + 2013-07-14 Massimo Maggi * grub-core/fs/zfs/zfs_lz4.c: New file. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index d409fd43e..0ef936287 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -2,6 +2,7 @@ * GRUB -- GRand Unified Bootloader * Copyright (C) 1999,2000,2001,2002,2003,2004,2009,2010,2011 Free Software Foundation, Inc. * Copyright 2010 Sun Microsystems, Inc. + * Copyright (c) 2012 by Delphix. All rights reserved. * * GRUB is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -784,6 +785,155 @@ fill_vdev_info (struct grub_zfs_data *data, diskdesc, inserted, 0xffffffff); } +/* + * For a given XDR packed nvlist, verify the first 4 bytes and move on. + * + * An XDR packed nvlist is encoded as (comments from nvs_xdr_create) : + * + * encoding method/host endian (4 bytes) + * nvl_version (4 bytes) + * nvl_nvflag (4 bytes) + * encoded nvpairs: + * encoded size of the nvpair (4 bytes) + * decoded size of the nvpair (4 bytes) + * name string size (4 bytes) + * name string data (sizeof(NV_ALIGN4(string)) + * data type (4 bytes) + * # of elements in the nvpair (4 bytes) + * data + * 2 zero's for the last nvpair + * (end of the entire list) (8 bytes) + * + */ + +/* + * The nvlist_next_nvpair() function returns a handle to the next nvpair in the + * list following nvpair. If nvpair is NULL, the first pair is returned. If + * nvpair is the last pair in the nvlist, NULL is returned. + */ +static const char * +nvlist_next_nvpair(const char *nvl, const char *nvpair) +{ + const char *nvp; + int encode_size; + int name_len; + if (nvl == NULL) + return (NULL); + + if (nvpair == NULL) { + /* skip over header, nvl_version and nvl_nvflag */ + nvpair = nvl + 4 * 3; + } else { + /* skip to the next nvpair */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + nvpair += encode_size; + } + /* 8 bytes of 0 marks the end of the list */ + if (*(grub_uint64_t*)nvpair == 0) + return (NULL); + /*consistency checks*/ + if (nvpair + 4 * 3 >= nvl + VDEV_PHYS_SIZE) + { + grub_dprintf ("zfs", "nvlist overflow\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return (NULL); + } + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + + nvp = nvpair + 4*2; + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; + + nvp = nvp + ((name_len + 3) & ~3); // align + if (nvp + 4 >= nvl + VDEV_PHYS_SIZE + || encode_size < 0 + || nvp + 4 + encode_size > nvl + VDEV_PHYS_SIZE) + { + grub_dprintf ("zfs", "nvlist overflow\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return (NULL); + } + /* end consistency checks */ + + return (nvpair); +} +/* + * This function returns 0 on success and 1 on failure. On success, a string + * containing the name of nvpair is saved in buf. + */ +static int +nvpair_name(const char *nvp, char **buf, int* buflen) +{ + int len; + + /* skip over encode/decode size */ + nvp += 4 * 2; + + len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp=nvp+4; + + *buf=(char*)nvp; + *buflen=len; + + return (0); +} +/* + * This function retrieves the value of the nvpair in the form of enumerated + * type data_type_t. + */ +static int +nvpair_type(const char *nvp) +{ + int name_len, type; + + /* skip over encode/decode size */ + nvp += 4 * 2; + + /* skip over name_len */ + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; + + /* skip over name */ + nvp = nvp + ((name_len + 3) & ~3); /* align */ + + type = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + + return (type); +} +static int +nvpair_value(const char *nvp,char **val, + grub_size_t *size_out, grub_size_t *nelm_out) +{ + int name_len,nelm,encode_size; + + /* skip over encode/decode size */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvp)); + nvp += 8; + + /* skip over name_len */ + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; + + /* skip over name */ + nvp = nvp + ((name_len + 3) & ~3); /* align */ + + /* skip over type */ + nvp += 4; + nelm = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp +=4; + if (nelm < 1) + { + grub_error (GRUB_ERR_BAD_FS, "empty nvpair"); + return 0; + } + *val = (char *) nvp; + *size_out = encode_size; + if (nelm_out) + *nelm_out = nelm; + + return 1; +} + /* * Check the disk label information and retrieve needed vdev name-value pairs. * @@ -3105,34 +3255,14 @@ dnode_get_fullpath (const char *fullpath, struct subvolume *subvol, return err; } -/* - * For a given XDR packed nvlist, verify the first 4 bytes and move on. - * - * An XDR packed nvlist is encoded as (comments from nvs_xdr_create) : - * - * encoding method/host endian (4 bytes) - * nvl_version (4 bytes) - * nvl_nvflag (4 bytes) - * encoded nvpairs: - * encoded size of the nvpair (4 bytes) - * decoded size of the nvpair (4 bytes) - * name string size (4 bytes) - * name string data (sizeof(NV_ALIGN4(string)) - * data type (4 bytes) - * # of elements in the nvpair (4 bytes) - * data - * 2 zero's for the last nvpair - * (end of the entire list) (8 bytes) - * - */ - static int nvlist_find_value (const char *nvlist_in, const char *name, int valtype, char **val, grub_size_t *size_out, grub_size_t *nelm_out) { - int name_len, type, encode_size; - const char *nvpair, *nvp_name, *nvlist = nvlist_in; + int name_len, type ; + const char *nvpair=NULL,*nvlist=nvlist_in; + char *nvp_name; /* Verify if the 1st and 2nd byte in the nvlist are valid. */ /* NOTE: independently of what endianness header announces all @@ -3145,62 +3275,18 @@ nvlist_find_value (const char *nvlist_in, const char *name, return 0; } - /* skip the header, nvl_version, and nvl_nvflag */ - nvlist = nvlist + 4 * 3; /* * Loop thru the nvpair list * The XDR representation of an integer is in big-endian byte order. */ - while ((encode_size = grub_be_to_cpu32 (grub_get_unaligned32 (nvlist)))) + while ((nvpair=nvlist_next_nvpair(nvlist,nvpair))) { - int nelm; - - if (nvlist + 4 * 4 >= nvlist_in + VDEV_PHYS_SIZE) + nvpair_name(nvpair,&nvp_name,&name_len); + type = nvpair_type(nvpair); + if ((grub_strncmp (nvp_name, name, grub_strlen(name)) == 0) && type == valtype) { - grub_dprintf ("zfs", "nvlist overflow\n"); - grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return 0; + return nvpair_value(nvpair,val,size_out,nelm_out); } - - nvpair = nvlist + 4 * 2; /* skip the encode/decode size */ - - name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvpair)); - nvpair += 4; - - nvp_name = nvpair; - nvpair = nvpair + ((name_len + 3) & ~3); /* align */ - - if (nvpair + 8 >= nvlist_in + VDEV_PHYS_SIZE - || encode_size < 0 - || nvpair + 8 + encode_size > nvlist_in + VDEV_PHYS_SIZE) - { - grub_dprintf ("zfs", "nvlist overflow\n"); - grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return 0; - } - - type = grub_be_to_cpu32 (grub_get_unaligned32 (nvpair)); - nvpair += 4; - - nelm = grub_be_to_cpu32 (grub_get_unaligned32 (nvpair)); - if (nelm < 1) - { - grub_error (GRUB_ERR_BAD_FS, "empty nvpair"); - return 0; - } - - nvpair += 4; - - if ((grub_strncmp (nvp_name, name, name_len) == 0) && type == valtype) - { - *val = (char *) nvpair; - *size_out = encode_size; - if (nelm_out) - *nelm_out = nelm; - return 1; - } - - nvlist += encode_size; /* goto the next nvpair */ } return 0; } From 0036f02d7b9fc23cb655cf4a6daf2efeb26ed954 Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 14 Jul 2013 14:22:02 +0200 Subject: [PATCH 62/73] * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Error is encode_size <= 0. --- ChangeLog | 5 +++++ grub-core/fs/zfs/zfs.c | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index 25bd9d429..3195b2cd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Error is encode_size + <= 0. + 2013-07-14 Massimo Maggi * grub-core/fs/zfs/zfs.c: Split nvpair iterators into separate diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index 0ef936287..c4cd9b270 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -827,6 +827,16 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) /* skip to the next nvpair */ encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); nvpair += encode_size; + /*If encode_size equals 0 nvlist_next_nvpair would return + * the same pair received in input, leading to an infinite loop. + * If encode_size is less than 0, this will move the pointer + * backwards, *possibly* examinining two times the same nvpair + * and potentially getting into an infinite loop. */ + if(encode_size <= 0) { + grub_dprintf ("zfs", "nvpair with size <= 0\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } } /* 8 bytes of 0 marks the end of the list */ if (*(grub_uint64_t*)nvpair == 0) From af211babd87d8d3595a687057921b3098d9ab8db Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 14 Jul 2013 16:05:14 +0200 Subject: [PATCH 63/73] * grub-core/fs/zfs/zfs_lz4.c: Remove restrict keyword. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfs_lz4.c | 14 +++----------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3195b2cd4..e96c5b1ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs_lz4.c: Remove restrict keyword. + 2013-07-14 Massimo Maggi * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Error is encode_size diff --git a/grub-core/fs/zfs/zfs_lz4.c b/grub-core/fs/zfs/zfs_lz4.c index f19943483..4233a435e 100644 --- a/grub-core/fs/zfs/zfs_lz4.c +++ b/grub-core/fs/zfs/zfs_lz4.c @@ -74,14 +74,6 @@ static int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, * Compiler Options */ -#if __STDC_VERSION__ >= 199901L /* C99 */ -/* "restrict" is a known keyword */ -#else -/* Disable restrict */ -#ifndef restrict -#define restrict /* Only if somebody already didn't take care of that.*/ -#endif -#endif #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) @@ -196,11 +188,11 @@ LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, int maxOutputSize) { /* Local Variables */ - const BYTE *restrict ip = (const BYTE *) source; + const BYTE * ip = (const BYTE *) source; const BYTE *const iend = ip + isize; - const BYTE *restrict ref; + const BYTE * ref; - BYTE *restrict op = (BYTE *) dest; + BYTE * op = (BYTE *) dest; BYTE *const oend = op + maxOutputSize; BYTE *cpy; From 68714c4392561ab11e61823bef1f00cf80aa3bc6 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 14 Jul 2013 16:24:18 +0200 Subject: [PATCH 64/73] * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Fix improper cast. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfs.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e96c5b1ee..902e66556 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Fix improper cast. + 2013-07-14 Vladimir Serbinenko * grub-core/fs/zfs/zfs_lz4.c: Remove restrict keyword. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index c4cd9b270..4130594a1 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -839,8 +839,8 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) } } /* 8 bytes of 0 marks the end of the list */ - if (*(grub_uint64_t*)nvpair == 0) - return (NULL); + if (grub_get_unaligned64 (nvpair) == 0) + return NULL; /*consistency checks*/ if (nvpair + 4 * 3 >= nvl + VDEV_PHYS_SIZE) { From 795b3dc09475d65b0e8c9c75c6366cfacbde483a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 14 Jul 2013 16:29:33 +0200 Subject: [PATCH 65/73] * grub-core/fs/zfs/zfs_lz4.c: Add missing packed attribute. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfs_lz4.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 902e66556..9058cd7f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs_lz4.c: Add missing packed attribute. + 2013-07-14 Vladimir Serbinenko * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Fix improper cast. diff --git a/grub-core/fs/zfs/zfs_lz4.c b/grub-core/fs/zfs/zfs_lz4.c index 4233a435e..530c63afb 100644 --- a/grub-core/fs/zfs/zfs_lz4.c +++ b/grub-core/fs/zfs/zfs_lz4.c @@ -99,13 +99,13 @@ typedef grub_size_t size_t; typedef struct _U16_S { U16 v; -} U16_S; +} __attribute__ ((packed)) U16_S; typedef struct _U32_S { U32 v; -} U32_S; +} __attribute__ ((packed)) U32_S; typedef struct _U64_S { U64 v; -} U64_S; +} __attribute__ ((packed)) U64_S; #define A64(x) (((U64_S *)(x))->v) #define A32(x) (((U32_S *)(x))->v) From 7a87d69fcfb98f8d912c9d1fa1181755cf9d0ebd Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sun, 14 Jul 2013 22:59:00 +0400 Subject: [PATCH 66/73] * grub-core/net/bootp.c: Export net_* variables. * grub-core/net/net.c: Likewise. --- ChangeLog | 5 +++++ grub-core/net/bootp.c | 6 +++++- grub-core/net/net.c | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9058cd7f2..8184ded98 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-14 Andrey Borzenkov + + * grub-core/net/bootp.c: Export net_* variables. + * grub-core/net/net.c: Likewise. + 2013-07-14 Vladimir Serbinenko * grub-core/fs/zfs/zfs_lz4.c: Add missing packed attribute. diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c index e0ab47e12..72edc2124 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -49,6 +49,7 @@ set_env_limn_ro (const char *intername, const char *suffix, grub_env_set (varname, value); value[len] = c; grub_register_variable_hook (varname, 0, grub_env_write_readonly); + grub_env_export (varname); } static void @@ -212,7 +213,10 @@ grub_net_configure_by_dhcp_ack (const char *name, } if (is_def) - grub_env_set ("net_default_interface", name); + { + grub_env_set ("net_default_interface", name); + grub_env_export ("net_default_interface"); + } if (device && !*device && bp->server_ip) { diff --git a/grub-core/net/net.c b/grub-core/net/net.c index 5d2c2f0dd..481031990 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -891,6 +891,7 @@ grub_net_network_level_interface_register (struct grub_net_network_level_interfa *ptr = '_'; grub_env_set (name, buf); grub_register_variable_hook (name, 0, hwaddr_set_env); + grub_env_export (name); } { @@ -904,6 +905,7 @@ grub_net_network_level_interface_register (struct grub_net_network_level_interfa *ptr = '_'; grub_env_set (name, buf); grub_register_variable_hook (name, 0, addr_set_env); + grub_env_export (name); } inter->card->num_ifaces++; @@ -1643,12 +1645,16 @@ GRUB_MOD_INIT(net) { grub_register_variable_hook ("net_default_server", defserver_get_env, defserver_set_env); + grub_env_export ("net_default_server"); grub_register_variable_hook ("pxe_default_server", defserver_get_env, defserver_set_env); + grub_env_export ("pxe_default_server"); grub_register_variable_hook ("net_default_ip", defip_get_env, defip_set_env); + grub_env_export ("net_default_ip"); grub_register_variable_hook ("net_default_mac", defmac_get_env, defmac_set_env); + grub_env_export ("net_default_mac"); cmd_addaddr = grub_register_command ("net_add_addr", grub_cmd_addaddr, /* TRANSLATORS: HWADDRESS stands for From b2182299a797eab533d107a7beb3459ed3166bcc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 14 Jul 2013 22:33:39 +0200 Subject: [PATCH 67/73] * grub-core/fs/zfs/zfs.c: Remove brackets around return value. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfs.c | 32 +++++++++++++++++--------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8184ded98..d910ad227 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,10 @@ * grub-core/net/bootp.c: Export net_* variables. * grub-core/net/net.c: Likewise. +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Remove brackets around return value. + 2013-07-14 Vladimir Serbinenko * grub-core/fs/zfs/zfs_lz4.c: Add missing packed attribute. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index 4130594a1..707138fdf 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -367,7 +367,7 @@ zfs_log2 (grub_uint64_t num) num = num >> 1; } - return (i); + return i; } /* Checksum Functions */ @@ -475,19 +475,19 @@ vdev_uberblock_compare (uberblock_t * ub1, uberblock_t * ub2) if (grub_zfs_to_cpu64 (ub1->ub_txg, ub1_endian) < grub_zfs_to_cpu64 (ub2->ub_txg, ub2_endian)) - return (-1); + return -1; if (grub_zfs_to_cpu64 (ub1->ub_txg, ub1_endian) > grub_zfs_to_cpu64 (ub2->ub_txg, ub2_endian)) - return (1); + return 1; if (grub_zfs_to_cpu64 (ub1->ub_timestamp, ub1_endian) < grub_zfs_to_cpu64 (ub2->ub_timestamp, ub2_endian)) - return (-1); + return -1; if (grub_zfs_to_cpu64 (ub1->ub_timestamp, ub1_endian) > grub_zfs_to_cpu64 (ub2->ub_timestamp, ub2_endian)) - return (1); + return 1; - return (0); + return 0; } /* @@ -569,7 +569,7 @@ find_bestub (uberblock_phys_t * ub_array, if (!ubbest) grub_errno = err; - return (ubbest); + return ubbest; } static inline grub_size_t @@ -818,7 +818,7 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) int encode_size; int name_len; if (nvl == NULL) - return (NULL); + return NULL; if (nvpair == NULL) { /* skip over header, nvl_version and nvl_nvflag */ @@ -846,7 +846,7 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) { grub_dprintf ("zfs", "nvlist overflow\n"); grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return (NULL); + return NULL; } encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); @@ -861,11 +861,11 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) { grub_dprintf ("zfs", "nvlist overflow\n"); grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return (NULL); + return NULL; } /* end consistency checks */ - return (nvpair); + return nvpair; } /* * This function returns 0 on success and 1 on failure. On success, a string @@ -885,7 +885,7 @@ nvpair_name(const char *nvp, char **buf, int* buflen) *buf=(char*)nvp; *buflen=len; - return (0); + return 0; } /* * This function retrieves the value of the nvpair in the form of enumerated @@ -908,7 +908,7 @@ nvpair_type(const char *nvp) type = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - return (type); + return type; } static int nvpair_value(const char *nvp,char **val, @@ -1443,7 +1443,9 @@ read_device (grub_uint64_t offset, struct grub_zfs_device_desc *desc, break; grub_errno = GRUB_ERR_NONE; } - return (grub_errno = err); + grub_errno = err; + + return err; } case DEVICE_RAIDZ: { @@ -2051,7 +2053,7 @@ zap_hash (grub_uint64_t salt, const char *name, */ crc &= ~((1ULL << (64 - ZAP_HASHBITS)) - 1); - return (crc); + return crc; } /* From 1bd57aa3434db23214e72104485cb95b17565f55 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 14 Jul 2013 22:45:51 +0200 Subject: [PATCH 68/73] * grub-core/fs/zfs/zfs.c: Run emacs indent on file. --- ChangeLog | 4 + grub-core/fs/zfs/zfs.c | 374 ++++++++++++++++++++--------------------- 2 files changed, 191 insertions(+), 187 deletions(-) diff --git a/ChangeLog b/ChangeLog index d910ad227..c231b030a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Run emacs indent on file. + 2013-07-14 Andrey Borzenkov * grub-core/net/bootp.c: Export net_* variables. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index 707138fdf..8c2c9b627 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -179,10 +179,10 @@ typedef void zio_checksum_t(const void *data, grub_uint64_t size, * Information about each checksum function. */ typedef struct zio_checksum_info { - zio_checksum_t *ci_func; /* checksum function for each byteorder */ - int ci_correctable; /* number of correctable bits */ - int ci_eck; /* uses zio embedded checksum? */ - const char *ci_name; /* descriptive name */ + zio_checksum_t *ci_func; /* checksum function for each byteorder */ + int ci_correctable; /* number of correctable bits */ + int ci_eck; /* uses zio embedded checksum? */ + const char *ci_name; /* descriptive name */ } zio_checksum_info_t; typedef struct dnode_end @@ -281,7 +281,7 @@ grub_crypto_cipher_handle_t (*grub_zfs_load_key) (const struct grub_zfs_key *key */ #define MAX_SUPPORTED_FEATURE_STRLEN 50 static const char *spa_feature_names[] = { - "org.illumos:lz4_compress",NULL + "org.illumos:lz4_compress",NULL }; static int @@ -414,7 +414,7 @@ zio_checksum_verify (zio_cksum_t zc, grub_uint32_t checksum, { grub_dprintf ("zfs", "unknown checksum function %d\n", checksum); return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, - "unknown checksum function %d", checksum); + "unknown checksum function %d", checksum); } if (ci->ci_eck) @@ -509,7 +509,7 @@ uberblock_verify (uberblock_phys_t * ub, grub_uint64_t offset, if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_LITTLE_ENDIAN) == UBERBLOCK_MAGIC && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN))) - endian = GRUB_ZFS_LITTLE_ENDIAN; + endian = GRUB_ZFS_LITTLE_ENDIAN; if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_BIG_ENDIAN) == UBERBLOCK_MAGIC && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN))) @@ -814,58 +814,58 @@ fill_vdev_info (struct grub_zfs_data *data, static const char * nvlist_next_nvpair(const char *nvl, const char *nvpair) { - const char *nvp; - int encode_size; - int name_len; - if (nvl == NULL) - return NULL; + const char *nvp; + int encode_size; + int name_len; + if (nvl == NULL) + return NULL; - if (nvpair == NULL) { - /* skip over header, nvl_version and nvl_nvflag */ - nvpair = nvl + 4 * 3; - } else { - /* skip to the next nvpair */ - encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); - nvpair += encode_size; + if (nvpair == NULL) { + /* skip over header, nvl_version and nvl_nvflag */ + nvpair = nvl + 4 * 3; + } else { + /* skip to the next nvpair */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + nvpair += encode_size; /*If encode_size equals 0 nvlist_next_nvpair would return - * the same pair received in input, leading to an infinite loop. - * If encode_size is less than 0, this will move the pointer - * backwards, *possibly* examinining two times the same nvpair - * and potentially getting into an infinite loop. */ - if(encode_size <= 0) { - grub_dprintf ("zfs", "nvpair with size <= 0\n"); - grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return NULL; - } - } - /* 8 bytes of 0 marks the end of the list */ - if (grub_get_unaligned64 (nvpair) == 0) - return NULL; - /*consistency checks*/ - if (nvpair + 4 * 3 >= nvl + VDEV_PHYS_SIZE) - { - grub_dprintf ("zfs", "nvlist overflow\n"); - grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return NULL; - } - encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + * the same pair received in input, leading to an infinite loop. + * If encode_size is less than 0, this will move the pointer + * backwards, *possibly* examinining two times the same nvpair + * and potentially getting into an infinite loop. */ + if(encode_size <= 0) { + grub_dprintf ("zfs", "nvpair with size <= 0\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } + } + /* 8 bytes of 0 marks the end of the list */ + if (grub_get_unaligned64 (nvpair) == 0) + return NULL; + /*consistency checks*/ + if (nvpair + 4 * 3 >= nvl + VDEV_PHYS_SIZE) + { + grub_dprintf ("zfs", "nvlist overflow\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); - nvp = nvpair + 4*2; - name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - nvp += 4; + nvp = nvpair + 4*2; + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; - nvp = nvp + ((name_len + 3) & ~3); // align - if (nvp + 4 >= nvl + VDEV_PHYS_SIZE - || encode_size < 0 - || nvp + 4 + encode_size > nvl + VDEV_PHYS_SIZE) - { - grub_dprintf ("zfs", "nvlist overflow\n"); - grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return NULL; - } - /* end consistency checks */ + nvp = nvp + ((name_len + 3) & ~3); // align + if (nvp + 4 >= nvl + VDEV_PHYS_SIZE + || encode_size < 0 + || nvp + 4 + encode_size > nvl + VDEV_PHYS_SIZE) + { + grub_dprintf ("zfs", "nvlist overflow\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } + /* end consistency checks */ - return nvpair; + return nvpair; } /* * This function returns 0 on success and 1 on failure. On success, a string @@ -874,18 +874,18 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) static int nvpair_name(const char *nvp, char **buf, int* buflen) { - int len; + int len; - /* skip over encode/decode size */ - nvp += 4 * 2; + /* skip over encode/decode size */ + nvp += 4 * 2; - len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - nvp=nvp+4; + len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp=nvp+4; - *buf=(char*)nvp; - *buflen=len; + *buf=(char*)nvp; + *buflen=len; - return 0; + return 0; } /* * This function retrieves the value of the nvpair in the form of enumerated @@ -894,54 +894,54 @@ nvpair_name(const char *nvp, char **buf, int* buflen) static int nvpair_type(const char *nvp) { - int name_len, type; + int name_len, type; - /* skip over encode/decode size */ - nvp += 4 * 2; + /* skip over encode/decode size */ + nvp += 4 * 2; - /* skip over name_len */ - name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - nvp += 4; + /* skip over name_len */ + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; - /* skip over name */ - nvp = nvp + ((name_len + 3) & ~3); /* align */ + /* skip over name */ + nvp = nvp + ((name_len + 3) & ~3); /* align */ - type = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + type = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - return type; + return type; } static int nvpair_value(const char *nvp,char **val, - grub_size_t *size_out, grub_size_t *nelm_out) + grub_size_t *size_out, grub_size_t *nelm_out) { - int name_len,nelm,encode_size; + int name_len,nelm,encode_size; - /* skip over encode/decode size */ - encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvp)); - nvp += 8; + /* skip over encode/decode size */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvp)); + nvp += 8; - /* skip over name_len */ - name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - nvp += 4; + /* skip over name_len */ + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; - /* skip over name */ - nvp = nvp + ((name_len + 3) & ~3); /* align */ + /* skip over name */ + nvp = nvp + ((name_len + 3) & ~3); /* align */ - /* skip over type */ - nvp += 4; - nelm = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); - nvp +=4; - if (nelm < 1) - { - grub_error (GRUB_ERR_BAD_FS, "empty nvpair"); - return 0; - } - *val = (char *) nvp; - *size_out = encode_size; - if (nelm_out) - *nelm_out = nelm; + /* skip over type */ + nvp += 4; + nelm = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp +=4; + if (nelm < 1) + { + grub_error (GRUB_ERR_BAD_FS, "empty nvpair"); + return 0; + } + *val = (char *) nvp; + *size_out = encode_size; + if (nelm_out) + *nelm_out = nelm; - return 1; + return 1; } /* @@ -1077,27 +1077,27 @@ check_pool_label (struct grub_zfs_data *data, features = grub_zfs_nvlist_lookup_nvlist(nvlist, ZPOOL_CONFIG_FEATURES_FOR_READ); if (features) - { - const char *nvp=NULL; - char name[MAX_SUPPORTED_FEATURE_STRLEN + 1]; - char *nameptr; - int namelen; - while ((nvp = nvlist_next_nvpair(features, nvp)) != NULL) { - nvpair_name(nvp, &nameptr,&namelen); - if(namelen > MAX_SUPPORTED_FEATURE_STRLEN) - namelen = MAX_SUPPORTED_FEATURE_STRLEN; - grub_strncpy(name,nameptr,namelen); - name[namelen]=0; - grub_dprintf("zfs","namelen=%u str=%s\n",namelen,name); - if (check_feature(name,1, NULL) != 0) - { - grub_dprintf("zfs","feature missing in check_pool_label:%s\n",name); - err= grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET," check_pool_label missing feature '%s' for read",name); - return err; - } + const char *nvp=NULL; + char name[MAX_SUPPORTED_FEATURE_STRLEN + 1]; + char *nameptr; + int namelen; + while ((nvp = nvlist_next_nvpair(features, nvp)) != NULL) + { + nvpair_name(nvp, &nameptr,&namelen); + if(namelen > MAX_SUPPORTED_FEATURE_STRLEN) + namelen = MAX_SUPPORTED_FEATURE_STRLEN; + grub_strncpy(name,nameptr,namelen); + name[namelen]=0; + grub_dprintf("zfs","namelen=%u str=%s\n",namelen,name); + if (check_feature(name,1, NULL) != 0) + { + grub_dprintf("zfs","feature missing in check_pool_label:%s\n",name); + err= grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET," check_pool_label missing feature '%s' for read",name); + return err; + } + } } - } grub_dprintf ("zfs", "check 12 passed (feature flags)\n"); grub_free (nvlist); @@ -1336,7 +1336,7 @@ recovery (grub_uint8_t *bufs[4], grub_size_t s, const int nbufs, for (j = 0; j < nbufs; j++) matrix2[i][j] = 0; for (i = 0; i < nbufs; i++) - matrix2[i][i] = 1; + matrix2[i][i] = 1; for (i = 0; i < nbufs; i++) { @@ -2075,7 +2075,7 @@ name_cmp (const char *s1, const char *s2, grub_size_t n, while (n--) { if (grub_toupper (*t1) != grub_toupper (*t2)) - return (int) grub_toupper (*t1) - (int) grub_toupper (*t2); + return (int) grub_toupper (*t1) - (int) grub_toupper (*t2); t1++; t2++; @@ -2296,11 +2296,11 @@ fzap_iterate (dnode_end_t * zap_dnode, zap_phys_t * zap, for (idx = 0; idx < (1ULL << zap->zap_ptrtbl.zt_shift); idx++) { blkid = grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))], - zap_dnode->endian); + zap_dnode->endian); for (idx2 = 0; idx2 < idx; idx2++) if (blkid == grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx2 + (1 << (blksft - 3 - 1))], - zap_dnode->endian)) + zap_dnode->endian)) break; if (idx2 != idx) continue; @@ -2326,53 +2326,53 @@ fzap_iterate (dnode_end_t * zap_dnode, zap_phys_t * zap, } for (chunk = 0; chunk < ZAP_LEAF_NUMCHUNKS (blksft); chunk++) - { - char *buf; - struct zap_leaf_entry *le; - char *val; - grub_size_t val_length; - le = ZAP_LEAF_ENTRY (l, blksft, chunk); + { + char *buf; + struct zap_leaf_entry *le; + char *val; + grub_size_t val_length; + le = ZAP_LEAF_ENTRY (l, blksft, chunk); - /* Verify the chunk entry */ - if (le->le_type != ZAP_CHUNK_ENTRY) + /* Verify the chunk entry */ + if (le->le_type != ZAP_CHUNK_ENTRY) + continue; + + buf = grub_malloc (grub_zfs_to_cpu16 (le->le_name_length, endian) + * name_elem_length + 1); + if (zap_leaf_array_get (l, endian, blksft, + grub_zfs_to_cpu16 (le->le_name_chunk, + endian), + grub_zfs_to_cpu16 (le->le_name_length, + endian) + * name_elem_length, buf)) + { + grub_free (buf); continue; + } + buf[le->le_name_length * name_elem_length] = 0; - buf = grub_malloc (grub_zfs_to_cpu16 (le->le_name_length, endian) - * name_elem_length + 1); - if (zap_leaf_array_get (l, endian, blksft, - grub_zfs_to_cpu16 (le->le_name_chunk, - endian), - grub_zfs_to_cpu16 (le->le_name_length, - endian) - * name_elem_length, buf)) - { - grub_free (buf); - continue; - } - buf[le->le_name_length * name_elem_length] = 0; + val_length = ((int) le->le_value_length + * (int) le->le_int_size); + val = grub_malloc (grub_zfs_to_cpu16 (val_length, endian)); + if (zap_leaf_array_get (l, endian, blksft, + grub_zfs_to_cpu16 (le->le_value_chunk, + endian), + val_length, val)) + { + grub_free (buf); + grub_free (val); + continue; + } - val_length = ((int) le->le_value_length - * (int) le->le_int_size); - val = grub_malloc (grub_zfs_to_cpu16 (val_length, endian)); - if (zap_leaf_array_get (l, endian, blksft, - grub_zfs_to_cpu16 (le->le_value_chunk, - endian), - val_length, val)) - { - grub_free (buf); - grub_free (val); - continue; - } - - if (hook (buf, le->le_name_length, - val, le->le_value_length, le->le_int_size, hook_data)) - { - grub_free (l); - return 1; - } - grub_free (buf); - grub_free (val); - } + if (hook (buf, le->le_name_length, + val, le->le_value_length, le->le_int_size, hook_data)) + { + grub_free (l); + return 1; + } + grub_free (buf); + grub_free (val); + } grub_free (l); } return 0; @@ -2766,7 +2766,7 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, grub_size_t block; grub_size_t blksz; blksz = (grub_zfs_to_cpu16 (dnode_path->dn.dn.dn_datablkszsec, - dnode_path->dn.endian) + dnode_path->dn.endian) << SPA_MINBLOCKSHIFT); sym_value = grub_malloc (sym_sz); @@ -2811,11 +2811,11 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, grub_free (dn_new); } else while (dnode_path != root) - { - dn_new = dnode_path; - dnode_path = dn_new->next; - grub_free (dn_new); - } + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } } if (dnode_path->dn.dn.dn_bonustype == DMU_OT_SA) { @@ -2872,11 +2872,11 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, grub_free (dn_new); } else while (dnode_path != root) - { - dn_new = dnode_path; - dnode_path = dn_new->next; - grub_free (dn_new); - } + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } } } } @@ -3555,10 +3555,10 @@ zfs_mount (grub_device_t dev) return NULL; } - if (ub->ub_version >= SPA_VERSION_FEATURES && - check_mos_features(&((objset_phys_t *) osp)->os_meta_dnode,ub_endian, - data) != 0) - return NULL; + if (ub->ub_version >= SPA_VERSION_FEATURES && + check_mos_features(&((objset_phys_t *) osp)->os_meta_dnode,ub_endian, + data) != 0) + return NULL; /* Got the MOS. Save it at the memory addr MOS. */ grub_memmove (&(data->mos.dn), &((objset_phys_t *) osp)->os_meta_dnode, @@ -3971,8 +3971,8 @@ iterate_zap (const char *name, grub_uint64_t val, struct grub_zfs_dir_ctx *ctx) info.mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], dn.endian); } - info.dir = (dn.dn.dn_type == DMU_OT_DIRECTORY_CONTENTS); - grub_dprintf ("zfs", "type=%d, name=%s\n", + info.dir = (dn.dn.dn_type == DMU_OT_DIRECTORY_CONTENTS); + grub_dprintf ("zfs", "type=%d, name=%s\n", (int)dn.dn.dn_type, (char *)name); return ctx->hook (name, &info, ctx->hook_data); } @@ -4134,10 +4134,10 @@ check_feature(const char *name, grub_uint64_t val,__attribute__((unused)) struct if(val ==0) return 0; if(*name==0) return 0; for (i = 0; spa_feature_names[i] != NULL; i++) - { - if (grub_strcmp(name, spa_feature_names[i]) == 0) + { + if (grub_strcmp(name, spa_feature_names[i]) == 0) return 0; - } + } grub_printf("missing feature for read '%s'\n",name); return 1; } @@ -4165,7 +4165,7 @@ check_mos_features(dnode_phys_t *mosmdn_phys,grub_zfs_endian_t endian,struct gru errnum = dnode_get(&mosmdn, DMU_POOL_DIRECTORY_OBJECT, DMU_OT_OBJECT_DIRECTORY, &dn,data); if (errnum != 0) - return errnum; + return errnum; /* * Find the object number for 'features_for_read' and retrieve its @@ -4174,15 +4174,15 @@ check_mos_features(dnode_phys_t *mosmdn_phys,grub_zfs_endian_t endian,struct gru */ errnum = zap_lookup(&dn, DMU_POOL_FEATURES_FOR_READ, &objnum, data,0); if (errnum != 0) - return errnum; + return errnum; errnum = dnode_get(&mosmdn, objnum, DMU_OTN_ZAP_METADATA, &dn, data); if (errnum != 0) - return errnum; + return errnum; errnum = dmu_read(&dn, 0, (void**)&mzp, &endianzap,data); if (errnum != 0) - return errnum; + return errnum; size = grub_zfs_to_cpu16 (dn.dn.dn_datablkszsec, dn.endian) << SPA_MINBLOCKSHIFT; return mzap_iterate (mzp,endianzap, size, check_feature,NULL); @@ -4203,7 +4203,7 @@ grub_zfs_embed (grub_device_t device __attribute__ ((unused)), return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "ZFS currently supports only PC-BIOS embedding"); - if ((VDEV_BOOT_SIZE >> GRUB_DISK_SECTOR_BITS) < *nsectors) + if ((VDEV_BOOT_SIZE >> GRUB_DISK_SECTOR_BITS) < *nsectors) return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("your core.img is unusually large. " "It won't fit in the embedding area")); From 286fe4b379539480e4a2c46c526af3efb53f94a3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 14 Jul 2013 22:48:23 +0200 Subject: [PATCH 69/73] * grub-core/fs/zfs/zfs.c: Stylistic fixes. --- ChangeLog | 4 ++++ grub-core/fs/zfs/zfs.c | 51 ++++++++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index c231b030a..c68075c03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Stylistic fixes. + 2013-07-14 Vladimir Serbinenko * grub-core/fs/zfs/zfs.c: Run emacs indent on file. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index 8c2c9b627..dfab221cd 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -812,7 +812,7 @@ fill_vdev_info (struct grub_zfs_data *data, * nvpair is the last pair in the nvlist, NULL is returned. */ static const char * -nvlist_next_nvpair(const char *nvl, const char *nvpair) +nvlist_next_nvpair (const char *nvl, const char *nvpair) { const char *nvp; int encode_size; @@ -820,24 +820,28 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) if (nvl == NULL) return NULL; - if (nvpair == NULL) { - /* skip over header, nvl_version and nvl_nvflag */ - nvpair = nvl + 4 * 3; - } else { - /* skip to the next nvpair */ - encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); - nvpair += encode_size; - /*If encode_size equals 0 nvlist_next_nvpair would return - * the same pair received in input, leading to an infinite loop. - * If encode_size is less than 0, this will move the pointer - * backwards, *possibly* examinining two times the same nvpair - * and potentially getting into an infinite loop. */ - if(encode_size <= 0) { - grub_dprintf ("zfs", "nvpair with size <= 0\n"); - grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); - return NULL; + if (nvpair == NULL) + { + /* skip over header, nvl_version and nvl_nvflag */ + nvpair = nvl + 4 * 3; + } + else + { + /* skip to the next nvpair */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + nvpair += encode_size; + /*If encode_size equals 0 nvlist_next_nvpair would return + * the same pair received in input, leading to an infinite loop. + * If encode_size is less than 0, this will move the pointer + * backwards, *possibly* examinining two times the same nvpair + * and potentially getting into an infinite loop. */ + if(encode_size <= 0) + { + grub_dprintf ("zfs", "nvpair with size <= 0\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } } - } /* 8 bytes of 0 marks the end of the list */ if (grub_get_unaligned64 (nvpair) == 0) return NULL; @@ -867,12 +871,13 @@ nvlist_next_nvpair(const char *nvl, const char *nvpair) return nvpair; } + /* * This function returns 0 on success and 1 on failure. On success, a string * containing the name of nvpair is saved in buf. */ static int -nvpair_name(const char *nvp, char **buf, int* buflen) +nvpair_name (const char *nvp, char **buf, int *buflen) { int len; @@ -887,12 +892,13 @@ nvpair_name(const char *nvp, char **buf, int* buflen) return 0; } + /* * This function retrieves the value of the nvpair in the form of enumerated * type data_type_t. */ static int -nvpair_type(const char *nvp) +nvpair_type (const char *nvp) { int name_len, type; @@ -910,9 +916,10 @@ nvpair_type(const char *nvp) return type; } + static int -nvpair_value(const char *nvp,char **val, - grub_size_t *size_out, grub_size_t *nelm_out) +nvpair_value (const char *nvp,char **val, + grub_size_t *size_out, grub_size_t *nelm_out) { int name_len,nelm,encode_size; From a8674ad37ba14c1e5d1120a0f0561ef37f769911 Mon Sep 17 00:00:00 2001 From: Vladimir Testov Date: Sun, 14 Jul 2013 23:02:37 +0200 Subject: [PATCH 70/73] * grub-core/gfxmenu/gui_list.c: Fix height calculation. --- ChangeLog | 4 ++++ grub-core/gfxmenu/gui_list.c | 14 ++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c68075c03..8d8596fd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Fix height calculation. + 2013-07-14 Vladimir Serbinenko * grub-core/fs/zfs/zfs.c: Stylistic fixes. diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c index 12c352863..d4e9817c5 100644 --- a/grub-core/gfxmenu/gui_list.c +++ b/grub-core/gfxmenu/gui_list.c @@ -102,9 +102,13 @@ get_num_shown_items (list_impl_t self) grub_gfxmenu_box_t box = self->menu_box; int box_top_pad = box->get_top_pad (box); int box_bottom_pad = box->get_bottom_pad (box); + grub_gfxmenu_box_t selbox = self->selected_item_box; + int sel_top_pad = selbox->get_top_pad (selbox); + int sel_bottom_pad = selbox->get_bottom_pad (selbox); return (self->bounds.height + item_vspace - 2 * boxpad - - box_top_pad - box_bottom_pad) / (item_height + item_vspace); + - sel_top_pad - sel_bottom_pad + - box_top_pad - box_bottom_pad) / (item_height + item_vspace); } static int @@ -257,7 +261,7 @@ draw_menu (list_impl_t self, int num_shown_items) int cwidth = oviewport.width - 2 * boxpad - 2; if (selbox->get_border_width) cwidth -= selbox->get_border_width (selbox); - selbox->set_content_size (selbox, cwidth, item_height - 1); + selbox->set_content_size (selbox, cwidth, item_height); selbox->draw (selbox, 0, item_top - sel_toppad); } @@ -397,7 +401,8 @@ list_get_minimal_size (void *vself, unsigned *width, unsigned *height) unsigned width_s; grub_gfxmenu_box_t selbox = self->selected_item_box; - int sel_toppad = selbox->get_top_pad (selbox); + int sel_top_pad = selbox->get_top_pad (selbox); + int sel_bottom_pad = selbox->get_bottom_pad (selbox); *width = grub_font_get_string_width (self->item_font, "Typical OS"); width_s = grub_font_get_string_width (self->selected_item_font, @@ -411,7 +416,8 @@ list_get_minimal_size (void *vself, unsigned *width, unsigned *height) *height = (item_height * num_items + item_vspace * (num_items - 1) + 2 * boxpad - + box_top_pad + box_bottom_pad + sel_toppad); + + box_top_pad + box_bottom_pad + + sel_top_pad + sel_bottom_pad); } else { From d110499b22978a1e9ac410fc3368fc39a337044d Mon Sep 17 00:00:00 2001 From: Vladimir Testov Date: Sun, 14 Jul 2013 23:10:27 +0200 Subject: [PATCH 71/73] * grub-core/gfxmenu/gui_list.c: USe viewport when drawing strings. --- ChangeLog | 4 ++++ grub-core/gfxmenu/gui_list.c | 26 +++++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d8596fd1..e9b8232bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-07-14 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: USe viewport when drawing strings. + 2013-07-14 Vladimir Testov * grub-core/gfxmenu/gui_list.c: Fix height calculation. diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c index d4e9817c5..d2e96a7b8 100644 --- a/grub-core/gfxmenu/gui_list.c +++ b/grub-core/gfxmenu/gui_list.c @@ -249,6 +249,19 @@ draw_menu (list_impl_t self, int num_shown_items) oviewport.width - 2 * boxpad, oviewport.height - 2 * boxpad); + int cwidth = oviewport.width - 2 * boxpad - 2; + if (selbox->get_border_width) + cwidth -= selbox->get_border_width (selbox); + selbox->set_content_size (selbox, cwidth, item_height); + + int string_left_offset = self->icon_width + icon_text_space; + int string_top_offset = (item_height - (ascent + descent)) / 2 + ascent; + + grub_video_rect_t svpsave, sviewport; + sviewport.x = sel_leftpad + string_left_offset; + sviewport.width = cwidth - string_left_offset; + sviewport.height = item_height; + for (visible_index = 0, menu_index = self->first_shown_index; visible_index < num_shown_items && menu_index < self->view->menu->size; visible_index++, menu_index++) @@ -258,10 +271,6 @@ draw_menu (list_impl_t self, int num_shown_items) if (is_selected) { - int cwidth = oviewport.width - 2 * boxpad - 2; - if (selbox->get_border_width) - cwidth -= selbox->get_border_width (selbox); - selbox->set_content_size (selbox, cwidth, item_height); selbox->draw (selbox, 0, item_top - sel_toppad); } @@ -283,12 +292,15 @@ draw_menu (list_impl_t self, int num_shown_items) ((is_selected && self->selected_item_color_set) ? self->selected_item_color : self->item_color); + + sviewport.y = item_top; + grub_gui_set_viewport (&sviewport, &svpsave); grub_font_draw_string (item_title, font, grub_video_map_rgba_color (text_color), - sel_leftpad + self->icon_width + icon_text_space, - (item_top + (item_height - (ascent + descent)) - / 2 + ascent)); + 0, + string_top_offset); + grub_gui_restore_viewport (&svpsave); item_top += item_height + item_vspace; } From 3f42504c15459e1aee7d81dcad11d7f50db0ff11 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 16 Jul 2013 07:41:53 +0200 Subject: [PATCH 72/73] * grub-core/kern/powerpc/ieee1275/startup.S: Handle unaligned bss. Reported by: Paulo Flabiano Smorigo. --- ChangeLog | 5 +++++ grub-core/kern/powerpc/ieee1275/startup.S | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/ChangeLog b/ChangeLog index e9b8232bb..57af49bb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-07-16 Vladimir Serbinenko + + * grub-core/kern/powerpc/ieee1275/startup.S: Handle unaligned bss. + Reported by: Paulo Flabiano Smorigo. + 2013-07-14 Vladimir Testov * grub-core/gfxmenu/gui_list.c: USe viewport when drawing strings. diff --git a/grub-core/kern/powerpc/ieee1275/startup.S b/grub-core/kern/powerpc/ieee1275/startup.S index b26c47edb..21c884b43 100644 --- a/grub-core/kern/powerpc/ieee1275/startup.S +++ b/grub-core/kern/powerpc/ieee1275/startup.S @@ -34,14 +34,31 @@ _start: /* Stage1 won't zero BSS for us. In other cases, why not do it again? */ lis 6, (__bss_start - 4)@h ori 6, 6, (__bss_start - 4)@l + +2: stb 2, 4(6) + addi 6, 6, 1 + andi. 7, 6, 3 + cmpi 0, 1, 7, 0 + bne 2b + lis 7, (_end - 4)@h ori 7, 7, (_end - 4)@l subf 7, 6, 7 + subi 8, 7, 1 + andi. 8, 8, 3 + addi 8, 8, 1 + sub 7, 7, 8 + srwi 7, 7, 2 /* We store 4 bytes at a time. */ mtctr 7 2: stwu 2, 4(6) /* We know r2 is already 0 from above. */ bdnz 2b + mtctr 8 +2: stb 2, 4(6) /* We know r2 is already 0 from above. */ + addi 6, 6, 1 + bdnz 2b + /* Store r5 in grub_ieee1275_entry_fn. */ lis 9, grub_ieee1275_entry_fn@ha stw 5, grub_ieee1275_entry_fn@l(9) From 88f8d1463f6ecf56d4ec9ec16b25a6f5362ab057 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 16 Jul 2013 18:37:44 +0200 Subject: [PATCH 73/73] * grub-core/loader/multiboot_elfxx.c: Check eip after v2p translation and not before. Reported by: Leon Drugi. --- ChangeLog | 6 ++++++ grub-core/loader/multiboot_elfxx.c | 25 +++++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 57af49bb2..69492ef85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-07-16 Vladimir Serbinenko + + * grub-core/loader/multiboot_elfxx.c: Check eip after v2p translation + and not before. + Reported by: Leon Drugi. + 2013-07-16 Vladimir Serbinenko * grub-core/kern/powerpc/ieee1275/startup.S: Handle unaligned bss. diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c index 26984f49a..7189e016e 100644 --- a/grub-core/loader/multiboot_elfxx.c +++ b/grub-core/loader/multiboot_elfxx.c @@ -75,18 +75,6 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, const char *filename, voi if (ehdr->e_phoff + ehdr->e_phnum * ehdr->e_phentsize > MULTIBOOT_SEARCH) return grub_error (GRUB_ERR_BAD_OS, "program header at a too high offset"); -#ifdef MULTIBOOT_LOAD_ELF64 -# ifdef __mips - /* We still in 32-bit mode. */ - if (ehdr->e_entry < 0xffffffff80000000ULL) - return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64"); -# else - /* We still in 32-bit mode. */ - if (ehdr->e_entry > 0xffffffff) - return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64"); -# endif -#endif - phdr_base = (char *) buffer + ehdr->e_phoff; #define phdr(i) ((Elf_Phdr *) (phdr_base + (i) * ehdr->e_phentsize)) @@ -142,6 +130,19 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, const char *filename, voi { grub_multiboot_payload_eip = (ehdr->e_entry - phdr(i)->p_vaddr) + phdr(i)->p_paddr; +#ifdef MULTIBOOT_LOAD_ELF64 +# ifdef __mips + /* We still in 32-bit mode. */ + if ((ehdr->e_entry - phdr(i)->p_vaddr) + + phdr(i)->p_paddr < 0xffffffff80000000ULL) + return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64"); +# else + /* We still in 32-bit mode. */ + if ((ehdr->e_entry - phdr(i)->p_vaddr) + + phdr(i)->p_paddr > 0xffffffff) + return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64"); +# endif +#endif break; }