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>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/boot/lib/libstand/stand.h
          +++ new/usr/src/boot/lib/libstand/stand.h
   1    1  /*
   2    2   * Copyright (c) 1998 Michael Smith.
   3    3   * All rights reserved.
   4    4   *
   5    5   * Redistribution and use in source and binary forms, with or without
   6    6   * modification, are permitted provided that the following conditions
   7    7   * are met:
   8    8   * 1. Redistributions of source code must retain the above copyright
   9    9   *    notice, this list of conditions and the following disclaimer.
  10   10   * 2. Redistributions in binary form must reproduce the above copyright
  11   11   *    notice, this list of conditions and the following disclaimer in the
  12   12   *    documentation and/or other materials provided with the distribution.
  13   13   *
  14   14   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  15   15   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16   16   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17   17   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  18   18   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19   19   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  
    | 
      ↓ open down ↓ | 
    19 lines elided | 
    
      ↑ open up ↑ | 
  
  20   20   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21   21   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22   22   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23   23   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24   24   * SUCH DAMAGE.
  25   25   *
  26   26   * $FreeBSD$
  27   27   * From $NetBSD: stand.h,v 1.22 1997/06/26 19:17:40 drochner Exp $      
  28   28   */
  29   29  
  30      -/*-
       30 +/*
  31   31   * Copyright (c) 1993
  32   32   *      The Regents of the University of California.  All rights reserved.
  33   33   *
  34   34   * Redistribution and use in source and binary forms, with or without
  35   35   * modification, are permitted provided that the following conditions
  36   36   * are met:
  37   37   * 1. Redistributions of source code must retain the above copyright
  38   38   *    notice, this list of conditions and the following disclaimer.
  39   39   * 2. Redistributions in binary form must reproduce the above copyright
  40   40   *    notice, this list of conditions and the following disclaimer in the
  41   41   *    documentation and/or other materials provided with the distribution.
  42   42   * 4. Neither the name of the University nor the names of its contributors
  43   43   *    may be used to endorse or promote products derived from this software
  44   44   *    without specific prior written permission.
  45   45   *
  46   46   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  47   47   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  48   48   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  49   49   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  50   50   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  51   51   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  52   52   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  53   53   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  54   54   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  55   55   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  56   56   * SUCH DAMAGE.
  57   57   *
  58   58   *      @(#)stand.h     8.1 (Berkeley) 6/11/93
  59   59   */
  60   60  
  61   61  #ifndef STAND_H
  62   62  #define STAND_H
  63   63  
  64   64  #include <sys/types.h>
  65   65  #include <sys/cdefs.h>
  66   66  #include <sys/stat.h>
  67   67  #include <sys/dirent.h>
  68   68  
  69   69  /* this header intentionally exports NULL from <string.h> */
  70   70  #include <string.h>
  71   71  
  72   72  #define CHK(fmt, args...)       printf("%s(%d): " fmt "\n", __func__, __LINE__ , ##args)
  73   73  #define PCHK(fmt, args...)      {printf("%s(%d): " fmt "\n", __func__, __LINE__ , ##args); getchar();}
  74   74  
  75   75  /* Avoid unwanted userlandish components */
  76   76  #define _KERNEL
  77   77  #include <sys/errno.h>
  78   78  #undef _KERNEL
  79   79  
  80   80  /* special stand error codes */
  81   81  #define EADAPT  (ELAST+1)       /* bad adaptor */
  82   82  #define ECTLR   (ELAST+2)       /* bad controller */
  83   83  #define EUNIT   (ELAST+3)       /* bad unit */
  84   84  #define ESLICE  (ELAST+4)       /* bad slice */
  85   85  #define EPART   (ELAST+5)       /* bad partition */
  86   86  #define ERDLAB  (ELAST+6)       /* can't read disk label */
  87   87  #define EUNLAB  (ELAST+7)       /* unlabeled disk */
  88   88  #define EOFFSET (ELAST+8)       /* relative seek not supported */
  89   89  #define ESALAST (ELAST+8)       /* */
  90   90  
  91   91  struct open_file;
  92   92  
  93   93  /*
  94   94   * This structure is used to define file system operations in a file system
  95   95   * independent way.
  96   96   *
  
    | 
      ↓ open down ↓ | 
    56 lines elided | 
    
      ↑ open up ↑ | 
  
  97   97   * XXX note that filesystem providers should export a pointer to their fs_ops
  98   98   *     struct, so that consumers can reference this and thus include the
  99   99   *     filesystems that they require.
 100  100   */
 101  101  struct fs_ops {
 102  102      const char  *fs_name;
 103  103      int         (*fo_open)(const char *path, struct open_file *f);
 104  104      int         (*fo_close)(struct open_file *f);
 105  105      int         (*fo_read)(struct open_file *f, void *buf,
 106  106                             size_t size, size_t *resid);
 107      -    int         (*fo_write)(struct open_file *f, void *buf,
      107 +    int         (*fo_write)(struct open_file *f, const void *buf,
 108  108                              size_t size, size_t *resid);
 109  109      off_t       (*fo_seek)(struct open_file *f, off_t offset, int where);
 110  110      int         (*fo_stat)(struct open_file *f, struct stat *sb);
 111  111      int         (*fo_readdir)(struct open_file *f, struct dirent *d);
 112  112  };
 113  113  
 114  114  /*
 115  115   * libstand-supplied filesystems
 116  116   */
 117  117  extern struct fs_ops ufs_fsops;
 118  118  extern struct fs_ops tftp_fsops;
 119  119  extern struct fs_ops nfs_fsops;
 120  120  extern struct fs_ops cd9660_fsops;
 121  121  extern struct fs_ops nandfs_fsops;
 122  122  extern struct fs_ops gzipfs_fsops;
 123  123  extern struct fs_ops bzipfs_fsops;
 124  124  extern struct fs_ops dosfs_fsops;
 125  125  extern struct fs_ops ext2fs_fsops;
 126  126  extern struct fs_ops splitfs_fsops;
 127  127  extern struct fs_ops pkgfs_fsops;
 128  128  
 129  129  /* where values for lseek(2) */
 130  130  #define SEEK_SET        0       /* set file offset to offset */
 131  131  #define SEEK_CUR        1       /* set file offset to current plus offset */
 132  132  #define SEEK_END        2       /* set file offset to EOF plus offset */
 133  133  
 134  134  /* 
 135  135   * Device switch
 136  136   */
 137  137  struct devsw {
 138  138      const char  dv_name[8];
 139  139      int         dv_type;                /* opaque type constant, arch-dependant */
 140  140      int         (*dv_init)(void);       /* early probe call */
 141  141      int         (*dv_strategy)(void *devdata, int rw, daddr_t blk,
 142  142                          size_t size, char *buf, size_t *rsize);
 143  143      int         (*dv_open)(struct open_file *f, ...);
 144  144      int         (*dv_close)(struct open_file *f);
 145  145      int         (*dv_ioctl)(struct open_file *f, u_long cmd, void *data);
 146  146      int         (*dv_print)(int verbose);       /* print device information */
 147  147      void        (*dv_cleanup)(void);
 148  148  };
 149  149  
 150  150  /*
 151  151   * libstand-supplied device switch
 152  152   */
 153  153  extern struct devsw netdev;
 154  154  
 155  155  extern int errno;
 156  156  
 157  157  /*
 158  158   * Generic device specifier; architecture-dependent
 159  159   * versions may be larger, but should be allowed to
 160  160   * overlap.
 161  161   */
 162  162  struct devdesc
 163  163  {
 164  164      struct devsw        *d_dev;
 165  165      int                 d_type;
 166  166  #define DEVT_NONE       0
 167  167  #define DEVT_DISK       1
 168  168  #define DEVT_NET        2
 169  169  #define DEVT_CD         3
 170  170  #define DEVT_ZFS        4
 171  171  #define DEVT_FD         5
 172  172      int                 d_unit;
 173  173      void                *d_opendata;
 174  174  };
 175  175  
 176  176  struct open_file {
 177  177      int                 f_flags;        /* see F_* below */
 178  178      struct devsw        *f_dev;         /* pointer to device operations */
 179  179      void                *f_devdata;     /* device specific data */
 180  180      struct fs_ops       *f_ops;         /* pointer to file system operations */
 181  181      void                *f_fsdata;      /* file system specific data */
 182  182      off_t               f_offset;       /* current file offset */
 183  183      char                *f_rabuf;       /* readahead buffer pointer */
 184  184      size_t              f_ralen;        /* valid data in readahead buffer */
 185  185      off_t               f_raoffset;     /* consumer offset in readahead buffer */
 186  186  #define SOPEN_RASIZE    512
 187  187  };
 188  188  
 189  189  #define SOPEN_MAX       64
 190  190  extern struct open_file files[];
 191  191  
 192  192  /* f_flags values */
 193  193  #define F_READ          0x0001  /* file opened for reading */
 194  194  #define F_WRITE         0x0002  /* file opened for writing */
 195  195  #define F_RAW           0x0004  /* raw device open - no file system */
 196  196  #define F_NODEV         0x0008  /* network open - no device */
 197  197  #define F_GZIP          0x0010  /* file is compressed by gzip */
 198  198  #define F_BZIP          0x0020  /* file is compressed by bzip */
 199  199  #define F_MASK          0xFFFF
 200  200  /* Mode modifier for strategy() */
 201  201  #define F_NORA          (0x01 << 16)    /* Disable Read-Ahead */
 202  202  
 203  203  #define isascii(c)      (((c) & ~0x7F) == 0)
 204  204  
 205  205  static __inline int isupper(int c)
 206  206  {
 207  207      return c >= 'A' && c <= 'Z';
 208  208  }
 209  209  
 210  210  static __inline int islower(int c)
 211  211  {
 212  212      return c >= 'a' && c <= 'z';
 213  213  }
 214  214  
 215  215  static __inline int isspace(int c)
 216  216  {
 217  217      return c == ' ' || (c >= 0x9 && c <= 0xd);
 218  218  }
 219  219  
 220  220  static __inline int isdigit(int c)
 221  221  {
 222  222      return c >= '0' && c <= '9';
 223  223  }
 224  224  
 225  225  static __inline int isxdigit(int c)
 226  226  {
 227  227      return isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
 228  228  }
 229  229  
 230  230  static __inline int isalpha(int c)
 231  231  {
 232  232      return isupper(c) || islower(c);
 233  233  }
 234  234  
 235  235  static __inline int isalnum(int c)
 236  236  {
 237  237      return isalpha(c) || isdigit(c);
 238  238  }
 239  239  
 240  240  static __inline int toupper(int c)
 241  241  {
 242  242      return islower(c) ? c - 'a' + 'A' : c;
 243  243  }
 244  244  
 245  245  static __inline int tolower(int c)
 246  246  {
 247  247      return isupper(c) ? c - 'A' + 'a' : c;
 248  248  }
 249  249  
 250  250  /* sbrk emulation */
 251  251  extern void     setheap(void *base, void *top);
 252  252  extern char     *sbrk(int incr);
 253  253  
 254  254  /* Matt Dillon's zalloc/zmalloc */
 255  255  extern void     *malloc(size_t bytes);
 256  256  extern void     free(void *ptr);
 257  257  /*#define free(p)       {CHK("free %p", p); free(p);} */ /* use for catching guard violations */
 258  258  extern void     *calloc(size_t n1, size_t n2);
 259  259  extern void     *realloc(void *ptr, size_t size);
 260  260  extern void     *reallocf(void *ptr, size_t size);
 261  261  extern void     mallocstats(void);
 262  262  
 263  263  extern int      printf(const char *fmt, ...) __printflike(1, 2);
 264  264  extern void     vprintf(const char *fmt, __va_list);
 265  265  extern int      asprintf(char **buf, const char *cfmt, ...) __printflike(2, 3);
 266  266  extern int      sprintf(char *buf, const char *cfmt, ...) __printflike(2, 3);
 267  267  extern int      snprintf(char *buf, size_t size, const char *cfmt, ...) __printflike(3, 4);
 268  268  extern void     vsprintf(char *buf, const char *cfmt, __va_list);
 269  269  extern void     vsnprintf(char *buf, size_t size, const char *cfmt, __va_list);
 270  270  
 271  271  extern void     twiddle(u_int callerdiv);
 272  272  extern void     twiddle_divisor(u_int globaldiv);
 273  273  
 274  274  extern void     ngets(char *, int);
  
    | 
      ↓ open down ↓ | 
    157 lines elided | 
    
      ↑ open up ↑ | 
  
 275  275  #define gets(x) ngets((x), 0)
 276  276  extern int      fgetstr(char *buf, int size, int fd);
 277  277  
 278  278  extern int      open(const char *, int);
 279  279  #define O_RDONLY        0x0
 280  280  #define O_WRONLY        0x1
 281  281  #define O_RDWR          0x2
 282  282  extern int      close(int);
 283  283  extern void     closeall(void);
 284  284  extern ssize_t  read(int, void *, size_t);
 285      -extern ssize_t  write(int, void *, size_t);
      285 +extern ssize_t  write(int, const void *, size_t);
 286  286  extern struct   dirent *readdirfd(int);
 287  287  
 288  288  extern void     srandom(u_long seed);
 289  289  extern u_long   random(void);
 290  290      
 291  291  /* imports from stdlib, locally modified */
 292  292  extern long     strtol(const char *, char **, int);
 293  293  extern unsigned long    strtoul(const char *, char **, int);
 294  294  extern char     *optarg;                        /* getopt(3) external variables */
 295  295  extern int      optind, opterr, optopt, optreset;
 296  296  extern int      getopt(int, char * const [], const char *);
 297  297  
 298  298  /* pager.c */
 299  299  extern void     pager_open(void);
 300  300  extern void     pager_close(void);
 301  301  extern int      pager_output(const char *lines);
 302  302  extern int      pager_file(const char *fname);
 303  303  
 304  304  /* No signal state to preserve */
 305  305  #define setjmp  _setjmp
 306  306  #define longjmp _longjmp
 307  307  
 308  308  /* environment.c */
 309  309  #define EV_DYNAMIC      (1<<0)          /* value was dynamically allocated, free if changed/unset */
 310  310  #define EV_VOLATILE     (1<<1)          /* value is volatile, make a copy of it */
 311  311  #define EV_NOHOOK       (1<<2)          /* don't call hook when setting */
 312  312  
 313  313  struct env_var;
 314  314  typedef char    *(ev_format_t)(struct env_var *ev);
 315  315  typedef int     (ev_sethook_t)(struct env_var *ev, int flags,
 316  316                      const void *value);
 317  317  typedef int     (ev_unsethook_t)(struct env_var *ev);
 318  318  
 319  319  struct env_var
 320  320  {
 321  321      char                *ev_name;
 322  322      int                 ev_flags;
 323  323      void                *ev_value;
 324  324      ev_sethook_t        *ev_sethook;
 325  325      ev_unsethook_t      *ev_unsethook;
 326  326      struct env_var      *ev_next, *ev_prev;
 327  327  };
 328  328  extern struct env_var   *environ;
 329  329  
 330  330  extern struct env_var   *env_getenv(const char *name);
 331  331  extern int              env_setenv(const char *name, int flags,
 332  332                                     const void *value, ev_sethook_t sethook,
 333  333                                     ev_unsethook_t unsethook);
 334  334  extern char             *getenv(const char *name);
 335  335  extern int              setenv(const char *name, const char *value,
 336  336                                 int overwrite);
 337  337  extern int              putenv(const char *string);
 338  338  extern int              unsetenv(const char *name);
 339  339  
 340  340  extern ev_sethook_t     env_noset;              /* refuse set operation */
 341  341  extern ev_unsethook_t   env_nounset;            /* refuse unset operation */
 342  342  
 343  343  /* BCD conversions (undocumented) */
 344  344  extern u_char const     bcd2bin_data[];
 345  345  extern u_char const     bin2bcd_data[];
 346  346  extern char const       hex2ascii_data[];
 347  347  
 348  348  #define bcd2bin(bcd)    (bcd2bin_data[bcd])
 349  349  #define bin2bcd(bin)    (bin2bcd_data[bin])
 350  350  #define hex2ascii(hex)  (hex2ascii_data[hex])
 351  351  
 352  352  /* min/max (undocumented) */
 353  353  static __inline int imax(int a, int b) { return (a > b ? a : b); }
 354  354  static __inline int imin(int a, int b) { return (a < b ? a : b); }
 355  355  static __inline long lmax(long a, long b) { return (a > b ? a : b); }
 356  356  static __inline long lmin(long a, long b) { return (a < b ? a : b); }
 357  357  static __inline u_int max(u_int a, u_int b) { return (a > b ? a : b); }
 358  358  static __inline u_int min(u_int a, u_int b) { return (a < b ? a : b); }
 359  359  static __inline quad_t qmax(quad_t a, quad_t b) { return (a > b ? a : b); }
 360  360  static __inline quad_t qmin(quad_t a, quad_t b) { return (a < b ? a : b); }
 361  361  static __inline u_long ulmax(u_long a, u_long b) { return (a > b ? a : b); }
  
    | 
      ↓ open down ↓ | 
    66 lines elided | 
    
      ↑ open up ↑ | 
  
 362  362  static __inline u_long ulmin(u_long a, u_long b) { return (a < b ? a : b); }
 363  363  
 364  364  /* null functions for device/filesystem switches (undocumented) */
 365  365  extern int      nodev(void);
 366  366  extern int      noioctl(struct open_file *, u_long, void *);
 367  367  extern void     nullsys(void);
 368  368  
 369  369  extern int      null_open(const char *path, struct open_file *f);
 370  370  extern int      null_close(struct open_file *f);
 371  371  extern int      null_read(struct open_file *f, void *buf, size_t size, size_t *resid);
 372      -extern int      null_write(struct open_file *f, void *buf, size_t size, size_t *resid);
      372 +extern int      null_write(struct open_file *f, const void *buf, size_t size, size_t *resid);
 373  373  extern off_t    null_seek(struct open_file *f, off_t offset, int where);
 374  374  extern int      null_stat(struct open_file *f, struct stat *sb);
 375  375  extern int      null_readdir(struct open_file *f, struct dirent *d);
 376  376  
 377  377  
 378  378  /* 
 379  379   * Machine dependent functions and data, must be provided or stubbed by 
 380  380   * the consumer 
 381  381   */
 382  382  extern int              getchar(void);
 383  383  extern int              ischar(void);
 384  384  extern void             putchar(int);
 385  385  extern int              devopen(struct open_file *, const char *, const char **);
 386  386  extern int              devclose(struct open_file *f);
 387  387  extern void             panic(const char *, ...) __dead2 __printflike(1, 2);
      388 +extern time_t           getsecs(void);
 388  389  extern struct fs_ops    *file_system[];
 389  390  extern struct fs_ops    *exclusive_file_system;
 390  391  extern struct devsw     *devsw[];
 391  392  
 392  393  /*
 393  394   * Expose byteorder(3) functions.
 394  395   */
 395  396  #ifndef _BYTEORDER_PROTOTYPED
 396  397  #define _BYTEORDER_PROTOTYPED
 397  398  extern uint32_t         htonl(uint32_t);
 398  399  extern uint16_t         htons(uint16_t);
 399  400  extern uint32_t         ntohl(uint32_t);
 400  401  extern uint16_t         ntohs(uint16_t);
 401  402  #endif
 402  403  
 403  404  #ifndef _BYTEORDER_FUNC_DEFINED
 404  405  #define _BYTEORDER_FUNC_DEFINED
 405  406  #define htonl(x)        __htonl(x)
 406  407  #define htons(x)        __htons(x)
 407  408  #define ntohl(x)        __ntohl(x)
 408  409  #define ntohs(x)        __ntohs(x)
 409  410  #endif
 410  411  
 411  412  void *Malloc(size_t, const char *, int);
 412  413  void *Calloc(size_t, size_t, const char *, int);
 413  414  void *Realloc(void *, size_t, const char *, int);
 414  415  void Free(void *, const char *, int);
 415  416  
 416  417  #if 1
 417  418  #define malloc(x)       Malloc(x, __FILE__, __LINE__)
 418  419  #define calloc(x, y)    Calloc(x, y, __FILE__, __LINE__)
 419  420  #define free(x)         Free(x, __FILE__, __LINE__)
 420  421  #define realloc(x, y)   Realloc(x, y, __FILE__, __LINE__)
 421  422  #else
 422  423  #define malloc(x)       Malloc(x, NULL, 0)
 423  424  #define calloc(x, y)    Calloc(x, y, NULL, 0)
 424  425  #define free(x)         Free(x, NULL, 0)
 425  426  #define realloc(x, y)   Realloc(x, y, NULL, 0)
 426  427  #endif
 427  428  
 428  429  #endif  /* STAND_H */
  
    | 
      ↓ open down ↓ | 
    31 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX