|
|
1.1 ! root 1: Documentation for libtboot.a. ! 2: ! 3: ! 4: ! 5: ! 6: ! 7: ! 8: ! 9: ! 10: ! 11: ! 12: ! 13: ! 14: ! 15: ! 16: ! 17: ! 18: ! 19: ! 20: ! 21: ! 22: ! 23: ! 24: ! 25: ! 26: ! 27: ! 28: ! 29: ! 30: Startup.s: .globl myds_ ! 31: Startup.s: .globl seconddat ! 32: Startup.s: .globl nbuf_ ! 33: Startup.s: .globl traks ! 34: Startup.s: .globl traks_ ! 35: Startup.s: .globl sects ! 36: Startup.s: .globl sects_ ! 37: Startup.s: .globl heads ! 38: Startup.s: .globl heads_ ! 39: Startup.s: .globl drive ! 40: Startup.s: .globl drive_ ! 41: Startup.s: .globl first ! 42: Startup.s: .globl first_ ! 43: BASE10 cbootlib.c 83 ! 44: BASE16 cbootlib.c 113 ! 45: BITS_PER_INT16 cbootlib.c 251 ! 46: BLOCK tboot.h 25 ! 47: BS cbootlib.c 26 ! 48: BUFSIZE tboot.h 55 ! 49: COFF_SYS_BASE tboot.h 63 ! 50: DEF_SYS_BASE tboot.h 64 ! 51: DEL cbootlib.c 27 ! 52: DIGITS_PER_INT16 cbootlib.c 252 ! 53: DIGITS_PER_INT8 cbootlib.c 253 ! 54: DISK tboot.h 56 ! 55: DISKINT tboot.h 32 ! 56: DISK_PARAMS tboot.h 33 ! 57: FALSE tboot.h 20 ! 58: FIRST tboot.h 59 ! 59: FOURK tboot.h 23 ! 60: FOURKBOUNDRY tboot.h 24 ! 61: FULLSEG tboot.h 60 ! 62: GIFTBOX gift.c 48 ! 63: GREATEST tboot.h 74 ! 64: HARD_DRIVE tboot.h 34 ! 65: HIGH tboot.h 76 ! 66: IBSHIFT tboot.h 52 ! 67: INODES_PER_BLOCK tboot.h 38 ! 68: INOMASK tboot.h 54 ! 69: INOORG tboot.h 51 ! 70: IOSHIFT tboot.h 53 ! 71: KEYBD tboot.h 57 ! 72: LESSER tboot.h 75 ! 73: LINESIZE tboot.h 26 ! 74: LOW tboot.h 77 ! 75: MAIN tboot.c 23 ! 76: MAXINT16 ptypes.h 16 ! 77: MAXINT32 ptypes.h 20 ! 78: MAXINT8 ptypes.h 12 ! 79: MAXSEG cbootlib.c 177 ! 80: MAXUINT16 ptypes.h 18 ! 81: MAXUINT32 ptypes.h 22 ! 82: MAXUINT8 ptypes.h 14 ! 83: MAX_SEGS tboot.h 27 ! 84: MIDNIGHT cbootlib.c 377 ! 85: Mcoff coff.c main() ! 86: Mobjects objects.c main() ! 87: NAK cbootlib.c 28 ! 88: NBUF bio.c 16 ! 89: NHD tboot.h 42 ! 90: NORMAL_MAGIC tboot.h 28 ! 91: NSPT tboot.h 46 ! 92: NTRK tboot.h 47 ! 93: NULL tboot.h 22 ! 94: PPMASK tboot.h 61 ! 95: PPSIZE cbootlib.c 178 ! 96: PROMPT monitor.c 15 ! 97: PTYPES_H ptypes.h 6 ! 98: READ1 tboot.h 58 ! 99: RESIZE typed.h 40 ! 100: RETYPE typed.h 42 ! 101: ROOTINO tboot.h 50 ! 102: SEVENONES indirect.c 139 ! 103: SIXBITS tboot.h 36 ! 104: SYS_START tboot.h 65 ! 105: THE_DEV tboot.h 67 ! 106: THE_XDEV tboot.h 68 ! 107: TIMER_OFF cbootlib.c 375 ! 108: TIMER_SEG cbootlib.c 374 ! 109: TRUE tboot.h 19 ! 110: TYPED_H typed.h 17 ! 111: TYPED_SPACE fifo_k.c TYPED_SPACE(global_space, 128, T_FIFO_SIC); Static In-Core Fifo. ! 112: TYPED_SPACE gift.c TYPED_SPACE(local_gift, GIFTBOX, T_FIFO_SIC); Static In-Core Fifo. ! 113: TYPED_SPACE tboot.c TYPED_SPACE(boot_gift, 8192, T_FIFO_SIC); Static In-Core FIFO. ! 114: TYPED_SPACE typed.h 32 ! 115: T_BIOS typed.h 63 ! 116: T_BIOS_DISK typed.h 64 ! 117: T_BIOS_ROOTDEV typed.h 65 ! 118: T_FIFO typed.h 56 ! 119: T_FIFO_DIC typed.h 58 ! 120: T_FIFO_DP typed.h 60 ! 121: T_FIFO_SIC typed.h 57 ! 122: T_FIFO_SP typed.h 59 ! 123: T_STR typed.h 68 ! 124: T_STR_ARGF typed.h 71 ! 125: T_STR_ARGV typed.h 69 ! 126: T_STR_STR typed.h 70 ! 127: T_UNKNOWN typed.h 53 ! 128: WAIT_DELAY tboot.h 71 ! 129: WS tboot.h 21 ! 130: ! 131: ! 132: ! 133: ! 134: ! 135: ! 136: ! 137: ! 138: ! 139: ! 140: ! 141: ! 142: ! 143: ! 144: ! 145: ! 146: ! 147: ! 148: ! 149: ! 150: ! 151: ! 152: ! 153: _bread_ bootlib.m ! 154: _ffcopy_ bootlib.m ! 155: _xbread_ bootlib.m ! 156: arg_exist arg_exist.c ! 157: * Determine whether or not a given argument exists on the command line ! 158: * passed into the kernel. ! 159: * ! 160: * Takes a pointer to a NUL terminated string that is the name of ! 161: * the desired argument. ! 162: int arg_exist(arg) ! 163: basetoi cbootlib.c uint16 basetoi(char *s, base) ! 164: uint16 basetoi(); Convert an arbitrary base string to an integer. ! 165: * basetoi(char *s, int base) ! 166: * Convert a string base "base" to an integer. ! 167: * Good through base 36. ! 168: * Loosely based on K&R's atoi(). ! 169: bclaim bio.c bclaim(block) ! 170: BUF *bclaim(); Claim a disk buffer. ! 171: bpick bio.c bpick() ! 172: BUF *bpick(); Pick a buffer to trash. ! 173: bread diskio.c bread(blockno) ! 174: /* Aligning bread. ! 175: * Reads 1 block into an arbitrary buffer. The assembly language ! 176: * routine bread() needs a buffer aligned on a 4K boundary. ! 177: */ ! 178: ! 179: BUF * ! 180: bread(blockno) ! 181: daddr_t blo ! 182: brelease bio.c brelease(bp) ! 183: void brelease(); Free a disk buffer. ! 184: bufinit bio.c bufinit() ! 185: void bufinit(); Initialize disk buffers. ! 186: close sys.c int close(int fd) ! 187: int close(); /* Close a file descriptor. */ ! 188: coff2load coff.c coff2load(ip, table, data_seg) ! 189: int ! 190: coff2load(ip, table, data_seg) ! 191: struct inode *ip; /* input: File to read. */ ! 192: struct load_segment table[]; /* output: How to read it. */ ! 193: uint16 *data_seg; /* output: Where to point es. */ ! 194: * Convert COFF to load table. ! 195: * Used to generate loading instructions for use by tboot main(). ! 196: * Returns true on successful translation. ! 197: coffnlist coff.c ! 198: Search COFF file for symbols. ! 199: int ! 200: coffnlist(fn, nlp, names, count) ! 201: char *fn; /* file name */ ! 202: SYMENT *nlp; /* names to look up */ ! 203: char *names; /* long names */ ! 204: int count; /* size of passed table */ ! 205: ! 206: dir builtin.c dir() ! 207: Create a listing of file names in /. ! 208: void dir() ! 209: dpb builtin.c dpb() ! 210: Display the BIOS parameters loaded up by the startup code. ! 211: void dpb() ! 212: dump_bios_disk gift.c dump_bios_disk(a_disk) ! 213: /* Dump a T_BIOS_DISK typed_space. */ ! 214: void ! 215: dump_bios_disk(a_disk) ! 216: BIOS_DISK *a_disk; ! 217: dump_fifo gift.c dump_fifo(fifo) ! 218: /* Dump the contents of a fifo. */ ! 219: void ! 220: dump_fifo(fifo) ! 221: typed_space *fifo; ! 222: dump_gift gift.c dump_gift() ! 223: /* Dump the contents of boot_gift. */ ! 224: void ! 225: dump_gift() ! 226: dump_rootdev gift.c dump_rootdev(a_rootdev) ! 227: /* Dump a T_BIOS_ROOTDEV typed_space. */ ! 228: void ! 229: dump_rootdev(a_rootdev) ! 230: BIOS_ROOTDEV *a_rootdev; ! 231: fdisk fdisk.c fdisk( fp ) ! 232: * void ! 233: * fdisk( fp ) -- Fixed Disk Configuration ! 234: * dev_t dev; ! 235: * struct fdisk_s *fp; ! 236: * Input: fp = pointer to memory-resident partition info (to update) ! 237: * ! 238: * Action: Read first block from the device. ! 239: * If valid signature present on block, ! 240: * copy partition information to memory ! 241: * ! 242: * Return: 1 = partition information successfully updated ! 243: * 0 = failure (could not read block, or bad signature) ! 244: ! 245: ffcopy cbootlib.c ffcopy(to_offset, to_seg, from_offset, from_seg, length) ! 246: * Wrapper for far-far copy. Changes the segment so that the requested ! 247: * length does not wrap past the end of the segment. ! 248: * ! 249: * For Intel 8086 Real Mode. ! 250: void ! 251: ffcopy(to_offset, to_seg, from_offset, from_seg, length) ! 252: uint16 to_offset; ! 253: uint16 to_seg; ! 254: uint16 from_offset; ! 255: uint16 from_seg; ! 256: uint16 length; ! 257: fifo_close fifo_k.c fifo_close(ffp) ! 258: int fifo_close(); Finish with using a typed space as a fifo. ! 259: fifo_len fifo_b.c fifo_len(ffp) ! 260: long fifo_len(); /* Find out how long a fifo is. */ ! 261: fifo_open fifo_k.c fifo_open(fifo_space, mode) ! 262: FIFO *fifo_open(); Open a typed space as a fifo. ! 263: fifo_read fifo_k.c fifo_read(ffp) ! 264: typed_space *fifo_read(); Read a typed space from a fifo. ! 265: fifo_rewind fifo_k.c fifo_rewind(ffp) ! 266: int fifo_rewind(); Go back to the start of the fifo. ! 267: fifo_write fifo_b.c fifo_write(ffp, space) ! 268: typed_space *fifo_write(); Write a typed space into an open fifo. ! 269: fifo_write_untyped fifo_b.c fifo_write_untyped(ffp, datum, size, type) ! 270: typed_space *fifo_write_untyped(); Write data into an open fifo. ! 271: getchar bootlib.m ! 272: gate_lock bio.c gate_lock(g) ! 273: int gate_lock(); Attempt to lock a GATE. ! 274: gate_locked bio.c gate_locked(g) ! 275: int gate_locked(); Check to see if a GATE is locked. ! 276: gate_unlock bio.c gate_unlock(g) ! 277: void gate_unlock(); Unlock a GATE. ! 278: get_num_of_drives builtin.c int get_num_of_drives() ! 279: /* Ask the BIOS how many drives are attached. */ ! 280: int get_num_of_drives() ! 281: gets cbootlib.c gets(s) ! 282: char *gets(); Get a string from the keyboard. ! 283: gift_argf gift.c gift_argf(ffp, cmd_line) ! 284: /* Write an argument fifo into ffp from the command line cmd_line. ! 285: * Returns 0 if it runs out of space, 1 on success, and 2 if something else ! 286: * goes wrong. ! 287: */ ! 288: int ! 289: gift_argf(ffp, cmd_line) ! 290: FIFO *ffp; ! 291: char *cmd_line; ! 292: gift_drive_params gift.c gift_drive_params(ffp) ! 293: /* Load the BIOS parameters loaded up by the startup code. */ ! 294: int ! 295: gift_drive_params(ffp) ! 296: FIFO *ffp; ! 297: gift_rootdev gift.c gift_rootdev(ffp) ! 298: /* Write a structure describing the boot partition into a fifo. ! 299: * Returns 1 on success, 0 if it runs out of space, or 2 if it ! 300: * can't read the boot block. ! 301: */ ! 302: int ! 303: gift_rootdev(ffp) ! 304: FIFO *ffp; ! 305: gotofar bootlib.m ! 306: gotoker bootlib.m ! 307: hdinit bootlib.m ! 308: ifread diskio.c ifread(ip, toseg, tooffset, offset, lenarg) ! 309: * Inode to Far READ: Load an arbitrary length from a file into a far address. ! 310: void ! 311: ifread(ip, toseg, tooffset, offset, lenarg) ! 312: struct inode *ip; /* Read from this file, */ ! 313: uint16 toseg; /* into this far buffer, */ ! 314: uint16 tooffset; ! 315: fsize_t offset; /* from here in the file, */ ! 316: fsize_t lenarg; /* for this many bytes. */ ! 317: ind_index indirect.c ind_index(ind_level, vblockno) ! 318: * uint16 ind_index(uint16 ind_level, daddr_t vblockno); ! 319: * Calculate the index needed for virtual block vblockno into ! 320: * a table of the given indirection level. ! 321: ind_lookup indirect.c ind_lookup(ind_level, ind_table, vblockno) ! 322: * Look up the next level of block in table ind_table, for virtual ! 323: * block number vblockno. ! 324: * Note that this table is in DISK CANNONICAL format. If the local ! 325: * notion of daddr_t is a different size from DISK CANONICAL daddr_t ! 326: daddr_t ! 327: ind_lookup(ind_level, ind_table, vblockno) ! 328: uint16 ind_level; ! 329: daddr_t *ind_table; ! 330: daddr_t vblockno; ! 331: indirect indirect.c indirect(ind_level, ind_table_ptr, vblockno) ! 332: * Recursively follow an indirection for a given virtual block number ! 333: * vblockno. ! 334: * ind_level must be the level of indirection still un-resolved. ! 335: * ind_table is the physical block number of the next indirection. ! 336: * daddr_t ! 337: * indirect(uint16 ind_level, daddr_t ind_table_ptr, daddr_t vblockno) ! 338: intcall intcall.m ! 339: int intcall(reg *srcreg, reg *destreg, int intnum); ! 340: Provide C interface to bios interrupts. ! 341: interpret builtin.c interpret(command) ! 342: * If possible, execute "command". ! 343: * Return "true" if the command exists, "false" otherwise. ! 344: int ! 345: interpret(command) ! 346: char *command; ! 347: intmon bootlib.m ! 348: iopen diskio.c iopen(meminode, inode_number) ! 349: * Inode OPEN: Load the inode for a file into memory. ! 350: * iopen(struct inode *ip, ! 351: * ino_t inode_number) ! 352: int ! 353: iopen(meminode, inode_number) ! 354: struct inode *meminode; ! 355: ino_t inode_number; ! 356: iread diskio.c iread(ip, buffer, offset, lenarg) ! 357: * Inode READ: Load a local buffer from a file. ! 358: void ! 359: iread(ip, buffer, offset, lenarg) ! 360: struct inode *ip; /* Read from this file, */ ! 361: char *buffer; /* into this buffer, */ ! 362: fsize_t offset; /* from here in the file, */ ! 363: uint16 lenarg; /* for this many bytes. */ ! 364: iskey bootlib.m ! 365: itoa cbootlib.c itoa(n, s) ! 366: void itoa(); Convert an integer to a decimal string. ! 367: itobase cbootlib.c itobase(n, s, base) ! 368: void itobase(); Convert an integer to an arbitrary base string. ! 369: l_out_nlist l.out.c l_out_nlist(fn, nlp) ! 370: * Get entries from l.out name list. ! 371: void ! 372: l_out_nlist(fn, nlp) ! 373: char *fn; ! 374: struct nlist *nlp; ! 375: lout2load l.out.c lout2load(ip, table, data_seg) ! 376: /* Convert l.out to load table. ! 377: * Used to generate loading instructions for use by tboot main(). ! 378: * Returns true on successful translation. ! 379: */ ! 380: ! 381: int ! 382: lout2load(ip, table, data_seg) ! 383: struct inode *ip; /* input: File to read. */ ! 384: struct load_segment table[]; /* output: How to read it. */ ! 385: uint16 *data_seg; /* output: Where to point es. */ ! 386: lpad cbootlib.c lpad(s, c, n) ! 387: char *lpad(); Pad a string on the left. ! 388: lseek sys.c lseek(fd, where, how) ! 389: /* Set a read/write position. ! 390: * Changes the seek position for file descriptor fd. ! 391: * where and how describe the new seek position. where gives the ! 392: * number of bytes that you wish to move the seek position; it is ! 393: * measured from the beginning of the file if how is zero, from the ! 394: * current seek position if how is one, or from the end of the file ! 395: * if how is two. A successful call to lseek returns the new seek ! 396: * position; a failure returns (int32) -1. ! 397: */ ! 398: long ! 399: lseek(fd, where, how) ! 400: int fd; ! 401: long where; ! 402: int how; ! 403: monitor monitor.c void monitor() ! 404: Mini-monitor for testing boot code. ! 405: namei diskio.c namei(filename) ! 406: * Convert a filename to an inode number. Returns inode number 0 on ! 407: * failure. ! 408: ino_t ! 409: namei(filename) ! 410: char *filename; ! 411: object2load objects.c object2load(magic, ip, table, data_seg) ! 412: /* Extract information from an object file that describes how to ! 413: * load an executable. ! 414: * The magic number of the file is in "magic". ! 415: * The object file's inode is in "ip". ! 416: * ! 417: * The information needed is extracted into "table". ! 418: * The value for the data segment is put in "data_seg". ! 419: * ! 420: * Returns TRUE if the needed information could be extracted, FALSE ow. ! 421: */ ! 422: ! 423: int ! 424: object2load(magic, ip, table, data_seg) ! 425: uint16 magic; ! 426: struct inode *ip; ! 427: struct load_segment table[]; ! 428: uint16 *data_seg; ! 429: object_nlist objects.c object_nlist(magic, filename, symbol) ! 430: /* Look up symbol(s) in an object file. ! 431: * searches the name list (symbol table) of the load module ! 432: * "filename" for each symbol in the array pointed to by "nlp". ! 433: * ! 434: * nlp points to an array of nlist structures, terminated by a ! 435: * structure with a null string as its n_name member. ! 436: * ! 437: * If "filename" is not a load module or has had its symbol table ! 438: * stripped, all returned n_type and n_value entries will be zero. ! 439: ! 440: uint16 ! 441: object_nlist(magic, filename, symbol) ! 442: uint16 magic; ! 443: char *filename; ! 444: char *symbol; ! 445: object_sys_base objects.c object_sys_base(magic) ! 446: /* Determine the value for sys_base based on the type of the load file. */ ! 447: uint16 ! 448: object_sys_base(magic) ! 449: int magic; ! 450: open sys.c open(file, type) ! 451: /* Open a file. ! 452: * Takes a file name, file; and a way of opening it, type as follows: ! 453: * 0 Read only ! 454: * 1 Write ! 455: * 2 Read and write ! 456: * Only read is implimented. ! 457: * ! 458: * Returns a file descriptor, or -1 if the open failed. ! 459: */ ! 460: int ! 461: open(file, type) ! 462: char *file; ! 463: int type; ! 464: print8 cbootlib.c print8(uint8 my_int) ! 465: void print8(); Print an 8 bit integer, base 16. ! 466: print16 cbootlib.c print16(uint16 my_int) ! 467: void print16(); Print a 16 bit integer, base 16. ! 468: print32 cbootlib.c print32(uint32 my_int) ! 469: void print32(); Print a 32 bit integer, base 16. ! 470: putchar bootlib.m ! 471: puts cbootlib.c puts(s) ! 472: void puts(); Put a string on the screen. ! 473: * puts() -- put a NUL terminated string. ! 474: * Takes one argument--a pointer to a NUL terminated character string. ! 475: * Does no error checking. Calls the assembly language routine putc(). ! 476: read sys.c read(fd, buffer, n) ! 477: * Read from a file. ! 478: * Takes a file descriptor, a buffer, and a length to read. ! 479: * ! 480: * Returns the number of characters read, or -1 if an error occurs. ! 481: int ! 482: read(fd, buffer, n) ! 483: int fd; ! 484: char *buffer; ! 485: int n; ! 486: reverse cbootlib.c reverse(s) ! 487: void reverse(); Reverse a string in place. ! 488: sanity_check bio.c sanity_check(message) ! 489: * Sanity checker. ! 490: * Prints contents of "message" if something is amiss and dumps you ! 491: * into the monitor. ! 492: * ! 493: * Add tests and messages as needed. ! 494: ! 495: void ! 496: sanity_check(message) ! 497: char *message; ! 498: seg_align cbootlib.c seg_align(offset, segment) ! 499: void seg_align(); Align a far address. ! 500: seginc cbootlib.c seginc(offset, segment, increment) ! 501: /* seginc(uint16 *offset, ! 502: * uint16 *segment, ! 503: * uint16 increment) ! 504: * Add an offset to a segment. We may adjust the segment base ! 505: * to make everything fit. ! 506: */ ! 507: vmap indirect.c vmap(ip, vblockno) ! 508: /* Convert the given virtual block to a physical block for the given inode. ! 509: * ip points to the in-core inode for a file. ! 510: * vblockno is a block number relative to the start of that file. ! 511: */ ! 512: daddr_t ! 513: vmap(ip, vblockno) ! 514: struct inode *ip; ! 515: daddr_t vblockno; ! 516: wait_for_keystroke cbootlib.c wait_for_keystroke(delay, key) ! 517: int wait_for_keystrok(); Wait a time delay for a keystroke. ! 518: wrap_coffnlist coff.c wrap_coffnlist(fn, symbol) ! 519: * Look up the value of a single data symbol in a coff file, ! 520: * relative to the start of the data segment. ! 521: * ! 522: * We use the symbol "sdata" to find the start of the data segment-- ! 523: * this works for 386 COHERENT kernels but will not work in general. ! 524: * It should really fetch the address of the start of the data segment ! 525: * from the data section header. ! 526: uint32 ! 527: wrap_coffnlist(fn, symbol) ! 528: char *fn; /* file name */ ! 529: char *symbol; /* symbol to look up */ ! 530: xbread diskio.c xbread(blockno) ! 531: * Aligning xbread. ! 532: * Disk addresses are relative to the start of the disk, rather than ! 533: * the start of the partition. ! 534: * Reads 1 block into an arbitrary buffer. The assembly language ! 535: * routine xbread() needs a buffer aligned on a 4K boundary. ! 536: BUF * ! 537: xbread(blockno) ! 538: daddr_t blockno; /* Block number. */ ! 539: * To pass a new data structure into the kernel: ! 540: * ! 541: * 1. Define your new data structure in typed.h. You will probably want ! 542: * to define some supporting routines for your data structure. These ! 543: * should go in a file by themselves. Be sure to add the file to the ! 544: * tboot Makefile. ! 545: * ! 546: * 2. Write a routine that takes at least an ffp, which will generate your ! 547: * data structure and write it into the ffp. The routine should return 0 ! 548: * if it ran out of space in the FIFO. Other return values are permissible, ! 549: * but ignored. Add arguments to prepare_gift() as needed. It is called ! 550: * only from the end of main() in tboot.c ! 551: * ! 552: * 3. Add a call to your routine to prepare_gift() in the section marked ! 553: * FILL THE BOX. This is an if statement with || seperated calls. The ! 554: * most important data structures should be called first, because later ! 555: * calls will be skipped if the FIFO fills. ! 556: * ! 557: * 4. In the kernel (probably in a driver) you will want to add a loop to ! 558: * look through the gift for your data structure: ! 559: * ! 560: * FIFO *ffp; ! 561: * typed_space *tp; ! 562: * ! 563: * ffp = fifo_open(&boot_gift, 0); -- Open gift for reading. ! 564: * ! 565: * if (F_NULL == ffp) { ! 566: * indicate_error("Could not open boot_gift."); ! 567: * } else { ! 568: * while (T_NULL != (tp = fifo_read(ffp))) { -- While not EOFIFO. ! 569: * if (T_MYTYPE == tp->ts_type) { -- Is this my type? ! 570: * my_handler(tp->ts_data); -- Process the data. ! 571: * } ! 572: * } ! 573: * } ! 574: * ! 575: * Be sure to include fifo_k.c and typed.h into your kernel. ! 576: ! 577: ! 578: gift_drive_params ! 579: ! 580: gift_argf ! 581: * To read gift_argf from bootgift, use the procedure outlined above in ! 582: * point 4 to find the entry marked T_STR_ARGF. You must then explicitly ! 583: * recast it with RETYPE(tp->ts_data, T_FIFO_SIC). Then you can open it ! 584: * as a FIFO, with code modeled on point 4 above. This scheme seemed ! 585: * the simplest for uniquely identifying the argument FIFO. ! 586: * Each element of the FIFO is a T_STR_STR, so ts_data for these is ! 587: * just a NUL terminated string. ! 588: ! 589: gift_rootdev ! 590: /* typed.h -- Data structures for an implimentation of internally ! 591: * typed data structures. ! 592: * ! 593: * This file has 5 major sections: ! 594: * TYPED_SPACE DECLARATIONS -- Declarations for typed_space in general. ! 595: * DATA TYPES -- Values for typed_space.ts_type. ! 596: * Make at least one entry here when you add new data types. ! 597: * STRUCTURE DECLARATIONS -- Declarations for specific typed spaces. ! 598: * Declare structures that describe the typed_space.ts_data element. ! 599: * FUNCTION DECLARATIONS -- Function names for specific typed spaces. ! 600: * Declare all the functions need to manipulate your data type. ! 601: * USEFUL SYMBOLS -- Symbols needed by specific typed spaces. ! 602: * Anything else you need to define should go here. ! 603: */ ! 604: ! 605: /* ! 606: * DATA TYPES: (values for ts_type in a typed_space) ! 607: * All data types start with "T_". ! 608: * Similar data types share a common prefix which is defined like this: ! 609: * #define T_COMMON (space_type)0xhh00 ! 610: * Specific types are then assigned sequentially from that: ! 611: * #define T_COMMON_SPECIFIC T_COMMON+n ! 612: */ ! 613: /* ! 614: * STRUCTURE DECLARATIONS. ! 615: * These define the typed_space.ts_data elements that go with the above ! 616: * data types. They should be typedef'd to a name derivable from the ! 617: * type name by removing the leading "T_" (see above.) ! 618: * ! 619: * E.g. For the type T_COMMON create this typedef: ! 620: * typedef common { ! 621: * ... ! 622: * } COMMON; ! 623: * ! 624: * If the specific types need their own structs do them like this: ! 625: * typedef common_specific { ! 626: * ... ! 627: * } COMMON_SPECIFIC; ! 628: * ! 629: */ ! 630: ! 631: /* USEFUL SYMBOLS. ! 632: * If appropriate, be sure to define a form of NULL for your new data ! 633: * type. E.g. for the type COMMON ! 634: * #define COMMON_NULL ((COMMON *) 0) ! 635: * ! 636: * If you need any other symbols define them here. ! 637: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.