Print this page
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
    loader: pxe receive cleanup
    9475 libefi: Do not return only if ReceiveFilter
    installboot: should support efi system partition
    8931 boot1.efi: scan all display modes rather than
    loader: spinconsole updates
    loader: gfx experiment to try GOP Blt() function.
    sha1 build test
    loader: add sha1 hash calculation
    common/sha1: update for loader build
    loader: biosdisk rework
    uts: 32-bit kernel FB needs mapping in low memory
    uts: add diag-device
    uts: boot console mirror with diag-device
    uts: enable very early console on ttya
    kmdb: add diag-device as input/output device
    uts: test VGA memory exclusion from mapping
    uts: clear boot mapping and protect boot pages test
    uts: add dboot map debug printf
    uts: need to release FB pages in release_bootstrap()
    uts: add screenmap ioctl
    uts: update sys/queue.h
    loader: add illumos uts/common to include path
    loader: tem/gfx font cleanup
    loader: vbe checks
    uts: gfx_private set KD_TEXT when KD_RESETTEXT is
    uts: gfx 8-bit update
    loader: gfx 8-bit fix
    loader: always set media size from partition.
    uts: MB2 support for 32-bit kernel
    loader: x86 should have tem 80x25
    uts: x86 should have tem 80x25
    uts: font update
    loader: font update
    uts: tem attributes
    loader: tem.c comment added
    uts: use font module
    loader: add font module
    loader: build rules for new font setup
    uts: gfx_private update for new font structure
    uts: early boot update for new font structure
    uts: font update
    uts: font build rules update for new fonts
    uts: tem update to new font structure
    loader: module.c needs to include tem_impl.h
    uts: gfx_private 8x16 font rework
    uts: make font_lookup public
    loader: font rework
    uts: font rework
    9259 libefi: efi_alloc_and_read should check for PMBR
    uts: tem utf-8 support
    loader: implement tem utf-8 support
    loader: tem should be able to display UTF-8
    7784 uts: console input should support utf-8
    7796 uts: ldterm default to utf-8
    uts: do not reset serial console
    uts: set up colors even if tem is not console
    uts: add type for early boot properties
    uts: gfx_private experiment with drm and vga
    uts: gfx_private should use setmode drm callback.
    uts: identify FB types and set up gfx_private based
    loader: replace gop and vesa with framebuffer
    uts: boot needs simple tem to support mdb
    uts: boot_keyboard should emit esc sequences for
    uts: gfx_private FB showuld be written by line
    kmdb: set terminal window size
    uts: gfx_private needs to keep track of early boot FB
    pnglite: move pnglite to usr/src/common
    loader: gfx_fb
    ficl-sys: add gfx primitives
    loader: add illumos.png logo
    ficl: add fb-putimage
    loader: add png support
    loader: add alpha blending for gfx_fb
    loader: use term-drawrect for menu frame
    ficl: add simple gfx words
    uts: provide fb_info via fbgattr dev_specific array.
    uts: gfx_private add alpha blending
    uts: update sys/ascii.h
    uts: tem OSC support (incomplete)
    uts: implement env module support and use data from
    uts: tem get colors from early boot data
    loader: use crc32 from libstand (libz)
    loader: optimize for size
    loader: pass tem info to the environment
    loader: import tem for loader console
    loader: UEFI loader needs to set ISADIR based on
    loader: need UEFI32 support
    8918 loader.efi: add vesa edid support
    uts: tem_safe_pix_clear_prom_output() should only
    uts: tem_safe_pix_clear_entire_screen() should use
    uts: tem_safe_check_first_time() should query cursor
    uts: tem implement cls callback & visual_io v4
    uts: gfx_vgatext use block cursor for vgatext
    uts: gfx_private implement cls callback & visual_io
    uts: gfx_private bitmap framebuffer implementation
    uts: early start frame buffer console support
    uts: font functions should check the input char
    uts: font rendering should support 16/24/32bit depths
    uts: use smallest font as fallback default.
    uts: update terminal dimensions based on selected
    7834 uts: vgatext should use gfx_private
    uts: add spacing property to 8859-1.bdf
    terminfo: add underline for sun-color
    terminfo: sun-color has 16 colors
    uts: add font load callback type
    loader: do not repeat int13 calls with error 0x20 and
    8905 loader: add skein/edonr support
    8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Revert "NEX-16819 loader UEFI support"
