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>

*** 24,35 **** */ #ifndef _SYS_KBD_H #define _SYS_KBD_H - #pragma ident "%Z%%M% %I% %E% SMI" /* SunOS4.0 1.18 */ - #ifdef __cplusplus extern "C" { #endif /* --- 24,33 ----
*** 223,241 **** * keyboard type, a keyboard specific module/driver may supply the value * at run time by defining the KEYMAP_SIZE_VARIABLE and filling in the * keyboard struct appropriately. */ #ifdef KEYMAP_SIZE_VARIABLE - typedef unsigned short keymap_entry_t; #else #define KEYMAP_SIZE 128 struct keymap { ! unsigned short keymap[KEYMAP_SIZE]; /* maps keycodes to actions */ }; #endif /* --- 221,239 ---- * keyboard type, a keyboard specific module/driver may supply the value * at run time by defining the KEYMAP_SIZE_VARIABLE and filling in the * keyboard struct appropriately. */ + typedef unsigned int keymap_entry_t; #ifdef KEYMAP_SIZE_VARIABLE #else #define KEYMAP_SIZE 128 struct keymap { ! keymap_entry_t keymap[KEYMAP_SIZE]; /* maps keycodes to actions */ }; #endif /*
*** 260,270 **** int exc_key; /* * This is our translated version of the matching sequence. */ ! unsigned short exc_entry; }; /* * A keyboard is defined by its keymaps and what state it resets at idle. * --- 258,268 ---- int exc_key; /* * This is our translated version of the matching sequence. */ ! keymap_entry_t exc_entry; }; /* * A keyboard is defined by its keymaps and what state it resets at idle. *
*** 317,355 **** * ASCII chars of 0 indicate the end of the table. */ struct compose_sequence_t { unsigned char first; /* first ASCII char after COMPOSE key */ unsigned char second; /* second ASCII char after COMPOSE key */ ! unsigned char iso; /* equivalent ISO code */ }; /* * Define the floating accent sequence structure. */ struct fltaccent_sequence_t { ! unsigned short fa_entry; /* floating accent keymap entry */ unsigned char ascii; /* ASCII char after FA-type key */ ! unsigned char iso; /* equivalent ISO code */ }; /* * The "special" entries' top 4 bits are defined below. Generally they are * used with a 4-bit parameter (such as a bit number) in the low 4 bits. * The bytes whose top 4 bits are 0x0 thru 0x7 happen to be ascii * characters. They are not special cased, but just normal cased. */ ! #define SHIFTKEYS 0x100 /* thru 0x10F. This key helps to determine */ /* the translation table used. The bit */ /* position of its bit in "shiftmask" */ /* is added to the entry, eg */ /* SHIFTKEYS+LEFTCTRL. When this entry is */ /* invoked, the bit in "shiftmask" is */ /* toggled. Depending which tables you put */ /* it in, this works well for hold-down */ /* keys or press-on, press-off keys. */ ! #define BUCKYBITS 0x200 /* thru 0x20F. This key determines the state */ /* of one of the "bucky" bits above the */ /* returned ASCII character. This is */ /* basically a way to pass mode-key-up/down */ /* information back to the caller with each */ /* "real" key depressed. The concept, and */ --- 315,363 ---- * ASCII chars of 0 indicate the end of the table. */ struct compose_sequence_t { unsigned char first; /* first ASCII char after COMPOSE key */ unsigned char second; /* second ASCII char after COMPOSE key */ ! keymap_entry_t utf8; /* equivalent UTF-8 code */ }; /* * Define the floating accent sequence structure. */ struct fltaccent_sequence_t { ! keymap_entry_t fa_entry; /* floating accent keymap entry */ unsigned char ascii; /* ASCII char after FA-type key */ ! keymap_entry_t utf8; /* equivalent UTF-8 code */ }; /* + * The top byte is used to store the flags, leaving 24 bits for char. + */ + #define KEYCHAR(c) ((c) & 0x00ffffff) + #define KEYFLAGS(c) ((c) & ~0x00ffffff) + + /* * The "special" entries' top 4 bits are defined below. Generally they are * used with a 4-bit parameter (such as a bit number) in the low 4 bits. * The bytes whose top 4 bits are 0x0 thru 0x7 happen to be ascii * characters. They are not special cased, but just normal cased. */ ! #define SPECIAL(h, l) (((h) << 24) | (l)) ! ! #define SHIFTKEYS SPECIAL(0x1, 0) ! /* thru 0x10F. This key helps to determine */ /* the translation table used. The bit */ /* position of its bit in "shiftmask" */ /* is added to the entry, eg */ /* SHIFTKEYS+LEFTCTRL. When this entry is */ /* invoked, the bit in "shiftmask" is */ /* toggled. Depending which tables you put */ /* it in, this works well for hold-down */ /* keys or press-on, press-off keys. */ ! #define BUCKYBITS SPECIAL(0x2, 0) ! /* thru 0x20F. This key determines the state */ /* of one of the "bucky" bits above the */ /* returned ASCII character. This is */ /* basically a way to pass mode-key-up/down */ /* information back to the caller with each */ /* "real" key depressed. The concept, and */
*** 364,400 **** /* bits. When this entry is invoked, */ /* the designated bit in "buckybits" is */ /* toggled. Depending which tables you put */ /* it in, this works well for hold-down */ /* keys or press-on, press-off keys. */ ! #define FUNNY 0x300 /* thru 0x30F. This key does one of 16 funny */ /* things based on the low 4 bits: */ ! #define NOP 0x300 /* This key does nothing. */ ! #define OOPS 0x301 /* This key exists but is undefined. */ ! #define HOLE 0x302 /* This key does not exist on the keyboard. */ /* Its position code should never be */ /* generated. This indicates a software/ */ /* hardware mismatch, or bugs. */ ! #define RESET 0x306 /* Kbd was just reset */ ! #define ERROR 0x307 /* Kbd just detected an internal error */ ! #define IDLE 0x308 /* Kbd is idle (no keys down) */ ! #define COMPOSE 0x309 /* This key is the Compose key. */ ! #define NONL 0x30A /* This key not affected by Num Lock */ /* Combinations 0x30B to 0x30F are reserved for non-parameterized functions */ ! #define FA_CLASS 0x400 /* thru 0x40F. These are for "floating */ /* accent" characters. The low-order 4 bits */ /* select one of those characters. */ /* Definitions for the individual floating accents: */ ! #define FA_UMLAUT 0x400 /* umlaut accent */ ! #define FA_CFLEX 0x401 /* circumflex accent */ ! #define FA_TILDE 0x402 /* tilde accent */ ! #define FA_CEDILLA 0x403 /* cedilla accent */ ! #define FA_ACUTE 0x404 /* acute accent */ ! #define FA_GRAVE 0x405 /* grave accent */ ! #define STRING 0x500 /* thru 0x50F. The low-order 4 bits index */ /* a table select a string to be returned, */ /* char by char. Each entry the table is */ /* null terminated. */ #define KTAB_STRLEN 10 /* Maximum string length (including null) */ /* Definitions for the individual string numbers: */ --- 372,418 ---- /* bits. When this entry is invoked, */ /* the designated bit in "buckybits" is */ /* toggled. Depending which tables you put */ /* it in, this works well for hold-down */ /* keys or press-on, press-off keys. */ ! #define FUNNY SPECIAL(0x3, 0) /* thru 0x30F. This key does one of 16 funny */ /* things based on the low 4 bits: */ ! #define NOP SPECIAL(0x3, 0x0) /* This key does nothing. */ ! #define OOPS SPECIAL(0x3, 0x1) /* This key exists but is undefined. */ ! #define HOLE SPECIAL(0x3, 0x2) /* This key does not exist on the keyboard. */ /* Its position code should never be */ /* generated. This indicates a software/ */ /* hardware mismatch, or bugs. */ ! #define RESET SPECIAL(0x3, 0x6) /* Kbd was just reset */ ! #define ERROR SPECIAL(0x3, 0x7) /* Kbd just detected an internal error */ ! #define IDLE SPECIAL(0x3, 0x8) /* Kbd is idle (no keys down) */ ! #define COMPOSE SPECIAL(0x3, 0x9) /* This key is the Compose key. */ ! #define NONL SPECIAL(0x3, 0xA) /* This key not affected by Num Lock */ /* Combinations 0x30B to 0x30F are reserved for non-parameterized functions */ ! #define FA_CLASS SPECIAL(0x4, 0) ! /* thru 0x40F. These are for "floating */ /* accent" characters. The low-order 4 bits */ /* select one of those characters. */ /* Definitions for the individual floating accents: */ ! #define FA_UMLAUT SPECIAL(0x4, 0x0) /* umlaut accent */ ! #define FA_CFLEX SPECIAL(0x4, 0x1) /* circumflex accent */ ! #define FA_TILDE SPECIAL(0x4, 0x2) /* tilde accent */ ! #define FA_CEDILLA SPECIAL(0x4, 0x3) /* cedilla accent */ ! #define FA_ACUTE SPECIAL(0x4, 0x4) /* acute accent */ ! #define FA_GRAVE SPECIAL(0x4, 0x5) /* grave accent */ ! #define FA_MACRON SPECIAL(0x4, 0x6) /* macron accent */ ! #define FA_BREVE SPECIAL(0x4, 0x7) /* breve accent */ ! #define FA_DOT SPECIAL(0x4, 0x8) /* dot accent */ ! #define FA_SLASH SPECIAL(0x4, 0x9) /* slash accent */ ! #define FA_RING SPECIAL(0x4, 0xa) /* ring accent */ ! #define FA_APOSTROPHE SPECIAL(0x4, 0xb) /* apostrophe accent */ ! #define FA_DACUTE SPECIAL(0x4, 0xc) /* double acute accent */ ! #define FA_OGONEK SPECIAL(0x4, 0xd) /* ogonek accent */ ! #define FA_CARON SPECIAL(0x4, 0xe) /* caron accent */ ! #define STRING SPECIAL(0x5, 0) /* thru 0x50F. The low-order 4 bits index */ /* a table select a string to be returned, */ /* char by char. Each entry the table is */ /* null terminated. */ #define KTAB_STRLEN 10 /* Maximum string length (including null) */ /* Definitions for the individual string numbers: */
*** 408,422 **** /* * In the following function key groupings, the low-order 4 bits indicate * the function key number within the group, and the next 4 bits indicate * the group. */ ! #define FUNCKEYS 0x600 ! #define LEFTFUNC 0x600 /* thru 0x60F. The "left" group. */ ! #define RIGHTFUNC 0x610 /* thru 0x61F. The "right" group. */ ! #define TOPFUNC 0x620 /* thru 0x62F. The "top" group. */ ! #define BOTTOMFUNC 0x630 /* thru 0x63F. The "bottom" group. */ #define LF(n) (LEFTFUNC+(n)-1) #define RF(n) (RIGHTFUNC+(n)-1) #define TF(n) (TOPFUNC+(n)-1) #define BF(n) (BOTTOMFUNC+(n)-1) --- 426,440 ---- /* * In the following function key groupings, the low-order 4 bits indicate * the function key number within the group, and the next 4 bits indicate * the group. */ ! #define FUNCKEYS SPECIAL(0x6, 0) ! #define LEFTFUNC SPECIAL(0x6, 0x0) /* thru 0x60F. The "left" group. */ ! #define RIGHTFUNC SPECIAL(0x6, 0x10) /* thru 0x61F. The "right" group. */ ! #define TOPFUNC SPECIAL(0x6, 0x20) /* thru 0x62F. The "top" group. */ ! #define BOTTOMFUNC SPECIAL(0x6, 0x30) /* thru 0x63F. The "bottom" group. */ #define LF(n) (LEFTFUNC+(n)-1) #define RF(n) (RIGHTFUNC+(n)-1) #define TF(n) (TOPFUNC+(n)-1) #define BF(n) (BOTTOMFUNC+(n)-1)
*** 429,457 **** * to be sent through the character stream: * ESC[0..9z * where ESC is a single escape character and 0..9 indicate some number of * digits needed to encode the function key as a decimal number. */ ! #define PADKEYS 0x700 ! #define PADEQUAL 0x700 /* keypad = */ ! #define PADSLASH 0x701 /* keypad / */ ! #define PADSTAR 0x702 /* keypad * */ ! #define PADMINUS 0x703 /* keypad - */ ! #define PADSEP 0x704 /* keypad, */ ! #define PAD7 0x705 /* keypad 7 */ ! #define PAD8 0x706 /* keypad 8 */ ! #define PAD9 0x707 /* keypad 9 */ ! #define PADPLUS 0x708 /* keypad + */ ! #define PAD4 0x709 /* keypad 4 */ ! #define PAD5 0x70A /* keypad 5 */ ! #define PAD6 0x70B /* keypad 6 */ ! #define PAD1 0x70C /* keypad 1 */ ! #define PAD2 0x70D /* keypad 2 */ ! #define PAD3 0x70E /* keypad 3 */ ! #define PAD0 0x70F /* keypad 0 */ ! #define PADDOT 0x710 /* keypad . */ ! #define PADENTER 0x711 /* keypad Enter */ #ifdef __cplusplus } #endif --- 447,475 ---- * to be sent through the character stream: * ESC[0..9z * where ESC is a single escape character and 0..9 indicate some number of * digits needed to encode the function key as a decimal number. */ ! #define PADKEYS SPECIAL(0x7, 0) ! #define PADEQUAL SPECIAL(0x7, 0x00) /* keypad = */ ! #define PADSLASH SPECIAL(0x7, 0x01) /* keypad / */ ! #define PADSTAR SPECIAL(0x7, 0x02) /* keypad * */ ! #define PADMINUS SPECIAL(0x7, 0x03) /* keypad - */ ! #define PADSEP SPECIAL(0x7, 0x04) /* keypad, */ ! #define PAD7 SPECIAL(0x7, 0x05) /* keypad 7 */ ! #define PAD8 SPECIAL(0x7, 0x06) /* keypad 8 */ ! #define PAD9 SPECIAL(0x7, 0x07) /* keypad 9 */ ! #define PADPLUS SPECIAL(0x7, 0x08) /* keypad + */ ! #define PAD4 SPECIAL(0x7, 0x09) /* keypad 4 */ ! #define PAD5 SPECIAL(0x7, 0x0A) /* keypad 5 */ ! #define PAD6 SPECIAL(0x7, 0x0B) /* keypad 6 */ ! #define PAD1 SPECIAL(0x7, 0x0C) /* keypad 1 */ ! #define PAD2 SPECIAL(0x7, 0x0D) /* keypad 2 */ ! #define PAD3 SPECIAL(0x7, 0x0E) /* keypad 3 */ ! #define PAD0 SPECIAL(0x7, 0x0F) /* keypad 0 */ ! #define PADDOT SPECIAL(0x7, 0x10) /* keypad . */ ! #define PADENTER SPECIAL(0x7, 0x11) /* keypad Enter */ #ifdef __cplusplus } #endif