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

1.1       root        1: /*     tm.c    4.6     81/12/01        */
                      2: 
                      3: /*
                      4:  * TM11/TE??
                      5:  */
                      6: 
                      7: #include "../h/param.h"
                      8: #include "../h/inode.h"
                      9: #include "../h/pte.h"
                     10: #include "../h/ubareg.h"
                     11: #include "saio.h"
                     12: #include "savax.h"
                     13: 
                     14: #include "../h/tmreg.h"
                     15: 
                     16: u_short        tmstd[] = { 0172520 };
                     17: 
                     18: tmopen(io)
                     19:        register struct iob *io;
                     20: {
                     21:        register skip;
                     22: 
                     23:        tmstrategy(io, TM_REW);
                     24:        skip = io->i_boff;
                     25:        while (skip--) {
                     26:                io->i_cc = 0;
                     27:                tmstrategy(io, TM_SFORW);
                     28:        }
                     29: }
                     30: 
                     31: tmclose(io)
                     32:        register struct iob *io;
                     33: {
                     34: 
                     35:        tmstrategy(io, TM_REW);
                     36: }
                     37: 
                     38: tmstrategy(io, func)
                     39:        register struct iob *io;
                     40: {
                     41:        register int com, unit, errcnt;
                     42:        register struct tmdevice *tmaddr =
                     43:            (struct tmdevice *)ubamem(io->i_unit, tmstd[0]);
                     44:        int word, info;
                     45: 
                     46:        unit = io->i_unit;
                     47:        errcnt = 0;
                     48: retry:
                     49:        tmquiet(tmaddr);
                     50:        com = (unit<<8);
                     51:        info = ubasetup(io, 1);
                     52:        tmaddr->tmbc = -io->i_cc;
                     53:        tmaddr->tmba = info;
                     54:        if (func == READ)
                     55:                tmaddr->tmcs = com | TM_RCOM | TM_GO;
                     56:        else if (func == WRITE)
                     57:                tmaddr->tmcs = com | TM_WCOM | TM_GO;
                     58:        else if (func == TM_SREV) {
                     59:                tmaddr->tmbc = -1;
                     60:                tmaddr->tmcs = com | TM_SREV | TM_GO;
                     61:                return (0);
                     62:        } else
                     63:                tmaddr->tmcs = com | func | TM_GO;
                     64:        for (;;) {
                     65:                word = tmaddr->tmcs;
                     66:                if (word&TM_CUR)
                     67:                        break;
                     68:        }
                     69:        ubafree(io, info);
                     70:        word = tmaddr->tmer;
                     71:        if (word&TMER_EOT)
                     72:                return(0);
                     73:        if (word < 0) {
                     74:                if (errcnt == 0)
                     75:                        printf("te error: er=%b", tmaddr->tmer, TMER_BITS);
                     76:                if (errcnt==10) {
                     77:                        printf("\n");
                     78:                        return(-1);
                     79:                }
                     80:                errcnt++;
                     81:                tmstrategy(io, TM_SREV);
                     82:                goto retry;
                     83:        }
                     84:        if (errcnt)
                     85:                printf(" recovered by retry\n");
                     86:        return (io->i_cc+tmaddr->tmbc);
                     87: }
                     88: 
                     89: tmquiet(tmaddr)
                     90:        register struct tmdevice *tmaddr;
                     91: {
                     92:        register word;
                     93:        for (;;) {
                     94:                word = tmaddr->tmcs;
                     95:                if (word&TM_CUR)
                     96:                        break;
                     97:        }
                     98:        for (;;) {
                     99:                word = tmaddr->tmer;
                    100:                if ((word&TMER_TUR) && (word&TMER_SDWN)==0)
                    101:                        break;
                    102:        }
                    103: }

unix.superglobalmegacorp.com

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