This reverts commit ec06b9fc617b99234e538bf2e7e4d02a24993e0c.
Reverting due to failures in the zfs-tests and the sharefs-tests
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
    loader: pxe receive cleanup
    9475 libefi: Do not return only if ReceiveFilter
    installboot: should support efi system partition
    8931 boot1.efi: scan all display modes rather than
    loader: spinconsole updates
    loader: gfx experiment to try GOP Blt() function.
    sha1 build test
    loader: add sha1 hash calculation
    common/sha1: update for loader build
    loader: biosdisk rework
    uts: 32-bit kernel FB needs mapping in low memory
    uts: add diag-device
    uts: boot console mirror with diag-device
    uts: enable very early console on ttya
    kmdb: add diag-device as input/output device
    uts: test VGA memory exclusion from mapping
    uts: clear boot mapping and protect boot pages test
    uts: add dboot map debug printf
    uts: need to release FB pages in release_bootstrap()
    uts: add screenmap ioctl
    uts: update sys/queue.h
    loader: add illumos uts/common to include path
    loader: tem/gfx font cleanup
    loader: vbe checks
    uts: gfx_private set KD_TEXT when KD_RESETTEXT is
    uts: gfx 8-bit update
    loader: gfx 8-bit fix
    loader: always set media size from partition.
    uts: MB2 support for 32-bit kernel
    loader: x86 should have tem 80x25
    uts: x86 should have tem 80x25
    uts: font update
    loader: font update
    uts: tem attributes
    loader: tem.c comment added
    uts: use font module
    loader: add font module
    loader: build rules for new font setup
    uts: gfx_private update for new font structure
    uts: early boot update for new font structure
    uts: font update
    uts: font build rules update for new fonts
    uts: tem update to new font structure
    loader: module.c needs to include tem_impl.h
    uts: gfx_private 8x16 font rework
    uts: make font_lookup public
    loader: font rework
    uts: font rework
    libefi: efi_alloc_and_read should check for PMBR
    uts: tem utf-8 support
    loader: implement tem utf-8 support
    loader: tem should be able to display UTF-8
    7784 uts: console input should support utf-8
    7796 uts: ldterm default to utf-8
    uts: do not reset serial console
    uts: set up colors even if tem is not console
    uts: add type for early boot properties
    uts: gfx_private experiment with drm and vga
    uts: gfx_private should use setmode drm callback.
    uts: identify FB types and set up gfx_private based
    loader: replace gop and vesa with framebuffer
    uts: boot needs simple tem to support mdb
    uts: boot_keyboard should emit esc sequences for
    uts: gfx_private FB showuld be written by line
    kmdb: set terminal window size
    uts: gfx_private needs to keep track of early boot FB
    pnglite: move pnglite to usr/src/common
    loader: gfx_fb
    ficl-sys: add gfx primitives
    loader: add illumos.png logo
    ficl: add fb-putimage
    loader: add png support
    loader: add alpha blending for gfx_fb
    loader: use term-drawrect for menu frame
    ficl: add simple gfx words
    uts: provide fb_info via fbgattr dev_specific array.
    uts: gfx_private add alpha blending
    uts: update sys/ascii.h
    uts: tem OSC support (incomplete)
    uts: implement env module support and use data from
    uts: tem get colors from early boot data
    loader: use crc32 from libstand (libz)
    loader: optimize for size
    loader: pass tem info to the environment
    loader: import tem for loader console
    loader: UEFI loader needs to set ISADIR based on
    loader: need UEFI32 support
    8918 loader.efi: add vesa edid support
    uts: tem_safe_pix_clear_prom_output() should only
    uts: tem_safe_pix_clear_entire_screen() should use
    uts: tem_safe_check_first_time() should query cursor
    uts: tem implement cls callback & visual_io v4
    uts: gfx_vgatext use block cursor for vgatext
    uts: gfx_private implement cls callback & visual_io
    uts: gfx_private bitmap framebuffer implementation
    uts: early start frame buffer console support
    uts: font functions should check the input char
    uts: font rendering should support 16/24/32bit depths
    uts: use smallest font as fallback default.
    uts: update terminal dimensions based on selected
    7834 uts: vgatext should use gfx_private
    uts: add spacing property to 8859-1.bdf
    terminfo: add underline for sun-color
    terminfo: sun-color has 16 colors
    uts: add font load callback type
    loader: do not repeat int13 calls with error 0x20 and
    8905 loader: add skein/edonr support
    8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>

@@ -17,13 +17,10 @@
  * fields enclosed by brackets "[]" replaced with your own identifying
  * information: Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
  */
-#ifndef lint
-#ident  "%Z%%M% %I%     %E% SMI"
-#endif
 
 /*
  * Copyright (c) 1988 by Sun Microsystems, Inc.
  */
 

@@ -64,13 +61,11 @@
 static void     printentry(struct kiockeymap *kio);
 static void     printchar(int character, int delim);
 
 /*ARGSUSED*/
 int
