Annotation of xinu/sys/LSI/dsinit.c, revision 1.1.1.1

1.1       root        1: /* dsinit.c - dsinit */
                      2: 
                      3: #include <conf.h>
                      4: #include <kernel.h>
                      5: #include <disk.h>
                      6: 
                      7: #ifdef Ndsk
                      8: struct dsblk   dstab[Ndsk];
                      9: #endif
                     10: int    dskdbp, dskrbp;
                     11: 
                     12: /*------------------------------------------------------------------------
                     13:  *  dsinit  --  initialize disk drive device
                     14:  *------------------------------------------------------------------------
                     15:  */
                     16: dsinit(devptr)
                     17:        struct  devsw   *devptr;
                     18: {
                     19:        struct  dsblk   *dsptr;
                     20:        struct  dtc     *dtptr;
                     21:        int     status;
                     22:        char    ps;
                     23: 
                     24:        disable(ps);
                     25:        devptr->dvioblk = dsptr = &dstab[ devptr->dvminor ];
                     26:        dsptr->dcsr    = devptr->dvcsr;
                     27:        dsptr->dreqlst = DRNULL;
                     28:        dsptr->dnum    = devptr->dvnum;
                     29:        dsptr->dibsem  = screate(1);
                     30:        dsptr->dflsem  = screate(1);
                     31:        dsptr->ddirsem = screate(1);
                     32:        dsptr->dnfiles = 0;
                     33:        dsptr->ddir    = getbuf(dskdbp);
                     34:        iosetvec(devptr->dvnum, dsptr, dsptr);
                     35: 
                     36:        /* read directory block: setup read command then start interface */
                     37: 
                     38:        dsptr->ddcb.xop    = (char) XOREAD;
                     39:        dsptr->ddcb.xunit  = (char) 0;
                     40:        dsptr->ddcb.xcntl  = (char) XRETRY;
                     41:        dsptr->ddcb.xmaddr = (char) ((DIRBLK>>8)&(0377));
                     42:        dsptr->ddcb.xladdr = (char) (DIRBLK&0377);
                     43:        dsptr->ddcb.xcount = (char) 1;
                     44:        dtptr = dsptr->dcsr;
                     45:        dtptr->dt_dar   = dsptr->ddir;
                     46:        dtptr->dt_car   = &dsptr->ddcb;
                     47:        dtptr->dt_xdar  = dtptr->dt_xcar = NULL;
                     48:        dtptr->dt_csr   = DTGO;
                     49:        while ( ( (status=dtptr->dt_csr) & DTDONE) == 0)
                     50:                ;
                     51:        if (status & DTERROR)
                     52:                panic("Disk error");
                     53:        restore(ps);
                     54:        return(OK);
                     55: }

unix.superglobalmegacorp.com

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