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