Annotation of coherent/d/conf/old_tboot/DOCS, revision 1.1.1.1

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:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.