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