1 /*        $NetBSD: if_qtreg.h,v 1.6 2021/12/20 17:12:41 rhialto Exp $ */
2 /*
3  * Copyright (c) 1992 Steven M. Schultz
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. The name of the author may not be used to endorse or promote products
15  *    derived from this software without specific prior written permission
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  *        @(#)if_qtreg.h  1.0 (GTE) 10/12/92
29  */
30 /*
31  * Modification History
32  *  26 Feb 93 -- sms
33  *        Add defines for number of receive and transmit ring descriptors.
34  *
35  *  12 Oct 92 -- Steven M. Schultz (sms)
36  *        Created from the DELQA-PLUS Addendum to the DELQA User's Guide.
37 */
38 
39 #define QT_MAX_RCV  32
40 #define QT_MAX_XMT  12
41 
42 /* Receive ring descriptor and bit/field definitions */
43 
44           struct    qt_rring
45                     {
46                     short     rmd0;
47                     short     rmd1;
48                     short     rmd2;
49                     short     rmd3;
50                     short     rmd4;
51                     short     rmd5;
52 #ifdef pdp11
53                     struct    qt_uba    *rhost0;
54                     short     rhost1;
55 #else
56                     short     pad1, pad2;
57 #endif
58                     };
59 
60 #define   RMD0_ERR3 0x4000              /* Error summary. FRA|CRC|OFL|BUF */
61 #define   RMD0_FRA  0x2000              /* Framing error */
62 #define   RMD0_OFL  0x1000              /* Overflow error.  Oversized packet */
63 #define   RMD0_CRC  0x0800              /* CRC error */
64 #define   RMD0_BUF  0x0400              /* Internal device buffer error */
65 #define   RMD0_STP  0x0200              /* Start of packet */
66 #define   RMD0_ENP  0x0100              /* End of packet */
67 
68 #define   RMD1_MCNT 0x0fff              /* Message byte count */
69 
70 #define   RMD2_ERR4 0x8000              /* Error summary.  BBL|CER|MIS */
71 #define   RMD2_BBL  0x4000              /* Babble error on transmit */
72 #define   RMD2_CER  0x2000              /* Collision error on transmit */
73 #define   RMD2_MIS  0x1000              /* Packet lost on receive */
74 #define   RMD2_EOR  0x0800              /* End of receive ring */
75 #define   RMD2_RON  0x0020              /* Receiver on */
76 #define   RMD2_TON  0x0010              /* Transmitter on */
77 
78 #define   RMD3_OWN  0x8000              /* Ownership field. */
79 
80 #define   RMD4_LADR 0xfff8              /* Octabyte aligned low address bits */
81 
82 #define   RMD5_HADR 0x003f              /* High 6 bits of buffer address */
83 
84 #define   RMD0_BITS "\010\016FRA\015OFL\014CRC\013BUF\012STP\011ENP"
85 #define   RMD2_BITS "\010\017BBL\014CER\013MIS\012EOR\06RON\05TON"
86 
87 /* Transmit ring descriptor and bit/field definitions */
88 
89           struct    qt_tring
90                     {
91                     short     tmd0;
92                     short     tmd1;
93                     short     tmd2;
94                     short     tmd3;
95                     short     tmd4;
96                     short     tmd5;
97 #ifdef pdp11
98                     struct    qt_uba    *thost0;
99                     short     thost1;
100 #else
101                     short     pad1, pad2;
102 #endif
103                     };
104 
105 #define   TMD0_ERR1 0x4000              /* Error summary.  LCO|LCA|RTR */
106 #define   TMD0_MOR  0x1000              /* More than one retry on transmit */
107 #define   TMD0_ONE  0x0800              /* One retry on transmit */
108 #define   TMD0_DEF  0x0400              /* Deferral during transmit */
109 
110 #define   TMD1_LCO  0x1000              /* Late collision on transmit */
111 #define   TMD1_LCA  0x0800              /* Loss of carrier on transmit */
112 #define   TMD1_RTR  0x0400              /* Retry error on transmit */
113 #define   TMD1_TDR  0x03ff              /* Time Domain Reflectometry value */
114 
115 #define   TMD2_ERR2 0x8000              /* Error summary.  BBL|CER|MIS */
116 #define   TMD2_BBL  0x4000              /* Babble error on transmit */
117 #define   TMD2_CER  0x2000              /* Collision error on transmit */
118 #define   TMD2_MIS  0x1000              /* Packet lost on receive */
119 #define   TMD2_EOR  0x0800              /* Endof Receive ring reached */
120 #define   TMD2_RON  0x0020              /* Receiver on */
121 #define   TMD2_TON  0x0010              /* Transmitter on */
122 
123 #define   TMD3_OWN  0x8000              /* Ownership field */
124 #define   TMD3_FOT  0x4000              /* First of two flag */
125 #define   TMD3_BCT  0x0fff              /* Byte count */
126 
127 #define   TMD4_LADR 0xfff8              /* Octabyte aligned low address bits */
128 
129 #define   TMD5_HADR 0x003f              /* High 6 bits of buffer address */
130 
131 #define   TMD1_BITS "\010\015LCO\014LCA\013RTR"
132 #define   TMD2_BITS "\010\017BBL\016CER\015MIS\014EOR\06RON\05TON"
133 
134 /* DELQA-YM CSR layout */
135 
136 #ifdef notdef
137           struct    qtcsr0
138                     {
139                     short     Ibal;
140                     short     Ibah;
141                     short     Icr;
142                     short     pad0;
143                     short     Srqr;
144                     short     pad1;
145                     };
146 
147           struct    qtdevice
148                     {
149                     union     {
150                               u_char    Sarom[12];
151                               struct    qtcsr0    csr0;
152                               } qt_un0;
153                     short     srr;
154                     short     arqr;
155                     };
156 
157 #define   ibal      qt_un0.csr0.Ibal
158 #define   ibah      qt_un0.csr0.Ibah
159 #define   srqr      qt_un0.csr0.Srqr
160 #define   icr       qt_un0.csr0.Icr
161 #define   sarom     qt_un0.Sarom
162 #endif
163 
164 #define   CSR_IBAL  0
165 #define   CSR_IBAH  2
166 #define   CSR_ICR             4
167 #define   CSR_SRQR  8
168 #define   CSR_SRR             12
169 #define   CSR_ARQR  14
170 
171 
172 /* SRR definitions */
173 
174 #define   SRR_FES             0x8000
175 #define   SRR_CHN             0x4000
176 #define   SRR_NXM             0x1000
177 #define   SRR_PER             0x0800
178 #define   SRR_IME             0x0400
179 #define   SRR_TBL             0x0200
180 #define   SRR_RESP  0x0003
181 #define   SRR_BITS  "\010\017CHN\015NXM\014PER\013IME\012TBL"
182 
183 /* SRQR definitions */
184 
185 #define   SRQR_REQ  0x0003
186 
187 /* ARQR definitions */
188 
189 #define   ARQR_TRQ  0x8000
190 #define   ARQR_RRQ  0x0080
191 #define   ARQR_SR             0x0002
192 
193 /* define ICR definitions */
194 
195 #define   ICR_CMD             0x0001
196 
197 /* DELQA registers used to shift into -T mode */
198 
199 #ifdef notdef
200 #define   xcr0      qt_un0.csr0.Ibal
201 #define   xcr1      qt_un0.csr0.Ibah
202 #endif
203 #define   CSR_XCR0  CSR_IBAL
204 #define   CSR_XCR1  CSR_IBAH
205 
206 /* INIT block structure and definitions */
207 
208           struct    qt_init
209                     {
210                     int16_t             mode;
211                     u_char              paddr[6]; /* 48 bit physical address */
212                     uint16_t  laddr[4]; /* 64 bit logical address filter */
213                     uint16_t  rx_lo;              /* low 16 bits of receive ring addr */
214                     uint16_t  rx_hi;              /* high 6 bits of receive ring addr */
215                     uint16_t  tx_lo;              /* low 16 bits of transmit ring addr */
216                     uint16_t  tx_hi;              /* high 6 bits of transmit ring addr */
217                     uint16_t  options;
218                     uint16_t  vector;
219                     uint16_t  hit;
220                     char                passwd[6];
221                     char                pad[4];             /* even on 40 byte for alignment */
222                     };
223 
224 #define   INIT_MODE_PRO       0x8000              /* Promiscuous mode */
225 #define   INIT_MODE_INT       0x0040              /* Internal Loopback */
226 #define   INIT_MODE_DRT       0x0020              /* Disable Retry */
227 #define   INIT_MODE_DTC       0x0008              /* Disable Transmit CRC */
228 #define   INIT_MODE_LOP       0x0004              /* Loopback */
229 
230 #define   INIT_OPTIONS_HIT 0x0002                 /* Host Inactivity Timeout Flag */
231 #define   INIT_OPTIONS_INT 0x0001                 /* Interrupt Enable Flag */
232