Annotation of 41BSD/sys/stand/hk.c, revision 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.