-main(argc, argv)
-        int argc;
-        char **argv;
+main(int argc, char **argv)
 {
         register int kbdfd;
         register int keystation;
         register int shift;
         int ktype;

@@ -240,10 +235,13 @@
 
 static char *funnies[] = {
         "nop",
         "oops",
         "hole",
+        "",                     /* not used */
+        "",                     /* not used */
+        "",                     /* not used */
         "reset",
         "error",
         "idle",
         "compose",
         "nonl",

@@ -256,10 +254,19 @@
         "fa_cflex",
         "fa_tilde",
         "fa_cedilla",
         "fa_acute",
         "fa_grave",
+        "fa_macron",
+        "fa_breve",
+        "fa_dot",
+        "fa_slash",
+        "fa_ring",
+        "fa_apostrophe",
+        "fa_dacute",
+        "fa_ogonek",
+        "fa_caron"
 };
 
 #define NFA_CLASS       (sizeof (fa_class) / sizeof (fa_class[0]))
 
 typedef struct {

@@ -309,19 +316,18 @@
 };
 
 #define NPADKEYS        (sizeof (padkeys) / sizeof (padkeys[0]))
 
 static void
-printentry(kio)
-        register struct kiockeymap *kio;
+printentry(struct kiockeymap *kio)
 {
-        register int entry = (kio->kio_entry & 0x1F);
-        register int fkeyset;
-        register int i;
-        register int c;
+        int entry = (kio->kio_entry & 0x1F);
+        int fkeyset;
+        int i;
+        int c;
 
-        switch (kio->kio_entry >> 8) {
+        switch (KEYFLAGS(kio->kio_entry)) {
 
         case 0x0:
                 if (kio->kio_entry == '"')
                         (void) printf("'\"'");  /* special case */
                 else if (kio->kio_entry == ' ')

@@ -328,39 +334,39 @@
                         (void) printf("' '");   /* special case */
                 else
                         printchar((int)kio->kio_entry, '\'');
                 break;
 
-        case SHIFTKEYS >> 8:
+        case SHIFTKEYS:
                 if (entry < NSHIFTKEYS)
                         (void) printf("shiftkeys+%s", shiftkeys[entry]);
                 else
                         (void) printf("%#4x", kio->kio_entry);
                 break;
 
-        case BUCKYBITS >> 8:
+        case BUCKYBITS:
                 if (entry < NBUCKYBITS)
                         (void) printf("buckybits+%s", buckybits[entry]);
                 else
                         (void) printf("%#4x", kio->kio_entry);
                 break;
 
-        case FUNNY >> 8:
+        case FUNNY:
                 if (entry < NFUNNIES)
                         (void) printf("%s", funnies[entry]);
                 else
                         (void) printf("%#4x", kio->kio_entry);
                 break;
 
-        case FA_CLASS >> 8:
+        case FA_CLASS:
                 if (entry < NFA_CLASS)
                         (void) printf("%s", fa_class[entry]);
                 else
                         (void) printf("%#4x", kio->kio_entry);
                 break;
 
-        case STRING >> 8:
+        case STRING:
                 if (entry < NBUILTIN_STRINGS && strncmp(kio->kio_string,
                         builtin_strings[entry].string, KTAB_STRLEN) == 0)
                         (void) printf("string+%s", builtin_strings[entry].name);
                 else {
                         (void) printf("\"");

@@ -370,20 +376,20 @@
                                 printchar(c, '"');
                         (void) printf("\"");
                 }
                 break;
 
-        case FUNCKEYS >> 8:
+        case FUNCKEYS:
                 fkeyset = (int)(kio->kio_entry & 0xF0) >> 4;
                 if (fkeyset < NFKEYSETS)
                         (void) printf("%s(%d)", fkeysets[fkeyset],
-                                        (entry&0x0F) + 1);
+                            (entry & 0x0F) + 1);
                 else
                         (void) printf("%#4x", kio->kio_entry);
                 break;
 
-        case PADKEYS >> 8:
+        case PADKEYS:
                 if (entry < NPADKEYS)
                         (void) printf("%s", padkeys[entry]);
                 else
                         (void) printf("%#4x", kio->kio_entry);
                 break;

@@ -393,13 +399,11 @@
                 break;
         }
 }
 
 static void
-printchar(character, delim)
-        int character;
-        int delim;
+printchar(int character, int delim)
 {
         switch (character) {
 
         case '\n':
                 (void) printf("'\\n'");

@@ -431,11 +435,13 @@
                                 (void) printf("'\\'");
                         (void) printf("%c", character);
                 } else {
                         if (character < 040)
                                 (void) printf("^%c", character + 0100);
-                        else
+                        else if (character <= 0xff)
                                 (void) printf("'\\%.3o'", character);
+                        else
+                                (void) printf("%#4x", character);
                 }
                 break;
         }
 }