Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / net / ethernet / dec / tulip / dmfe.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3     A Davicom DM9102/DM9102A/DM9102A+DM9801/DM9102A+DM9802 NIC fast
4     ethernet driver for Linux.
5     Copyright (C) 1997  Sten Wang
6
7
8     DAVICOM Web-Site: www.davicom.com.tw
9
10     Author: Sten Wang, 886-3-5798797-8517, E-mail: sten_wang@davicom.com.tw
11     Maintainer: Tobias Ringstrom <tori@unhappy.mine.nu>
12
13     (C)Copyright 1997-1998 DAVICOM Semiconductor,Inc. All Rights Reserved.
14
15     Marcelo Tosatti <marcelo@conectiva.com.br> :
16     Made it compile in 2.3 (device to net_device)
17
18     Alan Cox <alan@lxorguk.ukuu.org.uk> :
19     Cleaned up for kernel merge.
20     Removed the back compatibility support
21     Reformatted, fixing spelling etc as I went
22     Removed IRQ 0-15 assumption
23
24     Jeff Garzik <jgarzik@pobox.com> :
25     Updated to use new PCI driver API.
26     Resource usage cleanups.
27     Report driver version to user.
28
29     Tobias Ringstrom <tori@unhappy.mine.nu> :
30     Cleaned up and added SMP safety.  Thanks go to Jeff Garzik,
31     Andrew Morton and Frank Davis for the SMP safety fixes.
32
33     Vojtech Pavlik <vojtech@suse.cz> :
34     Cleaned up pointer arithmetics.
35     Fixed a lot of 64bit issues.
36     Cleaned up printk()s a bit.
37     Fixed some obvious big endian problems.
38
39     Tobias Ringstrom <tori@unhappy.mine.nu> :
40     Use time_after for jiffies calculation.  Added ethtool
41     support.  Updated PCI resource allocation.  Do not
42     forget to unmap PCI mapped skbs.
43
44     Alan Cox <alan@lxorguk.ukuu.org.uk>
45     Added new PCI identifiers provided by Clear Zhang at ALi
46     for their 1563 ethernet device.
47
48     TODO
49
50     Check on 64 bit boxes.
51     Check and fix on big endian boxes.
52
53     Test and make sure PCI latency is now correct for all cases.
54 */
55
56 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
57
58 #define DRV_NAME        "dmfe"
59 #define DRV_VERSION     "1.36.4"
60 #define DRV_RELDATE     "2002-01-17"
61
62 #include <linux/module.h>
63 #include <linux/kernel.h>
64 #include <linux/string.h>
65 #include <linux/timer.h>
66 #include <linux/ptrace.h>
67 #include <linux/errno.h>
68 #include <linux/ioport.h>
69 #include <linux/interrupt.h>
70 #include <linux/pci.h>
71 #include <linux/dma-mapping.h>
72 #include <linux/init.h>
73 #include <linux/netdevice.h>
74 #include <linux/etherdevice.h>
75 #include <linux/ethtool.h>
76 #include <linux/skbuff.h>
77 #include <linux/delay.h>
78 #include <linux/spinlock.h>
79 #include <linux/crc32.h>
80 #include <linux/bitops.h>
81
82 #include <asm/processor.h>
83 #include <asm/io.h>
84 #include <asm/dma.h>
85 #include <linux/uaccess.h>
86 #include <asm/irq.h>
87
88 #ifdef CONFIG_TULIP_DM910X
89 #include <linux/of.h>
90 #endif
91
92
93 /* Board/System/Debug information/definition ---------------- */
94 #define PCI_DM9132_ID   0x91321282      /* Davicom DM9132 ID */
95 #define PCI_DM9102_ID   0x91021282      /* Davicom DM9102 ID */
96 #define PCI_DM9100_ID   0x91001282      /* Davicom DM9100 ID */
97 #define PCI_DM9009_ID   0x90091282      /* Davicom DM9009 ID */
98
99 #define DM9102_IO_SIZE  0x80
100 #define DM9102A_IO_SIZE 0x100
101 #define TX_MAX_SEND_CNT 0x1             /* Maximum tx packet per time */
102 #define TX_DESC_CNT     0x10            /* Allocated Tx descriptors */
103 #define RX_DESC_CNT     0x20            /* Allocated Rx descriptors */
104 #define TX_FREE_DESC_CNT (TX_DESC_CNT - 2)      /* Max TX packet count */
105 #define TX_WAKE_DESC_CNT (TX_DESC_CNT - 3)      /* TX wakeup count */
106 #define DESC_ALL_CNT    (TX_DESC_CNT + RX_DESC_CNT)
107 #define TX_BUF_ALLOC    0x600
108 #define RX_ALLOC_SIZE   0x620
109 #define DM910X_RESET    1
110 #define CR0_DEFAULT     0x00E00000      /* TX & RX burst mode */
111 #define CR6_DEFAULT     0x00080000      /* HD */
112 #define CR7_DEFAULT     0x180c1
113 #define CR15_DEFAULT    0x06            /* TxJabber RxWatchdog */
114 #define TDES0_ERR_MASK  0x4302          /* TXJT, LC, EC, FUE */
115 #define MAX_PACKET_SIZE 1514
116 #define DMFE_MAX_MULTICAST 14
117 #define RX_COPY_SIZE    100
118 #define MAX_CHECK_PACKET 0x8000
119 #define DM9801_NOISE_FLOOR 8
120 #define DM9802_NOISE_FLOOR 5
121
122 #define DMFE_WOL_LINKCHANGE     0x20000000
123 #define DMFE_WOL_SAMPLEPACKET   0x10000000
124 #define DMFE_WOL_MAGICPACKET    0x08000000
125
126
127 #define DMFE_10MHF      0
128 #define DMFE_100MHF     1
129 #define DMFE_10MFD      4
130 #define DMFE_100MFD     5
131 #define DMFE_AUTO       8
132 #define DMFE_1M_HPNA    0x10
133
134 #define DMFE_TXTH_72    0x400000        /* TX TH 72 byte */
135 #define DMFE_TXTH_96    0x404000        /* TX TH 96 byte */
136 #define DMFE_TXTH_128   0x0000          /* TX TH 128 byte */
137 #define DMFE_TXTH_256   0x4000          /* TX TH 256 byte */
138 #define DMFE_TXTH_512   0x8000          /* TX TH 512 byte */
139 #define DMFE_TXTH_1K    0xC000          /* TX TH 1K  byte */
140
141 #define DMFE_TIMER_WUT  (jiffies + HZ * 1)/* timer wakeup time : 1 second */
142 #define DMFE_TX_TIMEOUT ((3*HZ)/2)      /* tx packet time-out time 1.5 s" */
143 #define DMFE_TX_KICK    (HZ/2)  /* tx packet Kick-out time 0.5 s" */
144
145 #define dw32(reg, val)  iowrite32(val, ioaddr + (reg))
146 #define dw16(reg, val)  iowrite16(val, ioaddr + (reg))
147 #define dr32(reg)       ioread32(ioaddr + (reg))
148 #define dr16(reg)       ioread16(ioaddr + (reg))
149 #define dr8(reg)        ioread8(ioaddr + (reg))
150
151 #define DMFE_DBUG(dbug_now, msg, value)                 \
152         do {                                            \
153                 if (dmfe_debug || (dbug_now))           \
154                         pr_err("%s %lx\n",              \
155                                (msg), (long) (value));  \
156         } while (0)
157
158 #define SHOW_MEDIA_TYPE(mode)                           \
159         pr_info("Change Speed to %sMhz %s duplex\n" ,   \
160                 (mode & 1) ? "100":"10",                \
161                 (mode & 4) ? "full":"half");
162
163
164 /* CR9 definition: SROM/MII */
165 #define CR9_SROM_READ   0x4800
166 #define CR9_SRCS        0x1
167 #define CR9_SRCLK       0x2
168 #define CR9_CRDOUT      0x8
169 #define SROM_DATA_0     0x0
170 #define SROM_DATA_1     0x4
171 #define PHY_DATA_1      0x20000
172 #define PHY_DATA_0      0x00000
173 #define MDCLKH          0x10000
174
175 #define PHY_POWER_DOWN  0x800
176
177 #define SROM_V41_CODE   0x14
178
179 #define __CHK_IO_SIZE(pci_id, dev_rev) \
180  (( ((pci_id)==PCI_DM9132_ID) || ((dev_rev) >= 0x30) ) ? \
181         DM9102A_IO_SIZE: DM9102_IO_SIZE)
182
183 #define CHK_IO_SIZE(pci_dev) \
184         (__CHK_IO_SIZE(((pci_dev)->device << 16) | (pci_dev)->vendor, \
185         (pci_dev)->revision))
186
187 /* Structure/enum declaration ------------------------------- */
188 struct tx_desc {
189         __le32 tdes0, tdes1, tdes2, tdes3; /* Data for the card */
190         char *tx_buf_ptr;               /* Data for us */
191         struct tx_desc *next_tx_desc;
192 } __attribute__(( aligned(32) ));
193
194 struct rx_desc {
195         __le32 rdes0, rdes1, rdes2, rdes3; /* Data for the card */
196         struct sk_buff *rx_skb_ptr;     /* Data for us */
197         struct rx_desc *next_rx_desc;
198 } __attribute__(( aligned(32) ));
199
200 struct dmfe_board_info {
201         u32 chip_id;                    /* Chip vendor/Device ID */
202         u8 chip_revision;               /* Chip revision */
203         struct net_device *next_dev;    /* next device */
204         struct pci_dev *pdev;           /* PCI device */
205         spinlock_t lock;
206
207         void __iomem *ioaddr;           /* I/O base address */
208         u32 cr0_data;
209         u32 cr5_data;
210         u32 cr6_data;
211         u32 cr7_data;
212         u32 cr15_data;
213
214         /* pointer for memory physical address */
215         dma_addr_t buf_pool_dma_ptr;    /* Tx buffer pool memory */
216         dma_addr_t buf_pool_dma_start;  /* Tx buffer pool align dword */
217         dma_addr_t desc_pool_dma_ptr;   /* descriptor pool memory */
218         dma_addr_t first_tx_desc_dma;
219         dma_addr_t first_rx_desc_dma;
220
221         /* descriptor pointer */
222         unsigned char *buf_pool_ptr;    /* Tx buffer pool memory */
223         unsigned char *buf_pool_start;  /* Tx buffer pool align dword */
224         unsigned char *desc_pool_ptr;   /* descriptor pool memory */
225         struct tx_desc *first_tx_desc;
226         struct tx_desc *tx_insert_ptr;
227         struct tx_desc *tx_remove_ptr;
228         struct rx_desc *first_rx_desc;
229         struct rx_desc *rx_insert_ptr;
230         struct rx_desc *rx_ready_ptr;   /* packet come pointer */
231         unsigned long tx_packet_cnt;    /* transmitted packet count */
232         unsigned long tx_queue_cnt;     /* wait to send packet count */
233         unsigned long rx_avail_cnt;     /* available rx descriptor count */
234         unsigned long interval_rx_cnt;  /* rx packet count a callback time */
235
236         u16 HPNA_command;               /* For HPNA register 16 */
237         u16 HPNA_timer;                 /* For HPNA remote device check */
238         u16 dbug_cnt;
239         u16 NIC_capability;             /* NIC media capability */
240         u16 PHY_reg4;                   /* Saved Phyxcer register 4 value */
241
242         u8 HPNA_present;                /* 0:none, 1:DM9801, 2:DM9802 */
243         u8 chip_type;                   /* Keep DM9102A chip type */
244         u8 media_mode;                  /* user specify media mode */
245         u8 op_mode;                     /* real work media mode */
246         u8 phy_addr;
247         u8 wait_reset;                  /* Hardware failed, need to reset */
248         u8 dm910x_chk_mode;             /* Operating mode check */
249         u8 first_in_callback;           /* Flag to record state */
250         u8 wol_mode;                    /* user WOL settings */
251         struct timer_list timer;
252
253         /* Driver defined statistic counter */
254         unsigned long tx_fifo_underrun;
255         unsigned long tx_loss_carrier;
256         unsigned long tx_no_carrier;
257         unsigned long tx_late_collision;
258         unsigned long tx_excessive_collision;
259         unsigned long tx_jabber_timeout;
260         unsigned long reset_count;
261         unsigned long reset_cr8;
262         unsigned long reset_fatal;
263         unsigned long reset_TXtimeout;
264
265         /* NIC SROM data */
266         unsigned char srom[128];
267 };
268
269 enum dmfe_offsets {
270         DCR0 = 0x00, DCR1 = 0x08, DCR2 = 0x10, DCR3 = 0x18, DCR4 = 0x20,
271         DCR5 = 0x28, DCR6 = 0x30, DCR7 = 0x38, DCR8 = 0x40, DCR9 = 0x48,
272         DCR10 = 0x50, DCR11 = 0x58, DCR12 = 0x60, DCR13 = 0x68, DCR14 = 0x70,
273         DCR15 = 0x78
274 };
275
276 enum dmfe_CR6_bits {
277         CR6_RXSC = 0x2, CR6_PBF = 0x8, CR6_PM = 0x40, CR6_PAM = 0x80,
278         CR6_FDM = 0x200, CR6_TXSC = 0x2000, CR6_STI = 0x100000,
279         CR6_SFT = 0x200000, CR6_RXA = 0x40000000, CR6_NO_PURGE = 0x20000000
280 };
281
282 /* Global variable declaration ----------------------------- */
283 static int printed_version;
284 static const char version[] =
285         "Davicom DM9xxx net driver, version " DRV_VERSION " (" DRV_RELDATE ")";
286
287 static int dmfe_debug;
288 static unsigned char dmfe_media_mode = DMFE_AUTO;
289 static u32 dmfe_cr6_user_set;
290
291 /* For module input parameter */
292 static int debug;
293 static u32 cr6set;
294 static unsigned char mode = 8;
295 static u8 chkmode = 1;
296 static u8 HPNA_mode;            /* Default: Low Power/High Speed */
297 static u8 HPNA_rx_cmd;          /* Default: Disable Rx remote command */
298 static u8 HPNA_tx_cmd;          /* Default: Don't issue remote command */
299 static u8 HPNA_NoiseFloor;      /* Default: HPNA NoiseFloor */
300 static u8 SF_mode;              /* Special Function: 1:VLAN, 2:RX Flow Control
301                                    4: TX pause packet */
302
303
304 /* function declaration ------------------------------------- */
305 static int dmfe_open(struct net_device *);
306 static netdev_tx_t dmfe_start_xmit(struct sk_buff *, struct net_device *);
307 static int dmfe_stop(struct net_device *);
308 static void dmfe_set_filter_mode(struct net_device *);
309 static const struct ethtool_ops netdev_ethtool_ops;
310 static u16 read_srom_word(void __iomem *, int);
311 static irqreturn_t dmfe_interrupt(int , void *);
312 #ifdef CONFIG_NET_POLL_CONTROLLER
313 static void poll_dmfe (struct net_device *dev);
314 #endif
315 static void dmfe_descriptor_init(struct net_device *);
316 static void allocate_rx_buffer(struct net_device *);
317 static void update_cr6(u32, void __iomem *);
318 static void send_filter_frame(struct net_device *);
319 static void dm9132_id_table(struct net_device *);
320 static u16 dmfe_phy_read(void __iomem *, u8, u8, u32);
321 static void dmfe_phy_write(void __iomem *, u8, u8, u16, u32);
322 static void dmfe_phy_write_1bit(void __iomem *, u32);
323 static u16 dmfe_phy_read_1bit(void __iomem *);
324 static u8 dmfe_sense_speed(struct dmfe_board_info *);
325 static void dmfe_process_mode(struct dmfe_board_info *);
326 static void dmfe_timer(struct timer_list *);
327 static inline u32 cal_CRC(unsigned char *, unsigned int, u8);
328 static void dmfe_rx_packet(struct net_device *, struct dmfe_board_info *);
329 static void dmfe_free_tx_pkt(struct net_device *, struct dmfe_board_info *);
330 static void dmfe_reuse_skb(struct dmfe_board_info *, struct sk_buff *);
331 static void dmfe_dynamic_reset(struct net_device *);
332 static void dmfe_free_rxbuffer(struct dmfe_board_info *);
333 static void dmfe_init_dm910x(struct net_device *);
334 static void dmfe_parse_srom(struct dmfe_board_info *);
335 static void dmfe_program_DM9801(struct dmfe_board_info *, int);
336 static void dmfe_program_DM9802(struct dmfe_board_info *);
337 static void dmfe_HPNA_remote_cmd_chk(struct dmfe_board_info * );
338 static void dmfe_set_phyxcer(struct dmfe_board_info *);
339
340 /* DM910X network board routine ---------------------------- */
341
342 static const struct net_device_ops netdev_ops = {
343         .ndo_open               = dmfe_open,
344         .ndo_stop               = dmfe_stop,
345         .ndo_start_xmit         = dmfe_start_xmit,
346         .ndo_set_rx_mode        = dmfe_set_filter_mode,
347         .ndo_set_mac_address    = eth_mac_addr,
348         .ndo_validate_addr      = eth_validate_addr,
349 #ifdef CONFIG_NET_POLL_CONTROLLER
350         .ndo_poll_controller    = poll_dmfe,
351 #endif
352 };
353
354 /*
355  *      Search DM910X board ,allocate space and register it
356  */
357
358 static int dmfe_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
359 {
360         struct dmfe_board_info *db;     /* board information structure */
361         struct net_device *dev;
362         u32 pci_pmr;
363         int i, err;
364
365         DMFE_DBUG(0, "dmfe_init_one()", 0);
366
367         if (!printed_version++)
368                 pr_info("%s\n", version);
369
370         /*
371          *      SPARC on-board DM910x chips should be handled by the main
372          *      tulip driver, except for early DM9100s.
373          */
374 #ifdef CONFIG_TULIP_DM910X
375         if ((ent->driver_data == PCI_DM9100_ID && pdev->revision >= 0x30) ||
376             ent->driver_data == PCI_DM9102_ID) {
377                 struct device_node *dp = pci_device_to_OF_node(pdev);
378
379                 if (dp && of_get_property(dp, "local-mac-address", NULL)) {
380                         pr_info("skipping on-board DM910x (use tulip)\n");
381                         return -ENODEV;
382                 }
383         }
384 #endif
385
386         /* Init network device */
387         dev = alloc_etherdev(sizeof(*db));
388         if (dev == NULL)
389                 return -ENOMEM;
390         SET_NETDEV_DEV(dev, &pdev->dev);
391
392         if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
393                 pr_warn("32-bit PCI DMA not available\n");
394                 err = -ENODEV;
395                 goto err_out_free;
396         }
397
398         /* Enable Master/IO access, Disable memory access */
399         err = pci_enable_device(pdev);
400         if (err)
401                 goto err_out_free;
402
403         if (!pci_resource_start(pdev, 0)) {
404                 pr_err("I/O base is zero\n");
405                 err = -ENODEV;
406                 goto err_out_disable;
407         }
408
409         if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev)) ) {
410                 pr_err("Allocated I/O size too small\n");
411                 err = -ENODEV;
412                 goto err_out_disable;
413         }
414
415 #if 0   /* pci_{enable_device,set_master} sets minimum latency for us now */
416
417         /* Set Latency Timer 80h */
418         /* FIXME: setting values > 32 breaks some SiS 559x stuff.
419            Need a PCI quirk.. */
420
421         pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);
422 #endif
423
424         if (pci_request_regions(pdev, DRV_NAME)) {
425                 pr_err("Failed to request PCI regions\n");
426                 err = -ENODEV;
427                 goto err_out_disable;
428         }
429
430         /* Init system & device */
431         db = netdev_priv(dev);
432
433         /* Allocate Tx/Rx descriptor memory */
434         db->desc_pool_ptr = pci_alloc_consistent(pdev, sizeof(struct tx_desc) *
435                         DESC_ALL_CNT + 0x20, &db->desc_pool_dma_ptr);
436         if (!db->desc_pool_ptr) {
437                 err = -ENOMEM;
438                 goto err_out_res;
439         }
440
441         db->buf_pool_ptr = pci_alloc_consistent(pdev, TX_BUF_ALLOC *
442                         TX_DESC_CNT + 4, &db->buf_pool_dma_ptr);
443         if (!db->buf_pool_ptr) {
444                 err = -ENOMEM;
445                 goto err_out_free_desc;
446         }
447
448         db->first_tx_desc = (struct tx_desc *) db->desc_pool_ptr;
449         db->first_tx_desc_dma = db->desc_pool_dma_ptr;
450         db->buf_pool_start = db->buf_pool_ptr;
451         db->buf_pool_dma_start = db->buf_pool_dma_ptr;
452
453         db->chip_id = ent->driver_data;
454         /* IO type range. */
455         db->ioaddr = pci_iomap(pdev, 0, 0);
456         if (!db->ioaddr) {
457                 err = -ENOMEM;
458                 goto err_out_free_buf;
459         }
460
461         db->chip_revision = pdev->revision;
462         db->wol_mode = 0;
463
464         db->pdev = pdev;
465
466         pci_set_drvdata(pdev, dev);
467         dev->netdev_ops = &netdev_ops;
468         dev->ethtool_ops = &netdev_ethtool_ops;
469         netif_carrier_off(dev);
470         spin_lock_init(&db->lock);
471
472         pci_read_config_dword(pdev, 0x50, &pci_pmr);
473         pci_pmr &= 0x70000;
474         if ( (pci_pmr == 0x10000) && (db->chip_revision == 0x31) )
475                 db->chip_type = 1;      /* DM9102A E3 */
476         else
477                 db->chip_type = 0;
478
479         /* read 64 word srom data */
480         for (i = 0; i < 64; i++) {
481                 ((__le16 *) db->srom)[i] =
482                         cpu_to_le16(read_srom_word(db->ioaddr, i));
483         }
484
485         /* Set Node address */
486         for (i = 0; i < 6; i++)
487                 dev->dev_addr[i] = db->srom[20 + i];
488
489         err = register_netdev (dev);
490         if (err)
491                 goto err_out_unmap;
492
493         dev_info(&dev->dev, "Davicom DM%04lx at pci%s, %pM, irq %d\n",
494                  ent->driver_data >> 16,
495                  pci_name(pdev), dev->dev_addr, pdev->irq);
496
497         pci_set_master(pdev);
498
499         return 0;
500
501 err_out_unmap:
502         pci_iounmap(pdev, db->ioaddr);
503 err_out_free_buf:
504         pci_free_consistent(pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4,
505                             db->buf_pool_ptr, db->buf_pool_dma_ptr);
506 err_out_free_desc:
507         pci_free_consistent(pdev, sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20,
508                             db->desc_pool_ptr, db->desc_pool_dma_ptr);
509 err_out_res:
510         pci_release_regions(pdev);
511 err_out_disable:
512         pci_disable_device(pdev);
513 err_out_free:
514         free_netdev(dev);
515
516         return err;
517 }
518
519
520 static void dmfe_remove_one(struct pci_dev *pdev)
521 {
522         struct net_device *dev = pci_get_drvdata(pdev);
523         struct dmfe_board_info *db = netdev_priv(dev);
524
525         DMFE_DBUG(0, "dmfe_remove_one()", 0);
526
527         if (dev) {
528
529                 unregister_netdev(dev);
530                 pci_iounmap(db->pdev, db->ioaddr);
531                 pci_free_consistent(db->pdev, sizeof(struct tx_desc) *
532                                         DESC_ALL_CNT + 0x20, db->desc_pool_ptr,
533                                         db->desc_pool_dma_ptr);
534                 pci_free_consistent(db->pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4,
535                                         db->buf_pool_ptr, db->buf_pool_dma_ptr);
536                 pci_release_regions(pdev);
537                 free_netdev(dev);       /* free board information */
538         }
539
540         DMFE_DBUG(0, "dmfe_remove_one() exit", 0);
541 }
542
543
544 /*
545  *      Open the interface.
546  *      The interface is opened whenever "ifconfig" actives it.
547  */
548
549 static int dmfe_open(struct net_device *dev)
550 {
551         struct dmfe_board_info *db = netdev_priv(dev);
552         const int irq = db->pdev->irq;
553         int ret;
554
555         DMFE_DBUG(0, "dmfe_open", 0);
556
557         ret = request_irq(irq, dmfe_interrupt, IRQF_SHARED, dev->name, dev);
558         if (ret)
559                 return ret;
560
561         /* system variable init */
562         db->cr6_data = CR6_DEFAULT | dmfe_cr6_user_set;
563         db->tx_packet_cnt = 0;
564         db->tx_queue_cnt = 0;
565         db->rx_avail_cnt = 0;
566         db->wait_reset = 0;
567
568         db->first_in_callback = 0;
569         db->NIC_capability = 0xf;       /* All capability*/
570         db->PHY_reg4 = 0x1e0;
571
572         /* CR6 operation mode decision */
573         if ( !chkmode || (db->chip_id == PCI_DM9132_ID) ||
574                 (db->chip_revision >= 0x30) ) {
575                 db->cr6_data |= DMFE_TXTH_256;
576                 db->cr0_data = CR0_DEFAULT;
577                 db->dm910x_chk_mode=4;          /* Enter the normal mode */
578         } else {
579                 db->cr6_data |= CR6_SFT;        /* Store & Forward mode */
580                 db->cr0_data = 0;
581                 db->dm910x_chk_mode = 1;        /* Enter the check mode */
582         }
583
584         /* Initialize DM910X board */
585         dmfe_init_dm910x(dev);
586
587         /* Active System Interface */
588         netif_wake_queue(dev);
589
590         /* set and active a timer process */
591         timer_setup(&db->timer, dmfe_timer, 0);
592         db->timer.expires = DMFE_TIMER_WUT + HZ * 2;
593         add_timer(&db->timer);
594
595         return 0;
596 }
597
598
599 /*      Initialize DM910X board
600  *      Reset DM910X board
601  *      Initialize TX/Rx descriptor chain structure
602  *      Send the set-up frame
603  *      Enable Tx/Rx machine
604  */
605
606 static void dmfe_init_dm910x(struct net_device *dev)
607 {
608         struct dmfe_board_info *db = netdev_priv(dev);
609         void __iomem *ioaddr = db->ioaddr;
610
611         DMFE_DBUG(0, "dmfe_init_dm910x()", 0);
612
613         /* Reset DM910x MAC controller */
614         dw32(DCR0, DM910X_RESET);       /* RESET MAC */
615         udelay(100);
616         dw32(DCR0, db->cr0_data);
617         udelay(5);
618
619         /* Phy addr : DM910(A)2/DM9132/9801, phy address = 1 */
620         db->phy_addr = 1;
621
622         /* Parser SROM and media mode */
623         dmfe_parse_srom(db);
624         db->media_mode = dmfe_media_mode;
625
626         /* RESET Phyxcer Chip by GPR port bit 7 */
627         dw32(DCR12, 0x180);             /* Let bit 7 output port */
628         if (db->chip_id == PCI_DM9009_ID) {
629                 dw32(DCR12, 0x80);      /* Issue RESET signal */
630                 mdelay(300);                    /* Delay 300 ms */
631         }
632         dw32(DCR12, 0x0);       /* Clear RESET signal */
633
634         /* Process Phyxcer Media Mode */
635         if ( !(db->media_mode & 0x10) ) /* Force 1M mode */
636                 dmfe_set_phyxcer(db);
637
638         /* Media Mode Process */
639         if ( !(db->media_mode & DMFE_AUTO) )
640                 db->op_mode = db->media_mode;   /* Force Mode */
641
642         /* Initialize Transmit/Receive descriptor and CR3/4 */
643         dmfe_descriptor_init(dev);
644
645         /* Init CR6 to program DM910x operation */
646         update_cr6(db->cr6_data, ioaddr);
647
648         /* Send setup frame */
649         if (db->chip_id == PCI_DM9132_ID)
650                 dm9132_id_table(dev);   /* DM9132 */
651         else
652                 send_filter_frame(dev); /* DM9102/DM9102A */
653
654         /* Init CR7, interrupt active bit */
655         db->cr7_data = CR7_DEFAULT;
656         dw32(DCR7, db->cr7_data);
657
658         /* Init CR15, Tx jabber and Rx watchdog timer */
659         dw32(DCR15, db->cr15_data);
660
661         /* Enable DM910X Tx/Rx function */
662         db->cr6_data |= CR6_RXSC | CR6_TXSC | 0x40000;
663         update_cr6(db->cr6_data, ioaddr);
664 }
665
666
667 /*
668  *      Hardware start transmission.
669  *      Send a packet to media from the upper layer.
670  */
671
672 static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
673                                          struct net_device *dev)
674 {
675         struct dmfe_board_info *db = netdev_priv(dev);
676         void __iomem *ioaddr = db->ioaddr;
677         struct tx_desc *txptr;
678         unsigned long flags;
679
680         DMFE_DBUG(0, "dmfe_start_xmit", 0);
681
682         /* Too large packet check */
683         if (skb->len > MAX_PACKET_SIZE) {
684                 pr_err("big packet = %d\n", (u16)skb->len);
685                 dev_kfree_skb_any(skb);
686                 return NETDEV_TX_OK;
687         }
688
689         /* Resource flag check */
690         netif_stop_queue(dev);
691
692         spin_lock_irqsave(&db->lock, flags);
693
694         /* No Tx resource check, it never happen nromally */
695         if (db->tx_queue_cnt >= TX_FREE_DESC_CNT) {
696                 spin_unlock_irqrestore(&db->lock, flags);
697                 pr_err("No Tx resource %ld\n", db->tx_queue_cnt);
698                 return NETDEV_TX_BUSY;
699         }
700
701         /* Disable NIC interrupt */
702         dw32(DCR7, 0);
703
704         /* transmit this packet */
705         txptr = db->tx_insert_ptr;
706         skb_copy_from_linear_data(skb, txptr->tx_buf_ptr, skb->len);
707         txptr->tdes1 = cpu_to_le32(0xe1000000 | skb->len);
708
709         /* Point to next transmit free descriptor */
710         db->tx_insert_ptr = txptr->next_tx_desc;
711
712         /* Transmit Packet Process */
713         if ( (!db->tx_queue_cnt) && (db->tx_packet_cnt < TX_MAX_SEND_CNT) ) {
714                 txptr->tdes0 = cpu_to_le32(0x80000000); /* Set owner bit */
715                 db->tx_packet_cnt++;                    /* Ready to send */
716                 dw32(DCR1, 0x1);                        /* Issue Tx polling */
717                 netif_trans_update(dev);                /* saved time stamp */
718         } else {
719                 db->tx_queue_cnt++;                     /* queue TX packet */
720                 dw32(DCR1, 0x1);                        /* Issue Tx polling */
721         }
722
723         /* Tx resource check */
724         if ( db->tx_queue_cnt < TX_FREE_DESC_CNT )
725                 netif_wake_queue(dev);
726
727         /* Restore CR7 to enable interrupt */
728         spin_unlock_irqrestore(&db->lock, flags);
729         dw32(DCR7, db->cr7_data);
730
731         /* free this SKB */
732         dev_consume_skb_any(skb);
733
734         return NETDEV_TX_OK;
735 }
736
737
738 /*
739  *      Stop the interface.
740  *      The interface is stopped when it is brought.
741  */
742
743 static int dmfe_stop(struct net_device *dev)
744 {
745         struct dmfe_board_info *db = netdev_priv(dev);
746         void __iomem *ioaddr = db->ioaddr;
747
748         DMFE_DBUG(0, "dmfe_stop", 0);
749
750         /* disable system */
751         netif_stop_queue(dev);
752
753         /* deleted timer */
754         del_timer_sync(&db->timer);
755
756         /* Reset & stop DM910X board */
757         dw32(DCR0, DM910X_RESET);
758         udelay(100);
759         dmfe_phy_write(ioaddr, db->phy_addr, 0, 0x8000, db->chip_id);
760
761         /* free interrupt */
762         free_irq(db->pdev->irq, dev);
763
764         /* free allocated rx buffer */
765         dmfe_free_rxbuffer(db);
766
767 #if 0
768         /* show statistic counter */
769         printk("FU:%lx EC:%lx LC:%lx NC:%lx LOC:%lx TXJT:%lx RESET:%lx RCR8:%lx FAL:%lx TT:%lx\n",
770                db->tx_fifo_underrun, db->tx_excessive_collision,
771                db->tx_late_collision, db->tx_no_carrier, db->tx_loss_carrier,
772                db->tx_jabber_timeout, db->reset_count, db->reset_cr8,
773                db->reset_fatal, db->reset_TXtimeout);
774 #endif
775
776         return 0;
777 }
778
779
780 /*
781  *      DM9102 insterrupt handler
782  *      receive the packet to upper layer, free the transmitted packet
783  */
784
785 static irqreturn_t dmfe_interrupt(int irq, void *dev_id)
786 {
787         struct net_device *dev = dev_id;
788         struct dmfe_board_info *db = netdev_priv(dev);
789         void __iomem *ioaddr = db->ioaddr;
790         unsigned long flags;
791
792         DMFE_DBUG(0, "dmfe_interrupt()", 0);
793
794         spin_lock_irqsave(&db->lock, flags);
795
796         /* Got DM910X status */
797         db->cr5_data = dr32(DCR5);
798         dw32(DCR5, db->cr5_data);
799         if ( !(db->cr5_data & 0xc1) ) {
800                 spin_unlock_irqrestore(&db->lock, flags);
801                 return IRQ_HANDLED;
802         }
803
804         /* Disable all interrupt in CR7 to solve the interrupt edge problem */
805         dw32(DCR7, 0);
806
807         /* Check system status */
808         if (db->cr5_data & 0x2000) {
809                 /* system bus error happen */
810                 DMFE_DBUG(1, "System bus error happen. CR5=", db->cr5_data);
811                 db->reset_fatal++;
812                 db->wait_reset = 1;     /* Need to RESET */
813                 spin_unlock_irqrestore(&db->lock, flags);
814                 return IRQ_HANDLED;
815         }
816
817          /* Received the coming packet */
818         if ( (db->cr5_data & 0x40) && db->rx_avail_cnt )
819                 dmfe_rx_packet(dev, db);
820
821         /* reallocate rx descriptor buffer */
822         if (db->rx_avail_cnt<RX_DESC_CNT)
823                 allocate_rx_buffer(dev);
824
825         /* Free the transmitted descriptor */
826         if ( db->cr5_data & 0x01)
827                 dmfe_free_tx_pkt(dev, db);
828
829         /* Mode Check */
830         if (db->dm910x_chk_mode & 0x2) {
831                 db->dm910x_chk_mode = 0x4;
832                 db->cr6_data |= 0x100;
833                 update_cr6(db->cr6_data, ioaddr);
834         }
835
836         /* Restore CR7 to enable interrupt mask */
837         dw32(DCR7, db->cr7_data);
838
839         spin_unlock_irqrestore(&db->lock, flags);
840         return IRQ_HANDLED;
841 }
842
843
844 #ifdef CONFIG_NET_POLL_CONTROLLER
845 /*
846  * Polling 'interrupt' - used by things like netconsole to send skbs
847  * without having to re-enable interrupts. It's not called while
848  * the interrupt routine is executing.
849  */
850
851 static void poll_dmfe (struct net_device *dev)
852 {
853         struct dmfe_board_info *db = netdev_priv(dev);
854         const int irq = db->pdev->irq;
855
856         /* disable_irq here is not very nice, but with the lockless
857            interrupt handler we have no other choice. */
858         disable_irq(irq);
859         dmfe_interrupt (irq, dev);
860         enable_irq(irq);
861 }
862 #endif
863
864 /*
865  *      Free TX resource after TX complete
866  */
867
868 static void dmfe_free_tx_pkt(struct net_device *dev, struct dmfe_board_info *db)
869 {
870         struct tx_desc *txptr;
871         void __iomem *ioaddr = db->ioaddr;
872         u32 tdes0;
873
874         txptr = db->tx_remove_ptr;
875         while(db->tx_packet_cnt) {
876                 tdes0 = le32_to_cpu(txptr->tdes0);
877                 if (tdes0 & 0x80000000)
878                         break;
879
880                 /* A packet sent completed */
881                 db->tx_packet_cnt--;
882                 dev->stats.tx_packets++;
883
884                 /* Transmit statistic counter */
885                 if ( tdes0 != 0x7fffffff ) {
886                         dev->stats.collisions += (tdes0 >> 3) & 0xf;
887                         dev->stats.tx_bytes += le32_to_cpu(txptr->tdes1) & 0x7ff;
888                         if (tdes0 & TDES0_ERR_MASK) {
889                                 dev->stats.tx_errors++;
890
891                                 if (tdes0 & 0x0002) {   /* UnderRun */
892                                         db->tx_fifo_underrun++;
893                                         if ( !(db->cr6_data & CR6_SFT) ) {
894                                                 db->cr6_data = db->cr6_data | CR6_SFT;
895                                                 update_cr6(db->cr6_data, ioaddr);
896                                         }
897                                 }
898                                 if (tdes0 & 0x0100)
899                                         db->tx_excessive_collision++;
900                                 if (tdes0 & 0x0200)
901                                         db->tx_late_collision++;
902                                 if (tdes0 & 0x0400)
903                                         db->tx_no_carrier++;
904                                 if (tdes0 & 0x0800)
905                                         db->tx_loss_carrier++;
906                                 if (tdes0 & 0x4000)
907                                         db->tx_jabber_timeout++;
908                         }
909                 }
910
911                 txptr = txptr->next_tx_desc;
912         }/* End of while */
913
914         /* Update TX remove pointer to next */
915         db->tx_remove_ptr = txptr;
916
917         /* Send the Tx packet in queue */
918         if ( (db->tx_packet_cnt < TX_MAX_SEND_CNT) && db->tx_queue_cnt ) {
919                 txptr->tdes0 = cpu_to_le32(0x80000000); /* Set owner bit */
920                 db->tx_packet_cnt++;                    /* Ready to send */
921                 db->tx_queue_cnt--;
922                 dw32(DCR1, 0x1);                        /* Issue Tx polling */
923                 netif_trans_update(dev);                /* saved time stamp */
924         }
925
926         /* Resource available check */
927         if ( db->tx_queue_cnt < TX_WAKE_DESC_CNT )
928                 netif_wake_queue(dev);  /* Active upper layer, send again */
929 }
930
931
932 /*
933  *      Calculate the CRC valude of the Rx packet
934  *      flag =  1 : return the reverse CRC (for the received packet CRC)
935  *              0 : return the normal CRC (for Hash Table index)
936  */
937
938 static inline u32 cal_CRC(unsigned char * Data, unsigned int Len, u8 flag)
939 {
940         u32 crc = crc32(~0, Data, Len);
941         if (flag) crc = ~crc;
942         return crc;
943 }
944
945
946 /*
947  *      Receive the come packet and pass to upper layer
948  */
949
950 static void dmfe_rx_packet(struct net_device *dev, struct dmfe_board_info *db)
951 {
952         struct rx_desc *rxptr;
953         struct sk_buff *skb, *newskb;
954         int rxlen;
955         u32 rdes0;
956
957         rxptr = db->rx_ready_ptr;
958
959         while(db->rx_avail_cnt) {
960                 rdes0 = le32_to_cpu(rxptr->rdes0);
961                 if (rdes0 & 0x80000000) /* packet owner check */
962                         break;
963
964                 db->rx_avail_cnt--;
965                 db->interval_rx_cnt++;
966
967                 pci_unmap_single(db->pdev, le32_to_cpu(rxptr->rdes2),
968                                  RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE);
969
970                 if ( (rdes0 & 0x300) != 0x300) {
971                         /* A packet without First/Last flag */
972                         /* reuse this SKB */
973                         DMFE_DBUG(0, "Reuse SK buffer, rdes0", rdes0);
974                         dmfe_reuse_skb(db, rxptr->rx_skb_ptr);
975                 } else {
976                         /* A packet with First/Last flag */
977                         rxlen = ( (rdes0 >> 16) & 0x3fff) - 4;
978
979                         /* error summary bit check */
980                         if (rdes0 & 0x8000) {
981                                 /* This is a error packet */
982                                 dev->stats.rx_errors++;
983                                 if (rdes0 & 1)
984                                         dev->stats.rx_fifo_errors++;
985                                 if (rdes0 & 2)
986                                         dev->stats.rx_crc_errors++;
987                                 if (rdes0 & 0x80)
988                                         dev->stats.rx_length_errors++;
989                         }
990
991                         if ( !(rdes0 & 0x8000) ||
992                                 ((db->cr6_data & CR6_PM) && (rxlen>6)) ) {
993                                 skb = rxptr->rx_skb_ptr;
994
995                                 /* Received Packet CRC check need or not */
996                                 if ( (db->dm910x_chk_mode & 1) &&
997                                         (cal_CRC(skb->data, rxlen, 1) !=
998                                         (*(u32 *) (skb->data+rxlen) ))) { /* FIXME (?) */
999                                         /* Found a error received packet */
1000                                         dmfe_reuse_skb(db, rxptr->rx_skb_ptr);
1001                                         db->dm910x_chk_mode = 3;
1002                                 } else {
1003                                         /* Good packet, send to upper layer */
1004                                         /* Shorst packet used new SKB */
1005                                         if ((rxlen < RX_COPY_SIZE) &&
1006                                                 ((newskb = netdev_alloc_skb(dev, rxlen + 2))
1007                                                 != NULL)) {
1008
1009                                                 skb = newskb;
1010                                                 /* size less than COPY_SIZE, allocate a rxlen SKB */
1011                                                 skb_reserve(skb, 2); /* 16byte align */
1012                                                 skb_copy_from_linear_data(rxptr->rx_skb_ptr,
1013                                                           skb_put(skb, rxlen),
1014                                                                           rxlen);
1015                                                 dmfe_reuse_skb(db, rxptr->rx_skb_ptr);
1016                                         } else
1017                                                 skb_put(skb, rxlen);
1018
1019                                         skb->protocol = eth_type_trans(skb, dev);
1020                                         netif_rx(skb);
1021                                         dev->stats.rx_packets++;
1022                                         dev->stats.rx_bytes += rxlen;
1023                                 }
1024                         } else {
1025                                 /* Reuse SKB buffer when the packet is error */
1026                                 DMFE_DBUG(0, "Reuse SK buffer, rdes0", rdes0);
1027                                 dmfe_reuse_skb(db, rxptr->rx_skb_ptr);
1028                         }
1029                 }
1030
1031                 rxptr = rxptr->next_rx_desc;
1032         }
1033
1034         db->rx_ready_ptr = rxptr;
1035 }
1036
1037 /*
1038  * Set DM910X multicast address
1039  */
1040
1041 static void dmfe_set_filter_mode(struct net_device *dev)
1042 {
1043         struct dmfe_board_info *db = netdev_priv(dev);
1044         unsigned long flags;
1045         int mc_count = netdev_mc_count(dev);
1046
1047         DMFE_DBUG(0, "dmfe_set_filter_mode()", 0);
1048         spin_lock_irqsave(&db->lock, flags);
1049
1050         if (dev->flags & IFF_PROMISC) {
1051                 DMFE_DBUG(0, "Enable PROM Mode", 0);
1052                 db->cr6_data |= CR6_PM | CR6_PBF;
1053                 update_cr6(db->cr6_data, db->ioaddr);
1054                 spin_unlock_irqrestore(&db->lock, flags);
1055                 return;
1056         }
1057
1058         if (dev->flags & IFF_ALLMULTI || mc_count > DMFE_MAX_MULTICAST) {
1059                 DMFE_DBUG(0, "Pass all multicast address", mc_count);
1060                 db->cr6_data &= ~(CR6_PM | CR6_PBF);
1061                 db->cr6_data |= CR6_PAM;
1062                 spin_unlock_irqrestore(&db->lock, flags);
1063                 return;
1064         }
1065
1066         DMFE_DBUG(0, "Set multicast address", mc_count);
1067         if (db->chip_id == PCI_DM9132_ID)
1068                 dm9132_id_table(dev);   /* DM9132 */
1069         else
1070                 send_filter_frame(dev); /* DM9102/DM9102A */
1071         spin_unlock_irqrestore(&db->lock, flags);
1072 }
1073
1074 /*
1075  *      Ethtool interace
1076  */
1077
1078 static void dmfe_ethtool_get_drvinfo(struct net_device *dev,
1079                                struct ethtool_drvinfo *info)
1080 {
1081         struct dmfe_board_info *np = netdev_priv(dev);
1082
1083         strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1084         strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1085         strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
1086 }
1087
1088 static int dmfe_ethtool_set_wol(struct net_device *dev,
1089                                 struct ethtool_wolinfo *wolinfo)
1090 {
1091         struct dmfe_board_info *db = netdev_priv(dev);
1092
1093         if (wolinfo->wolopts & (WAKE_UCAST | WAKE_MCAST | WAKE_BCAST |
1094                                 WAKE_ARP | WAKE_MAGICSECURE))
1095                    return -EOPNOTSUPP;
1096
1097         db->wol_mode = wolinfo->wolopts;
1098         return 0;
1099 }
1100
1101 static void dmfe_ethtool_get_wol(struct net_device *dev,
1102                                  struct ethtool_wolinfo *wolinfo)
1103 {
1104         struct dmfe_board_info *db = netdev_priv(dev);
1105
1106         wolinfo->supported = WAKE_PHY | WAKE_MAGIC;
1107         wolinfo->wolopts = db->wol_mode;
1108 }
1109
1110
1111 static const struct ethtool_ops netdev_ethtool_ops = {
1112         .get_drvinfo            = dmfe_ethtool_get_drvinfo,
1113         .get_link               = ethtool_op_get_link,
1114         .set_wol                = dmfe_ethtool_set_wol,
1115         .get_wol                = dmfe_ethtool_get_wol,
1116 };
1117
1118 /*
1119  *      A periodic timer routine
1120  *      Dynamic media sense, allocate Rx buffer...
1121  */
1122
1123 static void dmfe_timer(struct timer_list *t)
1124 {
1125         struct dmfe_board_info *db = from_timer(db, t, timer);
1126         struct net_device *dev = pci_get_drvdata(db->pdev);
1127         void __iomem *ioaddr = db->ioaddr;
1128         u32 tmp_cr8;
1129         unsigned char tmp_cr12;
1130         unsigned long flags;
1131
1132         int link_ok, link_ok_phy;
1133
1134         DMFE_DBUG(0, "dmfe_timer()", 0);
1135         spin_lock_irqsave(&db->lock, flags);
1136
1137         /* Media mode process when Link OK before enter this route */
1138         if (db->first_in_callback == 0) {
1139                 db->first_in_callback = 1;
1140                 if (db->chip_type && (db->chip_id==PCI_DM9102_ID)) {
1141                         db->cr6_data &= ~0x40000;
1142                         update_cr6(db->cr6_data, ioaddr);
1143                         dmfe_phy_write(ioaddr, db->phy_addr, 0, 0x1000, db->chip_id);
1144                         db->cr6_data |= 0x40000;
1145                         update_cr6(db->cr6_data, ioaddr);
1146                         db->timer.expires = DMFE_TIMER_WUT + HZ * 2;
1147                         add_timer(&db->timer);
1148                         spin_unlock_irqrestore(&db->lock, flags);
1149                         return;
1150                 }
1151         }
1152
1153
1154         /* Operating Mode Check */
1155         if ( (db->dm910x_chk_mode & 0x1) &&
1156                 (dev->stats.rx_packets > MAX_CHECK_PACKET) )
1157                 db->dm910x_chk_mode = 0x4;
1158
1159         /* Dynamic reset DM910X : system error or transmit time-out */
1160         tmp_cr8 = dr32(DCR8);
1161         if ( (db->interval_rx_cnt==0) && (tmp_cr8) ) {
1162                 db->reset_cr8++;
1163                 db->wait_reset = 1;
1164         }
1165         db->interval_rx_cnt = 0;
1166
1167         /* TX polling kick monitor */
1168         if ( db->tx_packet_cnt &&
1169              time_after(jiffies, dev_trans_start(dev) + DMFE_TX_KICK) ) {
1170                 dw32(DCR1, 0x1);   /* Tx polling again */
1171
1172                 /* TX Timeout */
1173                 if (time_after(jiffies, dev_trans_start(dev) + DMFE_TX_TIMEOUT) ) {
1174                         db->reset_TXtimeout++;
1175                         db->wait_reset = 1;
1176                         dev_warn(&dev->dev, "Tx timeout - resetting\n");
1177                 }
1178         }
1179
1180         if (db->wait_reset) {
1181                 DMFE_DBUG(0, "Dynamic Reset device", db->tx_packet_cnt);
1182                 db->reset_count++;
1183                 dmfe_dynamic_reset(dev);
1184                 db->first_in_callback = 0;
1185                 db->timer.expires = DMFE_TIMER_WUT;
1186                 add_timer(&db->timer);
1187                 spin_unlock_irqrestore(&db->lock, flags);
1188                 return;
1189         }
1190
1191         /* Link status check, Dynamic media type change */
1192         if (db->chip_id == PCI_DM9132_ID)
1193                 tmp_cr12 = dr8(DCR9 + 3);       /* DM9132 */
1194         else
1195                 tmp_cr12 = dr8(DCR12);          /* DM9102/DM9102A */
1196
1197         if ( ((db->chip_id == PCI_DM9102_ID) &&
1198                 (db->chip_revision == 0x30)) ||
1199                 ((db->chip_id == PCI_DM9132_ID) &&
1200                 (db->chip_revision == 0x10)) ) {
1201                 /* DM9102A Chip */
1202                 if (tmp_cr12 & 2)
1203                         link_ok = 0;
1204                 else
1205                         link_ok = 1;
1206         }
1207         else
1208                 /*0x43 is used instead of 0x3 because bit 6 should represent
1209                         link status of external PHY */
1210                 link_ok = (tmp_cr12 & 0x43) ? 1 : 0;
1211
1212
1213         /* If chip reports that link is failed it could be because external
1214                 PHY link status pin is not connected correctly to chip
1215                 To be sure ask PHY too.
1216         */
1217
1218         /* need a dummy read because of PHY's register latch*/
1219         dmfe_phy_read (db->ioaddr, db->phy_addr, 1, db->chip_id);
1220         link_ok_phy = (dmfe_phy_read (db->ioaddr,
1221                                       db->phy_addr, 1, db->chip_id) & 0x4) ? 1 : 0;
1222
1223         if (link_ok_phy != link_ok) {
1224                 DMFE_DBUG (0, "PHY and chip report different link status", 0);
1225                 link_ok = link_ok | link_ok_phy;
1226         }
1227
1228         if ( !link_ok && netif_carrier_ok(dev)) {
1229                 /* Link Failed */
1230                 DMFE_DBUG(0, "Link Failed", tmp_cr12);
1231                 netif_carrier_off(dev);
1232
1233                 /* For Force 10/100M Half/Full mode: Enable Auto-Nego mode */
1234                 /* AUTO or force 1M Homerun/Longrun don't need */
1235                 if ( !(db->media_mode & 0x38) )
1236                         dmfe_phy_write(db->ioaddr, db->phy_addr,
1237                                        0, 0x1000, db->chip_id);
1238
1239                 /* AUTO mode, if INT phyxcer link failed, select EXT device */
1240                 if (db->media_mode & DMFE_AUTO) {
1241                         /* 10/100M link failed, used 1M Home-Net */
1242                         db->cr6_data|=0x00040000;       /* bit18=1, MII */
1243                         db->cr6_data&=~0x00000200;      /* bit9=0, HD mode */
1244                         update_cr6(db->cr6_data, ioaddr);
1245                 }
1246         } else if (!netif_carrier_ok(dev)) {
1247
1248                 DMFE_DBUG(0, "Link link OK", tmp_cr12);
1249
1250                 /* Auto Sense Speed */
1251                 if ( !(db->media_mode & DMFE_AUTO) || !dmfe_sense_speed(db)) {
1252                         netif_carrier_on(dev);
1253                         SHOW_MEDIA_TYPE(db->op_mode);
1254                 }
1255
1256                 dmfe_process_mode(db);
1257         }
1258
1259         /* HPNA remote command check */
1260         if (db->HPNA_command & 0xf00) {
1261                 db->HPNA_timer--;
1262                 if (!db->HPNA_timer)
1263                         dmfe_HPNA_remote_cmd_chk(db);
1264         }
1265
1266         /* Timer active again */
1267         db->timer.expires = DMFE_TIMER_WUT;
1268         add_timer(&db->timer);
1269         spin_unlock_irqrestore(&db->lock, flags);
1270 }
1271
1272
1273 /*
1274  *      Dynamic reset the DM910X board
1275  *      Stop DM910X board
1276  *      Free Tx/Rx allocated memory
1277  *      Reset DM910X board
1278  *      Re-initialize DM910X board
1279  */
1280
1281 static void dmfe_dynamic_reset(struct net_device *dev)
1282 {
1283         struct dmfe_board_info *db = netdev_priv(dev);
1284         void __iomem *ioaddr = db->ioaddr;
1285
1286         DMFE_DBUG(0, "dmfe_dynamic_reset()", 0);
1287
1288         /* Sopt MAC controller */
1289         db->cr6_data &= ~(CR6_RXSC | CR6_TXSC); /* Disable Tx/Rx */
1290         update_cr6(db->cr6_data, ioaddr);
1291         dw32(DCR7, 0);                          /* Disable Interrupt */
1292         dw32(DCR5, dr32(DCR5));
1293
1294         /* Disable upper layer interface */
1295         netif_stop_queue(dev);
1296
1297         /* Free Rx Allocate buffer */
1298         dmfe_free_rxbuffer(db);
1299
1300         /* system variable init */
1301         db->tx_packet_cnt = 0;
1302         db->tx_queue_cnt = 0;
1303         db->rx_avail_cnt = 0;
1304         netif_carrier_off(dev);
1305         db->wait_reset = 0;
1306
1307         /* Re-initialize DM910X board */
1308         dmfe_init_dm910x(dev);
1309
1310         /* Restart upper layer interface */
1311         netif_wake_queue(dev);
1312 }
1313
1314
1315 /*
1316  *      free all allocated rx buffer
1317  */
1318
1319 static void dmfe_free_rxbuffer(struct dmfe_board_info * db)
1320 {
1321         DMFE_DBUG(0, "dmfe_free_rxbuffer()", 0);
1322
1323         /* free allocated rx buffer */
1324         while (db->rx_avail_cnt) {
1325                 dev_kfree_skb(db->rx_ready_ptr->rx_skb_ptr);
1326                 db->rx_ready_ptr = db->rx_ready_ptr->next_rx_desc;
1327                 db->rx_avail_cnt--;
1328         }
1329 }
1330
1331
1332 /*
1333  *      Reuse the SK buffer
1334  */
1335
1336 static void dmfe_reuse_skb(struct dmfe_board_info *db, struct sk_buff * skb)
1337 {
1338         struct rx_desc *rxptr = db->rx_insert_ptr;
1339
1340         if (!(rxptr->rdes0 & cpu_to_le32(0x80000000))) {
1341                 rxptr->rx_skb_ptr = skb;
1342                 rxptr->rdes2 = cpu_to_le32( pci_map_single(db->pdev,
1343                             skb->data, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) );
1344                 wmb();
1345                 rxptr->rdes0 = cpu_to_le32(0x80000000);
1346                 db->rx_avail_cnt++;
1347                 db->rx_insert_ptr = rxptr->next_rx_desc;
1348         } else
1349                 DMFE_DBUG(0, "SK Buffer reuse method error", db->rx_avail_cnt);
1350 }
1351
1352
1353 /*
1354  *      Initialize transmit/Receive descriptor
1355  *      Using Chain structure, and allocate Tx/Rx buffer
1356  */
1357
1358 static void dmfe_descriptor_init(struct net_device *dev)
1359 {
1360         struct dmfe_board_info *db = netdev_priv(dev);
1361         void __iomem *ioaddr = db->ioaddr;
1362         struct tx_desc *tmp_tx;
1363         struct rx_desc *tmp_rx;
1364         unsigned char *tmp_buf;
1365         dma_addr_t tmp_tx_dma, tmp_rx_dma;
1366         dma_addr_t tmp_buf_dma;
1367         int i;
1368
1369         DMFE_DBUG(0, "dmfe_descriptor_init()", 0);
1370
1371         /* tx descriptor start pointer */
1372         db->tx_insert_ptr = db->first_tx_desc;
1373         db->tx_remove_ptr = db->first_tx_desc;
1374         dw32(DCR4, db->first_tx_desc_dma);     /* TX DESC address */
1375
1376         /* rx descriptor start pointer */
1377         db->first_rx_desc = (void *)db->first_tx_desc +
1378                         sizeof(struct tx_desc) * TX_DESC_CNT;
1379
1380         db->first_rx_desc_dma =  db->first_tx_desc_dma +
1381                         sizeof(struct tx_desc) * TX_DESC_CNT;
1382         db->rx_insert_ptr = db->first_rx_desc;
1383         db->rx_ready_ptr = db->first_rx_desc;
1384         dw32(DCR3, db->first_rx_desc_dma);              /* RX DESC address */
1385
1386         /* Init Transmit chain */
1387         tmp_buf = db->buf_pool_start;
1388         tmp_buf_dma = db->buf_pool_dma_start;
1389         tmp_tx_dma = db->first_tx_desc_dma;
1390         for (tmp_tx = db->first_tx_desc, i = 0; i < TX_DESC_CNT; i++, tmp_tx++) {
1391                 tmp_tx->tx_buf_ptr = tmp_buf;
1392                 tmp_tx->tdes0 = cpu_to_le32(0);
1393                 tmp_tx->tdes1 = cpu_to_le32(0x81000000);        /* IC, chain */
1394                 tmp_tx->tdes2 = cpu_to_le32(tmp_buf_dma);
1395                 tmp_tx_dma += sizeof(struct tx_desc);
1396                 tmp_tx->tdes3 = cpu_to_le32(tmp_tx_dma);
1397                 tmp_tx->next_tx_desc = tmp_tx + 1;
1398                 tmp_buf = tmp_buf + TX_BUF_ALLOC;
1399                 tmp_buf_dma = tmp_buf_dma + TX_BUF_ALLOC;
1400         }
1401         (--tmp_tx)->tdes3 = cpu_to_le32(db->first_tx_desc_dma);
1402         tmp_tx->next_tx_desc = db->first_tx_desc;
1403
1404          /* Init Receive descriptor chain */
1405         tmp_rx_dma=db->first_rx_desc_dma;
1406         for (tmp_rx = db->first_rx_desc, i = 0; i < RX_DESC_CNT; i++, tmp_rx++) {
1407                 tmp_rx->rdes0 = cpu_to_le32(0);
1408                 tmp_rx->rdes1 = cpu_to_le32(0x01000600);
1409                 tmp_rx_dma += sizeof(struct rx_desc);
1410                 tmp_rx->rdes3 = cpu_to_le32(tmp_rx_dma);
1411                 tmp_rx->next_rx_desc = tmp_rx + 1;
1412         }
1413         (--tmp_rx)->rdes3 = cpu_to_le32(db->first_rx_desc_dma);
1414         tmp_rx->next_rx_desc = db->first_rx_desc;
1415
1416         /* pre-allocate Rx buffer */
1417         allocate_rx_buffer(dev);
1418 }
1419
1420
1421 /*
1422  *      Update CR6 value
1423  *      Firstly stop DM910X , then written value and start
1424  */
1425
1426 static void update_cr6(u32 cr6_data, void __iomem *ioaddr)
1427 {
1428         u32 cr6_tmp;
1429
1430         cr6_tmp = cr6_data & ~0x2002;           /* stop Tx/Rx */
1431         dw32(DCR6, cr6_tmp);
1432         udelay(5);
1433         dw32(DCR6, cr6_data);
1434         udelay(5);
1435 }
1436
1437
1438 /*
1439  *      Send a setup frame for DM9132
1440  *      This setup frame initialize DM910X address filter mode
1441 */
1442
1443 static void dm9132_id_table(struct net_device *dev)
1444 {
1445         struct dmfe_board_info *db = netdev_priv(dev);
1446         void __iomem *ioaddr = db->ioaddr + 0xc0;
1447         u16 *addrptr = (u16 *)dev->dev_addr;
1448         struct netdev_hw_addr *ha;
1449         u16 i, hash_table[4];
1450
1451         /* Node address */
1452         for (i = 0; i < 3; i++) {
1453                 dw16(0, addrptr[i]);
1454                 ioaddr += 4;
1455         }
1456
1457         /* Clear Hash Table */
1458         memset(hash_table, 0, sizeof(hash_table));
1459
1460         /* broadcast address */
1461         hash_table[3] = 0x8000;
1462
1463         /* the multicast address in Hash Table : 64 bits */
1464         netdev_for_each_mc_addr(ha, dev) {
1465                 u32 hash_val = cal_CRC((char *)ha->addr, 6, 0) & 0x3f;
1466
1467                 hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16);
1468         }
1469
1470         /* Write the hash table to MAC MD table */
1471         for (i = 0; i < 4; i++, ioaddr += 4)
1472                 dw16(0, hash_table[i]);
1473 }
1474
1475
1476 /*
1477  *      Send a setup frame for DM9102/DM9102A
1478  *      This setup frame initialize DM910X address filter mode
1479  */
1480
1481 static void send_filter_frame(struct net_device *dev)
1482 {
1483         struct dmfe_board_info *db = netdev_priv(dev);
1484         struct netdev_hw_addr *ha;
1485         struct tx_desc *txptr;
1486         u16 * addrptr;
1487         u32 * suptr;
1488         int i;
1489
1490         DMFE_DBUG(0, "send_filter_frame()", 0);
1491
1492         txptr = db->tx_insert_ptr;
1493         suptr = (u32 *) txptr->tx_buf_ptr;
1494
1495         /* Node address */
1496         addrptr = (u16 *) dev->dev_addr;
1497         *suptr++ = addrptr[0];
1498         *suptr++ = addrptr[1];
1499         *suptr++ = addrptr[2];
1500
1501         /* broadcast address */
1502         *suptr++ = 0xffff;
1503         *suptr++ = 0xffff;
1504         *suptr++ = 0xffff;
1505
1506         /* fit the multicast address */
1507         netdev_for_each_mc_addr(ha, dev) {
1508                 addrptr = (u16 *) ha->addr;
1509                 *suptr++ = addrptr[0];
1510                 *suptr++ = addrptr[1];
1511                 *suptr++ = addrptr[2];
1512         }
1513
1514         for (i = netdev_mc_count(dev); i < 14; i++) {
1515                 *suptr++ = 0xffff;
1516                 *suptr++ = 0xffff;
1517                 *suptr++ = 0xffff;
1518         }
1519
1520         /* prepare the setup frame */
1521         db->tx_insert_ptr = txptr->next_tx_desc;
1522         txptr->tdes1 = cpu_to_le32(0x890000c0);
1523
1524         /* Resource Check and Send the setup packet */
1525         if (!db->tx_packet_cnt) {
1526                 void __iomem *ioaddr = db->ioaddr;
1527
1528                 /* Resource Empty */
1529                 db->tx_packet_cnt++;
1530                 txptr->tdes0 = cpu_to_le32(0x80000000);
1531                 update_cr6(db->cr6_data | 0x2000, ioaddr);
1532                 dw32(DCR1, 0x1);        /* Issue Tx polling */
1533                 update_cr6(db->cr6_data, ioaddr);
1534                 netif_trans_update(dev);
1535         } else
1536                 db->tx_queue_cnt++;     /* Put in TX queue */
1537 }
1538
1539
1540 /*
1541  *      Allocate rx buffer,
1542  *      As possible as allocate maxiumn Rx buffer
1543  */
1544
1545 static void allocate_rx_buffer(struct net_device *dev)
1546 {
1547         struct dmfe_board_info *db = netdev_priv(dev);
1548         struct rx_desc *rxptr;
1549         struct sk_buff *skb;
1550
1551         rxptr = db->rx_insert_ptr;
1552
1553         while(db->rx_avail_cnt < RX_DESC_CNT) {
1554                 if ( ( skb = netdev_alloc_skb(dev, RX_ALLOC_SIZE) ) == NULL )
1555                         break;
1556                 rxptr->rx_skb_ptr = skb; /* FIXME (?) */
1557                 rxptr->rdes2 = cpu_to_le32( pci_map_single(db->pdev, skb->data,
1558                                     RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) );
1559                 wmb();
1560                 rxptr->rdes0 = cpu_to_le32(0x80000000);
1561                 rxptr = rxptr->next_rx_desc;
1562                 db->rx_avail_cnt++;
1563         }
1564
1565         db->rx_insert_ptr = rxptr;
1566 }
1567
1568 static void srom_clk_write(void __iomem *ioaddr, u32 data)
1569 {
1570         static const u32 cmd[] = {
1571                 CR9_SROM_READ | CR9_SRCS,
1572                 CR9_SROM_READ | CR9_SRCS | CR9_SRCLK,
1573                 CR9_SROM_READ | CR9_SRCS
1574         };
1575         int i;
1576
1577         for (i = 0; i < ARRAY_SIZE(cmd); i++) {
1578                 dw32(DCR9, data | cmd[i]);
1579                 udelay(5);
1580         }
1581 }
1582
1583 /*
1584  *      Read one word data from the serial ROM
1585  */
1586 static u16 read_srom_word(void __iomem *ioaddr, int offset)
1587 {
1588         u16 srom_data;
1589         int i;
1590
1591         dw32(DCR9, CR9_SROM_READ);
1592         udelay(5);
1593         dw32(DCR9, CR9_SROM_READ | CR9_SRCS);
1594         udelay(5);
1595
1596         /* Send the Read Command 110b */
1597         srom_clk_write(ioaddr, SROM_DATA_1);
1598         srom_clk_write(ioaddr, SROM_DATA_1);
1599         srom_clk_write(ioaddr, SROM_DATA_0);
1600
1601         /* Send the offset */
1602         for (i = 5; i >= 0; i--) {
1603                 srom_data = (offset & (1 << i)) ? SROM_DATA_1 : SROM_DATA_0;
1604                 srom_clk_write(ioaddr, srom_data);
1605         }
1606
1607         dw32(DCR9, CR9_SROM_READ | CR9_SRCS);
1608         udelay(5);
1609
1610         for (i = 16; i > 0; i--) {
1611                 dw32(DCR9, CR9_SROM_READ | CR9_SRCS | CR9_SRCLK);
1612                 udelay(5);
1613                 srom_data = (srom_data << 1) |
1614                                 ((dr32(DCR9) & CR9_CRDOUT) ? 1 : 0);
1615                 dw32(DCR9, CR9_SROM_READ | CR9_SRCS);
1616                 udelay(5);
1617         }
1618
1619         dw32(DCR9, CR9_SROM_READ);
1620         udelay(5);
1621         return srom_data;
1622 }
1623
1624
1625 /*
1626  *      Auto sense the media mode
1627  */
1628
1629 static u8 dmfe_sense_speed(struct dmfe_board_info *db)
1630 {
1631         void __iomem *ioaddr = db->ioaddr;
1632         u8 ErrFlag = 0;
1633         u16 phy_mode;
1634
1635         /* CR6 bit18=0, select 10/100M */
1636         update_cr6(db->cr6_data & ~0x40000, ioaddr);
1637
1638         phy_mode = dmfe_phy_read(db->ioaddr, db->phy_addr, 1, db->chip_id);
1639         phy_mode = dmfe_phy_read(db->ioaddr, db->phy_addr, 1, db->chip_id);
1640
1641         if ( (phy_mode & 0x24) == 0x24 ) {
1642                 if (db->chip_id == PCI_DM9132_ID)       /* DM9132 */
1643                         phy_mode = dmfe_phy_read(db->ioaddr,
1644                                                  db->phy_addr, 7, db->chip_id) & 0xf000;
1645                 else                            /* DM9102/DM9102A */
1646                         phy_mode = dmfe_phy_read(db->ioaddr,
1647                                                  db->phy_addr, 17, db->chip_id) & 0xf000;
1648                 switch (phy_mode) {
1649                 case 0x1000: db->op_mode = DMFE_10MHF; break;
1650                 case 0x2000: db->op_mode = DMFE_10MFD; break;
1651                 case 0x4000: db->op_mode = DMFE_100MHF; break;
1652                 case 0x8000: db->op_mode = DMFE_100MFD; break;
1653                 default: db->op_mode = DMFE_10MHF;
1654                         ErrFlag = 1;
1655                         break;
1656                 }
1657         } else {
1658                 db->op_mode = DMFE_10MHF;
1659                 DMFE_DBUG(0, "Link Failed :", phy_mode);
1660                 ErrFlag = 1;
1661         }
1662
1663         return ErrFlag;
1664 }
1665
1666
1667 /*
1668  *      Set 10/100 phyxcer capability
1669  *      AUTO mode : phyxcer register4 is NIC capability
1670  *      Force mode: phyxcer register4 is the force media
1671  */
1672
1673 static void dmfe_set_phyxcer(struct dmfe_board_info *db)
1674 {
1675         void __iomem *ioaddr = db->ioaddr;
1676         u16 phy_reg;
1677
1678         /* Select 10/100M phyxcer */
1679         db->cr6_data &= ~0x40000;
1680         update_cr6(db->cr6_data, ioaddr);
1681
1682         /* DM9009 Chip: Phyxcer reg18 bit12=0 */
1683         if (db->chip_id == PCI_DM9009_ID) {
1684                 phy_reg = dmfe_phy_read(db->ioaddr,
1685                                         db->phy_addr, 18, db->chip_id) & ~0x1000;
1686
1687                 dmfe_phy_write(db->ioaddr,
1688                                db->phy_addr, 18, phy_reg, db->chip_id);
1689         }
1690
1691         /* Phyxcer capability setting */
1692         phy_reg = dmfe_phy_read(db->ioaddr, db->phy_addr, 4, db->chip_id) & ~0x01e0;
1693
1694         if (db->media_mode & DMFE_AUTO) {
1695                 /* AUTO Mode */
1696                 phy_reg |= db->PHY_reg4;
1697         } else {
1698                 /* Force Mode */
1699                 switch(db->media_mode) {
1700                 case DMFE_10MHF: phy_reg |= 0x20; break;
1701                 case DMFE_10MFD: phy_reg |= 0x40; break;
1702                 case DMFE_100MHF: phy_reg |= 0x80; break;
1703                 case DMFE_100MFD: phy_reg |= 0x100; break;
1704                 }
1705                 if (db->chip_id == PCI_DM9009_ID) phy_reg &= 0x61;
1706         }
1707
1708         /* Write new capability to Phyxcer Reg4 */
1709         if ( !(phy_reg & 0x01e0)) {
1710                 phy_reg|=db->PHY_reg4;
1711                 db->media_mode|=DMFE_AUTO;
1712         }
1713         dmfe_phy_write(db->ioaddr, db->phy_addr, 4, phy_reg, db->chip_id);
1714
1715         /* Restart Auto-Negotiation */
1716         if ( db->chip_type && (db->chip_id == PCI_DM9102_ID) )
1717                 dmfe_phy_write(db->ioaddr, db->phy_addr, 0, 0x1800, db->chip_id);
1718         if ( !db->chip_type )
1719                 dmfe_phy_write(db->ioaddr, db->phy_addr, 0, 0x1200, db->chip_id);
1720 }
1721
1722
1723 /*
1724  *      Process op-mode
1725  *      AUTO mode : PHY controller in Auto-negotiation Mode
1726  *      Force mode: PHY controller in force mode with HUB
1727  *                      N-way force capability with SWITCH
1728  */
1729
1730 static void dmfe_process_mode(struct dmfe_board_info *db)
1731 {
1732         u16 phy_reg;
1733
1734         /* Full Duplex Mode Check */
1735         if (db->op_mode & 0x4)
1736                 db->cr6_data |= CR6_FDM;        /* Set Full Duplex Bit */
1737         else
1738                 db->cr6_data &= ~CR6_FDM;       /* Clear Full Duplex Bit */
1739
1740         /* Transciver Selection */
1741         if (db->op_mode & 0x10)         /* 1M HomePNA */
1742                 db->cr6_data |= 0x40000;/* External MII select */
1743         else
1744                 db->cr6_data &= ~0x40000;/* Internal 10/100 transciver */
1745
1746         update_cr6(db->cr6_data, db->ioaddr);
1747
1748         /* 10/100M phyxcer force mode need */
1749         if ( !(db->media_mode & 0x18)) {
1750                 /* Forece Mode */
1751                 phy_reg = dmfe_phy_read(db->ioaddr, db->phy_addr, 6, db->chip_id);
1752                 if ( !(phy_reg & 0x1) ) {
1753                         /* parter without N-Way capability */
1754                         phy_reg = 0x0;
1755                         switch(db->op_mode) {
1756                         case DMFE_10MHF: phy_reg = 0x0; break;
1757                         case DMFE_10MFD: phy_reg = 0x100; break;
1758                         case DMFE_100MHF: phy_reg = 0x2000; break;
1759                         case DMFE_100MFD: phy_reg = 0x2100; break;
1760                         }
1761                         dmfe_phy_write(db->ioaddr,
1762                                        db->phy_addr, 0, phy_reg, db->chip_id);
1763                         if ( db->chip_type && (db->chip_id == PCI_DM9102_ID) )
1764                                 mdelay(20);
1765                         dmfe_phy_write(db->ioaddr,
1766                                        db->phy_addr, 0, phy_reg, db->chip_id);
1767                 }
1768         }
1769 }
1770
1771
1772 /*
1773  *      Write a word to Phy register
1774  */
1775
1776 static void dmfe_phy_write(void __iomem *ioaddr, u8 phy_addr, u8 offset,
1777                            u16 phy_data, u32 chip_id)
1778 {
1779         u16 i;
1780
1781         if (chip_id == PCI_DM9132_ID) {
1782                 dw16(0x80 + offset * 4, phy_data);
1783         } else {
1784                 /* DM9102/DM9102A Chip */
1785
1786                 /* Send 33 synchronization clock to Phy controller */
1787                 for (i = 0; i < 35; i++)
1788                         dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1789
1790                 /* Send start command(01) to Phy */
1791                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_0);
1792                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1793
1794                 /* Send write command(01) to Phy */
1795                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_0);
1796                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1797
1798                 /* Send Phy address */
1799                 for (i = 0x10; i > 0; i = i >> 1)
1800                         dmfe_phy_write_1bit(ioaddr,
1801                                             phy_addr & i ? PHY_DATA_1 : PHY_DATA_0);
1802
1803                 /* Send register address */
1804                 for (i = 0x10; i > 0; i = i >> 1)
1805                         dmfe_phy_write_1bit(ioaddr,
1806                                             offset & i ? PHY_DATA_1 : PHY_DATA_0);
1807
1808                 /* written trasnition */
1809                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1810                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_0);
1811
1812                 /* Write a word data to PHY controller */
1813                 for ( i = 0x8000; i > 0; i >>= 1)
1814                         dmfe_phy_write_1bit(ioaddr,
1815                                             phy_data & i ? PHY_DATA_1 : PHY_DATA_0);
1816         }
1817 }
1818
1819
1820 /*
1821  *      Read a word data from phy register
1822  */
1823
1824 static u16 dmfe_phy_read(void __iomem *ioaddr, u8 phy_addr, u8 offset, u32 chip_id)
1825 {
1826         int i;
1827         u16 phy_data;
1828
1829         if (chip_id == PCI_DM9132_ID) {
1830                 /* DM9132 Chip */
1831                 phy_data = dr16(0x80 + offset * 4);
1832         } else {
1833                 /* DM9102/DM9102A Chip */
1834
1835                 /* Send 33 synchronization clock to Phy controller */
1836                 for (i = 0; i < 35; i++)
1837                         dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1838
1839                 /* Send start command(01) to Phy */
1840                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_0);
1841                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1842
1843                 /* Send read command(10) to Phy */
1844                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_1);
1845                 dmfe_phy_write_1bit(ioaddr, PHY_DATA_0);
1846
1847                 /* Send Phy address */
1848                 for (i = 0x10; i > 0; i = i >> 1)
1849                         dmfe_phy_write_1bit(ioaddr,
1850                                             phy_addr & i ? PHY_DATA_1 : PHY_DATA_0);
1851
1852                 /* Send register address */
1853                 for (i = 0x10; i > 0; i = i >> 1)
1854                         dmfe_phy_write_1bit(ioaddr,
1855                                             offset & i ? PHY_DATA_1 : PHY_DATA_0);
1856
1857                 /* Skip transition state */
1858                 dmfe_phy_read_1bit(ioaddr);
1859
1860                 /* read 16bit data */
1861                 for (phy_data = 0, i = 0; i < 16; i++) {
1862                         phy_data <<= 1;
1863                         phy_data |= dmfe_phy_read_1bit(ioaddr);
1864                 }
1865         }
1866
1867         return phy_data;
1868 }
1869
1870
1871 /*
1872  *      Write one bit data to Phy Controller
1873  */
1874
1875 static void dmfe_phy_write_1bit(void __iomem *ioaddr, u32 phy_data)
1876 {
1877         dw32(DCR9, phy_data);           /* MII Clock Low */
1878         udelay(1);
1879         dw32(DCR9, phy_data | MDCLKH);  /* MII Clock High */
1880         udelay(1);
1881         dw32(DCR9, phy_data);           /* MII Clock Low */
1882         udelay(1);
1883 }
1884
1885
1886 /*
1887  *      Read one bit phy data from PHY controller
1888  */
1889
1890 static u16 dmfe_phy_read_1bit(void __iomem *ioaddr)
1891 {
1892         u16 phy_data;
1893
1894         dw32(DCR9, 0x50000);
1895         udelay(1);
1896         phy_data = (dr32(DCR9) >> 19) & 0x1;
1897         dw32(DCR9, 0x40000);
1898         udelay(1);
1899
1900         return phy_data;
1901 }
1902
1903
1904 /*
1905  *      Parser SROM and media mode
1906  */
1907
1908 static void dmfe_parse_srom(struct dmfe_board_info * db)
1909 {
1910         char * srom = db->srom;
1911         int dmfe_mode, tmp_reg;
1912
1913         DMFE_DBUG(0, "dmfe_parse_srom() ", 0);
1914
1915         /* Init CR15 */
1916         db->cr15_data = CR15_DEFAULT;
1917
1918         /* Check SROM Version */
1919         if ( ( (int) srom[18] & 0xff) == SROM_V41_CODE) {
1920                 /* SROM V4.01 */
1921                 /* Get NIC support media mode */
1922                 db->NIC_capability = le16_to_cpup((__le16 *) (srom + 34));
1923                 db->PHY_reg4 = 0;
1924                 for (tmp_reg = 1; tmp_reg < 0x10; tmp_reg <<= 1) {
1925                         switch( db->NIC_capability & tmp_reg ) {
1926                         case 0x1: db->PHY_reg4 |= 0x0020; break;
1927                         case 0x2: db->PHY_reg4 |= 0x0040; break;
1928                         case 0x4: db->PHY_reg4 |= 0x0080; break;
1929                         case 0x8: db->PHY_reg4 |= 0x0100; break;
1930                         }
1931                 }
1932
1933                 /* Media Mode Force or not check */
1934                 dmfe_mode = (le32_to_cpup((__le32 *) (srom + 34)) &
1935                              le32_to_cpup((__le32 *) (srom + 36)));
1936                 switch(dmfe_mode) {
1937                 case 0x4: dmfe_media_mode = DMFE_100MHF; break; /* 100MHF */
1938                 case 0x2: dmfe_media_mode = DMFE_10MFD; break;  /* 10MFD */
1939                 case 0x8: dmfe_media_mode = DMFE_100MFD; break; /* 100MFD */
1940                 case 0x100:
1941                 case 0x200: dmfe_media_mode = DMFE_1M_HPNA; break;/* HomePNA */
1942                 }
1943
1944                 /* Special Function setting */
1945                 /* VLAN function */
1946                 if ( (SF_mode & 0x1) || (srom[43] & 0x80) )
1947                         db->cr15_data |= 0x40;
1948
1949                 /* Flow Control */
1950                 if ( (SF_mode & 0x2) || (srom[40] & 0x1) )
1951                         db->cr15_data |= 0x400;
1952
1953                 /* TX pause packet */
1954                 if ( (SF_mode & 0x4) || (srom[40] & 0xe) )
1955                         db->cr15_data |= 0x9800;
1956         }
1957
1958         /* Parse HPNA parameter */
1959         db->HPNA_command = 1;
1960
1961         /* Accept remote command or not */
1962         if (HPNA_rx_cmd == 0)
1963                 db->HPNA_command |= 0x8000;
1964
1965          /* Issue remote command & operation mode */
1966         if (HPNA_tx_cmd == 1)
1967                 switch(HPNA_mode) {     /* Issue Remote Command */
1968                 case 0: db->HPNA_command |= 0x0904; break;
1969                 case 1: db->HPNA_command |= 0x0a00; break;
1970                 case 2: db->HPNA_command |= 0x0506; break;
1971                 case 3: db->HPNA_command |= 0x0602; break;
1972                 }
1973         else
1974                 switch(HPNA_mode) {     /* Don't Issue */
1975                 case 0: db->HPNA_command |= 0x0004; break;
1976                 case 1: db->HPNA_command |= 0x0000; break;
1977                 case 2: db->HPNA_command |= 0x0006; break;
1978                 case 3: db->HPNA_command |= 0x0002; break;
1979                 }
1980
1981         /* Check DM9801 or DM9802 present or not */
1982         db->HPNA_present = 0;
1983         update_cr6(db->cr6_data | 0x40000, db->ioaddr);
1984         tmp_reg = dmfe_phy_read(db->ioaddr, db->phy_addr, 3, db->chip_id);
1985         if ( ( tmp_reg & 0xfff0 ) == 0xb900 ) {
1986                 /* DM9801 or DM9802 present */
1987                 db->HPNA_timer = 8;
1988                 if ( dmfe_phy_read(db->ioaddr, db->phy_addr, 31, db->chip_id) == 0x4404) {
1989                         /* DM9801 HomeRun */
1990                         db->HPNA_present = 1;
1991                         dmfe_program_DM9801(db, tmp_reg);
1992                 } else {
1993                         /* DM9802 LongRun */
1994                         db->HPNA_present = 2;
1995                         dmfe_program_DM9802(db);
1996                 }
1997         }
1998
1999 }
2000
2001
2002 /*
2003  *      Init HomeRun DM9801
2004  */
2005
2006 static void dmfe_program_DM9801(struct dmfe_board_info * db, int HPNA_rev)
2007 {
2008         uint reg17, reg25;
2009
2010         if ( !HPNA_NoiseFloor ) HPNA_NoiseFloor = DM9801_NOISE_FLOOR;
2011         switch(HPNA_rev) {
2012         case 0xb900: /* DM9801 E3 */
2013                 db->HPNA_command |= 0x1000;
2014                 reg25 = dmfe_phy_read(db->ioaddr, db->phy_addr, 24, db->chip_id);
2015                 reg25 = ( (reg25 + HPNA_NoiseFloor) & 0xff) | 0xf000;
2016                 reg17 = dmfe_phy_read(db->ioaddr, db->phy_addr, 17, db->chip_id);
2017                 break;
2018         case 0xb901: /* DM9801 E4 */
2019                 reg25 = dmfe_phy_read(db->ioaddr, db->phy_addr, 25, db->chip_id);
2020                 reg25 = (reg25 & 0xff00) + HPNA_NoiseFloor;
2021                 reg17 = dmfe_phy_read(db->ioaddr, db->phy_addr, 17, db->chip_id);
2022                 reg17 = (reg17 & 0xfff0) + HPNA_NoiseFloor + 3;
2023                 break;
2024         case 0xb902: /* DM9801 E5 */
2025         case 0xb903: /* DM9801 E6 */
2026         default:
2027                 db->HPNA_command |= 0x1000;
2028                 reg25 = dmfe_phy_read(db->ioaddr, db->phy_addr, 25, db->chip_id);
2029                 reg25 = (reg25 & 0xff00) + HPNA_NoiseFloor - 5;
2030                 reg17 = dmfe_phy_read(db->ioaddr, db->phy_addr, 17, db->chip_id);
2031                 reg17 = (reg17 & 0xfff0) + HPNA_NoiseFloor;
2032                 break;
2033         }
2034         dmfe_phy_write(db->ioaddr, db->phy_addr, 16, db->HPNA_command, db->chip_id);
2035         dmfe_phy_write(db->ioaddr, db->phy_addr, 17, reg17, db->chip_id);
2036         dmfe_phy_write(db->ioaddr, db->phy_addr, 25, reg25, db->chip_id);
2037 }
2038
2039
2040 /*
2041  *      Init HomeRun DM9802
2042  */
2043
2044 static void dmfe_program_DM9802(struct dmfe_board_info * db)
2045 {
2046         uint phy_reg;
2047
2048         if ( !HPNA_NoiseFloor ) HPNA_NoiseFloor = DM9802_NOISE_FLOOR;
2049         dmfe_phy_write(db->ioaddr, db->phy_addr, 16, db->HPNA_command, db->chip_id);
2050         phy_reg = dmfe_phy_read(db->ioaddr, db->phy_addr, 25, db->chip_id);
2051         phy_reg = ( phy_reg & 0xff00) + HPNA_NoiseFloor;
2052         dmfe_phy_write(db->ioaddr, db->phy_addr, 25, phy_reg, db->chip_id);
2053 }
2054
2055
2056 /*
2057  *      Check remote HPNA power and speed status. If not correct,
2058  *      issue command again.
2059 */
2060
2061 static void dmfe_HPNA_remote_cmd_chk(struct dmfe_board_info * db)
2062 {
2063         uint phy_reg;
2064
2065         /* Got remote device status */
2066         phy_reg = dmfe_phy_read(db->ioaddr, db->phy_addr, 17, db->chip_id) & 0x60;
2067         switch(phy_reg) {
2068         case 0x00: phy_reg = 0x0a00;break; /* LP/LS */
2069         case 0x20: phy_reg = 0x0900;break; /* LP/HS */
2070         case 0x40: phy_reg = 0x0600;break; /* HP/LS */
2071         case 0x60: phy_reg = 0x0500;break; /* HP/HS */
2072         }
2073
2074         /* Check remote device status match our setting ot not */
2075         if ( phy_reg != (db->HPNA_command & 0x0f00) ) {
2076                 dmfe_phy_write(db->ioaddr, db->phy_addr, 16, db->HPNA_command,
2077                                db->chip_id);
2078                 db->HPNA_timer=8;
2079         } else
2080                 db->HPNA_timer=600;     /* Match, every 10 minutes, check */
2081 }
2082
2083
2084
2085 static const struct pci_device_id dmfe_pci_tbl[] = {
2086         { 0x1282, 0x9132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9132_ID },
2087         { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9102_ID },
2088         { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9100_ID },
2089         { 0x1282, 0x9009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9009_ID },
2090         { 0, }
2091 };
2092 MODULE_DEVICE_TABLE(pci, dmfe_pci_tbl);
2093
2094
2095 #ifdef CONFIG_PM
2096 static int dmfe_suspend(struct pci_dev *pci_dev, pm_message_t state)
2097 {
2098         struct net_device *dev = pci_get_drvdata(pci_dev);
2099         struct dmfe_board_info *db = netdev_priv(dev);
2100         void __iomem *ioaddr = db->ioaddr;
2101         u32 tmp;
2102
2103         /* Disable upper layer interface */
2104         netif_device_detach(dev);
2105
2106         /* Disable Tx/Rx */
2107         db->cr6_data &= ~(CR6_RXSC | CR6_TXSC);
2108         update_cr6(db->cr6_data, ioaddr);
2109
2110         /* Disable Interrupt */
2111         dw32(DCR7, 0);
2112         dw32(DCR5, dr32(DCR5));
2113
2114         /* Fre RX buffers */
2115         dmfe_free_rxbuffer(db);
2116
2117         /* Enable WOL */
2118         pci_read_config_dword(pci_dev, 0x40, &tmp);
2119         tmp &= ~(DMFE_WOL_LINKCHANGE|DMFE_WOL_MAGICPACKET);
2120
2121         if (db->wol_mode & WAKE_PHY)
2122                 tmp |= DMFE_WOL_LINKCHANGE;
2123         if (db->wol_mode & WAKE_MAGIC)
2124                 tmp |= DMFE_WOL_MAGICPACKET;
2125
2126         pci_write_config_dword(pci_dev, 0x40, tmp);
2127
2128         pci_enable_wake(pci_dev, PCI_D3hot, 1);
2129         pci_enable_wake(pci_dev, PCI_D3cold, 1);
2130
2131         /* Power down device*/
2132         pci_save_state(pci_dev);
2133         pci_set_power_state(pci_dev, pci_choose_state (pci_dev, state));
2134
2135         return 0;
2136 }
2137
2138 static int dmfe_resume(struct pci_dev *pci_dev)
2139 {
2140         struct net_device *dev = pci_get_drvdata(pci_dev);
2141         u32 tmp;
2142
2143         pci_set_power_state(pci_dev, PCI_D0);
2144         pci_restore_state(pci_dev);
2145
2146         /* Re-initialize DM910X board */
2147         dmfe_init_dm910x(dev);
2148
2149         /* Disable WOL */
2150         pci_read_config_dword(pci_dev, 0x40, &tmp);
2151
2152         tmp &= ~(DMFE_WOL_LINKCHANGE | DMFE_WOL_MAGICPACKET);
2153         pci_write_config_dword(pci_dev, 0x40, tmp);
2154
2155         pci_enable_wake(pci_dev, PCI_D3hot, 0);
2156         pci_enable_wake(pci_dev, PCI_D3cold, 0);
2157
2158         /* Restart upper layer interface */
2159         netif_device_attach(dev);
2160
2161         return 0;
2162 }
2163 #else
2164 #define dmfe_suspend NULL
2165 #define dmfe_resume NULL
2166 #endif
2167
2168 static struct pci_driver dmfe_driver = {
2169         .name           = "dmfe",
2170         .id_table       = dmfe_pci_tbl,
2171         .probe          = dmfe_init_one,
2172         .remove         = dmfe_remove_one,
2173         .suspend        = dmfe_suspend,
2174         .resume         = dmfe_resume
2175 };
2176
2177 MODULE_AUTHOR("Sten Wang, sten_wang@davicom.com.tw");
2178 MODULE_DESCRIPTION("Davicom DM910X fast ethernet driver");
2179 MODULE_LICENSE("GPL");
2180 MODULE_VERSION(DRV_VERSION);
2181
2182 module_param(debug, int, 0);
2183 module_param(mode, byte, 0);
2184 module_param(cr6set, int, 0);
2185 module_param(chkmode, byte, 0);
2186 module_param(HPNA_mode, byte, 0);
2187 module_param(HPNA_rx_cmd, byte, 0);
2188 module_param(HPNA_tx_cmd, byte, 0);
2189 module_param(HPNA_NoiseFloor, byte, 0);
2190 module_param(SF_mode, byte, 0);
2191 MODULE_PARM_DESC(debug, "Davicom DM9xxx enable debugging (0-1)");
2192 MODULE_PARM_DESC(mode, "Davicom DM9xxx: "
2193                 "Bit 0: 10/100Mbps, bit 2: duplex, bit 8: HomePNA");
2194
2195 MODULE_PARM_DESC(SF_mode, "Davicom DM9xxx special function "
2196                 "(bit 0: VLAN, bit 1 Flow Control, bit 2: TX pause packet)");
2197
2198 /*      Description:
2199  *      when user used insmod to add module, system invoked init_module()
2200  *      to initialize and register.
2201  */
2202
2203 static int __init dmfe_init_module(void)
2204 {
2205         int rc;
2206
2207         pr_info("%s\n", version);
2208         printed_version = 1;
2209
2210         DMFE_DBUG(0, "init_module() ", debug);
2211
2212         if (debug)
2213                 dmfe_debug = debug;     /* set debug flag */
2214         if (cr6set)
2215                 dmfe_cr6_user_set = cr6set;
2216
2217         switch(mode) {
2218         case DMFE_10MHF:
2219         case DMFE_100MHF:
2220         case DMFE_10MFD:
2221         case DMFE_100MFD:
2222         case DMFE_1M_HPNA:
2223                 dmfe_media_mode = mode;
2224                 break;
2225         default:dmfe_media_mode = DMFE_AUTO;
2226                 break;
2227         }
2228
2229         if (HPNA_mode > 4)
2230                 HPNA_mode = 0;          /* Default: LP/HS */
2231         if (HPNA_rx_cmd > 1)
2232                 HPNA_rx_cmd = 0;        /* Default: Ignored remote cmd */
2233         if (HPNA_tx_cmd > 1)
2234                 HPNA_tx_cmd = 0;        /* Default: Don't issue remote cmd */
2235         if (HPNA_NoiseFloor > 15)
2236                 HPNA_NoiseFloor = 0;
2237
2238         rc = pci_register_driver(&dmfe_driver);
2239         if (rc < 0)
2240                 return rc;
2241
2242         return 0;
2243 }
2244
2245
2246 /*
2247  *      Description:
2248  *      when user used rmmod to delete module, system invoked clean_module()
2249  *      to un-register all registered services.
2250  */
2251
2252 static void __exit dmfe_cleanup_module(void)
2253 {
2254         DMFE_DBUG(0, "dmfe_cleanup_module() ", debug);
2255         pci_unregister_driver(&dmfe_driver);
2256 }
2257
2258 module_init(dmfe_init_module);
2259 module_exit(dmfe_cleanup_module);