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