Annotation of researchv9/sys.vax/h/ubareg.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * VAX UNIBUS adapter registers
                      3:  */
                      4: #ifndef LOCORE
                      5: /*
                      6:  * UBA hardware registers
                      7:  */
                      8: struct uba_regs
                      9: {
                     10:        int     uba_cnfgr;              /* configuration register */
                     11:        int     uba_cr;                 /* control register */
                     12:        int     uba_sr;                 /* status register */
                     13:        int     uba_dcr;                /* diagnostic control register */
                     14:        int     uba_fmer;               /* failed map entry register */
                     15:        int     uba_fubar;              /* failed UNIBUS address register */
                     16:        int     pad1[2];
                     17:        int     uba_brsvr[4];
                     18:        int     uba_brrvr[4];           /* receive vector registers */
                     19:        int     uba_dpr[16];            /* buffered data path register */
                     20:        int     pad2[480];
                     21:        struct  pte uba_map[496];       /* unibus map register */
                     22:        int     pad3[16];               /* no maps for device address space */
                     23: };
                     24: 
                     25: /*
                     26:  * MicroVAX-II local registers
                     27:  */
                     28: struct qb_regs
                     29: {
                     30:        u_short qb_bdr;                 /* boot and diag register       */
                     31:        u_short qb_pad1;
                     32:        u_long  qb_mser;                /* memory system error register */
                     33:        u_long  qb_caer;                /* cpu error address            */
                     34:        u_long  qb_daer;                /* dma error address            */
                     35:        u_long  qb_pad2[7676];
                     36:        union {
                     37:                struct {
                     38:                int qb_pad[512];
                     39:                struct pte qb_map[8192];/* q-bus map registers          */
                     40:                } qba; 
                     41:                struct uba_regs uba;
                     42:        } qb_uba;
                     43:        u_long  qb_pad3[40960];
                     44:                        /* time of year clock base address 200b 8000 */
                     45:        u_short qb_toysecs;             /* seconds                      */
                     46:        u_short qb_toysecs_alarm;       /* not used                     */
                     47:        u_short qb_toymins;             /* minutes                      */
                     48:        u_short qb_toymins_alarm;       /* not used                     */
                     49:        u_short qb_toyhours;            /* hours                        */
                     50:        u_short qb_toyhours_alarm;      /* not used                     */
                     51:        u_short qb_toyday_week;         /* not used                     */
                     52:        u_short qb_toyday;              /* day of month                 */
                     53:        u_short qb_toymonth;            /* month                        */
                     54:        u_short qb_toyyear;             /* year                         */
                     55:        u_short qb_toycsra;             /* csr                          */
                     56:        u_short qb_toycsrb;             /* csr                          */
                     57:        u_short qb_toycsrc;             /* csr                          */
                     58:        u_short qb_toycsrd;             /* csr                          */
                     59:        u_short qb_cpmbx;               /* console program mailbox      */
                     60:        u_short qb_toyram[49];          /* toy ram                      */
                     61: };
                     62: #endif
                     63: 
                     64: #ifdef MVAX
                     65: /* qb_mser */
                     66: #define        QBM_CD          0x300           /* memory error code    */
                     67: #define QBM_NXM                0x80            /* nonexistant memory   */
                     68: #define QBM_LPE                0x40            /* local memory parity  */
                     69: #define QBM_QPE                0x20            /* q-bus parity error   */
                     70: #define QBM_DMAQPE     0x10            /* dma q-bus parity     */
                     71: #define QBM_LEB                0x8             /* lost error bit       */
                     72: #define QBM_WRW                0x2             /* write wrong parity   */
                     73: #define QBM_PENB       0x1             /* parity enable        */
                     74: #define QBM_EMASK      0xf8            /* mask to isolate cause*/
                     75: 
                     76: /* toy csr */
                     77: #define QBT_UIP                0x80            /* update in progress   */
                     78: #define QBT_SETA       0x20            /* set up divider       */
                     79: #define        QBT_SETUP       0x80            /* stop                 */
                     80: #define QBT_SETB       0x6             /* binary and 24 hour   */
                     81: 
                     82: /*
                     83:  * Flags,boot options for MicroVAX-II console program
                     84:  */
                     85: #define RB_RESTART     0x21    /* Restart, english     */
                     86: #define RB_REBOOT      0x22    /* Reboot, english      */
                     87: #define RB_HALTMD      0x23    /* Halt, english        */
                     88: 
                     89: #endif MVAX
                     90: 
                     91: #if VAX780
                     92: /* uba_cnfgr */
                     93: #define        UBACNFGR_UBINIT 0x00040000      /* unibus init asserted */
                     94: #define        UBACNFGR_UBPDN  0x00020000      /* unibus power down */
                     95: #define        UBACNFGR_UBIC   0x00010000      /* unibus init complete */
                     96: 
                     97: /* uba_cr */
                     98: #define        UBACR_MRD16     0x40000000      /* map reg disable bit 4 */
                     99: #define        UBACR_MRD8      0x20000000      /* map reg disable bit 3 */
                    100: #define        UBACR_MRD4      0x10000000      /* map reg disable bit 2 */
                    101: #define        UBACR_MRD2      0x08000000      /* map reg disable bit 1 */
                    102: #define        UBACR_MRD1      0x04000000      /* map reg disable bit 0 */
                    103: #define        UBACR_IFS       0x00000040      /* interrupt field switch */
                    104: #define        UBACR_BRIE      0x00000020      /* BR interrupt enable */
                    105: #define        UBACR_USEFIE    0x00000010      /* UNIBUS to SBI error field IE */
                    106: #define        UBACR_SUEFIE    0x00000008      /* SBI to UNIBUS error field IE */
                    107: #define        UBACR_CNFIE     0x00000004      /* configuration IE */
                    108: #define        UBACR_UPF       0x00000002      /* UNIBUS power fail */
                    109: #define        UBACR_ADINIT    0x00000001      /* adapter init */
                    110: 
                    111: /* uba_sr */
                    112: #define        UBASR_BR7FULL   0x08000000      /* BR7 receive vector reg full */
                    113: #define        UBASR_BR6FULL   0x04000000      /* BR6 receive vector reg full */
                    114: #define        UBASR_BR5FULL   0x02000000      /* BR5 receive vector reg full */
                    115: #define        UBASR_BR4FULL   0x01000000      /* BR4 receive vector reg full */
                    116: #define        UBASR_RDTO      0x00000400      /* UNIBUS to SBI read data timeout */
                    117: #define        UBASR_RDS       0x00000200      /* read data substitute */
                    118: #define        UBASR_CRD       0x00000100      /* corrected read data */
                    119: #define        UBASR_CXTER     0x00000080      /* command transmit error */
                    120: #define        UBASR_CXTMO     0x00000040      /* command transmit timeout */
                    121: #define        UBASR_DPPE      0x00000020      /* data path parity error */
                    122: #define        UBASR_IVMR      0x00000010      /* invalid map register */
                    123: #define        UBASR_MRPF      0x00000008      /* map register parity failure */
                    124: #define        UBASR_LEB       0x00000004      /* lost error */
                    125: #define        UBASR_UBSTO     0x00000002      /* UNIBUS select timeout */
                    126: #define        UBASR_UBSSYNTO  0x00000001      /* UNIBUS slave sync timeout */
                    127: 
                    128: #define        UBASR_BITS \
                    129: "\20\13RDTO\12RDS\11CRD\10CXTER\7CXTMO\6DPPE\5IVMR\4MRPF\3LEB\2UBSTO\1UBSSYNTO"
                    130: 
                    131: /* uba_brrvr[] */
                    132: #define        UBABRRVR_AIRI   0x80000000      /* adapter interrupt request */
                    133: #define        UBABRRVR_DIV    0x0000ffff      /* device interrupt vector field */
                    134: #endif VAX780
                    135:  
                    136: /* uba_dpr */
                    137: #if VAX780
                    138: #define        UBADPR_BNE      0x80000000      /* buffer not empty - purge */
                    139: #define        UBADPR_BTE      0x40000000      /* buffer transfer error */
                    140: #define        UBADPR_DPF      0x20000000      /* DP function (RO) */
                    141: #define        UBADPR_BS       0x007f0000      /* buffer state field */
                    142: #define        UBADPR_BUBA     0x0000ffff      /* buffered UNIBUS address */
                    143: #define        UBA_PURGE780(uba, bdp) \
                    144:     ((uba)->uba_dpr[bdp] |= UBADPR_BNE)
                    145: #endif VAX780
                    146: #if VAX750
                    147: #define        UBADPR_ERROR    0x80000000      /* error occurred */
                    148: #define        UBADPR_NXM      0x40000000      /* nxm from memory */
                    149: #define        UBADPR_UCE      0x20000000      /* uncorrectable error */
                    150: #define        UBADPR_PURGE    0x00000001      /* purge bdp */
                    151: #define        UBA_PURGE750(uba, bdp) \
                    152:     ((uba)->uba_dpr[bdp] |= (UBADPR_PURGE|UBADPR_NXM|UBADPR_UCE))
                    153: #endif VAX750
                    154:  
                    155: /*
                    156:  * Macros for fast buffered data path purging in time-critical routines.
                    157:  *
                    158:  * Too bad C pre-processor doesn't have the power of LISP in macro
                    159:  * expansion...
                    160:  */
                    161: #if defined(VAX780) && defined(VAX750)
                    162: #define        UBAPURGE(uba, bdp) { \
                    163:        switch (cpu) { \
                    164:        case VAX_780: UBA_PURGE780((uba), (bdp)); break; \
                    165:        case VAX_750: UBA_PURGE750((uba), (bdp)); break; \
                    166:        } \
                    167: }
                    168: #endif
                    169: #if defined(VAX780) && !defined(VAX750)
                    170: #define        UBAPURGE(uba, bdp) { \
                    171:        if (cpu==VAX_780) { \
                    172:                UBA_PURGE780((uba), (bdp)); \
                    173:        } \
                    174: }
                    175: #endif
                    176: #if !defined(VAX780) && defined(VAX750)
                    177: #define        UBAPURGE(uba, bdp) { \
                    178:        if (cpu==VAX_750) { \
                    179:                UBA_PURGE750((uba), (bdp)); break; \
                    180:        } \
                    181: }
                    182: #endif
                    183: #if !defined(VAX780) && !defined(VAX750)
                    184: #define        IF_UBAPURGE(uba, bdp)
                    185: #endif
                    186: 
                    187: /* uba_mr[] */
                    188: #define        UBAMR_MRV       0x80000000      /* map register valid */
                    189: #define        UBAMR_BO        0x02000000      /* byte offset bit */
                    190: #define        UBAMR_DPDB      0x01e00000      /* data path designator field */
                    191: #define        UBAMR_SBIPFN    0x000fffff      /* SBI page address field */
                    192: 
                    193: #define        UBAMR_DPSHIFT   21              /* shift to data path designator */
                    194: 
                    195: /*
                    196:  * Number of UNIBUS map registers.  We can't use the last 8k of UNIBUS
                    197:  * address space for i/o transfers since it is used by the devices,
                    198:  * hence have slightly less than 256K of UNIBUS address space.
                    199:  * There are 8192 Q-BUS map registers. We use only NUBMREG because the
                    200:  * device drivers are based on 18-bit unibus addresses.
                    201:  */
                    202: #define        NUBMREG 496
                    203: 
                    204: /* All systems now have an 8k csr space. If this changes, put into percpu */
                    205: #define DEVSPACESIZE 8192
                    206: 
                    207: /*
                    208:  * Number of unibus buffered data paths and possible uba's per cpu type.
                    209:  */
                    210: #define        NBDP780 15
                    211: #define        NBDP750 3
                    212: #define        NBDP7ZZ 0
                    213: #define NBDPMVAX 0
                    214: #define        MAXNBDP 15
                    215: 
                    216: #define        NUBA780 4
                    217: #define        NUBA750 1
                    218: #define        NUBA7ZZ 1
                    219: #define NUBAMVAX 1
                    220: #if VAX780
                    221: #define        MAXNUBA 4
                    222: #else
                    223: #define        MAXNUBA 1
                    224: #endif
                    225: 
                    226: /*
                    227:  * Formulas for locations of the last 8k of UNIBUS memory
                    228:  * for each possible uba.
                    229:  */
                    230: #if VAX7ZZ
                    231: #define        UMEM7ZZ         ((u_short *)(0xffe000))
                    232: #endif
                    233: #if VAX750
                    234: #define        UMEM750(i)      ((u_short *)(0xffe000-(i)*0x40000))
                    235: #endif
                    236: #if VAX780
                    237: #define        UMEM780(i)      ((u_short *)(0x2013e000+(i)*0x40000))
                    238: #endif
                    239: #define        UMEMSIZE        512 * MAXNNEXUS
                    240:        
                    241: #if MVAX
                    242: /* MicroVAX-II adapters have noncontiguous memory and device csr space 
                    243:  *     QMEMMVAX is the adapter memory space
                    244:  *     QIOMVAX is the adapter i/o space
                    245:  */
                    246: #define QMEMMVAX       ((char *)(0x30000000))
                    247: #define QMEMSIZE       (512*8192)      /* 4 meg plus space for the csr's */
                    248: #define QIOMVAX                ((u_short *)(0x20000000))
                    249: #endif

unix.superglobalmegacorp.com

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