linux/drivers/net/ethernet/dec/tulip/dmfe.c
<<
>>
Prefs
   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);
2220