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