xref: /openbmc/linux/drivers/net/ethernet/ti/tlan.c (revision 82df5b73)
1 /*******************************************************************************
2  *
3  *  Linux ThunderLAN Driver
4  *
5  *  tlan.c
6  *  by James Banks
7  *
8  *  (C) 1997-1998 Caldera, Inc.
9  *  (C) 1998 James Banks
10  *  (C) 1999-2001 Torben Mathiasen
11  *  (C) 2002 Samuel Chessman
12  *
13  *  This software may be used and distributed according to the terms
14  *  of the GNU General Public License, incorporated herein by reference.
15  *
16  ** Useful (if not required) reading:
17  *
18  *		Texas Instruments, ThunderLAN Programmer's Guide,
19  *			TI Literature Number SPWU013A
20  *			available in PDF format from www.ti.com
21  *		Level One, LXT901 and LXT970 Data Sheets
22  *			available in PDF format from www.level1.com
23  *		National Semiconductor, DP83840A Data Sheet
24  *			available in PDF format from www.national.com
25  *		Microchip Technology, 24C01A/02A/04A Data Sheet
26  *			available in PDF format from www.microchip.com
27  *
28  ******************************************************************************/
29 
30 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
31 
32 #include <linux/hardirq.h>
33 #include <linux/module.h>
34 #include <linux/init.h>
35 #include <linux/interrupt.h>
36 #include <linux/ioport.h>
37 #include <linux/eisa.h>
38 #include <linux/pci.h>
39 #include <linux/dma-mapping.h>
40 #include <linux/netdevice.h>
41 #include <linux/etherdevice.h>
42 #include <linux/delay.h>
43 #include <linux/spinlock.h>
44 #include <linux/workqueue.h>
45 #include <linux/mii.h>
46 
47 #include "tlan.h"
48 
49 
50 /* For removing EISA devices */
51 static	struct net_device	*tlan_eisa_devices;
52 
53 static	int		tlan_devices_installed;
54 
55 /* Set speed, duplex and aui settings */
56 static  int aui[MAX_TLAN_BOARDS];
57 static  int duplex[MAX_TLAN_BOARDS];
58 static  int speed[MAX_TLAN_BOARDS];
59 static  int boards_found;
60 module_param_array(aui, int, NULL, 0);
61 module_param_array(duplex, int, NULL, 0);
62 module_param_array(speed, int, NULL, 0);
63 MODULE_PARM_DESC(aui, "ThunderLAN use AUI port(s) (0-1)");
64 MODULE_PARM_DESC(duplex,
65 		 "ThunderLAN duplex setting(s) (0-default, 1-half, 2-full)");
66 MODULE_PARM_DESC(speed, "ThunderLAN port speed setting(s) (0,10,100)");
67 
68 MODULE_AUTHOR("Maintainer: Samuel Chessman <chessman@tux.org>");
69 MODULE_DESCRIPTION("Driver for TI ThunderLAN based ethernet PCI adapters");
70 MODULE_LICENSE("GPL");
71 
72 /* Turn on debugging.
73  * See Documentation/networking/device_drivers/ti/tlan.rst for details
74  */
75 static  int		debug;
76 module_param(debug, int, 0);
77 MODULE_PARM_DESC(debug, "ThunderLAN debug mask");
78 
79 static	const char tlan_signature[] = "TLAN";
80 static  const char tlan_banner[] = "ThunderLAN driver v1.17\n";
81 static  int tlan_have_pci;
82 static  int tlan_have_eisa;
83 
84 static const char * const media[] = {
85 	"10BaseT-HD", "10BaseT-FD", "100baseTx-HD",
86 	"100BaseTx-FD", "100BaseT4", NULL
87 };
88 
89 static struct board {
90 	const char	*device_label;
91 	u32		flags;
92 	u16		addr_ofs;
93 } board_info[] = {
94 	{ "Compaq Netelligent 10 T PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
95 	{ "Compaq Netelligent 10/100 TX PCI UTP",
96 	  TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
97 	{ "Compaq Integrated NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
98 	{ "Compaq NetFlex-3/P",
99 	  TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
100 	{ "Compaq NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
101 	{ "Compaq Netelligent Integrated 10/100 TX UTP",
102 	  TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
103 	{ "Compaq Netelligent Dual 10/100 TX PCI UTP",
104 	  TLAN_ADAPTER_NONE, 0x83 },
105 	{ "Compaq Netelligent 10/100 TX Embedded UTP",
106 	  TLAN_ADAPTER_NONE, 0x83 },
107 	{ "Olicom OC-2183/2185", TLAN_ADAPTER_USE_INTERN_10, 0x83 },
108 	{ "Olicom OC-2325", TLAN_ADAPTER_ACTIVITY_LED |
109 	  TLAN_ADAPTER_UNMANAGED_PHY, 0xf8 },
110 	{ "Olicom OC-2326", TLAN_ADAPTER_ACTIVITY_LED |
111 	  TLAN_ADAPTER_USE_INTERN_10, 0xf8 },
112 	{ "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
113 	{ "Compaq Netelligent 10 T/2 PCI UTP/coax", TLAN_ADAPTER_NONE, 0x83 },
114 	{ "Compaq NetFlex-3/E",
115 	  TLAN_ADAPTER_ACTIVITY_LED |	/* EISA card */
116 	  TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
117 	{ "Compaq NetFlex-3/E",
118 	  TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */
119 };
120 
121 static const struct pci_device_id tlan_pci_tbl[] = {
122 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL10,
123 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
124 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100,
125 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
126 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3I,
127 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
128 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_THUNDER,
129 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
130 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3B,
131 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
132 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100PI,
133 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
134 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100D,
135 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
136 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100I,
137 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
138 	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2183,
139 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
140 	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2325,
141 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
142 	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326,
143 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
144 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100,
145 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
146 	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_T2,
147 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
148 	{ 0,}
149 };
150 MODULE_DEVICE_TABLE(pci, tlan_pci_tbl);
151 
152 static void	tlan_eisa_probe(void);
153 static void	tlan_eisa_cleanup(void);
154 static int      tlan_init(struct net_device *);
155 static int	tlan_open(struct net_device *dev);
156 static netdev_tx_t tlan_start_tx(struct sk_buff *, struct net_device *);
157 static irqreturn_t tlan_handle_interrupt(int, void *);
158 static int	tlan_close(struct net_device *);
159 static struct	net_device_stats *tlan_get_stats(struct net_device *);
160 static void	tlan_set_multicast_list(struct net_device *);
161 static int	tlan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
162 static int      tlan_probe1(struct pci_dev *pdev, long ioaddr,
163 			    int irq, int rev, const struct pci_device_id *ent);
164 static void	tlan_tx_timeout(struct net_device *dev, unsigned int txqueue);
165 static void	tlan_tx_timeout_work(struct work_struct *work);
166 static int	tlan_init_one(struct pci_dev *pdev,
167 			      const struct pci_device_id *ent);
168 
169 static u32	tlan_handle_tx_eof(struct net_device *, u16);
170 static u32	tlan_handle_stat_overflow(struct net_device *, u16);
171 static u32	tlan_handle_rx_eof(struct net_device *, u16);
172 static u32	tlan_handle_dummy(struct net_device *, u16);
173 static u32	tlan_handle_tx_eoc(struct net_device *, u16);
174 static u32	tlan_handle_status_check(struct net_device *, u16);
175 static u32	tlan_handle_rx_eoc(struct net_device *, u16);
176 
177 static void	tlan_timer(struct timer_list *t);
178 static void	tlan_phy_monitor(struct timer_list *t);
179 
180 static void	tlan_reset_lists(struct net_device *);
181 static void	tlan_free_lists(struct net_device *);
182 static void	tlan_print_dio(u16);
183 static void	tlan_print_list(struct tlan_list *, char *, int);
184 static void	tlan_read_and_clear_stats(struct net_device *, int);
185 static void	tlan_reset_adapter(struct net_device *);
186 static void	tlan_finish_reset(struct net_device *);
187 static void	tlan_set_mac(struct net_device *, int areg, char *mac);
188 
189 static void	tlan_phy_print(struct net_device *);
190 static void	tlan_phy_detect(struct net_device *);
191 static void	tlan_phy_power_down(struct net_device *);
192 static void	tlan_phy_power_up(struct net_device *);
193 static void	tlan_phy_reset(struct net_device *);
194 static void	tlan_phy_start_link(struct net_device *);
195 static void	tlan_phy_finish_auto_neg(struct net_device *);
196 
197 /*
198   static int	tlan_phy_nop(struct net_device *);
199   static int	tlan_phy_internal_check(struct net_device *);
200   static int	tlan_phy_internal_service(struct net_device *);
201   static int	tlan_phy_dp83840a_check(struct net_device *);
202 */
203 
204 static bool	tlan_mii_read_reg(struct net_device *, u16, u16, u16 *);
205 static void	tlan_mii_send_data(u16, u32, unsigned);
206 static void	tlan_mii_sync(u16);
207 static void	tlan_mii_write_reg(struct net_device *, u16, u16, u16);
208 
209 static void	tlan_ee_send_start(u16);
210 static int	tlan_ee_send_byte(u16, u8, int);
211 static void	tlan_ee_receive_byte(u16, u8 *, int);
212 static int	tlan_ee_read_byte(struct net_device *, u8, u8 *);
213 
214 
215 static inline void
216 tlan_store_skb(struct tlan_list *tag, struct sk_buff *skb)
217 {
218 	unsigned long addr = (unsigned long)skb;
219 	tag->buffer[9].address = addr;
220 	tag->buffer[8].address = upper_32_bits(addr);
221 }
222 
223 static inline struct sk_buff *
224 tlan_get_skb(const struct tlan_list *tag)
225 {
226 	unsigned long addr;
227 
228 	addr = tag->buffer[9].address;
229 	addr |= ((unsigned long) tag->buffer[8].address << 16) << 16;
230 	return (struct sk_buff *) addr;
231 }
232 
233 static u32
234 (*tlan_int_vector[TLAN_INT_NUMBER_OF_INTS])(struct net_device *, u16) = {
235 	NULL,
236 	tlan_handle_tx_eof,
237 	tlan_handle_stat_overflow,
238 	tlan_handle_rx_eof,
239 	tlan_handle_dummy,
240 	tlan_handle_tx_eoc,
241 	tlan_handle_status_check,
242 	tlan_handle_rx_eoc
243 };
244 
245 static inline void
246 tlan_set_timer(struct net_device *dev, u32 ticks, u32 type)
247 {
248 	struct tlan_priv *priv = netdev_priv(dev);
249 	unsigned long flags = 0;
250 
251 	if (!in_irq())
252 		spin_lock_irqsave(&priv->lock, flags);
253 	if (priv->timer.function != NULL &&
254 	    priv->timer_type != TLAN_TIMER_ACTIVITY) {
255 		if (!in_irq())
256 			spin_unlock_irqrestore(&priv->lock, flags);
257 		return;
258 	}
259 	priv->timer.function = tlan_timer;
260 	if (!in_irq())
261 		spin_unlock_irqrestore(&priv->lock, flags);
262 
263 	priv->timer_set_at = jiffies;
264 	priv->timer_type = type;
265 	mod_timer(&priv->timer, jiffies + ticks);
266 
267 }
268 
269 
270 /*****************************************************************************
271 ******************************************************************************
272 
273 ThunderLAN driver primary functions
274 
275 these functions are more or less common to all linux network drivers.
276 
277 ******************************************************************************
278 *****************************************************************************/
279 
280 
281 
282 
283 
284 /***************************************************************
285  *	tlan_remove_one
286  *
287  *	Returns:
288  *		Nothing
289  *	Parms:
290  *		None
291  *
292  *	Goes through the TLanDevices list and frees the device
293  *	structs and memory associated with each device (lists
294  *	and buffers).  It also ureserves the IO port regions
295  *	associated with this device.
296  *
297  **************************************************************/
298 
299 
300 static void tlan_remove_one(struct pci_dev *pdev)
301 {
302 	struct net_device *dev = pci_get_drvdata(pdev);
303 	struct tlan_priv	*priv = netdev_priv(dev);
304 
305 	unregister_netdev(dev);
306 
307 	if (priv->dma_storage) {
308 		pci_free_consistent(priv->pci_dev,
309 				    priv->dma_size, priv->dma_storage,
310 				    priv->dma_storage_dma);
311 	}
312 
313 #ifdef CONFIG_PCI
314 	pci_release_regions(pdev);
315 #endif
316 
317 	free_netdev(dev);
318 
319 	cancel_work_sync(&priv->tlan_tqueue);
320 }
321 
322 static void tlan_start(struct net_device *dev)
323 {
324 	tlan_reset_lists(dev);
325 	/* NOTE: It might not be necessary to read the stats before a
326 	   reset if you don't care what the values are.
327 	*/
328 	tlan_read_and_clear_stats(dev, TLAN_IGNORE);
329 	tlan_reset_adapter(dev);
330 	netif_wake_queue(dev);
331 }
332 
333 static void tlan_stop(struct net_device *dev)
334 {
335 	struct tlan_priv *priv = netdev_priv(dev);
336 
337 	del_timer_sync(&priv->media_timer);
338 	tlan_read_and_clear_stats(dev, TLAN_RECORD);
339 	outl(TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD);
340 	/* Reset and power down phy */
341 	tlan_reset_adapter(dev);
342 	if (priv->timer.function != NULL) {
343 		del_timer_sync(&priv->timer);
344 		priv->timer.function = NULL;
345 	}
346 }
347 
348 #ifdef CONFIG_PM
349 
350 static int tlan_suspend(struct pci_dev *pdev, pm_message_t state)
351 {
352 	struct net_device *dev = pci_get_drvdata(pdev);
353 
354 	if (netif_running(dev))
355 		tlan_stop(dev);
356 
357 	netif_device_detach(dev);
358 	pci_save_state(pdev);
359 	pci_disable_device(pdev);
360 	pci_wake_from_d3(pdev, false);
361 	pci_set_power_state(pdev, PCI_D3hot);
362 
363 	return 0;
364 }
365 
366 static int tlan_resume(struct pci_dev *pdev)
367 {
368 	struct net_device *dev = pci_get_drvdata(pdev);
369 	int rc = pci_enable_device(pdev);
370 
371 	if (rc)
372 		return rc;
373 	pci_restore_state(pdev);
374 	pci_enable_wake(pdev, PCI_D0, 0);
375 	netif_device_attach(dev);
376 
377 	if (netif_running(dev))
378 		tlan_start(dev);
379 
380 	return 0;
381 }
382 
383 #else /* CONFIG_PM */
384 
385 #define tlan_suspend   NULL
386 #define tlan_resume    NULL
387 
388 #endif /* CONFIG_PM */
389 
390 
391 static struct pci_driver tlan_driver = {
392 	.name		= "tlan",
393 	.id_table	= tlan_pci_tbl,
394 	.probe		= tlan_init_one,
395 	.remove		= tlan_remove_one,
396 	.suspend	= tlan_suspend,
397 	.resume		= tlan_resume,
398 };
399 
400 static int __init tlan_probe(void)
401 {
402 	int rc = -ENODEV;
403 
404 	pr_info("%s", tlan_banner);
405 
406 	TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n");
407 
408 	/* Use new style PCI probing. Now the kernel will
409 	   do most of this for us */
410 	rc = pci_register_driver(&tlan_driver);
411 
412 	if (rc != 0) {
413 		pr_err("Could not register pci driver\n");
414 		goto err_out_pci_free;
415 	}
416 
417 	TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n");
418 	tlan_eisa_probe();
419 
420 	pr_info("%d device%s installed, PCI: %d  EISA: %d\n",
421 		tlan_devices_installed, tlan_devices_installed == 1 ? "" : "s",
422 		tlan_have_pci, tlan_have_eisa);
423 
424 	if (tlan_devices_installed == 0) {
425 		rc = -ENODEV;
426 		goto  err_out_pci_unreg;
427 	}
428 	return 0;
429 
430 err_out_pci_unreg:
431 	pci_unregister_driver(&tlan_driver);
432 err_out_pci_free:
433 	return rc;
434 }
435 
436 
437 static int tlan_init_one(struct pci_dev *pdev,
438 				   const struct pci_device_id *ent)
439 {
440 	return tlan_probe1(pdev, -1, -1, 0, ent);
441 }
442 
443 
444 /*
445 ***************************************************************
446 *	tlan_probe1
447 *
448 *	Returns:
449 *		0 on success, error code on error
450 *	Parms:
451 *		none
452 *
453 *	The name is lower case to fit in with all the rest of
454 *	the netcard_probe names.  This function looks for
455 *	another TLan based adapter, setting it up with the
456 *	allocated device struct if one is found.
457 *	tlan_probe has been ported to the new net API and
458 *	now allocates its own device structure. This function
459 *	is also used by modules.
460 *
461 **************************************************************/
462 
463 static int tlan_probe1(struct pci_dev *pdev, long ioaddr, int irq, int rev,
464 		       const struct pci_device_id *ent)
465 {
466 
467 	struct net_device  *dev;
468 	struct tlan_priv  *priv;
469 	u16		   device_id;
470 	int		   reg, rc = -ENODEV;
471 
472 #ifdef CONFIG_PCI
473 	if (pdev) {
474 		rc = pci_enable_device(pdev);
475 		if (rc)
476 			return rc;
477 
478 		rc = pci_request_regions(pdev, tlan_signature);
479 		if (rc) {
480 			pr_err("Could not reserve IO regions\n");
481 			goto err_out;
482 		}
483 	}
484 #endif  /*  CONFIG_PCI  */
485 
486 	dev = alloc_etherdev(sizeof(struct tlan_priv));
487 	if (dev == NULL) {
488 		rc = -ENOMEM;
489 		goto err_out_regions;
490 	}
491 	SET_NETDEV_DEV(dev, &pdev->dev);
492 
493 	priv = netdev_priv(dev);
494 
495 	priv->pci_dev = pdev;
496 	priv->dev = dev;
497 
498 	/* Is this a PCI device? */
499 	if (pdev) {
500 		u32		   pci_io_base = 0;
501 
502 		priv->adapter = &board_info[ent->driver_data];
503 
504 		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
505 		if (rc) {
506 			pr_err("No suitable PCI mapping available\n");
507 			goto err_out_free_dev;
508 		}
509 
510 		for (reg = 0; reg <= 5; reg++) {
511 			if (pci_resource_flags(pdev, reg) & IORESOURCE_IO) {
512 				pci_io_base = pci_resource_start(pdev, reg);
513 				TLAN_DBG(TLAN_DEBUG_GNRL,
514 					 "IO mapping is available at %x.\n",
515 					 pci_io_base);
516 				break;
517 			}
518 		}
519 		if (!pci_io_base) {
520 			pr_err("No IO mappings available\n");
521 			rc = -EIO;
522 			goto err_out_free_dev;
523 		}
524 
525 		dev->base_addr = pci_io_base;
526 		dev->irq = pdev->irq;
527 		priv->adapter_rev = pdev->revision;
528 		pci_set_master(pdev);
529 		pci_set_drvdata(pdev, dev);
530 
531 	} else	{     /* EISA card */
532 		/* This is a hack. We need to know which board structure
533 		 * is suited for this adapter */
534 		device_id = inw(ioaddr + EISA_ID2);
535 		if (device_id == 0x20F1) {
536 			priv->adapter = &board_info[13]; /* NetFlex-3/E */
537 			priv->adapter_rev = 23;		/* TLAN 2.3 */
538 		} else {
539 			priv->adapter = &board_info[14];
540 			priv->adapter_rev = 10;		/* TLAN 1.0 */
541 		}
542 		dev->base_addr = ioaddr;
543 		dev->irq = irq;
544 	}
545 
546 	/* Kernel parameters */
547 	if (dev->mem_start) {
548 		priv->aui    = dev->mem_start & 0x01;
549 		priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0
550 			: (dev->mem_start & 0x06) >> 1;
551 		priv->speed  = ((dev->mem_start & 0x18) == 0x18) ? 0
552 			: (dev->mem_start & 0x18) >> 3;
553 
554 		if (priv->speed == 0x1)
555 			priv->speed = TLAN_SPEED_10;
556 		else if (priv->speed == 0x2)
557 			priv->speed = TLAN_SPEED_100;
558 
559 		debug = priv->debug = dev->mem_end;
560 	} else {
561 		priv->aui    = aui[boards_found];
562 		priv->speed  = speed[boards_found];
563 		priv->duplex = duplex[boards_found];
564 		priv->debug = debug;
565 	}
566 
567 	/* This will be used when we get an adapter error from
568 	 * within our irq handler */
569 	INIT_WORK(&priv->tlan_tqueue, tlan_tx_timeout_work);
570 
571 	spin_lock_init(&priv->lock);
572 
573 	rc = tlan_init(dev);
574 	if (rc) {
575 		pr_err("Could not set up device\n");
576 		goto err_out_free_dev;
577 	}
578 
579 	rc = register_netdev(dev);
580 	if (rc) {
581 		pr_err("Could not register device\n");
582 		goto err_out_uninit;
583 	}
584 
585 
586 	tlan_devices_installed++;
587 	boards_found++;
588 
589 	/* pdev is NULL if this is an EISA device */
590 	if (pdev)
591 		tlan_have_pci++;
592 	else {
593 		priv->next_device = tlan_eisa_devices;
594 		tlan_eisa_devices = dev;
595 		tlan_have_eisa++;
596 	}
597 
598 	netdev_info(dev, "irq=%2d, io=%04x, %s, Rev. %d\n",
599 		    (int)dev->irq,
600 		    (int)dev->base_addr,
601 		    priv->adapter->device_label,
602 		    priv->adapter_rev);
603 	return 0;
604 
605 err_out_uninit:
606 	pci_free_consistent(priv->pci_dev, priv->dma_size, priv->dma_storage,
607 			    priv->dma_storage_dma);
608 err_out_free_dev:
609 	free_netdev(dev);
610 err_out_regions:
611 #ifdef CONFIG_PCI
612 	if (pdev)
613 		pci_release_regions(pdev);
614 err_out:
615 #endif
616 	if (pdev)
617 		pci_disable_device(pdev);
618 	return rc;
619 }
620 
621 
622 static void tlan_eisa_cleanup(void)
623 {
624 	struct net_device *dev;
625 	struct tlan_priv *priv;
626 
627 	while (tlan_have_eisa) {
628 		dev = tlan_eisa_devices;
629 		priv = netdev_priv(dev);
630 		if (priv->dma_storage) {
631 			pci_free_consistent(priv->pci_dev, priv->dma_size,
632 					    priv->dma_storage,
633 					    priv->dma_storage_dma);
634 		}
635 		release_region(dev->base_addr, 0x10);
636 		unregister_netdev(dev);
637 		tlan_eisa_devices = priv->next_device;
638 		free_netdev(dev);
639 		tlan_have_eisa--;
640 	}
641 }
642 
643 
644 static void __exit tlan_exit(void)
645 {
646 	pci_unregister_driver(&tlan_driver);
647 
648 	if (tlan_have_eisa)
649 		tlan_eisa_cleanup();
650 
651 }
652 
653 
654 /* Module loading/unloading */
655 module_init(tlan_probe);
656 module_exit(tlan_exit);
657 
658 
659 
660 /**************************************************************
661  *	tlan_eisa_probe
662  *
663  *	Returns: 0 on success, 1 otherwise
664  *
665  *	Parms:	 None
666  *
667  *
668  *	This functions probes for EISA devices and calls
669  *	TLan_probe1 when one is found.
670  *
671  *************************************************************/
672 
673 static void  __init tlan_eisa_probe(void)
674 {
675 	long	ioaddr;
676 	int	rc = -ENODEV;
677 	int	irq;
678 	u16	device_id;
679 
680 	if (!EISA_bus) {
681 		TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n");
682 		return;
683 	}
684 
685 	/* Loop through all slots of the EISA bus */
686 	for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) {
687 
688 		TLAN_DBG(TLAN_DEBUG_PROBE, "EISA_ID 0x%4x: 0x%4x\n",
689 			 (int) ioaddr + 0xc80, inw(ioaddr + EISA_ID));
690 		TLAN_DBG(TLAN_DEBUG_PROBE, "EISA_ID 0x%4x: 0x%4x\n",
691 			 (int) ioaddr + 0xc82, inw(ioaddr + EISA_ID2));
692 
693 
694 		TLAN_DBG(TLAN_DEBUG_PROBE,
695 			 "Probing for EISA adapter at IO: 0x%4x : ",
696 			 (int) ioaddr);
697 		if (request_region(ioaddr, 0x10, tlan_signature) == NULL)
698 			goto out;
699 
700 		if (inw(ioaddr + EISA_ID) != 0x110E) {
701 			release_region(ioaddr, 0x10);
702 			goto out;
703 		}
704 
705 		device_id = inw(ioaddr + EISA_ID2);
706 		if (device_id !=  0x20F1 && device_id != 0x40F1) {
707 			release_region(ioaddr, 0x10);
708 			goto out;
709 		}
710 
711 		/* check if adapter is enabled */
712 		if (inb(ioaddr + EISA_CR) != 0x1) {
713 			release_region(ioaddr, 0x10);
714 			goto out2;
715 		}
716 
717 		if (debug == 0x10)
718 			pr_info("Found one\n");
719 
720 
721 		/* Get irq from board */
722 		switch (inb(ioaddr + 0xcc0)) {
723 		case(0x10):
724 			irq = 5;
725 			break;
726 		case(0x20):
727 			irq = 9;
728 			break;
729 		case(0x40):
730 			irq = 10;
731 			break;
732 		case(0x80):
733 			irq = 11;
734 			break;
735 		default:
736 			goto out;
737 		}
738 
739 
740 		/* Setup the newly found eisa adapter */
741 		rc = tlan_probe1(NULL, ioaddr, irq,
742 				 12, NULL);
743 		continue;
744 
745 out:
746 		if (debug == 0x10)
747 			pr_info("None found\n");
748 		continue;
749 
750 out2:
751 		if (debug == 0x10)
752 			pr_info("Card found but it is not enabled, skipping\n");
753 		continue;
754 
755 	}
756 
757 }
758 
759 #ifdef CONFIG_NET_POLL_CONTROLLER
760 static void tlan_poll(struct net_device *dev)
761 {
762 	disable_irq(dev->irq);
763 	tlan_handle_interrupt(dev->irq, dev);
764 	enable_irq(dev->irq);
765 }
766 #endif
767 
768 static const struct net_device_ops tlan_netdev_ops = {
769 	.ndo_open		= tlan_open,
770 	.ndo_stop		= tlan_close,
771 	.ndo_start_xmit		= tlan_start_tx,
772 	.ndo_tx_timeout		= tlan_tx_timeout,
773 	.ndo_get_stats		= tlan_get_stats,
774 	.ndo_set_rx_mode	= tlan_set_multicast_list,
775 	.ndo_do_ioctl		= tlan_ioctl,
776 	.ndo_set_mac_address	= eth_mac_addr,
777 	.ndo_validate_addr	= eth_validate_addr,
778 #ifdef CONFIG_NET_POLL_CONTROLLER
779 	.ndo_poll_controller	 = tlan_poll,
780 #endif
781 };
782 
783 static void tlan_get_drvinfo(struct net_device *dev,
784 			     struct ethtool_drvinfo *info)
785 {
786 	struct tlan_priv *priv = netdev_priv(dev);
787 
788 	strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
789 	if (priv->pci_dev)
790 		strlcpy(info->bus_info, pci_name(priv->pci_dev),
791 			sizeof(info->bus_info));
792 	else
793 		strlcpy(info->bus_info, "EISA",	sizeof(info->bus_info));
794 }
795 
796 static int tlan_get_eeprom_len(struct net_device *dev)
797 {
798 	return TLAN_EEPROM_SIZE;
799 }
800 
801 static int tlan_get_eeprom(struct net_device *dev,
802 			   struct ethtool_eeprom *eeprom, u8 *data)
803 {
804 	int i;
805 
806 	for (i = 0; i < TLAN_EEPROM_SIZE; i++)
807 		if (tlan_ee_read_byte(dev, i, &data[i]))
808 			return -EIO;
809 
810 	return 0;
811 }
812 
813 static const struct ethtool_ops tlan_ethtool_ops = {
814 	.get_drvinfo	= tlan_get_drvinfo,
815 	.get_link	= ethtool_op_get_link,
816 	.get_eeprom_len	= tlan_get_eeprom_len,
817 	.get_eeprom	= tlan_get_eeprom,
818 };
819 
820 /***************************************************************
821  *	tlan_init
822  *
823  *	Returns:
824  *		0 on success, error code otherwise.
825  *	Parms:
826  *		dev	The structure of the device to be
827  *			init'ed.
828  *
829  *	This function completes the initialization of the
830  *	device structure and driver.  It reserves the IO
831  *	addresses, allocates memory for the lists and bounce
832  *	buffers, retrieves the MAC address from the eeprom
833  *	and assignes the device's methods.
834  *
835  **************************************************************/
836 
837 static int tlan_init(struct net_device *dev)
838 {
839 	int		dma_size;
840 	int		err;
841 	int		i;
842 	struct tlan_priv	*priv;
843 
844 	priv = netdev_priv(dev);
845 
846 	dma_size = (TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS)
847 		* (sizeof(struct tlan_list));
848 	priv->dma_storage = pci_alloc_consistent(priv->pci_dev,
849 						 dma_size,
850 						 &priv->dma_storage_dma);
851 	priv->dma_size = dma_size;
852 
853 	if (priv->dma_storage == NULL) {
854 		pr_err("Could not allocate lists and buffers for %s\n",
855 		       dev->name);
856 		return -ENOMEM;
857 	}
858 	priv->rx_list = (struct tlan_list *)
859 		ALIGN((unsigned long)priv->dma_storage, 8);
860 	priv->rx_list_dma = ALIGN(priv->dma_storage_dma, 8);
861 	priv->tx_list = priv->rx_list + TLAN_NUM_RX_LISTS;
862 	priv->tx_list_dma =
863 		priv->rx_list_dma + sizeof(struct tlan_list)*TLAN_NUM_RX_LISTS;
864 
865 	err = 0;
866 	for (i = 0; i < ETH_ALEN; i++)
867 		err |= tlan_ee_read_byte(dev,
868 					 (u8) priv->adapter->addr_ofs + i,
869 					 (u8 *) &dev->dev_addr[i]);
870 	if (err) {
871 		pr_err("%s: Error reading MAC from eeprom: %d\n",
872 		       dev->name, err);
873 	}
874 	/* Olicom OC-2325/OC-2326 have the address byte-swapped */
875 	if (priv->adapter->addr_ofs == 0xf8) {
876 		for (i = 0; i < ETH_ALEN; i += 2) {
877 			char tmp = dev->dev_addr[i];
878 			dev->dev_addr[i] = dev->dev_addr[i + 1];
879 			dev->dev_addr[i + 1] = tmp;
880 		}
881 	}
882 
883 	netif_carrier_off(dev);
884 
885 	/* Device methods */
886 	dev->netdev_ops = &tlan_netdev_ops;
887 	dev->ethtool_ops = &tlan_ethtool_ops;
888 	dev->watchdog_timeo = TX_TIMEOUT;
889 
890 	return 0;
891 
892 }
893 
894 
895 
896 
897 /***************************************************************
898  *	tlan_open
899  *
900  *	Returns:
901  *		0 on success, error code otherwise.
902  *	Parms:
903  *		dev	Structure of device to be opened.
904  *
905  *	This routine puts the driver and TLAN adapter in a
906  *	state where it is ready to send and receive packets.
907  *	It allocates the IRQ, resets and brings the adapter
908  *	out of reset, and allows interrupts.  It also delays
909  *	the startup for autonegotiation or sends a Rx GO
910  *	command to the adapter, as appropriate.
911  *
912  **************************************************************/
913 
914 static int tlan_open(struct net_device *dev)
915 {
916 	struct tlan_priv	*priv = netdev_priv(dev);
917 	int		err;
918 
919 	priv->tlan_rev = tlan_dio_read8(dev->base_addr, TLAN_DEF_REVISION);
920 	err = request_irq(dev->irq, tlan_handle_interrupt, IRQF_SHARED,
921 			  dev->name, dev);
922 
923 	if (err) {
924 		netdev_err(dev, "Cannot open because IRQ %d is already in use\n",
925 			   dev->irq);
926 		return err;
927 	}
928 
929 	timer_setup(&priv->timer, NULL, 0);
930 	timer_setup(&priv->media_timer, tlan_phy_monitor, 0);
931 
932 	tlan_start(dev);
933 
934 	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Opened.  TLAN Chip Rev: %x\n",
935 		 dev->name, priv->tlan_rev);
936 
937 	return 0;
938 
939 }
940 
941 
942 
943 /**************************************************************
944  *	tlan_ioctl
945  *
946  *	Returns:
947  *		0 on success, error code otherwise
948  *	Params:
949  *		dev	structure of device to receive ioctl.
950  *
951  *		rq	ifreq structure to hold userspace data.
952  *
953  *		cmd	ioctl command.
954  *
955  *
956  *************************************************************/
957 
958 static int tlan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
959 {
960 	struct tlan_priv *priv = netdev_priv(dev);
961 	struct mii_ioctl_data *data = if_mii(rq);
962 	u32 phy   = priv->phy[priv->phy_num];
963 
964 	if (!priv->phy_online)
965 		return -EAGAIN;
966 
967 	switch (cmd) {
968 	case SIOCGMIIPHY:		/* get address of MII PHY in use. */
969 		data->phy_id = phy;
970 		/* fall through */
971 
972 
973 	case SIOCGMIIREG:		/* read MII PHY register. */
974 		tlan_mii_read_reg(dev, data->phy_id & 0x1f,
975 				  data->reg_num & 0x1f, &data->val_out);
976 		return 0;
977 
978 
979 	case SIOCSMIIREG:		/* write MII PHY register. */
980 		tlan_mii_write_reg(dev, data->phy_id & 0x1f,
981 				   data->reg_num & 0x1f, data->val_in);
982 		return 0;
983 	default:
984 		return -EOPNOTSUPP;
985 	}
986 }
987 
988 
989 /***************************************************************
990  *	tlan_tx_timeout
991  *
992  *	Returns: nothing
993  *
994  *	Params:
995  *		dev	structure of device which timed out
996  *			during transmit.
997  *
998  **************************************************************/
999 
1000 static void tlan_tx_timeout(struct net_device *dev, unsigned int txqueue)
1001 {
1002 
1003 	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name);
1004 
1005 	/* Ok so we timed out, lets see what we can do about it...*/
1006 	tlan_free_lists(dev);
1007 	tlan_reset_lists(dev);
1008 	tlan_read_and_clear_stats(dev, TLAN_IGNORE);
1009 	tlan_reset_adapter(dev);
1010 	netif_trans_update(dev); /* prevent tx timeout */
1011 	netif_wake_queue(dev);
1012 
1013 }
1014 
1015 
1016 /***************************************************************
1017  *	tlan_tx_timeout_work
1018  *
1019  *	Returns: nothing
1020  *
1021  *	Params:
1022  *		work	work item of device which timed out
1023  *
1024  **************************************************************/
1025 
1026 static void tlan_tx_timeout_work(struct work_struct *work)
1027 {
1028 	struct tlan_priv	*priv =
1029 		container_of(work, struct tlan_priv, tlan_tqueue);
1030 
1031 	tlan_tx_timeout(priv->dev, UINT_MAX);
1032 }
1033 
1034 
1035 
1036 /***************************************************************
1037  *	tlan_start_tx
1038  *
1039  *	Returns:
1040  *		0 on success, non-zero on failure.
1041  *	Parms:
1042  *		skb	A pointer to the sk_buff containing the
1043  *			frame to be sent.
1044  *		dev	The device to send the data on.
1045  *
1046  *	This function adds a frame to the Tx list to be sent
1047  *	ASAP.  First it	verifies that the adapter is ready and
1048  *	there is room in the queue.  Then it sets up the next
1049  *	available list, copies the frame to the	corresponding
1050  *	buffer.  If the adapter Tx channel is idle, it gives
1051  *	the adapter a Tx Go command on the list, otherwise it
1052  *	sets the forward address of the previous list to point
1053  *	to this one.  Then it frees the sk_buff.
1054  *
1055  **************************************************************/
1056 
1057 static netdev_tx_t tlan_start_tx(struct sk_buff *skb, struct net_device *dev)
1058 {
1059 	struct tlan_priv *priv = netdev_priv(dev);
1060 	dma_addr_t	tail_list_phys;
1061 	struct tlan_list	*tail_list;
1062 	unsigned long	flags;
1063 	unsigned int    txlen;
1064 
1065 	if (!priv->phy_online) {
1066 		TLAN_DBG(TLAN_DEBUG_TX, "TRANSMIT:  %s PHY is not ready\n",
1067 			 dev->name);
1068 		dev_kfree_skb_any(skb);
1069 		return NETDEV_TX_OK;
1070 	}
1071 
1072 	if (skb_padto(skb, TLAN_MIN_FRAME_SIZE))
1073 		return NETDEV_TX_OK;
1074 	txlen = max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE);
1075 
1076 	tail_list = priv->tx_list + priv->tx_tail;
1077 	tail_list_phys =
1078 		priv->tx_list_dma + sizeof(struct tlan_list)*priv->tx_tail;
1079 
1080 	if (tail_list->c_stat != TLAN_CSTAT_UNUSED) {
1081 		TLAN_DBG(TLAN_DEBUG_TX,
1082 			 "TRANSMIT:  %s is busy (Head=%d Tail=%d)\n",
1083 			 dev->name, priv->tx_head, priv->tx_tail);
1084 		netif_stop_queue(dev);
1085 		priv->tx_busy_count++;
1086 		return NETDEV_TX_BUSY;
1087 	}
1088 
1089 	tail_list->forward = 0;
1090 
1091 	tail_list->buffer[0].address = pci_map_single(priv->pci_dev,
1092 						      skb->data, txlen,
1093 						      PCI_DMA_TODEVICE);
1094 	tlan_store_skb(tail_list, skb);
1095 
1096 	tail_list->frame_size = (u16) txlen;
1097 	tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen;
1098 	tail_list->buffer[1].count = 0;
1099 	tail_list->buffer[1].address = 0;
1100 
1101 	spin_lock_irqsave(&priv->lock, flags);
1102 	tail_list->c_stat = TLAN_CSTAT_READY;
1103 	if (!priv->tx_in_progress) {
1104 		priv->tx_in_progress = 1;
1105 		TLAN_DBG(TLAN_DEBUG_TX,
1106 			 "TRANSMIT:  Starting TX on buffer %d\n",
1107 			 priv->tx_tail);
1108 		outl(tail_list_phys, dev->base_addr + TLAN_CH_PARM);
1109 		outl(TLAN_HC_GO, dev->base_addr + TLAN_HOST_CMD);
1110 	} else {
1111 		TLAN_DBG(TLAN_DEBUG_TX,
1112 			 "TRANSMIT:  Adding buffer %d to TX channel\n",
1113 			 priv->tx_tail);
1114 		if (priv->tx_tail == 0) {
1115 			(priv->tx_list + (TLAN_NUM_TX_LISTS - 1))->forward
1116 				= tail_list_phys;
1117 		} else {
1118 			(priv->tx_list + (priv->tx_tail - 1))->forward
1119 				= tail_list_phys;
1120 		}
1121 	}
1122 	spin_unlock_irqrestore(&priv->lock, flags);
1123 
1124 	CIRC_INC(priv->tx_tail, TLAN_NUM_TX_LISTS);
1125 
1126 	return NETDEV_TX_OK;
1127 
1128 }
1129 
1130 
1131 
1132 
1133 /***************************************************************
1134  *	tlan_handle_interrupt
1135  *
1136  *	Returns:
1137  *		Nothing
1138  *	Parms:
1139  *		irq	The line on which the interrupt
1140  *			occurred.
1141  *		dev_id	A pointer to the device assigned to
1142  *			this irq line.
1143  *
1144  *	This function handles an interrupt generated by its
1145  *	assigned TLAN adapter.  The function deactivates
1146  *	interrupts on its adapter, records the type of
1147  *	interrupt, executes the appropriate subhandler, and
1148  *	acknowdges the interrupt to the adapter (thus
1149  *	re-enabling adapter interrupts.
1150  *
1151  **************************************************************/
1152 
1153 static irqreturn_t tlan_handle_interrupt(int irq, void *dev_id)
1154 {
1155 	struct net_device	*dev = dev_id;
1156 	struct tlan_priv *priv = netdev_priv(dev);
1157 	u16		host_int;
1158 	u16		type;
1159 
1160 	spin_lock(&priv->lock);
1161 
1162 	host_int = inw(dev->base_addr + TLAN_HOST_INT);
1163 	type = (host_int & TLAN_HI_IT_MASK) >> 2;
1164 	if (type) {
1165 		u32	ack;
1166 		u32	host_cmd;
1167 
1168 		outw(host_int, dev->base_addr + TLAN_HOST_INT);
1169 		ack = tlan_int_vector[type](dev, host_int);
1170 
1171 		if (ack) {
1172 			host_cmd = TLAN_HC_ACK | ack | (type << 18);
1173 			outl(host_cmd, dev->base_addr + TLAN_HOST_CMD);
1174 		}
1175 	}
1176 
1177 	spin_unlock(&priv->lock);
1178 
1179 	return IRQ_RETVAL(type);
1180 }
1181 
1182 
1183 
1184 
1185 /***************************************************************
1186  *	tlan_close
1187  *
1188  *	Returns:
1189  *		An error code.
1190  *	Parms:
1191  *		dev	The device structure of the device to
1192  *			close.
1193  *
1194  *	This function shuts down the adapter.  It records any
1195  *	stats, puts the adapter into reset state, deactivates
1196  *	its time as needed, and	frees the irq it is using.
1197  *
1198  **************************************************************/
1199 
1200 static int tlan_close(struct net_device *dev)
1201 {
1202 	tlan_stop(dev);
1203 
1204 	free_irq(dev->irq, dev);
1205 	tlan_free_lists(dev);
1206 	TLAN_DBG(TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name);
1207 
1208 	return 0;
1209 
1210 }
1211 
1212 
1213 
1214 
1215 /***************************************************************
1216  *	tlan_get_stats
1217  *
1218  *	Returns:
1219  *		A pointer to the device's statistics structure.
1220  *	Parms:
1221  *		dev	The device structure to return the
1222  *			stats for.
1223  *
1224  *	This function updates the devices statistics by reading
1225  *	the TLAN chip's onboard registers.  Then it returns the
1226  *	address of the statistics structure.
1227  *
1228  **************************************************************/
1229 
1230 static struct net_device_stats *tlan_get_stats(struct net_device *dev)
1231 {
1232 	struct tlan_priv	*priv = netdev_priv(dev);
1233 	int i;
1234 
1235 	/* Should only read stats if open ? */
1236 	tlan_read_and_clear_stats(dev, TLAN_RECORD);
1237 
1238 	TLAN_DBG(TLAN_DEBUG_RX, "RECEIVE:  %s EOC count = %d\n", dev->name,
1239 		 priv->rx_eoc_count);
1240 	TLAN_DBG(TLAN_DEBUG_TX, "TRANSMIT:  %s Busy count = %d\n", dev->name,
1241 		 priv->tx_busy_count);
1242 	if (debug & TLAN_DEBUG_GNRL) {
1243 		tlan_print_dio(dev->base_addr);
1244 		tlan_phy_print(dev);
1245 	}
1246 	if (debug & TLAN_DEBUG_LIST) {
1247 		for (i = 0; i < TLAN_NUM_RX_LISTS; i++)
1248 			tlan_print_list(priv->rx_list + i, "RX", i);
1249 		for (i = 0; i < TLAN_NUM_TX_LISTS; i++)
1250 			tlan_print_list(priv->tx_list + i, "TX", i);
1251 	}
1252 
1253 	return &dev->stats;
1254 
1255 }
1256 
1257 
1258 
1259 
1260 /***************************************************************
1261  *	tlan_set_multicast_list
1262  *
1263  *	Returns:
1264  *		Nothing
1265  *	Parms:
1266  *		dev	The device structure to set the
1267  *			multicast list for.
1268  *
1269  *	This function sets the TLAN adaptor to various receive
1270  *	modes.  If the IFF_PROMISC flag is set, promiscuous
1271  *	mode is acitviated.  Otherwise,	promiscuous mode is
1272  *	turned off.  If the IFF_ALLMULTI flag is set, then
1273  *	the hash table is set to receive all group addresses.
1274  *	Otherwise, the first three multicast addresses are
1275  *	stored in AREG_1-3, and the rest are selected via the
1276  *	hash table, as necessary.
1277  *
1278  **************************************************************/
1279 
1280 static void tlan_set_multicast_list(struct net_device *dev)
1281 {
1282 	struct netdev_hw_addr *ha;
1283 	u32			hash1 = 0;
1284 	u32			hash2 = 0;
1285 	int			i;
1286 	u32			offset;
1287 	u8			tmp;
1288 
1289 	if (dev->flags & IFF_PROMISC) {
1290 		tmp = tlan_dio_read8(dev->base_addr, TLAN_NET_CMD);
1291 		tlan_dio_write8(dev->base_addr,
1292 				TLAN_NET_CMD, tmp | TLAN_NET_CMD_CAF);
1293 	} else {
1294 		tmp = tlan_dio_read8(dev->base_addr, TLAN_NET_CMD);
1295 		tlan_dio_write8(dev->base_addr,
1296 				TLAN_NET_CMD, tmp & ~TLAN_NET_CMD_CAF);
1297 		if (dev->flags & IFF_ALLMULTI) {
1298 			for (i = 0; i < 3; i++)
1299 				tlan_set_mac(dev, i + 1, NULL);
1300 			tlan_dio_write32(dev->base_addr, TLAN_HASH_1,
1301 					 0xffffffff);
1302 			tlan_dio_write32(dev->base_addr, TLAN_HASH_2,
1303 					 0xffffffff);
1304 		} else {
1305 			i = 0;
1306 			netdev_for_each_mc_addr(ha, dev) {
1307 				if (i < 3) {
1308 					tlan_set_mac(dev, i + 1,
1309 						     (char *) &ha->addr);
1310 				} else {
1311 					offset =
1312 						tlan_hash_func((u8 *)&ha->addr);
1313 					if (offset < 32)
1314 						hash1 |= (1 << offset);
1315 					else
1316 						hash2 |= (1 << (offset - 32));
1317 				}
1318 				i++;
1319 			}
1320 			for ( ; i < 3; i++)
1321 				tlan_set_mac(dev, i + 1, NULL);
1322 			tlan_dio_write32(dev->base_addr, TLAN_HASH_1, hash1);
1323 			tlan_dio_write32(dev->base_addr, TLAN_HASH_2, hash2);
1324 		}
1325 	}
1326 
1327 }
1328 
1329 
1330 
1331 /*****************************************************************************
1332 ******************************************************************************
1333 
1334 ThunderLAN driver interrupt vectors and table
1335 
1336 please see chap. 4, "Interrupt Handling" of the "ThunderLAN
1337 Programmer's Guide" for more informations on handling interrupts
1338 generated by TLAN based adapters.
1339 
1340 ******************************************************************************
1341 *****************************************************************************/
1342 
1343 
1344 
1345 
1346 /***************************************************************
1347  *	tlan_handle_tx_eof
1348  *
1349  *	Returns:
1350  *		1
1351  *	Parms:
1352  *		dev		Device assigned the IRQ that was
1353  *				raised.
1354  *		host_int	The contents of the HOST_INT
1355  *				port.
1356  *
1357  *	This function handles Tx EOF interrupts which are raised
1358  *	by the adapter when it has completed sending the
1359  *	contents of a buffer.  If detemines which list/buffer
1360  *	was completed and resets it.  If the buffer was the last
1361  *	in the channel (EOC), then the function checks to see if
1362  *	another buffer is ready to send, and if so, sends a Tx
1363  *	Go command.  Finally, the driver activates/continues the
1364  *	activity LED.
1365  *
1366  **************************************************************/
1367 
1368 static u32 tlan_handle_tx_eof(struct net_device *dev, u16 host_int)
1369 {
1370 	struct tlan_priv	*priv = netdev_priv(dev);
1371 	int		eoc = 0;
1372 	struct tlan_list	*head_list;
1373 	dma_addr_t	head_list_phys;
1374 	u32		ack = 0;
1375 	u16		tmp_c_stat;
1376 
1377 	TLAN_DBG(TLAN_DEBUG_TX,
1378 		 "TRANSMIT:  Handling TX EOF (Head=%d Tail=%d)\n",
1379 		 priv->tx_head, priv->tx_tail);
1380 	head_list = priv->tx_list + priv->tx_head;
1381 
1382 	while (((tmp_c_stat = head_list->c_stat) & TLAN_CSTAT_FRM_CMP)
1383 	       && (ack < 255)) {
1384 		struct sk_buff *skb = tlan_get_skb(head_list);
1385 
1386 		ack++;
1387 		pci_unmap_single(priv->pci_dev, head_list->buffer[0].address,
1388 				 max(skb->len,
1389 				     (unsigned int)TLAN_MIN_FRAME_SIZE),
1390 				 PCI_DMA_TODEVICE);
1391 		dev_kfree_skb_any(skb);
1392 		head_list->buffer[8].address = 0;
1393 		head_list->buffer[9].address = 0;
1394 
1395 		if (tmp_c_stat & TLAN_CSTAT_EOC)
1396 			eoc = 1;
1397 
1398 		dev->stats.tx_bytes += head_list->frame_size;
1399 
1400 		head_list->c_stat = TLAN_CSTAT_UNUSED;
1401 		netif_start_queue(dev);
1402 		CIRC_INC(priv->tx_head, TLAN_NUM_TX_LISTS);
1403 		head_list = priv->tx_list + priv->tx_head;
1404 	}
1405 
1406 	if (!ack)
1407 		netdev_info(dev,
1408 			    "Received interrupt for uncompleted TX frame\n");
1409 
1410 	if (eoc) {
1411 		TLAN_DBG(TLAN_DEBUG_TX,
1412 			 "TRANSMIT:  handling TX EOC (Head=%d Tail=%d)\n",
1413 			 priv->tx_head, priv->tx_tail);
1414 		head_list = priv->tx_list + priv->tx_head;
1415 		head_list_phys = priv->tx_list_dma
1416 			+ sizeof(struct tlan_list)*priv->tx_head;
1417 		if ((head_list->c_stat & TLAN_CSTAT_READY)
1418 		    == TLAN_CSTAT_READY) {
1419 			outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1420 			ack |= TLAN_HC_GO;
1421 		} else {
1422 			priv->tx_in_progress = 0;
1423 		}
1424 	}
1425 
1426 	if (priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED) {
1427 		tlan_dio_write8(dev->base_addr,
1428 				TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT);
1429 		if (priv->timer.function == NULL) {
1430 			priv->timer.function = tlan_timer;
1431 			priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
1432 			priv->timer_set_at = jiffies;
1433 			priv->timer_type = TLAN_TIMER_ACTIVITY;
1434 			add_timer(&priv->timer);
1435 		} else if (priv->timer_type == TLAN_TIMER_ACTIVITY) {
1436 			priv->timer_set_at = jiffies;
1437 		}
1438 	}
1439 
1440 	return ack;
1441 
1442 }
1443 
1444 
1445 
1446 
1447 /***************************************************************
1448  *	TLan_HandleStatOverflow
1449  *
1450  *	Returns:
1451  *		1
1452  *	Parms:
1453  *		dev		Device assigned the IRQ that was
1454  *				raised.
1455  *		host_int	The contents of the HOST_INT
1456  *				port.
1457  *
1458  *	This function handles the Statistics Overflow interrupt
1459  *	which means that one or more of the TLAN statistics
1460  *	registers has reached 1/2 capacity and needs to be read.
1461  *
1462  **************************************************************/
1463 
1464 static u32 tlan_handle_stat_overflow(struct net_device *dev, u16 host_int)
1465 {
1466 	tlan_read_and_clear_stats(dev, TLAN_RECORD);
1467 
1468 	return 1;
1469 
1470 }
1471 
1472 
1473 
1474 
1475 /***************************************************************
1476  *	TLan_HandleRxEOF
1477  *
1478  *	Returns:
1479  *		1
1480  *	Parms:
1481  *		dev		Device assigned the IRQ that was
1482  *				raised.
1483  *		host_int	The contents of the HOST_INT
1484  *				port.
1485  *
1486  *	This function handles the Rx EOF interrupt which
1487  *	indicates a frame has been received by the adapter from
1488  *	the net and the frame has been transferred to memory.
1489  *	The function determines the bounce buffer the frame has
1490  *	been loaded into, creates a new sk_buff big enough to
1491  *	hold the frame, and sends it to protocol stack.  It
1492  *	then resets the used buffer and appends it to the end
1493  *	of the list.  If the frame was the last in the Rx
1494  *	channel (EOC), the function restarts the receive channel
1495  *	by sending an Rx Go command to the adapter.  Then it
1496  *	activates/continues the activity LED.
1497  *
1498  **************************************************************/
1499 
1500 static u32 tlan_handle_rx_eof(struct net_device *dev, u16 host_int)
1501 {
1502 	struct tlan_priv	*priv = netdev_priv(dev);
1503 	u32		ack = 0;
1504 	int		eoc = 0;
1505 	struct tlan_list	*head_list;
1506 	struct sk_buff	*skb;
1507 	struct tlan_list	*tail_list;
1508 	u16		tmp_c_stat;
1509 	dma_addr_t	head_list_phys;
1510 
1511 	TLAN_DBG(TLAN_DEBUG_RX, "RECEIVE:  handling RX EOF (Head=%d Tail=%d)\n",
1512 		 priv->rx_head, priv->rx_tail);
1513 	head_list = priv->rx_list + priv->rx_head;
1514 	head_list_phys =
1515 		priv->rx_list_dma + sizeof(struct tlan_list)*priv->rx_head;
1516 
1517 	while (((tmp_c_stat = head_list->c_stat) & TLAN_CSTAT_FRM_CMP)
1518 	       && (ack < 255)) {
1519 		dma_addr_t frame_dma = head_list->buffer[0].address;
1520 		u32 frame_size = head_list->frame_size;
1521 		struct sk_buff *new_skb;
1522 
1523 		ack++;
1524 		if (tmp_c_stat & TLAN_CSTAT_EOC)
1525 			eoc = 1;
1526 
1527 		new_skb = netdev_alloc_skb_ip_align(dev,
1528 						    TLAN_MAX_FRAME_SIZE + 5);
1529 		if (!new_skb)
1530 			goto drop_and_reuse;
1531 
1532 		skb = tlan_get_skb(head_list);
1533 		pci_unmap_single(priv->pci_dev, frame_dma,
1534 				 TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
1535 		skb_put(skb, frame_size);
1536 
1537 		dev->stats.rx_bytes += frame_size;
1538 
1539 		skb->protocol = eth_type_trans(skb, dev);
1540 		netif_rx(skb);
1541 
1542 		head_list->buffer[0].address =
1543 			pci_map_single(priv->pci_dev, new_skb->data,
1544 				       TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
1545 
1546 		tlan_store_skb(head_list, new_skb);
1547 drop_and_reuse:
1548 		head_list->forward = 0;
1549 		head_list->c_stat = 0;
1550 		tail_list = priv->rx_list + priv->rx_tail;
1551 		tail_list->forward = head_list_phys;
1552 
1553 		CIRC_INC(priv->rx_head, TLAN_NUM_RX_LISTS);
1554 		CIRC_INC(priv->rx_tail, TLAN_NUM_RX_LISTS);
1555 		head_list = priv->rx_list + priv->rx_head;
1556 		head_list_phys = priv->rx_list_dma
1557 			+ sizeof(struct tlan_list)*priv->rx_head;
1558 	}
1559 
1560 	if (!ack)
1561 		netdev_info(dev,
1562 			    "Received interrupt for uncompleted RX frame\n");
1563 
1564 
1565 	if (eoc) {
1566 		TLAN_DBG(TLAN_DEBUG_RX,
1567 			 "RECEIVE:  handling RX EOC (Head=%d Tail=%d)\n",
1568 			 priv->rx_head, priv->rx_tail);
1569 		head_list = priv->rx_list + priv->rx_head;
1570 		head_list_phys = priv->rx_list_dma
1571 			+ sizeof(struct tlan_list)*priv->rx_head;
1572 		outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1573 		ack |= TLAN_HC_GO | TLAN_HC_RT;
1574 		priv->rx_eoc_count++;
1575 	}
1576 
1577 	if (priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED) {
1578 		tlan_dio_write8(dev->base_addr,
1579 				TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT);
1580 		if (priv->timer.function == NULL)  {
1581 			priv->timer.function = tlan_timer;
1582 			priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
1583 			priv->timer_set_at = jiffies;
1584 			priv->timer_type = TLAN_TIMER_ACTIVITY;
1585 			add_timer(&priv->timer);
1586 		} else if (priv->timer_type == TLAN_TIMER_ACTIVITY) {
1587 			priv->timer_set_at = jiffies;
1588 		}
1589 	}
1590 
1591 	return ack;
1592 
1593 }
1594 
1595 
1596 
1597 
1598 /***************************************************************
1599  *	tlan_handle_dummy
1600  *
1601  *	Returns:
1602  *		1
1603  *	Parms:
1604  *		dev		Device assigned the IRQ that was
1605  *				raised.
1606  *		host_int	The contents of the HOST_INT
1607  *				port.
1608  *
1609  *	This function handles the Dummy interrupt, which is
1610  *	raised whenever a test interrupt is generated by setting
1611  *	the Req_Int bit of HOST_CMD to 1.
1612  *
1613  **************************************************************/
1614 
1615 static u32 tlan_handle_dummy(struct net_device *dev, u16 host_int)
1616 {
1617 	netdev_info(dev, "Test interrupt\n");
1618 	return 1;
1619 
1620 }
1621 
1622 
1623 
1624 
1625 /***************************************************************
1626  *	tlan_handle_tx_eoc
1627  *
1628  *	Returns:
1629  *		1
1630  *	Parms:
1631  *		dev		Device assigned the IRQ that was
1632  *				raised.
1633  *		host_int	The contents of the HOST_INT
1634  *				port.
1635  *
1636  *	This driver is structured to determine EOC occurrences by
1637  *	reading the CSTAT member of the list structure.  Tx EOC
1638  *	interrupts are disabled via the DIO INTDIS register.
1639  *	However, TLAN chips before revision 3.0 didn't have this
1640  *	functionality, so process EOC events if this is the
1641  *	case.
1642  *
1643  **************************************************************/
1644 
1645 static u32 tlan_handle_tx_eoc(struct net_device *dev, u16 host_int)
1646 {
1647 	struct tlan_priv	*priv = netdev_priv(dev);
1648 	struct tlan_list		*head_list;
1649 	dma_addr_t		head_list_phys;
1650 	u32			ack = 1;
1651 
1652 	if (priv->tlan_rev < 0x30) {
1653 		TLAN_DBG(TLAN_DEBUG_TX,
1654 			 "TRANSMIT:  handling TX EOC (Head=%d Tail=%d) -- IRQ\n",
1655 			 priv->tx_head, priv->tx_tail);
1656 		head_list = priv->tx_list + priv->tx_head;
1657 		head_list_phys = priv->tx_list_dma
1658 			+ sizeof(struct tlan_list)*priv->tx_head;
1659 		if ((head_list->c_stat & TLAN_CSTAT_READY)
1660 		    == TLAN_CSTAT_READY) {
1661 			netif_stop_queue(dev);
1662 			outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1663 			ack |= TLAN_HC_GO;
1664 		} else {
1665 			priv->tx_in_progress = 0;
1666 		}
1667 	}
1668 
1669 	return ack;
1670 
1671 }
1672 
1673 
1674 
1675 
1676 /***************************************************************
1677  *	tlan_handle_status_check
1678  *
1679  *	Returns:
1680  *		0 if Adapter check, 1 if Network Status check.
1681  *	Parms:
1682  *		dev		Device assigned the IRQ that was
1683  *				raised.
1684  *		host_int	The contents of the HOST_INT
1685  *				port.
1686  *
1687  *	This function handles Adapter Check/Network Status
1688  *	interrupts generated by the adapter.  It checks the
1689  *	vector in the HOST_INT register to determine if it is
1690  *	an Adapter Check interrupt.  If so, it resets the
1691  *	adapter.  Otherwise it clears the status registers
1692  *	and services the PHY.
1693  *
1694  **************************************************************/
1695 
1696 static u32 tlan_handle_status_check(struct net_device *dev, u16 host_int)
1697 {
1698 	struct tlan_priv	*priv = netdev_priv(dev);
1699 	u32		ack;
1700 	u32		error;
1701 	u8		net_sts;
1702 	u32		phy;
1703 	u16		tlphy_ctl;
1704 	u16		tlphy_sts;
1705 
1706 	ack = 1;
1707 	if (host_int & TLAN_HI_IV_MASK) {
1708 		netif_stop_queue(dev);
1709 		error = inl(dev->base_addr + TLAN_CH_PARM);
1710 		netdev_info(dev, "Adaptor Error = 0x%x\n", error);
1711 		tlan_read_and_clear_stats(dev, TLAN_RECORD);
1712 		outl(TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD);
1713 
1714 		schedule_work(&priv->tlan_tqueue);
1715 
1716 		netif_wake_queue(dev);
1717 		ack = 0;
1718 	} else {
1719 		TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Status Check\n", dev->name);
1720 		phy = priv->phy[priv->phy_num];
1721 
1722 		net_sts = tlan_dio_read8(dev->base_addr, TLAN_NET_STS);
1723 		if (net_sts) {
1724 			tlan_dio_write8(dev->base_addr, TLAN_NET_STS, net_sts);
1725 			TLAN_DBG(TLAN_DEBUG_GNRL, "%s:    Net_Sts = %x\n",
1726 				 dev->name, (unsigned) net_sts);
1727 		}
1728 		if ((net_sts & TLAN_NET_STS_MIRQ) &&  (priv->phy_num == 0)) {
1729 			tlan_mii_read_reg(dev, phy, TLAN_TLPHY_STS, &tlphy_sts);
1730 			tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl);
1731 			if (!(tlphy_sts & TLAN_TS_POLOK) &&
1732 			    !(tlphy_ctl & TLAN_TC_SWAPOL)) {
1733 				tlphy_ctl |= TLAN_TC_SWAPOL;
1734 				tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL,
1735 						   tlphy_ctl);
1736 			} else if ((tlphy_sts & TLAN_TS_POLOK) &&
1737 				   (tlphy_ctl & TLAN_TC_SWAPOL)) {
1738 				tlphy_ctl &= ~TLAN_TC_SWAPOL;
1739 				tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL,
1740 						   tlphy_ctl);
1741 			}
1742 
1743 			if (debug)
1744 				tlan_phy_print(dev);
1745 		}
1746 	}
1747 
1748 	return ack;
1749 
1750 }
1751 
1752 
1753 
1754 
1755 /***************************************************************
1756  *	tlan_handle_rx_eoc
1757  *
1758  *	Returns:
1759  *		1
1760  *	Parms:
1761  *		dev		Device assigned the IRQ that was
1762  *				raised.
1763  *		host_int	The contents of the HOST_INT
1764  *				port.
1765  *
1766  *	This driver is structured to determine EOC occurrences by
1767  *	reading the CSTAT member of the list structure.  Rx EOC
1768  *	interrupts are disabled via the DIO INTDIS register.
1769  *	However, TLAN chips before revision 3.0 didn't have this
1770  *	CSTAT member or a INTDIS register, so if this chip is
1771  *	pre-3.0, process EOC interrupts normally.
1772  *
1773  **************************************************************/
1774 
1775 static u32 tlan_handle_rx_eoc(struct net_device *dev, u16 host_int)
1776 {
1777 	struct tlan_priv	*priv = netdev_priv(dev);
1778 	dma_addr_t	head_list_phys;
1779 	u32		ack = 1;
1780 
1781 	if (priv->tlan_rev < 0x30) {
1782 		TLAN_DBG(TLAN_DEBUG_RX,
1783 			 "RECEIVE:  Handling RX EOC (head=%d tail=%d) -- IRQ\n",
1784 			 priv->rx_head, priv->rx_tail);
1785 		head_list_phys = priv->rx_list_dma
1786 			+ sizeof(struct tlan_list)*priv->rx_head;
1787 		outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1788 		ack |= TLAN_HC_GO | TLAN_HC_RT;
1789 		priv->rx_eoc_count++;
1790 	}
1791 
1792 	return ack;
1793 
1794 }
1795 
1796 
1797 
1798 
1799 /*****************************************************************************
1800 ******************************************************************************
1801 
1802 ThunderLAN driver timer function
1803 
1804 ******************************************************************************
1805 *****************************************************************************/
1806 
1807 
1808 /***************************************************************
1809  *	tlan_timer
1810  *
1811  *	Returns:
1812  *		Nothing
1813  *	Parms:
1814  *		data	A value given to add timer when
1815  *			add_timer was called.
1816  *
1817  *	This function handles timed functionality for the
1818  *	TLAN driver.  The two current timer uses are for
1819  *	delaying for autonegotionation and driving the ACT LED.
1820  *	-	Autonegotiation requires being allowed about
1821  *		2 1/2 seconds before attempting to transmit a
1822  *		packet.  It would be a very bad thing to hang
1823  *		the kernel this long, so the driver doesn't
1824  *		allow transmission 'til after this time, for
1825  *		certain PHYs.  It would be much nicer if all
1826  *		PHYs were interrupt-capable like the internal
1827  *		PHY.
1828  *	-	The ACT LED, which shows adapter activity, is
1829  *		driven by the driver, and so must be left on
1830  *		for a short period to power up the LED so it
1831  *		can be seen.  This delay can be changed by
1832  *		changing the TLAN_TIMER_ACT_DELAY in tlan.h,
1833  *		if desired.  100 ms  produces a slightly
1834  *		sluggish response.
1835  *
1836  **************************************************************/
1837 
1838 static void tlan_timer(struct timer_list *t)
1839 {
1840 	struct tlan_priv	*priv = from_timer(priv, t, timer);
1841 	struct net_device	*dev = priv->dev;
1842 	u32		elapsed;
1843 	unsigned long	flags = 0;
1844 
1845 	priv->timer.function = NULL;
1846 
1847 	switch (priv->timer_type) {
1848 	case TLAN_TIMER_PHY_PDOWN:
1849 		tlan_phy_power_down(dev);
1850 		break;
1851 	case TLAN_TIMER_PHY_PUP:
1852 		tlan_phy_power_up(dev);
1853 		break;
1854 	case TLAN_TIMER_PHY_RESET:
1855 		tlan_phy_reset(dev);
1856 		break;
1857 	case TLAN_TIMER_PHY_START_LINK:
1858 		tlan_phy_start_link(dev);
1859 		break;
1860 	case TLAN_TIMER_PHY_FINISH_AN:
1861 		tlan_phy_finish_auto_neg(dev);
1862 		break;
1863 	case TLAN_TIMER_FINISH_RESET:
1864 		tlan_finish_reset(dev);
1865 		break;
1866 	case TLAN_TIMER_ACTIVITY:
1867 		spin_lock_irqsave(&priv->lock, flags);
1868 		if (priv->timer.function == NULL) {
1869 			elapsed = jiffies - priv->timer_set_at;
1870 			if (elapsed >= TLAN_TIMER_ACT_DELAY) {
1871 				tlan_dio_write8(dev->base_addr,
1872 						TLAN_LED_REG, TLAN_LED_LINK);
1873 			} else  {
1874 				priv->timer.expires = priv->timer_set_at
1875 					+ TLAN_TIMER_ACT_DELAY;
1876 				spin_unlock_irqrestore(&priv->lock, flags);
1877 				add_timer(&priv->timer);
1878 				break;
1879 			}
1880 		}
1881 		spin_unlock_irqrestore(&priv->lock, flags);
1882 		break;
1883 	default:
1884 		break;
1885 	}
1886 
1887 }
1888 
1889 
1890 /*****************************************************************************
1891 ******************************************************************************
1892 
1893 ThunderLAN driver adapter related routines
1894 
1895 ******************************************************************************
1896 *****************************************************************************/
1897 
1898 
1899 /***************************************************************
1900  *	tlan_reset_lists
1901  *
1902  *	Returns:
1903  *		Nothing
1904  *	Parms:
1905  *		dev	The device structure with the list
1906  *			structures to be reset.
1907  *
1908  *	This routine sets the variables associated with managing
1909  *	the TLAN lists to their initial values.
1910  *
1911  **************************************************************/
1912 
1913 static void tlan_reset_lists(struct net_device *dev)
1914 {
1915 	struct tlan_priv *priv = netdev_priv(dev);
1916 	int		i;
1917 	struct tlan_list	*list;
1918 	dma_addr_t	list_phys;
1919 	struct sk_buff	*skb;
1920 
1921 	priv->tx_head = 0;
1922 	priv->tx_tail = 0;
1923 	for (i = 0; i < TLAN_NUM_TX_LISTS; i++) {
1924 		list = priv->tx_list + i;
1925 		list->c_stat = TLAN_CSTAT_UNUSED;
1926 		list->buffer[0].address = 0;
1927 		list->buffer[2].count = 0;
1928 		list->buffer[2].address = 0;
1929 		list->buffer[8].address = 0;
1930 		list->buffer[9].address = 0;
1931 	}
1932 
1933 	priv->rx_head = 0;
1934 	priv->rx_tail = TLAN_NUM_RX_LISTS - 1;
1935 	for (i = 0; i < TLAN_NUM_RX_LISTS; i++) {
1936 		list = priv->rx_list + i;
1937 		list_phys = priv->rx_list_dma + sizeof(struct tlan_list)*i;
1938 		list->c_stat = TLAN_CSTAT_READY;
1939 		list->frame_size = TLAN_MAX_FRAME_SIZE;
1940 		list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER;
1941 		skb = netdev_alloc_skb_ip_align(dev, TLAN_MAX_FRAME_SIZE + 5);
1942 		if (!skb)
1943 			break;
1944 
1945 		list->buffer[0].address = pci_map_single(priv->pci_dev,
1946 							 skb->data,
1947 							 TLAN_MAX_FRAME_SIZE,
1948 							 PCI_DMA_FROMDEVICE);
1949 		tlan_store_skb(list, skb);
1950 		list->buffer[1].count = 0;
1951 		list->buffer[1].address = 0;
1952 		list->forward = list_phys + sizeof(struct tlan_list);
1953 	}
1954 
1955 	/* in case ran out of memory early, clear bits */
1956 	while (i < TLAN_NUM_RX_LISTS) {
1957 		tlan_store_skb(priv->rx_list + i, NULL);
1958 		++i;
1959 	}
1960 	list->forward = 0;
1961 
1962 }
1963 
1964 
1965 static void tlan_free_lists(struct net_device *dev)
1966 {
1967 	struct tlan_priv *priv = netdev_priv(dev);
1968 	int		i;
1969 	struct tlan_list	*list;
1970 	struct sk_buff	*skb;
1971 
1972 	for (i = 0; i < TLAN_NUM_TX_LISTS; i++) {
1973 		list = priv->tx_list + i;
1974 		skb = tlan_get_skb(list);
1975 		if (skb) {
1976 			pci_unmap_single(
1977 				priv->pci_dev,
1978 				list->buffer[0].address,
1979 				max(skb->len,
1980 				    (unsigned int)TLAN_MIN_FRAME_SIZE),
1981 				PCI_DMA_TODEVICE);
1982 			dev_kfree_skb_any(skb);
1983 			list->buffer[8].address = 0;
1984 			list->buffer[9].address = 0;
1985 		}
1986 	}
1987 
1988 	for (i = 0; i < TLAN_NUM_RX_LISTS; i++) {
1989 		list = priv->rx_list + i;
1990 		skb = tlan_get_skb(list);
1991 		if (skb) {
1992 			pci_unmap_single(priv->pci_dev,
1993 					 list->buffer[0].address,
1994 					 TLAN_MAX_FRAME_SIZE,
1995 					 PCI_DMA_FROMDEVICE);
1996 			dev_kfree_skb_any(skb);
1997 			list->buffer[8].address = 0;
1998 			list->buffer[9].address = 0;
1999 		}
2000 	}
2001 }
2002 
2003 
2004 
2005 
2006 /***************************************************************
2007  *	tlan_print_dio
2008  *
2009  *	Returns:
2010  *		Nothing
2011  *	Parms:
2012  *		io_base		Base IO port of the device of
2013  *				which to print DIO registers.
2014  *
2015  *	This function prints out all the internal (DIO)
2016  *	registers of a TLAN chip.
2017  *
2018  **************************************************************/
2019 
2020 static void tlan_print_dio(u16 io_base)
2021 {
2022 	u32 data0, data1;
2023 	int	i;
2024 
2025 	pr_info("Contents of internal registers for io base 0x%04hx\n",
2026 		io_base);
2027 	pr_info("Off.  +0        +4\n");
2028 	for (i = 0; i < 0x4C; i += 8) {
2029 		data0 = tlan_dio_read32(io_base, i);
2030 		data1 = tlan_dio_read32(io_base, i + 0x4);
2031 		pr_info("0x%02x  0x%08x 0x%08x\n", i, data0, data1);
2032 	}
2033 
2034 }
2035 
2036 
2037 
2038 
2039 /***************************************************************
2040  *	TLan_PrintList
2041  *
2042  *	Returns:
2043  *		Nothing
2044  *	Parms:
2045  *		list	A pointer to the struct tlan_list structure to
2046  *			be printed.
2047  *		type	A string to designate type of list,
2048  *			"Rx" or "Tx".
2049  *		num	The index of the list.
2050  *
2051  *	This function prints out the contents of the list
2052  *	pointed to by the list parameter.
2053  *
2054  **************************************************************/
2055 
2056 static void tlan_print_list(struct tlan_list *list, char *type, int num)
2057 {
2058 	int i;
2059 
2060 	pr_info("%s List %d at %p\n", type, num, list);
2061 	pr_info("   Forward    = 0x%08x\n",  list->forward);
2062 	pr_info("   CSTAT      = 0x%04hx\n", list->c_stat);
2063 	pr_info("   Frame Size = 0x%04hx\n", list->frame_size);
2064 	/* for (i = 0; i < 10; i++) { */
2065 	for (i = 0; i < 2; i++) {
2066 		pr_info("   Buffer[%d].count, addr = 0x%08x, 0x%08x\n",
2067 			i, list->buffer[i].count, list->buffer[i].address);
2068 	}
2069 
2070 }
2071 
2072 
2073 
2074 
2075 /***************************************************************
2076  *	tlan_read_and_clear_stats
2077  *
2078  *	Returns:
2079  *		Nothing
2080  *	Parms:
2081  *		dev	Pointer to device structure of adapter
2082  *			to which to read stats.
2083  *		record	Flag indicating whether to add
2084  *
2085  *	This functions reads all the internal status registers
2086  *	of the TLAN chip, which clears them as a side effect.
2087  *	It then either adds the values to the device's status
2088  *	struct, or discards them, depending on whether record
2089  *	is TLAN_RECORD (!=0)  or TLAN_IGNORE (==0).
2090  *
2091  **************************************************************/
2092 
2093 static void tlan_read_and_clear_stats(struct net_device *dev, int record)
2094 {
2095 	u32		tx_good, tx_under;
2096 	u32		rx_good, rx_over;
2097 	u32		def_tx, crc, code;
2098 	u32		multi_col, single_col;
2099 	u32		excess_col, late_col, loss;
2100 
2101 	outw(TLAN_GOOD_TX_FRMS, dev->base_addr + TLAN_DIO_ADR);
2102 	tx_good  = inb(dev->base_addr + TLAN_DIO_DATA);
2103 	tx_good += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2104 	tx_good += inb(dev->base_addr + TLAN_DIO_DATA + 2) << 16;
2105 	tx_under = inb(dev->base_addr + TLAN_DIO_DATA + 3);
2106 
2107 	outw(TLAN_GOOD_RX_FRMS, dev->base_addr + TLAN_DIO_ADR);
2108 	rx_good  = inb(dev->base_addr + TLAN_DIO_DATA);
2109 	rx_good += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2110 	rx_good += inb(dev->base_addr + TLAN_DIO_DATA + 2) << 16;
2111 	rx_over  = inb(dev->base_addr + TLAN_DIO_DATA + 3);
2112 
2113 	outw(TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR);
2114 	def_tx  = inb(dev->base_addr + TLAN_DIO_DATA);
2115 	def_tx += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2116 	crc     = inb(dev->base_addr + TLAN_DIO_DATA + 2);
2117 	code    = inb(dev->base_addr + TLAN_DIO_DATA + 3);
2118 
2119 	outw(TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR);
2120 	multi_col   = inb(dev->base_addr + TLAN_DIO_DATA);
2121 	multi_col  += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2122 	single_col  = inb(dev->base_addr + TLAN_DIO_DATA + 2);
2123 	single_col += inb(dev->base_addr + TLAN_DIO_DATA + 3) << 8;
2124 
2125 	outw(TLAN_EXCESSCOL_FRMS, dev->base_addr + TLAN_DIO_ADR);
2126 	excess_col = inb(dev->base_addr + TLAN_DIO_DATA);
2127 	late_col   = inb(dev->base_addr + TLAN_DIO_DATA + 1);
2128 	loss       = inb(dev->base_addr + TLAN_DIO_DATA + 2);
2129 
2130 	if (record) {
2131 		dev->stats.rx_packets += rx_good;
2132 		dev->stats.rx_errors  += rx_over + crc + code;
2133 		dev->stats.tx_packets += tx_good;
2134 		dev->stats.tx_errors  += tx_under + loss;
2135 		dev->stats.collisions += multi_col
2136 			+ single_col + excess_col + late_col;
2137 
2138 		dev->stats.rx_over_errors    += rx_over;
2139 		dev->stats.rx_crc_errors     += crc;
2140 		dev->stats.rx_frame_errors   += code;
2141 
2142 		dev->stats.tx_aborted_errors += tx_under;
2143 		dev->stats.tx_carrier_errors += loss;
2144 	}
2145 
2146 }
2147 
2148 
2149 
2150 
2151 /***************************************************************
2152  *	TLan_Reset
2153  *
2154  *	Returns:
2155  *		0
2156  *	Parms:
2157  *		dev	Pointer to device structure of adapter
2158  *			to be reset.
2159  *
2160  *	This function resets the adapter and it's physical
2161  *	device.  See Chap. 3, pp. 9-10 of the "ThunderLAN
2162  *	Programmer's Guide" for details.  The routine tries to
2163  *	implement what is detailed there, though adjustments
2164  *	have been made.
2165  *
2166  **************************************************************/
2167 
2168 static void
2169 tlan_reset_adapter(struct net_device *dev)
2170 {
2171 	struct tlan_priv	*priv = netdev_priv(dev);
2172 	int		i;
2173 	u32		addr;
2174 	u32		data;
2175 	u8		data8;
2176 
2177 	priv->tlan_full_duplex = false;
2178 	priv->phy_online = 0;
2179 	netif_carrier_off(dev);
2180 
2181 /*  1.	Assert reset bit. */
2182 
2183 	data = inl(dev->base_addr + TLAN_HOST_CMD);
2184 	data |= TLAN_HC_AD_RST;
2185 	outl(data, dev->base_addr + TLAN_HOST_CMD);
2186 
2187 	udelay(1000);
2188 
2189 /*  2.	Turn off interrupts. (Probably isn't necessary) */
2190 
2191 	data = inl(dev->base_addr + TLAN_HOST_CMD);
2192 	data |= TLAN_HC_INT_OFF;
2193 	outl(data, dev->base_addr + TLAN_HOST_CMD);
2194 
2195 /*  3.	Clear AREGs and HASHs. */
2196 
2197 	for (i = TLAN_AREG_0; i <= TLAN_HASH_2; i += 4)
2198 		tlan_dio_write32(dev->base_addr, (u16) i, 0);
2199 
2200 /*  4.	Setup NetConfig register. */
2201 
2202 	data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN;
2203 	tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, (u16) data);
2204 
2205 /*  5.	Load Ld_Tmr and Ld_Thr in HOST_CMD. */
2206 
2207 	outl(TLAN_HC_LD_TMR | 0x3f, dev->base_addr + TLAN_HOST_CMD);
2208 	outl(TLAN_HC_LD_THR | 0x9, dev->base_addr + TLAN_HOST_CMD);
2209 
2210 /*  6.	Unreset the MII by setting NMRST (in NetSio) to 1. */
2211 
2212 	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
2213 	addr = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
2214 	tlan_set_bit(TLAN_NET_SIO_NMRST, addr);
2215 
2216 /*  7.	Setup the remaining registers. */
2217 
2218 	if (priv->tlan_rev >= 0x30) {
2219 		data8 = TLAN_ID_TX_EOC | TLAN_ID_RX_EOC;
2220 		tlan_dio_write8(dev->base_addr, TLAN_INT_DIS, data8);
2221 	}
2222 	tlan_phy_detect(dev);
2223 	data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN;
2224 
2225 	if (priv->adapter->flags & TLAN_ADAPTER_BIT_RATE_PHY) {
2226 		data |= TLAN_NET_CFG_BIT;
2227 		if (priv->aui == 1) {
2228 			tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x0a);
2229 		} else if (priv->duplex == TLAN_DUPLEX_FULL) {
2230 			tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x00);
2231 			priv->tlan_full_duplex = true;
2232 		} else {
2233 			tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x08);
2234 		}
2235 	}
2236 
2237 	/* don't power down internal PHY if we're going to use it */
2238 	if (priv->phy_num == 0 ||
2239 	   (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10))
2240 		data |= TLAN_NET_CFG_PHY_EN;
2241 	tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, (u16) data);
2242 
2243 	if (priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY)
2244 		tlan_finish_reset(dev);
2245 	else
2246 		tlan_phy_power_down(dev);
2247 
2248 }
2249 
2250 
2251 
2252 
2253 static void
2254 tlan_finish_reset(struct net_device *dev)
2255 {
2256 	struct tlan_priv	*priv = netdev_priv(dev);
2257 	u8		data;
2258 	u32		phy;
2259 	u8		sio;
2260 	u16		status;
2261 	u16		partner;
2262 	u16		tlphy_ctl;
2263 	u16		tlphy_par;
2264 	u16		tlphy_id1, tlphy_id2;
2265 	int		i;
2266 
2267 	phy = priv->phy[priv->phy_num];
2268 
2269 	data = TLAN_NET_CMD_NRESET | TLAN_NET_CMD_NWRAP;
2270 	if (priv->tlan_full_duplex)
2271 		data |= TLAN_NET_CMD_DUPLEX;
2272 	tlan_dio_write8(dev->base_addr, TLAN_NET_CMD, data);
2273 	data = TLAN_NET_MASK_MASK4 | TLAN_NET_MASK_MASK5;
2274 	if (priv->phy_num == 0)
2275 		data |= TLAN_NET_MASK_MASK7;
2276 	tlan_dio_write8(dev->base_addr, TLAN_NET_MASK, data);
2277 	tlan_dio_write16(dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7);
2278 	tlan_mii_read_reg(dev, phy, MII_GEN_ID_HI, &tlphy_id1);
2279 	tlan_mii_read_reg(dev, phy, MII_GEN_ID_LO, &tlphy_id2);
2280 
2281 	if ((priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY) ||
2282 	    (priv->aui)) {
2283 		status = MII_GS_LINK;
2284 		netdev_info(dev, "Link forced\n");
2285 	} else {
2286 		tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2287 		udelay(1000);
2288 		tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2289 		if (status & MII_GS_LINK) {
2290 			/* We only support link info on Nat.Sem. PHY's */
2291 			if ((tlphy_id1 == NAT_SEM_ID1) &&
2292 			    (tlphy_id2 == NAT_SEM_ID2)) {
2293 				tlan_mii_read_reg(dev, phy, MII_AN_LPA,
2294 					&partner);
2295 				tlan_mii_read_reg(dev, phy, TLAN_TLPHY_PAR,
2296 					&tlphy_par);
2297 
2298 				netdev_info(dev,
2299 					"Link active, %s %uMbps %s-Duplex\n",
2300 					!(tlphy_par & TLAN_PHY_AN_EN_STAT)
2301 					? "forced" : "Autonegotiation enabled,",
2302 					tlphy_par & TLAN_PHY_SPEED_100
2303 					? 100 : 10,
2304 					tlphy_par & TLAN_PHY_DUPLEX_FULL
2305 					? "Full" : "Half");
2306 
2307 				if (tlphy_par & TLAN_PHY_AN_EN_STAT) {
2308 					netdev_info(dev, "Partner capability:");
2309 					for (i = 5; i < 10; i++)
2310 						if (partner & (1 << i))
2311 							pr_cont(" %s",
2312 								media[i-5]);
2313 					pr_cont("\n");
2314 				}
2315 			} else
2316 				netdev_info(dev, "Link active\n");
2317 			/* Enabling link beat monitoring */
2318 			priv->media_timer.expires = jiffies + HZ;
2319 			add_timer(&priv->media_timer);
2320 		}
2321 	}
2322 
2323 	if (priv->phy_num == 0) {
2324 		tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl);
2325 		tlphy_ctl |= TLAN_TC_INTEN;
2326 		tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, tlphy_ctl);
2327 		sio = tlan_dio_read8(dev->base_addr, TLAN_NET_SIO);
2328 		sio |= TLAN_NET_SIO_MINTEN;
2329 		tlan_dio_write8(dev->base_addr, TLAN_NET_SIO, sio);
2330 	}
2331 
2332 	if (status & MII_GS_LINK) {
2333 		tlan_set_mac(dev, 0, dev->dev_addr);
2334 		priv->phy_online = 1;
2335 		outb((TLAN_HC_INT_ON >> 8), dev->base_addr + TLAN_HOST_CMD + 1);
2336 		if (debug >= 1 && debug != TLAN_DEBUG_PROBE)
2337 			outb((TLAN_HC_REQ_INT >> 8),
2338 			     dev->base_addr + TLAN_HOST_CMD + 1);
2339 		outl(priv->rx_list_dma, dev->base_addr + TLAN_CH_PARM);
2340 		outl(TLAN_HC_GO | TLAN_HC_RT, dev->base_addr + TLAN_HOST_CMD);
2341 		tlan_dio_write8(dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK);
2342 		netif_carrier_on(dev);
2343 	} else {
2344 		netdev_info(dev, "Link inactive, will retry in 10 secs...\n");
2345 		tlan_set_timer(dev, (10*HZ), TLAN_TIMER_FINISH_RESET);
2346 		return;
2347 	}
2348 	tlan_set_multicast_list(dev);
2349 
2350 }
2351 
2352 
2353 
2354 
2355 /***************************************************************
2356  *	tlan_set_mac
2357  *
2358  *	Returns:
2359  *		Nothing
2360  *	Parms:
2361  *		dev	Pointer to device structure of adapter
2362  *			on which to change the AREG.
2363  *		areg	The AREG to set the address in (0 - 3).
2364  *		mac	A pointer to an array of chars.  Each
2365  *			element stores one byte of the address.
2366  *			IE, it isn't in ascii.
2367  *
2368  *	This function transfers a MAC address to one of the
2369  *	TLAN AREGs (address registers).  The TLAN chip locks
2370  *	the register on writing to offset 0 and unlocks the
2371  *	register after writing to offset 5.  If NULL is passed
2372  *	in mac, then the AREG is filled with 0's.
2373  *
2374  **************************************************************/
2375 
2376 static void tlan_set_mac(struct net_device *dev, int areg, char *mac)
2377 {
2378 	int i;
2379 
2380 	areg *= 6;
2381 
2382 	if (mac != NULL) {
2383 		for (i = 0; i < 6; i++)
2384 			tlan_dio_write8(dev->base_addr,
2385 					TLAN_AREG_0 + areg + i, mac[i]);
2386 	} else {
2387 		for (i = 0; i < 6; i++)
2388 			tlan_dio_write8(dev->base_addr,
2389 					TLAN_AREG_0 + areg + i, 0);
2390 	}
2391 
2392 }
2393 
2394 
2395 
2396 
2397 /*****************************************************************************
2398 ******************************************************************************
2399 
2400 ThunderLAN driver PHY layer routines
2401 
2402 ******************************************************************************
2403 *****************************************************************************/
2404 
2405 
2406 
2407 /*********************************************************************
2408  *	tlan_phy_print
2409  *
2410  *	Returns:
2411  *		Nothing
2412  *	Parms:
2413  *		dev	A pointer to the device structure of the
2414  *			TLAN device having the PHYs to be detailed.
2415  *
2416  *	This function prints the registers a PHY (aka transceiver).
2417  *
2418  ********************************************************************/
2419 
2420 static void tlan_phy_print(struct net_device *dev)
2421 {
2422 	struct tlan_priv *priv = netdev_priv(dev);
2423 	u16 i, data0, data1, data2, data3, phy;
2424 
2425 	phy = priv->phy[priv->phy_num];
2426 
2427 	if (priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY) {
2428 		netdev_info(dev, "Unmanaged PHY\n");
2429 	} else if (phy <= TLAN_PHY_MAX_ADDR) {
2430 		netdev_info(dev, "PHY 0x%02x\n", phy);
2431 		pr_info("   Off.  +0     +1     +2     +3\n");
2432 		for (i = 0; i < 0x20; i += 4) {
2433 			tlan_mii_read_reg(dev, phy, i, &data0);
2434 			tlan_mii_read_reg(dev, phy, i + 1, &data1);
2435 			tlan_mii_read_reg(dev, phy, i + 2, &data2);
2436 			tlan_mii_read_reg(dev, phy, i + 3, &data3);
2437 			pr_info("   0x%02x 0x%04hx 0x%04hx 0x%04hx 0x%04hx\n",
2438 				i, data0, data1, data2, data3);
2439 		}
2440 	} else {
2441 		netdev_info(dev, "Invalid PHY\n");
2442 	}
2443 
2444 }
2445 
2446 
2447 
2448 
2449 /*********************************************************************
2450  *	tlan_phy_detect
2451  *
2452  *	Returns:
2453  *		Nothing
2454  *	Parms:
2455  *		dev	A pointer to the device structure of the adapter
2456  *			for which the PHY needs determined.
2457  *
2458  *	So far I've found that adapters which have external PHYs
2459  *	may also use the internal PHY for part of the functionality.
2460  *	(eg, AUI/Thinnet).  This function finds out if this TLAN
2461  *	chip has an internal PHY, and then finds the first external
2462  *	PHY (starting from address 0) if it exists).
2463  *
2464  ********************************************************************/
2465 
2466 static void tlan_phy_detect(struct net_device *dev)
2467 {
2468 	struct tlan_priv *priv = netdev_priv(dev);
2469 	u16		control;
2470 	u16		hi;
2471 	u16		lo;
2472 	u32		phy;
2473 
2474 	if (priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY) {
2475 		priv->phy_num = 0xffff;
2476 		return;
2477 	}
2478 
2479 	tlan_mii_read_reg(dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi);
2480 
2481 	if (hi != 0xffff)
2482 		priv->phy[0] = TLAN_PHY_MAX_ADDR;
2483 	else
2484 		priv->phy[0] = TLAN_PHY_NONE;
2485 
2486 	priv->phy[1] = TLAN_PHY_NONE;
2487 	for (phy = 0; phy <= TLAN_PHY_MAX_ADDR; phy++) {
2488 		tlan_mii_read_reg(dev, phy, MII_GEN_CTL, &control);
2489 		tlan_mii_read_reg(dev, phy, MII_GEN_ID_HI, &hi);
2490 		tlan_mii_read_reg(dev, phy, MII_GEN_ID_LO, &lo);
2491 		if ((control != 0xffff) ||
2492 		    (hi != 0xffff) || (lo != 0xffff)) {
2493 			TLAN_DBG(TLAN_DEBUG_GNRL,
2494 				 "PHY found at %02x %04x %04x %04x\n",
2495 				 phy, control, hi, lo);
2496 			if ((priv->phy[1] == TLAN_PHY_NONE) &&
2497 			    (phy != TLAN_PHY_MAX_ADDR)) {
2498 				priv->phy[1] = phy;
2499 			}
2500 		}
2501 	}
2502 
2503 	if (priv->phy[1] != TLAN_PHY_NONE)
2504 		priv->phy_num = 1;
2505 	else if (priv->phy[0] != TLAN_PHY_NONE)
2506 		priv->phy_num = 0;
2507 	else
2508 		netdev_info(dev, "Cannot initialize device, no PHY was found!\n");
2509 
2510 }
2511 
2512 
2513 
2514 
2515 static void tlan_phy_power_down(struct net_device *dev)
2516 {
2517 	struct tlan_priv	*priv = netdev_priv(dev);
2518 	u16		value;
2519 
2520 	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Powering down PHY(s).\n", dev->name);
2521 	value = MII_GC_PDOWN | MII_GC_LOOPBK | MII_GC_ISOLATE;
2522 	tlan_mii_sync(dev->base_addr);
2523 	tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value);
2524 	if ((priv->phy_num == 0) && (priv->phy[1] != TLAN_PHY_NONE)) {
2525 		/* if using internal PHY, the external PHY must be powered on */
2526 		if (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10)
2527 			value = MII_GC_ISOLATE; /* just isolate it from MII */
2528 		tlan_mii_sync(dev->base_addr);
2529 		tlan_mii_write_reg(dev, priv->phy[1], MII_GEN_CTL, value);
2530 	}
2531 
2532 	/* Wait for 50 ms and powerup
2533 	 * This is abitrary.  It is intended to make sure the
2534 	 * transceiver settles.
2535 	 */
2536 	tlan_set_timer(dev, msecs_to_jiffies(50), TLAN_TIMER_PHY_PUP);
2537 
2538 }
2539 
2540 
2541 
2542 
2543 static void tlan_phy_power_up(struct net_device *dev)
2544 {
2545 	struct tlan_priv	*priv = netdev_priv(dev);
2546 	u16		value;
2547 
2548 	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Powering up PHY.\n", dev->name);
2549 	tlan_mii_sync(dev->base_addr);
2550 	value = MII_GC_LOOPBK;
2551 	tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value);
2552 	tlan_mii_sync(dev->base_addr);
2553 	/* Wait for 500 ms and reset the
2554 	 * transceiver.  The TLAN docs say both 50 ms and
2555 	 * 500 ms, so do the longer, just in case.
2556 	 */
2557 	tlan_set_timer(dev, msecs_to_jiffies(500), TLAN_TIMER_PHY_RESET);
2558 
2559 }
2560 
2561 
2562 
2563 
2564 static void tlan_phy_reset(struct net_device *dev)
2565 {
2566 	struct tlan_priv	*priv = netdev_priv(dev);
2567 	u16		phy;
2568 	u16		value;
2569 	unsigned long timeout = jiffies + HZ;
2570 
2571 	phy = priv->phy[priv->phy_num];
2572 
2573 	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Resetting PHY.\n", dev->name);
2574 	tlan_mii_sync(dev->base_addr);
2575 	value = MII_GC_LOOPBK | MII_GC_RESET;
2576 	tlan_mii_write_reg(dev, phy, MII_GEN_CTL, value);
2577 	do {
2578 		tlan_mii_read_reg(dev, phy, MII_GEN_CTL, &value);
2579 		if (time_after(jiffies, timeout)) {
2580 			netdev_err(dev, "PHY reset timeout\n");
2581 			return;
2582 		}
2583 	} while (value & MII_GC_RESET);
2584 
2585 	/* Wait for 500 ms and initialize.
2586 	 * I don't remember why I wait this long.
2587 	 * I've changed this to 50ms, as it seems long enough.
2588 	 */
2589 	tlan_set_timer(dev, msecs_to_jiffies(50), TLAN_TIMER_PHY_START_LINK);
2590 
2591 }
2592 
2593 
2594 
2595 
2596 static void tlan_phy_start_link(struct net_device *dev)
2597 {
2598 	struct tlan_priv	*priv = netdev_priv(dev);
2599 	u16		ability;
2600 	u16		control;
2601 	u16		data;
2602 	u16		phy;
2603 	u16		status;
2604 	u16		tctl;
2605 
2606 	phy = priv->phy[priv->phy_num];
2607 	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Trying to activate link.\n", dev->name);
2608 	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2609 	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &ability);
2610 
2611 	if ((status & MII_GS_AUTONEG) &&
2612 	    (!priv->aui)) {
2613 		ability = status >> 11;
2614 		if (priv->speed  == TLAN_SPEED_10 &&
2615 		    priv->duplex == TLAN_DUPLEX_HALF) {
2616 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x0000);
2617 		} else if (priv->speed == TLAN_SPEED_10 &&
2618 			   priv->duplex == TLAN_DUPLEX_FULL) {
2619 			priv->tlan_full_duplex = true;
2620 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x0100);
2621 		} else if (priv->speed == TLAN_SPEED_100 &&
2622 			   priv->duplex == TLAN_DUPLEX_HALF) {
2623 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x2000);
2624 		} else if (priv->speed == TLAN_SPEED_100 &&
2625 			   priv->duplex == TLAN_DUPLEX_FULL) {
2626 			priv->tlan_full_duplex = true;
2627 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x2100);
2628 		} else {
2629 
2630 			/* Set Auto-Neg advertisement */
2631 			tlan_mii_write_reg(dev, phy, MII_AN_ADV,
2632 					   (ability << 5) | 1);
2633 			/* Enablee Auto-Neg */
2634 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x1000);
2635 			/* Restart Auto-Neg */
2636 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x1200);
2637 			/* Wait for 4 sec for autonegotiation
2638 			 * to complete.  The max spec time is less than this
2639 			 * but the card need additional time to start AN.
2640 			 * .5 sec should be plenty extra.
2641 			 */
2642 			netdev_info(dev, "Starting autonegotiation\n");
2643 			tlan_set_timer(dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN);
2644 			return;
2645 		}
2646 
2647 	}
2648 
2649 	if ((priv->aui) && (priv->phy_num != 0)) {
2650 		priv->phy_num = 0;
2651 		data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN
2652 			| TLAN_NET_CFG_PHY_EN;
2653 		tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, data);
2654 		tlan_set_timer(dev, msecs_to_jiffies(40), TLAN_TIMER_PHY_PDOWN);
2655 		return;
2656 	} else if (priv->phy_num == 0) {
2657 		control = 0;
2658 		tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tctl);
2659 		if (priv->aui) {
2660 			tctl |= TLAN_TC_AUISEL;
2661 		} else {
2662 			tctl &= ~TLAN_TC_AUISEL;
2663 			if (priv->duplex == TLAN_DUPLEX_FULL) {
2664 				control |= MII_GC_DUPLEX;
2665 				priv->tlan_full_duplex = true;
2666 			}
2667 			if (priv->speed == TLAN_SPEED_100)
2668 				control |= MII_GC_SPEEDSEL;
2669 		}
2670 		tlan_mii_write_reg(dev, phy, MII_GEN_CTL, control);
2671 		tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, tctl);
2672 	}
2673 
2674 	/* Wait for 2 sec to give the transceiver time
2675 	 * to establish link.
2676 	 */
2677 	tlan_set_timer(dev, (4*HZ), TLAN_TIMER_FINISH_RESET);
2678 
2679 }
2680 
2681 
2682 
2683 
2684 static void tlan_phy_finish_auto_neg(struct net_device *dev)
2685 {
2686 	struct tlan_priv	*priv = netdev_priv(dev);
2687 	u16		an_adv;
2688 	u16		an_lpa;
2689 	u16		mode;
2690 	u16		phy;
2691 	u16		status;
2692 
2693 	phy = priv->phy[priv->phy_num];
2694 
2695 	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2696 	udelay(1000);
2697 	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2698 
2699 	if (!(status & MII_GS_AUTOCMPLT)) {
2700 		/* Wait for 8 sec to give the process
2701 		 * more time.  Perhaps we should fail after a while.
2702 		 */
2703 		tlan_set_timer(dev, 2 * HZ, TLAN_TIMER_PHY_FINISH_AN);
2704 		return;
2705 	}
2706 
2707 	netdev_info(dev, "Autonegotiation complete\n");
2708 	tlan_mii_read_reg(dev, phy, MII_AN_ADV, &an_adv);
2709 	tlan_mii_read_reg(dev, phy, MII_AN_LPA, &an_lpa);
2710 	mode = an_adv & an_lpa & 0x03E0;
2711 	if (mode & 0x0100)
2712 		priv->tlan_full_duplex = true;
2713 	else if (!(mode & 0x0080) && (mode & 0x0040))
2714 		priv->tlan_full_duplex = true;
2715 
2716 	/* switch to internal PHY for 10 Mbps */
2717 	if ((!(mode & 0x0180)) &&
2718 	    (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10) &&
2719 	    (priv->phy_num != 0)) {
2720 		priv->phy_num = 0;
2721 		tlan_set_timer(dev, msecs_to_jiffies(400), TLAN_TIMER_PHY_PDOWN);
2722 		return;
2723 	}
2724 
2725 	if (priv->phy_num == 0) {
2726 		if ((priv->duplex == TLAN_DUPLEX_FULL) ||
2727 		    (an_adv & an_lpa & 0x0040)) {
2728 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL,
2729 					   MII_GC_AUTOENB | MII_GC_DUPLEX);
2730 			netdev_info(dev, "Starting internal PHY with FULL-DUPLEX\n");
2731 		} else {
2732 			tlan_mii_write_reg(dev, phy, MII_GEN_CTL,
2733 					   MII_GC_AUTOENB);
2734 			netdev_info(dev, "Starting internal PHY with HALF-DUPLEX\n");
2735 		}
2736 	}
2737 
2738 	/* Wait for 100 ms.  No reason in partiticular.
2739 	 */
2740 	tlan_set_timer(dev, msecs_to_jiffies(100), TLAN_TIMER_FINISH_RESET);
2741 
2742 }
2743 
2744 
2745 /*********************************************************************
2746  *
2747  *     tlan_phy_monitor
2748  *
2749  *     Returns:
2750  *	      None
2751  *
2752  *     Params:
2753  *	      data	     The device structure of this device.
2754  *
2755  *
2756  *     This function monitors PHY condition by reading the status
2757  *     register via the MII bus, controls LINK LED and notifies the
2758  *     kernel about link state.
2759  *
2760  *******************************************************************/
2761 
2762 static void tlan_phy_monitor(struct timer_list *t)
2763 {
2764 	struct tlan_priv *priv = from_timer(priv, t, media_timer);
2765 	struct net_device *dev = priv->dev;
2766 	u16     phy;
2767 	u16     phy_status;
2768 
2769 	phy = priv->phy[priv->phy_num];
2770 
2771 	/* Get PHY status register */
2772 	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &phy_status);
2773 
2774 	/* Check if link has been lost */
2775 	if (!(phy_status & MII_GS_LINK)) {
2776 		if (netif_carrier_ok(dev)) {
2777 			printk(KERN_DEBUG "TLAN: %s has lost link\n",
2778 			       dev->name);
2779 			tlan_dio_write8(dev->base_addr, TLAN_LED_REG, 0);
2780 			netif_carrier_off(dev);
2781 			if (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10) {
2782 				/* power down internal PHY */
2783 				u16 data = MII_GC_PDOWN | MII_GC_LOOPBK |
2784 					   MII_GC_ISOLATE;
2785 
2786 				tlan_mii_sync(dev->base_addr);
2787 				tlan_mii_write_reg(dev, priv->phy[0],
2788 						   MII_GEN_CTL, data);
2789 				/* set to external PHY */
2790 				priv->phy_num = 1;
2791 				/* restart autonegotiation */
2792 				tlan_set_timer(dev, msecs_to_jiffies(400),
2793 					       TLAN_TIMER_PHY_PDOWN);
2794 				return;
2795 			}
2796 		}
2797 	}
2798 
2799 	/* Link restablished? */
2800 	if ((phy_status & MII_GS_LINK) && !netif_carrier_ok(dev)) {
2801 		tlan_dio_write8(dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK);
2802 		printk(KERN_DEBUG "TLAN: %s has reestablished link\n",
2803 		       dev->name);
2804 		netif_carrier_on(dev);
2805 	}
2806 	priv->media_timer.expires = jiffies + HZ;
2807 	add_timer(&priv->media_timer);
2808 }
2809 
2810 
2811 /*****************************************************************************
2812 ******************************************************************************
2813 
2814 ThunderLAN driver MII routines
2815 
2816 these routines are based on the information in chap. 2 of the
2817 "ThunderLAN Programmer's Guide", pp. 15-24.
2818 
2819 ******************************************************************************
2820 *****************************************************************************/
2821 
2822 
2823 /***************************************************************
2824  *	tlan_mii_read_reg
2825  *
2826  *	Returns:
2827  *		false	if ack received ok
2828  *		true	if no ack received or other error
2829  *
2830  *	Parms:
2831  *		dev		The device structure containing
2832  *				The io address and interrupt count
2833  *				for this device.
2834  *		phy		The address of the PHY to be queried.
2835  *		reg		The register whose contents are to be
2836  *				retrieved.
2837  *		val		A pointer to a variable to store the
2838  *				retrieved value.
2839  *
2840  *	This function uses the TLAN's MII bus to retrieve the contents
2841  *	of a given register on a PHY.  It sends the appropriate info
2842  *	and then reads the 16-bit register value from the MII bus via
2843  *	the TLAN SIO register.
2844  *
2845  **************************************************************/
2846 
2847 static bool
2848 tlan_mii_read_reg(struct net_device *dev, u16 phy, u16 reg, u16 *val)
2849 {
2850 	u8	nack;
2851 	u16	sio, tmp;
2852 	u32	i;
2853 	bool	err;
2854 	int	minten;
2855 	struct tlan_priv *priv = netdev_priv(dev);
2856 	unsigned long flags = 0;
2857 
2858 	err = false;
2859 	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
2860 	sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
2861 
2862 	if (!in_irq())
2863 		spin_lock_irqsave(&priv->lock, flags);
2864 
2865 	tlan_mii_sync(dev->base_addr);
2866 
2867 	minten = tlan_get_bit(TLAN_NET_SIO_MINTEN, sio);
2868 	if (minten)
2869 		tlan_clear_bit(TLAN_NET_SIO_MINTEN, sio);
2870 
2871 	tlan_mii_send_data(dev->base_addr, 0x1, 2);	/* start (01b) */
2872 	tlan_mii_send_data(dev->base_addr, 0x2, 2);	/* read  (10b) */
2873 	tlan_mii_send_data(dev->base_addr, phy, 5);	/* device #      */
2874 	tlan_mii_send_data(dev->base_addr, reg, 5);	/* register #    */
2875 
2876 
2877 	tlan_clear_bit(TLAN_NET_SIO_MTXEN, sio);	/* change direction */
2878 
2879 	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);		/* clock idle bit */
2880 	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2881 	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);		/* wait 300ns */
2882 
2883 	nack = tlan_get_bit(TLAN_NET_SIO_MDATA, sio);	/* check for ACK */
2884 	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);		/* finish ACK */
2885 	if (nack) {					/* no ACK, so fake it */
2886 		for (i = 0; i < 16; i++) {
2887 			tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2888 			tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2889 		}
2890 		tmp = 0xffff;
2891 		err = true;
2892 	} else {					/* ACK, so read data */
2893 		for (tmp = 0, i = 0x8000; i; i >>= 1) {
2894 			tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2895 			if (tlan_get_bit(TLAN_NET_SIO_MDATA, sio))
2896 				tmp |= i;
2897 			tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2898 		}
2899 	}
2900 
2901 
2902 	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);		/* idle cycle */
2903 	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2904 
2905 	if (minten)
2906 		tlan_set_bit(TLAN_NET_SIO_MINTEN, sio);
2907 
2908 	*val = tmp;
2909 
2910 	if (!in_irq())
2911 		spin_unlock_irqrestore(&priv->lock, flags);
2912 
2913 	return err;
2914 
2915 }
2916 
2917 
2918 
2919 
2920 /***************************************************************
2921  *	tlan_mii_send_data
2922  *
2923  *	Returns:
2924  *		Nothing
2925  *	Parms:
2926  *		base_port	The base IO port of the adapter	in
2927  *				question.
2928  *		dev		The address of the PHY to be queried.
2929  *		data		The value to be placed on the MII bus.
2930  *		num_bits	The number of bits in data that are to
2931  *				be placed on the MII bus.
2932  *
2933  *	This function sends on sequence of bits on the MII
2934  *	configuration bus.
2935  *
2936  **************************************************************/
2937 
2938 static void tlan_mii_send_data(u16 base_port, u32 data, unsigned num_bits)
2939 {
2940 	u16 sio;
2941 	u32 i;
2942 
2943 	if (num_bits == 0)
2944 		return;
2945 
2946 	outw(TLAN_NET_SIO, base_port + TLAN_DIO_ADR);
2947 	sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO;
2948 	tlan_set_bit(TLAN_NET_SIO_MTXEN, sio);
2949 
2950 	for (i = (0x1 << (num_bits - 1)); i; i >>= 1) {
2951 		tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2952 		(void) tlan_get_bit(TLAN_NET_SIO_MCLK, sio);
2953 		if (data & i)
2954 			tlan_set_bit(TLAN_NET_SIO_MDATA, sio);
2955 		else
2956 			tlan_clear_bit(TLAN_NET_SIO_MDATA, sio);
2957 		tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2958 		(void) tlan_get_bit(TLAN_NET_SIO_MCLK, sio);
2959 	}
2960 
2961 }
2962 
2963 
2964 
2965 
2966 /***************************************************************
2967  *	TLan_MiiSync
2968  *
2969  *	Returns:
2970  *		Nothing
2971  *	Parms:
2972  *		base_port	The base IO port of the adapter in
2973  *				question.
2974  *
2975  *	This functions syncs all PHYs in terms of the MII configuration
2976  *	bus.
2977  *
2978  **************************************************************/
2979 
2980 static void tlan_mii_sync(u16 base_port)
2981 {
2982 	int i;
2983 	u16 sio;
2984 
2985 	outw(TLAN_NET_SIO, base_port + TLAN_DIO_ADR);
2986 	sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO;
2987 
2988 	tlan_clear_bit(TLAN_NET_SIO_MTXEN, sio);
2989 	for (i = 0; i < 32; i++) {
2990 		tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2991 		tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2992 	}
2993 
2994 }
2995 
2996 
2997 
2998 
2999 /***************************************************************
3000  *	tlan_mii_write_reg
3001  *
3002  *	Returns:
3003  *		Nothing
3004  *	Parms:
3005  *		dev		The device structure for the device
3006  *				to write to.
3007  *		phy		The address of the PHY to be written to.
3008  *		reg		The register whose contents are to be
3009  *				written.
3010  *		val		The value to be written to the register.
3011  *
3012  *	This function uses the TLAN's MII bus to write the contents of a
3013  *	given register on a PHY.  It sends the appropriate info and then
3014  *	writes the 16-bit register value from the MII configuration bus
3015  *	via the TLAN SIO register.
3016  *
3017  **************************************************************/
3018 
3019 static void
3020 tlan_mii_write_reg(struct net_device *dev, u16 phy, u16 reg, u16 val)
3021 {
3022 	u16	sio;
3023 	int	minten;
3024 	unsigned long flags = 0;
3025 	struct tlan_priv *priv = netdev_priv(dev);
3026 
3027 	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
3028 	sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
3029 
3030 	if (!in_irq())
3031 		spin_lock_irqsave(&priv->lock, flags);
3032 
3033 	tlan_mii_sync(dev->base_addr);
3034 
3035 	minten = tlan_get_bit(TLAN_NET_SIO_MINTEN, sio);
3036 	if (minten)
3037 		tlan_clear_bit(TLAN_NET_SIO_MINTEN, sio);
3038 
3039 	tlan_mii_send_data(dev->base_addr, 0x1, 2);	/* start (01b) */
3040 	tlan_mii_send_data(dev->base_addr, 0x1, 2);	/* write (01b) */
3041 	tlan_mii_send_data(dev->base_addr, phy, 5);	/* device #      */
3042 	tlan_mii_send_data(dev->base_addr, reg, 5);	/* register #    */
3043 
3044 	tlan_mii_send_data(dev->base_addr, 0x2, 2);	/* send ACK */
3045 	tlan_mii_send_data(dev->base_addr, val, 16);	/* send data */
3046 
3047 	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);	/* idle cycle */
3048 	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
3049 
3050 	if (minten)
3051 		tlan_set_bit(TLAN_NET_SIO_MINTEN, sio);
3052 
3053 	if (!in_irq())
3054 		spin_unlock_irqrestore(&priv->lock, flags);
3055 
3056 }
3057 
3058 
3059 
3060 
3061 /*****************************************************************************
3062 ******************************************************************************
3063 
3064 ThunderLAN driver eeprom routines
3065 
3066 the Compaq netelligent 10 and 10/100 cards use a microchip 24C02A
3067 EEPROM.  these functions are based on information in microchip's
3068 data sheet.  I don't know how well this functions will work with
3069 other Eeproms.
3070 
3071 ******************************************************************************
3072 *****************************************************************************/
3073 
3074 
3075 /***************************************************************
3076  *	tlan_ee_send_start
3077  *
3078  *	Returns:
3079  *		Nothing
3080  *	Parms:
3081  *		io_base		The IO port base address for the
3082  *				TLAN device with the EEPROM to
3083  *				use.
3084  *
3085  *	This function sends a start cycle to an EEPROM attached
3086  *	to a TLAN chip.
3087  *
3088  **************************************************************/
3089 
3090 static void tlan_ee_send_start(u16 io_base)
3091 {
3092 	u16	sio;
3093 
3094 	outw(TLAN_NET_SIO, io_base + TLAN_DIO_ADR);
3095 	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
3096 
3097 	tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3098 	tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3099 	tlan_set_bit(TLAN_NET_SIO_ETXEN, sio);
3100 	tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3101 	tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3102 
3103 }
3104 
3105 
3106 
3107 
3108 /***************************************************************
3109  *	tlan_ee_send_byte
3110  *
3111  *	Returns:
3112  *		If the correct ack was received, 0, otherwise 1
3113  *	Parms:	io_base		The IO port base address for the
3114  *				TLAN device with the EEPROM to
3115  *				use.
3116  *		data		The 8 bits of information to
3117  *				send to the EEPROM.
3118  *		stop		If TLAN_EEPROM_STOP is passed, a
3119  *				stop cycle is sent after the
3120  *				byte is sent after the ack is
3121  *				read.
3122  *
3123  *	This function sends a byte on the serial EEPROM line,
3124  *	driving the clock to send each bit. The function then
3125  *	reverses transmission direction and reads an acknowledge
3126  *	bit.
3127  *
3128  **************************************************************/
3129 
3130 static int tlan_ee_send_byte(u16 io_base, u8 data, int stop)
3131 {
3132 	int	err;
3133 	u8	place;
3134 	u16	sio;
3135 
3136 	outw(TLAN_NET_SIO, io_base + TLAN_DIO_ADR);
3137 	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
3138 
3139 	/* Assume clock is low, tx is enabled; */
3140 	for (place = 0x80; place != 0; place >>= 1) {
3141 		if (place & data)
3142 			tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3143 		else
3144 			tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3145 		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3146 		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3147 	}
3148 	tlan_clear_bit(TLAN_NET_SIO_ETXEN, sio);
3149 	tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3150 	err = tlan_get_bit(TLAN_NET_SIO_EDATA, sio);
3151 	tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3152 	tlan_set_bit(TLAN_NET_SIO_ETXEN, sio);
3153 
3154 	if ((!err) && stop) {
3155 		/* STOP, raise data while clock is high */
3156 		tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3157 		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3158 		tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3159 	}
3160 
3161 	return err;
3162 
3163 }
3164 
3165 
3166 
3167 
3168 /***************************************************************
3169  *	tlan_ee_receive_byte
3170  *
3171  *	Returns:
3172  *		Nothing
3173  *	Parms:
3174  *		io_base		The IO port base address for the
3175  *				TLAN device with the EEPROM to
3176  *				use.
3177  *		data		An address to a char to hold the
3178  *				data sent from the EEPROM.
3179  *		stop		If TLAN_EEPROM_STOP is passed, a
3180  *				stop cycle is sent after the
3181  *				byte is received, and no ack is
3182  *				sent.
3183  *
3184  *	This function receives 8 bits of data from the EEPROM
3185  *	over the serial link.  It then sends and ack bit, or no
3186  *	ack and a stop bit.  This function is used to retrieve
3187  *	data after the address of a byte in the EEPROM has been
3188  *	sent.
3189  *
3190  **************************************************************/
3191 
3192 static void tlan_ee_receive_byte(u16 io_base, u8 *data, int stop)
3193 {
3194 	u8  place;
3195 	u16 sio;
3196 
3197 	outw(TLAN_NET_SIO, io_base + TLAN_DIO_ADR);
3198 	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
3199 	*data = 0;
3200 
3201 	/* Assume clock is low, tx is enabled; */
3202 	tlan_clear_bit(TLAN_NET_SIO_ETXEN, sio);
3203 	for (place = 0x80; place; place >>= 1) {
3204 		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3205 		if (tlan_get_bit(TLAN_NET_SIO_EDATA, sio))
3206 			*data |= place;
3207 		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3208 	}
3209 
3210 	tlan_set_bit(TLAN_NET_SIO_ETXEN, sio);
3211 	if (!stop) {
3212 		tlan_clear_bit(TLAN_NET_SIO_EDATA, sio); /* ack = 0 */
3213 		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3214 		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3215 	} else {
3216 		tlan_set_bit(TLAN_NET_SIO_EDATA, sio);	/* no ack = 1 (?) */
3217 		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3218 		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3219 		/* STOP, raise data while clock is high */
3220 		tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3221 		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3222 		tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3223 	}
3224 
3225 }
3226 
3227 
3228 
3229 
3230 /***************************************************************
3231  *	tlan_ee_read_byte
3232  *
3233  *	Returns:
3234  *		No error = 0, else, the stage at which the error
3235  *		occurred.
3236  *	Parms:
3237  *		io_base		The IO port base address for the
3238  *				TLAN device with the EEPROM to
3239  *				use.
3240  *		ee_addr		The address of the byte in the
3241  *				EEPROM whose contents are to be
3242  *				retrieved.
3243  *		data		An address to a char to hold the
3244  *				data obtained from the EEPROM.
3245  *
3246  *	This function reads a byte of information from an byte
3247  *	cell in the EEPROM.
3248  *
3249  **************************************************************/
3250 
3251 static int tlan_ee_read_byte(struct net_device *dev, u8 ee_addr, u8 *data)
3252 {
3253 	int err;
3254 	struct tlan_priv *priv = netdev_priv(dev);
3255 	unsigned long flags = 0;
3256 	int ret = 0;
3257 
3258 	spin_lock_irqsave(&priv->lock, flags);
3259 
3260 	tlan_ee_send_start(dev->base_addr);
3261 	err = tlan_ee_send_byte(dev->base_addr, 0xa0, TLAN_EEPROM_ACK);
3262 	if (err) {
3263 		ret = 1;
3264 		goto fail;
3265 	}
3266 	err = tlan_ee_send_byte(dev->base_addr, ee_addr, TLAN_EEPROM_ACK);
3267 	if (err) {
3268 		ret = 2;
3269 		goto fail;
3270 	}
3271 	tlan_ee_send_start(dev->base_addr);
3272 	err = tlan_ee_send_byte(dev->base_addr, 0xa1, TLAN_EEPROM_ACK);
3273 	if (err) {
3274 		ret = 3;
3275 		goto fail;
3276 	}
3277 	tlan_ee_receive_byte(dev->base_addr, data, TLAN_EEPROM_STOP);
3278 fail:
3279 	spin_unlock_irqrestore(&priv->lock, flags);
3280 
3281 	return ret;
3282 
3283 }
3284 
3285 
3286 
3287