summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/ppcn_60x/network/amd79c970.h
blob: 8f81ebf568cd6e5615e5dd639f6d3f3a6df9d02c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
/*
 *  COPYRIGHT (c) 1998 by Radstone Technology
 *
 *
 * THIS FILE IS PROVIDED TO YOU, THE USER, "AS IS", WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK
 * AS TO THE QUALITY AND PERFORMANCE OF ALL CODE IN THIS FILE IS WITH YOU.
 *
 * You are hereby granted permission to use, copy, modify, and distribute
 * this file, provided that this notice, plus the above copyright notice
 * and disclaimer, appears in all copies. Radstone Technology will provide
 * no support for this code.
 *
 */
#ifndef _PCNET_H
#define _PCNET_H

/*
 * IO space structure for the AMD79C970 device
 */

typedef volatile struct pc_net
{
	union
	{
		struct {
			uint16_t  	aprom[8];  /* 0x00 */
			uint16_t  	rdp;	   /* 0x10 */
			uint16_t  	rap;	   /* 0x14 */
			uint16_t  	reset;	   /* 0x18 */
			uint16_t  	bdp;	   /* 0x1C */
		} wio;
		struct {
			uint32_t  	aprom[4];  /* 0x00 */
			uint32_t  	rdp;	   /* 0x10 */
			uint32_t  	rap;	   /* 0x12 */
			uint32_t  	reset;	   /* 0x14 */
			uint32_t  	bdp;	   /* 0x16 */
		} dwio;
	} u;
} pc_net_t;

/*
 * The EEPROM is 2Kbit (128bytes)
 */
#define EEPROM_SIZE 128
#define EEPROM_HEAD_SIZE 36

typedef struct pc_net_eeprom {
	uint8_t  	EthNumber[6];
	uint16_t  	Reserved1;	/* Must be 0x0000 */
	uint16_t  	Reserved2;	/* Must be 0x1000 */
	uint16_t  	User1;
	uint16_t  	checksum;
	uint16_t  	Reserved3;	/* Must be 0x5757 */
	uint16_t  	bcr16;
	uint16_t  	bcr17;
	uint16_t  	bcr18;
	uint16_t  	bcr2;
	uint16_t  	bcr21;
	uint16_t  	Reserved4;	/* Must be 0x0000 */
	uint16_t  	Reserved5;	/* Must be 0x0000 */
	uint8_t  	Reserved6;	/* Must be 0x00 */
	uint8_t  	checksumAdjust;
	uint16_t  	Reserved7;	/* Must be 0x0000 */
	uint16_t  	crc;		/* CCITT checksum from Serial[] onwards */
	uint8_t  	Serial[16];	/* Radstone Serial Number */
} pc_net_eeprom_t;

/*
 * PCnet-PCI Single Chip Ethernet Controller for PCI Local Bus
 */
/*
 * Register and bit definitions
 */

#define	CSR0	0
#define	CSR1	1
#define	CSR2	2
#define	CSR3	3
#define	CSR4	4
#define	CSR5	5
#define	CSR6	6
#define	CSR7	7
#define	CSR8	8
#define	CSR9	9
#define	CSR15	15
#define	CSR47	47
#define	CSR82	82	/* Bus Activity Timer */
#define	CSR100	100	/* Memory Error Timeout register */
#define	CSR114	114
#define	CSR122	122	/* Receiver Packet Alignment Register */

#define	BCR2	2	/* Misc. Configuration */
#define	BCR18	18	/* Bus size and burst control */
#define DEFAULT_BCR18 0x2162 /* default BCR18 value - was 0x21e2*/
#define	BCR19	19
#define	BCR20	20	/* Software Style */
#define	BCR21	21

#define	APROM0	0x00
#define	APROM1	0x04
#define	APROM2	0x08

/*
 * CSR0: Bit definitions
 */
#define CSR0_ERR	0x8000	/* error summary */
#define CSR0_BABL	0x4000	/* babble error */
#define CSR0_CERR	0x2000	/* collision error */
#define CSR0_MISS	0x1000	/* missed packet */
#define CSR0_MERR	0x0800	/* memory error */
#define CSR0_RINT	0x0400	/* receiver interrupt */
#define CSR0_TINT	0x0200	/* transmitter interrupt */
#define CSR0_IDON	0x0100	/* initialization done */
#define CSR0_INTR	0x0080	/* interrupt flag */
#define CSR0_IENA	0x0040	/* interrupt enable */
#define CSR0_RXON	0x0020	/* receiver on */
#define CSR0_TXON	0x0010	/* transmitter on */
#define CSR0_TDMD	0x0008	/* transmit demand */
#define CSR0_STOP	0x0004	/* stop the ilacc */
#define CSR0_STRT	0x0002	/* start the ilacc */
#define CSR0_INIT	0x0001	/* initialize the ilacc */

