root/drivers/net/ethernet/dlink/dl2k.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dl2k_enable_int
  2. rio_probe1
  3. find_miiphy
  4. parse_eeprom
  5. rio_set_led_mode
  6. desc_to_dma
  7. free_list
  8. rio_reset_ring
  9. alloc_list
  10. rio_hw_init
  11. rio_hw_stop
  12. rio_open
  13. rio_timer
  14. rio_tx_timeout
  15. start_xmit
  16. rio_interrupt
  17. rio_free_tx
  18. tx_error
  19. receive_packet
  20. rio_error
  21. get_stats
  22. clear_stats
  23. set_multicast
  24. rio_get_drvinfo
  25. rio_get_link_ksettings
  26. rio_set_link_ksettings
  27. rio_get_link
  28. rio_ioctl
  29. read_eeprom
  30. mii_sendbit
  31. mii_getbit
  32. mii_send_bits
  33. mii_read
  34. mii_write
  35. mii_wait_link
  36. mii_get_media
  37. mii_set_media
  38. mii_get_media_pcs
  39. mii_set_media_pcs
  40. rio_close
  41. rio_remove1
  42. rio_suspend
  43. rio_resume

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*  D-Link DL2000-based Gigabit Ethernet Adapter Linux driver */
   3 /*
   4     Copyright (c) 2001, 2002 by D-Link Corporation
   5     Written by Edward Peng.<edward_peng@dlink.com.tw>
   6     Created 03-May-2001, base on Linux' sundance.c.
   7 
   8 */
   9 
  10 #define DRV_NAME        "DL2000/TC902x-based linux driver"
  11 #define DRV_VERSION     "v1.19"
  12 #define DRV_RELDATE     "2007/08/12"
  13 #include "dl2k.h"
  14 #include <linux/dma-mapping.h>
  15 
  16 #define dw32(reg, val)  iowrite32(val, ioaddr + (reg))
  17 #define dw16(reg, val)  iowrite16(val, ioaddr + (reg))
  18 #define dw8(reg, val)   iowrite8(val, ioaddr + (reg))
  19 #define dr32(reg)       ioread32(ioaddr + (reg))
  20 #define dr16(reg)       ioread16(ioaddr + (reg))
  21 #define dr8(reg)        ioread8(ioaddr + (reg))
  22 
  23 static char version[] =
  24       KERN_INFO DRV_NAME " " DRV_VERSION " " DRV_RELDATE "\n";
  25 #define MAX_UNITS 8
  26 static int mtu[MAX_UNITS];
  27 static int vlan[MAX_UNITS];
  28 static int jumbo[MAX_UNITS];
  29 static char *media[MAX_UNITS];
  30 static int tx_flow=-1;
  31 static int rx_flow=-1;
  32 static int copy_thresh;
  33 static int rx_coalesce=10;      /* Rx frame count each interrupt */
  34 static int rx_timeout=200;      /* Rx DMA wait time in 640ns increments */
  35 static int tx_coalesce=16;      /* HW xmit count each TxDMAComplete */
  36 
  37 
  38 MODULE_AUTHOR ("Edward Peng");
  39 MODULE_DESCRIPTION ("D-Link DL2000-based Gigabit Ethernet Adapter");
  40 MODULE_LICENSE("GPL");
  41 module_param_array(mtu, int, NULL, 0);
  42 module_param_array(media, charp, NULL, 0);
  43 module_param_array(vlan, int, NULL, 0);
  44 module_param_array(jumbo, int, NULL, 0);
  45 module_param(tx_flow, int, 0);
  46 module_param(rx_flow, int, 0);
  47 module_param(copy_thresh, int, 0);
  48 module_param(rx_coalesce, int, 0);      /* Rx frame count each interrupt */
  49 module_param(rx_timeout, int, 0);       /* Rx DMA wait time in 64ns increments */
  50 module_param(tx_coalesce, int, 0); /* HW xmit count each TxDMAComplete */
  51 
  52 
  53 /* Enable the default interrupts */
  54 #define DEFAULT_INTR (RxDMAComplete | HostError | IntRequested | TxDMAComplete| \
  55        UpdateStats | LinkEvent)
  56 
  57 static void dl2k_enable_int(struct netdev_private *np)
  58 {
  59         void __iomem *ioaddr = np->ioaddr;
  60 
  61         dw16(IntEnable, DEFAULT_INTR);
  62 }
  63 
  64 static const int max_intrloop = 50;
  65 static const int multicast_filter_limit = 0x40;
  66 
  67 static int rio_open (struct net_device *dev);
  68 static void rio_timer (struct timer_list *t);
  69 static void rio_tx_timeout (struct net_device *dev);
  70 static netdev_tx_t start_xmit (struct sk_buff *skb, struct net_device *dev);
  71 static irqreturn_t rio_interrupt (int irq, void *dev_instance);
  72 static void rio_free_tx (struct net_device *dev, int irq);
  73 static void tx_error (struct net_device *dev, int tx_status);
  74 static int receive_packet (struct net_device *dev);
  75 static void rio_error (struct net_device *dev, int int_status);
  76 static void set_multicast (struct net_device *dev);
  77 static struct net_device_stats *get_stats (struct net_device *dev);
  78 static int clear_stats (struct net_device *dev);
  79 static int rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
  80 static int rio_close (struct net_device *dev);
  81 static int find_miiphy (struct net_device *dev);
  82 static int parse_eeprom (struct net_device *dev);
  83 static int read_eeprom (struct netdev_private *, int eep_addr);
  84 static int mii_wait_link (struct net_device *dev, int wait);
  85 static int mii_set_media (struct net_device *dev);
  86 static int mii_get_media (struct net_device *dev);
  87 static int mii_set_media_pcs (struct net_device *dev);
  88 static int mii_get_media_pcs (struct net_device *dev);
  89 static int mii_read (struct net_device *dev, int phy_addr, int reg_num);
  90 static int mii_write (struct net_device *dev, int phy_addr, int reg_num,
  91                       u16 data);
  92 
  93 static const struct ethtool_ops ethtool_ops;
  94 
  95 static const struct net_device_ops netdev_ops = {
  96         .ndo_open               = rio_open,
  97         .ndo_start_xmit = start_xmit,
  98         .ndo_stop               = rio_close,
  99         .ndo_get_stats          = get_stats,
 100         .ndo_validate_addr      = eth_validate_addr,
 101         .ndo_set_mac_address    = eth_mac_addr,
 102         .ndo_set_rx_mode        = set_multicast,
 103         .ndo_do_ioctl           = rio_ioctl,
 104         .ndo_tx_timeout         = rio_tx_timeout,
 105 };
 106 
 107 static int
 108 rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent)
 109 {
 110         struct net_device *dev;
 111         struct netdev_private *np;
 112         static int card_idx;
 113         int chip_idx = ent->driver_data;
 114         int err, irq;
 115         void __iomem *ioaddr;
 116         static int version_printed;
 117         void *ring_space;
 118         dma_addr_t ring_dma;
 119 
 120         if (!version_printed++)
 121                 printk ("%s", version);
 122 
 123         err = pci_enable_device (pdev);
 124         if (err)
 125                 return err;
 126 
 127         irq = pdev->irq;
 128         err = pci_request_regions (pdev, "dl2k");
 129         if (err)
 130                 goto err_out_disable;
 131 
 132         pci_set_master (pdev);
 133 
 134         err = -ENOMEM;
 135 
 136         dev = alloc_etherdev (sizeof (*np));
 137         if (!dev)
 138                 goto err_out_res;
 139         SET_NETDEV_DEV(dev, &pdev->dev);
 140 
 141         np = netdev_priv(dev);
 142 
 143         /* IO registers range. */
 144         ioaddr = pci_iomap(pdev, 0, 0);
 145         if (!ioaddr)
 146                 goto err_out_dev;
 147         np->eeprom_addr = ioaddr;
 148 
 149 #ifdef MEM_MAPPING
 150         /* MM registers range. */
 151         ioaddr = pci_iomap(pdev, 1, 0);
 152         if (!ioaddr)
 153                 goto err_out_iounmap;
 154 #endif
 155         np->ioaddr = ioaddr;
 156         np->chip_id = chip_idx;
 157         np->pdev = pdev;
 158         spin_lock_init (&np->tx_lock);
 159         spin_lock_init (&np->rx_lock);
 160 
 161         /* Parse manual configuration */
 162         np->an_enable = 1;
 163         np->tx_coalesce = 1;
 164         if (card_idx < MAX_UNITS) {
 165                 if (media[card_idx] != NULL) {
 166                         np->an_enable = 0;
 167                         if (strcmp (media[card_idx], "auto") == 0 ||
 168                             strcmp (media[card_idx], "autosense") == 0 ||
 169                             strcmp (media[card_idx], "0") == 0 ) {
 170                                 np->an_enable = 2;
 171                         } else if (strcmp (media[card_idx], "100mbps_fd") == 0 ||
 172                             strcmp (media[card_idx], "4") == 0) {
 173                                 np->speed = 100;
 174                                 np->full_duplex = 1;
 175                         } else if (strcmp (media[card_idx], "100mbps_hd") == 0 ||
 176                                    strcmp (media[card_idx], "3") == 0) {
 177                                 np->speed = 100;
 178                                 np->full_duplex = 0;
 179                         } else if (strcmp (media[card_idx], "10mbps_fd") == 0 ||
 180                                    strcmp (media[card_idx], "2") == 0) {
 181                                 np->speed = 10;
 182                                 np->full_duplex = 1;
 183                         } else if (strcmp (media[card_idx], "10mbps_hd") == 0 ||
 184                                    strcmp (media[card_idx], "1") == 0) {
 185                                 np->speed = 10;
 186                                 np->full_duplex = 0;
 187                         } else if (strcmp (media[card_idx], "1000mbps_fd") == 0 ||
 188                                  strcmp (media[card_idx], "6") == 0) {
 189                                 np->speed=1000;
 190                                 np->full_duplex=1;
 191                         } else if (strcmp (media[card_idx], "1000mbps_hd") == 0 ||
 192                                  strcmp (media[card_idx], "5") == 0) {
 193                                 np->speed = 1000;
 194                                 np->full_duplex = 0;
 195                         } else {
 196                                 np->an_enable = 1;
 197                         }
 198                 }
 199                 if (jumbo[card_idx] != 0) {
 200                         np->jumbo = 1;
 201                         dev->mtu = MAX_JUMBO;
 202                 } else {
 203                         np->jumbo = 0;
 204                         if (mtu[card_idx] > 0 && mtu[card_idx] < PACKET_SIZE)
 205                                 dev->mtu = mtu[card_idx];
 206                 }
 207                 np->vlan = (vlan[card_idx] > 0 && vlan[card_idx] < 4096) ?
 208                     vlan[card_idx] : 0;
 209                 if (rx_coalesce > 0 && rx_timeout > 0) {
 210                         np->rx_coalesce = rx_coalesce;
 211                         np->rx_timeout = rx_timeout;
 212                         np->coalesce = 1;
 213                 }
 214                 np->tx_flow = (tx_flow == 0) ? 0 : 1;
 215                 np->rx_flow = (rx_flow == 0) ? 0 : 1;
 216 
 217                 if (tx_coalesce < 1)
 218                         tx_coalesce = 1;
 219                 else if (tx_coalesce > TX_RING_SIZE-1)
 220                         tx_coalesce = TX_RING_SIZE - 1;
 221         }
 222         dev->netdev_ops = &netdev_ops;
 223         dev->watchdog_timeo = TX_TIMEOUT;
 224         dev->ethtool_ops = &ethtool_ops;
 225 #if 0
 226         dev->features = NETIF_F_IP_CSUM;
 227 #endif
 228         /* MTU range: 68 - 1536 or 8000 */
 229         dev->min_mtu = ETH_MIN_MTU;
 230         dev->max_mtu = np->jumbo ? MAX_JUMBO : PACKET_SIZE;
 231 
 232         pci_set_drvdata (pdev, dev);
 233 
 234         ring_space = pci_alloc_consistent (pdev, TX_TOTAL_SIZE, &ring_dma);
 235         if (!ring_space)
 236                 goto err_out_iounmap;
 237         np->tx_ring = ring_space;
 238         np->tx_ring_dma = ring_dma;
 239 
 240         ring_space = pci_alloc_consistent (pdev, RX_TOTAL_SIZE, &ring_dma);
 241         if (!ring_space)
 242                 goto err_out_unmap_tx;
 243         np->rx_ring = ring_space;
 244         np->rx_ring_dma = ring_dma;
 245 
 246         /* Parse eeprom data */
 247         parse_eeprom (dev);
 248 
 249         /* Find PHY address */
 250         err = find_miiphy (dev);
 251         if (err)
 252                 goto err_out_unmap_rx;
 253 
 254         /* Fiber device? */
 255         np->phy_media = (dr16(ASICCtrl) & PhyMedia) ? 1 : 0;
 256         np->link_status = 0;
 257         /* Set media and reset PHY */
 258         if (np->phy_media) {
 259                 /* default Auto-Negotiation for fiber deivices */
 260                 if (np->an_enable == 2) {
 261                         np->an_enable = 1;
 262                 }
 263         } else {
 264                 /* Auto-Negotiation is mandatory for 1000BASE-T,
 265                    IEEE 802.3ab Annex 28D page 14 */
 266                 if (np->speed == 1000)
 267                         np->an_enable = 1;
 268         }
 269 
 270         err = register_netdev (dev);
 271         if (err)
 272                 goto err_out_unmap_rx;
 273 
 274         card_idx++;
 275 
 276         printk (KERN_INFO "%s: %s, %pM, IRQ %d\n",
 277                 dev->name, np->name, dev->dev_addr, irq);
 278         if (tx_coalesce > 1)
 279                 printk(KERN_INFO "tx_coalesce:\t%d packets\n",
 280                                 tx_coalesce);
 281         if (np->coalesce)
 282                 printk(KERN_INFO
 283                        "rx_coalesce:\t%d packets\n"
 284                        "rx_timeout: \t%d ns\n",
 285                                 np->rx_coalesce, np->rx_timeout*640);
 286         if (np->vlan)
 287                 printk(KERN_INFO "vlan(id):\t%d\n", np->vlan);
 288         return 0;
 289 
 290 err_out_unmap_rx:
 291         pci_free_consistent (pdev, RX_TOTAL_SIZE, np->rx_ring, np->rx_ring_dma);
 292 err_out_unmap_tx:
 293         pci_free_consistent (pdev, TX_TOTAL_SIZE, np->tx_ring, np->tx_ring_dma);
 294 err_out_iounmap:
 295 #ifdef MEM_MAPPING
 296         pci_iounmap(pdev, np->ioaddr);
 297 #endif
 298         pci_iounmap(pdev, np->eeprom_addr);
 299 err_out_dev:
 300         free_netdev (dev);
 301 err_out_res:
 302         pci_release_regions (pdev);
 303 err_out_disable:
 304         pci_disable_device (pdev);
 305         return err;
 306 }
 307 
 308 static int
 309 find_miiphy (struct net_device *dev)
 310 {
 311         struct netdev_private *np = netdev_priv(dev);
 312         int i, phy_found = 0;
 313 
 314         np->phy_addr = 1;
 315 
 316         for (i = 31; i >= 0; i--) {
 317                 int mii_status = mii_read (dev, i, 1);
 318                 if (mii_status != 0xffff && mii_status != 0x0000) {
 319                         np->phy_addr = i;
 320                         phy_found++;
 321                 }
 322         }
 323         if (!phy_found) {
 324                 printk (KERN_ERR "%s: No MII PHY found!\n", dev->name);
 325                 return -ENODEV;
 326         }
 327         return 0;
 328 }
 329 
 330 static int
 331 parse_eeprom (struct net_device *dev)
 332 {
 333         struct netdev_private *np = netdev_priv(dev);
 334         void __iomem *ioaddr = np->ioaddr;
 335         int i, j;
 336         u8 sromdata[256];
 337         u8 *psib;
 338         u32 crc;
 339         PSROM_t psrom = (PSROM_t) sromdata;
 340 
 341         int cid, next;
 342 
 343         for (i = 0; i < 128; i++)
 344                 ((__le16 *) sromdata)[i] = cpu_to_le16(read_eeprom(np, i));
 345 
 346         if (np->pdev->vendor == PCI_VENDOR_ID_DLINK) {  /* D-Link Only */
 347                 /* Check CRC */
 348                 crc = ~ether_crc_le (256 - 4, sromdata);
 349                 if (psrom->crc != cpu_to_le32(crc)) {
 350                         printk (KERN_ERR "%s: EEPROM data CRC error.\n",
 351                                         dev->name);
 352                         return -1;
 353                 }
 354         }
 355 
 356         /* Set MAC address */
 357         for (i = 0; i < 6; i++)
 358                 dev->dev_addr[i] = psrom->mac_addr[i];
 359 
 360         if (np->chip_id == CHIP_IP1000A) {
 361                 np->led_mode = psrom->led_mode;
 362                 return 0;
 363         }
 364 
 365         if (np->pdev->vendor != PCI_VENDOR_ID_DLINK) {
 366                 return 0;
 367         }
 368 
 369         /* Parse Software Information Block */
 370         i = 0x30;
 371         psib = (u8 *) sromdata;
 372         do {
 373                 cid = psib[i++];
 374                 next = psib[i++];
 375                 if ((cid == 0 && next == 0) || (cid == 0xff && next == 0xff)) {
 376                         printk (KERN_ERR "Cell data error\n");
 377                         return -1;
 378                 }
 379                 switch (cid) {
 380                 case 0: /* Format version */
 381                         break;
 382                 case 1: /* End of cell */
 383                         return 0;
 384                 case 2: /* Duplex Polarity */
 385                         np->duplex_polarity = psib[i];
 386                         dw8(PhyCtrl, dr8(PhyCtrl) | psib[i]);
 387                         break;
 388                 case 3: /* Wake Polarity */
 389                         np->wake_polarity = psib[i];
 390                         break;
 391                 case 9: /* Adapter description */
 392                         j = (next - i > 255) ? 255 : next - i;
 393                         memcpy (np->name, &(psib[i]), j);
 394                         break;
 395                 case 4:
 396                 case 5:
 397                 case 6:
 398                 case 7:
 399                 case 8: /* Reversed */
 400                         break;
 401                 default:        /* Unknown cell */
 402                         return -1;
 403                 }
 404                 i = next;
 405         } while (1);
 406 
 407         return 0;
 408 }
 409 
 410 static void rio_set_led_mode(struct net_device *dev)
 411 {
 412         struct netdev_private *np = netdev_priv(dev);
 413         void __iomem *ioaddr = np->ioaddr;
 414         u32 mode;
 415 
 416         if (np->chip_id != CHIP_IP1000A)
 417                 return;
 418 
 419         mode = dr32(ASICCtrl);
 420         mode &= ~(IPG_AC_LED_MODE_BIT_1 | IPG_AC_LED_MODE | IPG_AC_LED_SPEED);
 421 
 422         if (np->led_mode & 0x01)
 423                 mode |= IPG_AC_LED_MODE;
 424         if (np->led_mode & 0x02)
 425                 mode |= IPG_AC_LED_MODE_BIT_1;
 426         if (np->led_mode & 0x08)
 427                 mode |= IPG_AC_LED_SPEED;
 428 
 429         dw32(ASICCtrl, mode);
 430 }
 431 
 432 static inline dma_addr_t desc_to_dma(struct netdev_desc *desc)
 433 {
 434         return le64_to_cpu(desc->fraginfo) & DMA_BIT_MASK(48);
 435 }
 436 
 437 static void free_list(struct net_device *dev)
 438 {
 439         struct netdev_private *np = netdev_priv(dev);
 440         struct sk_buff *skb;
 441         int i;
 442 
 443         /* Free all the skbuffs in the queue. */
 444         for (i = 0; i < RX_RING_SIZE; i++) {
 445                 skb = np->rx_skbuff[i];
 446                 if (skb) {
 447                         pci_unmap_single(np->pdev, desc_to_dma(&np->rx_ring[i]),
 448                                          skb->len, PCI_DMA_FROMDEVICE);
 449                         dev_kfree_skb(skb);
 450                         np->rx_skbuff[i] = NULL;
 451                 }
 452                 np->rx_ring[i].status = 0;
 453                 np->rx_ring[i].fraginfo = 0;
 454         }
 455         for (i = 0; i < TX_RING_SIZE; i++) {
 456                 skb = np->tx_skbuff[i];
 457                 if (skb) {
 458                         pci_unmap_single(np->pdev, desc_to_dma(&np->tx_ring[i]),
 459                                          skb->len, PCI_DMA_TODEVICE);
 460                         dev_kfree_skb(skb);
 461                         np->tx_skbuff[i] = NULL;
 462                 }
 463         }
 464 }
 465 
 466 static void rio_reset_ring(struct netdev_private *np)
 467 {
 468         int i;
 469 
 470         np->cur_rx = 0;
 471         np->cur_tx = 0;
 472         np->old_rx = 0;
 473         np->old_tx = 0;
 474 
 475         for (i = 0; i < TX_RING_SIZE; i++)
 476                 np->tx_ring[i].status = cpu_to_le64(TFDDone);
 477 
 478         for (i = 0; i < RX_RING_SIZE; i++)
 479                 np->rx_ring[i].status = 0;
 480 }
 481 
 482  /* allocate and initialize Tx and Rx descriptors */
 483 static int alloc_list(struct net_device *dev)
 484 {
 485         struct netdev_private *np = netdev_priv(dev);
 486         int i;
 487 
 488         rio_reset_ring(np);
 489         np->rx_buf_sz = (dev->mtu <= 1500 ? PACKET_SIZE : dev->mtu + 32);
 490 
 491         /* Initialize Tx descriptors, TFDListPtr leaves in start_xmit(). */
 492         for (i = 0; i < TX_RING_SIZE; i++) {
 493                 np->tx_skbuff[i] = NULL;
 494                 np->tx_ring[i].next_desc = cpu_to_le64(np->tx_ring_dma +
 495                                               ((i + 1) % TX_RING_SIZE) *
 496                                               sizeof(struct netdev_desc));
 497         }
 498 
 499         /* Initialize Rx descriptors & allocate buffers */
 500         for (i = 0; i < RX_RING_SIZE; i++) {
 501                 /* Allocated fixed size of skbuff */
 502                 struct sk_buff *skb;
 503 
 504                 skb = netdev_alloc_skb_ip_align(dev, np->rx_buf_sz);
 505                 np->rx_skbuff[i] = skb;
 506                 if (!skb) {
 507                         free_list(dev);
 508                         return -ENOMEM;
 509                 }
 510 
 511                 np->rx_ring[i].next_desc = cpu_to_le64(np->rx_ring_dma +
 512                                                 ((i + 1) % RX_RING_SIZE) *
 513                                                 sizeof(struct netdev_desc));
 514                 /* Rubicon now supports 40 bits of addressing space. */
 515                 np->rx_ring[i].fraginfo =
 516                     cpu_to_le64(pci_map_single(
 517                                   np->pdev, skb->data, np->rx_buf_sz,
 518                                   PCI_DMA_FROMDEVICE));
 519                 np->rx_ring[i].fraginfo |= cpu_to_le64((u64)np->rx_buf_sz << 48);
 520         }
 521 
 522         return 0;
 523 }
 524 
 525 static void rio_hw_init(struct net_device *dev)
 526 {
 527         struct netdev_private *np = netdev_priv(dev);
 528         void __iomem *ioaddr = np->ioaddr;
 529         int i;
 530         u16 macctrl;
 531 
 532         /* Reset all logic functions */
 533         dw16(ASICCtrl + 2,
 534              GlobalReset | DMAReset | FIFOReset | NetworkReset | HostReset);
 535         mdelay(10);
 536 
 537         rio_set_led_mode(dev);
 538 
 539         /* DebugCtrl bit 4, 5, 9 must set */
 540         dw32(DebugCtrl, dr32(DebugCtrl) | 0x0230);
 541 
 542         if (np->chip_id == CHIP_IP1000A &&
 543             (np->pdev->revision == 0x40 || np->pdev->revision == 0x41)) {
 544                 /* PHY magic taken from ipg driver, undocumented registers */
 545                 mii_write(dev, np->phy_addr, 31, 0x0001);
 546                 mii_write(dev, np->phy_addr, 27, 0x01e0);
 547                 mii_write(dev, np->phy_addr, 31, 0x0002);
 548                 mii_write(dev, np->phy_addr, 27, 0xeb8e);
 549                 mii_write(dev, np->phy_addr, 31, 0x0000);
 550                 mii_write(dev, np->phy_addr, 30, 0x005e);
 551                 /* advertise 1000BASE-T half & full duplex, prefer MASTER */
 552                 mii_write(dev, np->phy_addr, MII_CTRL1000, 0x0700);
 553         }
 554 
 555         if (np->phy_media)
 556                 mii_set_media_pcs(dev);
 557         else
 558                 mii_set_media(dev);
 559 
 560         /* Jumbo frame */
 561         if (np->jumbo != 0)
 562                 dw16(MaxFrameSize, MAX_JUMBO+14);
 563 
 564         /* Set RFDListPtr */
 565         dw32(RFDListPtr0, np->rx_ring_dma);
 566         dw32(RFDListPtr1, 0);
 567 
 568         /* Set station address */
 569         /* 16 or 32-bit access is required by TC9020 datasheet but 8-bit works
 570          * too. However, it doesn't work on IP1000A so we use 16-bit access.
 571          */
 572         for (i = 0; i < 3; i++)
 573                 dw16(StationAddr0 + 2 * i,
 574                      cpu_to_le16(((u16 *)dev->dev_addr)[i]));
 575 
 576         set_multicast (dev);
 577         if (np->coalesce) {
 578                 dw32(RxDMAIntCtrl, np->rx_coalesce | np->rx_timeout << 16);
 579         }
 580         /* Set RIO to poll every N*320nsec. */
 581         dw8(RxDMAPollPeriod, 0x20);
 582         dw8(TxDMAPollPeriod, 0xff);
 583         dw8(RxDMABurstThresh, 0x30);
 584         dw8(RxDMAUrgentThresh, 0x30);
 585         dw32(RmonStatMask, 0x0007ffff);
 586         /* clear statistics */
 587         clear_stats (dev);
 588 
 589         /* VLAN supported */
 590         if (np->vlan) {
 591                 /* priority field in RxDMAIntCtrl  */
 592                 dw32(RxDMAIntCtrl, dr32(RxDMAIntCtrl) | 0x7 << 10);
 593                 /* VLANId */
 594                 dw16(VLANId, np->vlan);
 595                 /* Length/Type should be 0x8100 */
 596                 dw32(VLANTag, 0x8100 << 16 | np->vlan);
 597                 /* Enable AutoVLANuntagging, but disable AutoVLANtagging.
 598                    VLAN information tagged by TFC' VID, CFI fields. */
 599                 dw32(MACCtrl, dr32(MACCtrl) | AutoVLANuntagging);
 600         }
 601 
 602         /* Start Tx/Rx */
 603         dw32(MACCtrl, dr32(MACCtrl) | StatsEnable | RxEnable | TxEnable);
 604 
 605         macctrl = 0;
 606         macctrl |= (np->vlan) ? AutoVLANuntagging : 0;
 607         macctrl |= (np->full_duplex) ? DuplexSelect : 0;
 608         macctrl |= (np->tx_flow) ? TxFlowControlEnable : 0;
 609         macctrl |= (np->rx_flow) ? RxFlowControlEnable : 0;
 610         dw16(MACCtrl, macctrl);
 611 }
 612 
 613 static void rio_hw_stop(struct net_device *dev)
 614 {
 615         struct netdev_private *np = netdev_priv(dev);
 616         void __iomem *ioaddr = np->ioaddr;
 617 
 618         /* Disable interrupts */
 619         dw16(IntEnable, 0);
 620 
 621         /* Stop Tx and Rx logics */
 622         dw32(MACCtrl, TxDisable | RxDisable | StatsDisable);
 623 }
 624 
 625 static int rio_open(struct net_device *dev)
 626 {
 627         struct netdev_private *np = netdev_priv(dev);
 628         const int irq = np->pdev->irq;
 629         int i;
 630 
 631         i = alloc_list(dev);
 632         if (i)
 633                 return i;
 634 
 635         rio_hw_init(dev);
 636 
 637         i = request_irq(irq, rio_interrupt, IRQF_SHARED, dev->name, dev);
 638         if (i) {
 639                 rio_hw_stop(dev);
 640                 free_list(dev);
 641                 return i;
 642         }
 643 
 644         timer_setup(&np->timer, rio_timer, 0);
 645         np->timer.expires = jiffies + 1 * HZ;
 646         add_timer(&np->timer);
 647 
 648         netif_start_queue (dev);
 649 
 650         dl2k_enable_int(np);
 651         return 0;
 652 }
 653 
 654 static void
 655 rio_timer (struct timer_list *t)
 656 {
 657         struct netdev_private *np = from_timer(np, t, timer);
 658         struct net_device *dev = pci_get_drvdata(np->pdev);
 659         unsigned int entry;
 660         int next_tick = 1*HZ;
 661         unsigned long flags;
 662 
 663         spin_lock_irqsave(&np->rx_lock, flags);
 664         /* Recover rx ring exhausted error */
 665         if (np->cur_rx - np->old_rx >= RX_RING_SIZE) {
 666                 printk(KERN_INFO "Try to recover rx ring exhausted...\n");
 667                 /* Re-allocate skbuffs to fill the descriptor ring */
 668                 for (; np->cur_rx - np->old_rx > 0; np->old_rx++) {
 669                         struct sk_buff *skb;
 670                         entry = np->old_rx % RX_RING_SIZE;
 671                         /* Dropped packets don't need to re-allocate */
 672                         if (np->rx_skbuff[entry] == NULL) {
 673                                 skb = netdev_alloc_skb_ip_align(dev,
 674                                                                 np->rx_buf_sz);
 675                                 if (skb == NULL) {
 676                                         np->rx_ring[entry].fraginfo = 0;
 677                                         printk (KERN_INFO
 678                                                 "%s: Still unable to re-allocate Rx skbuff.#%d\n",
 679                                                 dev->name, entry);
 680                                         break;
 681                                 }
 682                                 np->rx_skbuff[entry] = skb;
 683                                 np->rx_ring[entry].fraginfo =
 684                                     cpu_to_le64 (pci_map_single
 685                                          (np->pdev, skb->data, np->rx_buf_sz,
 686                                           PCI_DMA_FROMDEVICE));
 687                         }
 688                         np->rx_ring[entry].fraginfo |=
 689                             cpu_to_le64((u64)np->rx_buf_sz << 48);
 690                         np->rx_ring[entry].status = 0;
 691                 } /* end for */
 692         } /* end if */
 693         spin_unlock_irqrestore (&np->rx_lock, flags);
 694         np->timer.expires = jiffies + next_tick;
 695         add_timer(&np->timer);
 696 }
 697 
 698 static void
 699 rio_tx_timeout (struct net_device *dev)
 700 {
 701         struct netdev_private *np = netdev_priv(dev);
 702         void __iomem *ioaddr = np->ioaddr;
 703 
 704         printk (KERN_INFO "%s: Tx timed out (%4.4x), is buffer full?\n",
 705                 dev->name, dr32(TxStatus));
 706         rio_free_tx(dev, 0);
 707         dev->if_port = 0;
 708         netif_trans_update(dev); /* prevent tx timeout */
 709 }
 710 
 711 static netdev_tx_t
 712 start_xmit (struct sk_buff *skb, struct net_device *dev)
 713 {
 714         struct netdev_private *np = netdev_priv(dev);
 715         void __iomem *ioaddr = np->ioaddr;
 716         struct netdev_desc *txdesc;
 717         unsigned entry;
 718         u64 tfc_vlan_tag = 0;
 719 
 720         if (np->link_status == 0) {     /* Link Down */
 721                 dev_kfree_skb(skb);
 722                 return NETDEV_TX_OK;
 723         }
 724         entry = np->cur_tx % TX_RING_SIZE;
 725         np->tx_skbuff[entry] = skb;
 726         txdesc = &np->tx_ring[entry];
 727 
 728 #if 0
 729         if (skb->ip_summed == CHECKSUM_PARTIAL) {
 730                 txdesc->status |=
 731                     cpu_to_le64 (TCPChecksumEnable | UDPChecksumEnable |
 732                                  IPChecksumEnable);
 733         }
 734 #endif
 735         if (np->vlan) {
 736                 tfc_vlan_tag = VLANTagInsert |
 737                     ((u64)np->vlan << 32) |
 738                     ((u64)skb->priority << 45);
 739         }
 740         txdesc->fraginfo = cpu_to_le64 (pci_map_single (np->pdev, skb->data,
 741                                                         skb->len,
 742                                                         PCI_DMA_TODEVICE));
 743         txdesc->fraginfo |= cpu_to_le64((u64)skb->len << 48);
 744 
 745         /* DL2K bug: DMA fails to get next descriptor ptr in 10Mbps mode
 746          * Work around: Always use 1 descriptor in 10Mbps mode */
 747         if (entry % np->tx_coalesce == 0 || np->speed == 10)
 748                 txdesc->status = cpu_to_le64 (entry | tfc_vlan_tag |
 749                                               WordAlignDisable |
 750                                               TxDMAIndicate |
 751                                               (1 << FragCountShift));
 752         else
 753                 txdesc->status = cpu_to_le64 (entry | tfc_vlan_tag |
 754                                               WordAlignDisable |
 755                                               (1 << FragCountShift));
 756 
 757         /* TxDMAPollNow */
 758         dw32(DMACtrl, dr32(DMACtrl) | 0x00001000);
 759         /* Schedule ISR */
 760         dw32(CountDown, 10000);
 761         np->cur_tx = (np->cur_tx + 1) % TX_RING_SIZE;
 762         if ((np->cur_tx - np->old_tx + TX_RING_SIZE) % TX_RING_SIZE
 763                         < TX_QUEUE_LEN - 1 && np->speed != 10) {
 764                 /* do nothing */
 765         } else if (!netif_queue_stopped(dev)) {
 766                 netif_stop_queue (dev);
 767         }
 768 
 769         /* The first TFDListPtr */
 770         if (!dr32(TFDListPtr0)) {
 771                 dw32(TFDListPtr0, np->tx_ring_dma +
 772                      entry * sizeof (struct netdev_desc));
 773                 dw32(TFDListPtr1, 0);
 774         }
 775 
 776         return NETDEV_TX_OK;
 777 }
 778 
 779 static irqreturn_t
 780 rio_interrupt (int irq, void *dev_instance)
 781 {
 782         struct net_device *dev = dev_instance;
 783         struct netdev_private *np = netdev_priv(dev);
 784         void __iomem *ioaddr = np->ioaddr;
 785         unsigned int_status;
 786         int cnt = max_intrloop;
 787         int handled = 0;
 788 
 789         while (1) {
 790                 int_status = dr16(IntStatus);
 791                 dw16(IntStatus, int_status);
 792                 int_status &= DEFAULT_INTR;
 793                 if (int_status == 0 || --cnt < 0)
 794                         break;
 795                 handled = 1;
 796                 /* Processing received packets */
 797                 if (int_status & RxDMAComplete)
 798                         receive_packet (dev);
 799                 /* TxDMAComplete interrupt */
 800                 if ((int_status & (TxDMAComplete|IntRequested))) {
 801                         int tx_status;
 802                         tx_status = dr32(TxStatus);
 803                         if (tx_status & 0x01)
 804                                 tx_error (dev, tx_status);
 805                         /* Free used tx skbuffs */
 806                         rio_free_tx (dev, 1);
 807                 }
 808 
 809                 /* Handle uncommon events */
 810                 if (int_status &
 811                     (HostError | LinkEvent | UpdateStats))
 812                         rio_error (dev, int_status);
 813         }
 814         if (np->cur_tx != np->old_tx)
 815                 dw32(CountDown, 100);
 816         return IRQ_RETVAL(handled);
 817 }
 818 
 819 static void
 820 rio_free_tx (struct net_device *dev, int irq)
 821 {
 822         struct netdev_private *np = netdev_priv(dev);
 823         int entry = np->old_tx % TX_RING_SIZE;
 824         int tx_use = 0;
 825         unsigned long flag = 0;
 826 
 827         if (irq)
 828                 spin_lock(&np->tx_lock);
 829         else
 830                 spin_lock_irqsave(&np->tx_lock, flag);
 831 
 832         /* Free used tx skbuffs */
 833         while (entry != np->cur_tx) {
 834                 struct sk_buff *skb;
 835 
 836                 if (!(np->tx_ring[entry].status & cpu_to_le64(TFDDone)))
 837                         break;
 838                 skb = np->tx_skbuff[entry];
 839                 pci_unmap_single (np->pdev,
 840                                   desc_to_dma(&np->tx_ring[entry]),
 841                                   skb->len, PCI_DMA_TODEVICE);
 842                 if (irq)
 843                         dev_consume_skb_irq(skb);
 844                 else
 845                         dev_kfree_skb(skb);
 846 
 847                 np->tx_skbuff[entry] = NULL;
 848                 entry = (entry + 1) % TX_RING_SIZE;
 849                 tx_use++;
 850         }
 851         if (irq)
 852                 spin_unlock(&np->tx_lock);
 853         else
 854                 spin_unlock_irqrestore(&np->tx_lock, flag);
 855         np->old_tx = entry;
 856 
 857         /* If the ring is no longer full, clear tx_full and
 858            call netif_wake_queue() */
 859 
 860         if (netif_queue_stopped(dev) &&
 861             ((np->cur_tx - np->old_tx + TX_RING_SIZE) % TX_RING_SIZE
 862             < TX_QUEUE_LEN - 1 || np->speed == 10)) {
 863                 netif_wake_queue (dev);
 864         }
 865 }
 866 
 867 static void
 868 tx_error (struct net_device *dev, int tx_status)
 869 {
 870         struct netdev_private *np = netdev_priv(dev);
 871         void __iomem *ioaddr = np->ioaddr;
 872         int frame_id;
 873         int i;
 874 
 875         frame_id = (tx_status & 0xffff0000);
 876         printk (KERN_ERR "%s: Transmit error, TxStatus %4.4x, FrameId %d.\n",
 877                 dev->name, tx_status, frame_id);
 878         dev->stats.tx_errors++;
 879         /* Ttransmit Underrun */
 880         if (tx_status & 0x10) {
 881                 dev->stats.tx_fifo_errors++;
 882                 dw16(TxStartThresh, dr16(TxStartThresh) + 0x10);
 883                 /* Transmit Underrun need to set TxReset, DMARest, FIFOReset */
 884                 dw16(ASICCtrl + 2,
 885                      TxReset | DMAReset | FIFOReset | NetworkReset);
 886                 /* Wait for ResetBusy bit clear */
 887                 for (i = 50; i > 0; i--) {
 888                         if (!(dr16(ASICCtrl + 2) & ResetBusy))
 889                                 break;
 890                         mdelay (1);
 891                 }
 892                 rio_set_led_mode(dev);
 893                 rio_free_tx (dev, 1);
 894                 /* Reset TFDListPtr */
 895                 dw32(TFDListPtr0, np->tx_ring_dma +
 896                      np->old_tx * sizeof (struct netdev_desc));
 897                 dw32(TFDListPtr1, 0);
 898 
 899                 /* Let TxStartThresh stay default value */
 900         }
 901         /* Late Collision */
 902         if (tx_status & 0x04) {
 903                 dev->stats.tx_fifo_errors++;
 904                 /* TxReset and clear FIFO */
 905                 dw16(ASICCtrl + 2, TxReset | FIFOReset);
 906                 /* Wait reset done */
 907                 for (i = 50; i > 0; i--) {
 908                         if (!(dr16(ASICCtrl + 2) & ResetBusy))
 909                                 break;
 910                         mdelay (1);
 911                 }
 912                 rio_set_led_mode(dev);
 913                 /* Let TxStartThresh stay default value */
 914         }
 915         /* Maximum Collisions */
 916         if (tx_status & 0x08)
 917                 dev->stats.collisions++;
 918         /* Restart the Tx */
 919         dw32(MACCtrl, dr16(MACCtrl) | TxEnable);
 920 }
 921 
 922 static int
 923 receive_packet (struct net_device *dev)
 924 {
 925         struct netdev_private *np = netdev_priv(dev);
 926         int entry = np->cur_rx % RX_RING_SIZE;
 927         int cnt = 30;
 928 
 929         /* If RFDDone, FrameStart and FrameEnd set, there is a new packet in. */
 930         while (1) {
 931                 struct netdev_desc *desc = &np->rx_ring[entry];
 932                 int pkt_len;
 933                 u64 frame_status;
 934 
 935                 if (!(desc->status & cpu_to_le64(RFDDone)) ||
 936                     !(desc->status & cpu_to_le64(FrameStart)) ||
 937                     !(desc->status & cpu_to_le64(FrameEnd)))
 938                         break;
 939 
 940                 /* Chip omits the CRC. */
 941                 frame_status = le64_to_cpu(desc->status);
 942                 pkt_len = frame_status & 0xffff;
 943                 if (--cnt < 0)
 944                         break;
 945                 /* Update rx error statistics, drop packet. */
 946                 if (frame_status & RFS_Errors) {
 947                         dev->stats.rx_errors++;
 948                         if (frame_status & (RxRuntFrame | RxLengthError))
 949                                 dev->stats.rx_length_errors++;
 950                         if (frame_status & RxFCSError)
 951                                 dev->stats.rx_crc_errors++;
 952                         if (frame_status & RxAlignmentError && np->speed != 1000)
 953                                 dev->stats.rx_frame_errors++;
 954                         if (frame_status & RxFIFOOverrun)
 955                                 dev->stats.rx_fifo_errors++;
 956                 } else {
 957                         struct sk_buff *skb;
 958 
 959                         /* Small skbuffs for short packets */
 960                         if (pkt_len > copy_thresh) {
 961                                 pci_unmap_single (np->pdev,
 962                                                   desc_to_dma(desc),
 963                                                   np->rx_buf_sz,
 964                                                   PCI_DMA_FROMDEVICE);
 965                                 skb_put (skb = np->rx_skbuff[entry], pkt_len);
 966                                 np->rx_skbuff[entry] = NULL;
 967                         } else if ((skb = netdev_alloc_skb_ip_align(dev, pkt_len))) {
 968                                 pci_dma_sync_single_for_cpu(np->pdev,
 969                                                             desc_to_dma(desc),
 970                                                             np->rx_buf_sz,
 971                                                             PCI_DMA_FROMDEVICE);
 972                                 skb_copy_to_linear_data (skb,
 973                                                   np->rx_skbuff[entry]->data,
 974                                                   pkt_len);
 975                                 skb_put (skb, pkt_len);
 976                                 pci_dma_sync_single_for_device(np->pdev,
 977                                                                desc_to_dma(desc),
 978                                                                np->rx_buf_sz,
 979                                                                PCI_DMA_FROMDEVICE);
 980                         }
 981                         skb->protocol = eth_type_trans (skb, dev);
 982 #if 0
 983                         /* Checksum done by hw, but csum value unavailable. */
 984                         if (np->pdev->pci_rev_id >= 0x0c &&
 985                                 !(frame_status & (TCPError | UDPError | IPError))) {
 986                                 skb->ip_summed = CHECKSUM_UNNECESSARY;
 987                         }
 988 #endif
 989                         netif_rx (skb);
 990                 }
 991                 entry = (entry + 1) % RX_RING_SIZE;
 992         }
 993         spin_lock(&np->rx_lock);
 994         np->cur_rx = entry;
 995         /* Re-allocate skbuffs to fill the descriptor ring */
 996         entry = np->old_rx;
 997         while (entry != np->cur_rx) {
 998                 struct sk_buff *skb;
 999                 /* Dropped packets don't need to re-allocate */
1000                 if (np->rx_skbuff[entry] == NULL) {
1001                         skb = netdev_alloc_skb_ip_align(dev, np->rx_buf_sz);
1002                         if (skb == NULL) {
1003                                 np->rx_ring[entry].fraginfo = 0;
1004                                 printk (KERN_INFO
1005                                         "%s: receive_packet: "
1006                                         "Unable to re-allocate Rx skbuff.#%d\n",
1007                                         dev->name, entry);
1008                                 break;
1009                         }
1010                         np->rx_skbuff[entry] = skb;
1011                         np->rx_ring[entry].fraginfo =
1012                             cpu_to_le64 (pci_map_single
1013                                          (np->pdev, skb->data, np->rx_buf_sz,
1014                                           PCI_DMA_FROMDEVICE));
1015                 }
1016                 np->rx_ring[entry].fraginfo |=
1017                     cpu_to_le64((u64)np->rx_buf_sz << 48);
1018                 np->rx_ring[entry].status = 0;
1019                 entry = (entry + 1) % RX_RING_SIZE;
1020         }
1021         np->old_rx = entry;
1022         spin_unlock(&np->rx_lock);
1023         return 0;
1024 }
1025 
1026 static void
1027 rio_error (struct net_device *dev, int int_status)
1028 {
1029         struct netdev_private *np = netdev_priv(dev);
1030         void __iomem *ioaddr = np->ioaddr;
1031         u16 macctrl;
1032 
1033         /* Link change event */
1034         if (int_status & LinkEvent) {
1035                 if (mii_wait_link (dev, 10) == 0) {
1036                         printk (KERN_INFO "%s: Link up\n", dev->name);
1037                         if (np->phy_media)
1038                                 mii_get_media_pcs (dev);
1039                         else
1040                                 mii_get_media (dev);
1041                         if (np->speed == 1000)
1042                                 np->tx_coalesce = tx_coalesce;
1043                         else
1044                                 np->tx_coalesce = 1;
1045                         macctrl = 0;
1046                         macctrl |= (np->vlan) ? AutoVLANuntagging : 0;
1047                         macctrl |= (np->full_duplex) ? DuplexSelect : 0;
1048                         macctrl |= (np->tx_flow) ?
1049                                 TxFlowControlEnable : 0;
1050                         macctrl |= (np->rx_flow) ?
1051                                 RxFlowControlEnable : 0;
1052                         dw16(MACCtrl, macctrl);
1053                         np->link_status = 1;
1054                         netif_carrier_on(dev);
1055                 } else {
1056                         printk (KERN_INFO "%s: Link off\n", dev->name);
1057                         np->link_status = 0;
1058                         netif_carrier_off(dev);
1059                 }
1060         }
1061 
1062         /* UpdateStats statistics registers */
1063         if (int_status & UpdateStats) {
1064                 get_stats (dev);
1065         }
1066 
1067         /* PCI Error, a catastronphic error related to the bus interface
1068            occurs, set GlobalReset and HostReset to reset. */
1069         if (int_status & HostError) {
1070                 printk (KERN_ERR "%s: HostError! IntStatus %4.4x.\n",
1071                         dev->name, int_status);
1072                 dw16(ASICCtrl + 2, GlobalReset | HostReset);
1073                 mdelay (500);
1074                 rio_set_led_mode(dev);
1075         }
1076 }
1077 
1078 static struct net_device_stats *
1079 get_stats (struct net_device *dev)
1080 {
1081         struct netdev_private *np = netdev_priv(dev);
1082         void __iomem *ioaddr = np->ioaddr;
1083 #ifdef MEM_MAPPING
1084         int i;
1085 #endif
1086         unsigned int stat_reg;
1087 
1088         /* All statistics registers need to be acknowledged,
1089            else statistic overflow could cause problems */
1090 
1091         dev->stats.rx_packets += dr32(FramesRcvOk);
1092         dev->stats.tx_packets += dr32(FramesXmtOk);
1093         dev->stats.rx_bytes += dr32(OctetRcvOk);
1094         dev->stats.tx_bytes += dr32(OctetXmtOk);
1095 
1096         dev->stats.multicast = dr32(McstFramesRcvdOk);
1097         dev->stats.collisions += dr32(SingleColFrames)
1098                              +  dr32(MultiColFrames);
1099 
1100         /* detailed tx errors */
1101         stat_reg = dr16(FramesAbortXSColls);
1102         dev->stats.tx_aborted_errors += stat_reg;
1103         dev->stats.tx_errors += stat_reg;
1104 
1105         stat_reg = dr16(CarrierSenseErrors);
1106         dev->stats.tx_carrier_errors += stat_reg;
1107         dev->stats.tx_errors += stat_reg;
1108 
1109         /* Clear all other statistic register. */
1110         dr32(McstOctetXmtOk);
1111         dr16(BcstFramesXmtdOk);
1112         dr32(McstFramesXmtdOk);
1113         dr16(BcstFramesRcvdOk);
1114         dr16(MacControlFramesRcvd);
1115         dr16(FrameTooLongErrors);
1116         dr16(InRangeLengthErrors);
1117         dr16(FramesCheckSeqErrors);
1118         dr16(FramesLostRxErrors);
1119         dr32(McstOctetXmtOk);
1120         dr32(BcstOctetXmtOk);
1121         dr32(McstFramesXmtdOk);
1122         dr32(FramesWDeferredXmt);
1123         dr32(LateCollisions);
1124         dr16(BcstFramesXmtdOk);
1125         dr16(MacControlFramesXmtd);
1126         dr16(FramesWEXDeferal);
1127 
1128 #ifdef MEM_MAPPING
1129         for (i = 0x100; i <= 0x150; i += 4)
1130                 dr32(i);
1131 #endif
1132         dr16(TxJumboFrames);
1133         dr16(RxJumboFrames);
1134         dr16(TCPCheckSumErrors);
1135         dr16(UDPCheckSumErrors);
1136         dr16(IPCheckSumErrors);
1137         return &dev->stats;
1138 }
1139 
1140 static int
1141 clear_stats (struct net_device *dev)
1142 {
1143         struct netdev_private *np = netdev_priv(dev);
1144         void __iomem *ioaddr = np->ioaddr;
1145 #ifdef MEM_MAPPING
1146         int i;
1147 #endif
1148 
1149         /* All statistics registers need to be acknowledged,
1150            else statistic overflow could cause problems */
1151         dr32(FramesRcvOk);
1152         dr32(FramesXmtOk);
1153         dr32(OctetRcvOk);
1154         dr32(OctetXmtOk);
1155 
1156         dr32(McstFramesRcvdOk);
1157         dr32(SingleColFrames);
1158         dr32(MultiColFrames);
1159         dr32(LateCollisions);
1160         /* detailed rx errors */
1161         dr16(FrameTooLongErrors);
1162         dr16(InRangeLengthErrors);
1163         dr16(FramesCheckSeqErrors);
1164         dr16(FramesLostRxErrors);
1165 
1166         /* detailed tx errors */
1167         dr16(FramesAbortXSColls);
1168         dr16(CarrierSenseErrors);
1169 
1170         /* Clear all other statistic register. */
1171         dr32(McstOctetXmtOk);
1172         dr16(BcstFramesXmtdOk);
1173         dr32(McstFramesXmtdOk);
1174         dr16(BcstFramesRcvdOk);
1175         dr16(MacControlFramesRcvd);
1176         dr32(McstOctetXmtOk);
1177         dr32(BcstOctetXmtOk);
1178         dr32(McstFramesXmtdOk);
1179         dr32(FramesWDeferredXmt);
1180         dr16(BcstFramesXmtdOk);
1181         dr16(MacControlFramesXmtd);
1182         dr16(FramesWEXDeferal);
1183 #ifdef MEM_MAPPING
1184         for (i = 0x100; i <= 0x150; i += 4)
1185                 dr32(i);
1186 #endif
1187         dr16(TxJumboFrames);
1188         dr16(RxJumboFrames);
1189         dr16(TCPCheckSumErrors);
1190         dr16(UDPCheckSumErrors);
1191         dr16(IPCheckSumErrors);
1192         return 0;
1193 }
1194 
1195 static void
1196 set_multicast (struct net_device *dev)
1197 {
1198         struct netdev_private *np = netdev_priv(dev);
1199         void __iomem *ioaddr = np->ioaddr;
1200         u32 hash_table[2];
1201         u16 rx_mode = 0;
1202 
1203         hash_table[0] = hash_table[1] = 0;
1204         /* RxFlowcontrol DA: 01-80-C2-00-00-01. Hash index=0x39 */
1205         hash_table[1] |= 0x02000000;
1206         if (dev->flags & IFF_PROMISC) {
1207                 /* Receive all frames promiscuously. */
1208                 rx_mode = ReceiveAllFrames;
1209         } else if ((dev->flags & IFF_ALLMULTI) ||
1210                         (netdev_mc_count(dev) > multicast_filter_limit)) {
1211                 /* Receive broadcast and multicast frames */
1212                 rx_mode = ReceiveBroadcast | ReceiveMulticast | ReceiveUnicast;
1213         } else if (!netdev_mc_empty(dev)) {
1214                 struct netdev_hw_addr *ha;
1215                 /* Receive broadcast frames and multicast frames filtering
1216                    by Hashtable */
1217                 rx_mode =
1218                     ReceiveBroadcast | ReceiveMulticastHash | ReceiveUnicast;
1219                 netdev_for_each_mc_addr(ha, dev) {
1220                         int bit, index = 0;
1221                         int crc = ether_crc_le(ETH_ALEN, ha->addr);
1222                         /* The inverted high significant 6 bits of CRC are
1223                            used as an index to hashtable */
1224                         for (bit = 0; bit < 6; bit++)
1225                                 if (crc & (1 << (31 - bit)))
1226                                         index |= (1 << bit);
1227                         hash_table[index / 32] |= (1 << (index % 32));
1228                 }
1229         } else {
1230                 rx_mode = ReceiveBroadcast | ReceiveUnicast;
1231         }
1232         if (np->vlan) {
1233                 /* ReceiveVLANMatch field in ReceiveMode */
1234                 rx_mode |= ReceiveVLANMatch;
1235         }
1236 
1237         dw32(HashTable0, hash_table[0]);
1238         dw32(HashTable1, hash_table[1]);
1239         dw16(ReceiveMode, rx_mode);
1240 }
1241 
1242 static void rio_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1243 {
1244         struct netdev_private *np = netdev_priv(dev);
1245 
1246         strlcpy(info->driver, "dl2k", sizeof(info->driver));
1247         strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1248         strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
1249 }
1250 
1251 static int rio_get_link_ksettings(struct net_device *dev,
1252                                   struct ethtool_link_ksettings *cmd)
1253 {
1254         struct netdev_private *np = netdev_priv(dev);
1255         u32 supported, advertising;
1256 
1257         if (np->phy_media) {
1258                 /* fiber device */
1259                 supported = SUPPORTED_Autoneg | SUPPORTED_FIBRE;
1260                 advertising = ADVERTISED_Autoneg | ADVERTISED_FIBRE;
1261                 cmd->base.port = PORT_FIBRE;
1262         } else {
1263                 /* copper device */
1264                 supported = SUPPORTED_10baseT_Half |
1265                         SUPPORTED_10baseT_Full | SUPPORTED_100baseT_Half
1266                         | SUPPORTED_100baseT_Full | SUPPORTED_1000baseT_Full |
1267                         SUPPORTED_Autoneg | SUPPORTED_MII;
1268                 advertising = ADVERTISED_10baseT_Half |
1269                         ADVERTISED_10baseT_Full | ADVERTISED_100baseT_Half |
1270                         ADVERTISED_100baseT_Full | ADVERTISED_1000baseT_Full |
1271                         ADVERTISED_Autoneg | ADVERTISED_MII;
1272                 cmd->base.port = PORT_MII;
1273         }
1274         if (np->link_status) {
1275                 cmd->base.speed = np->speed;
1276                 cmd->base.duplex = np->full_duplex ? DUPLEX_FULL : DUPLEX_HALF;
1277         } else {
1278                 cmd->base.speed = SPEED_UNKNOWN;
1279                 cmd->base.duplex = DUPLEX_UNKNOWN;
1280         }
1281         if (np->an_enable)
1282                 cmd->base.autoneg = AUTONEG_ENABLE;
1283         else
1284                 cmd->base.autoneg = AUTONEG_DISABLE;
1285 
1286         cmd->base.phy_address = np->phy_addr;
1287 
1288         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1289                                                 supported);
1290         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1291                                                 advertising);
1292 
1293         return 0;
1294 }
1295 
1296 static int rio_set_link_ksettings(struct net_device *dev,
1297                                   const struct ethtool_link_ksettings *cmd)
1298 {
1299         struct netdev_private *np = netdev_priv(dev);
1300         u32 speed = cmd->base.speed;
1301         u8 duplex = cmd->base.duplex;
1302 
1303         netif_carrier_off(dev);
1304         if (cmd->base.autoneg == AUTONEG_ENABLE) {
1305                 if (np->an_enable) {
1306                         return 0;
1307                 } else {
1308                         np->an_enable = 1;
1309                         mii_set_media(dev);
1310                         return 0;
1311                 }
1312         } else {
1313                 np->an_enable = 0;
1314                 if (np->speed == 1000) {
1315                         speed = SPEED_100;
1316                         duplex = DUPLEX_FULL;
1317                         printk("Warning!! Can't disable Auto negotiation in 1000Mbps, change to Manual 100Mbps, Full duplex.\n");
1318                 }
1319                 switch (speed) {
1320                 case SPEED_10:
1321                         np->speed = 10;
1322                         np->full_duplex = (duplex == DUPLEX_FULL);
1323                         break;
1324                 case SPEED_100:
1325                         np->speed = 100;
1326                         np->full_duplex = (duplex == DUPLEX_FULL);
1327                         break;
1328                 case SPEED_1000: /* not supported */
1329                 default:
1330                         return -EINVAL;
1331                 }
1332                 mii_set_media(dev);
1333         }
1334         return 0;
1335 }
1336 
1337 static u32 rio_get_link(struct net_device *dev)
1338 {
1339         struct netdev_private *np = netdev_priv(dev);
1340         return np->link_status;
1341 }
1342 
1343 static const struct ethtool_ops ethtool_ops = {
1344         .get_drvinfo = rio_get_drvinfo,
1345         .get_link = rio_get_link,
1346         .get_link_ksettings = rio_get_link_ksettings,
1347         .set_link_ksettings = rio_set_link_ksettings,
1348 };
1349 
1350 static int
1351 rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
1352 {
1353         int phy_addr;
1354         struct netdev_private *np = netdev_priv(dev);
1355         struct mii_ioctl_data *miidata = if_mii(rq);
1356 
1357         phy_addr = np->phy_addr;
1358         switch (cmd) {
1359         case SIOCGMIIPHY:
1360                 miidata->phy_id = phy_addr;
1361                 break;
1362         case SIOCGMIIREG:
1363                 miidata->val_out = mii_read (dev, phy_addr, miidata->reg_num);
1364                 break;
1365         case SIOCSMIIREG:
1366                 if (!capable(CAP_NET_ADMIN))
1367                         return -EPERM;
1368                 mii_write (dev, phy_addr, miidata->reg_num, miidata->val_in);
1369                 break;
1370         default:
1371                 return -EOPNOTSUPP;
1372         }
1373         return 0;
1374 }
1375 
1376 #define EEP_READ 0x0200
1377 #define EEP_BUSY 0x8000
1378 /* Read the EEPROM word */
1379 /* We use I/O instruction to read/write eeprom to avoid fail on some machines */
1380 static int read_eeprom(struct netdev_private *np, int eep_addr)
1381 {
1382         void __iomem *ioaddr = np->eeprom_addr;
1383         int i = 1000;
1384 
1385         dw16(EepromCtrl, EEP_READ | (eep_addr & 0xff));
1386         while (i-- > 0) {
1387                 if (!(dr16(EepromCtrl) & EEP_BUSY))
1388                         return dr16(EepromData);
1389         }
1390         return 0;
1391 }
1392 
1393 enum phy_ctrl_bits {
1394         MII_READ = 0x00, MII_CLK = 0x01, MII_DATA1 = 0x02, MII_WRITE = 0x04,
1395         MII_DUPLEX = 0x08,
1396 };
1397 
1398 #define mii_delay() dr8(PhyCtrl)
1399 static void
1400 mii_sendbit (struct net_device *dev, u32 data)
1401 {
1402         struct netdev_private *np = netdev_priv(dev);
1403         void __iomem *ioaddr = np->ioaddr;
1404 
1405         data = ((data) ? MII_DATA1 : 0) | (dr8(PhyCtrl) & 0xf8) | MII_WRITE;
1406         dw8(PhyCtrl, data);
1407         mii_delay ();
1408         dw8(PhyCtrl, data | MII_CLK);
1409         mii_delay ();
1410 }
1411 
1412 static int
1413 mii_getbit (struct net_device *dev)
1414 {
1415         struct netdev_private *np = netdev_priv(dev);
1416         void __iomem *ioaddr = np->ioaddr;
1417         u8 data;
1418 
1419         data = (dr8(PhyCtrl) & 0xf8) | MII_READ;
1420         dw8(PhyCtrl, data);
1421         mii_delay ();
1422         dw8(PhyCtrl, data | MII_CLK);
1423         mii_delay ();
1424         return (dr8(PhyCtrl) >> 1) & 1;
1425 }
1426 
1427 static void
1428 mii_send_bits (struct net_device *dev, u32 data, int len)
1429 {
1430         int i;
1431 
1432         for (i = len - 1; i >= 0; i--) {
1433                 mii_sendbit (dev, data & (1 << i));
1434         }
1435 }
1436 
1437 static int
1438 mii_read (struct net_device *dev, int phy_addr, int reg_num)
1439 {
1440         u32 cmd;
1441         int i;
1442         u32 retval = 0;
1443 
1444         /* Preamble */
1445         mii_send_bits (dev, 0xffffffff, 32);
1446         /* ST(2), OP(2), ADDR(5), REG#(5), TA(2), Data(16) total 32 bits */
1447         /* ST,OP = 0110'b for read operation */
1448         cmd = (0x06 << 10 | phy_addr << 5 | reg_num);
1449         mii_send_bits (dev, cmd, 14);
1450         /* Turnaround */
1451         if (mii_getbit (dev))
1452                 goto err_out;
1453         /* Read data */
1454         for (i = 0; i < 16; i++) {
1455                 retval |= mii_getbit (dev);
1456                 retval <<= 1;
1457         }
1458         /* End cycle */
1459         mii_getbit (dev);
1460         return (retval >> 1) & 0xffff;
1461 
1462       err_out:
1463         return 0;
1464 }
1465 static int
1466 mii_write (struct net_device *dev, int phy_addr, int reg_num, u16 data)
1467 {
1468         u32 cmd;
1469 
1470         /* Preamble */
1471         mii_send_bits (dev, 0xffffffff, 32);
1472         /* ST(2), OP(2), ADDR(5), REG#(5), TA(2), Data(16) total 32 bits */
1473         /* ST,OP,AAAAA,RRRRR,TA = 0101xxxxxxxxxx10'b = 0x5002 for write */
1474         cmd = (0x5002 << 16) | (phy_addr << 23) | (reg_num << 18) | data;
1475         mii_send_bits (dev, cmd, 32);
1476         /* End cycle */
1477         mii_getbit (dev);
1478         return 0;
1479 }
1480 static int
1481 mii_wait_link (struct net_device *dev, int wait)
1482 {
1483         __u16 bmsr;
1484         int phy_addr;
1485         struct netdev_private *np;
1486 
1487         np = netdev_priv(dev);
1488         phy_addr = np->phy_addr;
1489 
1490         do {
1491                 bmsr = mii_read (dev, phy_addr, MII_BMSR);
1492                 if (bmsr & BMSR_LSTATUS)
1493                         return 0;
1494                 mdelay (1);
1495         } while (--wait > 0);
1496         return -1;
1497 }
1498 static int
1499 mii_get_media (struct net_device *dev)
1500 {
1501         __u16 negotiate;
1502         __u16 bmsr;
1503         __u16 mscr;
1504         __u16 mssr;
1505         int phy_addr;
1506         struct netdev_private *np;
1507 
1508         np = netdev_priv(dev);
1509         phy_addr = np->phy_addr;
1510 
1511         bmsr = mii_read (dev, phy_addr, MII_BMSR);
1512         if (np->an_enable) {
1513                 if (!(bmsr & BMSR_ANEGCOMPLETE)) {
1514                         /* Auto-Negotiation not completed */
1515                         return -1;
1516                 }
1517                 negotiate = mii_read (dev, phy_addr, MII_ADVERTISE) &
1518                         mii_read (dev, phy_addr, MII_LPA);
1519                 mscr = mii_read (dev, phy_addr, MII_CTRL1000);
1520                 mssr = mii_read (dev, phy_addr, MII_STAT1000);
1521                 if (mscr & ADVERTISE_1000FULL && mssr & LPA_1000FULL) {
1522                         np->speed = 1000;
1523                         np->full_duplex = 1;
1524                         printk (KERN_INFO "Auto 1000 Mbps, Full duplex\n");
1525                 } else if (mscr & ADVERTISE_1000HALF && mssr & LPA_1000HALF) {
1526                         np->speed = 1000;
1527                         np->full_duplex = 0;
1528                         printk (KERN_INFO "Auto 1000 Mbps, Half duplex\n");
1529                 } else if (negotiate & ADVERTISE_100FULL) {
1530                         np->speed = 100;
1531                         np->full_duplex = 1;
1532                         printk (KERN_INFO "Auto 100 Mbps, Full duplex\n");
1533                 } else if (negotiate & ADVERTISE_100HALF) {
1534                         np->speed = 100;
1535                         np->full_duplex = 0;
1536                         printk (KERN_INFO "Auto 100 Mbps, Half duplex\n");
1537                 } else if (negotiate & ADVERTISE_10FULL) {
1538                         np->speed = 10;
1539                         np->full_duplex = 1;
1540                         printk (KERN_INFO "Auto 10 Mbps, Full duplex\n");
1541                 } else if (negotiate & ADVERTISE_10HALF) {
1542                         np->speed = 10;
1543                         np->full_duplex = 0;
1544                         printk (KERN_INFO "Auto 10 Mbps, Half duplex\n");
1545                 }
1546                 if (negotiate & ADVERTISE_PAUSE_CAP) {
1547                         np->tx_flow &= 1;
1548                         np->rx_flow &= 1;
1549                 } else if (negotiate & ADVERTISE_PAUSE_ASYM) {
1550                         np->tx_flow = 0;
1551                         np->rx_flow &= 1;
1552                 }
1553                 /* else tx_flow, rx_flow = user select  */
1554         } else {
1555                 __u16 bmcr = mii_read (dev, phy_addr, MII_BMCR);
1556                 switch (bmcr & (BMCR_SPEED100 | BMCR_SPEED1000)) {
1557                 case BMCR_SPEED1000:
1558                         printk (KERN_INFO "Operating at 1000 Mbps, ");
1559                         break;
1560                 case BMCR_SPEED100:
1561                         printk (KERN_INFO "Operating at 100 Mbps, ");
1562                         break;
1563                 case 0:
1564                         printk (KERN_INFO "Operating at 10 Mbps, ");
1565                 }
1566                 if (bmcr & BMCR_FULLDPLX) {
1567                         printk (KERN_CONT "Full duplex\n");
1568                 } else {
1569                         printk (KERN_CONT "Half duplex\n");
1570                 }
1571         }
1572         if (np->tx_flow)
1573                 printk(KERN_INFO "Enable Tx Flow Control\n");
1574         else
1575                 printk(KERN_INFO "Disable Tx Flow Control\n");
1576         if (np->rx_flow)
1577                 printk(KERN_INFO "Enable Rx Flow Control\n");
1578         else
1579                 printk(KERN_INFO "Disable Rx Flow Control\n");
1580 
1581         return 0;
1582 }
1583 
1584 static int
1585 mii_set_media (struct net_device *dev)
1586 {
1587         __u16 pscr;
1588         __u16 bmcr;
1589         __u16 bmsr;
1590         __u16 anar;
1591         int phy_addr;
1592         struct netdev_private *np;
1593         np = netdev_priv(dev);
1594         phy_addr = np->phy_addr;
1595 
1596         /* Does user set speed? */
1597         if (np->an_enable) {
1598                 /* Advertise capabilities */
1599                 bmsr = mii_read (dev, phy_addr, MII_BMSR);
1600                 anar = mii_read (dev, phy_addr, MII_ADVERTISE) &
1601                         ~(ADVERTISE_100FULL | ADVERTISE_10FULL |
1602                           ADVERTISE_100HALF | ADVERTISE_10HALF |
1603                           ADVERTISE_100BASE4);
1604                 if (bmsr & BMSR_100FULL)
1605                         anar |= ADVERTISE_100FULL;
1606                 if (bmsr & BMSR_100HALF)
1607                         anar |= ADVERTISE_100HALF;
1608                 if (bmsr & BMSR_100BASE4)
1609                         anar |= ADVERTISE_100BASE4;
1610                 if (bmsr & BMSR_10FULL)
1611                         anar |= ADVERTISE_10FULL;
1612                 if (bmsr & BMSR_10HALF)
1613                         anar |= ADVERTISE_10HALF;
1614                 anar |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
1615                 mii_write (dev, phy_addr, MII_ADVERTISE, anar);
1616 
1617                 /* Enable Auto crossover */
1618                 pscr = mii_read (dev, phy_addr, MII_PHY_SCR);
1619                 pscr |= 3 << 5; /* 11'b */
1620                 mii_write (dev, phy_addr, MII_PHY_SCR, pscr);
1621 
1622                 /* Soft reset PHY */
1623                 mii_write (dev, phy_addr, MII_BMCR, BMCR_RESET);
1624                 bmcr = BMCR_ANENABLE | BMCR_ANRESTART | BMCR_RESET;
1625                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1626                 mdelay(1);
1627         } else {
1628                 /* Force speed setting */
1629                 /* 1) Disable Auto crossover */
1630                 pscr = mii_read (dev, phy_addr, MII_PHY_SCR);
1631                 pscr &= ~(3 << 5);
1632                 mii_write (dev, phy_addr, MII_PHY_SCR, pscr);
1633 
1634                 /* 2) PHY Reset */
1635                 bmcr = mii_read (dev, phy_addr, MII_BMCR);
1636                 bmcr |= BMCR_RESET;
1637                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1638 
1639                 /* 3) Power Down */
1640                 bmcr = 0x1940;  /* must be 0x1940 */
1641                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1642                 mdelay (100);   /* wait a certain time */
1643 
1644                 /* 4) Advertise nothing */
1645                 mii_write (dev, phy_addr, MII_ADVERTISE, 0);
1646 
1647                 /* 5) Set media and Power Up */
1648                 bmcr = BMCR_PDOWN;
1649                 if (np->speed == 100) {
1650                         bmcr |= BMCR_SPEED100;
1651                         printk (KERN_INFO "Manual 100 Mbps, ");
1652                 } else if (np->speed == 10) {
1653                         printk (KERN_INFO "Manual 10 Mbps, ");
1654                 }
1655                 if (np->full_duplex) {
1656                         bmcr |= BMCR_FULLDPLX;
1657                         printk (KERN_CONT "Full duplex\n");
1658                 } else {
1659                         printk (KERN_CONT "Half duplex\n");
1660                 }
1661 #if 0
1662                 /* Set 1000BaseT Master/Slave setting */
1663                 mscr = mii_read (dev, phy_addr, MII_CTRL1000);
1664                 mscr |= MII_MSCR_CFG_ENABLE;
1665                 mscr &= ~MII_MSCR_CFG_VALUE = 0;
1666 #endif
1667                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1668                 mdelay(10);
1669         }
1670         return 0;
1671 }
1672 
1673 static int
1674 mii_get_media_pcs (struct net_device *dev)
1675 {
1676         __u16 negotiate;
1677         __u16 bmsr;
1678         int phy_addr;
1679         struct netdev_private *np;
1680 
1681         np = netdev_priv(dev);
1682         phy_addr = np->phy_addr;
1683 
1684         bmsr = mii_read (dev, phy_addr, PCS_BMSR);
1685         if (np->an_enable) {
1686                 if (!(bmsr & BMSR_ANEGCOMPLETE)) {
1687                         /* Auto-Negotiation not completed */
1688                         return -1;
1689                 }
1690                 negotiate = mii_read (dev, phy_addr, PCS_ANAR) &
1691                         mii_read (dev, phy_addr, PCS_ANLPAR);
1692                 np->speed = 1000;
1693                 if (negotiate & PCS_ANAR_FULL_DUPLEX) {
1694                         printk (KERN_INFO "Auto 1000 Mbps, Full duplex\n");
1695                         np->full_duplex = 1;
1696                 } else {
1697                         printk (KERN_INFO "Auto 1000 Mbps, half duplex\n");
1698                         np->full_duplex = 0;
1699                 }
1700                 if (negotiate & PCS_ANAR_PAUSE) {
1701                         np->tx_flow &= 1;
1702                         np->rx_flow &= 1;
1703                 } else if (negotiate & PCS_ANAR_ASYMMETRIC) {
1704                         np->tx_flow = 0;
1705                         np->rx_flow &= 1;
1706                 }
1707                 /* else tx_flow, rx_flow = user select  */
1708         } else {
1709                 __u16 bmcr = mii_read (dev, phy_addr, PCS_BMCR);
1710                 printk (KERN_INFO "Operating at 1000 Mbps, ");
1711                 if (bmcr & BMCR_FULLDPLX) {
1712                         printk (KERN_CONT "Full duplex\n");
1713                 } else {
1714                         printk (KERN_CONT "Half duplex\n");
1715                 }
1716         }
1717         if (np->tx_flow)
1718                 printk(KERN_INFO "Enable Tx Flow Control\n");
1719         else
1720                 printk(KERN_INFO "Disable Tx Flow Control\n");
1721         if (np->rx_flow)
1722                 printk(KERN_INFO "Enable Rx Flow Control\n");
1723         else
1724                 printk(KERN_INFO "Disable Rx Flow Control\n");
1725 
1726         return 0;
1727 }
1728 
1729 static int
1730 mii_set_media_pcs (struct net_device *dev)
1731 {
1732         __u16 bmcr;
1733         __u16 esr;
1734         __u16 anar;
1735         int phy_addr;
1736         struct netdev_private *np;
1737         np = netdev_priv(dev);
1738         phy_addr = np->phy_addr;
1739 
1740         /* Auto-Negotiation? */
1741         if (np->an_enable) {
1742                 /* Advertise capabilities */
1743                 esr = mii_read (dev, phy_addr, PCS_ESR);
1744                 anar = mii_read (dev, phy_addr, MII_ADVERTISE) &
1745                         ~PCS_ANAR_HALF_DUPLEX &
1746                         ~PCS_ANAR_FULL_DUPLEX;
1747                 if (esr & (MII_ESR_1000BT_HD | MII_ESR_1000BX_HD))
1748                         anar |= PCS_ANAR_HALF_DUPLEX;
1749                 if (esr & (MII_ESR_1000BT_FD | MII_ESR_1000BX_FD))
1750                         anar |= PCS_ANAR_FULL_DUPLEX;
1751                 anar |= PCS_ANAR_PAUSE | PCS_ANAR_ASYMMETRIC;
1752                 mii_write (dev, phy_addr, MII_ADVERTISE, anar);
1753 
1754                 /* Soft reset PHY */
1755                 mii_write (dev, phy_addr, MII_BMCR, BMCR_RESET);
1756                 bmcr = BMCR_ANENABLE | BMCR_ANRESTART | BMCR_RESET;
1757                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1758                 mdelay(1);
1759         } else {
1760                 /* Force speed setting */
1761                 /* PHY Reset */
1762                 bmcr = BMCR_RESET;
1763                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1764                 mdelay(10);
1765                 if (np->full_duplex) {
1766                         bmcr = BMCR_FULLDPLX;
1767                         printk (KERN_INFO "Manual full duplex\n");
1768                 } else {
1769                         bmcr = 0;
1770                         printk (KERN_INFO "Manual half duplex\n");
1771                 }
1772                 mii_write (dev, phy_addr, MII_BMCR, bmcr);
1773                 mdelay(10);
1774 
1775                 /*  Advertise nothing */
1776                 mii_write (dev, phy_addr, MII_ADVERTISE, 0);
1777         }
1778         return 0;
1779 }
1780 
1781 
1782 static int
1783 rio_close (struct net_device *dev)
1784 {
1785         struct netdev_private *np = netdev_priv(dev);
1786         struct pci_dev *pdev = np->pdev;
1787 
1788         netif_stop_queue (dev);
1789 
1790         rio_hw_stop(dev);
1791 
1792         free_irq(pdev->irq, dev);
1793         del_timer_sync (&np->timer);
1794 
1795         free_list(dev);
1796 
1797         return 0;
1798 }
1799 
1800 static void
1801 rio_remove1 (struct pci_dev *pdev)
1802 {
1803         struct net_device *dev = pci_get_drvdata (pdev);
1804 
1805         if (dev) {
1806                 struct netdev_private *np = netdev_priv(dev);
1807 
1808                 unregister_netdev (dev);
1809                 pci_free_consistent (pdev, RX_TOTAL_SIZE, np->rx_ring,
1810                                      np->rx_ring_dma);
1811                 pci_free_consistent (pdev, TX_TOTAL_SIZE, np->tx_ring,
1812                                      np->tx_ring_dma);
1813 #ifdef MEM_MAPPING
1814                 pci_iounmap(pdev, np->ioaddr);
1815 #endif
1816                 pci_iounmap(pdev, np->eeprom_addr);
1817                 free_netdev (dev);
1818                 pci_release_regions (pdev);
1819                 pci_disable_device (pdev);
1820         }
1821 }
1822 
1823 #ifdef CONFIG_PM_SLEEP
1824 static int rio_suspend(struct device *device)
1825 {
1826         struct net_device *dev = dev_get_drvdata(device);
1827         struct netdev_private *np = netdev_priv(dev);
1828 
1829         if (!netif_running(dev))
1830                 return 0;
1831 
1832         netif_device_detach(dev);
1833         del_timer_sync(&np->timer);
1834         rio_hw_stop(dev);
1835 
1836         return 0;
1837 }
1838 
1839 static int rio_resume(struct device *device)
1840 {
1841         struct net_device *dev = dev_get_drvdata(device);
1842         struct netdev_private *np = netdev_priv(dev);
1843 
1844         if (!netif_running(dev))
1845                 return 0;
1846 
1847         rio_reset_ring(np);
1848         rio_hw_init(dev);
1849         np->timer.expires = jiffies + 1 * HZ;
1850         add_timer(&np->timer);
1851         netif_device_attach(dev);
1852         dl2k_enable_int(np);
1853 
1854         return 0;
1855 }
1856 
1857 static SIMPLE_DEV_PM_OPS(rio_pm_ops, rio_suspend, rio_resume);
1858 #define RIO_PM_OPS    (&rio_pm_ops)
1859 
1860 #else
1861 
1862 #define RIO_PM_OPS      NULL
1863 
1864 #endif /* CONFIG_PM_SLEEP */
1865 
1866 static struct pci_driver rio_driver = {
1867         .name           = "dl2k",
1868         .id_table       = rio_pci_tbl,
1869         .probe          = rio_probe1,
1870         .remove         = rio_remove1,
1871         .driver.pm      = RIO_PM_OPS,
1872 };
1873 
1874 module_pci_driver(rio_driver);
1875 /*
1876 
1877 Compile command:
1878 
1879 gcc -D__KERNEL__ -DMODULE -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -c dl2k.c
1880 
1881 Read Documentation/networking/device_drivers/dlink/dl2k.txt for details.
1882 
1883 */
1884 

/* [<][>][^][v][top][bottom][index][help] */