|
|
1.1 root 1: /*
2: * Copyright (c) 1992 NeXT Computer, Inc.
3: *
4: * WD83C690 Network Interface Chip.
5: *
6: * HISTORY
7: *
8: * 25 July 1992
9: * Created.
10: */
11:
12: #import "SMC16Hdw.h"
13:
14: #define NIC_PAGE_SIZE 256
15:
16: /*
17: * NIC access inlines
18: */
19:
20: static __inline__
21: vm_offset_t
22: nic_page_addr(SMC16_off_t page, vm_offset_t base)
23: {
24: return (vm_offset_t)(base + (page * NIC_PAGE_SIZE));
25: }
26:
27: static __inline__
28: vm_offset_t
29: nic_page_round(SMC16_off_t addr)
30: {
31: return (vm_offset_t)(((vm_offset_t)(addr) + NIC_PAGE_SIZE - 1) &
32: ~(NIC_PAGE_SIZE - 1));
33: }
34:
35:
36:
37: /*
38: * Register definitions
39: */
40:
41: /*
42: * Command register.
43: */
44:
45: #define NIC_CMD_REG_OFF 0x00
46:
47: typedef struct {
48: unsigned char stp :1, /* stop device */
49: sta :1, /* start device */
50: txp :1, /* begin packet xmt */
51: :3,
52: psel :2; /* register page select */
53: } nic_cmd_reg_t;
54:
55: /*
56: * Interrupt status register.
57: */
58:
59: #define NIC_ISTAT_REG_OFF 0x07
60: #define NIC_ISTAT_REG_R_PG 0x00
61: #define NIC_ISTAT_REG_W_PG 0x00
62:
63: typedef struct {
64: unsigned char prx :1, /* packet recvd */
65: ptx :1, /* packet xmtd */
66: rxe :1, /* packet recvd w/error */
67: txe :1, /* packet xmt error */
68: ovw :1, /* recv ring overwrite warning */
69: cnt :1, /* counter overflow warning */
70: :1,
71: rst :1; /* device stopped */
72: } nic_istat_reg_t;
73:
74: /*
75: * Interrupt mask register.
76: */
77:
78: #define NIC_IMASK_REG_OFF 0x0f
79: #define NIC_IMASK_REG_R_PG 0x02
80: #define NIC_IMASK_REG_W_PG 0x00
81:
82: typedef struct {
83: unsigned char prxe :1, /* packet recvd enable */
84: ptxe :1, /* packet xmtd enable */
85: rxee :1, /* packet recvd w/error enable */
86: txee :1, /* packet xmt error enable */
87: ovwe :1, /* recv ring overwrite warning enb */
88: cnte :1, /* counter overflow waring enable */
89: :2;
90: } nic_imask_reg_t;
91:
92: /*
93: * Receive status register.
94: */
95:
96: #define NIC_RSTAT_REG_OFF 0x0C
97: #define NIC_RSTAT_REG_R_PG 0x00
98:
99: typedef struct {
100: unsigned char prx :1, /* packet recvd w/o error */
101: crc :1, /* packet recvd w/crc error */
102: fae :1, /* packet recvd w/framing error */
103: over :1, /* recv fifo overflow */
104: mpa :1, /* missed packet occurred */
105: group :1, /* packet recvd is bcast or mcast */
106: dis :1, /* receiver is in mon mode */
107: dfr :1; /* jabber condition on wire */
108: } nic_rstat_reg_t;
109:
110: /*
111: * Transmit status register.
112: */
113:
114: #define NIC_TSTAT_REG_OFF 0x04
115: #define NIC_TSTAT_REG_R_PG 0x00
116:
117: typedef struct {
118: unsigned char ptx :1, /* packet xmtd on wire */
119: ndt :1, /* packet xmtd w/o initial deferment */
120: twc :1, /* xmtd with collisions */
121: abort :1, /* not xmtd due to excess. coll. */
122: crl :1, /* packet xmtd but carrier was lost */
123: under :1, /* xmt fifo underrun */
124: cdh :1, /* heartbeat detected */
125: owc :1; /* out of win. collision occurred */
126: } nic_tstat_reg_t;
127:
128: /*
129: * 83690 features register
130: */
131:
132: #define NIC_ENH_REG_OFF 0x27
133: #define NIC_ENH_REG_R_PG 0x02
134: #define NIC_ENH_REG_W_PG 0x02
135:
136: typedef struct {
137: unsigned char :3,
138: slot :2, /* slot time */
139: #define NIC_SLOT_512_BIT 0
140: #define NIC_SLOT_256_BIT 2
141: #define NIC_SLOT_1024_BIT 3
142: :1,
143: wait :2; /* wait states inserted into DMA */
144: } nic_enh_reg_t;
145:
146:
147: /*
148: * Memory block register
149: */
150:
151: #define NIC_BLOCK_REG_OFF 0x06
152: #define NIC_BLOCK_REG_R_PG 0x02
153: #define NIC_BLOCK_REG_W_PG 0x02
154:
155: /*
156: * Receive boundary page register.
157: */
158:
159: #define NIC_BOUND_REG_OFF 0x03
160: #define NIC_BOUND_REG_R_PG 0x00
161: #define NIC_BOUND_REG_W_PG 0x00
162:
163: /*
164: * Receive current page register.
165: */
166:
167: #define NIC_CURR_REG_OFF 0x07
168: #define NIC_CURR_REG_R_PG 0x01
169: #define NIC_CURR_REG_W_PG 0x01
170:
171: /*
172: * Receive ring start page register.
173: */
174:
175: #define NIC_RSTART_REG_OFF 0x01
176: #define NIC_RSTART_REG_R_PG 0x02
177: #define NIC_RSTART_REG_W_PG 0x00
178:
179: /*
180: * Receive ring stop page register.
181: */
182:
183: #define NIC_RSTOP_REG_OFF 0x02
184: #define NIC_RSTOP_REG_R_PG 0x02
185: #define NIC_RSTOP_REG_W_PG 0x00
186:
187: /*
188: * Transmit start page register.
189: */
190:
191: #define NIC_TSTART_REG_OFF 0x04
192: #define NIC_TSTART_REG_R_PG 0x02
193: #define NIC_TSTART_REG_W_PG 0x00
194:
195: /*
196: * Transmit count registers.
197: */
198:
199: #define NIC_TCNTL_REG_OFF 0x05
200: #define NIC_TCNTH_REG_OFF 0x06
201: #define NIC_TCNT_REG_W_PG 0x00
202:
203: /*
204: * Station address registers.
205: */
206:
207: #define NIC_STA_REG_OFF 0x01
208: #define NIC_STA_REG_R_PG 0x01
209: #define NIC_STA_REG_W_PG 0x01
210:
211: /*
212: * Receive configuration register.
213: */
214:
215: #define NIC_RCON_REG_OFF 0x0c
216: #define NIC_RCON_REG_R_PG 0x02
217: #define NIC_RCON_REG_W_PG 0x00
218:
219: typedef struct {
220: unsigned char sep :1, /* save error packets */
221: runts :1, /* save runt packets */
222: broad :1, /* receive broadcast packets */
223: group :1, /* receive *all* multicast packets */
224: prom :1, /* receive all packets */
225: mon :1, /* monitor network */
226: :2;
227: } nic_rcon_reg_t;
228:
229: /*
230: * Transmit configuration register.
231: */
232:
233: #define NIC_TCON_REG_OFF 0x0d
234: #define NIC_TCON_REG_R_PG 0x02
235: #define NIC_TCON_REG_W_PG 0x00
236:
237: typedef struct {
238: unsigned char crcn :1, /* no CRC generation */
239: lb :2, /* loopback mode */
240: #define NIC_XMT_LOOPB_NONE 0
241: #define NIC_XMT_LOOPB_INTER 1
242: #define NIC_XMT_LOOPB_EXTER_HI 2
243: #define NIC_XMT_LOOPB_EXTER_LO 3
244: :5;
245: } nic_tcon_reg_t;
246:
247: /*
248: * Data configuration register.
249: */
250:
251: #define NIC_DCON_REG_OFF 0x0e
252: #define NIC_DCON_REG_R_PG 0x02
253: #define NIC_DCON_REG_W_PG 0x00
254:
255: typedef struct {
256: unsigned char bus16 :1, /* 16 bit DMA transfers */
257: :4,
258: bsize :2, /* DMA burst length */
259: #define NIC_DMA_BURST_2b 0
260: #define NIC_DMA_BURST_4b 1
261: #define NIC_DMA_BURST_8b 2
262: #define NIC_DMA_BURST_12b 3
263: :1;
264: } nic_dcon_reg_t;
265:
266: /*
267: * Counter registers.
268: */
269:
270: /* Receive alignment errors */
271: #define NIC_ALICNT_REG_OFF 0x0d
272: #define NIC_ALICNT_REG_R_PG 0x00
273:
274: /* Transmit collisions (last transmit) */
275: #define NIC_COLCNT_REG_OFF 0x05
276: #define NIC_COLCNT_REG_R_PG 0x00
277:
278: /* Receive CRC errors */
279: #define NIC_CRCCNT_REG_OFF 0x0e
280: #define NIC_CRCCNT_REG_R_PG 0x00
281:
282: /* Missed receive packets */
283: #define NIC_MPCNT_REG_OFF 0x0f
284: #define NIC_MPCNT_REG_R_PG 0x00
285:
286: /*
287: * Receive packet buffer header.
288: */
289:
290: typedef struct {
291: nic_rstat_reg_t rstat;
292: unsigned char next;
293: unsigned short len;
294: unsigned char data[0];
295: } nic_recv_hdr_t;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.