xref: /minix3/minix/drivers/net/dp8390/wdeth.c (revision f7df02e7476731c31f12548e38bcadbaf0233f6a)
1433d6423SLionel Sambuc /*
2433d6423SLionel Sambuc wdeth.c
3433d6423SLionel Sambuc 
4433d6423SLionel Sambuc Created:	March 14, 1994 by Philip Homburg
5433d6423SLionel Sambuc */
6433d6423SLionel Sambuc 
7433d6423SLionel Sambuc #include <minix/drivers.h>
83913e490SDavid van Moolenbroek #include <minix/netdriver.h>
9433d6423SLionel Sambuc 
10*f7df02e7SDavid van Moolenbroek #include <assert.h>
11433d6423SLionel Sambuc 
12433d6423SLionel Sambuc #include "local.h"
13433d6423SLionel Sambuc #include "dp8390.h"
14433d6423SLionel Sambuc #include "wdeth.h"
15433d6423SLionel Sambuc 
16433d6423SLionel Sambuc #if ENABLE_WDETH
17433d6423SLionel Sambuc 
18433d6423SLionel Sambuc #define WET_ETHERNET	0x01		/* Ethernet transceiver */
19433d6423SLionel Sambuc #define WET_STARLAN	0x02		/* Starlan transceiver */
20433d6423SLionel Sambuc #define WET_INTERF_CHIP	0x04		/* has a WD83C583 interface chip */
21433d6423SLionel Sambuc #define WET_BRD_16BIT	0x08		/* 16 bit board */
22433d6423SLionel Sambuc #define WET_SLT_16BIT	0x10		/* 16 bit slot */
23433d6423SLionel Sambuc #define WET_790		0x20		/* '790 chip */
24433d6423SLionel Sambuc 
25433d6423SLionel Sambuc static int we_int_table[8]= { 9, 3, 5, 7, 10, 11, 15, 4 };
26433d6423SLionel Sambuc static int we_790int_table[8]= { 0, 9, 3, 5, 7, 10, 11, 15 };
27433d6423SLionel Sambuc 
28433d6423SLionel Sambuc static void we_init(dpeth_t *dep);
29433d6423SLionel Sambuc static void we_stop(dpeth_t *dep);
30433d6423SLionel Sambuc static int we_aliasing(dpeth_t *dep);
31433d6423SLionel Sambuc static int we_interface_chip(dpeth_t *dep);
32433d6423SLionel Sambuc static int we_16bitboard(dpeth_t *dep);
33433d6423SLionel Sambuc static int we_16bitslot(dpeth_t *dep);
34433d6423SLionel Sambuc static int we_ultra(dpeth_t *dep);
35433d6423SLionel Sambuc 
36433d6423SLionel Sambuc /*===========================================================================*
37433d6423SLionel Sambuc  *				wdeth_probe				     *
38433d6423SLionel Sambuc  *===========================================================================*/
wdeth_probe(dep)39433d6423SLionel Sambuc int wdeth_probe(dep)
40433d6423SLionel Sambuc dpeth_t *dep;
41433d6423SLionel Sambuc {
42433d6423SLionel Sambuc 	int sum;
43433d6423SLionel Sambuc 
44433d6423SLionel Sambuc 	if (dep->de_linmem == 0)
45433d6423SLionel Sambuc 		return 0;	/* No shared memory, so no WD board */
46433d6423SLionel Sambuc 
47433d6423SLionel Sambuc 	sum = inb_we(dep, EPL_EA0) + inb_we(dep, EPL_EA1) +
48433d6423SLionel Sambuc 		inb_we(dep, EPL_EA2) + inb_we(dep, EPL_EA3) +
49433d6423SLionel Sambuc 		inb_we(dep, EPL_EA4) + inb_we(dep, EPL_EA5) +
50433d6423SLionel Sambuc 		inb_we(dep, EPL_TLB) + inb_we(dep, EPL_CHKSUM);
51433d6423SLionel Sambuc 	if ((sum & 0xFF) != 0xFF)
52433d6423SLionel Sambuc 		return 0;	/* No ethernet board at this address */
53433d6423SLionel Sambuc 
54433d6423SLionel Sambuc 	dep->de_initf= we_init;
55433d6423SLionel Sambuc 	dep->de_stopf= we_stop;
56433d6423SLionel Sambuc 	dep->de_prog_IO= 0;
57433d6423SLionel Sambuc 	return 1;
58433d6423SLionel Sambuc }
59433d6423SLionel Sambuc 
60433d6423SLionel Sambuc /*===========================================================================*
61433d6423SLionel Sambuc  *				we_init					     *
62433d6423SLionel Sambuc  *===========================================================================*/
we_init(dep)63433d6423SLionel Sambuc static void we_init(dep)
64433d6423SLionel Sambuc dpeth_t *dep;
65433d6423SLionel Sambuc {
66433d6423SLionel Sambuc 	int i, int_indx, int_nr;
67433d6423SLionel Sambuc 	int tlb, rambit, revision;
68433d6423SLionel Sambuc 	int icr, irr, hwr, b, gcr;
69433d6423SLionel Sambuc 	int we_type;
70433d6423SLionel Sambuc 	int sendq_nr;
71433d6423SLionel Sambuc 
72*f7df02e7SDavid van Moolenbroek 	dep->de_address.na_addr[0] = inb_we(dep, EPL_EA0);
73*f7df02e7SDavid van Moolenbroek 	dep->de_address.na_addr[1] = inb_we(dep, EPL_EA1);
74*f7df02e7SDavid van Moolenbroek 	dep->de_address.na_addr[2] = inb_we(dep, EPL_EA2);
75*f7df02e7SDavid van Moolenbroek 	dep->de_address.na_addr[3] = inb_we(dep, EPL_EA3);
76*f7df02e7SDavid van Moolenbroek 	dep->de_address.na_addr[4] = inb_we(dep, EPL_EA4);
77*f7df02e7SDavid van Moolenbroek 	dep->de_address.na_addr[5] = inb_we(dep, EPL_EA5);
78433d6423SLionel Sambuc 
79433d6423SLionel Sambuc 	dep->de_dp8390_port= dep->de_base_port + EPL_DP8390;
80433d6423SLionel Sambuc 
81433d6423SLionel Sambuc 	dep->de_16bit= 0;
82433d6423SLionel Sambuc 
83433d6423SLionel Sambuc 	we_type= 0;
84433d6423SLionel Sambuc 	we_type |= WET_ETHERNET;	/* assume ethernet */
85433d6423SLionel Sambuc 	if (we_ultra(dep))
86433d6423SLionel Sambuc 		we_type |= WET_790;
87433d6423SLionel Sambuc 	if (!we_aliasing(dep))
88433d6423SLionel Sambuc 	{
89433d6423SLionel Sambuc 		if (we_interface_chip(dep))
90433d6423SLionel Sambuc 			we_type |= WET_INTERF_CHIP;
91433d6423SLionel Sambuc 		if (we_16bitboard(dep))
92433d6423SLionel Sambuc 		{
93433d6423SLionel Sambuc 			we_type |= WET_BRD_16BIT;
94433d6423SLionel Sambuc 			if (we_16bitslot(dep))
95433d6423SLionel Sambuc 				we_type |= WET_SLT_16BIT;
96433d6423SLionel Sambuc 		}
97433d6423SLionel Sambuc 	}
98433d6423SLionel Sambuc 	if (we_type & WET_SLT_16BIT)
99433d6423SLionel Sambuc 		dep->de_16bit= 1;
100433d6423SLionel Sambuc 
101433d6423SLionel Sambuc 	/* look at the on board ram size. */
102433d6423SLionel Sambuc 	tlb= inb_we(dep, EPL_TLB);
103433d6423SLionel Sambuc 	revision= tlb & E_TLB_REV;
104433d6423SLionel Sambuc 	rambit= tlb & E_TLB_RAM;
105433d6423SLionel Sambuc 
106433d6423SLionel Sambuc 	if (dep->de_ramsize != 0)
107433d6423SLionel Sambuc 	{
108433d6423SLionel Sambuc 		/* size set from boot environment. */
109433d6423SLionel Sambuc 	}
110433d6423SLionel Sambuc 	else if (revision < 2)
111433d6423SLionel Sambuc 	{
112433d6423SLionel Sambuc 		dep->de_ramsize= 0x2000;			/* 8K */
113433d6423SLionel Sambuc 		if (we_type & WET_BRD_16BIT)
114433d6423SLionel Sambuc 			dep->de_ramsize= 0x4000;		/* 16K */
115433d6423SLionel Sambuc 		else if ((we_type & WET_INTERF_CHIP) &&
116433d6423SLionel Sambuc 			inb_we(dep, EPL_ICR) & E_ICR_MEMBIT)
117433d6423SLionel Sambuc 		{
118433d6423SLionel Sambuc 			dep->de_ramsize= 0x8000;		/* 32K */
119433d6423SLionel Sambuc 		}
120433d6423SLionel Sambuc 	}
121433d6423SLionel Sambuc 	else
122433d6423SLionel Sambuc 	{
123433d6423SLionel Sambuc 		if (we_type & WET_BRD_16BIT)
124433d6423SLionel Sambuc 		{
125433d6423SLionel Sambuc 			/* 32K or 16K */
126433d6423SLionel Sambuc 			dep->de_ramsize= rambit ? 0x8000 : 0x4000;
127433d6423SLionel Sambuc 		}
128433d6423SLionel Sambuc 		else
129433d6423SLionel Sambuc 		{
130433d6423SLionel Sambuc 			/* 32K or 8K */
131433d6423SLionel Sambuc 			dep->de_ramsize= rambit ? 0x8000 : 0x2000;
132433d6423SLionel Sambuc 		}
133433d6423SLionel Sambuc 	}
134433d6423SLionel Sambuc 
135433d6423SLionel Sambuc 	if (we_type & WET_790)
136433d6423SLionel Sambuc 	{
137433d6423SLionel Sambuc 		outb_we(dep, EPL_MSR, E_MSR_RESET);
138433d6423SLionel Sambuc 		if ((we_type & (WET_BRD_16BIT|WET_SLT_16BIT)) ==
139433d6423SLionel Sambuc 			(WET_BRD_16BIT|WET_SLT_16BIT))
140433d6423SLionel Sambuc 		{
141433d6423SLionel Sambuc 			outb_we(dep, EPL_LAAR, E_LAAR_LAN16E | E_LAAR_MEM16E);
142433d6423SLionel Sambuc 		}
143433d6423SLionel Sambuc 	}
144433d6423SLionel Sambuc 	else if (we_type & WET_BRD_16BIT)
145433d6423SLionel Sambuc 	{
146433d6423SLionel Sambuc 		if (we_type & WET_SLT_16BIT)
147433d6423SLionel Sambuc 		{
148433d6423SLionel Sambuc 			outb_we(dep, EPL_LAAR, E_LAAR_A19 | E_LAAR_SOFTINT |
149433d6423SLionel Sambuc 				E_LAAR_LAN16E | E_LAAR_MEM16E);
150433d6423SLionel Sambuc 		}
151433d6423SLionel Sambuc 		else
152433d6423SLionel Sambuc 		{
153433d6423SLionel Sambuc 			outb_we(dep, EPL_LAAR, E_LAAR_A19 | E_LAAR_SOFTINT |
154433d6423SLionel Sambuc 				E_LAAR_LAN16E);
155433d6423SLionel Sambuc 		}
156433d6423SLionel Sambuc 	}
157433d6423SLionel Sambuc 
158433d6423SLionel Sambuc 	if (we_type & WET_790)
159433d6423SLionel Sambuc 	{
160433d6423SLionel Sambuc 		outb_we(dep, EPL_MSR, E_MSR_MENABLE);
161433d6423SLionel Sambuc 		hwr= inb_we(dep, EPL_790_HWR);
162433d6423SLionel Sambuc 		outb_we(dep, EPL_790_HWR, hwr | E_790_HWR_SWH);
163433d6423SLionel Sambuc 		b= inb_we(dep, EPL_790_B);
164433d6423SLionel Sambuc 		outb_we(dep, EPL_790_B, ((dep->de_linmem >> 13) & 0x0f) |
165433d6423SLionel Sambuc 			((dep->de_linmem >> 11) & 0x40) | (b & 0xb0));
166433d6423SLionel Sambuc 		outb_we(dep, EPL_790_HWR, hwr & ~E_790_HWR_SWH);
167433d6423SLionel Sambuc 	}
168433d6423SLionel Sambuc 	else
169433d6423SLionel Sambuc 	{
170433d6423SLionel Sambuc 		outb_we(dep, EPL_MSR, E_MSR_RESET);
171433d6423SLionel Sambuc 		outb_we(dep, EPL_MSR, E_MSR_MENABLE |
172433d6423SLionel Sambuc 			((dep->de_linmem >> 13) & E_MSR_MEMADDR));
173433d6423SLionel Sambuc 	}
174433d6423SLionel Sambuc 
175433d6423SLionel Sambuc 	if ((we_type & WET_INTERF_CHIP) && !(we_type & WET_790))
176433d6423SLionel Sambuc 	{
177433d6423SLionel Sambuc 		icr= inb_we(dep, EPL_ICR);
178433d6423SLionel Sambuc 		irr= inb_we(dep, EPL_IRR);
179433d6423SLionel Sambuc 		int_indx= (icr & E_ICR_IR2) |
180433d6423SLionel Sambuc 			((irr & (E_IRR_IR0|E_IRR_IR1)) >> 5);
181433d6423SLionel Sambuc 		int_nr= we_int_table[int_indx];
182433d6423SLionel Sambuc #if DEBUG
183*f7df02e7SDavid van Moolenbroek 		printf("%s: encoded irq= %d\n", netdriver_name(), int_nr);
184433d6423SLionel Sambuc #endif
185433d6423SLionel Sambuc 		if (dep->de_irq & DEI_DEFAULT) dep->de_irq= int_nr;
186433d6423SLionel Sambuc 
187433d6423SLionel Sambuc 		outb_we(dep, EPL_IRR, irr | E_IRR_IEN);
188433d6423SLionel Sambuc 	}
189433d6423SLionel Sambuc 	if (we_type & WET_790)
190433d6423SLionel Sambuc 	{
191433d6423SLionel Sambuc 		hwr= inb_we(dep, EPL_790_HWR);
192433d6423SLionel Sambuc 		outb_we(dep, EPL_790_HWR, hwr | E_790_HWR_SWH);
193433d6423SLionel Sambuc 
194433d6423SLionel Sambuc 		gcr= inb_we(dep, EPL_790_GCR);
195433d6423SLionel Sambuc 
196433d6423SLionel Sambuc 		outb_we(dep, EPL_790_HWR, hwr & ~E_790_HWR_SWH);
197433d6423SLionel Sambuc 
198433d6423SLionel Sambuc 		int_indx= ((gcr & E_790_GCR_IR2) >> 4) |
199433d6423SLionel Sambuc 			((gcr & (E_790_GCR_IR1|E_790_GCR_IR0)) >> 2);
200433d6423SLionel Sambuc 		int_nr= we_790int_table[int_indx];
201433d6423SLionel Sambuc #if DEBUG
202*f7df02e7SDavid van Moolenbroek 		printf("%s: encoded irq= %d\n", netdriver_name(), int_nr);
203433d6423SLionel Sambuc #endif
204433d6423SLionel Sambuc 		if (dep->de_irq & DEI_DEFAULT) dep->de_irq= int_nr;
205433d6423SLionel Sambuc 
206433d6423SLionel Sambuc 		icr= inb_we(dep, EPL_790_ICR);
207433d6423SLionel Sambuc 		outb_we(dep, EPL_790_ICR, icr | E_790_ICR_EIL);
208433d6423SLionel Sambuc 	}
209433d6423SLionel Sambuc 
210433d6423SLionel Sambuc 	/* Strip the "default flag." */
211433d6423SLionel Sambuc 	dep->de_irq &= ~DEI_DEFAULT;
212433d6423SLionel Sambuc 
213433d6423SLionel Sambuc 	if (!debug)
214433d6423SLionel Sambuc 	{
215433d6423SLionel Sambuc 		printf("%s: WD80%d3 at %X:%d:%lX\n",
216*f7df02e7SDavid van Moolenbroek 			netdriver_name(), we_type & WET_BRD_16BIT ? 1 : 0,
217433d6423SLionel Sambuc 			dep->de_base_port, dep->de_irq, dep->de_linmem);
218433d6423SLionel Sambuc 	}
219433d6423SLionel Sambuc 	else
220433d6423SLionel Sambuc 	{
221433d6423SLionel Sambuc 		printf("%s: Western Digital %s%s card %s%s at I/O "
222433d6423SLionel Sambuc 			"address 0x%X, memory address 0x%lX, "
223433d6423SLionel Sambuc 			"memory size 0x%X, irq %d\n",
224*f7df02e7SDavid van Moolenbroek 			netdriver_name(),
225433d6423SLionel Sambuc 			we_type & WET_BRD_16BIT ? "16-bit " : "",
226433d6423SLionel Sambuc 			we_type & WET_ETHERNET ? "Ethernet" :
227433d6423SLionel Sambuc 			we_type & WET_STARLAN ? "Starlan" : "Network",
228433d6423SLionel Sambuc 			we_type & WET_INTERF_CHIP ? "with an interface chip " : "",
229433d6423SLionel Sambuc 			we_type & WET_SLT_16BIT ? "in a 16-bit slot " : "",
230433d6423SLionel Sambuc 			dep->de_base_port, dep->de_linmem, dep->de_ramsize,
231433d6423SLionel Sambuc 			dep->de_irq);
232433d6423SLionel Sambuc 	}
233433d6423SLionel Sambuc 
234433d6423SLionel Sambuc 	dep->de_offset_page= 0;		/* Shared memory starts at 0 */
235433d6423SLionel Sambuc 
236433d6423SLionel Sambuc 	/* Allocate one send buffer (1.5KB) per 8KB of on board memory. */
237433d6423SLionel Sambuc 	sendq_nr= dep->de_ramsize / 0x2000;
238433d6423SLionel Sambuc 	if (sendq_nr < 1)
239433d6423SLionel Sambuc 		sendq_nr= 1;
240433d6423SLionel Sambuc 	else if (sendq_nr > SENDQ_NR)
241433d6423SLionel Sambuc 		sendq_nr= SENDQ_NR;
242433d6423SLionel Sambuc 	dep->de_sendq_nr= sendq_nr;
243433d6423SLionel Sambuc 	for (i= 0; i<sendq_nr; i++)
244433d6423SLionel Sambuc 		dep->de_sendq[i].sq_sendpage= i*SENDQ_PAGES;
245433d6423SLionel Sambuc 
246433d6423SLionel Sambuc 	dep->de_startpage= i*SENDQ_PAGES;
247433d6423SLionel Sambuc 	dep->de_stoppage= dep->de_ramsize / DP_PAGESIZE;
248433d6423SLionel Sambuc }
249433d6423SLionel Sambuc 
250433d6423SLionel Sambuc /*===========================================================================*
251433d6423SLionel Sambuc  *				we_stop					     *
252433d6423SLionel Sambuc  *===========================================================================*/
we_stop(dep)253433d6423SLionel Sambuc static void we_stop(dep)
254433d6423SLionel Sambuc dpeth_t *dep;
255433d6423SLionel Sambuc {
256433d6423SLionel Sambuc 	if (dep->de_16bit)
257433d6423SLionel Sambuc 		outb_we(dep, EPL_LAAR, E_LAAR_A19 | E_LAAR_LAN16E);
258433d6423SLionel Sambuc 	outb_we(dep, EPL_MSR, E_MSR_RESET);
259433d6423SLionel Sambuc 	outb_we(dep, EPL_MSR, 0);
260433d6423SLionel Sambuc }
261433d6423SLionel Sambuc 
262433d6423SLionel Sambuc /*===========================================================================*
263433d6423SLionel Sambuc  *				we_aliasing				     *
264433d6423SLionel Sambuc  *===========================================================================*/
we_aliasing(dep)265433d6423SLionel Sambuc static int we_aliasing(dep)
266433d6423SLionel Sambuc dpeth_t *dep;
267433d6423SLionel Sambuc {
268433d6423SLionel Sambuc /* Determine whether wd8003 hardware performs register aliasing. This implies
269433d6423SLionel Sambuc  * an old WD8003E board. */
270433d6423SLionel Sambuc 
271433d6423SLionel Sambuc 	if (inb_we(dep, EPL_REG1) != inb_we(dep, EPL_EA1))
272433d6423SLionel Sambuc 		return 0;
273433d6423SLionel Sambuc 	if (inb_we(dep, EPL_REG2) != inb_we(dep, EPL_EA2))
274433d6423SLionel Sambuc 		return 0;
275433d6423SLionel Sambuc 	if (inb_we(dep, EPL_REG3) != inb_we(dep, EPL_EA3))
276433d6423SLionel Sambuc 		return 0;
277433d6423SLionel Sambuc 	if (inb_we(dep, EPL_REG4) != inb_we(dep, EPL_EA4))
278433d6423SLionel Sambuc 		return 0;
279433d6423SLionel Sambuc 	if (inb_we(dep, EPL_REG7) != inb_we(dep, EPL_CHKSUM))
280433d6423SLionel Sambuc 		return 0;
281433d6423SLionel Sambuc 	return 1;
282433d6423SLionel Sambuc }
283433d6423SLionel Sambuc 
284433d6423SLionel Sambuc /*===========================================================================*
285433d6423SLionel Sambuc  *				we_interface_chip			     *
286433d6423SLionel Sambuc  *===========================================================================*/
we_interface_chip(dep)287433d6423SLionel Sambuc static int we_interface_chip(dep)
288433d6423SLionel Sambuc dpeth_t *dep;
289433d6423SLionel Sambuc {
290433d6423SLionel Sambuc /* Determine if the board has an interface chip. */
291433d6423SLionel Sambuc 
292433d6423SLionel Sambuc 	outb_we(dep, EPL_GP2, 0x35);
293433d6423SLionel Sambuc 	if (inb_we(dep, EPL_GP2) != 0x35)
294433d6423SLionel Sambuc 		return 0;
295433d6423SLionel Sambuc 	outb_we(dep, EPL_GP2, 0x3A);
296433d6423SLionel Sambuc 	if (inb_we(dep, EPL_GP2) != 0x3A)
297433d6423SLionel Sambuc 		return 0;
298433d6423SLionel Sambuc 	return 1;
299433d6423SLionel Sambuc }
300433d6423SLionel Sambuc 
301433d6423SLionel Sambuc /*===========================================================================*
302433d6423SLionel Sambuc  *				we_16bitboard				     *
303433d6423SLionel Sambuc  *===========================================================================*/
we_16bitboard(dep)304433d6423SLionel Sambuc static int we_16bitboard(dep)
305433d6423SLionel Sambuc dpeth_t *dep;
306433d6423SLionel Sambuc {
307433d6423SLionel Sambuc /* Determine whether the board is capable of doing 16 bit memory moves.
308433d6423SLionel Sambuc  * If the 16 bit enable bit is unchangable by software we'll assume an
309433d6423SLionel Sambuc  * 8 bit board.
310433d6423SLionel Sambuc  */
311433d6423SLionel Sambuc 	int icr;
312433d6423SLionel Sambuc 	u8_t tlb;
313433d6423SLionel Sambuc 
314433d6423SLionel Sambuc 	icr= inb_we(dep, EPL_ICR);
315433d6423SLionel Sambuc 
316433d6423SLionel Sambuc 	outb_we(dep, EPL_ICR, icr ^ E_ICR_16BIT);
317433d6423SLionel Sambuc 	if (inb_we(dep, EPL_ICR) == icr)
318433d6423SLionel Sambuc 	{
319433d6423SLionel Sambuc 		tlb= inb_we(dep, EPL_TLB);
320433d6423SLionel Sambuc #if DEBUG
321*f7df02e7SDavid van Moolenbroek 		printf("%s: tlb= 0x%x\n", netdriver_name(), tlb);
322433d6423SLionel Sambuc #endif
323433d6423SLionel Sambuc 		return tlb == E_TLB_EB || tlb == E_TLB_E ||
324433d6423SLionel Sambuc 			tlb == E_TLB_SMCE || tlb == E_TLB_SMC8216T ||
325433d6423SLionel Sambuc 			tlb == E_TLB_SMC8216C;
326433d6423SLionel Sambuc 	}
327433d6423SLionel Sambuc 	outb_we(dep, EPL_ICR, icr);
328433d6423SLionel Sambuc 	return (icr & E_ICR_16BIT);
329433d6423SLionel Sambuc }
330433d6423SLionel Sambuc 
331433d6423SLionel Sambuc /*===========================================================================*
332433d6423SLionel Sambuc  *				we_16bitslot				     *
333433d6423SLionel Sambuc  *===========================================================================*/
we_16bitslot(dep)334433d6423SLionel Sambuc static int we_16bitslot(dep)
335433d6423SLionel Sambuc dpeth_t *dep;
336433d6423SLionel Sambuc {
337433d6423SLionel Sambuc /* Determine if the 16 bit board in plugged into a 16 bit slot.  */
338433d6423SLionel Sambuc 	return !!(inb_we(dep, EPL_ICR) & E_ICR_16BIT);
339433d6423SLionel Sambuc }
340433d6423SLionel Sambuc 
341433d6423SLionel Sambuc /*===========================================================================*
342433d6423SLionel Sambuc  *				we_ultra				     *
343433d6423SLionel Sambuc  *===========================================================================*/
we_ultra(dep)344433d6423SLionel Sambuc static int we_ultra(dep)
345433d6423SLionel Sambuc dpeth_t *dep;
346433d6423SLionel Sambuc {
347433d6423SLionel Sambuc /* Determine if we has an '790 chip.  */
348433d6423SLionel Sambuc 	u8_t tlb;
349433d6423SLionel Sambuc 
350433d6423SLionel Sambuc 	tlb= inb_we(dep, EPL_TLB);
351433d6423SLionel Sambuc 	return tlb == E_TLB_SMC8216T || tlb == E_TLB_SMC8216C;
352433d6423SLionel Sambuc }
353433d6423SLionel Sambuc 
354433d6423SLionel Sambuc #endif /* ENABLE_WDETH */
355433d6423SLionel Sambuc 
356433d6423SLionel Sambuc /*
357433d6423SLionel Sambuc  * $PchId: wdeth.c,v 1.10 2003/09/10 19:31:50 philip Exp $
358433d6423SLionel Sambuc  */
359