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>


 108         uint32_t len;
 109         uint32_t nameplus[0];
 110 };
 111 
 112 struct nfs_iodesc {
 113         struct iodesc *iodesc;
 114         off_t off;
 115         uint32_t fhsize;
 116         u_char fh[NFS_V3MAXFHSIZE];
 117         struct nfsv3_fattrs fa; /* all in network order */
 118         uint64_t cookie;
 119 };
 120 
 121 /*
 122  * XXX interactions with tftp? See nfswrapper.c for a confusing
 123  *     issue.
 124  */
 125 int             nfs_open(const char *path, struct open_file *f);
 126 static int      nfs_close(struct open_file *f);
 127 static int      nfs_read(struct open_file *f, void *buf, size_t size, size_t *resid);
 128 static int      nfs_write(struct open_file *f, void *buf, size_t size, size_t *resid);
 129 static off_t    nfs_seek(struct open_file *f, off_t offset, int where);
 130 static int      nfs_stat(struct open_file *f, struct stat *sb);
 131 static int      nfs_readdir(struct open_file *f, struct dirent *d);
 132 
 133 struct  nfs_iodesc nfs_root_node;
 134 
 135 struct fs_ops nfs_fsops = {
 136         "nfs",
 137         nfs_open,
 138         nfs_close,
 139         nfs_read,
 140         nfs_write,
 141         nfs_seek,
 142         nfs_stat,
 143         nfs_readdir
 144 };
 145 
 146 static int nfs_read_size = NFSREAD_MIN_SIZE;
 147 
 148 /*
 149  * Improve boot performance over NFS
 150  */
 151 static void
 152 set_nfs_read_size(void)
 153 {
 154         char *env, *end;
 155         char buf[10];
 156 
 157         if ((env = getenv("nfs.read_size")) != NULL) {
 158                 errno = 0;
 159                 nfs_read_size = strtol(env, &end, 0);
 160                 if (errno != 0 || *env == '\0' || *end != '\0') {


 687                         return (errno); /* XXX - from nfs_readdata */
 688                 }
 689                 if (cc == 0) {
 690 #ifdef NFS_DEBUG
 691                         if (debug)
 692                                 printf("nfs_read: hit EOF unexpectantly");
 693 #endif
 694                         goto ret;
 695                 }
 696                 fp->off += cc;
 697                 addr += cc;
 698                 size -= cc;
 699         }
 700 ret:
 701         if (resid)
 702                 *resid = size;
 703 
 704         return (0);
 705 }
 706 
 707 /*
 708  * Not implemented.
 709  */
 710 int
 711 nfs_write(struct open_file *f, void *buf, size_t size, size_t *resid)
 712 {
 713         return (EROFS);
 714 }
 715 
 716 off_t
 717 nfs_seek(struct open_file *f, off_t offset, int where)
 718 {
 719         struct nfs_iodesc *d = (struct nfs_iodesc *)f->f_fsdata;
 720         uint32_t size = ntohl(d->fa.fa_size.val[1]);
 721 
 722         switch (where) {
 723         case SEEK_SET:
 724                 d->off = offset;
 725                 break;
 726         case SEEK_CUR:
 727                 d->off += offset;
 728                 break;
 729         case SEEK_END:
 730                 d->off = size - offset;
 731                 break;
 732         default:
 733                 errno = EINVAL;
 734                 return (-1);
 735         }




 108         uint32_t len;
 109         uint32_t nameplus[0];
 110 };
 111 
 112 struct nfs_iodesc {
 113         struct iodesc *iodesc;
 114         off_t off;
 115         uint32_t fhsize;
 116         u_char fh[NFS_V3MAXFHSIZE];
 117         struct nfsv3_fattrs fa; /* all in network order */
 118         uint64_t cookie;
 119 };
 120 
 121 /*
 122  * XXX interactions with tftp? See nfswrapper.c for a confusing
 123  *     issue.
 124  */
 125 int             nfs_open(const char *path, struct open_file *f);
 126 static int      nfs_close(struct open_file *f);
 127 static int      nfs_read(struct open_file *f, void *buf, size_t size, size_t *resid);

 128 static off_t    nfs_seek(struct open_file *f, off_t offset, int where);
 129 static int      nfs_stat(struct open_file *f, struct stat *sb);
 130 static int      nfs_readdir(struct open_file *f, struct dirent *d);
 131 
 132 struct  nfs_iodesc nfs_root_node;
 133 
 134 struct fs_ops nfs_fsops = {
 135         "nfs",
 136         nfs_open,
 137         nfs_close,
 138         nfs_read,
 139         null_write,
 140         nfs_seek,
 141         nfs_stat,
 142         nfs_readdir
 143 };
 144 
 145 static int nfs_read_size = NFSREAD_MIN_SIZE;
 146 
 147 /*
 148  * Improve boot performance over NFS
 149  */
 150 static void
 151 set_nfs_read_size(void)
 152 {
 153         char *env, *end;
 154         char buf[10];
 155 
 156         if ((env = getenv("nfs.read_size")) != NULL) {
 157                 errno = 0;
 158                 nfs_read_size = strtol(env, &end, 0);
 159                 if (errno != 0 || *env == '\0' || *end != '\0') {


 686                         return (errno); /* XXX - from nfs_readdata */
 687                 }
 688                 if (cc == 0) {
 689 #ifdef NFS_DEBUG
 690                         if (debug)
 691                                 printf("nfs_read: hit EOF unexpectantly");
 692 #endif
 693                         goto ret;
 694                 }
 695                 fp->off += cc;
 696                 addr += cc;
 697                 size -= cc;
 698         }
 699 ret:
 700         if (resid)
 701                 *resid = size;
 702 
 703         return (0);
 704 }
 705 









 706 off_t
 707 nfs_seek(struct open_file *f, off_t offset, int where)
 708 {
 709         struct nfs_iodesc *d = (struct nfs_iodesc *)f->f_fsdata;
 710         uint32_t size = ntohl(d->fa.fa_size.val[1]);
 711 
 712         switch (where) {
 713         case SEEK_SET:
 714                 d->off = offset;
 715                 break;
 716         case SEEK_CUR:
 717                 d->off += offset;
 718                 break;
 719         case SEEK_END:
 720                 d->off = size - offset;
 721                 break;
 722         default:
 723                 errno = EINVAL;
 724                 return (-1);
 725         }