#define CSR3_BABLM	0x4000	/* BABL Mask */
#define CSR3_MISSM	0x1000	/* Missed packet Mask */
#define CSR3_MERRM	0x0800	/* Memory error Mask */
#define CSR3_RINTM	0x0400	/* Receive Interrupt Mask */
#define CSR3_TINTM	0x0200	/* Transmit Interrupt Mask */
#define CSR3_IDONM	0x0100	/* Initialization Done Mask */
#define CSR3_DXSUFLO	0x0040	/* Disable tx stop on underrun */
#define CSR3_LAPPEN	0x0020	/* lookahead packet proc enable */
#define CSR3_DXMT2PD	0x0010	/* disable 2 part deferral */
#define CSR3_EMBA	0x0008	/* enable modified backoff */
#define CSR3_BSWP	0x0004	/* byte swap */

#define CSR4_DMAPLUS	0x4000	/* DMA burst transfer until FIFO empty */
#define CSR4_BACON_68K  0x0040	/* 32 bit 680x0 */
#define	CSR4_TXSTRT	0x0008	/* Transmit STaRT status */
#define CSR4_TXSTRTM	0x0004	/* Transmit STaRT interrupt Mask  */
#define CSR4_ENTST	0x8000	/* enable test mode */
#define CSR4_TIMER	0x2000	/* enable bus timer csr82 */
#define CSR4_DPOLL	0x1000	/* disable tx polling */
#define CSR4_APADXMIT	0x0800	/* auto pad tx to 64 */
#define CSR4_ASTRPRCV	0x0400	/* auto strip rx pad and fcs */
#define CSR4_MFCO	0x0200	/* missed frame counter oflo interrupt */
#define CSR4_MFCOM	0x0100	/* mask to disable */
#define CSR4_RCVCCO	0x0020	/* rx collision counter oflo interrupt */
#define CSR4_RCVCCOM	0x0010	/* mask to disable */
#define CSR4_JAB	0x0002	/* jabber error 10baseT interrupt */
#define CSR4_JABM	0x0001	/* mask to disable */

#define CSR5_SPND	0x0001	/* Suspend */

#define CSR15_PROM	0x8000	/* Promiscuous */
#define CSR15_DRCVBC	0x4000	/* Disable receiver broadcast */
#define CSR15_DRCVPA	0x2000	/* Disable receiver phys. addr. */
#define CSR15_DLNKTST	0x1000	/* Disable link status */
#define CSR15_DAPC	0x0800	/* Disable auto polarity det. */
#define CSR15_MENDECL	0x0400	/* MENDEC loopback mode */
#define CSR15_LRT	0x0200	/* Low receiver threshold */
#define CSR15_TSEL	0x0200	/* Transmit mode select */
#define CSR15_INTL	0x0040	/* Internal loopback */
#define CSR15_DRTY	0x0020	/* Disable retry */
#define CSR15_FCOLL	0x0010	/* Force collision */
#define CSR15_DXMTFCS	0x0008	/* Disable transmit CRC */
#define CSR15_LOOP	0x0004	/* Loopback enable */
#define CSR15_DTX	0x0002	/* Disable transmitter */
#define CSR15_DRX	0x0001	/* Disable receiver */

#define CSR58_PCISTYLE	0x0002	/* software style */

#define CSR80_RCVFW16	(0<<12)	/* fifo level to trigger rx dma */
#define CSR80_RCVFW32	(1<<12)
#define CSR80_RCVFW64	(2<<12)
#define CSR80_XMTSP4	(0<<10)	/* fifo level to trigger tx */
#define CSR80_XMTSP16	(1<<10)
#define CSR80_XMTSP64	(2<<10)
#define CSR80_XMTSP112	(3<<10)
#define CSR80_XMTFW16	(0<<8)	/* fifo level to stop dma */
#define CSR80_XMTFW32	(1<<8)
#define CSR80_XMTFW64	(2<<8)
/* must also clear csr4 CSR4_DMAPLUS: */
#define CSR80_DMATC(x)	((x)&0xff)	/* max transfers per burst. deflt 16 */
/*
 * must also set csr4 CSR4_TIMER:
 */
#define CSR82_DMABAT(x)	((x)&0xffff)	/* max burst time nanosecs*100 */

