• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**************************************************************************
2 Etherboot -  BOOTP/TFTP Bootstrap Program
3 TLAN driver for Etherboot
4 ***************************************************************************/
5 
6 /*
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation; either version 2, or (at
10  * your option) any later version.
11  */
12 
13 /* to get some global routines like printf */
14 #include "etherboot.h"
15 /* to get the interface to the body of the program */
16 #include "nic.h"
17 /* to get the PCI support functions, if this is a PCI NIC */
18 #include "pci.h"
19 /* to get our own prototype */
20 #include "cards.h"
21 
22 	/*****************************************************************
23 	 * TLan Definitions
24 	 *
25 	 ****************************************************************/
26 
27 #define TLAN_MIN_FRAME_SIZE	64
28 #define TLAN_MAX_FRAME_SIZE	1600
29 
30 #define TLAN_NUM_RX_LISTS	32
31 #define TLAN_NUM_TX_LISTS	64
32 
33 #define TLAN_IGNORE		0
34 #define TLAN_RECORD		1
35 
36 #define TLAN_DBG(lvl, format, args...)	if (debug&lvl) printf("TLAN: " format, ##args );
37 #define TLAN_DEBUG_GNRL		0x0001
38 #define TLAN_DEBUG_TX		0x0002
39 #define TLAN_DEBUG_RX		0x0004
40 #define TLAN_DEBUG_LIST		0x0008
41 #define TLAN_DEBUG_PROBE	0x0010
42 
43 #define MAX_TLAN_BOARDS		8	 /* Max number of boards installed at a time */
44 
45 	/*****************************************************************
46 	 * Device Identification Definitions
47 	 *
48 	 ****************************************************************/
49 
50 #define PCI_DEVICE_ID_NETELLIGENT_10_T2			0xB012
51 #define PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100	0xB030
52 #ifndef PCI_DEVICE_ID_OLICOM_OC2183
53 #define PCI_DEVICE_ID_OLICOM_OC2183			0x0013
54 #endif
55 #ifndef PCI_DEVICE_ID_OLICOM_OC2325
56 #define PCI_DEVICE_ID_OLICOM_OC2325			0x0012
57 #endif
58 #ifndef PCI_DEVICE_ID_OLICOM_OC2326
59 #define PCI_DEVICE_ID_OLICOM_OC2326			0x0014
60 #endif
61 #define TLAN_ADAPTER_NONE		0x00000000
62 #define TLAN_ADAPTER_UNMANAGED_PHY	0x00000001
63 #define TLAN_ADAPTER_BIT_RATE_PHY	0x00000002
64 #define TLAN_ADAPTER_USE_INTERN_10	0x00000004
65 #define TLAN_ADAPTER_ACTIVITY_LED	0x00000008
66 #define TLAN_SPEED_DEFAULT	0
67 #define TLAN_SPEED_10		10
68 #define TLAN_SPEED_100		100
69 #define TLAN_DUPLEX_DEFAULT	0
70 #define TLAN_DUPLEX_HALF	1
71 #define TLAN_DUPLEX_FULL	2
72 #define TLAN_BUFFERS_PER_LIST	10
73 #define TLAN_LAST_BUFFER	0x80000000
74 #define TLAN_CSTAT_UNUSED	0x8000
75 #define TLAN_CSTAT_FRM_CMP	0x4000
76 #define TLAN_CSTAT_READY	0x3000
77 #define TLAN_CSTAT_EOC		0x0800
78 #define TLAN_CSTAT_RX_ERROR	0x0400
79 #define TLAN_CSTAT_PASS_CRC	0x0200
80 #define TLAN_CSTAT_DP_PR	0x0100
81 
82 	/*****************************************************************
83 	 * PHY definitions
84 	 *
85 	 ****************************************************************/
86 
87 #define TLAN_PHY_MAX_ADDR	0x1F
88 #define TLAN_PHY_NONE		0x20
89 
90 	/*****************************************************************
91 	 * TLan Driver Timer Definitions
92 	 *
93 	 ****************************************************************/
94 
95 #define TLAN_TIMER_LINK_BEAT		1
96 #define TLAN_TIMER_ACTIVITY		2
97 #define TLAN_TIMER_PHY_PDOWN		3
98 #define TLAN_TIMER_PHY_PUP		4
99 #define TLAN_TIMER_PHY_RESET		5
100 #define TLAN_TIMER_PHY_START_LINK	6
101 #define TLAN_TIMER_PHY_FINISH_AN	7
102 #define TLAN_TIMER_FINISH_RESET		8
103 #define TLAN_TIMER_ACT_DELAY		(HZ/10)
104 
105 	/*****************************************************************
106 	 * TLan Driver Eeprom Definitions
107 	 *
108 	 ****************************************************************/
109 
110 #define TLAN_EEPROM_ACK		0
111 #define TLAN_EEPROM_STOP	1
112 
113 	/*****************************************************************
114 	 * Host Register Offsets and Contents
115 	 *
116 	 ****************************************************************/
117 
118 #define TLAN_HOST_CMD			0x00
119 #define 	TLAN_HC_GO		0x80000000
120 #define		TLAN_HC_STOP		0x40000000
121 #define		TLAN_HC_ACK		0x20000000
122 #define		TLAN_HC_CS_MASK		0x1FE00000
123 #define		TLAN_HC_EOC		0x00100000
124 #define		TLAN_HC_RT		0x00080000
125 #define		TLAN_HC_NES		0x00040000
126 #define		TLAN_HC_AD_RST		0x00008000
127 #define		TLAN_HC_LD_TMR		0x00004000
128 #define		TLAN_HC_LD_THR		0x00002000
129 #define		TLAN_HC_REQ_INT		0x00001000
130 #define		TLAN_HC_INT_OFF		0x00000800
131 #define		TLAN_HC_INT_ON		0x00000400
132 #define		TLAN_HC_AC_MASK		0x000000FF
133 #define TLAN_CH_PARM			0x04
134 #define TLAN_DIO_ADR			0x08
135 #define		TLAN_DA_ADR_INC		0x8000
136 #define		TLAN_DA_RAM_ADR		0x4000
137 #define TLAN_HOST_INT			0x0A
138 #define		TLAN_HI_IV_MASK		0x1FE0
139 #define		TLAN_HI_IT_MASK		0x001C
140 #define TLAN_DIO_DATA			0x0C
141 
142 /* ThunderLAN Internal Register DIO Offsets */
143 
144 #define TLAN_NET_CMD			0x00
145 #define		TLAN_NET_CMD_NRESET	0x80
146 #define		TLAN_NET_CMD_NWRAP	0x40
147 #define		TLAN_NET_CMD_CSF	0x20
148 #define		TLAN_NET_CMD_CAF	0x10
149 #define		TLAN_NET_CMD_NOBRX	0x08
150 #define		TLAN_NET_CMD_DUPLEX	0x04
151 #define		TLAN_NET_CMD_TRFRAM	0x02
152 #define		TLAN_NET_CMD_TXPACE	0x01
153 #define TLAN_NET_SIO			0x01
154 #define 	TLAN_NET_SIO_MINTEN	0x80
155 #define		TLAN_NET_SIO_ECLOK	0x40
156 #define		TLAN_NET_SIO_ETXEN	0x20
157 #define		TLAN_NET_SIO_EDATA	0x10
158 #define		TLAN_NET_SIO_NMRST	0x08
159 #define		TLAN_NET_SIO_MCLK	0x04
160 #define		TLAN_NET_SIO_MTXEN	0x02
161 #define		TLAN_NET_SIO_MDATA	0x01
162 #define TLAN_NET_STS			0x02
163 #define		TLAN_NET_STS_MIRQ	0x80
164 #define		TLAN_NET_STS_HBEAT	0x40
165 #define		TLAN_NET_STS_TXSTOP	0x20
166 #define		TLAN_NET_STS_RXSTOP	0x10
167 #define		TLAN_NET_STS_RSRVD	0x0F
168 #define TLAN_NET_MASK			0x03
169 #define		TLAN_NET_MASK_MASK7	0x80
170 #define		TLAN_NET_MASK_MASK6	0x40
171 #define		TLAN_NET_MASK_MASK5	0x20
172 #define		TLAN_NET_MASK_MASK4	0x10
173 #define		TLAN_NET_MASK_RSRVD	0x0F
174 #define TLAN_NET_CONFIG			0x04
175 #define 	TLAN_NET_CFG_RCLK	0x8000
176 #define		TLAN_NET_CFG_TCLK	0x4000
177 #define		TLAN_NET_CFG_BIT	0x2000
178 #define		TLAN_NET_CFG_RXCRC	0x1000
179 #define		TLAN_NET_CFG_PEF	0x0800
180 #define		TLAN_NET_CFG_1FRAG	0x0400
181 #define		TLAN_NET_CFG_1CHAN	0x0200
182 #define		TLAN_NET_CFG_MTEST	0x0100
183 #define		TLAN_NET_CFG_PHY_EN	0x0080
184 #define		TLAN_NET_CFG_MSMASK	0x007F
185 #define TLAN_MAN_TEST			0x06
186 #define TLAN_DEF_VENDOR_ID		0x08
187 #define TLAN_DEF_DEVICE_ID		0x0A
188 #define TLAN_DEF_REVISION		0x0C
189 #define TLAN_DEF_SUBCLASS		0x0D
190 #define TLAN_DEF_MIN_LAT		0x0E
191 #define TLAN_DEF_MAX_LAT		0x0F
192 #define TLAN_AREG_0			0x10
193 #define TLAN_AREG_1			0x16
194 #define TLAN_AREG_2			0x1C
195 #define TLAN_AREG_3			0x22
196 #define TLAN_HASH_1			0x28
197 #define TLAN_HASH_2			0x2C
198 #define TLAN_GOOD_TX_FRMS		0x30
199 #define TLAN_TX_UNDERUNS		0x33
200 #define TLAN_GOOD_RX_FRMS		0x34
201 #define TLAN_RX_OVERRUNS		0x37
202 #define TLAN_DEFERRED_TX		0x38
203 #define TLAN_CRC_ERRORS			0x3A
204 #define TLAN_CODE_ERRORS		0x3B
205 #define TLAN_MULTICOL_FRMS		0x3C
206 #define TLAN_SINGLECOL_FRMS		0x3E
207 #define TLAN_EXCESSCOL_FRMS		0x40
208 #define TLAN_LATE_COLS			0x41
209 #define TLAN_CARRIER_LOSS		0x42
210 #define TLAN_ACOMMIT			0x43
211 #define TLAN_LED_REG			0x44
212 #define		TLAN_LED_ACT		0x10
213 #define		TLAN_LED_LINK		0x01
214 #define TLAN_BSIZE_REG			0x45
215 #define TLAN_MAX_RX			0x46
216 #define TLAN_INT_DIS			0x48
217 #define		TLAN_ID_TX_EOC		0x04
218 #define		TLAN_ID_RX_EOF		0x02
219 #define		TLAN_ID_RX_EOC		0x01
220 
221 /* ThunderLAN Interrupt Codes */
222 
223 #define TLAN_INT_NUMBER_OF_INTS	8
224 
225 #define TLAN_INT_NONE			0x0000
226 #define TLAN_INT_TX_EOF			0x0001
227 #define TLAN_INT_STAT_OVERFLOW		0x0002
228 #define TLAN_INT_RX_EOF			0x0003
229 #define TLAN_INT_DUMMY			0x0004
230 #define TLAN_INT_TX_EOC			0x0005
231 #define TLAN_INT_STATUS_CHECK		0x0006
232 #define TLAN_INT_RX_EOC			0x0007
233 #define TLAN_TLPHY_ID			0x10
234 #define TLAN_TLPHY_CTL			0x11
235 #define 	TLAN_TC_IGLINK		0x8000
236 #define		TLAN_TC_SWAPOL		0x4000
237 #define		TLAN_TC_AUISEL		0x2000
238 #define		TLAN_TC_SQEEN		0x1000
239 #define		TLAN_TC_MTEST		0x0800
240 #define		TLAN_TC_RESERVED	0x07F8
241 #define		TLAN_TC_NFEW		0x0004
242 #define		TLAN_TC_INTEN		0x0002
243 #define		TLAN_TC_TINT		0x0001
244 #define TLAN_TLPHY_STS			0x12
245 #define		TLAN_TS_MINT		0x8000
246 #define		TLAN_TS_PHOK		0x4000
247 #define		TLAN_TS_POLOK		0x2000
248 #define		TLAN_TS_TPENERGY	0x1000
249 #define		TLAN_TS_RESERVED	0x0FFF
250 #define TLAN_TLPHY_PAR			0x19
251 #define		TLAN_PHY_CIM_STAT	0x0020
252 #define		TLAN_PHY_SPEED_100	0x0040
253 #define		TLAN_PHY_DUPLEX_FULL	0x0080
254 #define		TLAN_PHY_AN_EN_STAT     0x0400
255 
256 
257 /* ThunderLAN MII Registers */
258 
259 /* Generic MII/PHY Registers */
260 
261 #define MII_GEN_CTL			0x00
262 #define 	MII_GC_RESET		0x8000
263 #define		MII_GC_LOOPBK		0x4000
264 #define		MII_GC_SPEEDSEL		0x2000
265 #define		MII_GC_AUTOENB		0x1000
266 #define		MII_GC_PDOWN		0x0800
267 #define		MII_GC_ISOLATE		0x0400
268 #define		MII_GC_AUTORSRT		0x0200
269 #define		MII_GC_DUPLEX		0x0100
270 #define		MII_GC_COLTEST		0x0080
271 #define		MII_GC_RESERVED		0x007F
272 #define MII_GEN_STS			0x01
273 #define		MII_GS_100BT4		0x8000
274 #define		MII_GS_100BTXFD		0x4000
275 #define		MII_GS_100BTXHD		0x2000
276 #define		MII_GS_10BTFD		0x1000
277 #define		MII_GS_10BTHD		0x0800
278 #define		MII_GS_RESERVED		0x07C0
279 #define		MII_GS_AUTOCMPLT	0x0020
280 #define		MII_GS_RFLT		0x0010
281 #define		MII_GS_AUTONEG		0x0008
282 #define		MII_GS_LINK		0x0004
283 #define		MII_GS_JABBER		0x0002
284 #define		MII_GS_EXTCAP		0x0001
285 #define MII_GEN_ID_HI			0x02
286 #define MII_GEN_ID_LO			0x03
287 #define 	MII_GIL_OUI		0xFC00
288 #define 	MII_GIL_MODEL		0x03F0
289 #define 	MII_GIL_REVISION	0x000F
290 #define MII_AN_ADV			0x04
291 #define MII_AN_LPA			0x05
292 #define MII_AN_EXP			0x06
293 
294 /* ThunderLAN Specific MII/PHY Registers */
295 
296 #define 	TLAN_TC_IGLINK		0x8000
297 #define		TLAN_TC_SWAPOL		0x4000
298 #define		TLAN_TC_AUISEL		0x2000
299 #define		TLAN_TC_SQEEN		0x1000
300 #define		TLAN_TC_MTEST		0x0800
301 #define		TLAN_TC_RESERVED	0x07F8
302 #define		TLAN_TC_NFEW		0x0004
303 #define		TLAN_TC_INTEN		0x0002
304 #define		TLAN_TC_TINT		0x0001
305 #define		TLAN_TS_MINT		0x8000
306 #define		TLAN_TS_PHOK		0x4000
307 #define		TLAN_TS_POLOK		0x2000
308 #define		TLAN_TS_TPENERGY	0x1000
309 #define		TLAN_TS_RESERVED	0x0FFF
310 #define		TLAN_PHY_CIM_STAT	0x0020
311 #define		TLAN_PHY_SPEED_100	0x0040
312 #define		TLAN_PHY_DUPLEX_FULL	0x0080
313 #define		TLAN_PHY_AN_EN_STAT     0x0400
314 
315 /* National Sem. & Level1 PHY id's */
316 #define NAT_SEM_ID1			0x2000
317 #define NAT_SEM_ID2			0x5C01
318 #define LEVEL1_ID1			0x7810
319 #define LEVEL1_ID2			0x0000
320 
321 #define TLan_ClearBit( bit, port )	outb_p(inb_p(port) & ~bit, port)
322 #define TLan_GetBit( bit, port )	((int) (inb_p(port) & bit))
323 #define TLan_SetBit( bit, port )	outb_p(inb_p(port) | bit, port)
324 
325 typedef	unsigned int	u32;
326 typedef	unsigned short	u16;
327 typedef	unsigned char	u8;
328 
329 /* Routines to access internal registers. */
330 
TLan_DioRead8(u16 base_addr,u16 internal_addr)331 inline u8 TLan_DioRead8(u16 base_addr, u16 internal_addr)
332 {
333 	outw(internal_addr, base_addr + TLAN_DIO_ADR);
334 	return (inb((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x3)));
335 
336 } /* TLan_DioRead8 */
337 
TLan_DioRead16(u16 base_addr,u16 internal_addr)338 inline u16 TLan_DioRead16(u16 base_addr, u16 internal_addr)
339 {
340 	outw(internal_addr, base_addr + TLAN_DIO_ADR);
341 	return (inw((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x2)));
342 
343 } /* TLan_DioRead16 */
344 
TLan_DioRead32(u16 base_addr,u16 internal_addr)345 inline u32 TLan_DioRead32(u16 base_addr, u16 internal_addr)
346 {
347 	outw(internal_addr, base_addr + TLAN_DIO_ADR);
348 	return (inl(base_addr + TLAN_DIO_DATA));
349 
350 } /* TLan_DioRead32 */
351 
TLan_DioWrite8(u16 base_addr,u16 internal_addr,u8 data)352 inline void TLan_DioWrite8(u16 base_addr, u16 internal_addr, u8 data)
353 {
354 	outw(internal_addr, base_addr + TLAN_DIO_ADR);
355 	outb(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x3));
356 
357 }
358 
TLan_DioWrite16(u16 base_addr,u16 internal_addr,u16 data)359 inline void TLan_DioWrite16(u16 base_addr, u16 internal_addr, u16 data)
360 {
361 	outw(internal_addr, base_addr + TLAN_DIO_ADR);
362 	outw(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2));
363 
364 }
365 
TLan_DioWrite32(u16 base_addr,u16 internal_addr,u32 data)366 inline void TLan_DioWrite32(u16 base_addr, u16 internal_addr, u32 data)
367 {
368 	outw(internal_addr, base_addr + TLAN_DIO_ADR);
369 	outl(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2));
370 
371 }
372 
373 /* NIC specific static variables go here */
374 
375 /*****************************************************************************
376 ******************************************************************************
377 
378 	ThunderLAN Driver Eeprom routines
379 
380 	The Compaq Netelligent 10 and 10/100 cards use a Microchip 24C02A
381 	EEPROM.  These functions are based on information in Microchip's
382 	data sheet.  I don't know how well this functions will work with
383 	other EEPROMs.
384 
385 ******************************************************************************
386 *****************************************************************************/
387 
388 	/***************************************************************
389 	 *	TLan_EeSendStart
390 	 *
391 	 *	Returns:
392 	 *		Nothing
393 	 *	Parms:
394 	 *		io_base		The IO port base address for the
395 	 *				TLAN device with the EEPROM to
396 	 *				use.
397 	 *
398 	 *	This function sends a start cycle to an EEPROM attached
399 	 *	to a TLAN chip.
400 	 *
401 	 **************************************************************/
402 
TLan_EeSendStart(u16 io_base)403 static void TLan_EeSendStart( u16 io_base )
404 {
405 	u16	sio;
406 
407 	outw( TLAN_NET_SIO, io_base + TLAN_DIO_ADR );
408 	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
409 
410 	TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
411 	TLan_SetBit( TLAN_NET_SIO_EDATA, sio );
412 	TLan_SetBit( TLAN_NET_SIO_ETXEN, sio );
413 	TLan_ClearBit( TLAN_NET_SIO_EDATA, sio );
414 	TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio );
415 
416 } /* TLan_EeSendStart */
417 
418 	/***************************************************************
419 	 *	TLan_EeSendByte
420 	 *
421 	 *	Returns:
422 	 *		If the correct ack was received, 0, otherwise 1
423 	 *	Parms:	io_base		The IO port base address for the
424 	 *				TLAN device with the EEPROM to
425 	 *				use.
426 	 *		data		The 8 bits of information to
427 	 *				send to the EEPROM.
428 	 *		stop		If TLAN_EEPROM_STOP is passed, a
429 	 *				stop cycle is sent after the
430 	 *				byte is sent after the ack is
431 	 *				read.
432 	 *
433 	 *	This function sends a byte on the serial EEPROM line,
434 	 *	driving the clock to send each bit. The function then
435 	 *	reverses transmission direction and reads an acknowledge
436 	 *	bit.
437 	 *
438 	 **************************************************************/
439 
TLan_EeSendByte(u16 io_base,u8 data,int stop)440 static int TLan_EeSendByte( u16 io_base, u8 data, int stop )
441 {
442 	int	err;
443 	u8	place;
444 	u16	sio;
445 
446 	outw( TLAN_NET_SIO, io_base + TLAN_DIO_ADR );
447 	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
448 
449 	/* Assume clock is low, tx is enabled; */
450 	for ( place = 0x80; place != 0; place >>= 1 ) {
451 		if ( place & data )
452 			TLan_SetBit( TLAN_NET_SIO_EDATA, sio );
453 		else
454 			TLan_ClearBit( TLAN_NET_SIO_EDATA, sio );
455 		TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
456 		TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio );
457 	}
458 	TLan_ClearBit( TLAN_NET_SIO_ETXEN, sio );
459 	TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
460 	err = TLan_GetBit( TLAN_NET_SIO_EDATA, sio );
461 	TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio );
462 	TLan_SetBit( TLAN_NET_SIO_ETXEN, sio );
463 
464 	if ( ( ! err ) && stop ) {
465 		TLan_ClearBit( TLAN_NET_SIO_EDATA, sio );	/* STOP, raise data while clock is high */
466 		TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
467 		TLan_SetBit( TLAN_NET_SIO_EDATA, sio );
468 	}
469 
470 	return ( err );
471 
472 } /* TLan_EeSendByte */
473 
474 	/***************************************************************
475 	 *	TLan_EeReceiveByte
476 	 *
477 	 *	Returns:
478 	 *		Nothing
479 	 *	Parms:
480 	 *		io_base		The IO port base address for the
481 	 *				TLAN device with the EEPROM to
482 	 *				use.
483 	 *		data		An address to a char to hold the
484 	 *				data sent from the EEPROM.
485 	 *		stop		If TLAN_EEPROM_STOP is passed, a
486 	 *				stop cycle is sent after the
487 	 *				byte is received, and no ack is
488 	 *				sent.
489 	 *
490 	 *	This function receives 8 bits of data from the EEPROM
491 	 *	over the serial link.  It then sends and ack bit, or no
492 	 *	ack and a stop bit.  This function is used to retrieve
493 	 *	data after the address of a byte in the EEPROM has been
494 	 *	sent.
495 	 *
496 	 **************************************************************/
497 
TLan_EeReceiveByte(u16 io_base,u8 * data,int stop)498 static void TLan_EeReceiveByte( u16 io_base, u8 *data, int stop )
499 {
500 	u8  place;
501 	u16 sio;
502 
503 	outw( TLAN_NET_SIO, io_base + TLAN_DIO_ADR );
504 	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
505 	*data = 0;
506 
507 	/* Assume clock is low, tx is enabled; */
508 	TLan_ClearBit( TLAN_NET_SIO_ETXEN, sio );
509 	for ( place = 0x80; place; place >>= 1 ) {
510 		TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
511 		if ( TLan_GetBit( TLAN_NET_SIO_EDATA, sio ) )
512 			*data |= place;
513 		TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio );
514 	}
515 
516 	TLan_SetBit( TLAN_NET_SIO_ETXEN, sio );
517 	if ( ! stop ) {
518 		TLan_ClearBit( TLAN_NET_SIO_EDATA, sio );	/* Ack = 0 */
519 		TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
520 		TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio );
521 	} else {
522 		TLan_SetBit( TLAN_NET_SIO_EDATA, sio );		/* No ack = 1 (?) */
523 		TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
524 		TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio );
525 		TLan_ClearBit( TLAN_NET_SIO_EDATA, sio );	/* STOP, raise data while clock is high */
526 		TLan_SetBit( TLAN_NET_SIO_ECLOK, sio );
527 		TLan_SetBit( TLAN_NET_SIO_EDATA, sio );
528 	}
529 
530 } /* TLan_EeReceiveByte */
531 
532 	/***************************************************************
533 	 *	TLan_EeReadByte
534 	 *
535 	 *	Returns:
536 	 *		No error = 0, else, the stage at which the error
537 	 *		occurred.
538 	 *	Parms:
539 	 *		io_base		The IO port base address for the
540 	 *				TLAN device with the EEPROM to
541 	 *				use.
542 	 *		ee_addr		The address of the byte in the
543 	 *				EEPROM whose contents are to be
544 	 *				retrieved.
545 	 *		data		An address to a char to hold the
546 	 *				data obtained from the EEPROM.
547 	 *
548 	 *	This function reads a byte of information from an byte
549 	 *	cell in the EEPROM.
550 	 *
551 	 **************************************************************/
552 
TLan_EeReadByte(u16 io_base,u8 ee_addr,u8 * data)553 static int TLan_EeReadByte( u16 io_base, u8 ee_addr, u8 *data )
554 {
555 	int err;
556 	unsigned long flags = 0;
557 	int ret=0;
558 
559 	TLan_EeSendStart( io_base );
560 	err = TLan_EeSendByte( io_base, 0xA0, TLAN_EEPROM_ACK );
561 	if (err)
562 	{
563 		ret=1;
564 		goto fail;
565 	}
566 	err = TLan_EeSendByte( io_base, ee_addr, TLAN_EEPROM_ACK );
567 	if (err)
568 	{
569 		ret=2;
570 		goto fail;
571 	}
572 	TLan_EeSendStart( io_base );
573 	err = TLan_EeSendByte( io_base, 0xA1, TLAN_EEPROM_ACK );
574 	if (err)
575 	{
576 		ret=3;
577 		goto fail;
578 	}
579 	TLan_EeReceiveByte( io_base, data, TLAN_EEPROM_STOP );
580 fail:
581 
582 	return ret;
583 
584 } /* TLan_EeReadByte */
585 
586 #if	0
587 /* Not yet converted from Linux driver */
588 /*****************************************************************************
589 ******************************************************************************
590 
591 	ThunderLAN Driver PHY Layer Routines
592 
593 ******************************************************************************
594 *****************************************************************************/
595 
596 	/*********************************************************************
597 	 *	TLan_PhyPrint
598 	 *
599 	 *	Returns:
600 	 *		Nothing
601 	 *	Parms:
602 	 *		dev	A pointer to the device structure of the
603 	 *			TLAN device having the PHYs to be detailed.
604 	 *
605 	 *	This function prints the registers a PHY (aka tranceiver).
606 	 *
607 	 ********************************************************************/
608 
609 void TLan_PhyPrint( struct net_device *dev )
610 {
611 	TLanPrivateInfo *priv = dev->priv;
612 	u16 i, data0, data1, data2, data3, phy;
613 
614 	phy = priv->phy[priv->phyNum];
615 
616 	if ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) {
617 		printk( "TLAN:   Device %s, Unmanaged PHY.\n", dev->name );
618 	} else if ( phy <= TLAN_PHY_MAX_ADDR ) {
619 		printk( "TLAN:   Device %s, PHY 0x%02x.\n", dev->name, phy );
620 		printk( "TLAN:      Off.  +0     +1     +2     +3 \n" );
621                 for ( i = 0; i < 0x20; i+= 4 ) {
622 			printk( "TLAN:      0x%02x", i );
623 			TLan_MiiReadReg( dev, phy, i, &data0 );
624 			printk( " 0x%04hx", data0 );
625 			TLan_MiiReadReg( dev, phy, i + 1, &data1 );
626 			printk( " 0x%04hx", data1 );
627 			TLan_MiiReadReg( dev, phy, i + 2, &data2 );
628 			printk( " 0x%04hx", data2 );
629 			TLan_MiiReadReg( dev, phy, i + 3, &data3 );
630 			printk( " 0x%04hx\n", data3 );
631 		}
632 	} else {
633 		printk( "TLAN:   Device %s, Invalid PHY.\n", dev->name );
634 	}
635 
636 } /* TLan_PhyPrint */
637 
638 	/*********************************************************************
639 	 *	TLan_PhyDetect
640 	 *
641 	 *	Returns:
642 	 *		Nothing
643 	 *	Parms:
644 	 *		dev	A pointer to the device structure of the adapter
645 	 *			for which the PHY needs determined.
646 	 *
647 	 *	So far I've found that adapters which have external PHYs
648 	 *	may also use the internal PHY for part of the functionality.
649 	 *	(eg, AUI/Thinnet).  This function finds out if this TLAN
650 	 *	chip has an internal PHY, and then finds the first external
651 	 *	PHY (starting from address 0) if it exists).
652 	 *
653 	 ********************************************************************/
654 
655 void TLan_PhyDetect( struct net_device *dev )
656 {
657 	TLanPrivateInfo *priv = dev->priv;
658 	u16		control;
659 	u16		hi;
660 	u16		lo;
661 	u32		phy;
662 
663 	if ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) {
664 		priv->phyNum = 0xFFFF;
665 		return;
666 	}
667 
668 	TLan_MiiReadReg( dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi );
669 
670 	if ( hi != 0xFFFF ) {
671 		priv->phy[0] = TLAN_PHY_MAX_ADDR;
672 	} else {
673 		priv->phy[0] = TLAN_PHY_NONE;
674 	}
675 
676 	priv->phy[1] = TLAN_PHY_NONE;
677 	for ( phy = 0; phy <= TLAN_PHY_MAX_ADDR; phy++ ) {
678 		TLan_MiiReadReg( dev, phy, MII_GEN_CTL, &control );
679 		TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &hi );
680 		TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &lo );
681 		if ( ( control != 0xFFFF ) || ( hi != 0xFFFF ) || ( lo != 0xFFFF ) ) {
682 			TLAN_DBG( TLAN_DEBUG_GNRL, "PHY found at %02x %04x %04x %04x\n", phy, control, hi, lo );
683 			if ( ( priv->phy[1] == TLAN_PHY_NONE ) && ( phy != TLAN_PHY_MAX_ADDR ) ) {
684 				priv->phy[1] = phy;
685 			}
686 		}
687 	}
688 
689 	if ( priv->phy[1] != TLAN_PHY_NONE ) {
690 		priv->phyNum = 1;
691 	} else if ( priv->phy[0] != TLAN_PHY_NONE ) {
692 		priv->phyNum = 0;
693 	} else {
694 		printk( "TLAN:  Cannot initialize device, no PHY was found!\n" );
695 	}
696 
697 } /* TLan_PhyDetect */
698 
699 void TLan_PhyPowerDown( struct net_device *dev )
700 {
701 	TLanPrivateInfo	*priv = dev->priv;
702 	u16		value;
703 
704 	TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Powering down PHY(s).\n", dev->name );
705 	value = MII_GC_PDOWN | MII_GC_LOOPBK | MII_GC_ISOLATE;
706 	TLan_MiiSync( dev->base_addr );
707 	TLan_MiiWriteReg( dev, priv->phy[priv->phyNum], MII_GEN_CTL, value );
708 	if ( ( priv->phyNum == 0 ) && ( priv->phy[1] != TLAN_PHY_NONE ) && ( ! ( priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10 ) ) ) {
709 		TLan_MiiSync( dev->base_addr );
710 		TLan_MiiWriteReg( dev, priv->phy[1], MII_GEN_CTL, value );
711 	}
712 
713 	/* Wait for 50 ms and powerup
714 	 * This is abitrary.  It is intended to make sure the
715 	 * tranceiver settles.
716 	 */
717 	TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_PUP );
718 
719 } /* TLan_PhyPowerDown */
720 
721 void TLan_PhyPowerUp( struct net_device *dev )
722 {
723 	TLanPrivateInfo	*priv = dev->priv;
724 	u16		value;
725 
726 	TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Powering up PHY.\n", dev->name );
727 	TLan_MiiSync( dev->base_addr );
728 	value = MII_GC_LOOPBK;
729 	TLan_MiiWriteReg( dev, priv->phy[priv->phyNum], MII_GEN_CTL, value );
730 	TLan_MiiSync(dev->base_addr);
731 	/* Wait for 500 ms and reset the
732 	 * tranceiver.  The TLAN docs say both 50 ms and
733 	 * 500 ms, so do the longer, just in case.
734 	 */
735 	TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_RESET );
736 
737 } /* TLan_PhyPowerUp */
738 
739 void TLan_PhyReset( struct net_device *dev )
740 {
741 	TLanPrivateInfo	*priv = dev->priv;
742 	u16		phy;
743 	u16		value;
744 
745 	phy = priv->phy[priv->phyNum];
746 
747 	TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Reseting PHY.\n", dev->name );
748 	TLan_MiiSync( dev->base_addr );
749 	value = MII_GC_LOOPBK | MII_GC_RESET;
750 	TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, value );
751 	TLan_MiiReadReg( dev, phy, MII_GEN_CTL, &value );
752 	while ( value & MII_GC_RESET ) {
753 		TLan_MiiReadReg( dev, phy, MII_GEN_CTL, &value );
754 	}
755 
756 	/* Wait for 500 ms and initialize.
757 	 * I don't remember why I wait this long.
758 	 * I've changed this to 50ms, as it seems long enough.
759 	 */
760 	TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_START_LINK );
761 
762 } /* TLan_PhyReset */
763 
764 void TLan_PhyStartLink( struct net_device *dev )
765 {
766 	TLanPrivateInfo	*priv = dev->priv;
767 	u16		ability;
768 	u16		control;
769 	u16		data;
770 	u16		phy;
771 	u16		status;
772 	u16		tctl;
773 
774 	phy = priv->phy[priv->phyNum];
775 	TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Trying to activate link.\n", dev->name );
776 	TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
777 	TLan_MiiReadReg( dev, phy, MII_GEN_STS, &ability );
778 
779 	if ( ( status & MII_GS_AUTONEG ) &&
780 	     ( ! priv->aui ) ) {
781 		ability = status >> 11;
782 		if ( priv->speed  == TLAN_SPEED_10 &&
783 		     priv->duplex == TLAN_DUPLEX_HALF) {
784 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0000);
785 		} else if ( priv->speed == TLAN_SPEED_10 &&
786 			    priv->duplex == TLAN_DUPLEX_FULL) {
787 			priv->tlanFullDuplex = TRUE;
788 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0100);
789 		} else if ( priv->speed == TLAN_SPEED_100 &&
790 			    priv->duplex == TLAN_DUPLEX_HALF) {
791 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2000);
792 		} else if ( priv->speed == TLAN_SPEED_100 &&
793 			    priv->duplex == TLAN_DUPLEX_FULL) {
794 			priv->tlanFullDuplex = TRUE;
795 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2100);
796 		} else {
797 
798 			/* Set Auto-Neg advertisement */
799 			TLan_MiiWriteReg( dev, phy, MII_AN_ADV, (ability << 5) | 1);
800 			/* Enablee Auto-Neg */
801 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x1000 );
802 			/* Restart Auto-Neg */
803 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x1200 );
804 			/* Wait for 4 sec for autonegotiation
805 		 	* to complete.  The max spec time is less than this
806 		 	* but the card need additional time to start AN.
807 		 	* .5 sec should be plenty extra.
808 		 	*/
809 			printk( "TLAN: %s: Starting autonegotiation.\n", dev->name );
810 			TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN );
811 			return;
812 		}
813 
814 	}
815 
816 	if ( ( priv->aui ) && ( priv->phyNum != 0 ) ) {
817 		priv->phyNum = 0;
818 		data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN;
819 		TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, data );
820 		TLan_SetTimer( dev, (40*HZ/1000), TLAN_TIMER_PHY_PDOWN );
821 		return;
822 	}  else if ( priv->phyNum == 0 ) {
823         	TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tctl );
824 		if ( priv->aui ) {
825                 	tctl |= TLAN_TC_AUISEL;
826 		} else {
827                 	tctl &= ~TLAN_TC_AUISEL;
828 			control = 0;
829 			if ( priv->duplex == TLAN_DUPLEX_FULL ) {
830 				control |= MII_GC_DUPLEX;
831 				priv->tlanFullDuplex = TRUE;
832 			}
833 			if ( priv->speed == TLAN_SPEED_100 ) {
834 				control |= MII_GC_SPEEDSEL;
835 			}
836        			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, control );
837 		}
838         	TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tctl );
839 	}
840 
841 	/* Wait for 2 sec to give the tranceiver time
842 	 * to establish link.
843 	 */
844 	TLan_SetTimer( dev, (4*HZ), TLAN_TIMER_FINISH_RESET );
845 
846 } /* TLan_PhyStartLink */
847 
848 void TLan_PhyFinishAutoNeg( struct net_device *dev )
849 {
850 	TLanPrivateInfo	*priv = dev->priv;
851 	u16		an_adv;
852 	u16		an_lpa;
853 	u16		data;
854 	u16		mode;
855 	u16		phy;
856 	u16		status;
857 
858 	phy = priv->phy[priv->phyNum];
859 
860 	TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
861 	udelay( 1000 );
862 	TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
863 
864 	if ( ! ( status & MII_GS_AUTOCMPLT ) ) {
865 		/* Wait for 8 sec to give the process
866 		 * more time.  Perhaps we should fail after a while.
867 		 */
868 		 if (!priv->neg_be_verbose++) {
869 			 printk(KERN_INFO "TLAN:  Giving autonegotiation more time.\n");
870 		 	 printk(KERN_INFO "TLAN:  Please check that your adapter has\n");
871 		 	 printk(KERN_INFO "TLAN:  been properly connected to a HUB or Switch.\n");
872 			 printk(KERN_INFO "TLAN:  Trying to establish link in the background...\n");
873 		 }
874 		TLan_SetTimer( dev, (8*HZ), TLAN_TIMER_PHY_FINISH_AN );
875 		return;
876 	}
877 
878 	printk( "TLAN: %s: Autonegotiation complete.\n", dev->name );
879 	TLan_MiiReadReg( dev, phy, MII_AN_ADV, &an_adv );
880 	TLan_MiiReadReg( dev, phy, MII_AN_LPA, &an_lpa );
881 	mode = an_adv & an_lpa & 0x03E0;
882 	if ( mode & 0x0100 ) {
883 		priv->tlanFullDuplex = TRUE;
884 	} else if ( ! ( mode & 0x0080 ) && ( mode & 0x0040 ) ) {
885 		priv->tlanFullDuplex = TRUE;
886 	}
887 
888 	if ( ( ! ( mode & 0x0180 ) ) && ( priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10 ) && ( priv->phyNum != 0 ) ) {
889 		priv->phyNum = 0;
890 		data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN;
891 		TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, data );
892 		TLan_SetTimer( dev, (400*HZ/1000), TLAN_TIMER_PHY_PDOWN );
893 		return;
894 	}
895 
896 	if ( priv->phyNum == 0 ) {
897 		if ( ( priv->duplex == TLAN_DUPLEX_FULL ) || ( an_adv & an_lpa & 0x0040 ) ) {
898 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, MII_GC_AUTOENB | MII_GC_DUPLEX );
899 			printk( "TLAN:  Starting internal PHY with FULL-DUPLEX\n" );
900 		} else {
901 			TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, MII_GC_AUTOENB );
902 			printk( "TLAN:  Starting internal PHY with HALF-DUPLEX\n" );
903 		}
904 	}
905 
906 	/* Wait for 100 ms.  No reason in partiticular.
907 	 */
908 	TLan_SetTimer( dev, (HZ/10), TLAN_TIMER_FINISH_RESET );
909 
910 } /* TLan_PhyFinishAutoNeg */
911 
912 #ifdef MONITOR
913 
914         /*********************************************************************
915         *
916         *      TLan_phyMonitor
917         *
918         *      Returns:
919         *              None
920         *
921         *      Params:
922         *              dev             The device structure of this device.
923         *
924         *
925         *      This function monitors PHY condition by reading the status
926         *      register via the MII bus. This can be used to give info
927         *      about link changes (up/down), and possible switch to alternate
928         *      media.
929         *
930         * ******************************************************************/
931 
932 void TLan_PhyMonitor( struct net_device *dev )
933 {
934 	TLanPrivateInfo *priv = dev->priv;
935 	u16     phy;
936 	u16     phy_status;
937 
938 	phy = priv->phy[priv->phyNum];
939 
940         /* Get PHY status register */
941         TLan_MiiReadReg( dev, phy, MII_GEN_STS, &phy_status );
942 
943         /* Check if link has been lost */
944         if (!(phy_status & MII_GS_LINK)) {
945  	       if (priv->link) {
946 		      priv->link = 0;
947 	              printk(KERN_DEBUG "TLAN: %s has lost link\n", dev->name);
948 	              dev->flags &= ~IFF_RUNNING;
949 		      TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT );
950 		      return;
951 		}
952 	}
953 
954         /* Link restablished? */
955         if ((phy_status & MII_GS_LINK) && !priv->link) {
956  		priv->link = 1;
957         	printk(KERN_DEBUG "TLAN: %s has reestablished link\n", dev->name);
958         	dev->flags |= IFF_RUNNING;
959         }
960 
961 	/* Setup a new monitor */
962 	TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT );
963 }
964 
965 #endif /* MONITOR */
966 
967 /*****************************************************************************
968 ******************************************************************************
969 
970 	ThunderLAN Driver MII Routines
971 
972 	These routines are based on the information in Chap. 2 of the
973 	"ThunderLAN Programmer's Guide", pp. 15-24.
974 
975 ******************************************************************************
976 *****************************************************************************/
977 
978 	/***************************************************************
979 	 *	TLan_MiiReadReg
980 	 *
981 	 *	Returns:
982 	 *		0	if ack received ok
983 	 *		1	otherwise.
984 	 *
985 	 *	Parms:
986 	 *		dev		The device structure containing
987 	 *				The io address and interrupt count
988 	 *				for this device.
989 	 *		phy		The address of the PHY to be queried.
990 	 *		reg		The register whose contents are to be
991 	 *				retreived.
992 	 *		val		A pointer to a variable to store the
993 	 *				retrieved value.
994 	 *
995 	 *	This function uses the TLAN's MII bus to retreive the contents
996 	 *	of a given register on a PHY.  It sends the appropriate info
997 	 *	and then reads the 16-bit register value from the MII bus via
998 	 *	the TLAN SIO register.
999 	 *
1000 	 **************************************************************/
1001 
1002 int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val )
1003 {
1004 	u8	nack;
1005 	u16	sio, tmp;
1006  	u32	i;
1007 	int	err;
1008 	int	minten;
1009 	TLanPrivateInfo *priv = dev->priv;
1010 	unsigned long flags = 0;
1011 
1012 	err = FALSE;
1013 	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
1014 	sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
1015 
1016 	if (!in_irq())
1017 		spin_lock_irqsave(&priv->lock, flags);
1018 
1019 	TLan_MiiSync(dev->base_addr);
1020 
1021 	minten = TLan_GetBit( TLAN_NET_SIO_MINTEN, sio );
1022 	if ( minten )
1023 		TLan_ClearBit(TLAN_NET_SIO_MINTEN, sio);
1024 
1025 	TLan_MiiSendData( dev->base_addr, 0x1, 2 );	/* Start ( 01b ) */
1026 	TLan_MiiSendData( dev->base_addr, 0x2, 2 );	/* Read  ( 10b ) */
1027 	TLan_MiiSendData( dev->base_addr, phy, 5 );	/* Device #      */
1028 	TLan_MiiSendData( dev->base_addr, reg, 5 );	/* Register #    */
1029 
1030 	TLan_ClearBit(TLAN_NET_SIO_MTXEN, sio);		/* Change direction */
1031 
1032 	TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);		/* Clock Idle bit */
1033 	TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
1034 	TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);		/* Wait 300ns */
1035 
1036 	nack = TLan_GetBit(TLAN_NET_SIO_MDATA, sio);	/* Check for ACK */
1037 	TLan_SetBit(TLAN_NET_SIO_MCLK, sio);		/* Finish ACK */
1038 	if (nack) {					/* No ACK, so fake it */
1039 		for (i = 0; i < 16; i++) {
1040 			TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);
1041 			TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
1042 		}
1043 		tmp = 0xffff;
1044 		err = TRUE;
1045 	} else {					/* ACK, so read data */
1046 		for (tmp = 0, i = 0x8000; i; i >>= 1) {
1047 			TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);
1048 			if (TLan_GetBit(TLAN_NET_SIO_MDATA, sio))
1049 				tmp |= i;
1050 			TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
1051 		}
1052 	}
1053 
1054 	TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);		/* Idle cycle */
1055 	TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
1056 
1057 	if ( minten )
1058 		TLan_SetBit(TLAN_NET_SIO_MINTEN, sio);
1059 
1060 	*val = tmp;
1061 
1062 	if (!in_irq())
1063 		spin_unlock_irqrestore(&priv->lock, flags);
1064 
1065 	return err;
1066 
1067 } /* TLan_MiiReadReg */
1068 
1069 	/***************************************************************
1070 	 *	TLan_MiiSendData
1071 	 *
1072 	 *	Returns:
1073 	 *		Nothing
1074 	 *	Parms:
1075 	 *		base_port	The base IO port of the adapter	in
1076 	 *				question.
1077 	 *		dev		The address of the PHY to be queried.
1078 	 *		data		The value to be placed on the MII bus.
1079 	 *		num_bits	The number of bits in data that are to
1080 	 *				be placed on the MII bus.
1081 	 *
1082 	 *	This function sends on sequence of bits on the MII
1083 	 *	configuration bus.
1084 	 *
1085 	 **************************************************************/
1086 
1087 void TLan_MiiSendData( u16 base_port, u32 data, unsigned num_bits )
1088 {
1089 	u16 sio;
1090 	u32 i;
1091 
1092 	if ( num_bits == 0 )
1093 		return;
1094 
1095 	outw( TLAN_NET_SIO, base_port + TLAN_DIO_ADR );
1096 	sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO;
1097 	TLan_SetBit( TLAN_NET_SIO_MTXEN, sio );
1098 
1099 	for ( i = ( 0x1 << ( num_bits - 1 ) ); i; i >>= 1 ) {
1100 		TLan_ClearBit( TLAN_NET_SIO_MCLK, sio );
1101 		(void) TLan_GetBit( TLAN_NET_SIO_MCLK, sio );
1102 		if ( data & i )
1103 			TLan_SetBit( TLAN_NET_SIO_MDATA, sio );
1104 		else
1105 			TLan_ClearBit( TLAN_NET_SIO_MDATA, sio );
1106 		TLan_SetBit( TLAN_NET_SIO_MCLK, sio );
1107 		(void) TLan_GetBit( TLAN_NET_SIO_MCLK, sio );
1108 	}
1109 
1110 } /* TLan_MiiSendData */
1111 
1112 	/***************************************************************
1113 	 *	TLan_MiiSync
1114 	 *
1115 	 *	Returns:
1116 	 *		Nothing
1117 	 *	Parms:
1118 	 *		base_port	The base IO port of the adapter in
1119 	 *				question.
1120 	 *
1121 	 *	This functions syncs all PHYs in terms of the MII configuration
1122 	 *	bus.
1123 	 *
1124 	 **************************************************************/
1125 
1126 void TLan_MiiSync( u16 base_port )
1127 {
1128 	int i;
1129 	u16 sio;
1130 
1131 	outw( TLAN_NET_SIO, base_port + TLAN_DIO_ADR );
1132 	sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO;
1133 
1134 	TLan_ClearBit( TLAN_NET_SIO_MTXEN, sio );
1135 	for ( i = 0; i < 32; i++ ) {
1136 		TLan_ClearBit( TLAN_NET_SIO_MCLK, sio );
1137 		TLan_SetBit( TLAN_NET_SIO_MCLK, sio );
1138 	}
1139 
1140 } /* TLan_MiiSync */
1141 
1142 	/***************************************************************
1143 	 *	TLan_MiiWriteReg
1144 	 *
1145 	 *	Returns:
1146 	 *		Nothing
1147 	 *	Parms:
1148 	 *		dev		The device structure for the device
1149 	 *				to write to.
1150 	 *		phy		The address of the PHY to be written to.
1151 	 *		reg		The register whose contents are to be
1152 	 *				written.
1153 	 *		val		The value to be written to the register.
1154 	 *
1155 	 *	This function uses the TLAN's MII bus to write the contents of a
1156 	 *	given register on a PHY.  It sends the appropriate info and then
1157 	 *	writes the 16-bit register value from the MII configuration bus
1158 	 *	via the TLAN SIO register.
1159 	 *
1160 	 **************************************************************/
1161 
1162 void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val )
1163 {
1164 	u16	sio;
1165 	int	minten;
1166 	unsigned long flags = 0;
1167 	TLanPrivateInfo *priv = dev->priv;
1168 
1169 	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
1170 	sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
1171 
1172 	if (!in_irq())
1173 		spin_lock_irqsave(&priv->lock, flags);
1174 
1175 	TLan_MiiSync( dev->base_addr );
1176 
1177 	minten = TLan_GetBit( TLAN_NET_SIO_MINTEN, sio );
1178 	if ( minten )
1179 		TLan_ClearBit( TLAN_NET_SIO_MINTEN, sio );
1180 
1181 	TLan_MiiSendData( dev->base_addr, 0x1, 2 );	/* Start ( 01b ) */
1182 	TLan_MiiSendData( dev->base_addr, 0x1, 2 );	/* Write ( 01b ) */
1183 	TLan_MiiSendData( dev->base_addr, phy, 5 );	/* Device #      */
1184 	TLan_MiiSendData( dev->base_addr, reg, 5 );	/* Register #    */
1185 
1186 	TLan_MiiSendData( dev->base_addr, 0x2, 2 );	/* Send ACK */
1187 	TLan_MiiSendData( dev->base_addr, val, 16 );	/* Send Data */
1188 
1189 	TLan_ClearBit( TLAN_NET_SIO_MCLK, sio );	/* Idle cycle */
1190 	TLan_SetBit( TLAN_NET_SIO_MCLK, sio );
1191 
1192 	if ( minten )
1193 		TLan_SetBit( TLAN_NET_SIO_MINTEN, sio );
1194 
1195 	if (!in_irq())
1196 		spin_unlock_irqrestore(&priv->lock, flags);
1197 
1198 } /* TLan_MiiWriteReg */
1199 #endif
1200 
1201 /**************************************************************************
1202 RESET - Reset adapter
1203 ***************************************************************************/
skel_reset(struct nic * nic)1204 static void skel_reset(struct nic *nic)
1205 {
1206 	/* put the card in its initial state */
1207 }
1208 
1209 /**************************************************************************
1210 POLL - Wait for a frame
1211 ***************************************************************************/
skel_poll(struct nic * nic)1212 static int skel_poll(struct nic *nic)
1213 {
1214 	/* return true if there's an ethernet packet ready to read */
1215 	/* nic->packet should contain data on return */
1216 	/* nic->packetlen should contain length of data */
1217 	return (0);	/* initially as this is called to flush the input */
1218 }
1219 
1220 /**************************************************************************
1221 TRANSMIT - Transmit a frame
1222 ***************************************************************************/
skel_transmit(struct nic * nic,const char * d,unsigned int t,unsigned int s,const char * p)1223 static void skel_transmit(
1224 	struct nic *nic,
1225 	const char *d,			/* Destination */
1226 	unsigned int t,			/* Type */
1227 	unsigned int s,			/* size */
1228 	const char *p)			/* Packet */
1229 {
1230 	/* send the packet to destination */
1231 }
1232 
1233 /**************************************************************************
1234 DISABLE - Turn off ethernet interface
1235 ***************************************************************************/
skel_disable(struct nic * nic)1236 static void skel_disable(struct nic *nic)
1237 {
1238 }
1239 
1240 /**************************************************************************
1241 PROBE - Look for an adapter, this routine's visible to the outside
1242 You should omit the last argument struct pci_device * for a non-PCI NIC
1243 ***************************************************************************/
tlan_probe(struct nic * nic,unsigned short * probe_addrs,struct pci_device * p)1244 struct nic *tlan_probe(struct nic *nic, unsigned short *probe_addrs,
1245 	struct pci_device *p)
1246 {
1247 	/* if probe_addrs is 0, then routine can use a hardwired default */
1248 	/* if board found */
1249 	{
1250 		/* point to NIC specific routines */
1251 		nic->reset = skel_reset;
1252 		nic->poll = skel_poll;
1253 		nic->transmit = skel_transmit;
1254 		nic->disable = skel_disable;
1255 		return nic;
1256 	}
1257 	/* else */
1258 	return 0;
1259 }
1260 
1261 #if	0
1262 #ifndef TLAN_H
1263 #define TLAN_H
1264 /********************************************************************
1265  *
1266  *  Linux ThunderLAN Driver
1267  *
1268  *  tlan.h
1269  *  by James Banks
1270  *
1271  *  (C) 1997-1998 Caldera, Inc.
1272  *  (C) 1999-2001 Torben Mathiasen
1273  *
1274  *  This software may be used and distributed according to the terms
1275  *  of the GNU General Public License, incorporated herein by reference.
1276  *
1277  ** This file is best viewed/edited with tabstop=4, colums>=132
1278  *
1279  *
1280  *  Dec 10, 1999	Torben Mathiasen <torben.mathiasen@compaq.com>
1281  *			New Maintainer
1282  *
1283  ********************************************************************/
1284 
1285 #include <asm/io.h>
1286 #include <asm/types.h>
1287 #include <linux/netdevice.h>
1288 
1289 #define FALSE			0
1290 #define TRUE			1
1291 
1292 #define TX_TIMEOUT		(10*HZ)	 /* We need time for auto-neg */
1293 
1294 typedef struct tlan_adapter_entry {
1295 	u16	vendorId;
1296 	u16	deviceId;
1297 	char	*deviceLabel;
1298 	u32	flags;
1299 	u16	addrOfs;
1300 } TLanAdapterEntry;
1301 
1302 	/*****************************************************************
1303 	 * EISA Definitions
1304 	 *
1305 	 ****************************************************************/
1306 
1307 #define EISA_ID      0xc80   /* EISA ID Registers */
1308 #define EISA_ID0     0xc80   /* EISA ID Register 0 */
1309 #define EISA_ID1     0xc81   /* EISA ID Register 1 */
1310 #define EISA_ID2     0xc82   /* EISA ID Register 2 */
1311 #define EISA_ID3     0xc83   /* EISA ID Register 3 */
1312 #define EISA_CR      0xc84   /* EISA Control Register */
1313 #define EISA_REG0    0xc88   /* EISA Configuration Register 0 */
1314 #define EISA_REG1    0xc89   /* EISA Configuration Register 1 */
1315 #define EISA_REG2    0xc8a   /* EISA Configuration Register 2 */
1316 #define EISA_REG3    0xc8f   /* EISA Configuration Register 3 */
1317 #define EISA_APROM   0xc90   /* Ethernet Address PROM */
1318 
1319 	/*****************************************************************
1320 	 * Rx/Tx List Definitions
1321 	 *
1322 	 ****************************************************************/
1323 
1324 typedef struct tlan_buffer_ref_tag {
1325 	u32	count;
1326 	u32	address;
1327 } TLanBufferRef;
1328 
1329 typedef struct tlan_list_tag {
1330 	u32		forward;
1331 	u16		cStat;
1332 	u16		frameSize;
1333 	TLanBufferRef	buffer[TLAN_BUFFERS_PER_LIST];
1334 } TLanList;
1335 
1336 typedef u8 TLanBuffer[TLAN_MAX_FRAME_SIZE];
1337 
1338 	/*****************************************************************
1339 	 * TLAN Private Information Structure
1340 	 *
1341 	 ****************************************************************/
1342 
1343 typedef struct tlan_private_tag {
1344 	struct net_device       *nextDevice;
1345 	void			*dmaStorage;
1346 	u8			*padBuffer;
1347 	TLanList                *rxList;
1348 	u8			*rxBuffer;
1349 	u32                     rxHead;
1350 	u32                     rxTail;
1351 	u32			rxEocCount;
1352 	TLanList                *txList;
1353 	u8			*txBuffer;
1354 	u32                     txHead;
1355 	u32                     txInProgress;
1356 	u32                     txTail;
1357 	u32			txBusyCount;
1358 	u32                     phyOnline;
1359 	u32			timerSetAt;
1360 	u32			timerType;
1361 	struct timer_list	timer;
1362 	struct net_device_stats	stats;
1363 	struct board		*adapter;
1364 	u32			adapterRev;
1365 	u32			aui;
1366 	u32			debug;
1367 	u32			duplex;
1368 	u32			phy[2];
1369 	u32			phyNum;
1370 	u32			speed;
1371 	u8			tlanRev;
1372 	u8			tlanFullDuplex;
1373 	char                    devName[8];
1374 	spinlock_t		lock;
1375 	u8			link;
1376 	u8			is_eisa;
1377 	struct tq_struct	tlan_tqueue;
1378 	u8			neg_be_verbose;
1379 } TLanPrivateInfo;
1380 
1381 #define 	TLAN_HC_GO		0x80000000
1382 #define		TLAN_HC_STOP		0x40000000
1383 #define		TLAN_HC_ACK		0x20000000
1384 #define		TLAN_HC_CS_MASK		0x1FE00000
1385 #define		TLAN_HC_EOC		0x00100000
1386 #define		TLAN_HC_RT		0x00080000
1387 #define		TLAN_HC_NES		0x00040000
1388 #define		TLAN_HC_AD_RST		0x00008000
1389 #define		TLAN_HC_LD_TMR		0x00004000
1390 #define		TLAN_HC_LD_THR		0x00002000
1391 #define		TLAN_HC_REQ_INT		0x00001000
1392 #define		TLAN_HC_INT_OFF		0x00000800
1393 #define		TLAN_HC_INT_ON		0x00000400
1394 #define		TLAN_HC_AC_MASK		0x000000FF
1395 #define		TLAN_DA_ADR_INC		0x8000
1396 #define		TLAN_DA_RAM_ADR		0x4000
1397 #define		TLAN_HI_IV_MASK		0x1FE0
1398 #define		TLAN_HI_IT_MASK		0x001C
1399 
1400 #define		TLAN_NET_CMD_NRESET	0x80
1401 #define		TLAN_NET_CMD_NWRAP	0x40
1402 #define		TLAN_NET_CMD_CSF	0x20
1403 #define		TLAN_NET_CMD_CAF	0x10
1404 #define		TLAN_NET_CMD_NOBRX	0x08
1405 #define		TLAN_NET_CMD_DUPLEX	0x04
1406 #define		TLAN_NET_CMD_TRFRAM	0x02
1407 #define		TLAN_NET_CMD_TXPACE	0x01
1408 #define 	TLAN_NET_SIO_MINTEN	0x80
1409 #define		TLAN_NET_SIO_ECLOK	0x40
1410 #define		TLAN_NET_SIO_ETXEN	0x20
1411 #define		TLAN_NET_SIO_EDATA	0x10
1412 #define		TLAN_NET_SIO_NMRST	0x08
1413 #define		TLAN_NET_SIO_MCLK	0x04
1414 #define		TLAN_NET_SIO_MTXEN	0x02
1415 #define		TLAN_NET_SIO_MDATA	0x01
1416 #define		TLAN_NET_STS_MIRQ	0x80
1417 #define		TLAN_NET_STS_HBEAT	0x40
1418 #define		TLAN_NET_STS_TXSTOP	0x20
1419 #define		TLAN_NET_STS_RXSTOP	0x10
1420 #define		TLAN_NET_STS_RSRVD	0x0F
1421 #define		TLAN_NET_MASK_MASK7	0x80
1422 #define		TLAN_NET_MASK_MASK6	0x40
1423 #define		TLAN_NET_MASK_MASK5	0x20
1424 #define		TLAN_NET_MASK_MASK4	0x10
1425 #define		TLAN_NET_MASK_RSRVD	0x0F
1426 #define 	TLAN_NET_CFG_RCLK	0x8000
1427 #define		TLAN_NET_CFG_TCLK	0x4000
1428 #define		TLAN_NET_CFG_BIT	0x2000
1429 #define		TLAN_NET_CFG_RXCRC	0x1000
1430 #define		TLAN_NET_CFG_PEF	0x0800
1431 #define		TLAN_NET_CFG_1FRAG	0x0400
1432 #define		TLAN_NET_CFG_1CHAN	0x0200
1433 #define		TLAN_NET_CFG_MTEST	0x0100
1434 #define		TLAN_NET_CFG_PHY_EN	0x0080
1435 #define		TLAN_NET_CFG_MSMASK	0x007F
1436 #define		TLAN_LED_ACT		0x10
1437 #define		TLAN_LED_LINK		0x01
1438 #define		TLAN_ID_TX_EOC		0x04
1439 #define		TLAN_ID_RX_EOF		0x02
1440 #define		TLAN_ID_RX_EOC		0x01
1441 
1442 #define CIRC_INC( a, b ) if ( ++a >= b ) a = 0
1443 
1444 #ifdef I_LIKE_A_FAST_HASH_FUNCTION
1445 /* given 6 bytes, view them as 8 6-bit numbers and return the XOR of those */
1446 /* the code below is about seven times as fast as the original code */
1447 inline u32 TLan_HashFunc( u8 *a )
1448 {
1449         u8     hash;
1450 
1451         hash = (a[0]^a[3]);             /* & 077 */
1452         hash ^= ((a[0]^a[3])>>6);       /* & 003 */
1453         hash ^= ((a[1]^a[4])<<2);       /* & 074 */
1454         hash ^= ((a[1]^a[4])>>4);       /* & 017 */
1455         hash ^= ((a[2]^a[5])<<4);       /* & 060 */
1456         hash ^= ((a[2]^a[5])>>2);       /* & 077 */
1457 
1458         return (hash & 077);
1459 }
1460 
1461 #else /* original code */
1462 
1463 inline	u32	xor( u32 a, u32 b )
1464 {
1465 	return ( ( a && ! b ) || ( ! a && b ) );
1466 }
1467 #define XOR8( a, b, c, d, e, f, g, h )	xor( a, xor( b, xor( c, xor( d, xor( e, xor( f, xor( g, h ) ) ) ) ) ) )
1468 #define DA( a, bit )					( ( (u8) a[bit/8] ) & ( (u8) ( 1 << bit%8 ) ) )
1469 
1470 inline u32 TLan_HashFunc( u8 *a )
1471 {
1472 	u32	hash;
1473 
1474 	hash  = XOR8( DA(a,0), DA(a, 6), DA(a,12), DA(a,18), DA(a,24), DA(a,30), DA(a,36), DA(a,42) );
1475 	hash |= XOR8( DA(a,1), DA(a, 7), DA(a,13), DA(a,19), DA(a,25), DA(a,31), DA(a,37), DA(a,43) ) << 1;
1476 	hash |= XOR8( DA(a,2), DA(a, 8), DA(a,14), DA(a,20), DA(a,26), DA(a,32), DA(a,38), DA(a,44) ) << 2;
1477 	hash |= XOR8( DA(a,3), DA(a, 9), DA(a,15), DA(a,21), DA(a,27), DA(a,33), DA(a,39), DA(a,45) ) << 3;
1478 	hash |= XOR8( DA(a,4), DA(a,10), DA(a,16), DA(a,22), DA(a,28), DA(a,34), DA(a,40), DA(a,46) ) << 4;
1479 	hash |= XOR8( DA(a,5), DA(a,11), DA(a,17), DA(a,23), DA(a,29), DA(a,35), DA(a,41), DA(a,47) ) << 5;
1480 
1481 	return hash;
1482 
1483 }
1484 
1485 #endif /* I_LIKE_A_FAST_HASH_FUNCTION */
1486 #endif
1487 /*******************************************************************************
1488  *
1489  *  Linux ThunderLAN Driver
1490  *
1491  *  tlan.c
1492  *  by James Banks
1493  *
1494  *  (C) 1997-1998 Caldera, Inc.
1495  *  (C) 1998 James Banks
1496  *  (C) 1999-2001 Torben Mathiasen
1497  *
1498  *  This software may be used and distributed according to the terms
1499  *  of the GNU General Public License, incorporated herein by reference.
1500  *
1501  ** This file is best viewed/edited with columns>=132.
1502  *
1503  ** Useful (if not required) reading:
1504  *
1505  *		Texas Instruments, ThunderLAN Programmer's Guide,
1506  *			TI Literature Number SPWU013A
1507  *			available in PDF format from www.ti.com
1508  *		Level One, LXT901 and LXT970 Data Sheets
1509  *			available in PDF format from www.level1.com
1510  *		National Semiconductor, DP83840A Data Sheet
1511  *			available in PDF format from www.national.com
1512  *		Microchip Technology, 24C01A/02A/04A Data Sheet
1513  *			available in PDF format from www.microchip.com
1514  *
1515  * Change History
1516  *
1517  *	Tigran Aivazian <tigran@sco.com>:	TLan_PciProbe() now uses
1518  *						new PCI BIOS interface.
1519  *	Alan Cox	<alan@redhat.com>:	Fixed the out of memory
1520  *						handling.
1521  *
1522  *	Torben Mathiasen <torben.mathiasen@compaq.com> New Maintainer!
1523  *
1524  *	v1.1 Dec 20, 1999    - Removed linux version checking
1525  *			       Patch from Tigran Aivazian.
1526  *			     - v1.1 includes Alan's SMP updates.
1527  *			     - We still have problems on SMP though,
1528  *			       but I'm looking into that.
1529  *
1530  *	v1.2 Jan 02, 2000    - Hopefully fixed the SMP deadlock.
1531  *			     - Removed dependency of HZ being 100.
1532  *			     - We now allow higher priority timers to
1533  *			       overwrite timers like TLAN_TIMER_ACTIVITY
1534  *			       Patch from John Cagle <john.cagle@compaq.com>.
1535  *			     - Fixed a few compiler warnings.
1536  *
1537  *	v1.3 Feb 04, 2000    - Fixed the remaining HZ issues.
1538  *			     - Removed call to pci_present().
1539  *			     - Removed SA_INTERRUPT flag from irq handler.
1540  *			     - Added __init and __initdata to reduce resisdent
1541  *			       code size.
1542  *			     - Driver now uses module_init/module_exit.
1543  *			     - Rewrote init_module and tlan_probe to
1544  *			       share a lot more code. We now use tlan_probe
1545  *			       with builtin and module driver.
1546  *			     - Driver ported to new net API.
1547  *			     - tlan.txt has been reworked to reflect current
1548  *			       driver (almost)
1549  *			     - Other minor stuff
1550  *
1551  *	v1.4 Feb 10, 2000    - Updated with more changes required after Dave's
1552  *	                       network cleanup in 2.3.43pre7 (Tigran & myself)
1553  *	                     - Minor stuff.
1554  *
1555  *	v1.5 March 22, 2000  - Fixed another timer bug that would hang the driver
1556  *			       if no cable/link were present.
1557  *			     - Cosmetic changes.
1558  *			     - TODO: Port completely to new PCI/DMA API
1559  *			     	     Auto-Neg fallback.
1560  *
1561  * 	v1.6 April 04, 2000  - Fixed driver support for kernel-parameters. Haven't
1562  * 			       tested it though, as the kernel support is currently
1563  * 			       broken (2.3.99p4p3).
1564  * 			     - Updated tlan.txt accordingly.
1565  * 			     - Adjusted minimum/maximum frame length.
1566  * 			     - There is now a TLAN website up at
1567  * 			       http://tlan.kernel.dk
1568  *
1569  * 	v1.7 April 07, 2000  - Started to implement custom ioctls. Driver now
1570  * 			       reports PHY information when used with Donald
1571  * 			       Beckers userspace MII diagnostics utility.
1572  *
1573  * 	v1.8 April 23, 2000  - Fixed support for forced speed/duplex settings.
1574  * 			     - Added link information to Auto-Neg and forced
1575  * 			       modes. When NIC operates with auto-neg the driver
1576  * 			       will report Link speed & duplex modes as well as
1577  * 			       link partner abilities. When forced link is used,
1578  * 			       the driver will report status of the established
1579  * 			       link.
1580  * 			       Please read tlan.txt for additional information.
1581  * 			     - Removed call to check_region(), and used
1582  * 			       return value of request_region() instead.
1583  *
1584  *	v1.8a May 28, 2000   - Minor updates.
1585  *
1586  *	v1.9 July 25, 2000   - Fixed a few remaining Full-Duplex issues.
1587  *	                     - Updated with timer fixes from Andrew Morton.
1588  *	                     - Fixed module race in TLan_Open.
1589  *	                     - Added routine to monitor PHY status.
1590  *	                     - Added activity led support for Proliant devices.
1591  *
1592  *	v1.10 Aug 30, 2000   - Added support for EISA based tlan controllers
1593  *			       like the Compaq NetFlex3/E.
1594  *			     - Rewrote tlan_probe to better handle multiple
1595  *			       bus probes. Probing and device setup is now
1596  *			       done through TLan_Probe and TLan_init_one. Actual
1597  *			       hardware probe is done with kernel API and
1598  *			       TLan_EisaProbe.
1599  *			     - Adjusted debug information for probing.
1600  *			     - Fixed bug that would cause general debug information
1601  *			       to be printed after driver removal.
1602  *			     - Added transmit timeout handling.
1603  *			     - Fixed OOM return values in tlan_probe.
1604  *			     - Fixed possible mem leak in tlan_exit
1605  *			       (now tlan_remove_one).
1606  *			     - Fixed timer bug in TLan_phyMonitor.
1607  *			     - This driver version is alpha quality, please
1608  *			       send me any bug issues you may encounter.
1609  *
1610  *	v1.11 Aug 31, 2000   - Do not try to register irq 0 if no irq line was
1611  *			       set for EISA cards.
1612  *			     - Added support for NetFlex3/E with nibble-rate
1613  *			       10Base-T PHY. This is untestet as I haven't got
1614  *			       one of these cards.
1615  *			     - Fixed timer being added twice.
1616  *			     - Disabled PhyMonitoring by default as this is
1617  *			       work in progress. Define MONITOR to enable it.
1618  *			     - Now we don't display link info with PHYs that
1619  *			       doesn't support it (level1).
1620  *			     - Incresed tx_timeout beacuse of auto-neg.
1621  *			     - Adjusted timers for forced speeds.
1622  *
1623  *	v1.12 Oct 12, 2000   - Minor fixes (memleak, init, etc.)
1624  *
1625  * 	v1.13 Nov 28, 2000   - Stop flooding console with auto-neg issues
1626  * 			       when link can't be established.
1627  *			     - Added the bbuf option as a kernel parameter.
1628  *			     - Fixed ioaddr probe bug.
1629  *			     - Fixed stupid deadlock with MII interrupts.
1630  *			     - Added support for speed/duplex selection with
1631  *			       multiple nics.
1632  *			     - Added partly fix for TX Channel lockup with
1633  *			       TLAN v1.0 silicon. This needs to be investigated
1634  *			       further.
1635  *
1636  * 	v1.14 Dec 16, 2000   - Added support for servicing multiple frames per.
1637  * 			       interrupt. Thanks goes to
1638  * 			       Adam Keys <adam@ti.com>
1639  * 			       Denis Beaudoin <dbeaudoin@ti.com>
1640  * 			       for providing the patch.
1641  * 			     - Fixed auto-neg output when using multiple
1642  * 			       adapters.
1643  * 			     - Converted to use new taskq interface.
1644  *
1645  * 	v1.14a Jan 6, 2001   - Minor adjustments (spinlocks, etc.)
1646  *
1647  *******************************************************************************/
1648 
1649 
1650 #include <linux/module.h>
1651 
1652 #include "tlan.h"
1653 
1654 #include <linux/init.h>
1655 #include <linux/ioport.h>
1656 #include <linux/pci.h>
1657 #include <linux/etherdevice.h>
1658 #include <linux/delay.h>
1659 #include <linux/spinlock.h>
1660 #include <linux/mii.h>
1661 
1662 typedef u32 (TLanIntVectorFunc)( struct net_device *, u16 );
1663 
1664 /* For removing EISA devices */
1665 static	struct net_device	*TLan_Eisa_Devices;
1666 
1667 static	int		TLanDevicesInstalled;
1668 
1669 /* Set speed, duplex and aui settings */
1670 static  int aui[MAX_TLAN_BOARDS];
1671 static  int duplex[MAX_TLAN_BOARDS];
1672 static  int speed[MAX_TLAN_BOARDS];
1673 static  int boards_found;
1674 
1675 MODULE_AUTHOR("Maintainer: Torben Mathiasen <torben.mathiasen@compaq.com>");
1676 MODULE_DESCRIPTION("Driver for TI ThunderLAN based ethernet PCI adapters");
1677 MODULE_LICENSE("GPL");
1678 
1679 MODULE_PARM(aui, "1-" __MODULE_STRING(MAX_TLAN_BOARDS) "i");
1680 MODULE_PARM(duplex, "1-" __MODULE_STRING(MAX_TLAN_BOARDS) "i");
1681 MODULE_PARM(speed, "1-" __MODULE_STRING(MAX_TLAN_BOARDS) "i");
1682 MODULE_PARM(debug, "i");
1683 MODULE_PARM(bbuf, "i");
1684 MODULE_PARM_DESC(aui, "ThunderLAN use AUI port(s) (0-1)");
1685 MODULE_PARM_DESC(duplex, "ThunderLAN duplex setting(s) (0-default, 1-half, 2-full)");
1686 MODULE_PARM_DESC(speed, "ThunderLAN port speen setting(s) (0,10,100)");
1687 MODULE_PARM_DESC(debug, "ThunderLAN debug mask");
1688 MODULE_PARM_DESC(bbuf, "ThunderLAN use big buffer (0-1)");
1689 EXPORT_NO_SYMBOLS;
1690 
1691 /* Define this to enable Link beat monitoring */
1692 #undef MONITOR
1693 
1694 /* Turn on debugging. See linux/Documentation/networking/tlan.txt for details */
1695 static  int		debug;
1696 
1697 static	int		bbuf;
1698 static	u8		*TLanPadBuffer;
1699 static	char		TLanSignature[] = "TLAN";
1700 static const char tlan_banner[] = "ThunderLAN driver v1.14a\n";
1701 static int tlan_have_pci;
1702 static int tlan_have_eisa;
1703 
1704 const char *media[] = {
1705 	"10BaseT-HD ", "10BaseT-FD ","100baseTx-HD ",
1706 	"100baseTx-FD", "100baseT4", 0
1707 };
1708 
1709 int media_map[] = { 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,};
1710 
1711 static struct board {
1712 	const char	*deviceLabel;
1713 	u32	   	flags;
1714 	u16	   	addrOfs;
1715 } board_info[] __devinitdata = {
1716 	{ "Compaq Netelligent 10 T PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
1717 	{ "Compaq Netelligent 10/100 TX PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
1718 	{ "Compaq Integrated NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
1719 	{ "Compaq NetFlex-3/P", TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
1720 	{ "Compaq NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
1721 	{ "Compaq Netelligent Integrated 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
1722 	{ "Compaq Netelligent Dual 10/100 TX PCI UTP", TLAN_ADAPTER_NONE, 0x83 },
1723 	{ "Compaq Netelligent 10/100 TX Embedded UTP", TLAN_ADAPTER_NONE, 0x83 },
1724 	{ "Olicom OC-2183/2185", TLAN_ADAPTER_USE_INTERN_10, 0x83 },
1725 	{ "Olicom OC-2325", TLAN_ADAPTER_UNMANAGED_PHY, 0xF8 },
1726 	{ "Olicom OC-2326", TLAN_ADAPTER_USE_INTERN_10, 0xF8 },
1727 	{ "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
1728 	{ "Compaq Netelligent 10 T/2 PCI UTP/Coax", TLAN_ADAPTER_NONE, 0x83 },
1729 	{ "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED | 	/* EISA card */
1730 	                        TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
1731 	{ "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */
1732 };
1733 
1734 static struct pci_device_id tlan_pci_tbl[] __devinitdata = {
1735 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL10,
1736 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
1737 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100,
1738 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
1739 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3I,
1740 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
1741 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_THUNDER,
1742 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
1743 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3B,
1744 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
1745 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100PI,
1746 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
1747 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100D,
1748 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
1749 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100I,
1750 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
1751 	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2183,
1752 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
1753 	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2325,
1754 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
1755 	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326,
1756 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
1757 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100,
1758 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
1759 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_T2,
1760 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
1761 	{ 0,}
1762 };
1763 MODULE_DEVICE_TABLE(pci, tlan_pci_tbl);
1764 
1765 static void	TLan_EisaProbe( void );
1766 static void	TLan_Eisa_Cleanup( void );
1767 static int      TLan_Init( struct net_device * );
1768 static int	TLan_Open( struct net_device *dev );
1769 static int	TLan_StartTx( struct sk_buff *, struct net_device *);
1770 static void	TLan_HandleInterrupt( int, void *, struct pt_regs *);
1771 static int	TLan_Close( struct net_device *);
1772 static struct	net_device_stats *TLan_GetStats( struct net_device *);
1773 static void	TLan_SetMulticastList( struct net_device *);
1774 static int	TLan_ioctl( struct net_device *dev, struct ifreq *rq, int cmd);
1775 static int      TLan_probe1( struct pci_dev *pdev, long ioaddr, int irq, int rev, const struct pci_device_id *ent);
1776 static void	TLan_tx_timeout( struct net_device *dev);
1777 static int 	tlan_init_one( struct pci_dev *pdev, const struct pci_device_id *ent);
1778 
1779 static u32	TLan_HandleInvalid( struct net_device *, u16 );
1780 static u32	TLan_HandleTxEOF( struct net_device *, u16 );
1781 static u32	TLan_HandleStatOverflow( struct net_device *, u16 );
1782 static u32	TLan_HandleRxEOF( struct net_device *, u16 );
1783 static u32	TLan_HandleDummy( struct net_device *, u16 );
1784 static u32	TLan_HandleTxEOC( struct net_device *, u16 );
1785 static u32	TLan_HandleStatusCheck( struct net_device *, u16 );
1786 static u32	TLan_HandleRxEOC( struct net_device *, u16 );
1787 
1788 static void	TLan_Timer( unsigned long );
1789 
1790 static void	TLan_ResetLists( struct net_device * );
1791 static void	TLan_FreeLists( struct net_device * );
1792 static void	TLan_PrintDio( u16 );
1793 static void	TLan_PrintList( TLanList *, char *, int );
1794 static void	TLan_ReadAndClearStats( struct net_device *, int );
1795 static void	TLan_ResetAdapter( struct net_device * );
1796 static void	TLan_FinishReset( struct net_device * );
1797 static void	TLan_SetMac( struct net_device *, int areg, char *mac );
1798 
1799 static void	TLan_PhyPrint( struct net_device * );
1800 static void	TLan_PhyDetect( struct net_device * );
1801 static void	TLan_PhyPowerDown( struct net_device * );
1802 static void	TLan_PhyPowerUp( struct net_device * );
1803 static void	TLan_PhyReset( struct net_device * );
1804 static void	TLan_PhyStartLink( struct net_device * );
1805 static void	TLan_PhyFinishAutoNeg( struct net_device * );
1806 #ifdef MONITOR
1807 static void     TLan_PhyMonitor( struct net_device * );
1808 #endif
1809 
1810 /*
1811 static int	TLan_PhyNop( struct net_device * );
1812 static int	TLan_PhyInternalCheck( struct net_device * );
1813 static int	TLan_PhyInternalService( struct net_device * );
1814 static int	TLan_PhyDp83840aCheck( struct net_device * );
1815 */
1816 
1817 static int	TLan_MiiReadReg( struct net_device *, u16, u16, u16 * );
1818 static void	TLan_MiiSendData( u16, u32, unsigned );
1819 static void	TLan_MiiSync( u16 );
1820 static void	TLan_MiiWriteReg( struct net_device *, u16, u16, u16 );
1821 
1822 static void	TLan_EeSendStart( u16 );
1823 static int	TLan_EeSendByte( u16, u8, int );
1824 static void	TLan_EeReceiveByte( u16, u8 *, int );
1825 static int	TLan_EeReadByte( struct net_device *, u8, u8 * );
1826 
1827 static TLanIntVectorFunc *TLanIntVector[TLAN_INT_NUMBER_OF_INTS] = {
1828 	TLan_HandleInvalid,
1829 	TLan_HandleTxEOF,
1830 	TLan_HandleStatOverflow,
1831 	TLan_HandleRxEOF,
1832 	TLan_HandleDummy,
1833 	TLan_HandleTxEOC,
1834 	TLan_HandleStatusCheck,
1835 	TLan_HandleRxEOC
1836 };
1837 
1838 static inline void
1839 TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type )
1840 {
1841 	TLanPrivateInfo *priv = dev->priv;
1842 	unsigned long flags = 0;
1843 
1844 	if (!in_irq())
1845 		spin_lock_irqsave(&priv->lock, flags);
1846 	if ( priv->timer.function != NULL &&
1847 		priv->timerType != TLAN_TIMER_ACTIVITY ) {
1848 		if (!in_irq())
1849 			spin_unlock_irqrestore(&priv->lock, flags);
1850 		return;
1851 	}
1852 	priv->timer.function = &TLan_Timer;
1853 	if (!in_irq())
1854 		spin_unlock_irqrestore(&priv->lock, flags);
1855 
1856 	priv->timer.data = (unsigned long) dev;
1857 	priv->timerSetAt = jiffies;
1858 	priv->timerType = type;
1859 	mod_timer(&priv->timer, jiffies + ticks);
1860 
1861 } /* TLan_SetTimer */
1862 
1863 /*****************************************************************************
1864 ******************************************************************************
1865 
1866 	ThunderLAN Driver Primary Functions
1867 
1868 	These functions are more or less common to all Linux network drivers.
1869 
1870 ******************************************************************************
1871 *****************************************************************************/
1872 
1873 	/***************************************************************
1874 	 *	tlan_remove_one
1875 	 *
1876 	 *	Returns:
1877 	 *		Nothing
1878 	 *	Parms:
1879 	 *		None
1880 	 *
1881 	 *	Goes through the TLanDevices list and frees the device
1882 	 *	structs and memory associated with each device (lists
1883 	 *	and buffers).  It also ureserves the IO port regions
1884 	 *	associated with this device.
1885 	 *
1886 	 **************************************************************/
1887 
1888 static void __devexit tlan_remove_one( struct pci_dev *pdev)
1889 {
1890 	struct net_device *dev = pci_get_drvdata( pdev );
1891 	TLanPrivateInfo	*priv = dev->priv;
1892 
1893 	unregister_netdev( dev );
1894 
1895 	if ( priv->dmaStorage ) {
1896 		kfree( priv->dmaStorage );
1897 	}
1898 
1899 	release_region( dev->base_addr, 0x10 );
1900 
1901 	kfree( dev );
1902 
1903 	pci_set_drvdata( pdev, NULL );
1904 }
1905 
1906 static struct pci_driver tlan_driver = {
1907 	name:		"tlan",
1908 	id_table:	tlan_pci_tbl,
1909 	probe:		tlan_init_one,
1910 	remove:		tlan_remove_one,
1911 };
1912 
1913 static int __init tlan_probe(void)
1914 {
1915 	static int	pad_allocated;
1916 
1917 	printk(KERN_INFO "%s", tlan_banner);
1918 
1919 	TLanPadBuffer = (u8 *) kmalloc(TLAN_MIN_FRAME_SIZE,
1920 					GFP_KERNEL);
1921 
1922 	if (TLanPadBuffer == NULL) {
1923 		printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n");
1924 		return -ENOMEM;
1925 	}
1926 
1927 	memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE);
1928 	pad_allocated = 1;
1929 
1930 	TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n");
1931 
1932 	/* Use new style PCI probing. Now the kernel will
1933 	   do most of this for us */
1934 	pci_register_driver(&tlan_driver);
1935 
1936 	TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n");
1937 	TLan_EisaProbe();
1938 
1939 	printk(KERN_INFO "TLAN: %d device%s installed, PCI: %d  EISA: %d\n",
1940 		 TLanDevicesInstalled, TLanDevicesInstalled == 1 ? "" : "s",
1941 		 tlan_have_pci, tlan_have_eisa);
1942 
1943 	if (TLanDevicesInstalled == 0) {
1944 		pci_unregister_driver(&tlan_driver);
1945 		kfree(TLanPadBuffer);
1946 		return -ENODEV;
1947 	}
1948 	return 0;
1949 }
1950 
1951 
1952 static int __devinit tlan_init_one( struct pci_dev *pdev,
1953 				    const struct pci_device_id *ent)
1954 {
1955 	return TLan_probe1( pdev, -1, -1, 0, ent);
1956 }
1957 
1958 /*
1959 	***************************************************************
1960 	 *	tlan_probe1
1961 	 *
1962 	 *	Returns:
1963 	 *		0 on success, error code on error
1964 	 *	Parms:
1965 	 *		none
1966 	 *
1967 	 *	The name is lower case to fit in with all the rest of
1968 	 *	the netcard_probe names.  This function looks for
1969 	 *	another TLan based adapter, setting it up with the
1970 	 *	allocated device struct if one is found.
1971 	 *	tlan_probe has been ported to the new net API and
1972 	 *	now allocates its own device structure. This function
1973 	 *	is also used by modules.
1974 	 *
1975 	 **************************************************************/
1976 
1977 static int __devinit TLan_probe1(struct pci_dev *pdev,
1978 				long ioaddr, int irq, int rev, const struct pci_device_id *ent )
1979 {
1980 
1981 	struct net_device  *dev;
1982 	TLanPrivateInfo    *priv;
1983 	u8		   pci_rev;
1984 	u16		   device_id;
1985 	int		   reg;
1986 
1987 	if (pdev && pci_enable_device(pdev))
1988 		return -EIO;
1989 
1990 	dev = init_etherdev(NULL, sizeof(TLanPrivateInfo));
1991 	if (dev == NULL) {
1992 		printk(KERN_ERR "TLAN: Could not allocate memory for device.\n");
1993 		return -ENOMEM;
1994 	}
1995 	SET_MODULE_OWNER(dev);
1996 
1997 	priv = dev->priv;
1998 
1999 	/* Is this a PCI device? */
2000 	if (pdev) {
2001 		u32 		   pci_io_base = 0;
2002 
2003 		priv->adapter = &board_info[ent->driver_data];
2004 
2005 		pci_read_config_byte ( pdev, PCI_REVISION_ID, &pci_rev);
2006 
2007 		for ( reg= 0; reg <= 5; reg ++ ) {
2008 			if (pci_resource_flags(pdev, reg) & IORESOURCE_IO) {
2009 				pci_io_base = pci_resource_start(pdev, reg);
2010 				TLAN_DBG( TLAN_DEBUG_GNRL, "IO mapping is available at %x.\n",
2011 						pci_io_base);
2012 				break;
2013 			}
2014 		}
2015 		if (!pci_io_base) {
2016 			printk(KERN_ERR "TLAN: No IO mappings available\n");
2017 			unregister_netdev(dev);
2018 			kfree(dev);
2019 			return -ENODEV;
2020 		}
2021 
2022 		dev->base_addr = pci_io_base;
2023 		dev->irq = pdev->irq;
2024 		priv->adapterRev = pci_rev;
2025 		pci_set_master(pdev);
2026 		pci_set_drvdata(pdev, dev);
2027 
2028 	} else	{     /* EISA card */
2029 		/* This is a hack. We need to know which board structure
2030 		 * is suited for this adapter */
2031 		device_id = inw(ioaddr + EISA_ID2);
2032 		priv->is_eisa = 1;
2033 		if (device_id == 0x20F1) {
2034 			priv->adapter = &board_info[13]; 	/* NetFlex-3/E */
2035 			priv->adapterRev = 23;			/* TLAN 2.3 */
2036 		} else {
2037 			priv->adapter = &board_info[14];
2038 			priv->adapterRev = 10;			/* TLAN 1.0 */
2039 		}
2040 		dev->base_addr = ioaddr;
2041 		dev->irq = irq;
2042 	}
2043 
2044 	/* Kernel parameters */
2045 	if (dev->mem_start) {
2046 		priv->aui    = dev->mem_start & 0x01;
2047 		priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 : (dev->mem_start & 0x06) >> 1;
2048 		priv->speed  = ((dev->mem_start & 0x18) == 0x18) ? 0 : (dev->mem_start & 0x18) >> 3;
2049 
2050 		if (priv->speed == 0x1) {
2051 			priv->speed = TLAN_SPEED_10;
2052 		} else if (priv->speed == 0x2) {
2053 			priv->speed = TLAN_SPEED_100;
2054 		}
2055 		debug = priv->debug = dev->mem_end;
2056 	} else {
2057 		priv->aui    = aui[boards_found];
2058 		priv->speed  = speed[boards_found];
2059 		priv->duplex = duplex[boards_found];
2060 		priv->debug = debug;
2061 	}
2062 
2063 	/* This will be used when we get an adapter error from
2064 	 * within our irq handler */
2065 	INIT_LIST_HEAD(&priv->tlan_tqueue.list);
2066 	priv->tlan_tqueue.sync = 0;
2067 	priv->tlan_tqueue.routine = (void *)(void*)TLan_tx_timeout;
2068 	priv->tlan_tqueue.data = dev;
2069 
2070 	spin_lock_init(&priv->lock);
2071 
2072 	if (TLan_Init(dev)) {
2073 		printk(KERN_ERR "TLAN: Could not register device.\n");
2074 		unregister_netdev(dev);
2075 		kfree(dev);
2076 		return -EAGAIN;
2077 	} else {
2078 
2079 	TLanDevicesInstalled++;
2080 	boards_found++;
2081 
2082 	/* pdev is NULL if this is an EISA device */
2083 	if (pdev)
2084 		tlan_have_pci++;
2085 	else {
2086 		priv->nextDevice = TLan_Eisa_Devices;
2087 		TLan_Eisa_Devices = dev;
2088 		tlan_have_eisa++;
2089 	}
2090 
2091 	printk(KERN_INFO "TLAN: %s irq=%2d, io=%04x, %s, Rev. %d\n",
2092 			dev->name,
2093 			(int) dev->irq,
2094 			(int) dev->base_addr,
2095 			priv->adapter->deviceLabel,
2096 			priv->adapterRev);
2097 	return 0;
2098 	}
2099 
2100 }
2101 
2102 static void TLan_Eisa_Cleanup(void)
2103 {
2104 	struct net_device *dev;
2105 	TLanPrivateInfo *priv;
2106 
2107 	while( tlan_have_eisa ) {
2108 		dev = TLan_Eisa_Devices;
2109 		priv = dev->priv;
2110 		if (priv->dmaStorage) {
2111 			kfree(priv->dmaStorage);
2112 		}
2113 		release_region( dev->base_addr, 0x10);
2114 		unregister_netdev( dev );
2115 		TLan_Eisa_Devices = priv->nextDevice;
2116 		kfree( dev );
2117 		tlan_have_eisa--;
2118 	}
2119 }
2120 
2121 
2122 static void __exit tlan_exit(void)
2123 {
2124 	pci_unregister_driver(&tlan_driver);
2125 
2126 	if (tlan_have_eisa)
2127 		TLan_Eisa_Cleanup();
2128 
2129 	kfree( TLanPadBuffer );
2130 
2131 }
2132 
2133 /* Module loading/unloading */
2134 module_init(tlan_probe);
2135 module_exit(tlan_exit);
2136 
2137 	/**************************************************************
2138 	 * 	TLan_EisaProbe
2139 	 *
2140 	 *  	Returns: 0 on success, 1 otherwise
2141 	 *
2142 	 *  	Parms:	 None
2143 	 *
2144 	 *
2145 	 *  	This functions probes for EISA devices and calls
2146 	 *  	TLan_probe1 when one is found.
2147 	 *
2148 	 *************************************************************/
2149 
2150 static void  __init TLan_EisaProbe (void)
2151 {
2152 	long 	ioaddr;
2153 	int 	rc = -ENODEV;
2154 	int 	irq;
2155 	u16	device_id;
2156 
2157 	if (!EISA_bus) {
2158 		TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n");
2159 		return;
2160 	}
2161 
2162 	/* Loop through all slots of the EISA bus */
2163 	for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) {
2164 
2165 	TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC80, inw(ioaddr + EISA_ID));
2166 	TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC82, inw(ioaddr + EISA_ID2));
2167 
2168 		TLAN_DBG(TLAN_DEBUG_PROBE, "Probing for EISA adapter at IO: 0x%4x : ",
2169 				   	(int) ioaddr);
2170 		if (request_region(ioaddr, 0x10, TLanSignature) == NULL)
2171 			goto out;
2172 
2173 		if (inw(ioaddr + EISA_ID) != 0x110E) {
2174 			release_region(ioaddr, 0x10);
2175 			goto out;
2176 		}
2177 
2178 		device_id = inw(ioaddr + EISA_ID2);
2179 		if (device_id !=  0x20F1 && device_id != 0x40F1) {
2180 			release_region (ioaddr, 0x10);
2181 			goto out;
2182 		}
2183 
2184 	 	if (inb(ioaddr + EISA_CR) != 0x1) { 	/* Check if adapter is enabled */
2185 			release_region (ioaddr, 0x10);
2186 			goto out2;
2187 		}
2188 
2189 		if (debug == 0x10)
2190 			printk("Found one\n");
2191 
2192 		/* Get irq from board */
2193 		switch (inb(ioaddr + 0xCC0)) {
2194 			case(0x10):
2195 				irq=5;
2196 				break;
2197 			case(0x20):
2198 				irq=9;
2199 				break;
2200 			case(0x40):
2201 				irq=10;
2202 				break;
2203 			case(0x80):
2204 				irq=11;
2205 				break;
2206 			default:
2207 				goto out;
2208 		}
2209 
2210 
2211 		/* Setup the newly found eisa adapter */
2212 		rc = TLan_probe1( NULL, ioaddr, irq,
2213 					12, NULL);
2214 		continue;
2215 
2216 		out:
2217 			if (debug == 0x10)
2218 				printk("None found\n");
2219 			continue;
2220 
2221 		out2:	if (debug == 0x10)
2222 				printk("Card found but it is not enabled, skipping\n");
2223 			continue;
2224 
2225 	}
2226 
2227 } /* TLan_EisaProbe */
2228 
2229 
2230 
2231 	/***************************************************************
2232 	 *	TLan_Init
2233 	 *
2234 	 *	Returns:
2235 	 *		0 on success, error code otherwise.
2236 	 *	Parms:
2237 	 *		dev	The structure of the device to be
2238 	 *			init'ed.
2239 	 *
2240 	 *	This function completes the initialization of the
2241 	 *	device structure and driver.  It reserves the IO
2242 	 *	addresses, allocates memory for the lists and bounce
2243 	 *	buffers, retrieves the MAC address from the eeprom
2244 	 *	and assignes the device's methods.
2245 	 *
2246 	 **************************************************************/
2247 
2248 static int TLan_Init( struct net_device *dev )
2249 {
2250 	int		dma_size;
2251 	int 		err;
2252 	int		i;
2253 	TLanPrivateInfo	*priv;
2254 
2255 	priv = dev->priv;
2256 
2257 	if (!priv->is_eisa)	/* EISA devices have already requested IO */
2258 		if (!request_region( dev->base_addr, 0x10, TLanSignature )) {
2259 			printk(KERN_ERR "TLAN: %s: IO port region 0x%lx size 0x%x in use.\n",
2260 				dev->name,
2261 				dev->base_addr,
2262 				0x10 );
2263 			return -EIO;
2264 		}
2265 
2266 	if ( bbuf ) {
2267 		dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS )
2268 	           * ( sizeof(TLanList) + TLAN_MAX_FRAME_SIZE );
2269 	} else {
2270 		dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS )
2271 	           * ( sizeof(TLanList) );
2272 	}
2273 	priv->dmaStorage = kmalloc(dma_size, GFP_KERNEL | GFP_DMA);
2274 	if ( priv->dmaStorage == NULL ) {
2275 		printk(KERN_ERR "TLAN:  Could not allocate lists and buffers for %s.\n",
2276 			dev->name );
2277 		release_region( dev->base_addr, 0x10 );
2278 		return -ENOMEM;
2279 	}
2280 	memset( priv->dmaStorage, 0, dma_size );
2281 	priv->rxList = (TLanList *)
2282 		       ( ( ( (u32) priv->dmaStorage ) + 7 ) & 0xFFFFFFF8 );
2283 	priv->txList = priv->rxList + TLAN_NUM_RX_LISTS;
2284 	if ( bbuf ) {
2285 		priv->rxBuffer = (u8 *) ( priv->txList + TLAN_NUM_TX_LISTS );
2286 		priv->txBuffer = priv->rxBuffer
2287 				 + ( TLAN_NUM_RX_LISTS * TLAN_MAX_FRAME_SIZE );
2288 	}
2289 
2290 	err = 0;
2291 	for ( i = 0;  i < 6 ; i++ )
2292 		err |= TLan_EeReadByte( dev,
2293 					(u8) priv->adapter->addrOfs + i,
2294 					(u8 *) &dev->dev_addr[i] );
2295 	if ( err ) {
2296 		printk(KERN_ERR "TLAN: %s: Error reading MAC from eeprom: %d\n",
2297 			dev->name,
2298 			err );
2299 	}
2300 	dev->addr_len = 6;
2301 
2302 	/* Device methods */
2303 	dev->open = &TLan_Open;
2304 	dev->hard_start_xmit = &TLan_StartTx;
2305 	dev->stop = &TLan_Close;
2306 	dev->get_stats = &TLan_GetStats;
2307 	dev->set_multicast_list = &TLan_SetMulticastList;
2308 	dev->do_ioctl = &TLan_ioctl;
2309 	dev->tx_timeout = &TLan_tx_timeout;
2310 	dev->watchdog_timeo = TX_TIMEOUT;
2311 
2312 	return 0;
2313 
2314 } /* TLan_Init */
2315 
2316 	/***************************************************************
2317 	 *	TLan_Open
2318 	 *
2319 	 *	Returns:
2320 	 *		0 on success, error code otherwise.
2321 	 *	Parms:
2322 	 *		dev	Structure of device to be opened.
2323 	 *
2324 	 *	This routine puts the driver and TLAN adapter in a
2325 	 *	state where it is ready to send and receive packets.
2326 	 *	It allocates the IRQ, resets and brings the adapter
2327 	 *	out of reset, and allows interrupts.  It also delays
2328 	 *	the startup for autonegotiation or sends a Rx GO
2329 	 *	command to the adapter, as appropriate.
2330 	 *
2331 	 **************************************************************/
2332 
2333 static int TLan_Open( struct net_device *dev )
2334 {
2335 	TLanPrivateInfo	*priv = dev->priv;
2336 	int		err;
2337 
2338 	priv->tlanRev = TLan_DioRead8( dev->base_addr, TLAN_DEF_REVISION );
2339 	err = request_irq( dev->irq, TLan_HandleInterrupt, SA_SHIRQ, TLanSignature, dev );
2340 
2341 	if ( err ) {
2342 		printk(KERN_ERR "TLAN:  Cannot open %s because IRQ %d is already in use.\n", dev->name, dev->irq );
2343 		return err;
2344 	}
2345 
2346 	init_timer(&priv->timer);
2347 	netif_start_queue(dev);
2348 
2349 	/* NOTE: It might not be necessary to read the stats before a
2350 			 reset if you don't care what the values are.
2351 	*/
2352 	TLan_ResetLists( dev );
2353 	TLan_ReadAndClearStats( dev, TLAN_IGNORE );
2354 	TLan_ResetAdapter( dev );
2355 
2356 	TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Opened.  TLAN Chip Rev: %x\n", dev->name, priv->tlanRev );
2357 
2358 	return 0;
2359 
2360 } /* TLan_Open */
2361 
2362 	/**************************************************************
2363 	 *	TLan_ioctl
2364 	 *
2365 	 *	Returns:
2366 	 *		0 on success, error code otherwise
2367 	 *	Params:
2368 	 *		dev	structure of device to receive ioctl.
2369 	 *
2370 	 *		rq	ifreq structure to hold userspace data.
2371 	 *
2372 	 *		cmd	ioctl command.
2373 	 *
2374 	 *
2375 	 *************************************************************/
2376 
2377 static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2378 {
2379 	TLanPrivateInfo *priv = dev->priv;
2380 	struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data;
2381 	u32 phy   = priv->phy[priv->phyNum];
2382 
2383 	if (!priv->phyOnline)
2384 		return -EAGAIN;
2385 
2386 	switch(cmd) {
2387 	case SIOCGMIIPHY:		/* Get address of MII PHY in use. */
2388 	case SIOCDEVPRIVATE:		/* for binary compat, remove in 2.5 */
2389 			data->phy_id = phy;
2390 
2391 	case SIOCGMIIREG:		/* Read MII PHY register. */
2392 	case SIOCDEVPRIVATE+1:		/* for binary compat, remove in 2.5 */
2393 			TLan_MiiReadReg(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, &data->val_out);
2394 			return 0;
2395 
2396 
2397 	case SIOCSMIIREG:		/* Write MII PHY register. */
2398 	case SIOCDEVPRIVATE+2:		/* for binary compat, remove in 2.5 */
2399 			if (!capable(CAP_NET_ADMIN))
2400 				return -EPERM;
2401 			TLan_MiiWriteReg(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
2402 			return 0;
2403 		default:
2404 			return -EOPNOTSUPP;
2405 	}
2406 } /* tlan_ioctl */
2407 
2408 	/***************************************************************
2409 	 * 	TLan_tx_timeout
2410 	 *
2411 	 * 	Returns: nothing
2412 	 *
2413 	 * 	Params:
2414 	 * 		dev	structure of device which timed out
2415 	 * 			during transmit.
2416 	 *
2417 	 **************************************************************/
2418 
2419 static void TLan_tx_timeout(struct net_device *dev)
2420 {
2421 
2422 	TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name);
2423 
2424 	/* Ok so we timed out, lets see what we can do about it...*/
2425 	TLan_FreeLists( dev );
2426 	TLan_ResetLists( dev );
2427 	TLan_ReadAndClearStats( dev, TLAN_IGNORE );
2428 	TLan_ResetAdapter( dev );
2429 	dev->trans_start = jiffies;
2430 	netif_wake_queue( dev );
2431 
2432 }
2433 
2434 
2435 	/***************************************************************
2436 	 *	TLan_StartTx
2437 	 *
2438 	 *	Returns:
2439 	 *		0 on success, non-zero on failure.
2440 	 *	Parms:
2441 	 *		skb	A pointer to the sk_buff containing the
2442 	 *			frame to be sent.
2443 	 *		dev	The device to send the data on.
2444 	 *
2445 	 *	This function adds a frame to the Tx list to be sent
2446 	 *	ASAP.  First it	verifies that the adapter is ready and
2447 	 *	there is room in the queue.  Then it sets up the next
2448 	 *	available list, copies the frame to the	corresponding
2449 	 *	buffer.  If the adapter Tx channel is idle, it gives
2450 	 *	the adapter a Tx Go command on the list, otherwise it
2451 	 *	sets the forward address of the previous list to point
2452 	 *	to this one.  Then it frees the sk_buff.
2453 	 *
2454 	 **************************************************************/
2455 
2456 static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
2457 {
2458 	TLanPrivateInfo *priv = dev->priv;
2459 	TLanList	*tail_list;
2460 	u8		*tail_buffer;
2461 	int		pad;
2462 	unsigned long	flags;
2463 
2464 	if ( ! priv->phyOnline ) {
2465 		TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  %s PHY is not ready\n", dev->name );
2466 		dev_kfree_skb_any(skb);
2467 		return 0;
2468 	}
2469 
2470 	tail_list = priv->txList + priv->txTail;
2471 
2472 	if ( tail_list->cStat != TLAN_CSTAT_UNUSED ) {
2473 		TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  %s is busy (Head=%d Tail=%d)\n", dev->name, priv->txHead, priv->txTail );
2474 		netif_stop_queue(dev);
2475 		priv->txBusyCount++;
2476 		return 1;
2477 	}
2478 
2479 	tail_list->forward = 0;
2480 
2481 	if ( bbuf ) {
2482 		tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE );
2483 		memcpy( tail_buffer, skb->data, skb->len );
2484 	} else {
2485 		tail_list->buffer[0].address = virt_to_bus( skb->data );
2486 		tail_list->buffer[9].address = (u32) skb;
2487 	}
2488 
2489 	pad = TLAN_MIN_FRAME_SIZE - skb->len;
2490 
2491 	if ( pad > 0 ) {
2492 		tail_list->frameSize = (u16) skb->len + pad;
2493 		tail_list->buffer[0].count = (u32) skb->len;
2494 		tail_list->buffer[1].count = TLAN_LAST_BUFFER | (u32) pad;
2495 		tail_list->buffer[1].address = virt_to_bus( TLanPadBuffer );
2496 	} else {
2497 		tail_list->frameSize = (u16) skb->len;
2498 		tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len;
2499 		tail_list->buffer[1].count = 0;
2500 		tail_list->buffer[1].address = 0;
2501 	}
2502 
2503 	spin_lock_irqsave(&priv->lock, flags);
2504 	tail_list->cStat = TLAN_CSTAT_READY;
2505 	if ( ! priv->txInProgress ) {
2506 		priv->txInProgress = 1;
2507 		TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  Starting TX on buffer %d\n", priv->txTail );
2508 		outl( virt_to_bus( tail_list ), dev->base_addr + TLAN_CH_PARM );
2509 		outl( TLAN_HC_GO, dev->base_addr + TLAN_HOST_CMD );
2510 	} else {
2511 		TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  Adding buffer %d to TX channel\n", priv->txTail );
2512 		if ( priv->txTail == 0 ) {
2513 			( priv->txList + ( TLAN_NUM_TX_LISTS - 1 ) )->forward = virt_to_bus( tail_list );
2514 		} else {
2515 			( priv->txList + ( priv->txTail - 1 ) )->forward = virt_to_bus( tail_list );
2516 		}
2517 	}
2518 	spin_unlock_irqrestore(&priv->lock, flags);
2519 
2520 	CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS );
2521 
2522 	if ( bbuf )
2523 		dev_kfree_skb_any(skb);
2524 
2525 	dev->trans_start = jiffies;
2526 	return 0;
2527 
2528 } /* TLan_StartTx */
2529 
2530 	/***************************************************************
2531 	 *	TLan_HandleInterrupt
2532 	 *
2533 	 *	Returns:
2534 	 *		Nothing
2535 	 *	Parms:
2536 	 *		irq	The line on which the interrupt
2537 	 *			occurred.
2538 	 *		dev_id	A pointer to the device assigned to
2539 	 *			this irq line.
2540 	 *		regs	???
2541 	 *
2542 	 *	This function handles an interrupt generated by its
2543 	 *	assigned TLAN adapter.  The function deactivates
2544 	 *	interrupts on its adapter, records the type of
2545 	 *	interrupt, executes the appropriate subhandler, and
2546 	 *	acknowdges the interrupt to the adapter (thus
2547 	 *	re-enabling adapter interrupts.
2548 	 *
2549 	 **************************************************************/
2550 
2551 static void TLan_HandleInterrupt(int irq, void *dev_id, struct pt_regs *regs)
2552 {
2553 	u32		ack;
2554 	struct net_device	*dev;
2555 	u32		host_cmd;
2556 	u16		host_int;
2557 	int		type;
2558 	TLanPrivateInfo *priv;
2559 
2560 	dev = dev_id;
2561 	priv = dev->priv;
2562 
2563 	spin_lock(&priv->lock);
2564 
2565 	host_int = inw( dev->base_addr + TLAN_HOST_INT );
2566 	outw( host_int, dev->base_addr + TLAN_HOST_INT );
2567 
2568 	type = ( host_int & TLAN_HI_IT_MASK ) >> 2;
2569 
2570 	ack = TLanIntVector[type]( dev, host_int );
2571 
2572 	if ( ack ) {
2573 		host_cmd = TLAN_HC_ACK | ack | ( type << 18 );
2574 		outl( host_cmd, dev->base_addr + TLAN_HOST_CMD );
2575 	}
2576 
2577 	spin_unlock(&priv->lock);
2578 
2579 } /* TLan_HandleInterrupts */
2580 
2581 	/***************************************************************
2582 	 *	TLan_Close
2583 	 *
2584 	 * 	Returns:
2585 	 *		An error code.
2586 	 *	Parms:
2587 	 *		dev	The device structure of the device to
2588 	 *			close.
2589 	 *
2590 	 *	This function shuts down the adapter.  It records any
2591 	 *	stats, puts the adapter into reset state, deactivates
2592 	 *	its time as needed, and	frees the irq it is using.
2593 	 *
2594 	 **************************************************************/
2595 
2596 static int TLan_Close(struct net_device *dev)
2597 {
2598 	TLanPrivateInfo *priv = dev->priv;
2599 
2600 	netif_stop_queue(dev);
2601 	priv->neg_be_verbose = 0;
2602 
2603 	TLan_ReadAndClearStats( dev, TLAN_RECORD );
2604 	outl( TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD );
2605 	if ( priv->timer.function != NULL ) {
2606 		del_timer_sync( &priv->timer );
2607 		priv->timer.function = NULL;
2608 	}
2609 
2610 	free_irq( dev->irq, dev );
2611 	TLan_FreeLists( dev );
2612 	TLAN_DBG( TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name );
2613 
2614 	return 0;
2615 
2616 } /* TLan_Close */
2617 
2618 	/***************************************************************
2619 	 *	TLan_GetStats
2620 	 *
2621 	 *	Returns:
2622 	 *		A pointer to the device's statistics structure.
2623 	 *	Parms:
2624 	 *		dev	The device structure to return the
2625 	 *			stats for.
2626 	 *
2627 	 *	This function updates the devices statistics by reading
2628 	 *	the TLAN chip's onboard registers.  Then it returns the
2629 	 *	address of the statistics structure.
2630 	 *
2631 	 **************************************************************/
2632 
2633 static struct net_device_stats *TLan_GetStats( struct net_device *dev )
2634 {
2635 	TLanPrivateInfo	*priv = dev->priv;
2636 	int i;
2637 
2638 	/* Should only read stats if open ? */
2639 	TLan_ReadAndClearStats( dev, TLAN_RECORD );
2640 
2641 	TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE:  %s EOC count = %d\n", dev->name, priv->rxEocCount );
2642 	TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  %s Busy count = %d\n", dev->name, priv->txBusyCount );
2643 	if ( debug & TLAN_DEBUG_GNRL ) {
2644 		TLan_PrintDio( dev->base_addr );
2645 		TLan_PhyPrint( dev );
2646 	}
2647 	if ( debug & TLAN_DEBUG_LIST ) {
2648 		for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ )
2649 			TLan_PrintList( priv->rxList + i, "RX", i );
2650 		for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ )
2651 			TLan_PrintList( priv->txList + i, "TX", i );
2652 	}
2653 
2654 	return ( &( (TLanPrivateInfo *) dev->priv )->stats );
2655 
2656 } /* TLan_GetStats */
2657 
2658 	/***************************************************************
2659 	 *	TLan_SetMulticastList
2660 	 *
2661 	 *	Returns:
2662 	 *		Nothing
2663 	 *	Parms:
2664 	 *		dev	The device structure to set the
2665 	 *			multicast list for.
2666 	 *
2667 	 *	This function sets the TLAN adaptor to various receive
2668 	 *	modes.  If the IFF_PROMISC flag is set, promiscuous
2669 	 *	mode is acitviated.  Otherwise,	promiscuous mode is
2670 	 *	turned off.  If the IFF_ALLMULTI flag is set, then
2671 	 *	the hash table is set to receive all group addresses.
2672 	 *	Otherwise, the first three multicast addresses are
2673 	 *	stored in AREG_1-3, and the rest are selected via the
2674 	 *	hash table, as necessary.
2675 	 *
2676 	 **************************************************************/
2677 
2678 static void TLan_SetMulticastList( struct net_device *dev )
2679 {
2680 	struct dev_mc_list	*dmi = dev->mc_list;
2681 	u32			hash1 = 0;
2682 	u32			hash2 = 0;
2683 	int			i;
2684 	u32			offset;
2685 	u8			tmp;
2686 
2687 	if ( dev->flags & IFF_PROMISC ) {
2688 		tmp = TLan_DioRead8( dev->base_addr, TLAN_NET_CMD );
2689 		TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, tmp | TLAN_NET_CMD_CAF );
2690 	} else {
2691 		tmp = TLan_DioRead8( dev->base_addr, TLAN_NET_CMD );
2692 		TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, tmp & ~TLAN_NET_CMD_CAF );
2693 		if ( dev->flags & IFF_ALLMULTI ) {
2694 			for ( i = 0; i < 3; i++ )
2695 				TLan_SetMac( dev, i + 1, NULL );
2696 			TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF );
2697 			TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF );
2698 		} else {
2699 			for ( i = 0; i < dev->mc_count; i++ ) {
2700 				if ( i < 3 ) {
2701 					TLan_SetMac( dev, i + 1, (char *) &dmi->dmi_addr );
2702 				} else {
2703 					offset = TLan_HashFunc( (u8 *) &dmi->dmi_addr );
2704 					if ( offset < 32 )
2705 						hash1 |= ( 1 << offset );
2706 					else
2707 						hash2 |= ( 1 << ( offset - 32 ) );
2708 				}
2709 				dmi = dmi->next;
2710 			}
2711 			for ( ; i < 3; i++ )
2712 				TLan_SetMac( dev, i + 1, NULL );
2713 			TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, hash1 );
2714 			TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, hash2 );
2715 		}
2716 	}
2717 
2718 } /* TLan_SetMulticastList */
2719 
2720 /*****************************************************************************
2721 ******************************************************************************
2722 
2723         ThunderLAN Driver Interrupt Vectors and Table
2724 
2725 	Please see Chap. 4, "Interrupt Handling" of the "ThunderLAN
2726 	Programmer's Guide" for more informations on handling interrupts
2727 	generated by TLAN based adapters.
2728 
2729 ******************************************************************************
2730 *****************************************************************************/
2731 
2732 	/***************************************************************
2733 	 *	TLan_HandleInvalid
2734 	 *
2735 	 *	Returns:
2736 	 *		0
2737 	 *	Parms:
2738 	 *		dev		Device assigned the IRQ that was
2739 	 *				raised.
2740 	 *		host_int	The contents of the HOST_INT
2741 	 *				port.
2742 	 *
2743 	 *	This function handles invalid interrupts.  This should
2744 	 *	never happen unless some other adapter is trying to use
2745 	 *	the IRQ line assigned to the device.
2746 	 *
2747 	 **************************************************************/
2748 
2749 u32 TLan_HandleInvalid( struct net_device *dev, u16 host_int )
2750 {
2751 	/* printk( "TLAN:  Invalid interrupt on %s.\n", dev->name ); */
2752 	return 0;
2753 
2754 } /* TLan_HandleInvalid */
2755 
2756 	/***************************************************************
2757 	 *	TLan_HandleTxEOF
2758 	 *
2759 	 *	Returns:
2760 	 *		1
2761 	 *	Parms:
2762 	 *		dev		Device assigned the IRQ that was
2763 	 *				raised.
2764 	 *		host_int	The contents of the HOST_INT
2765 	 *				port.
2766 	 *
2767 	 *	This function handles Tx EOF interrupts which are raised
2768 	 *	by the adapter when it has completed sending the
2769 	 *	contents of a buffer.  If detemines which list/buffer
2770 	 *	was completed and resets it.  If the buffer was the last
2771 	 *	in the channel (EOC), then the function checks to see if
2772 	 *	another buffer is ready to send, and if so, sends a Tx
2773 	 *	Go command.  Finally, the driver activates/continues the
2774 	 *	activity LED.
2775 	 *
2776 	 **************************************************************/
2777 
2778 u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int )
2779 {
2780 	TLanPrivateInfo	*priv = dev->priv;
2781 	int		eoc = 0;
2782 	TLanList	*head_list;
2783 	u32		ack = 0;
2784 	u16		tmpCStat;
2785 
2786 	TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  Handling TX EOF (Head=%d Tail=%d)\n", priv->txHead, priv->txTail );
2787 	head_list = priv->txList + priv->txHead;
2788 
2789 	while (((tmpCStat = head_list->cStat ) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) {
2790 		ack++;
2791 		if ( ! bbuf ) {
2792 			dev_kfree_skb_any( (struct sk_buff *) head_list->buffer[9].address );
2793 			head_list->buffer[9].address = 0;
2794 		}
2795 
2796 		if ( tmpCStat & TLAN_CSTAT_EOC )
2797 			eoc = 1;
2798 
2799 		priv->stats.tx_bytes += head_list->frameSize;
2800 
2801 		head_list->cStat = TLAN_CSTAT_UNUSED;
2802 		netif_start_queue(dev);
2803 		CIRC_INC( priv->txHead, TLAN_NUM_TX_LISTS );
2804 		head_list = priv->txList + priv->txHead;
2805 	}
2806 
2807 	if (!ack)
2808 		printk(KERN_INFO "TLAN: Received interrupt for uncompleted TX frame.\n");
2809 
2810 	if ( eoc ) {
2811 		TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  Handling TX EOC (Head=%d Tail=%d)\n", priv->txHead, priv->txTail );
2812 		head_list = priv->txList + priv->txHead;
2813 		if ( ( head_list->cStat & TLAN_CSTAT_READY ) == TLAN_CSTAT_READY ) {
2814 			outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM );
2815 			ack |= TLAN_HC_GO;
2816 		} else {
2817 			priv->txInProgress = 0;
2818 		}
2819 	}
2820 
2821 	if ( priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED ) {
2822 		TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT );
2823 		if ( priv->timer.function == NULL ) {
2824 			 priv->timer.function = &TLan_Timer;
2825 			 priv->timer.data = (unsigned long) dev;
2826 			 priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
2827 			 priv->timerSetAt = jiffies;
2828 			 priv->timerType = TLAN_TIMER_ACTIVITY;
2829 			 add_timer(&priv->timer);
2830 		} else if ( priv->timerType == TLAN_TIMER_ACTIVITY ) {
2831 			priv->timerSetAt = jiffies;
2832 		}
2833 	}
2834 
2835 	return ack;
2836 
2837 } /* TLan_HandleTxEOF */
2838 
2839 	/***************************************************************
2840 	 *	TLan_HandleStatOverflow
2841 	 *
2842 	 *	Returns:
2843 	 *		1
2844 	 *	Parms:
2845 	 *		dev		Device assigned the IRQ that was
2846 	 *				raised.
2847 	 *		host_int	The contents of the HOST_INT
2848 	 *				port.
2849 	 *
2850 	 *	This function handles the Statistics Overflow interrupt
2851 	 *	which means that one or more of the TLAN statistics
2852 	 *	registers has reached 1/2 capacity and needs to be read.
2853 	 *
2854 	 **************************************************************/
2855 
2856 u32 TLan_HandleStatOverflow( struct net_device *dev, u16 host_int )
2857 {
2858 	TLan_ReadAndClearStats( dev, TLAN_RECORD );
2859 
2860 	return 1;
2861 
2862 } /* TLan_HandleStatOverflow */
2863 
2864 	/***************************************************************
2865 	 *	TLan_HandleRxEOF
2866 	 *
2867 	 *	Returns:
2868 	 *		1
2869 	 *	Parms:
2870 	 *		dev		Device assigned the IRQ that was
2871 	 *				raised.
2872 	 *		host_int	The contents of the HOST_INT
2873 	 *				port.
2874 	 *
2875 	 *	This function handles the Rx EOF interrupt which
2876 	 *	indicates a frame has been received by the adapter from
2877 	 *	the net and the frame has been transferred to memory.
2878 	 *	The function determines the bounce buffer the frame has
2879 	 *	been loaded into, creates a new sk_buff big enough to
2880 	 *	hold the frame, and sends it to protocol stack.  It
2881 	 *	then resets the used buffer and appends it to the end
2882 	 *	of the list.  If the frame was the last in the Rx
2883 	 *	channel (EOC), the function restarts the receive channel
2884 	 *	by sending an Rx Go command to the adapter.  Then it
2885 	 *	activates/continues the activity LED.
2886 	 *
2887 	 **************************************************************/
2888 
2889 u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int )
2890 {
2891 	TLanPrivateInfo	*priv = dev->priv;
2892 	u32		ack = 0;
2893 	int		eoc = 0;
2894 	u8		*head_buffer;
2895 	TLanList	*head_list;
2896 	struct sk_buff	*skb;
2897 	TLanList	*tail_list;
2898 	void		*t;
2899 	u32		frameSize;
2900 	u16		tmpCStat;
2901 
2902 	TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE:  Handling RX EOF (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail );
2903 	head_list = priv->rxList + priv->rxHead;
2904 
2905 	while (((tmpCStat = head_list->cStat) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) {
2906 		frameSize = head_list->frameSize;
2907 		ack++;
2908 		if (tmpCStat & TLAN_CSTAT_EOC)
2909 			eoc = 1;
2910 
2911 		if (bbuf) {
2912 			skb = dev_alloc_skb(frameSize + 7);
2913 			if (skb == NULL)
2914 				printk(KERN_INFO "TLAN: Couldn't allocate memory for received data.\n");
2915 			else {
2916 				head_buffer = priv->rxBuffer + (priv->rxHead * TLAN_MAX_FRAME_SIZE);
2917 				skb->dev = dev;
2918 				skb_reserve(skb, 2);
2919 				t = (void *) skb_put(skb, frameSize);
2920 
2921 				priv->stats.rx_bytes += head_list->frameSize;
2922 
2923 				memcpy( t, head_buffer, frameSize );
2924 				skb->protocol = eth_type_trans( skb, dev );
2925 				netif_rx( skb );
2926 			}
2927 		} else {
2928 			struct sk_buff *new_skb;
2929 
2930 			/*
2931 		 	*	I changed the algorithm here. What we now do
2932 		 	*	is allocate the new frame. If this fails we
2933 		 	*	simply recycle the frame.
2934 		 	*/
2935 
2936 			new_skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 );
2937 
2938 			if ( new_skb != NULL ) {
2939 				/* If this ever happened it would be a problem */
2940 				/* not any more - ac */
2941 				skb = (struct sk_buff *) head_list->buffer[9].address;
2942 				skb_trim( skb, frameSize );
2943 
2944 				priv->stats.rx_bytes += frameSize;
2945 
2946 				skb->protocol = eth_type_trans( skb, dev );
2947 				netif_rx( skb );
2948 
2949 				new_skb->dev = dev;
2950 				skb_reserve( new_skb, 2 );
2951 				t = (void *) skb_put( new_skb, TLAN_MAX_FRAME_SIZE );
2952 				head_list->buffer[0].address = virt_to_bus( t );
2953 				head_list->buffer[8].address = (u32) t;
2954 				head_list->buffer[9].address = (u32) new_skb;
2955 			} else
2956 				printk(KERN_WARNING "TLAN:  Couldn't allocate memory for received data.\n" );
2957 		}
2958 
2959 		head_list->forward = 0;
2960 		head_list->cStat = 0;
2961 		tail_list = priv->rxList + priv->rxTail;
2962 		tail_list->forward = virt_to_bus( head_list );
2963 
2964 		CIRC_INC( priv->rxHead, TLAN_NUM_RX_LISTS );
2965 		CIRC_INC( priv->rxTail, TLAN_NUM_RX_LISTS );
2966 		head_list = priv->rxList + priv->rxHead;
2967 	}
2968 
2969 	if (!ack)
2970 		printk(KERN_INFO "TLAN: Received interrupt for uncompleted RX frame.\n");
2971 
2972 
2973 	if ( eoc ) {
2974 		TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE:  Handling RX EOC (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail );
2975 		head_list = priv->rxList + priv->rxHead;
2976 		outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM );
2977 		ack |= TLAN_HC_GO | TLAN_HC_RT;
2978 		priv->rxEocCount++;
2979 	}
2980 
2981 	if ( priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED ) {
2982 		TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT );
2983 		if ( priv->timer.function == NULL )  {
2984 			priv->timer.function = &TLan_Timer;
2985 			priv->timer.data = (unsigned long) dev;
2986 			priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
2987 			priv->timerSetAt = jiffies;
2988 			priv->timerType = TLAN_TIMER_ACTIVITY;
2989 			add_timer(&priv->timer);
2990 		} else if ( priv->timerType == TLAN_TIMER_ACTIVITY ) {
2991 			priv->timerSetAt = jiffies;
2992 		}
2993 	}
2994 
2995 	dev->last_rx = jiffies;
2996 
2997 	return ack;
2998 
2999 } /* TLan_HandleRxEOF */
3000 
3001 	/***************************************************************
3002 	 *	TLan_HandleDummy
3003 	 *
3004 	 *	Returns:
3005 	 *		1
3006 	 *	Parms:
3007 	 *		dev		Device assigned the IRQ that was
3008 	 *				raised.
3009 	 *		host_int	The contents of the HOST_INT
3010 	 *				port.
3011 	 *
3012 	 *	This function handles the Dummy interrupt, which is
3013 	 *	raised whenever a test interrupt is generated by setting
3014 	 *	the Req_Int bit of HOST_CMD to 1.
3015 	 *
3016 	 **************************************************************/
3017 
3018 u32 TLan_HandleDummy( struct net_device *dev, u16 host_int )
3019 {
3020 	printk( "TLAN:  Test interrupt on %s.\n", dev->name );
3021 	return 1;
3022 
3023 } /* TLan_HandleDummy */
3024 
3025 	/***************************************************************
3026 	 *	TLan_HandleTxEOC
3027 	 *
3028 	 *	Returns:
3029 	 *		1
3030 	 *	Parms:
3031 	 *		dev		Device assigned the IRQ that was
3032 	 *				raised.
3033 	 *		host_int	The contents of the HOST_INT
3034 	 *				port.
3035 	 *
3036 	 *	This driver is structured to determine EOC occurances by
3037 	 *	reading the CSTAT member of the list structure.  Tx EOC
3038 	 *	interrupts are disabled via the DIO INTDIS register.
3039 	 *	However, TLAN chips before revision 3.0 didn't have this
3040 	 *	functionality, so process EOC events if this is the
3041 	 *	case.
3042 	 *
3043 	 **************************************************************/
3044 
3045 u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int )
3046 {
3047 	TLanPrivateInfo	*priv = dev->priv;
3048 	TLanList		*head_list;
3049 	u32			ack = 1;
3050 
3051 	host_int = 0;
3052 	if ( priv->tlanRev < 0x30 ) {
3053 		TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  Handling TX EOC (Head=%d Tail=%d) -- IRQ\n", priv->txHead, priv->txTail );
3054 		head_list = priv->txList + priv->txHead;
3055 		if ( ( head_list->cStat & TLAN_CSTAT_READY ) == TLAN_CSTAT_READY ) {
3056 			netif_stop_queue(dev);
3057 			outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM );
3058 			ack |= TLAN_HC_GO;
3059 		} else {
3060 			priv->txInProgress = 0;
3061 		}
3062 	}
3063 
3064 	return ack;
3065 
3066 } /* TLan_HandleTxEOC */
3067 
3068 	/***************************************************************
3069 	 *	TLan_HandleStatusCheck
3070 	 *
3071 	 *	Returns:
3072 	 *		0 if Adapter check, 1 if Network Status check.
3073 	 *	Parms:
3074 	 *		dev		Device assigned the IRQ that was
3075 	 *				raised.
3076 	 *		host_int	The contents of the HOST_INT
3077 	 *				port.
3078 	 *
3079 	 *	This function handles Adapter Check/Network Status
3080 	 *	interrupts generated by the adapter.  It checks the
3081 	 *	vector in the HOST_INT register to determine if it is
3082 	 *	an Adapter Check interrupt.  If so, it resets the
3083 	 *	adapter.  Otherwise it clears the status registers
3084 	 *	and services the PHY.
3085 	 *
3086 	 **************************************************************/
3087 
3088 u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int )
3089 {
3090 	TLanPrivateInfo	*priv = dev->priv;
3091 	u32		ack;
3092 	u32		error;
3093 	u8		net_sts;
3094 	u32		phy;
3095 	u16		tlphy_ctl;
3096 	u16		tlphy_sts;
3097 
3098 	ack = 1;
3099 	if ( host_int & TLAN_HI_IV_MASK ) {
3100 		netif_stop_queue( dev );
3101 		error = inl( dev->base_addr + TLAN_CH_PARM );
3102 		printk( "TLAN:  %s: Adaptor Error = 0x%x\n", dev->name, error );
3103 		TLan_ReadAndClearStats( dev, TLAN_RECORD );
3104 		outl( TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD );
3105 
3106 		queue_task(&priv->tlan_tqueue, &tq_immediate);
3107 		mark_bh(IMMEDIATE_BH);
3108 
3109 		netif_wake_queue(dev);
3110 		ack = 0;
3111 	} else {
3112 		TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Status Check\n", dev->name );
3113 		phy = priv->phy[priv->phyNum];
3114 
3115 		net_sts = TLan_DioRead8( dev->base_addr, TLAN_NET_STS );
3116 		if ( net_sts ) {
3117 			TLan_DioWrite8( dev->base_addr, TLAN_NET_STS, net_sts );
3118 			TLAN_DBG( TLAN_DEBUG_GNRL, "%s:    Net_Sts = %x\n", dev->name, (unsigned) net_sts );
3119 		}
3120 		if ( ( net_sts & TLAN_NET_STS_MIRQ ) &&  ( priv->phyNum == 0 ) ) {
3121 			TLan_MiiReadReg( dev, phy, TLAN_TLPHY_STS, &tlphy_sts );
3122 			TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl );
3123         		if ( ! ( tlphy_sts & TLAN_TS_POLOK ) && ! ( tlphy_ctl & TLAN_TC_SWAPOL ) ) {
3124                 		tlphy_ctl |= TLAN_TC_SWAPOL;
3125                 		TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tlphy_ctl);
3126         		} else if ( ( tlphy_sts & TLAN_TS_POLOK ) && ( tlphy_ctl & TLAN_TC_SWAPOL ) ) {
3127                 		tlphy_ctl &= ~TLAN_TC_SWAPOL;
3128                 		TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tlphy_ctl);
3129         		}
3130 
3131 			if (debug) {
3132 				TLan_PhyPrint( dev );
3133 			}
3134 		}
3135 	}
3136 
3137 	return ack;
3138 
3139 } /* TLan_HandleStatusCheck */
3140 
3141 	/***************************************************************
3142 	 *	TLan_HandleRxEOC
3143 	 *
3144 	 *	Returns:
3145 	 *		1
3146 	 *	Parms:
3147 	 *		dev		Device assigned the IRQ that was
3148 	 *				raised.
3149 	 *		host_int	The contents of the HOST_INT
3150 	 *				port.
3151 	 *
3152 	 *	This driver is structured to determine EOC occurances by
3153 	 *	reading the CSTAT member of the list structure.  Rx EOC
3154 	 *	interrupts are disabled via the DIO INTDIS register.
3155 	 *	However, TLAN chips before revision 3.0 didn't have this
3156 	 *	CSTAT member or a INTDIS register, so if this chip is
3157 	 *	pre-3.0, process EOC interrupts normally.
3158 	 *
3159 	 **************************************************************/
3160 
3161 u32 TLan_HandleRxEOC( struct net_device *dev, u16 host_int )
3162 {
3163 	TLanPrivateInfo	*priv = dev->priv;
3164 	TLanList	*head_list;
3165 	u32		ack = 1;
3166 
3167 	if (  priv->tlanRev < 0x30 ) {
3168 		TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE:  Handling RX EOC (Head=%d Tail=%d) -- IRQ\n", priv->rxHead, priv->rxTail );
3169 		head_list = priv->rxList + priv->rxHead;
3170 		outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM );
3171 		ack |= TLAN_HC_GO | TLAN_HC_RT;
3172 		priv->rxEocCount++;
3173 	}
3174 
3175 	return ack;
3176 
3177 } /* TLan_HandleRxEOC */
3178 
3179 /*****************************************************************************
3180 ******************************************************************************
3181 
3182 	ThunderLAN Driver Timer Function
3183 
3184 ******************************************************************************
3185 *****************************************************************************/
3186 
3187 	/***************************************************************
3188 	 *	TLan_Timer
3189 	 *
3190 	 *	Returns:
3191 	 *		Nothing
3192 	 *	Parms:
3193 	 *		data	A value given to add timer when
3194 	 *			add_timer was called.
3195 	 *
3196 	 *	This function handles timed functionality for the
3197 	 *	TLAN driver.  The two current timer uses are for
3198 	 *	delaying for autonegotionation and driving the ACT LED.
3199 	 *	-	Autonegotiation requires being allowed about
3200 	 *		2 1/2 seconds before attempting to transmit a
3201 	 *		packet.  It would be a very bad thing to hang
3202 	 *		the kernel this long, so the driver doesn't
3203 	 *		allow transmission 'til after this time, for
3204 	 *		certain PHYs.  It would be much nicer if all
3205 	 *		PHYs were interrupt-capable like the internal
3206 	 *		PHY.
3207 	 *	-	The ACT LED, which shows adapter activity, is
3208 	 *		driven by the driver, and so must be left on
3209 	 *		for a short period to power up the LED so it
3210 	 *		can be seen.  This delay can be changed by
3211 	 *		changing the TLAN_TIMER_ACT_DELAY in tlan.h,
3212 	 *		if desired.  100 ms  produces a slightly
3213 	 *		sluggish response.
3214 	 *
3215 	 **************************************************************/
3216 
3217 void TLan_Timer( unsigned long data )
3218 {
3219 	struct net_device	*dev = (struct net_device *) data;
3220 	TLanPrivateInfo	*priv = dev->priv;
3221 	u32		elapsed;
3222 	unsigned long	flags = 0;
3223 
3224 	priv->timer.function = NULL;
3225 
3226 	switch ( priv->timerType ) {
3227 #ifdef MONITOR
3228 		case TLAN_TIMER_LINK_BEAT:
3229 			TLan_PhyMonitor( dev );
3230 			break;
3231 #endif
3232 		case TLAN_TIMER_PHY_PDOWN:
3233 			TLan_PhyPowerDown( dev );
3234 			break;
3235 		case TLAN_TIMER_PHY_PUP:
3236 			TLan_PhyPowerUp( dev );
3237 			break;
3238 		case TLAN_TIMER_PHY_RESET:
3239 			TLan_PhyReset( dev );
3240 			break;
3241 		case TLAN_TIMER_PHY_START_LINK:
3242 			TLan_PhyStartLink( dev );
3243 			break;
3244 		case TLAN_TIMER_PHY_FINISH_AN:
3245 			TLan_PhyFinishAutoNeg( dev );
3246 			break;
3247 		case TLAN_TIMER_FINISH_RESET:
3248 			TLan_FinishReset( dev );
3249 			break;
3250 		case TLAN_TIMER_ACTIVITY:
3251 			spin_lock_irqsave(&priv->lock, flags);
3252 			if ( priv->timer.function == NULL ) {
3253 				elapsed = jiffies - priv->timerSetAt;
3254 				if ( elapsed >= TLAN_TIMER_ACT_DELAY ) {
3255 					TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK );
3256 				} else  {
3257 					priv->timer.function = &TLan_Timer;
3258 					priv->timer.expires = priv->timerSetAt + TLAN_TIMER_ACT_DELAY;
3259 					spin_unlock_irqrestore(&priv->lock, flags);
3260 					add_timer( &priv->timer );
3261 					break;
3262 				}
3263 			}
3264 			spin_unlock_irqrestore(&priv->lock, flags);
3265 			break;
3266 		default:
3267 			break;
3268 	}
3269 
3270 } /* TLan_Timer */
3271 
3272 /*****************************************************************************
3273 ******************************************************************************
3274 
3275 	ThunderLAN Driver Adapter Related Routines
3276 
3277 ******************************************************************************
3278 *****************************************************************************/
3279 
3280 	/***************************************************************
3281 	 *	TLan_ResetLists
3282 	 *
3283 	 *	Returns:
3284 	 *		Nothing
3285 	 *	Parms:
3286 	 *		dev	The device structure with the list
3287 	 *			stuctures to be reset.
3288 	 *
3289 	 *	This routine sets the variables associated with managing
3290 	 *	the TLAN lists to their initial values.
3291 	 *
3292 	 **************************************************************/
3293 
3294 void TLan_ResetLists( struct net_device *dev )
3295 {
3296 	TLanPrivateInfo *priv = dev->priv;
3297 	int		i;
3298 	TLanList	*list;
3299 	struct sk_buff	*skb;
3300 	void		*t = NULL;
3301 
3302 	priv->txHead = 0;
3303 	priv->txTail = 0;
3304 	for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) {
3305 		list = priv->txList + i;
3306 		list->cStat = TLAN_CSTAT_UNUSED;
3307 		if ( bbuf ) {
3308 			list->buffer[0].address = virt_to_bus( priv->txBuffer + ( i * TLAN_MAX_FRAME_SIZE ) );
3309 		} else {
3310 			list->buffer[0].address = 0;
3311 		}
3312 		list->buffer[2].count = 0;
3313 		list->buffer[2].address = 0;
3314 		list->buffer[9].address = 0;
3315 	}
3316 
3317 	priv->rxHead = 0;
3318 	priv->rxTail = TLAN_NUM_RX_LISTS - 1;
3319 	for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) {
3320 		list = priv->rxList + i;
3321 		list->cStat = TLAN_CSTAT_READY;
3322 		list->frameSize = TLAN_MAX_FRAME_SIZE;
3323 		list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER;
3324 		if ( bbuf ) {
3325 			list->buffer[0].address = virt_to_bus( priv->rxBuffer + ( i * TLAN_MAX_FRAME_SIZE ) );
3326 		} else {
3327 			skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 );
3328 			if ( skb == NULL ) {
3329 				printk( "TLAN:  Couldn't allocate memory for received data.\n" );
3330 				/* If this ever happened it would be a problem */
3331 			} else {
3332 				skb->dev = dev;
3333 				skb_reserve( skb, 2 );
3334 				t = (void *) skb_put( skb, TLAN_MAX_FRAME_SIZE );
3335 			}
3336 			list->buffer[0].address = virt_to_bus( t );
3337 			list->buffer[8].address = (u32) t;
3338 			list->buffer[9].address = (u32) skb;
3339 		}
3340 		list->buffer[1].count = 0;
3341 		list->buffer[1].address = 0;
3342 		if ( i < TLAN_NUM_RX_LISTS - 1 )
3343 			list->forward = virt_to_bus( list + 1 );
3344 		else
3345 			list->forward = 0;
3346 	}
3347 
3348 } /* TLan_ResetLists */
3349 
3350 void TLan_FreeLists( struct net_device *dev )
3351 {
3352 	TLanPrivateInfo *priv = dev->priv;
3353 	int		i;
3354 	TLanList	*list;
3355 	struct sk_buff	*skb;
3356 
3357 	if ( ! bbuf ) {
3358 		for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) {
3359 			list = priv->txList + i;
3360 			skb = (struct sk_buff *) list->buffer[9].address;
3361 			if ( skb ) {
3362 				dev_kfree_skb_any( skb );
3363 				list->buffer[9].address = 0;
3364 			}
3365 		}
3366 
3367 		for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) {
3368 			list = priv->rxList + i;
3369 			skb = (struct sk_buff *) list->buffer[9].address;
3370 			if ( skb ) {
3371 				dev_kfree_skb_any( skb );
3372 				list->buffer[9].address = 0;
3373 			}
3374 		}
3375 	}
3376 
3377 } /* TLan_FreeLists */
3378 
3379 	/***************************************************************
3380 	 *	TLan_PrintDio
3381 	 *
3382 	 *	Returns:
3383 	 *		Nothing
3384 	 *	Parms:
3385 	 *		io_base		Base IO port of the device of
3386 	 *				which to print DIO registers.
3387 	 *
3388 	 *	This function prints out all the internal (DIO)
3389 	 *	registers of a TLAN chip.
3390 	 *
3391 	 **************************************************************/
3392 
3393 void TLan_PrintDio( u16 io_base )
3394 {
3395 	u32 data0, data1;
3396 	int	i;
3397 
3398 	printk( "TLAN:   Contents of internal registers for io base 0x%04hx.\n", io_base );
3399 	printk( "TLAN:      Off.  +0         +4\n" );
3400 	for ( i = 0; i < 0x4C; i+= 8 ) {
3401 		data0 = TLan_DioRead32( io_base, i );
3402 		data1 = TLan_DioRead32( io_base, i + 0x4 );
3403 		printk( "TLAN:      0x%02x  0x%08x 0x%08x\n", i, data0, data1 );
3404 	}
3405 
3406 } /* TLan_PrintDio */
3407 
3408 	/***************************************************************
3409 	 *	TLan_PrintList
3410 	 *
3411 	 *	Returns:
3412 	 *		Nothing
3413 	 *	Parms:
3414 	 *		list	A pointer to the TLanList structure to
3415 	 *			be printed.
3416 	 *		type	A string to designate type of list,
3417 	 *			"Rx" or "Tx".
3418 	 *		num	The index of the list.
3419 	 *
3420 	 *	This function prints out the contents of the list
3421 	 *	pointed to by the list parameter.
3422 	 *
3423 	 **************************************************************/
3424 
3425 void TLan_PrintList( TLanList *list, char *type, int num)
3426 {
3427 	int i;
3428 
3429 	printk( "TLAN:   %s List %d at 0x%08x\n", type, num, (u32) list );
3430 	printk( "TLAN:      Forward    = 0x%08x\n",  list->forward );
3431 	printk( "TLAN:      CSTAT      = 0x%04hx\n", list->cStat );
3432 	printk( "TLAN:      Frame Size = 0x%04hx\n", list->frameSize );
3433 	/* for ( i = 0; i < 10; i++ ) { */
3434 	for ( i = 0; i < 2; i++ ) {
3435 		printk( "TLAN:      Buffer[%d].count, addr = 0x%08x, 0x%08x\n", i, list->buffer[i].count, list->buffer[i].address );
3436 	}
3437 
3438 } /* TLan_PrintList */
3439 
3440 	/***************************************************************
3441 	 *	TLan_ReadAndClearStats
3442 	 *
3443 	 *	Returns:
3444 	 *		Nothing
3445 	 *	Parms:
3446 	 *		dev	Pointer to device structure of adapter
3447 	 *			to which to read stats.
3448 	 *		record	Flag indicating whether to add
3449 	 *
3450 	 *	This functions reads all the internal status registers
3451 	 *	of the TLAN chip, which clears them as a side effect.
3452 	 *	It then either adds the values to the device's status
3453 	 *	struct, or discards them, depending on whether record
3454 	 *	is TLAN_RECORD (!=0)  or TLAN_IGNORE (==0).
3455 	 *
3456 	 **************************************************************/
3457 
3458 void TLan_ReadAndClearStats( struct net_device *dev, int record )
3459 {
3460 	TLanPrivateInfo	*priv = dev->priv;
3461 	u32		tx_good, tx_under;
3462 	u32		rx_good, rx_over;
3463 	u32		def_tx, crc, code;
3464 	u32		multi_col, single_col;
3465 	u32		excess_col, late_col, loss;
3466 
3467 	outw( TLAN_GOOD_TX_FRMS, dev->base_addr + TLAN_DIO_ADR );
3468 	tx_good  = inb( dev->base_addr + TLAN_DIO_DATA );
3469 	tx_good += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8;
3470 	tx_good += inb( dev->base_addr + TLAN_DIO_DATA + 2 ) << 16;
3471 	tx_under = inb( dev->base_addr + TLAN_DIO_DATA + 3 );
3472 
3473 	outw( TLAN_GOOD_RX_FRMS, dev->base_addr + TLAN_DIO_ADR );
3474 	rx_good  = inb( dev->base_addr + TLAN_DIO_DATA );
3475 	rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8;
3476 	rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 2 ) << 16;
3477 	rx_over  = inb( dev->base_addr + TLAN_DIO_DATA + 3 );
3478 
3479 	outw( TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR );
3480 	def_tx  = inb( dev->base_addr + TLAN_DIO_DATA );
3481 	def_tx += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8;
3482 	crc     = inb( dev->base_addr + TLAN_DIO_DATA + 2 );
3483 	code    = inb( dev->base_addr + TLAN_DIO_DATA + 3 );
3484 
3485 	outw( TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR );
3486 	multi_col   = inb( dev->base_addr + TLAN_DIO_DATA );
3487 	multi_col  += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8;
3488 	single_col  = inb( dev->base_addr + TLAN_DIO_DATA + 2 );
3489 	single_col += inb( dev->base_addr + TLAN_DIO_DATA + 3 ) << 8;
3490 
3491 	outw( TLAN_EXCESSCOL_FRMS, dev->base_addr + TLAN_DIO_ADR );
3492 	excess_col = inb( dev->base_addr + TLAN_DIO_DATA );
3493 	late_col   = inb( dev->base_addr + TLAN_DIO_DATA + 1 );
3494 	loss       = inb( dev->base_addr + TLAN_DIO_DATA + 2 );
3495 
3496 	if ( record ) {
3497 		priv->stats.rx_packets += rx_good;
3498 		priv->stats.rx_errors  += rx_over + crc + code;
3499 		priv->stats.tx_packets += tx_good;
3500 		priv->stats.tx_errors  += tx_under + loss;
3501 		priv->stats.collisions += multi_col + single_col + excess_col + late_col;
3502 
3503 		priv->stats.rx_over_errors    += rx_over;
3504 		priv->stats.rx_crc_errors     += crc;
3505 		priv->stats.rx_frame_errors   += code;
3506 
3507 		priv->stats.tx_aborted_errors += tx_under;
3508 		priv->stats.tx_carrier_errors += loss;
3509 	}
3510 
3511 } /* TLan_ReadAndClearStats */
3512 
3513 	/***************************************************************
3514 	 *	TLan_Reset
3515 	 *
3516 	 *	Returns:
3517 	 *		0
3518 	 *	Parms:
3519 	 *		dev	Pointer to device structure of adapter
3520 	 *			to be reset.
3521 	 *
3522 	 *	This function resets the adapter and it's physical
3523 	 *	device.  See Chap. 3, pp. 9-10 of the "ThunderLAN
3524 	 *	Programmer's Guide" for details.  The routine tries to
3525 	 *	implement what is detailed there, though adjustments
3526 	 *	have been made.
3527 	 *
3528 	 **************************************************************/
3529 
3530 void
3531 TLan_ResetAdapter( struct net_device *dev )
3532 {
3533 	TLanPrivateInfo	*priv = dev->priv;
3534 	int		i;
3535 	u32		addr;
3536 	u32		data;
3537 	u8		data8;
3538 
3539 	priv->tlanFullDuplex = FALSE;
3540 	priv->phyOnline=0;
3541 /*  1.	Assert reset bit. */
3542 
3543 	data = inl(dev->base_addr + TLAN_HOST_CMD);
3544 	data |= TLAN_HC_AD_RST;
3545 	outl(data, dev->base_addr + TLAN_HOST_CMD);
3546 
3547 	udelay(1000);
3548 
3549 /*  2.	Turn off interrupts. ( Probably isn't necessary ) */
3550 
3551 	data = inl(dev->base_addr + TLAN_HOST_CMD);
3552 	data |= TLAN_HC_INT_OFF;
3553 	outl(data, dev->base_addr + TLAN_HOST_CMD);
3554 
3555 /*  3.	Clear AREGs and HASHs. */
3556 
3557  	for ( i = TLAN_AREG_0; i <= TLAN_HASH_2; i += 4 ) {
3558 		TLan_DioWrite32( dev->base_addr, (u16) i, 0 );
3559 	}
3560 
3561 /*  4.	Setup NetConfig register. */
3562 
3563 	data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN;
3564 	TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, (u16) data );
3565 
3566 /*  5.	Load Ld_Tmr and Ld_Thr in HOST_CMD. */
3567 
3568  	outl( TLAN_HC_LD_TMR | 0x3f, dev->base_addr + TLAN_HOST_CMD );
3569  	outl( TLAN_HC_LD_THR | 0x9, dev->base_addr + TLAN_HOST_CMD );
3570 
3571 /*  6.	Unreset the MII by setting NMRST (in NetSio) to 1. */
3572 
3573 	outw( TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR );
3574 	addr = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
3575 	TLan_SetBit( TLAN_NET_SIO_NMRST, addr );
3576 
3577 /*  7.	Setup the remaining registers. */
3578 
3579 	if ( priv->tlanRev >= 0x30 ) {
3580 		data8 = TLAN_ID_TX_EOC | TLAN_ID_RX_EOC;
3581 		TLan_DioWrite8( dev->base_addr, TLAN_INT_DIS, data8 );
3582 	}
3583 	TLan_PhyDetect( dev );
3584 	data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN;
3585 
3586 	if ( priv->adapter->flags & TLAN_ADAPTER_BIT_RATE_PHY ) {
3587 		data |= TLAN_NET_CFG_BIT;
3588 		if ( priv->aui == 1 ) {
3589 			TLan_DioWrite8( dev->base_addr, TLAN_ACOMMIT, 0x0a );
3590 		} else if ( priv->duplex == TLAN_DUPLEX_FULL ) {
3591 			TLan_DioWrite8( dev->base_addr, TLAN_ACOMMIT, 0x00 );
3592 			priv->tlanFullDuplex = TRUE;
3593 		} else {
3594 			TLan_DioWrite8( dev->base_addr, TLAN_ACOMMIT, 0x08 );
3595 		}
3596 	}
3597 
3598 	if ( priv->phyNum == 0 ) {
3599 		data |= TLAN_NET_CFG_PHY_EN;
3600 	}
3601 	TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, (u16) data );
3602 
3603 	if ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) {
3604 		TLan_FinishReset( dev );
3605 	} else {
3606 		TLan_PhyPowerDown( dev );
3607 	}
3608 
3609 } /* TLan_ResetAdapter */
3610 
3611 void
3612 TLan_FinishReset( struct net_device *dev )
3613 {
3614 	TLanPrivateInfo	*priv = dev->priv;
3615 	u8		data;
3616 	u32		phy;
3617 	u8		sio;
3618 	u16		status;
3619 	u16		partner;
3620 	u16		tlphy_ctl;
3621 	u16 		tlphy_par;
3622 	u16		tlphy_id1, tlphy_id2;
3623 	int 		i;
3624 
3625 	phy = priv->phy[priv->phyNum];
3626 
3627 	data = TLAN_NET_CMD_NRESET | TLAN_NET_CMD_NWRAP;
3628 	if ( priv->tlanFullDuplex ) {
3629 		data |= TLAN_NET_CMD_DUPLEX;
3630 	}
3631 	TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, data );
3632 	data = TLAN_NET_MASK_MASK4 | TLAN_NET_MASK_MASK5;
3633 	if ( priv->phyNum == 0 ) {
3634 		data |= TLAN_NET_MASK_MASK7;
3635 	}
3636 	TLan_DioWrite8( dev->base_addr, TLAN_NET_MASK, data );
3637 	TLan_DioWrite16( dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7 );
3638 	TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &tlphy_id1 );
3639 	TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &tlphy_id2 );
3640 
3641 	if ( ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) || ( priv->aui ) ) {
3642 		status = MII_GS_LINK;
3643 		printk( "TLAN:  %s: Link forced.\n", dev->name );
3644 	} else {
3645 		TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
3646 		udelay( 1000 );
3647 		TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
3648 		if ( (status & MII_GS_LINK) &&	 /* We only support link info on Nat.Sem. PHY's */
3649 			(tlphy_id1 == NAT_SEM_ID1) &&
3650 			(tlphy_id2 == NAT_SEM_ID2) ) {
3651 			TLan_MiiReadReg( dev, phy, MII_AN_LPA, &partner );
3652 			TLan_MiiReadReg( dev, phy, TLAN_TLPHY_PAR, &tlphy_par );
3653 
3654 			printk( "TLAN: %s: Link active with ", dev->name );
3655 			if (!(tlphy_par & TLAN_PHY_AN_EN_STAT)) {
3656 			      	 printk( "forced 10%sMbps %s-Duplex\n",
3657 						tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0",
3658 						tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half");
3659 			} else {
3660 				printk( "AutoNegotiation enabled, at 10%sMbps %s-Duplex\n",
3661 						tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0",
3662 						tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half");
3663 				printk("TLAN: Partner capability: ");
3664 					for (i = 5; i <= 10; i++)
3665 						if (partner & (1<<i))
3666 							printk("%s", media[i-5]);
3667 							printk("\n");
3668 			}
3669 
3670 			TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK );
3671 #ifdef MONITOR
3672 			/* We have link beat..for now anyway */
3673 	        	priv->link = 1;
3674 	        	/*Enabling link beat monitoring */
3675 			TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_LINK_BEAT );
3676 #endif
3677 		} else if (status & MII_GS_LINK)  {
3678 			printk( "TLAN: %s: Link active\n", dev->name );
3679 			TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK );
3680 		}
3681 	}
3682 
3683 	if ( priv->phyNum == 0 ) {
3684         	TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl );
3685         	tlphy_ctl |= TLAN_TC_INTEN;
3686         	TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tlphy_ctl );
3687         	sio = TLan_DioRead8( dev->base_addr, TLAN_NET_SIO );
3688         	sio |= TLAN_NET_SIO_MINTEN;
3689         	TLan_DioWrite8( dev->base_addr, TLAN_NET_SIO, sio );
3690 	}
3691 
3692 	if ( status & MII_GS_LINK ) {
3693 		TLan_SetMac( dev, 0, dev->dev_addr );
3694 		priv->phyOnline = 1;
3695 		outb( ( TLAN_HC_INT_ON >> 8 ), dev->base_addr + TLAN_HOST_CMD + 1 );
3696 		if ( debug >= 1 && debug != TLAN_DEBUG_PROBE ) {
3697 			outb( ( TLAN_HC_REQ_INT >> 8 ), dev->base_addr + TLAN_HOST_CMD + 1 );
3698 		}
3699 		outl( virt_to_bus( priv->rxList ), dev->base_addr + TLAN_CH_PARM );
3700 		outl( TLAN_HC_GO | TLAN_HC_RT, dev->base_addr + TLAN_HOST_CMD );
3701 	} else {
3702 		printk( "TLAN: %s: Link inactive, will retry in 10 secs...\n", dev->name );
3703 		TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_FINISH_RESET );
3704 		return;
3705 	}
3706 
3707 } /* TLan_FinishReset */
3708 
3709 	/***************************************************************
3710 	 *	TLan_SetMac
3711 	 *
3712 	 *	Returns:
3713 	 *		Nothing
3714 	 *	Parms:
3715 	 *		dev	Pointer to device structure of adapter
3716 	 *			on which to change the AREG.
3717 	 *		areg	The AREG to set the address in (0 - 3).
3718 	 *		mac	A pointer to an array of chars.  Each
3719 	 *			element stores one byte of the address.
3720 	 *			IE, it isn't in ascii.
3721 	 *
3722 	 *	This function transfers a MAC address to one of the
3723 	 *	TLAN AREGs (address registers).  The TLAN chip locks
3724 	 *	the register on writing to offset 0 and unlocks the
3725 	 *	register after writing to offset 5.  If NULL is passed
3726 	 *	in mac, then the AREG is filled with 0's.
3727 	 *
3728 	 **************************************************************/
3729 
3730 void TLan_SetMac( struct net_device *dev, int areg, char *mac )
3731 {
3732 	int i;
3733 
3734 	areg *= 6;
3735 
3736 	if ( mac != NULL ) {
3737 		for ( i = 0; i < 6; i++ )
3738 			TLan_DioWrite8( dev->base_addr, TLAN_AREG_0 + areg + i, mac[i] );
3739 	} else {
3740 		for ( i = 0; i < 6; i++ )
3741 			TLan_DioWrite8( dev->base_addr, TLAN_AREG_0 + areg + i, 0 );
3742 	}
3743 
3744 } /* TLan_SetMac */
3745 
3746 #endif
3747