Annotation of 41BSD/4.0.upgrade/sys/stand/up.c, revision 1.1.1.1

1.1       root        1: /*     up.c    4.9     81/04/18        */
                      2: 
                      3: #include "../h/param.h"
                      4: #include "../h/inode.h"
                      5: #include "../h/upreg.h"
                      6: #include "../h/pte.h"
                      7: #include "../h/ubareg.h"
                      8: #include "saio.h"
                      9: #include "savax.h"
                     10: 
                     11: u_short        ubastd[] = { 0776700 };
                     12: char   up_gottype[MAXNUBA*8] = { 0 };
                     13: char   up_type[MAXNUBA*8] = { 0 };
                     14: short  up_off[] = { 0, 27, 68, -1, -1, -1, -1, 82 };
                     15: short  fj_off[] = { 0, 50, 0, -1, -1, -1, -1, 155 };
                     16: struct upst {
                     17:        short nsect;
                     18:        short ntrak;
                     19:        short nspc;
                     20:        short ncyl;
                     21:        short *off;
                     22: } upst[] = {
                     23:        32,     19,     32*19,  823,    up_off,
                     24:        32,     10,     32*10,  823,    fj_off,
                     25: };
                     26: 
                     27: upopen(io)
                     28:        register struct iob *io;
                     29: {
                     30:        register struct updevice *upaddr =
                     31:            (struct updevice *)ubamem(io->i_unit, ubastd[0]);
                     32:        register struct upst *st;
                     33: 
                     34:        while ((upaddr->upcs1 & UP_DVA) == 0)
                     35:                ;
                     36:        if (up_gottype[io->i_unit] == 0) {
                     37:                upaddr->uphr = UPHR_MAXTRAK;
                     38:                if (upaddr->uphr == 9)
                     39:                        up_type[io->i_unit] = 1;        /* fuji kludge */
                     40:                upaddr->upcs2 = UPCS2_CLR;
                     41:                up_gottype[io->i_unit] = 1;
                     42:        }
                     43:        st = &upst[up_type[io->i_unit]];
                     44:        if (io->i_boff < 0 || io->i_boff > 7 || st->off[io->i_boff] == -1)
                     45:                _stop("up bad unit");
                     46:        io->i_boff = st->off[io->i_boff] * st->nspc;
                     47: }
                     48: 
                     49: upstrategy(io, func)
                     50:        register struct iob *io;
                     51: {
                     52:        int unit, nspc, ns, cn, tn, sn;
                     53:        daddr_t bn;
                     54:        int info;
                     55:        register short *rp;
                     56:        register struct updevice *upaddr =
                     57:            (struct updevice *)ubamem(io->i_unit, ubastd[0]);
                     58:        register struct upst *st = &upst[up_type[io->i_unit]];
                     59: 
                     60:        unit = io->i_unit;
                     61:        bn = io->i_bn;
                     62:        cn = bn/st->nspc;
                     63:        sn = bn%st->nspc;
                     64:        tn = sn/st->nsect;
                     65:        sn = sn%st->nsect;
                     66:        upaddr->upcs2 = unit;
                     67:        if ((upaddr->upds & UPDS_VV) == 0) {
                     68:                upaddr->upcs1 = UP_DCLR|UP_GO;
                     69:                upaddr->upcs1 = UP_PRESET|UP_GO;
                     70:                upaddr->upof = UPOF_FMT22;
                     71:        }
                     72:        if ((upaddr->upds & UPDS_DREADY) != UPDS_DREADY)
                     73:                _stop("up not ready");
                     74:        info = ubasetup(io, 1);
                     75:        rp = (short *) &upaddr->upda;
                     76:        upaddr->updc = cn;
                     77:        *rp = (tn << 8) + sn;
                     78:        *--rp = info;
                     79:        *--rp = -io->i_cc / sizeof (short);
                     80:        if (func == READ)
                     81:                *--rp = UP_RCOM|UP_GO;
                     82:        else
                     83:                *--rp = UP_WCOM|UP_GO;
                     84:        do {
                     85:                DELAY(25);
                     86:        } while ((upaddr->upcs1 & UP_RDY) == 0);
                     87:        if (upaddr->upds & UPDS_ERR) {
                     88:                printf("up error: (cyl,trk,sec)=(%d,%d,%d) cs2=%b er1=%b er2=%b\n",
                     89:                    cn, tn, sn,
                     90:                    upaddr->upcs2, UPCS2_BITS, upaddr->uper1, UPER1_BITS,
                     91:                    upaddr->uper2, UPER2_BITS);
                     92:                return (-1);
                     93:        }
                     94:        ubafree(io, info);
                     95:        return (io->i_cc);
                     96: }

unix.superglobalmegacorp.com

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