|
|
1.1 root 1: /* Include file for tertiary boot programs.
2: *
3: * This is a real hodge-podge of symbols. If you are looking to improve
4: * code readability, start by hacking this file into many tiny pieces.
5: *
6: * La Monte H. Yarroll <[email protected]>, September 1991
7: */
8:
9: #ifndef TBOOT_H /* Rest of file. */
10: #define TBOOT_H
11:
12: #ifdef MAIN
13: #define EXTERN
14: #else
15: #define EXTERN extern
16: #endif
17:
18: #include <sys/types.h>
19: #include <sys/buf.h>
20: #include <sys/ptypes.h>
21:
22: #define TRUE (1==1)
23: #define FALSE (1==2)
24: #define WS " \t"
25: #define NULL ((char *)0)
26: #define FOURK 0x1000 /* 4k page. Needed for alignment purposes. */
27: #define FOURKBOUNDRY 0xf000
28: #define BLOCK 512 /* 512 bytes per disk block. */
29: #define LINESIZE 81 /* Size of typical line with NUL terminator. */
30: #define MAX_SEGS 8 /* Maximum number of executable file segs + 1. */
31: #define RBOOTS 0x8000 /* This constant is from Startup.s. It is the
32: * segment to which tboot relocates itself.
33: * Setting it in this file will only affect
34: * the check in seg_too_high().
35: */
36: #define NORMAL_MAGIC 0x10B /* Value of optional header magic
37: * for normal executable file.
38: */
39:
40: #define DISKINT 0x13 /* Disk drive interrupt. */
41: #define DISK_PARAMS (8 << 8) /* Return Disk Drive Parameters function. */
42: #define HARD_DRIVE 0x80 /* Select fixed disks. */
43:
44: #define SIXBITS 0x3f /* Lower six bits of a byte. */
45:
46: #define INODES_PER_BLOCK 8
47:
48:
49: #ifndef NHD
50: #define NHD 1 /* # of heads per drive [1 for f9d0]. */
51: #endif
52:
53: #ifndef NSPT
54: #define NSPT 9 /* # of sectors per track on floppy. */
55: #define NTRK 40 /* # of tracks on floppy. */
56: #endif
57:
58: #define ROOTINO 2 /* Root inode # */
59: #define INOORG 2 /* First inode block. */
60: #define IBSHIFT 3 /* Shift, inode to blocks */
61: #define IOSHIFT 6 /* Shift, inode to bytes */
62: #define INOMASK 0x0007 /* Mask, inode to offset */
63: #define BUFSIZE 512 /* Block size. */
64: #define DISK 0x13 /* Disk Interrupt */
65: #define KEYBD 0x16 /* Keyboard Interrupt */
66: #define READ1 0x0201 /* read one sector */
67: #define FIRST 8 /* Relative start of partition. */
68: #define FULLSEG 0xffff /* Size of a whole 8086 segment. */
69: #define PPMASK (unsigned short) 0xfff0 /* Mask for rounding to paragraph. */
70:
71: #define COFF_SYS_BASE 0x0200 /* System load base paragraph for 386. */
72: #define DEF_SYS_BASE 0x0060 /* System load base paragraph. */
73: #define SYS_START 0x0100 /* System entry point. */
74:
75: #define THE_DEV ((dev_t)0x01) /* The one disk device we recognize. */
76: #define THE_XDEV ((dev_t)0x02) /* The whole disk device, rather than partition. */
77:
78: /* WAIT_DELAY is how long to wait after finding autoboot before booting. */
79: #define WAIT_DELAY 91 /* 5 seconds * 18.2 clicks per second. */
80:
81: /* Maximum number of tokens on one command line. */
82: #define MAX_TOKENS 10
83:
84: /* Useful macros. */
85: #define GREATEST(a, b, c) (a > (b>c?b:c) ? a : (b>c?b:c))
86: #define LESSER(a, b) (a < b ? a : b)
87: #define HIGH(x) (x >> 8) /* High byte of 16 bit number. */
88: #define LOW(x) (x & 0xff) /* Low byte of 16 bit number. */
89: #define VERBOSE(c) if (verbose_flag) { c; }
90: /*
91: * Macros for evaluating return codes from get_cpu_type().
92: */
93: #define IS_PRE_AT(f) ((f)==0)
94: #define IS_I286(f) ((f)==1)
95: #define IS_I386(f) ((f)==2)
96:
97: /* Register structure used by call_bios(). */
98: struct reg {
99: unsigned r_ax;
100: unsigned r_bx;
101: unsigned r_cx;
102: unsigned r_dx;
103: unsigned r_si;
104: unsigned r_di;
105: unsigned r_ds;
106: unsigned r_es;
107: unsigned r_flags;
108: };
109:
110: /* Table entry describing a generic segment in an executable file. */
111: struct load_segment {
112: int valid; /* Is this a valid table entry? */
113: char *message; /* Message to print while loading. */
114: uint16 load_toseg; /* Where in memory to */
115: uint16 load_tooffset; /* load this segment. */
116: fsize_t load_offset; /* Where in file to get it. */
117: fsize_t load_length; /* How long it is. */
118: };
119:
120: extern int intcall(); /* Provide C interface to bios interrupts. */
121: /* int intcall(reg *srcreg, reg *destreg, int intnum); */
122: extern void puts(); /* Put a string on the screen. */
123: extern char *gets(); /* Get a string from the keyboard. */
124: extern void reverse(); /* Reverse a string in place. */
125: extern void itoa(); /* Convert an integer to a decimal string. */
126: extern void itobase(); /* Convert an integer to an arbitrary base string. */
127: extern uint16 basetoi(); /* Convert an arbitrary base string to an integer. */
128: extern daddr_t vmap(); /* Convert file block number to physical block number. */
129: extern char *lpad(); /* Pad a string on the left. */
130: extern uint16 object_nlist(); /* Look up a symbol in an object file. */
131: extern uint16 object_sys_base(); /* Generate a default sys_base. */
132: extern uint32 wrap_coffnlist(); /* Candy coated coff nlist(). */
133: extern int wait_for_keystrok(); /* Wait a time delay for a keystroke. */
134: extern BUF *bread(); /* Read a disk block. */
135: extern BUF *xbread(); /* Read a disk block rel. to the whole disk. */
136: extern BUF *bclaim(); /* Claim a disk buffer. */
137: extern BUF *bpick(); /* Pick a buffer to trash. */
138: extern void bufinit(); /* Initialize disk buffers. */
139: extern void brelease(); /* Free a disk buffer. */
140: extern int gate_lock(); /* Attempt to lock a GATE. */
141: extern int gate_locked(); /* Check to see if a GATE is locked. */
142: extern void gate_unlock(); /* Unlock a GATE. */
143: extern void print8(); /* Print an 8 bit integer, base 16. */
144: extern void print16(); /* Print a 16 bit integer, base 16. */
145: extern void print32(); /* Print a 32 bit integer, base 16. */
146: extern void sanity_check(); /* Check for insane conditions. */
147: extern void seg_align(); /* Align a far address. */
148: extern int coff2load(); /* Convert COFF to load table. */
149: extern int coffnlist(); /* Search COFF file for symbols. */
150: extern void dump_bios_disk(); /* Dump a T_BIOS_DISK typed space. */
151: extern void dump_fifo(); /* Dump a T_FIFO* typed space. */
152: extern void dump_gift(); /* Dump the boot_gift typed space. */
153: extern void dump_rootdev(); /* Dump a T_BIOS_ROOTDEV typed space. */
154: extern int gift_argf(); /* Prepare a command line gift. */
155: extern int gift_drive_params(); /* Prepare a drive description from the BIOS. */
156: extern int gift_rootdev(); /* Indentify the boot partition to the kernel. */
157: extern void seginc(); /* Add an offset to a segment. */
158: extern void ffcopy(); /* Copy from one far address to another. */
159: extern int read(); /* Read from a file descriptor. */
160: extern int open(); /* Open a file descriptor. */
161: extern long lseek(); /* Set a read/write position in a file. */
162: extern int close(); /* Close a file descriptor. */
163: extern int object2load(); /* Extract information to load an executable. */
164: extern void monitor(); /* Mini-monitor for testing boot code. */
165: extern int lout2load(); /* Convert l.out to load table. */
166: extern void l_out_nlist(); /* Get entries from l.out name list. */
167: extern int iopen(); /* Open an inode for a file. */
168: extern ino_t namei(); /* Convert from a name to an inode. */
169: extern void iread(); /* Read from a file, given an inode. */
170: extern void ifread(); /* Read from a file into a far buffer, given an inode. */
171: extern daddr_t indirect(); /* Follow a block indirection out. */
172: extern daddr_t ind_lookup(); /* Look up a block in an indirection table. */
173: extern uint16 ind_index(); /* Calculate index into an indirection table. */
174: extern int get_num_of_drives(); /* Ask the BIOS how many drives are attached. */
175: extern int interpret(); /* Attempt to execute a builtin command. */
176: extern void dpb(); /* Display parameters from bios. */
177: extern void dir(); /* List contents of /. */
178: extern int fdisk(); /* Read fixed disk configuration. */
179:
180: extern int errno; /* Error number for "system" calls. */
181: EXTERN uint16 sys_base; /* Segment into which to load the kernel. */
182: EXTERN int sys_base_set; /* Has sys_base been explicitly set? */
183: EXTERN int want_monitor; /* Should we invoke monitor before execution? */
184: EXTERN int verbose_flag; /* Be verbose? */
185: #endif /* TBOOT_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.