Commit | Line | Data |
---|---|---|
da7c5cc6 | 1 | /* |
0880b18e | 2 | * Copyright (c) 1982, 1986 Regents of the University of California. |
da7c5cc6 KM |
3 | * All rights reserved. The Berkeley software License Agreement |
4 | * specifies the terms and conditions for redistribution. | |
5 | * | |
0880b18e | 6 | * @(#)mbareg.h 7.1 (Berkeley) %G% |
da7c5cc6 | 7 | */ |
3ed87cd4 BJ |
8 | |
9 | /* | |
4df4b0ef | 10 | * VAX MASSBUS adapter registers |
3ed87cd4 BJ |
11 | */ |
12 | ||
97fedd9e | 13 | struct mba_regs |
4d9e9e73 | 14 | { |
97fedd9e BJ |
15 | int mba_csr; /* configuration register */ |
16 | int mba_cr; /* control register */ | |
17 | int mba_sr; /* status register */ | |
18 | int mba_var; /* virtual address register */ | |
19 | int mba_bcr; /* byte count register */ | |
20 | int mba_dr; | |
21 | int mba_pad1[250]; | |
22 | struct mba_drv { /* per drive registers */ | |
23 | int mbd_cs1; /* control status */ | |
24 | int mbd_ds; /* drive status */ | |
25 | int mbd_er1; /* error register */ | |
26 | int mbd_mr1; /* maintenance register */ | |
27 | int mbd_as; /* attention status */ | |
28 | int mbd_da; /* desired address (disks) */ | |
29 | #define mbd_fc mbd_da /* frame count (tapes) */ | |
30 | int mbd_dt; /* drive type */ | |
31 | int mbd_la; /* look ahead (disks) */ | |
32 | #define mbd_ck mbd_la /* ??? (tapes) */ | |
33 | int mbd_sn; /* serial number */ | |
34 | int mbd_of; /* ??? */ | |
35 | #define mbd_tc mbd_of /* ??? */ | |
36 | int mbd_fill[22]; | |
37 | } mba_drv[8]; | |
38 | struct pte mba_map[256]; /* io space virtual map */ | |
39 | int mba_pad2[256*5]; /* to size of a nexus */ | |
4d9e9e73 | 40 | }; |
97fedd9e BJ |
41 | |
42 | /* | |
43 | * Bits in mba_cr | |
44 | */ | |
a0eab615 BJ |
45 | #define MBCR_INIT 0x1 /* init mba */ |
46 | #define MBCR_IE 0x4 /* enable mba interrupts */ | |
97fedd9e | 47 | |
4d9e9e73 | 48 | /* |
97fedd9e BJ |
49 | * Bits in mba_sr |
50 | */ | |
a0eab615 BJ |
51 | #define MBSR_DTBUSY 0x80000000 /* data transfer busy */ |
52 | #define MBSR_NRCONF 0x40000000 /* no response confirmation */ | |
53 | #define MBSR_CRD 0x20000000 /* corrected read data */ | |
54 | #define MBSR_CBHUNG 0x00800000 /* control bus hung */ | |
55 | #define MBSR_PGE 0x00080000 /* programming error */ | |
56 | #define MBSR_NED 0x00040000 /* non-existant drive */ | |
57 | #define MBSR_MCPE 0x00020000 /* massbus control parity error */ | |
58 | #define MBSR_ATTN 0x00010000 /* attention from massbus */ | |
59 | #define MBSR_SPE 0x00004000 /* silo parity error */ | |
60 | #define MBSR_DTCMP 0x00002000 /* data transfer completed */ | |
61 | #define MBSR_DTABT 0x00001000 /* data transfer aborted */ | |
62 | #define MBSR_DLT 0x00000800 /* data late */ | |
63 | #define MBSR_WCKUP 0x00000400 /* write check upper */ | |
64 | #define MBSR_WCKLWR 0x00000200 /* write check lower */ | |
65 | #define MBSR_MXF 0x00000100 /* miss transfer error */ | |
66 | #define MBSR_MBEXC 0x00000080 /* massbus exception */ | |
67 | #define MBSR_MDPE 0x00000040 /* massbus data parity error */ | |
68 | #define MBSR_MAPPE 0x00000020 /* page frame map parity error */ | |
69 | #define MBSR_INVMAP 0x00000010 /* invalid map */ | |
70 | #define MBSR_ERRCONF 0x00000008 /* error confirmation */ | |
71 | #define MBSR_RDS 0x00000004 /* read data substitute */ | |
72 | #define MBSR_ISTIMO 0x00000002 /* interface sequence timeout */ | |
73 | #define MBSR_RDTIMO 0x00000001 /* read data timeout */ | |
97fedd9e | 74 | |
a0eab615 | 75 | #define MBSR_BITS \ |
4656c503 BJ |
76 | "\20\40DTBUSY\37NRCONF\36CRD\30CBHUNG\24PGE\23NED\22MCPE\21ATTN\ |
77 | \17SPE\16DTCMP\15DTABT\14DLT\13WCKUP\12WCKLWR\11MXF\10MBEXC\7MDPE\ | |
78 | \6MAPPE\5INVMAP\4ERRCONF\3RDS\2ISTIMO\1RDTIMO" | |
c4a6465b | 79 | |
a0eab615 | 80 | #define MBSR_HARD (MBSR_PGE|MBSR_ERRCONF|MBSR_ISTIMO|MBSR_RDTIMO) |
c4a6465b | 81 | |
a0eab615 | 82 | #define MBSR_EBITS (~(MBSR_DTBUSY|MBSR_CRD|MBSR_ATTN|MBSR_DTCMP)) |
c4a6465b | 83 | |
a0eab615 BJ |
84 | #ifdef KERNEL |
85 | extern char mbsr_bits[]; | |
86 | #endif | |
97fedd9e BJ |
87 | |
88 | /* | |
89 | * Commands for mbd_cs1 | |
90 | */ | |
a0eab615 BJ |
91 | #define MB_WCOM 0x30 |
92 | #define MB_RCOM 0x38 | |
93 | #define MB_GO 0x1 | |
97fedd9e BJ |
94 | |
95 | /* | |
96 | * Bits in mbd_ds. | |
97 | */ | |
a0eab615 BJ |
98 | #define MBDS_ERR 0x00004000 /* error in drive */ |
99 | #define MBDS_MOL 0x00001000 /* medium on line */ | |
100 | #define MBDS_DPR 0x00000100 /* drive present */ | |
101 | #define MBDS_DRY 0x00000080 /* drive ready */ | |
102 | ||
103 | #define MBDS_DREADY (MBDS_MOL|MBDS_DPR|MBDS_DRY) | |
97fedd9e BJ |
104 | |
105 | /* | |
106 | * Bits in mbd_dt | |
4d9e9e73 BJ |
107 | */ |
108 | #define MBDT_NSA 0x8000 /* not sector addressible */ | |
109 | #define MBDT_TAP 0x4000 /* is a tape */ | |
110 | #define MBDT_MOH 0x2000 /* moving head */ | |
111 | #define MBDT_7CH 0x1000 /* 7 channel */ | |
112 | #define MBDT_DRQ 0x800 /* drive request required */ | |
113 | #define MBDT_SPR 0x400 /* slave present */ | |
114 | ||
115 | #define MBDT_TYPE 0x1ff | |
116 | #define MBDT_MASK (MBDT_NSA|MBDT_TAP|MBDT_TYPE) | |
117 | ||
97fedd9e | 118 | /* type codes for disk drives */ |
4d9e9e73 BJ |
119 | #define MBDT_RP04 020 |
120 | #define MBDT_RP05 021 | |
121 | #define MBDT_RP06 022 | |
122 | #define MBDT_RP07 042 | |
fc7080e1 | 123 | #define MBDT_RM02 025 |
4d9e9e73 BJ |
124 | #define MBDT_RM03 024 |
125 | #define MBDT_RM05 027 | |
126 | #define MBDT_RM80 026 | |
fba186d2 BJ |
127 | #define MBDT_ML11A 0110 |
128 | #define MBDT_ML11B 0111 | |
4d9e9e73 | 129 | |
97fedd9e | 130 | /* type codes for tape drives */ |
4d9e9e73 BJ |
131 | #define MBDT_TM03 050 |
132 | #define MBDT_TE16 051 | |
133 | #define MBDT_TU45 052 | |
134 | #define MBDT_TU77 054 | |
fba186d2 | 135 | #define MBDT_TU78 0101 |