add quad library (from Pace Willison)
[unix-history] / usr / src / sys / i386 / isa / if_ecreg.h
CommitLineData
38f295c1
KS
1/*
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 *
1aad5ac2 7 * @(#)if_ecreg.h 7.2 (Berkeley) %G%
38f295c1
KS
8 */
9/*
10 * Device definitions for the i82586 generally and the 3com ec507
11 * ISA bus ethernet controller.
12 */
13/*
14 * Intermediate System Control Block pointer
15 */
16struct ec_iscp {
17 u_short busy;
18 u_short scb_off;
19 caddr_t scb_base;
20};
21/*
22 * System Control Block
23 */
24struct ec_scb {
25 u_short status;
26#define CX 0x8000
27#define FR 0x4000
28#define CNA 0x2000
29#define RNR 0x1000
30#define CU_STATE 0x700
31#define CUS_IDLE 0x000
32#define CUS_SUSPENDED 0x100
33#define CUS_ACTIVE 0x200
34#define RU_STATE 0x70
35#define RUS_IDLE 0x00
36#define RUS_SUSPENDED 0x10
37#define RUS_OVERRUN 0x20
38#define RUS_READY 0x40
39 u_short command;
40#define CU_NOP 0
41#define CU_START 0x100
42#define RU_NOP 0
43#define RU_START 0x100
44#define RU_ABORT 0x400
45#define ACK_CX 0x8000
46#define ACK_RX 0x4000
47#define ACK_CNA 0x2000
48#define ACK_RNR 0x1000
49 u_short cbl_off;
50 u_short rfa_off;
51 struct errors {
52 u_short crc;
53 u_short alignment;
54 u_short resource;
55 u_short overrun;
56 } scb_errs;
57};
58
59/*
60 * Individual Address Setup
61 */
62struct ec_iasetup {
63 u_short com0;
64#define COM0_A 0x1000
65#define COM0_OK 0x2000
66#define COM0_B 0x4000
67#define COM0_C 0x8000
68 u_short com1;
69#define COM1_IASETUP 0x1
70#define COM1_I 0x2000
71#define COM1_S 0x4000
72#define COM1_EL 0x8000
73 u_short next_off;
74 u_char srcaddr[6];
75};
76
77/*
78 * Load Multicast Addresses
79 */
80
81struct ec_mcsetup {
82 u_short com0;
83 u_short com1;
84#define COM1_MCSETUP 0x3
85 u_short next_off;
86 u_short count; /* number of bytes, 14 bits only */
87 /* char mcaddrs[6]; /* white lie, data goes here */
88};
89
90/*
91 * Transmit Command
92 */
93struct ec_transmit {
94 u_short com0;
95#define COLLISIONS(p) (p->com0 & 0xf)
96#define EXCOL 0x10 /* Excessive Collisions, Aborted */
97#define HEARTBEAT 0x20 /* CDT signal monitored and OK (good) */
98#define TXDEFFERED 0x40 /* ``due to Previous Link Activity'' */
99#define DMALATE 0x80 /* DMA underrun */
100#define NOCTS 0x100 /* Transmission stopped due to ... */
101#define NOCARSENSE 0x200 /* Loss of Carrier sense during TX */
102#define LATECOLL 0x400 /* Late Collision detected */
103#define TXERRS 0x7d0 /* Various Bad Things */
104 u_short com1;
105#define COM1_TRANSMIT 0x4
106 u_short next_off;
107 u_short tbd_off;
108 u_char dstaddr[6];
109 u_short proto; /* Length for 802.3 */
110/*
111 * }; struct ec_tba {
112 *
113 * Transmit Buffer Descriptor
114 * This really should be a separate structure,
115 * but it will be convenient to lump them together.
116 */
117 u_short count;
118 u_short next_tbd_off;
119 caddr_t buffer;
120};
121
122/*
123 * Receive Frame Descriptor
124 */
125struct ec_rfd {
126 u_short rfd0;
127 u_short rfd1;
128 u_short next_off;
129 u_short rbd_off;
130 struct ether_header eh;
131 u_short mbz;
132/*
133 * }; struct ec_rbd {
134 *
135 * Receive Buffer Descriptor
136 */
137 u_short count;
138#define RBD_EOF 0x8000
139#define RBD_F 0x4000
140 u_short next_rbd_off;
141 caddr_t buffer;
142 u_short size;
143 u_short mbz2;
144};
145
146/*
147 * Set Operating Parameters
148 */
149struct ec_82586params {
150 u_char count;
151 u_char fifolimit;
152 u_char save_bad_frames;
153 u_char data1; /* addr len, no src ins, lpbk, prmble */
1aad5ac2 154 u_char priority;
38f295c1
KS
155 u_char ifspacing;
156 u_char mbz1;
157 u_char data2; /* max restries, slot time high */
158 u_char promisc; /* brddis, mnch/nrz, tnocr, crc16, bstf, pad */
159#define M_PROMISC 1
1aad5ac2 160#define M_TNOCR 8
38f295c1
KS
161 u_char cdf_cds; /* carrier detect/sense filter(length) & src */
162 u_char min_frame_len;
163 u_char mbz2[3];
164};
165
166struct ec_configure {
167 u_short com0;
168 u_short com1;
169#define COM1_CONFIGURE 0x2
170 u_short next_off;
171 struct ec_82586params modes;
172};
173#define ECMTU 1518
174#define ECMINSIZE 64
175#define NTXBUF 2
176#define NRXBUF 8
177
178struct ec_mem {
179 struct ec_iscp iscp;
180 struct ec_scb scb;
181 struct ec_transmit tcom[NTXBUF];
182 struct ec_rfd rcom[NRXBUF];
183 struct ec_configure config;
184 struct ec_iasetup iasetup;
185 struct ec_mcsetup mcsetup;
186 char txbuf[NTXBUF][ECMTU];
187 char rxbuf[NRXBUF][ECMTU];
188};
189
190struct ec_ports {
191 u_char data[6];
192 u_char creg;
193#define R_ECID 0x00
194#define R_ETHER 0x01
195#define R_REV 0x02
196#define R_IEN 0x04
197#define R_INT 0x08
198#define R_LAD 0x10
199#define R_LPB 0x20
200#define R_CA 0x40
201#define R_NORST 0x80
202 u_char mbz0[3];
203 u_char port_ic;
204 u_char port_ca;
205 u_char mbz1;
206 u_char rom_conf;
207 u_char ram_conf;
208 u_char int_conf;
209};