xref: /netbsd/sys/dev/ic/wereg.h (revision 6550d01e)
1 /*	$NetBSD: wereg.h,v 1.3 2010/03/19 15:59:22 tsutsui Exp $	*/
2 
3 /*
4  * National Semiconductor DS8390 NIC register definitions.
5  *
6  * Copyright (C) 1993, David Greenman.  This software may be used, modified,
7  * copied, distributed, and sold, in both source and binary form provided that
8  * the above copyright and these terms are retained.  Under no circumstances is
9  * the author responsible for the proper functioning of this software, nor does
10  * the author assume any responsibility for damages incurred with its use.
11  */
12 
13 /*
14  *		Definitions for Western digital/SMC WD80x3 series ASIC
15  */
16 
17 /*
18  * Memory Select Register (MSR)
19  */
20 #define WE_MSR	0
21 
22 /* next three definitions for Toshiba */
23 #define	WE_MSR_POW	0x02	/* 0 = power save, 1 = normal (R/W) */
24 #define	WE_MSR_BSY	0x04	/* gate array busy (R) */
25 #define	WE_MSR_LEN	0x20	/* 0 = 16-bit, 1 = 8-bit (R/W) */
26 
27 #define WE_MSR_ADDR	0x3f	/* Memory decode bits 18-13 */
28 #define WE_MSR_MENB	0x40	/* Memory enable */
29 #define WE_MSR_RST	0x80	/* Reset board */
30 
31 /*
32  * Interface Configuration Register (ICR)
33  */
34 #define WE_ICR	1
35 
36 #define WE_ICR_16BIT	0x01	/* 16-bit interface */
37 #define WE_ICR_OAR	0x02	/* select register (0=BIO 1=EAR) */
38 #define WE_ICR_IR2	0x04	/* high order bit of encoded IRQ */
39 #define WE_ICR_MSZ	0x08	/* memory size (0=8k 1=32k) */
40 #define WE_ICR_RLA	0x10	/* recall LAN address */
41 #define WE_ICR_RX7	0x20	/* recall all but i/o and LAN address */
42 #define	WE_ICR_RIO	0x40	/* recall i/o address */
43 #define WE_ICR_STO	0x80	/* store to non-volatile memory */
44 #ifdef TOSH_ETHER
45 #define	WE_ICR_MEM	0xe0	/* shared mem address A15-A13 (R/W) */
46 #define	WE_ICR_MSZ1	0x0f	/* memory size, 0x08 = 64K, 0x04 = 32K,
47 				   0x02 = 16K, 0x01 = 8K */
48 				/* 64K can only be used if mem address
49 				   above 1MB */
50 				/* IAR holds address A23-A16 (R/W) */
51 #endif
52 
53 /*
54  * IO Address Register (IAR)
55  */
56 #define WE_IAR	2
57 
58 /*
59  * EEROM Address Register
60  */
61 #define WE_EAR	3
62 
63 /*
64  * Interrupt Request Register (IRR)
65  */
66 #define WE_IRR	4
67 
68 #define	WE_IRR_0WS	0x01	/* use 0 wait-states on 8 bit bus */
69 #define WE_IRR_OUT1	0x02	/* WD83C584 pin 1 output */
70 #define WE_IRR_OUT2	0x04	/* WD83C584 pin 2 output */
71 #define WE_IRR_OUT3	0x08	/* WD83C584 pin 3 output */
72 #define WE_IRR_FLASH	0x10	/* Flash RAM is in the ROM socket */
73 
74 /*
75  * The three bits of the encoded IRQ are decoded as follows:
76  *
77  * IR2 IR1 IR0  IRQ
78  *  0   0   0   2/9
79  *  0   0   1   3
80  *  0   1   0   5
81  *  0   1   1   7
82  *  1   0   0   10
83  *  1   0   1   11
84  *  1   1   0   15
85  *  1   1   1   4
86  */
87 #define WE_IRR_IR0	0x20	/* bit 0 of encoded IRQ */
88 #define WE_IRR_IR1	0x40	/* bit 1 of encoded IRQ */
89 #define WE_IRR_IEN	0x80	/* Interrupt enable */
90 
91 /*
92  * LA Address Register (LAAR)
93  */
94 #define WE_LAAR	5
95 
96 #define WE_LAAR_ADDRHI	0x1f	/* bits 23-19 of RAM address */
97 #define WE_LAAR_0WS16	0x20	/* enable 0 wait-states on 16 bit bus */
98 #define WE_LAAR_L16EN	0x40	/* enable 16-bit operation */
99 #define WE_LAAR_M16EN	0x80	/* enable 16-bit memory access */
100 
101 /* i/o base offset to station address/card-ID PROM */
102 #define WE_PROM	8
103 
104 /*
105  *	83C790 specific registers
106  */
107 /*
108  * Hardware Support Register (HWR) ('790)
109  */
110 #define	WE790_HWR	4
111 
112 #define	WE790_HWR_RST	0x10	/* hardware reset */
113 #define	WE790_HWR_LPRM	0x40	/* LAN PROM select */
114 #define	WE790_HWR_SWH	0x80	/* switch register set */
115 
116 /*
117  * ICR790 Interrupt Control Register for the 83C790
118  */
119 #define	WE790_ICR	6
120 
121 #define	WE790_ICR_EIL	0x01	/* enable interrupts */
122 
123 /*
124  * REV/IOPA Revision / I/O Pipe register for the 83C79X
125  */
126 #define WE790_REV	7
127 
128 #define WE790_REV_790	0x20
129 #define WE790_REV_795	0x40
130 
131 /*
132  * 79X RAM Address Register (RAR)
133  *      Enabled with SWH bit=1 in HWR register
134  */
135 
136 #define WE790_RAR	0x0b
137 
138 #define WE790_RAR_OFF	0x0f	/* memory address offset */
139 #define WE790_RAR_SZ	0x30	/* mask of memory buffer size */
140 #define WE790_RAR_SZ8	0x00	/* 8k memory buffer */
141 #define WE790_RAR_SZ16	0x10	/* 16k memory buffer */
142 #define WE790_RAR_SZ32	0x20	/* 32k memory buffer */
143 #define WE790_RAR_SZ64	0x30	/* 64k memory buffer */
144 #define WE790_RAR_BASE	0x40	/* mask of memory base address */
145 #define WE790_RAR_BASE0	0x00	/* base is 0x0C0000 */
146 #define WE790_RAR_BASE1	0x40	/* base is 0x0E0000 */
147 #if 0
148 #define WE790_RAR_BASE2	0x80	/* base is 0xFC0000 */
149 #define WE790_RAR_BASE3	0xc0	/* base is 0xFE0000 */
150 #endif
151 #define WE790_RAR_BASE_SHIFT	17	/* base is switched by A17 */
152 #define WE790_RAR_OFF_SHIFT	13	/* offset is specified by A16-A13 */
153 
154 /*
155  * General Control Register (GCR)
156  * Enabled with SWH bit == 1 in HWR register
157  */
158 #define	WE790_GCR	0x0d
159 
160 #define	WE790_GCR_LIT	0x01	/* on for UTP */
161 #define	WE790_GCR_GPOUT	0x02	/* if BNC is enabled */
162 #define	WE790_GCR_IR0	0x04	/* bit 0 of encoded IRQ */
163 #define	WE790_GCR_IR1	0x08	/* bit 1 of encoded IRQ */
164 #define	WE790_GCR_ZWSEN	0x20	/* zero wait state enable */
165 #define	WE790_GCR_IR2	0x40	/* bit 2 of encoded IRQ */
166 /*
167  * The three bits of the encoded IRQ are decoded as follows:
168  *
169  * IR2 IR1 IR0  IRQ
170  *  0   0   0   none
171  *  0   0   1   9
172  *  0   1   0   3
173  *  0   1   1   5
174  *  1   0   0   7
175  *  1   0   1   10
176  *  1   1   0   11
177  *  1   1   1   15
178  */
179 
180 /* i/o base offset to CARD ID */
181 #define WE_CARD_ID	WE_PROM+6
182 
183 /* Board type codes in card ID */
184 #define WE_TYPE_WD8003S		0x02
185 #define WE_TYPE_WD8003E		0x03
186 #define WE_TYPE_WD8013EBT	0x05
187 #define	WE_TYPE_TOSHIBA1	0x11	/* named PCETA1 */
188 #define	WE_TYPE_TOSHIBA2	0x12	/* named PCETA2 */
189 #define	WE_TYPE_TOSHIBA3	0x13	/* named PCETB */
190 #define	WE_TYPE_TOSHIBA4	0x14	/* named PCETC */
191 #define	WE_TYPE_WD8003W		0x24
192 #define	WE_TYPE_WD8003EB	0x25
193 #define	WE_TYPE_WD8013W		0x26
194 #define WE_TYPE_WD8013EP	0x27
195 #define WE_TYPE_WD8013WC	0x28
196 #define WE_TYPE_WD8013EPC	0x29
197 #define	WE_TYPE_SMC8216T	0x2a
198 #define	WE_TYPE_SMC8216C	0x2b
199 #define WE_TYPE_WD8013EBP	0x2c
200 
201 /* Bit definitions in card ID */
202 #define	WE_REV_MASK		0x1f	/* Revision mask */
203 #define	WE_SOFTCONFIG		0x20	/* Soft config */
204 #define	WE_LARGERAM		0x40	/* Large RAM */
205 #define	WE_MICROCHANEL		0x80	/* Microchannel bus (vs. isa) */
206 
207 /*
208  * Checksum total.  All 8 bytes in station address PROM will add up to this.
209  */
210 #ifdef TOSH_ETHER
211 #define WE_ROM_CHECKSUM_TOTAL	0xA5
212 #else
213 #define WE_ROM_CHECKSUM_TOTAL	0xFF
214 #endif
215 
216 #define WE_NIC_OFFSET		0x10	/* I/O base offset to NIC */
217 #define WE_ASIC_OFFSET		0	/* I/O base offset to ASIC */
218 #define	WE_NIC_NPORTS		16
219 #define	WE_ASIC_NPORTS		16
220 #define WE_NPORTS		(WE_NIC_NPORTS + WE_ASIC_NPORTS)
221 
222 #define WE_PAGE_OFFSET	0	/* page offset for NIC access to mem */
223