Annotation of 43BSDReno/sys/vaxmba/mbavar.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1982, 1986 Regents of the University of California.
        !             3:  * All rights reserved.  The Berkeley software License Agreement
        !             4:  * specifies the terms and conditions for redistribution.
        !             5:  *
        !             6:  *     @(#)mbavar.h    7.1 (Berkeley) 6/5/86
        !             7:  */
        !             8: 
        !             9: /*
        !            10:  * This file contains definitions related to the kernel structures
        !            11:  * for dealing with the massbus adapters.
        !            12:  *
        !            13:  * Each mba has a mba_hd structure.
        !            14:  * Each massbus device has a mba_device structure.
        !            15:  * Each massbus slave has a mba_slave structure.
        !            16:  *
        !            17:  * At boot time we prowl the structures and fill in the pointers
        !            18:  * for devices which we find.
        !            19:  */
        !            20: 
        !            21: /*
        !            22:  * Per-mba structure.
        !            23:  *
        !            24:  * The initialization routine uses the information in the mbdinit table
        !            25:  * to initialize the what is attached to each massbus slot information.
        !            26:  * It counts the number of devices on each mba (to see if bothering to
        !            27:  * search/seek is appropriate).
        !            28:  *
        !            29:  * During normal operation, the devices attached to the mba which wish
        !            30:  * to transfer are queued on the mh_act? links.
        !            31:  */
        !            32: struct mba_hd {
        !            33:        short   mh_active;              /* set if mba is active */
        !            34:        short   mh_ndrive;              /* number of devices, to avoid seeks */
        !            35:        struct  mba_regs *mh_mba;       /* virt addr of mba */
        !            36:        struct  mba_regs *mh_physmba;   /* phys addr of mba */
        !            37:        struct  mba_device *mh_mbip[8]; /* what is attached to each dev */
        !            38:        struct  mba_device *mh_actf;    /* head of queue to transfer */
        !            39:        struct  mba_device *mh_actl;    /* tail of queue to transfer */
        !            40: };
        !            41: 
        !            42: /*
        !            43:  * Per-device structure
        !            44:  * (one for each RM/RP disk, and one for each tape formatter).
        !            45:  *
        !            46:  * This structure is used by the device driver as its argument
        !            47:  * to the massbus driver, and by the massbus driver to locate
        !            48:  * the device driver for a particular massbus slot.
        !            49:  *
        !            50:  * The device drivers hang ready buffers on this structure,
        !            51:  * and the massbus driver will start i/o on the first such buffer
        !            52:  * when appropriate.
        !            53:  */
        !            54: struct mba_device {
        !            55:        struct  mba_driver *mi_driver;
        !            56:        short   mi_unit;        /* unit number to the system */
        !            57:        short   mi_mbanum;      /* the mba it is on */
        !            58:        short   mi_drive;       /* controller on mba */
        !            59:        short   mi_dk;          /* driver number for iostat */
        !            60:        short   mi_alive;       /* device exists */
        !            61:        short   mi_type;        /* driver specific unit type */
        !            62:        struct  buf mi_tab;     /* head of queue for this device */
        !            63:        struct  mba_device *mi_forw;
        !            64: /* we could compute these every time, but hereby save time */
        !            65:        struct  mba_regs *mi_mba;
        !            66:        struct  mba_drv *mi_drv;
        !            67:        struct  mba_hd *mi_hd;
        !            68: };
        !            69: 
        !            70: #define        b_bdone b_bufsize               /* redefinition for mi_tab XXX */
        !            71: 
        !            72: /*
        !            73:  * Tape formatter slaves are specified by
        !            74:  * the following information which is used
        !            75:  * at boot time to initialize the tape driver
        !            76:  * internal tables.
        !            77:  */
        !            78: struct mba_slave {
        !            79:        struct  mba_driver *ms_driver;
        !            80:        short   ms_ctlr;                /* which of several formatters */
        !            81:        short   ms_unit;                /* which unit to system */
        !            82:        short   ms_slave;               /* which slave to formatter */
        !            83:        short   ms_alive;
        !            84: };
        !            85: 
        !            86: /*
        !            87:  * Per device-type structure.
        !            88:  *
        !            89:  * Each massbus driver defines entries for a set of routines used
        !            90:  * by the massbus driver, as well as an array of types which are
        !            91:  * acceptable to it.
        !            92:  */
        !            93: struct mba_driver {
        !            94:        int     (*md_attach)();         /* attach a device */
        !            95:        int     (*md_slave)();          /* attach a slave */
        !            96:        int     (*md_ustart)();         /* unit start routine */
        !            97:        int     (*md_start)();          /* setup a data transfer */
        !            98:        int     (*md_dtint)();          /* data transfer complete */
        !            99:        int     (*md_ndint)();          /* non-data transfer interrupt */
        !           100:        short   *md_type;               /* array of drive type codes */
        !           101:        char    *md_dname, *md_sname;   /* device, slave names */
        !           102:        struct  mba_device **md_info;   /* backpointers to mbinit structs */
        !           103: };
        !           104: 
        !           105: /*
        !           106:  * Possible return values from unit start routines.
        !           107:  */
        !           108: #define        MBU_NEXT        0               /* skip to next operation */
        !           109: #define        MBU_BUSY        1               /* dual port busy; wait for intr */
        !           110: #define        MBU_STARTED     2               /* non-data transfer started */
        !           111: #define        MBU_DODATA      3               /* data transfer ready; start mba */
        !           112: 
        !           113: /*
        !           114:  * Possible return values from data transfer interrupt handling routines
        !           115:  */
        !           116: #define        MBD_DONE        0               /* data transfer complete */
        !           117: #define        MBD_RETRY       1               /* error occurred, please retry */
        !           118: #define        MBD_RESTARTED   2               /* driver restarted i/o itself */
        !           119: #define        MBD_REPOSITION  3               /* driver started unit, not transfer */
        !           120: 
        !           121: /*
        !           122:  * Possible return values from non-data-transfer interrupt handling routines
        !           123:  */
        !           124: #define        MBN_DONE        0               /* non-data transfer complete */
        !           125: #define        MBN_RETRY       1               /* failed; retry the operation */
        !           126: #define        MBN_SKIP        2               /* don't do anything */
        !           127: 
        !           128: /*
        !           129:  * Clear attention status for specified device.
        !           130:  */
        !           131: #define        mbclrattn(mi)   ((mi)->mi_mba->mba_drv[0].mbd_as = 1 << (mi)->mi_drive)
        !           132: 
        !           133: /*
        !           134:  * Kernel definitions related to mba.
        !           135:  */
        !           136: #ifdef KERNEL
        !           137: int    nummba;
        !           138: #if NMBA > 0
        !           139: struct mba_hd mba_hd[NMBA];
        !           140: extern Xmba0int(), Xmba1int(), Xmba2int(), Xmba3int();
        !           141: 
        !           142: extern struct  mba_device mbdinit[];
        !           143: extern struct  mba_slave mbsinit[];
        !           144: #endif
        !           145: #endif

unix.superglobalmegacorp.com

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