Annotation of 40BSD/sys/stand/hk.c, revision 1.1.1.1

1.1       root        1: /*     hk.c    4.1     11/9/80 */
                      2: 
                      3: /*
                      4:  * RK7 disk driver, standalone version
                      5:  */
                      6: 
                      7: #include "../h/param.h"
                      8: #include "../h/inode.h"
                      9: #include "../h/pte.h"
                     10: #include "../h/uba.h"
                     11: #include "saio.h"
                     12: 
                     13: #define        RK7ADDR ((struct rk7_regs *)(PHYSUMEM - 0160000 + 0177440))
                     14: #define FORMAT_22 0
                     15: #define        RESET   0102000
                     16: #define        WCOM    022
                     17: #define        RCOM    020
                     18: #define RK07   02000
                     19: #define        GO      01
                     20: #define RELEASE        010
                     21: #define        CTLRDY  0200
                     22: #define        PACKAK  000003  /* Pack Acknowledge */
                     23: 
                     24: 
                     25: struct rk7_regs
                     26: {
                     27:        short rk7cs1;
                     28:        short rk7wc;
                     29:        unsigned short rk7ba;
                     30:        short rk7da;
                     31:        short rk7cs2;
                     32:        short rk7ds;
                     33:        short   rk7er;
                     34:        short rk7asof;
                     35:        short rk7dc;
                     36:        short rk7null;
                     37:        short rk7db;
                     38:        short rk7mr1;
                     39:        short rk7ecps;
                     40:        short rk7ecpt;
                     41:        short rk7mr2;
                     42:        short rk7mr3;
                     43: };
                     44: 
                     45: rk7strategy(io, func)
                     46: register struct iob *io;
                     47: {
                     48:        register short com;
                     49:        daddr_t bn;
                     50:        short dn, cn, sn, tn;
                     51:        int ubinfo;
                     52: 
                     53:        ubinfo = ubasetup( io, 1 );
                     54:        bn = io->i_bn;
                     55:        dn = io->i_unit;
                     56:        cn = bn/66;
                     57:        sn = bn%22;
                     58:        tn = (bn / 22) % 3;
                     59: 
                     60:        RK7ADDR -> rk7cs2 = dn;
                     61:        RK7ADDR -> rk7cs1 = PACKAK | RK07;
                     62:        while((com = RK7ADDR->rk7cs1) & 01);
                     63: 
                     64:        RK7ADDR -> rk7da = sn | (tn << 8);
                     65:        RK7ADDR -> rk7dc = cn;
                     66:        RK7ADDR->rk7ba = ubinfo;
                     67:        RK7ADDR->rk7wc = -(io->i_cc >> 1);
                     68: 
                     69:        com = ((ubinfo & 0x30000) >> 8 ) | RK07 | GO | ( FORMAT_22<< 12);
                     70:        if(func == READ)
                     71:                com |= RCOM; else
                     72:                com |= WCOM;
                     73:        RK7ADDR->rk7cs1 = com;
                     74: 
                     75:        while (((com = RK7ADDR->rk7cs1) & CTLRDY) == 0);
                     76:        while(RK7ADDR->rk7ds >= 0);
                     77: 
                     78:        ubafree (ubinfo);
                     79:        if (RK7ADDR->rk7cs1 < 0) {              /* error bit */
                     80:                printf ("RK07 error: unit %d, cyl %d, trk %d, sect %d, ",
                     81:                        io->i_unit, cn, tn, sn);
                     82:                printf ("cs1 %X, cs2 %X, err %X\n",
                     83:                        RK7ADDR->rk7cs1, RK7ADDR->rk7cs2, RK7ADDR->rk7er);
                     84: 
                     85:                RK7ADDR->rk7cs1 = RESET|GO;
                     86:                while(((com = RK7ADDR->rk7cs1)&CTLRDY) == 0);
                     87:                return (-1);
                     88:        }
                     89:        return (io->i_cc);
                     90: }

unix.superglobalmegacorp.com

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