#define BCR18_MUSTSET	0x0100	/* this bit must be written as 1 !! */
#define BCR18_BREADE	0x0040	/* linear burst enable. yes ! on pci */
#define BCR18_BWRITE	0x0020	/* in write direction */
#define BCR18_LINBC4	0x0001	/* linear burst count 4 8 or 16 */
#define BCR18_LINBC8	0x0002	/* NOTE LINBC must be <= fifo trigger*/
#define BCR18_LINBC16	0x0004

#define BCR19_PVALID	0x8000	/* aprom (eeprom) read checksum ok */

/*
 * initial setting of csr0
 */
#define CSR0_IVALUE	(CSR0_IDON | CSR0_IENA | CSR0_STRT | CSR0_INIT)

/*
 * our setting of csr3
 */
#define CSR3_VALUE	(CSR3_ACON | CSR3_BSWP)

/*
 * Initialization Block.
 *	Chip initialization includes the reading of the init block to obtain
 *	the operating parameters.
 *
 * This essentially consists of 7, 32 bit LE words. In the following the
 * fields are ordered so that they map correctly in BE mode, however each
 * 16 and 32 byte field will require swapping.
 */

typedef volatile struct initblk {
	/* mode can be set in csr15 */
	uint16_t  	ib_mode;	/* Chip's operating parameters */
	uint8_t  	ib_rlen;	/* rx ring length (power of 2) */
	uint8_t  	ib_tlen;	/* tx ring length (power of 2) */
/*
 * The bytes must be swapped within the word, so that, for example,
 * the address 8:0:20:1:25:5a is written in the order
 *             0 8 1 20 5a 25
 * For PCI970 that is long word swapped: so no swapping needed, since
 * the bus will swap.
 */
	uint8_t  	ib_padr[8];	/* physical address */
	uint16_t  	ib_ladrf[4];	/* logical address filter */
	uint32_t  	ib_rdra;	/* rcv ring desc addr */
	uint32_t  	ib_tdra;	/* xmit ring desc addr */
} initblk_t;


/*
 * bits in mode register: allows alteration of the chips operating parameters
 */
#define IBM_PROM	0x8000	/* promiscuous mode */
/*
 * mode is also in cr15
 */
#define MODE_DRCVBC	0x4000	/* disable receive broadcast */
#define MODE_DRCVPA	0x2000	/* disable receive physical address */
#define MODE_DLNKTST	0x1000	/* disable link status monitoring 10T */
#define MODE_DAPC	0x0800	/* disable auto polarity 10T */
#define MODE_MENDECL	0x0400	/* mendec loopback */
#define MODE_LRT	0x0200	/* low receive threshold/tx mode sel tmau */
#define MODE_PORTSEL10T	0x0080	/* port select 10T ?? */
#define MODE_PORTSELAUI	0x0000	/* port select aui ?? */
#define IBM_INTL	0x0040	/* internal loopback */
#define IBM_DRTY	0x0020	/* disable retry */
#define IBM_COLL	0x0010	/* force collision */
#define IBM_DTCR	0x0008	/* disable transmit crc */
#define IBM_LOOP	0x0004	/* loopback */
#define IBM_DTX		0x0002	/* disable transmitter */
#define IBM_DRX		0x0001	/* disable receiver */

/*
 * Buffer Management is accomplished through message descriptors organized
 * in ring structures in main memory. There are two rings allocated for the
 * device: a receive ring and a transmit ring. The following defines the
 * structure of the descriptor rings.
 */

/*
 *                  Receive  List type definition
 *
 * This essentially consists of 4, 32 bit LE words. In the following the
 * fields are ordered so that they map correctly in BE mode, however each
 * 16 and 32 byte field will require swapping.
 */

typedef volatile struct rmde {
	uint32_t  	rmde_addr;	/* buf addr */

	uint16_t  	rmde_bcnt;
	uint16_t  	rmde_flags;

	uint16_t  	rmde_mcnt;
	uint16_t  	rmde_misc;

	uint32_t  	align;
} rmde_t;


/*
 * bits in the flags field
 */
#define RFLG_OWN	0x8000	/* ownership bit, 1==LANCE */
#define RFLG_ERR	0x4000	/* error summary */
#define RFLG_FRAM	0x2000	/* framing error */
#define RFLG_OFLO	0x1000	/* overflow error */
#define RFLG_CRC	0x0800	/* crc error */
#define RFLG_BUFF	0x0400	/* buffer error */
#define RFLG_STP	0x0200	/* start of packet */
#define RFLG_ENP	0x0100	/* end of packet */

