Linux Audio

Check our new training course

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