The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/boot/boot.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      boot.h - Info between different parts of boot.  Author: Kees J. Bot
    2  */
    3 
    4 #ifndef DEBUG
    5 #define DEBUG 0
    6 #endif
    7 
    8 /* Constants describing the metal: */
    9 
   10 #define SECTOR_SIZE     512
   11 #define SECTOR_SHIFT    9
   12 #define RATIO(b)                ((b) / SECTOR_SIZE)
   13 
   14 #define PARAMSEC        1       /* Sector containing boot parameters. */
   15 
   16 #define DSKBASE         0x1E    /* Floppy disk parameter vector. */
   17 #define DSKPARSIZE      11      /* There are this many bytes of parameters. */
   18 
   19 #define ESC             '\33'   /* Escape key. */
   20 
   21 #define HEADERPOS      0x00600L /* Place for an array of struct exec's. */
   22 
   23 #define FREEPOS        0x08000L /* Memory from FREEPOS to caddr is free to
   24                                  * play with.
   25                                  */
   26 #if BIOS
   27 #define MSEC_PER_TICK     55    /* Clock does 18.2 ticks per second. */
   28 #define TICKS_PER_DAY 0x1800B0L /* After 24 hours it wraps. */
   29 #endif
   30 
   31 #if UNIX
   32 #define MSEC_PER_TICK   1000    /* Clock does 18.2 ticks per second. */
   33 #define TICKS_PER_DAY  86400L   /* Doesn't wrap, but that doesn't matter. */
   34 #endif
   35 
   36 #define BOOTPOS        0x07C00L /* Bootstraps are loaded here. */
   37 #define SIGNATURE       0xAA55  /* Proper bootstraps have this signature. */
   38 #define SIGNATOFF       510     /* Offset within bootblock. */
   39 
   40 /* BIOS video modes. */
   41 #define MONO_MODE       0x07    /* 80x25 monochrome. */
   42 #define COLOR_MODE      0x03    /* 80x25 color. */
   43 
   44 
   45 /* Variables shared with boothead.s: */
   46 #ifndef EXTERN
   47 #define EXTERN extern
   48 #endif
   49 
   50 typedef struct vector {         /* 8086 vector */
   51         u16_t   offset;
   52         u16_t   segment;
   53 } vector;
   54 
   55 EXTERN vector rem_part;         /* Boot partition table entry. */
   56 
   57 EXTERN u32_t caddr, daddr;      /* Code and data address of the boot program. */
   58 EXTERN u32_t runsize;           /* Size of this program. */
   59 
   60 EXTERN u16_t device;            /* Drive being booted from. */
   61 
   62 typedef struct {                /* One chunk of free memory. */
   63         u32_t   base;           /* Start byte. */
   64         u32_t   size;           /* Number of bytes. */
   65 } memory;
   66 
   67 EXTERN memory mem[3];           /* List of available memory. */
   68 EXTERN int mon_return;          /* Monitor stays in memory? */
   69 
   70 typedef struct bios_env
   71 {
   72         u16_t ax;
   73         u16_t bx;
   74         u16_t cx;
   75         u16_t flags;
   76 } bios_env_t;
   77 
   78 #define FL_CARRY        0x0001  /* carry flag */
   79 
   80 /* Functions defined by boothead.s: */
   81 
   82 void exit(int code);
   83                         /* Exit the monitor. */
   84 u32_t mon2abs(void *ptr);
   85                         /* Local monitor address to absolute address. */
   86 u32_t vec2abs(vector *vec);
   87                         /* Vector to absolute address. */
   88 void raw_copy(u32_t dstaddr, u32_t srcaddr, u32_t count);
   89                         /* Copy bytes from anywhere to anywhere. */
   90 u16_t get_word(u32_t addr);
   91                         /* Get a word from anywhere. */
   92 void put_word(u32_t addr, U16_t word);
   93                         /* Put a word anywhere. */
   94 void relocate(void);
   95                         /* Switch to a copy of this program. */
   96 int dev_open(void), dev_close(void);
   97                         /* Open device and determine params / close device. */
   98 int dev_boundary(u32_t sector);
   99                         /* True if sector is on a track boundary. */
  100 int readsectors(u32_t bufaddr, u32_t sector, U8_t count);
  101                         /* Read 1 or more sectors from "device". */
  102 int writesectors(u32_t bufaddr, u32_t sector, U8_t count);
  103                         /* Write 1 or more sectors to "device". */
  104 int getch(void);
  105                         /* Read a keypress. */
  106 void scan_keyboard(void);       
  107                         /* Read keypress directly from kb controller. */
  108 void ungetch(int c);
  109                         /* Undo a keypress. */
  110 int escape(void);
  111                         /* True if escape typed. */
  112 void putch(int c);
  113                         /* Send a character to the screen. */
  114 #if BIOS
  115 void pause(void);
  116                         /* Wait for an interrupt. */
  117 void serial_init(int line);
  118 #endif                  /* Enable copying console I/O to a serial line. */
  119 
  120 void set_mode(unsigned mode);
  121 void clear_screen(void);
  122                         /* Set video mode / clear the screen. */
  123 
  124 u16_t get_bus(void);
  125                         /* System bus type, XT, AT, or MCA. */
  126 u16_t get_video(void);
  127                         /* Display type, MDA to VGA. */
  128 u32_t get_tick(void);
  129                         /* Current value of the clock tick counter. */
  130 
  131 void bootstrap(int device, struct part_entry *entry);
  132                         /* Execute a bootstrap routine for a different O.S. */
  133 void minix(u32_t koff, u32_t kcs, u32_t kds,
  134                                 char *bootparams, size_t paramsize, u32_t aout);
  135                         /* Start Minix. */
  136 void int15(bios_env_t *);
  137 
  138 
  139 /* Shared between boot.c and bootimage.c: */
  140 
  141 /* Sticky attributes. */
  142 #define E_SPECIAL       0x01    /* These are known to the program. */
  143 #define E_DEV           0x02    /* The value is a device name. */
  144 #define E_RESERVED      0x04    /* May not be set by user, e.g. 'boot' */
  145 #define E_STICKY        0x07    /* Don't go once set. */
  146 
  147 /* Volatile attributes. */
  148 #define E_VAR           0x08    /* Variable */
  149 #define E_FUNCTION      0x10    /* Function definition. */
  150 
  151 /* Variables, functions, and commands. */
  152 typedef struct environment {
  153         struct environment *next;
  154         char    flags;
  155         char    *name;          /* name = value */
  156         char    *arg;           /* name(arg) {value} */
  157         char    *value;
  158         char    *defval;        /* Safehouse for default values. */
  159 } environment;
  160 
  161 EXTERN environment *env;        /* Lists the environment. */
  162 
  163 char *b_value(char *name);      /* Get/set the value of a variable. */
  164 int b_setvar(int flags, char *name, char *value);
  165 
  166 void parse_code(char *code);    /* Parse boot monitor commands. */
  167 
  168 extern int fsok;        /* True if the boot device contains an FS. */
  169 EXTERN u32_t lowsec;    /* Offset to the file system on the boot device. */
  170 
  171 /* Called by boot.c: */
  172 
  173 void bootminix(void);           /* Load and start a Minix image. */
  174 
  175 
  176 /* Called by bootimage.c: */
  177 
  178 void readerr(off_t sec, int err);
  179                         /* Report a read error. */
  180 char *ul2a(u32_t n, unsigned b), *ul2a10(u32_t n);
  181                         /* Transform u32_t to ASCII at base b or base 10. */
  182 long a2l(char *a);
  183                         /* Cheap atol(). */
  184 unsigned a2x(char *a);
  185                         /* ASCII to hex. */
  186 dev_t name2dev(char *name);
  187                         /* Translate a device name to a device number. */
  188 int numprefix(char *s, char **ps);
  189                         /* True for a numeric prefix. */
  190 int numeric(char *s);
  191                         /* True for a numeric string. */
  192 char *unix_err(int err);
  193                         /* Give a descriptive text for some UNIX errors. */
  194 int run_trailer(void);
  195                         /* Run the trailer function. */
  196 
  197 #if DOS
  198 /* The monitor runs under MS-DOS. */
  199 extern char PSP[256];   /* Program Segment Prefix. */
  200 EXTERN char *vdisk;     /* Name of the virtual disk. */
  201 EXTERN char *drun;      /* Initial command from DOS command line. */
  202 #else
  203 /* The monitor uses only the BIOS. */
  204 #define DOS     0
  205 #endif
  206 
  207 void readblock(off_t, char *, int);
  208 void delay(char *);
  209 
  210 /*
  211  * $PchId: boot.h,v 1.12 2002/02/27 19:42:45 philip Exp $
  212  */

Cache object: 723b133839a0b51d211014dedbb2b3ed


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.