/*
 * bits in the buffer byte count field
 */
#define RBCNT_ONES	0xf000	/* must be ones */
#define RBCNT_BCNT	0x0fff	/* buf byte count, in 2's compl */

/*
 * bits in the message byte count field
 */
#define RMCNT_RES	0xf000	/* reserved, read as zeros */
#define RMCNT_BCNT	0x0fff	/* message byte count */

/*
 *                  Transmit List type definition
 *
 * This essentially consists of 4, 32 bit LE words. In the following the
 * fields are ordered so that they map correctly in BE mode, however each
 * 16 and 32 byte field will require swapping.
 */
typedef volatile struct tmde {
    	uint32_t  	tmde_addr;	/* buf addr */

	uint16_t  	tmde_bcnt;
	uint16_t  	tmde_status;	/* misc error and status bits */

	uint32_t  	tmde_error;

	uint32_t  	align;
} tmde_t;

/*
 * bits in the status field
 */
#define TST_OWN		0x8000	/* ownership bit, 1==LANCE */
#define TST_ERR		0x4000	/* error summary */
#define TST_RES		0x2000	/* reserved bit */
#define TST_MORE	0x1000	/* more than one retry was needed */
#define TST_ONE		0x0800	/* one retry was needed */
#define TST_DEF		0x0400	/* defer while trying to transmit */
#define TST_STP		0x0200	/* start of packet */
#define TST_ENP		0x0100	/* end of packet */

/*
 * setting of status field when packet is to be transmitted
 */
#define TST_XMIT	(TST_STP | TST_ENP | TST_OWN)

/*
 * bits in the buffer byte count field
 */
#define TBCNT_ONES	0xf000	/* must be ones */
#define TBCNT_BCNT	0x0fff	/* buf byte count, in 2's compl */

/*
 * bits in the error field
 */
#define TERR_BUFF	0x8000	/* buffer error */
#define TERR_UFLO	0x4000	/* underflow error */
#define TERR_EXDEF	0x2000	/* excessive deferral */
#define TERR_LCOL	0x1000	/* late collision */
#define TERR_LCAR	0x0800	/* loss of carrier */
#define TERR_RTRY	0x0400	/* retry error */
#define TERR_TDR	0x03ff	/* time domain reflectometry */

/*
 * Defines pertaining to statistics gathering (diagnostic only)
 */

/*
 * receive errors
 */
#define ERR_FRAM	0	/* framing error */
#define ERR_OFLO	1	/* overflow error */
#define ERR_CRC		2	/* crc error */
#define ERR_RBUFF	3	/* receive buffer error */

/*
 * transmit errors
 */
#define ERR_MORE	4	/* more than one retry */
#define ERR_ONE		5	/* one retry */
#define ERR_DEF		6	/* defer'd packet */
#define ERR_TBUFF	7	/* transmit buffer error */
#define ERR_UFLO	8	/* underflow error */
#define ERR_LCOL	9	/* late collision */
#define ERR_LCAR	10	/* loss of carrier */
#define ERR_RTRY	11	/* retry error, >16 retries */

/*
 * errors reported in csr0
 */
#define ERR_BABL	12	/* transmitter timeout error */
#define ERR_MISS	13	/* missed packet */
#define ERR_MEM		14	/* memory error */
#define ERR_CERR	15	/* collision errors */
#define XMIT_INT	16	/* transmit interrupts */
#define RCV_INT		17	/* receive interrupts */

#define NHARD_ERRORS	18	/* error types used in diagnostic */

/*
 * other statistics
 */
#define ERR_TTOUT	18	/* transmit timeouts */
#define ERR_ITOUT	19	/* init timeouts */
#define ERR_INITS	20	/* reinitializations */
#define ERR_RSILO	21	/* silo ptrs misaligned on recv */
#define ERR_TSILO	22	/* silo ptrs misaligned on xmit */
#define ERR_SINTR	23	/* spurious interrupts */

#define NUM_ERRORS	24	/* number of errors types */

/*
 * Bit definitions for BCR19
 */
#define	prom_EDI	(uint16_t)0x0001
#define	prom_EDO	(uint16_t)0x0001
#define	prom_ESK	(uint16_t)0x0002
#define	prom_ECS	(uint16_t)0x0004
#define	prom_EEN	(uint16_t)0x0010
#define	prom_EEDET	(uint16_t)0x2000
#define	prom_PVALID	(uint16_t)0x8000
#define	prom_PREAD	(uint16_t)0x4000

#endif