1 /* $Id: sungem.c,v 1.44.2.22 2002/03/13 01:18:12 davem Exp $
 
   2  * sungem.c: Sun GEM ethernet driver.
 
   4  * Copyright (C) 2000, 2001, 2002, 2003 David S. Miller (davem@redhat.com)
 
   6  * Support for Apple GMAC and assorted PHYs, WOL, Power Management
 
   7  * (C) 2001,2002,2003 Benjamin Herrenscmidt (benh@kernel.crashing.org)
 
   8  * (C) 2004,2005 Benjamin Herrenscmidt, IBM Corp.
 
  10  * NAPI and NETPOLL support
 
  11  * (C) 2004 by Eric Lemoine (eric.lemoine@gmail.com)
 
  14  *  - Now that the driver was significantly simplified, I need to rework
 
  15  *    the locking. I'm sure we don't need _2_ spinlocks, and we probably
 
  16  *    can avoid taking most of them for so long period of time (and schedule
 
  17  *    instead). The main issues at this point are caused by the netdev layer
 
  20  *    gem_change_mtu() and gem_set_multicast() are called with a read_lock()
 
  21  *    help by net/core/dev.c, thus they can't schedule. That means they can't
 
  22  *    call netif_poll_disable() neither, thus force gem_poll() to keep a spinlock
 
  23  *    where it could have been dropped. change_mtu especially would love also to
 
  24  *    be able to msleep instead of horrid locked delays when resetting the HW,
 
  25  *    but that read_lock() makes it impossible, unless I defer it's action to
 
  26  *    the reset task, which means it'll be asynchronous (won't take effect until
 
  27  *    the system schedules a bit).
 
  29  *    Also, it would probably be possible to also remove most of the long-life
 
  30  *    locking in open/resume code path (gem_reinit_chip) by beeing more careful
 
  31  *    about when we can start taking interrupts or get xmit() called...
 
  34 #include <linux/module.h>
 
  35 #include <linux/kernel.h>
 
  36 #include <linux/types.h>
 
  37 #include <linux/fcntl.h>
 
  38 #include <linux/interrupt.h>
 
  39 #include <linux/ioport.h>
 
  41 #include <linux/slab.h>
 
  42 #include <linux/string.h>
 
  43 #include <linux/delay.h>
 
  44 #include <linux/init.h>
 
  45 #include <linux/errno.h>
 
  46 #include <linux/pci.h>
 
  47 #include <linux/dma-mapping.h>
 
  48 #include <linux/netdevice.h>
 
  49 #include <linux/etherdevice.h>
 
  50 #include <linux/skbuff.h>
 
  51 #include <linux/mii.h>
 
  52 #include <linux/ethtool.h>
 
  53 #include <linux/crc32.h>
 
  54 #include <linux/random.h>
 
  55 #include <linux/workqueue.h>
 
  56 #include <linux/if_vlan.h>
 
  57 #include <linux/bitops.h>
 
  59 #include <asm/system.h>
 
  61 #include <asm/byteorder.h>
 
  62 #include <asm/uaccess.h>
 
  66 #include <asm/idprom.h>
 
  67 #include <asm/openprom.h>
 
  68 #include <asm/oplib.h>
 
  72 #ifdef CONFIG_PPC_PMAC
 
  73 #include <asm/pci-bridge.h>
 
  75 #include <asm/machdep.h>
 
  76 #include <asm/pmac_feature.h>
 
  79 #include "sungem_phy.h"
 
  82 /* Stripping FCS is causing problems, disabled for now */
 
  85 #define DEFAULT_MSG     (NETIF_MSG_DRV          | \
 
  89 #define ADVERTISE_MASK  (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full | \
 
  90                          SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full | \
 
  91                          SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Full)
 
  93 #define DRV_NAME        "sungem"
 
  94 #define DRV_VERSION     "0.98"
 
  95 #define DRV_RELDATE     "8/24/03"
 
  96 #define DRV_AUTHOR      "David S. Miller (davem@redhat.com)"
 
  98 static char version[] __devinitdata =
 
  99         DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " " DRV_AUTHOR "\n";
 
 101 MODULE_AUTHOR(DRV_AUTHOR);
 
 102 MODULE_DESCRIPTION("Sun GEM Gbit ethernet driver");
 
 103 MODULE_LICENSE("GPL");
 
 105 #define GEM_MODULE_NAME "gem"
 
 106 #define PFX GEM_MODULE_NAME ": "
 
 108 static struct pci_device_id gem_pci_tbl[] = {
 
 109         { PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_GEM,
 
 110           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 112         /* These models only differ from the original GEM in
 
 113          * that their tx/rx fifos are of a different size and
 
 114          * they only support 10/100 speeds. -DaveM
 
 116          * Apple's GMAC does support gigabit on machines with
 
 117          * the BCM54xx PHYs. -BenH
 
 119         { PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_RIO_GEM,
 
 120           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 121         { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_GMAC,
 
 122           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 123         { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_GMACP,
 
 124           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 125         { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_GMAC2,
 
 126           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 127         { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_K2_GMAC,
 
 128           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 129         { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_SH_SUNGEM,
 
 130           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
 
 134 MODULE_DEVICE_TABLE(pci, gem_pci_tbl);
 
 136 static u16 __phy_read(struct gem *gp, int phy_addr, int reg)
 
 143         cmd |= (phy_addr << 23) & MIF_FRAME_PHYAD;
 
 144         cmd |= (reg << 18) & MIF_FRAME_REGAD;
 
 145         cmd |= (MIF_FRAME_TAMSB);
 
 146         writel(cmd, gp->regs + MIF_FRAME);
 
 149                 cmd = readl(gp->regs + MIF_FRAME);
 
 150                 if (cmd & MIF_FRAME_TALSB)
 
 159         return cmd & MIF_FRAME_DATA;
 
 162 static inline int _phy_read(struct net_device *dev, int mii_id, int reg)
 
 164         struct gem *gp = dev->priv;
 
 165         return __phy_read(gp, mii_id, reg);
 
 168 static inline u16 phy_read(struct gem *gp, int reg)
 
 170         return __phy_read(gp, gp->mii_phy_addr, reg);
 
 173 static void __phy_write(struct gem *gp, int phy_addr, int reg, u16 val)
 
 180         cmd |= (phy_addr << 23) & MIF_FRAME_PHYAD;
 
 181         cmd |= (reg << 18) & MIF_FRAME_REGAD;
 
 182         cmd |= (MIF_FRAME_TAMSB);
 
 183         cmd |= (val & MIF_FRAME_DATA);
 
 184         writel(cmd, gp->regs + MIF_FRAME);
 
 187                 cmd = readl(gp->regs + MIF_FRAME);
 
 188                 if (cmd & MIF_FRAME_TALSB)
 
 195 static inline void _phy_write(struct net_device *dev, int mii_id, int reg, int val)
 
 197         struct gem *gp = dev->priv;
 
 198         __phy_write(gp, mii_id, reg, val & 0xffff);
 
 201 static inline void phy_write(struct gem *gp, int reg, u16 val)
 
 203         __phy_write(gp, gp->mii_phy_addr, reg, val);
 
 206 static inline void gem_enable_ints(struct gem *gp)
 
 208         /* Enable all interrupts but TXDONE */
 
 209         writel(GREG_STAT_TXDONE, gp->regs + GREG_IMASK);
 
 212 static inline void gem_disable_ints(struct gem *gp)
 
 214         /* Disable all interrupts, including TXDONE */
 
 215         writel(GREG_STAT_NAPI | GREG_STAT_TXDONE, gp->regs + GREG_IMASK);
 
 218 static void gem_get_cell(struct gem *gp)
 
 220         BUG_ON(gp->cell_enabled < 0);
 
 222 #ifdef CONFIG_PPC_PMAC
 
 223         if (gp->cell_enabled == 1) {
 
 225                 pmac_call_feature(PMAC_FTR_GMAC_ENABLE, gp->of_node, 0, 1);
 
 228 #endif /* CONFIG_PPC_PMAC */
 
 231 /* Turn off the chip's clock */
 
 232 static void gem_put_cell(struct gem *gp)
 
 234         BUG_ON(gp->cell_enabled <= 0);
 
 236 #ifdef CONFIG_PPC_PMAC
 
 237         if (gp->cell_enabled == 0) {
 
 239                 pmac_call_feature(PMAC_FTR_GMAC_ENABLE, gp->of_node, 0, 0);
 
 242 #endif /* CONFIG_PPC_PMAC */
 
 245 static void gem_handle_mif_event(struct gem *gp, u32 reg_val, u32 changed_bits)
 
 247         if (netif_msg_intr(gp))
 
 248                 printk(KERN_DEBUG "%s: mif interrupt\n", gp->dev->name);
 
 251 static int gem_pcs_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 253         u32 pcs_istat = readl(gp->regs + PCS_ISTAT);
 
 256         if (netif_msg_intr(gp))
 
 257                 printk(KERN_DEBUG "%s: pcs interrupt, pcs_istat: 0x%x\n",
 
 258                         gp->dev->name, pcs_istat);
 
 260         if (!(pcs_istat & PCS_ISTAT_LSC)) {
 
 261                 printk(KERN_ERR "%s: PCS irq but no link status change???\n",
 
 266         /* The link status bit latches on zero, so you must
 
 267          * read it twice in such a case to see a transition
 
 268          * to the link being up.
 
 270         pcs_miistat = readl(gp->regs + PCS_MIISTAT);
 
 271         if (!(pcs_miistat & PCS_MIISTAT_LS))
 
 273                         (readl(gp->regs + PCS_MIISTAT) &
 
 276         if (pcs_miistat & PCS_MIISTAT_ANC) {
 
 277                 /* The remote-fault indication is only valid
 
 278                  * when autoneg has completed.
 
 280                 if (pcs_miistat & PCS_MIISTAT_RF)
 
 281                         printk(KERN_INFO "%s: PCS AutoNEG complete, "
 
 282                                "RemoteFault\n", dev->name);
 
 284                         printk(KERN_INFO "%s: PCS AutoNEG complete.\n",
 
 288         if (pcs_miistat & PCS_MIISTAT_LS) {
 
 289                 printk(KERN_INFO "%s: PCS link is now up.\n",
 
 291                 netif_carrier_on(gp->dev);
 
 293                 printk(KERN_INFO "%s: PCS link is now down.\n",
 
 295                 netif_carrier_off(gp->dev);
 
 296                 /* If this happens and the link timer is not running,
 
 297                  * reset so we re-negotiate.
 
 299                 if (!timer_pending(&gp->link_timer))
 
 306 static int gem_txmac_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 308         u32 txmac_stat = readl(gp->regs + MAC_TXSTAT);
 
 310         if (netif_msg_intr(gp))
 
 311                 printk(KERN_DEBUG "%s: txmac interrupt, txmac_stat: 0x%x\n",
 
 312                         gp->dev->name, txmac_stat);
 
 314         /* Defer timer expiration is quite normal,
 
 315          * don't even log the event.
 
 317         if ((txmac_stat & MAC_TXSTAT_DTE) &&
 
 318             !(txmac_stat & ~MAC_TXSTAT_DTE))
 
 321         if (txmac_stat & MAC_TXSTAT_URUN) {
 
 322                 printk(KERN_ERR "%s: TX MAC xmit underrun.\n",
 
 324                 gp->net_stats.tx_fifo_errors++;
 
 327         if (txmac_stat & MAC_TXSTAT_MPE) {
 
 328                 printk(KERN_ERR "%s: TX MAC max packet size error.\n",
 
 330                 gp->net_stats.tx_errors++;
 
 333         /* The rest are all cases of one of the 16-bit TX
 
 336         if (txmac_stat & MAC_TXSTAT_NCE)
 
 337                 gp->net_stats.collisions += 0x10000;
 
 339         if (txmac_stat & MAC_TXSTAT_ECE) {
 
 340                 gp->net_stats.tx_aborted_errors += 0x10000;
 
 341                 gp->net_stats.collisions += 0x10000;
 
 344         if (txmac_stat & MAC_TXSTAT_LCE) {
 
 345                 gp->net_stats.tx_aborted_errors += 0x10000;
 
 346                 gp->net_stats.collisions += 0x10000;
 
 349         /* We do not keep track of MAC_TXSTAT_FCE and
 
 350          * MAC_TXSTAT_PCE events.
 
 355 /* When we get a RX fifo overflow, the RX unit in GEM is probably hung
 
 356  * so we do the following.
 
 358  * If any part of the reset goes wrong, we return 1 and that causes the
 
 359  * whole chip to be reset.
 
 361 static int gem_rxmac_reset(struct gem *gp)
 
 363         struct net_device *dev = gp->dev;
 
 368         /* First, reset & disable MAC RX. */
 
 369         writel(MAC_RXRST_CMD, gp->regs + MAC_RXRST);
 
 370         for (limit = 0; limit < 5000; limit++) {
 
 371                 if (!(readl(gp->regs + MAC_RXRST) & MAC_RXRST_CMD))
 
 376                 printk(KERN_ERR "%s: RX MAC will not reset, resetting whole "
 
 377                        "chip.\n", dev->name);
 
 381         writel(gp->mac_rx_cfg & ~MAC_RXCFG_ENAB,
 
 382                gp->regs + MAC_RXCFG);
 
 383         for (limit = 0; limit < 5000; limit++) {
 
 384                 if (!(readl(gp->regs + MAC_RXCFG) & MAC_RXCFG_ENAB))
 
 389                 printk(KERN_ERR "%s: RX MAC will not disable, resetting whole "
 
 390                        "chip.\n", dev->name);
 
 394         /* Second, disable RX DMA. */
 
 395         writel(0, gp->regs + RXDMA_CFG);
 
 396         for (limit = 0; limit < 5000; limit++) {
 
 397                 if (!(readl(gp->regs + RXDMA_CFG) & RXDMA_CFG_ENABLE))
 
 402                 printk(KERN_ERR "%s: RX DMA will not disable, resetting whole "
 
 403                        "chip.\n", dev->name);
 
 409         /* Execute RX reset command. */
 
 410         writel(gp->swrst_base | GREG_SWRST_RXRST,
 
 411                gp->regs + GREG_SWRST);
 
 412         for (limit = 0; limit < 5000; limit++) {
 
 413                 if (!(readl(gp->regs + GREG_SWRST) & GREG_SWRST_RXRST))
 
 418                 printk(KERN_ERR "%s: RX reset command will not execute, resetting "
 
 419                        "whole chip.\n", dev->name);
 
 423         /* Refresh the RX ring. */
 
 424         for (i = 0; i < RX_RING_SIZE; i++) {
 
 425                 struct gem_rxd *rxd = &gp->init_block->rxd[i];
 
 427                 if (gp->rx_skbs[i] == NULL) {
 
 428                         printk(KERN_ERR "%s: Parts of RX ring empty, resetting "
 
 429                                "whole chip.\n", dev->name);
 
 433                 rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp));
 
 435         gp->rx_new = gp->rx_old = 0;
 
 437         /* Now we must reprogram the rest of RX unit. */
 
 438         desc_dma = (u64) gp->gblock_dvma;
 
 439         desc_dma += (INIT_BLOCK_TX_RING_SIZE * sizeof(struct gem_txd));
 
 440         writel(desc_dma >> 32, gp->regs + RXDMA_DBHI);
 
 441         writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
 
 442         writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
 
 443         val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
 
 444                ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
 
 445         writel(val, gp->regs + RXDMA_CFG);
 
 446         if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
 
 447                 writel(((5 & RXDMA_BLANK_IPKTS) |
 
 448                         ((8 << 12) & RXDMA_BLANK_ITIME)),
 
 449                        gp->regs + RXDMA_BLANK);
 
 451                 writel(((5 & RXDMA_BLANK_IPKTS) |
 
 452                         ((4 << 12) & RXDMA_BLANK_ITIME)),
 
 453                        gp->regs + RXDMA_BLANK);
 
 454         val  = (((gp->rx_pause_off / 64) << 0) & RXDMA_PTHRESH_OFF);
 
 455         val |= (((gp->rx_pause_on / 64) << 12) & RXDMA_PTHRESH_ON);
 
 456         writel(val, gp->regs + RXDMA_PTHRESH);
 
 457         val = readl(gp->regs + RXDMA_CFG);
 
 458         writel(val | RXDMA_CFG_ENABLE, gp->regs + RXDMA_CFG);
 
 459         writel(MAC_RXSTAT_RCV, gp->regs + MAC_RXMASK);
 
 460         val = readl(gp->regs + MAC_RXCFG);
 
 461         writel(val | MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
 
 466 static int gem_rxmac_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 468         u32 rxmac_stat = readl(gp->regs + MAC_RXSTAT);
 
 471         if (netif_msg_intr(gp))
 
 472                 printk(KERN_DEBUG "%s: rxmac interrupt, rxmac_stat: 0x%x\n",
 
 473                         gp->dev->name, rxmac_stat);
 
 475         if (rxmac_stat & MAC_RXSTAT_OFLW) {
 
 476                 u32 smac = readl(gp->regs + MAC_SMACHINE);
 
 478                 printk(KERN_ERR "%s: RX MAC fifo overflow smac[%08x].\n",
 
 480                 gp->net_stats.rx_over_errors++;
 
 481                 gp->net_stats.rx_fifo_errors++;
 
 483                 ret = gem_rxmac_reset(gp);
 
 486         if (rxmac_stat & MAC_RXSTAT_ACE)
 
 487                 gp->net_stats.rx_frame_errors += 0x10000;
 
 489         if (rxmac_stat & MAC_RXSTAT_CCE)
 
 490                 gp->net_stats.rx_crc_errors += 0x10000;
 
 492         if (rxmac_stat & MAC_RXSTAT_LCE)
 
 493                 gp->net_stats.rx_length_errors += 0x10000;
 
 495         /* We do not track MAC_RXSTAT_FCE and MAC_RXSTAT_VCE
 
 501 static int gem_mac_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 503         u32 mac_cstat = readl(gp->regs + MAC_CSTAT);
 
 505         if (netif_msg_intr(gp))
 
 506                 printk(KERN_DEBUG "%s: mac interrupt, mac_cstat: 0x%x\n",
 
 507                         gp->dev->name, mac_cstat);
 
 509         /* This interrupt is just for pause frame and pause
 
 510          * tracking.  It is useful for diagnostics and debug
 
 511          * but probably by default we will mask these events.
 
 513         if (mac_cstat & MAC_CSTAT_PS)
 
 516         if (mac_cstat & MAC_CSTAT_PRCV)
 
 517                 gp->pause_last_time_recvd = (mac_cstat >> 16);
 
 522 static int gem_mif_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 524         u32 mif_status = readl(gp->regs + MIF_STATUS);
 
 525         u32 reg_val, changed_bits;
 
 527         reg_val = (mif_status & MIF_STATUS_DATA) >> 16;
 
 528         changed_bits = (mif_status & MIF_STATUS_STAT);
 
 530         gem_handle_mif_event(gp, reg_val, changed_bits);
 
 535 static int gem_pci_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 537         u32 pci_estat = readl(gp->regs + GREG_PCIESTAT);
 
 539         if (gp->pdev->vendor == PCI_VENDOR_ID_SUN &&
 
 540             gp->pdev->device == PCI_DEVICE_ID_SUN_GEM) {
 
 541                 printk(KERN_ERR "%s: PCI error [%04x] ",
 
 542                        dev->name, pci_estat);
 
 544                 if (pci_estat & GREG_PCIESTAT_BADACK)
 
 545                         printk("<No ACK64# during ABS64 cycle> ");
 
 546                 if (pci_estat & GREG_PCIESTAT_DTRTO)
 
 547                         printk("<Delayed transaction timeout> ");
 
 548                 if (pci_estat & GREG_PCIESTAT_OTHER)
 
 552                 pci_estat |= GREG_PCIESTAT_OTHER;
 
 553                 printk(KERN_ERR "%s: PCI error\n", dev->name);
 
 556         if (pci_estat & GREG_PCIESTAT_OTHER) {
 
 559                 /* Interrogate PCI config space for the
 
 562                 pci_read_config_word(gp->pdev, PCI_STATUS,
 
 564                 printk(KERN_ERR "%s: Read PCI cfg space status [%04x]\n",
 
 565                        dev->name, pci_cfg_stat);
 
 566                 if (pci_cfg_stat & PCI_STATUS_PARITY)
 
 567                         printk(KERN_ERR "%s: PCI parity error detected.\n",
 
 569                 if (pci_cfg_stat & PCI_STATUS_SIG_TARGET_ABORT)
 
 570                         printk(KERN_ERR "%s: PCI target abort.\n",
 
 572                 if (pci_cfg_stat & PCI_STATUS_REC_TARGET_ABORT)
 
 573                         printk(KERN_ERR "%s: PCI master acks target abort.\n",
 
 575                 if (pci_cfg_stat & PCI_STATUS_REC_MASTER_ABORT)
 
 576                         printk(KERN_ERR "%s: PCI master abort.\n",
 
 578                 if (pci_cfg_stat & PCI_STATUS_SIG_SYSTEM_ERROR)
 
 579                         printk(KERN_ERR "%s: PCI system error SERR#.\n",
 
 581                 if (pci_cfg_stat & PCI_STATUS_DETECTED_PARITY)
 
 582                         printk(KERN_ERR "%s: PCI parity error.\n",
 
 585                 /* Write the error bits back to clear them. */
 
 586                 pci_cfg_stat &= (PCI_STATUS_PARITY |
 
 587                                  PCI_STATUS_SIG_TARGET_ABORT |
 
 588                                  PCI_STATUS_REC_TARGET_ABORT |
 
 589                                  PCI_STATUS_REC_MASTER_ABORT |
 
 590                                  PCI_STATUS_SIG_SYSTEM_ERROR |
 
 591                                  PCI_STATUS_DETECTED_PARITY);
 
 592                 pci_write_config_word(gp->pdev,
 
 593                                       PCI_STATUS, pci_cfg_stat);
 
 596         /* For all PCI errors, we should reset the chip. */
 
 600 /* All non-normal interrupt conditions get serviced here.
 
 601  * Returns non-zero if we should just exit the interrupt
 
 602  * handler right now (ie. if we reset the card which invalidates
 
 603  * all of the other original irq status bits).
 
 605 static int gem_abnormal_irq(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 607         if (gem_status & GREG_STAT_RXNOBUF) {
 
 608                 /* Frame arrived, no free RX buffers available. */
 
 609                 if (netif_msg_rx_err(gp))
 
 610                         printk(KERN_DEBUG "%s: no buffer for rx frame\n",
 
 612                 gp->net_stats.rx_dropped++;
 
 615         if (gem_status & GREG_STAT_RXTAGERR) {
 
 616                 /* corrupt RX tag framing */
 
 617                 if (netif_msg_rx_err(gp))
 
 618                         printk(KERN_DEBUG "%s: corrupt rx tag framing\n",
 
 620                 gp->net_stats.rx_errors++;
 
 625         if (gem_status & GREG_STAT_PCS) {
 
 626                 if (gem_pcs_interrupt(dev, gp, gem_status))
 
 630         if (gem_status & GREG_STAT_TXMAC) {
 
 631                 if (gem_txmac_interrupt(dev, gp, gem_status))
 
 635         if (gem_status & GREG_STAT_RXMAC) {
 
 636                 if (gem_rxmac_interrupt(dev, gp, gem_status))
 
 640         if (gem_status & GREG_STAT_MAC) {
 
 641                 if (gem_mac_interrupt(dev, gp, gem_status))
 
 645         if (gem_status & GREG_STAT_MIF) {
 
 646                 if (gem_mif_interrupt(dev, gp, gem_status))
 
 650         if (gem_status & GREG_STAT_PCIERR) {
 
 651                 if (gem_pci_interrupt(dev, gp, gem_status))
 
 658         gp->reset_task_pending = 1;
 
 659         schedule_work(&gp->reset_task);
 
 664 static __inline__ void gem_tx(struct net_device *dev, struct gem *gp, u32 gem_status)
 
 668         if (netif_msg_intr(gp))
 
 669                 printk(KERN_DEBUG "%s: tx interrupt, gem_status: 0x%x\n",
 
 670                         gp->dev->name, gem_status);
 
 673         limit = ((gem_status & GREG_STAT_TXNR) >> GREG_STAT_TXNR_SHIFT);
 
 674         while (entry != limit) {
 
 681                 if (netif_msg_tx_done(gp))
 
 682                         printk(KERN_DEBUG "%s: tx done, slot %d\n",
 
 683                                 gp->dev->name, entry);
 
 684                 skb = gp->tx_skbs[entry];
 
 685                 if (skb_shinfo(skb)->nr_frags) {
 
 686                         int last = entry + skb_shinfo(skb)->nr_frags;
 
 690                         last &= (TX_RING_SIZE - 1);
 
 692                                 walk = NEXT_TX(walk);
 
 701                 gp->tx_skbs[entry] = NULL;
 
 702                 gp->net_stats.tx_bytes += skb->len;
 
 704                 for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
 
 705                         txd = &gp->init_block->txd[entry];
 
 707                         dma_addr = le64_to_cpu(txd->buffer);
 
 708                         dma_len = le64_to_cpu(txd->control_word) & TXDCTRL_BUFSZ;
 
 710                         pci_unmap_page(gp->pdev, dma_addr, dma_len, PCI_DMA_TODEVICE);
 
 711                         entry = NEXT_TX(entry);
 
 714                 gp->net_stats.tx_packets++;
 
 715                 dev_kfree_skb_irq(skb);
 
 719         if (netif_queue_stopped(dev) &&
 
 720             TX_BUFFS_AVAIL(gp) > (MAX_SKB_FRAGS + 1))
 
 721                 netif_wake_queue(dev);
 
 724 static __inline__ void gem_post_rxds(struct gem *gp, int limit)
 
 726         int cluster_start, curr, count, kick;
 
 728         cluster_start = curr = (gp->rx_new & ~(4 - 1));
 
 732         while (curr != limit) {
 
 733                 curr = NEXT_RX(curr);
 
 735                         struct gem_rxd *rxd =
 
 736                                 &gp->init_block->rxd[cluster_start];
 
 738                                 rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp));
 
 740                                 cluster_start = NEXT_RX(cluster_start);
 
 741                                 if (cluster_start == curr)
 
 750                 writel(kick, gp->regs + RXDMA_KICK);
 
 754 static int gem_rx(struct gem *gp, int work_to_do)
 
 756         int entry, drops, work_done = 0;
 
 759         if (netif_msg_rx_status(gp))
 
 760                 printk(KERN_DEBUG "%s: rx interrupt, done: %d, rx_new: %d\n",
 
 761                         gp->dev->name, readl(gp->regs + RXDMA_DONE), gp->rx_new);
 
 765         done = readl(gp->regs + RXDMA_DONE);
 
 767                 struct gem_rxd *rxd = &gp->init_block->rxd[entry];
 
 769                 u64 status = cpu_to_le64(rxd->status_word);
 
 773                 if ((status & RXDCTRL_OWN) != 0)
 
 776                 if (work_done >= RX_RING_SIZE || work_done >= work_to_do)
 
 779                 /* When writing back RX descriptor, GEM writes status
 
 780                  * then buffer address, possibly in seperate transactions.
 
 781                  * If we don't wait for the chip to write both, we could
 
 782                  * post a new buffer to this descriptor then have GEM spam
 
 783                  * on the buffer address.  We sync on the RX completion
 
 784                  * register to prevent this from happening.
 
 787                         done = readl(gp->regs + RXDMA_DONE);
 
 792                 /* We can now account for the work we're about to do */
 
 795                 skb = gp->rx_skbs[entry];
 
 797                 len = (status & RXDCTRL_BUFSZ) >> 16;
 
 798                 if ((len < ETH_ZLEN) || (status & RXDCTRL_BAD)) {
 
 799                         gp->net_stats.rx_errors++;
 
 801                                 gp->net_stats.rx_length_errors++;
 
 802                         if (len & RXDCTRL_BAD)
 
 803                                 gp->net_stats.rx_crc_errors++;
 
 805                         /* We'll just return it to GEM. */
 
 807                         gp->net_stats.rx_dropped++;
 
 811                 dma_addr = cpu_to_le64(rxd->buffer);
 
 812                 if (len > RX_COPY_THRESHOLD) {
 
 813                         struct sk_buff *new_skb;
 
 815                         new_skb = gem_alloc_skb(RX_BUF_ALLOC_SIZE(gp), GFP_ATOMIC);
 
 816                         if (new_skb == NULL) {
 
 820                         pci_unmap_page(gp->pdev, dma_addr,
 
 821                                        RX_BUF_ALLOC_SIZE(gp),
 
 823                         gp->rx_skbs[entry] = new_skb;
 
 824                         new_skb->dev = gp->dev;
 
 825                         skb_put(new_skb, (gp->rx_buf_sz + RX_OFFSET));
 
 826                         rxd->buffer = cpu_to_le64(pci_map_page(gp->pdev,
 
 827                                                                virt_to_page(new_skb->data),
 
 828                                                                offset_in_page(new_skb->data),
 
 829                                                                RX_BUF_ALLOC_SIZE(gp),
 
 830                                                                PCI_DMA_FROMDEVICE));
 
 831                         skb_reserve(new_skb, RX_OFFSET);
 
 833                         /* Trim the original skb for the netif. */
 
 836                         struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
 
 838                         if (copy_skb == NULL) {
 
 843                         copy_skb->dev = gp->dev;
 
 844                         skb_reserve(copy_skb, 2);
 
 845                         skb_put(copy_skb, len);
 
 846                         pci_dma_sync_single_for_cpu(gp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
 
 847                         memcpy(copy_skb->data, skb->data, len);
 
 848                         pci_dma_sync_single_for_device(gp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
 
 850                         /* We'll reuse the original ring buffer. */
 
 854                 skb->csum = ntohs((status & RXDCTRL_TCPCSUM) ^ 0xffff);
 
 855                 skb->ip_summed = CHECKSUM_HW;
 
 856                 skb->protocol = eth_type_trans(skb, gp->dev);
 
 858                 netif_receive_skb(skb);
 
 860                 gp->net_stats.rx_packets++;
 
 861                 gp->net_stats.rx_bytes += len;
 
 862                 gp->dev->last_rx = jiffies;
 
 865                 entry = NEXT_RX(entry);
 
 868         gem_post_rxds(gp, entry);
 
 873                 printk(KERN_INFO "%s: Memory squeeze, deferring packet.\n",
 
 879 static int gem_poll(struct net_device *dev, int *budget)
 
 881         struct gem *gp = dev->priv;
 
 885          * NAPI locking nightmare: See comment at head of driver 
 
 887         spin_lock_irqsave(&gp->lock, flags);
 
 890                 int work_to_do, work_done;
 
 892                 /* Handle anomalies */
 
 893                 if (gp->status & GREG_STAT_ABNORMAL) {
 
 894                         if (gem_abnormal_irq(dev, gp, gp->status))
 
 898                 /* Run TX completion thread */
 
 899                 spin_lock(&gp->tx_lock);
 
 900                 gem_tx(dev, gp, gp->status);
 
 901                 spin_unlock(&gp->tx_lock);
 
 903                 spin_unlock_irqrestore(&gp->lock, flags);
 
 905                 /* Run RX thread. We don't use any locking here, 
 
 906                  * code willing to do bad things - like cleaning the 
 
 907                  * rx ring - must call netif_poll_disable(), which
 
 908                  * schedule_timeout()'s if polling is already disabled.
 
 910                 work_to_do = min(*budget, dev->quota);
 
 912                 work_done = gem_rx(gp, work_to_do);
 
 914                 *budget -= work_done;
 
 915                 dev->quota -= work_done;
 
 917                 if (work_done >= work_to_do)
 
 920                 spin_lock_irqsave(&gp->lock, flags);
 
 922                 gp->status = readl(gp->regs + GREG_STAT);
 
 923         } while (gp->status & GREG_STAT_NAPI);
 
 925         __netif_rx_complete(dev);
 
 928         spin_unlock_irqrestore(&gp->lock, flags);
 
 932 static irqreturn_t gem_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
 934         struct net_device *dev = dev_id;
 
 935         struct gem *gp = dev->priv;
 
 938         /* Swallow interrupts when shutting the chip down, though
 
 939          * that shouldn't happen, we should have done free_irq() at
 
 945         spin_lock_irqsave(&gp->lock, flags);
 
 947         if (netif_rx_schedule_prep(dev)) {
 
 948                 u32 gem_status = readl(gp->regs + GREG_STAT);
 
 950                 if (gem_status == 0) {
 
 951                         netif_poll_enable(dev);
 
 952                         spin_unlock_irqrestore(&gp->lock, flags);
 
 955                 gp->status = gem_status;
 
 956                 gem_disable_ints(gp);
 
 957                 __netif_rx_schedule(dev);
 
 960         spin_unlock_irqrestore(&gp->lock, flags);
 
 962         /* If polling was disabled at the time we received that
 
 963          * interrupt, we may return IRQ_HANDLED here while we 
 
 964          * should return IRQ_NONE. No big deal...
 
 969 #ifdef CONFIG_NET_POLL_CONTROLLER
 
 970 static void gem_poll_controller(struct net_device *dev)
 
 972         /* gem_interrupt is safe to reentrance so no need
 
 973          * to disable_irq here.
 
 975         gem_interrupt(dev->irq, dev, NULL);
 
 979 static void gem_tx_timeout(struct net_device *dev)
 
 981         struct gem *gp = dev->priv;
 
 983         printk(KERN_ERR "%s: transmit timed out, resetting\n", dev->name);
 
 985                 printk("%s: hrm.. hw not running !\n", dev->name);
 
 988         printk(KERN_ERR "%s: TX_STATE[%08x:%08x:%08x]\n",
 
 990                readl(gp->regs + TXDMA_CFG),
 
 991                readl(gp->regs + MAC_TXSTAT),
 
 992                readl(gp->regs + MAC_TXCFG));
 
 993         printk(KERN_ERR "%s: RX_STATE[%08x:%08x:%08x]\n",
 
 995                readl(gp->regs + RXDMA_CFG),
 
 996                readl(gp->regs + MAC_RXSTAT),
 
 997                readl(gp->regs + MAC_RXCFG));
 
 999         spin_lock_irq(&gp->lock);
 
1000         spin_lock(&gp->tx_lock);
 
1002         gp->reset_task_pending = 1;
 
1003         schedule_work(&gp->reset_task);
 
1005         spin_unlock(&gp->tx_lock);
 
1006         spin_unlock_irq(&gp->lock);
 
1009 static __inline__ int gem_intme(int entry)
 
1011         /* Algorithm: IRQ every 1/2 of descriptors. */
 
1012         if (!(entry & ((TX_RING_SIZE>>1)-1)))
 
1018 static int gem_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
1020         struct gem *gp = dev->priv;
 
1023         unsigned long flags;
 
1026         if (skb->ip_summed == CHECKSUM_HW) {
 
1027                 u64 csum_start_off, csum_stuff_off;
 
1029                 csum_start_off = (u64) (skb->h.raw - skb->data);
 
1030                 csum_stuff_off = (u64) ((skb->h.raw + skb->csum) - skb->data);
 
1032                 ctrl = (TXDCTRL_CENAB |
 
1033                         (csum_start_off << 15) |
 
1034                         (csum_stuff_off << 21));
 
1037         local_irq_save(flags);
 
1038         if (!spin_trylock(&gp->tx_lock)) {
 
1039                 /* Tell upper layer to requeue */
 
1040                 local_irq_restore(flags);
 
1041                 return NETDEV_TX_LOCKED;
 
1043         /* We raced with gem_do_stop() */
 
1045                 spin_unlock_irqrestore(&gp->tx_lock, flags);
 
1046                 return NETDEV_TX_BUSY;
 
1049         /* This is a hard error, log it. */
 
1050         if (TX_BUFFS_AVAIL(gp) <= (skb_shinfo(skb)->nr_frags + 1)) {
 
1051                 netif_stop_queue(dev);
 
1052                 spin_unlock_irqrestore(&gp->tx_lock, flags);
 
1053                 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
 
1055                 return NETDEV_TX_BUSY;
 
1059         gp->tx_skbs[entry] = skb;
 
1061         if (skb_shinfo(skb)->nr_frags == 0) {
 
1062                 struct gem_txd *txd = &gp->init_block->txd[entry];
 
1067                 mapping = pci_map_page(gp->pdev,
 
1068                                        virt_to_page(skb->data),
 
1069                                        offset_in_page(skb->data),
 
1070                                        len, PCI_DMA_TODEVICE);
 
1071                 ctrl |= TXDCTRL_SOF | TXDCTRL_EOF | len;
 
1072                 if (gem_intme(entry))
 
1073                         ctrl |= TXDCTRL_INTME;
 
1074                 txd->buffer = cpu_to_le64(mapping);
 
1076                 txd->control_word = cpu_to_le64(ctrl);
 
1077                 entry = NEXT_TX(entry);
 
1079                 struct gem_txd *txd;
 
1082                 dma_addr_t first_mapping;
 
1083                 int frag, first_entry = entry;
 
1086                 if (gem_intme(entry))
 
1087                         intme |= TXDCTRL_INTME;
 
1089                 /* We must give this initial chunk to the device last.
 
1090                  * Otherwise we could race with the device.
 
1092                 first_len = skb_headlen(skb);
 
1093                 first_mapping = pci_map_page(gp->pdev, virt_to_page(skb->data),
 
1094                                              offset_in_page(skb->data),
 
1095                                              first_len, PCI_DMA_TODEVICE);
 
1096                 entry = NEXT_TX(entry);
 
1098                 for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) {
 
1099                         skb_frag_t *this_frag = &skb_shinfo(skb)->frags[frag];
 
1104                         len = this_frag->size;
 
1105                         mapping = pci_map_page(gp->pdev,
 
1107                                                this_frag->page_offset,
 
1108                                                len, PCI_DMA_TODEVICE);
 
1110                         if (frag == skb_shinfo(skb)->nr_frags - 1)
 
1111                                 this_ctrl |= TXDCTRL_EOF;
 
1113                         txd = &gp->init_block->txd[entry];
 
1114                         txd->buffer = cpu_to_le64(mapping);
 
1116                         txd->control_word = cpu_to_le64(this_ctrl | len);
 
1118                         if (gem_intme(entry))
 
1119                                 intme |= TXDCTRL_INTME;
 
1121                         entry = NEXT_TX(entry);
 
1123                 txd = &gp->init_block->txd[first_entry];
 
1124                 txd->buffer = cpu_to_le64(first_mapping);
 
1127                         cpu_to_le64(ctrl | TXDCTRL_SOF | intme | first_len);
 
1131         if (TX_BUFFS_AVAIL(gp) <= (MAX_SKB_FRAGS + 1))
 
1132                 netif_stop_queue(dev);
 
1134         if (netif_msg_tx_queued(gp))
 
1135                 printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %d\n",
 
1136                        dev->name, entry, skb->len);
 
1138         writel(gp->tx_new, gp->regs + TXDMA_KICK);
 
1139         spin_unlock_irqrestore(&gp->tx_lock, flags);
 
1141         dev->trans_start = jiffies;
 
1143         return NETDEV_TX_OK;
 
1146 #define STOP_TRIES 32
 
1148 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1149 static void gem_reset(struct gem *gp)
 
1154         /* Make sure we won't get any more interrupts */
 
1155         writel(0xffffffff, gp->regs + GREG_IMASK);
 
1157         /* Reset the chip */
 
1158         writel(gp->swrst_base | GREG_SWRST_TXRST | GREG_SWRST_RXRST,
 
1159                gp->regs + GREG_SWRST);
 
1165                 val = readl(gp->regs + GREG_SWRST);
 
1168         } while (val & (GREG_SWRST_TXRST | GREG_SWRST_RXRST));
 
1171                 printk(KERN_ERR "%s: SW reset is ghetto.\n", gp->dev->name);
 
1174 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1175 static void gem_start_dma(struct gem *gp)
 
1179         /* We are ready to rock, turn everything on. */
 
1180         val = readl(gp->regs + TXDMA_CFG);
 
1181         writel(val | TXDMA_CFG_ENABLE, gp->regs + TXDMA_CFG);
 
1182         val = readl(gp->regs + RXDMA_CFG);
 
1183         writel(val | RXDMA_CFG_ENABLE, gp->regs + RXDMA_CFG);
 
1184         val = readl(gp->regs + MAC_TXCFG);
 
1185         writel(val | MAC_TXCFG_ENAB, gp->regs + MAC_TXCFG);
 
1186         val = readl(gp->regs + MAC_RXCFG);
 
1187         writel(val | MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
 
1189         (void) readl(gp->regs + MAC_RXCFG);
 
1192         gem_enable_ints(gp);
 
1194         writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
 
1197 /* Must be invoked under gp->lock and gp->tx_lock. DMA won't be
 
1198  * actually stopped before about 4ms tho ...
 
1200 static void gem_stop_dma(struct gem *gp)
 
1204         /* We are done rocking, turn everything off. */
 
1205         val = readl(gp->regs + TXDMA_CFG);
 
1206         writel(val & ~TXDMA_CFG_ENABLE, gp->regs + TXDMA_CFG);
 
1207         val = readl(gp->regs + RXDMA_CFG);
 
1208         writel(val & ~RXDMA_CFG_ENABLE, gp->regs + RXDMA_CFG);
 
1209         val = readl(gp->regs + MAC_TXCFG);
 
1210         writel(val & ~MAC_TXCFG_ENAB, gp->regs + MAC_TXCFG);
 
1211         val = readl(gp->regs + MAC_RXCFG);
 
1212         writel(val & ~MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
 
1214         (void) readl(gp->regs + MAC_RXCFG);
 
1216         /* Need to wait a bit ... done by the caller */
 
1220 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1221 // XXX dbl check what that function should do when called on PCS PHY
 
1222 static void gem_begin_auto_negotiation(struct gem *gp, struct ethtool_cmd *ep)
 
1224         u32 advertise, features;
 
1229         if (gp->phy_type != phy_mii_mdio0 &&
 
1230             gp->phy_type != phy_mii_mdio1)
 
1233         /* Setup advertise */
 
1234         if (found_mii_phy(gp))
 
1235                 features = gp->phy_mii.def->features;
 
1239         advertise = features & ADVERTISE_MASK;
 
1240         if (gp->phy_mii.advertising != 0)
 
1241                 advertise &= gp->phy_mii.advertising;
 
1243         autoneg = gp->want_autoneg;
 
1244         speed = gp->phy_mii.speed;
 
1245         duplex = gp->phy_mii.duplex;
 
1247         /* Setup link parameters */
 
1250         if (ep->autoneg == AUTONEG_ENABLE) {
 
1251                 advertise = ep->advertising;
 
1256                 duplex = ep->duplex;
 
1260         /* Sanitize settings based on PHY capabilities */
 
1261         if ((features & SUPPORTED_Autoneg) == 0)
 
1263         if (speed == SPEED_1000 &&
 
1264             !(features & (SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Full)))
 
1266         if (speed == SPEED_100 &&
 
1267             !(features & (SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full)))
 
1269         if (duplex == DUPLEX_FULL &&
 
1270             !(features & (SUPPORTED_1000baseT_Full |
 
1271                           SUPPORTED_100baseT_Full |
 
1272                           SUPPORTED_10baseT_Full)))
 
1273                 duplex = DUPLEX_HALF;
 
1277         /* If we are asleep, we don't try to actually setup the PHY, we
 
1278          * just store the settings
 
1281                 gp->phy_mii.autoneg = gp->want_autoneg = autoneg;
 
1282                 gp->phy_mii.speed = speed;
 
1283                 gp->phy_mii.duplex = duplex;
 
1287         /* Configure PHY & start aneg */
 
1288         gp->want_autoneg = autoneg;
 
1290                 if (found_mii_phy(gp))
 
1291                         gp->phy_mii.def->ops->setup_aneg(&gp->phy_mii, advertise);
 
1292                 gp->lstate = link_aneg;
 
1294                 if (found_mii_phy(gp))
 
1295                         gp->phy_mii.def->ops->setup_forced(&gp->phy_mii, speed, duplex);
 
1296                 gp->lstate = link_force_ok;
 
1300         gp->timer_ticks = 0;
 
1301         mod_timer(&gp->link_timer, jiffies + ((12 * HZ) / 10));
 
1304 /* A link-up condition has occurred, initialize and enable the
 
1307  * Must be invoked under gp->lock and gp->tx_lock.
 
1309 static int gem_set_link_modes(struct gem *gp)
 
1312         int full_duplex, speed, pause;
 
1318         if (found_mii_phy(gp)) {
 
1319                 if (gp->phy_mii.def->ops->read_link(&gp->phy_mii))
 
1321                 full_duplex = (gp->phy_mii.duplex == DUPLEX_FULL);
 
1322                 speed = gp->phy_mii.speed;
 
1323                 pause = gp->phy_mii.pause;
 
1324         } else if (gp->phy_type == phy_serialink ||
 
1325                    gp->phy_type == phy_serdes) {
 
1326                 u32 pcs_lpa = readl(gp->regs + PCS_MIILP);
 
1328                 if (pcs_lpa & PCS_MIIADV_FD)
 
1333         if (netif_msg_link(gp))
 
1334                 printk(KERN_INFO "%s: Link is up at %d Mbps, %s-duplex.\n",
 
1335                         gp->dev->name, speed, (full_duplex ? "full" : "half"));
 
1340         val = (MAC_TXCFG_EIPG0 | MAC_TXCFG_NGU);
 
1342                 val |= (MAC_TXCFG_ICS | MAC_TXCFG_ICOLL);
 
1344                 /* MAC_TXCFG_NBO must be zero. */
 
1346         writel(val, gp->regs + MAC_TXCFG);
 
1348         val = (MAC_XIFCFG_OE | MAC_XIFCFG_LLED);
 
1350             (gp->phy_type == phy_mii_mdio0 ||
 
1351              gp->phy_type == phy_mii_mdio1)) {
 
1352                 val |= MAC_XIFCFG_DISE;
 
1353         } else if (full_duplex) {
 
1354                 val |= MAC_XIFCFG_FLED;
 
1357         if (speed == SPEED_1000)
 
1358                 val |= (MAC_XIFCFG_GMII);
 
1360         writel(val, gp->regs + MAC_XIFCFG);
 
1362         /* If gigabit and half-duplex, enable carrier extension
 
1363          * mode.  Else, disable it.
 
1365         if (speed == SPEED_1000 && !full_duplex) {
 
1366                 val = readl(gp->regs + MAC_TXCFG);
 
1367                 writel(val | MAC_TXCFG_TCE, gp->regs + MAC_TXCFG);
 
1369                 val = readl(gp->regs + MAC_RXCFG);
 
1370                 writel(val | MAC_RXCFG_RCE, gp->regs + MAC_RXCFG);
 
1372                 val = readl(gp->regs + MAC_TXCFG);
 
1373                 writel(val & ~MAC_TXCFG_TCE, gp->regs + MAC_TXCFG);
 
1375                 val = readl(gp->regs + MAC_RXCFG);
 
1376                 writel(val & ~MAC_RXCFG_RCE, gp->regs + MAC_RXCFG);
 
1379         if (gp->phy_type == phy_serialink ||
 
1380             gp->phy_type == phy_serdes) {
 
1381                 u32 pcs_lpa = readl(gp->regs + PCS_MIILP);
 
1383                 if (pcs_lpa & (PCS_MIIADV_SP | PCS_MIIADV_AP))
 
1387         if (netif_msg_link(gp)) {
 
1389                         printk(KERN_INFO "%s: Pause is enabled "
 
1390                                "(rxfifo: %d off: %d on: %d)\n",
 
1396                         printk(KERN_INFO "%s: Pause is disabled\n",
 
1402                 writel(512, gp->regs + MAC_STIME);
 
1404                 writel(64, gp->regs + MAC_STIME);
 
1405         val = readl(gp->regs + MAC_MCCFG);
 
1407                 val |= (MAC_MCCFG_SPE | MAC_MCCFG_RPE);
 
1409                 val &= ~(MAC_MCCFG_SPE | MAC_MCCFG_RPE);
 
1410         writel(val, gp->regs + MAC_MCCFG);
 
1417 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1418 static int gem_mdio_link_not_up(struct gem *gp)
 
1420         switch (gp->lstate) {
 
1421         case link_force_ret:
 
1422                 if (netif_msg_link(gp))
 
1423                         printk(KERN_INFO "%s: Autoneg failed again, keeping"
 
1424                                 " forced mode\n", gp->dev->name);
 
1425                 gp->phy_mii.def->ops->setup_forced(&gp->phy_mii,
 
1426                         gp->last_forced_speed, DUPLEX_HALF);
 
1427                 gp->timer_ticks = 5;
 
1428                 gp->lstate = link_force_ok;
 
1431                 /* We try forced modes after a failed aneg only on PHYs that don't
 
1432                  * have "magic_aneg" bit set, which means they internally do the
 
1433                  * while forced-mode thingy. On these, we just restart aneg
 
1435                 if (gp->phy_mii.def->magic_aneg)
 
1437                 if (netif_msg_link(gp))
 
1438                         printk(KERN_INFO "%s: switching to forced 100bt\n",
 
1440                 /* Try forced modes. */
 
1441                 gp->phy_mii.def->ops->setup_forced(&gp->phy_mii, SPEED_100,
 
1443                 gp->timer_ticks = 5;
 
1444                 gp->lstate = link_force_try;
 
1446         case link_force_try:
 
1447                 /* Downgrade from 100 to 10 Mbps if necessary.
 
1448                  * If already at 10Mbps, warn user about the
 
1449                  * situation every 10 ticks.
 
1451                 if (gp->phy_mii.speed == SPEED_100) {
 
1452                         gp->phy_mii.def->ops->setup_forced(&gp->phy_mii, SPEED_10,
 
1454                         gp->timer_ticks = 5;
 
1455                         if (netif_msg_link(gp))
 
1456                                 printk(KERN_INFO "%s: switching to forced 10bt\n",
 
1466 static void gem_link_timer(unsigned long data)
 
1468         struct gem *gp = (struct gem *) data;
 
1469         int restart_aneg = 0;
 
1474         spin_lock_irq(&gp->lock);
 
1475         spin_lock(&gp->tx_lock);
 
1478         /* If the reset task is still pending, we just
 
1479          * reschedule the link timer
 
1481         if (gp->reset_task_pending)
 
1484         if (gp->phy_type == phy_serialink ||
 
1485             gp->phy_type == phy_serdes) {
 
1486                 u32 val = readl(gp->regs + PCS_MIISTAT);
 
1488                 if (!(val & PCS_MIISTAT_LS))
 
1489                         val = readl(gp->regs + PCS_MIISTAT);
 
1491                 if ((val & PCS_MIISTAT_LS) != 0) {
 
1492                         gp->lstate = link_up;
 
1493                         netif_carrier_on(gp->dev);
 
1494                         (void)gem_set_link_modes(gp);
 
1498         if (found_mii_phy(gp) && gp->phy_mii.def->ops->poll_link(&gp->phy_mii)) {
 
1499                 /* Ok, here we got a link. If we had it due to a forced
 
1500                  * fallback, and we were configured for autoneg, we do
 
1501                  * retry a short autoneg pass. If you know your hub is
 
1502                  * broken, use ethtool ;)
 
1504                 if (gp->lstate == link_force_try && gp->want_autoneg) {
 
1505                         gp->lstate = link_force_ret;
 
1506                         gp->last_forced_speed = gp->phy_mii.speed;
 
1507                         gp->timer_ticks = 5;
 
1508                         if (netif_msg_link(gp))
 
1509                                 printk(KERN_INFO "%s: Got link after fallback, retrying"
 
1510                                         " autoneg once...\n", gp->dev->name);
 
1511                         gp->phy_mii.def->ops->setup_aneg(&gp->phy_mii, gp->phy_mii.advertising);
 
1512                 } else if (gp->lstate != link_up) {
 
1513                         gp->lstate = link_up;
 
1514                         netif_carrier_on(gp->dev);
 
1515                         if (gem_set_link_modes(gp))
 
1519                 /* If the link was previously up, we restart the
 
1522                 if (gp->lstate == link_up) {
 
1523                         gp->lstate = link_down;
 
1524                         if (netif_msg_link(gp))
 
1525                                 printk(KERN_INFO "%s: Link down\n",
 
1527                         netif_carrier_off(gp->dev);
 
1528                         gp->reset_task_pending = 1;
 
1529                         schedule_work(&gp->reset_task);
 
1531                 } else if (++gp->timer_ticks > 10) {
 
1532                         if (found_mii_phy(gp))
 
1533                                 restart_aneg = gem_mdio_link_not_up(gp);
 
1539                 gem_begin_auto_negotiation(gp, NULL);
 
1543         mod_timer(&gp->link_timer, jiffies + ((12 * HZ) / 10));
 
1546         spin_unlock(&gp->tx_lock);
 
1547         spin_unlock_irq(&gp->lock);
 
1550 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1551 static void gem_clean_rings(struct gem *gp)
 
1553         struct gem_init_block *gb = gp->init_block;
 
1554         struct sk_buff *skb;
 
1556         dma_addr_t dma_addr;
 
1558         for (i = 0; i < RX_RING_SIZE; i++) {
 
1559                 struct gem_rxd *rxd;
 
1562                 if (gp->rx_skbs[i] != NULL) {
 
1563                         skb = gp->rx_skbs[i];
 
1564                         dma_addr = le64_to_cpu(rxd->buffer);
 
1565                         pci_unmap_page(gp->pdev, dma_addr,
 
1566                                        RX_BUF_ALLOC_SIZE(gp),
 
1567                                        PCI_DMA_FROMDEVICE);
 
1568                         dev_kfree_skb_any(skb);
 
1569                         gp->rx_skbs[i] = NULL;
 
1571                 rxd->status_word = 0;
 
1576         for (i = 0; i < TX_RING_SIZE; i++) {
 
1577                 if (gp->tx_skbs[i] != NULL) {
 
1578                         struct gem_txd *txd;
 
1581                         skb = gp->tx_skbs[i];
 
1582                         gp->tx_skbs[i] = NULL;
 
1584                         for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
 
1585                                 int ent = i & (TX_RING_SIZE - 1);
 
1587                                 txd = &gb->txd[ent];
 
1588                                 dma_addr = le64_to_cpu(txd->buffer);
 
1589                                 pci_unmap_page(gp->pdev, dma_addr,
 
1590                                                le64_to_cpu(txd->control_word) &
 
1591                                                TXDCTRL_BUFSZ, PCI_DMA_TODEVICE);
 
1593                                 if (frag != skb_shinfo(skb)->nr_frags)
 
1596                         dev_kfree_skb_any(skb);
 
1601 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1602 static void gem_init_rings(struct gem *gp)
 
1604         struct gem_init_block *gb = gp->init_block;
 
1605         struct net_device *dev = gp->dev;
 
1607         dma_addr_t dma_addr;
 
1609         gp->rx_new = gp->rx_old = gp->tx_new = gp->tx_old = 0;
 
1611         gem_clean_rings(gp);
 
1613         gp->rx_buf_sz = max(dev->mtu + ETH_HLEN + VLAN_HLEN,
 
1614                             (unsigned)VLAN_ETH_FRAME_LEN);
 
1616         for (i = 0; i < RX_RING_SIZE; i++) {
 
1617                 struct sk_buff *skb;
 
1618                 struct gem_rxd *rxd = &gb->rxd[i];
 
1620                 skb = gem_alloc_skb(RX_BUF_ALLOC_SIZE(gp), GFP_ATOMIC);
 
1623                         rxd->status_word = 0;
 
1627                 gp->rx_skbs[i] = skb;
 
1629                 skb_put(skb, (gp->rx_buf_sz + RX_OFFSET));
 
1630                 dma_addr = pci_map_page(gp->pdev,
 
1631                                         virt_to_page(skb->data),
 
1632                                         offset_in_page(skb->data),
 
1633                                         RX_BUF_ALLOC_SIZE(gp),
 
1634                                         PCI_DMA_FROMDEVICE);
 
1635                 rxd->buffer = cpu_to_le64(dma_addr);
 
1637                 rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp));
 
1638                 skb_reserve(skb, RX_OFFSET);
 
1641         for (i = 0; i < TX_RING_SIZE; i++) {
 
1642                 struct gem_txd *txd = &gb->txd[i];
 
1644                 txd->control_word = 0;
 
1651 /* Init PHY interface and start link poll state machine */
 
1652 static void gem_init_phy(struct gem *gp)
 
1656         /* Revert MIF CFG setting done on stop_phy */
 
1657         mifcfg = readl(gp->regs + MIF_CFG);
 
1658         mifcfg &= ~MIF_CFG_BBMODE;
 
1659         writel(mifcfg, gp->regs + MIF_CFG);
 
1661         if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE) {
 
1664                 /* Those delay sucks, the HW seem to love them though, I'll
 
1665                  * serisouly consider breaking some locks here to be able
 
1666                  * to schedule instead
 
1668                 for (i = 0; i < 3; i++) {
 
1669 #ifdef CONFIG_PPC_PMAC
 
1670                         pmac_call_feature(PMAC_FTR_GMAC_PHY_RESET, gp->of_node, 0, 0);
 
1673                         /* Some PHYs used by apple have problem getting back to us,
 
1674                          * we do an additional reset here
 
1676                         phy_write(gp, MII_BMCR, BMCR_RESET);
 
1678                         if (phy_read(gp, MII_BMCR) != 0xffff)
 
1681                                 printk(KERN_WARNING "%s: GMAC PHY not responding !\n",
 
1686         if (gp->pdev->vendor == PCI_VENDOR_ID_SUN &&
 
1687             gp->pdev->device == PCI_DEVICE_ID_SUN_GEM) {
 
1690                 /* Init datapath mode register. */
 
1691                 if (gp->phy_type == phy_mii_mdio0 ||
 
1692                     gp->phy_type == phy_mii_mdio1) {
 
1693                         val = PCS_DMODE_MGM;
 
1694                 } else if (gp->phy_type == phy_serialink) {
 
1695                         val = PCS_DMODE_SM | PCS_DMODE_GMOE;
 
1697                         val = PCS_DMODE_ESM;
 
1700                 writel(val, gp->regs + PCS_DMODE);
 
1703         if (gp->phy_type == phy_mii_mdio0 ||
 
1704             gp->phy_type == phy_mii_mdio1) {
 
1705                 // XXX check for errors
 
1706                 mii_phy_probe(&gp->phy_mii, gp->mii_phy_addr);
 
1709                 if (gp->phy_mii.def && gp->phy_mii.def->ops->init)
 
1710                         gp->phy_mii.def->ops->init(&gp->phy_mii);
 
1715                 /* Reset PCS unit. */
 
1716                 val = readl(gp->regs + PCS_MIICTRL);
 
1717                 val |= PCS_MIICTRL_RST;
 
1718                 writeb(val, gp->regs + PCS_MIICTRL);
 
1721                 while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) {
 
1727                         printk(KERN_WARNING "%s: PCS reset bit would not clear.\n",
 
1730                 /* Make sure PCS is disabled while changing advertisement
 
1733                 val = readl(gp->regs + PCS_CFG);
 
1734                 val &= ~(PCS_CFG_ENABLE | PCS_CFG_TO);
 
1735                 writel(val, gp->regs + PCS_CFG);
 
1737                 /* Advertise all capabilities except assymetric
 
1740                 val = readl(gp->regs + PCS_MIIADV);
 
1741                 val |= (PCS_MIIADV_FD | PCS_MIIADV_HD |
 
1742                         PCS_MIIADV_SP | PCS_MIIADV_AP);
 
1743                 writel(val, gp->regs + PCS_MIIADV);
 
1745                 /* Enable and restart auto-negotiation, disable wrapback/loopback,
 
1746                  * and re-enable PCS.
 
1748                 val = readl(gp->regs + PCS_MIICTRL);
 
1749                 val |= (PCS_MIICTRL_RAN | PCS_MIICTRL_ANE);
 
1750                 val &= ~PCS_MIICTRL_WB;
 
1751                 writel(val, gp->regs + PCS_MIICTRL);
 
1753                 val = readl(gp->regs + PCS_CFG);
 
1754                 val |= PCS_CFG_ENABLE;
 
1755                 writel(val, gp->regs + PCS_CFG);
 
1757                 /* Make sure serialink loopback is off.  The meaning
 
1758                  * of this bit is logically inverted based upon whether
 
1759                  * you are in Serialink or SERDES mode.
 
1761                 val = readl(gp->regs + PCS_SCTRL);
 
1762                 if (gp->phy_type == phy_serialink)
 
1763                         val &= ~PCS_SCTRL_LOOP;
 
1765                         val |= PCS_SCTRL_LOOP;
 
1766                 writel(val, gp->regs + PCS_SCTRL);
 
1769         /* Default aneg parameters */
 
1770         gp->timer_ticks = 0;
 
1771         gp->lstate = link_down;
 
1772         netif_carrier_off(gp->dev);
 
1774         /* Can I advertise gigabit here ? I'd need BCM PHY docs... */
 
1775         spin_lock_irq(&gp->lock);
 
1776         gem_begin_auto_negotiation(gp, NULL);
 
1777         spin_unlock_irq(&gp->lock);
 
1780 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1781 static void gem_init_dma(struct gem *gp)
 
1783         u64 desc_dma = (u64) gp->gblock_dvma;
 
1786         val = (TXDMA_CFG_BASE | (0x7ff << 10) | TXDMA_CFG_PMODE);
 
1787         writel(val, gp->regs + TXDMA_CFG);
 
1789         writel(desc_dma >> 32, gp->regs + TXDMA_DBHI);
 
1790         writel(desc_dma & 0xffffffff, gp->regs + TXDMA_DBLOW);
 
1791         desc_dma += (INIT_BLOCK_TX_RING_SIZE * sizeof(struct gem_txd));
 
1793         writel(0, gp->regs + TXDMA_KICK);
 
1795         val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
 
1796                ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
 
1797         writel(val, gp->regs + RXDMA_CFG);
 
1799         writel(desc_dma >> 32, gp->regs + RXDMA_DBHI);
 
1800         writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
 
1802         writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
 
1804         val  = (((gp->rx_pause_off / 64) << 0) & RXDMA_PTHRESH_OFF);
 
1805         val |= (((gp->rx_pause_on / 64) << 12) & RXDMA_PTHRESH_ON);
 
1806         writel(val, gp->regs + RXDMA_PTHRESH);
 
1808         if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
 
1809                 writel(((5 & RXDMA_BLANK_IPKTS) |
 
1810                         ((8 << 12) & RXDMA_BLANK_ITIME)),
 
1811                        gp->regs + RXDMA_BLANK);
 
1813                 writel(((5 & RXDMA_BLANK_IPKTS) |
 
1814                         ((4 << 12) & RXDMA_BLANK_ITIME)),
 
1815                        gp->regs + RXDMA_BLANK);
 
1818 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1819 static u32 gem_setup_multicast(struct gem *gp)
 
1824         if ((gp->dev->flags & IFF_ALLMULTI) ||
 
1825             (gp->dev->mc_count > 256)) {
 
1826                 for (i=0; i<16; i++)
 
1827                         writel(0xffff, gp->regs + MAC_HASH0 + (i << 2));
 
1828                 rxcfg |= MAC_RXCFG_HFE;
 
1829         } else if (gp->dev->flags & IFF_PROMISC) {
 
1830                 rxcfg |= MAC_RXCFG_PROM;
 
1834                 struct dev_mc_list *dmi = gp->dev->mc_list;
 
1837                 for (i = 0; i < 16; i++)
 
1840                 for (i = 0; i < gp->dev->mc_count; i++) {
 
1841                         char *addrs = dmi->dmi_addr;
 
1848                         crc = ether_crc_le(6, addrs);
 
1850                         hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf));
 
1852                 for (i=0; i<16; i++)
 
1853                         writel(hash_table[i], gp->regs + MAC_HASH0 + (i << 2));
 
1854                 rxcfg |= MAC_RXCFG_HFE;
 
1860 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1861 static void gem_init_mac(struct gem *gp)
 
1863         unsigned char *e = &gp->dev->dev_addr[0];
 
1865         writel(0x1bf0, gp->regs + MAC_SNDPAUSE);
 
1867         writel(0x00, gp->regs + MAC_IPG0);
 
1868         writel(0x08, gp->regs + MAC_IPG1);
 
1869         writel(0x04, gp->regs + MAC_IPG2);
 
1870         writel(0x40, gp->regs + MAC_STIME);
 
1871         writel(0x40, gp->regs + MAC_MINFSZ);
 
1873         /* Ethernet payload + header + FCS + optional VLAN tag. */
 
1874         writel(0x20000000 | (gp->rx_buf_sz + 4), gp->regs + MAC_MAXFSZ);
 
1876         writel(0x07, gp->regs + MAC_PASIZE);
 
1877         writel(0x04, gp->regs + MAC_JAMSIZE);
 
1878         writel(0x10, gp->regs + MAC_ATTLIM);
 
1879         writel(0x8808, gp->regs + MAC_MCTYPE);
 
1881         writel((e[5] | (e[4] << 8)) & 0x3ff, gp->regs + MAC_RANDSEED);
 
1883         writel((e[4] << 8) | e[5], gp->regs + MAC_ADDR0);
 
1884         writel((e[2] << 8) | e[3], gp->regs + MAC_ADDR1);
 
1885         writel((e[0] << 8) | e[1], gp->regs + MAC_ADDR2);
 
1887         writel(0, gp->regs + MAC_ADDR3);
 
1888         writel(0, gp->regs + MAC_ADDR4);
 
1889         writel(0, gp->regs + MAC_ADDR5);
 
1891         writel(0x0001, gp->regs + MAC_ADDR6);
 
1892         writel(0xc200, gp->regs + MAC_ADDR7);
 
1893         writel(0x0180, gp->regs + MAC_ADDR8);
 
1895         writel(0, gp->regs + MAC_AFILT0);
 
1896         writel(0, gp->regs + MAC_AFILT1);
 
1897         writel(0, gp->regs + MAC_AFILT2);
 
1898         writel(0, gp->regs + MAC_AF21MSK);
 
1899         writel(0, gp->regs + MAC_AF0MSK);
 
1901         gp->mac_rx_cfg = gem_setup_multicast(gp);
 
1903         gp->mac_rx_cfg |= MAC_RXCFG_SFCS;
 
1905         writel(0, gp->regs + MAC_NCOLL);
 
1906         writel(0, gp->regs + MAC_FASUCC);
 
1907         writel(0, gp->regs + MAC_ECOLL);
 
1908         writel(0, gp->regs + MAC_LCOLL);
 
1909         writel(0, gp->regs + MAC_DTIMER);
 
1910         writel(0, gp->regs + MAC_PATMPS);
 
1911         writel(0, gp->regs + MAC_RFCTR);
 
1912         writel(0, gp->regs + MAC_LERR);
 
1913         writel(0, gp->regs + MAC_AERR);
 
1914         writel(0, gp->regs + MAC_FCSERR);
 
1915         writel(0, gp->regs + MAC_RXCVERR);
 
1917         /* Clear RX/TX/MAC/XIF config, we will set these up and enable
 
1918          * them once a link is established.
 
1920         writel(0, gp->regs + MAC_TXCFG);
 
1921         writel(gp->mac_rx_cfg, gp->regs + MAC_RXCFG);
 
1922         writel(0, gp->regs + MAC_MCCFG);
 
1923         writel(0, gp->regs + MAC_XIFCFG);
 
1925         /* Setup MAC interrupts.  We want to get all of the interesting
 
1926          * counter expiration events, but we do not want to hear about
 
1927          * normal rx/tx as the DMA engine tells us that.
 
1929         writel(MAC_TXSTAT_XMIT, gp->regs + MAC_TXMASK);
 
1930         writel(MAC_RXSTAT_RCV, gp->regs + MAC_RXMASK);
 
1932         /* Don't enable even the PAUSE interrupts for now, we
 
1933          * make no use of those events other than to record them.
 
1935         writel(0xffffffff, gp->regs + MAC_MCMASK);
 
1937         /* Don't enable GEM's WOL in normal operations
 
1940                 writel(0, gp->regs + WOL_WAKECSR);
 
1943 /* Must be invoked under gp->lock and gp->tx_lock. */
 
1944 static void gem_init_pause_thresholds(struct gem *gp)
 
1948         /* Calculate pause thresholds.  Setting the OFF threshold to the
 
1949          * full RX fifo size effectively disables PAUSE generation which
 
1950          * is what we do for 10/100 only GEMs which have FIFOs too small
 
1951          * to make real gains from PAUSE.
 
1953         if (gp->rx_fifo_sz <= (2 * 1024)) {
 
1954                 gp->rx_pause_off = gp->rx_pause_on = gp->rx_fifo_sz;
 
1956                 int max_frame = (gp->rx_buf_sz + 4 + 64) & ~63;
 
1957                 int off = (gp->rx_fifo_sz - (max_frame * 2));
 
1958                 int on = off - max_frame;
 
1960                 gp->rx_pause_off = off;
 
1961                 gp->rx_pause_on = on;
 
1965         /* Configure the chip "burst" DMA mode & enable some
 
1966          * HW bug fixes on Apple version
 
1969         if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE)
 
1970                 cfg |= GREG_CFG_RONPAULBIT | GREG_CFG_ENBUG2FIX;
 
1971 #if !defined(CONFIG_SPARC64) && !defined(CONFIG_ALPHA)
 
1972         cfg |= GREG_CFG_IBURST;
 
1974         cfg |= ((31 << 1) & GREG_CFG_TXDMALIM);
 
1975         cfg |= ((31 << 6) & GREG_CFG_RXDMALIM);
 
1976         writel(cfg, gp->regs + GREG_CFG);
 
1978         /* If Infinite Burst didn't stick, then use different
 
1979          * thresholds (and Apple bug fixes don't exist)
 
1981         if (!(readl(gp->regs + GREG_CFG) & GREG_CFG_IBURST)) {
 
1982                 cfg = ((2 << 1) & GREG_CFG_TXDMALIM);
 
1983                 cfg |= ((8 << 6) & GREG_CFG_RXDMALIM);
 
1984                 writel(cfg, gp->regs + GREG_CFG);
 
1988 static int gem_check_invariants(struct gem *gp)
 
1990         struct pci_dev *pdev = gp->pdev;
 
1993         /* On Apple's sungem, we can't rely on registers as the chip
 
1994          * was been powered down by the firmware. The PHY is looked
 
1997         if (pdev->vendor == PCI_VENDOR_ID_APPLE) {
 
1998                 gp->phy_type = phy_mii_mdio0;
 
1999                 gp->tx_fifo_sz = readl(gp->regs + TXDMA_FSZ) * 64;
 
2000                 gp->rx_fifo_sz = readl(gp->regs + RXDMA_FSZ) * 64;
 
2003                 mif_cfg = readl(gp->regs + MIF_CFG);
 
2004                 mif_cfg &= ~(MIF_CFG_PSELECT|MIF_CFG_POLL|MIF_CFG_BBMODE|MIF_CFG_MDI1);
 
2005                 mif_cfg |= MIF_CFG_MDI0;
 
2006                 writel(mif_cfg, gp->regs + MIF_CFG);
 
2007                 writel(PCS_DMODE_MGM, gp->regs + PCS_DMODE);
 
2008                 writel(MAC_XIFCFG_OE, gp->regs + MAC_XIFCFG);
 
2010                 /* We hard-code the PHY address so we can properly bring it out of
 
2011                  * reset later on, we can't really probe it at this point, though
 
2012                  * that isn't an issue.
 
2014                 if (gp->pdev->device == PCI_DEVICE_ID_APPLE_K2_GMAC)
 
2015                         gp->mii_phy_addr = 1;
 
2017                         gp->mii_phy_addr = 0;
 
2022         mif_cfg = readl(gp->regs + MIF_CFG);
 
2024         if (pdev->vendor == PCI_VENDOR_ID_SUN &&
 
2025             pdev->device == PCI_DEVICE_ID_SUN_RIO_GEM) {
 
2026                 /* One of the MII PHYs _must_ be present
 
2027                  * as this chip has no gigabit PHY.
 
2029                 if ((mif_cfg & (MIF_CFG_MDI0 | MIF_CFG_MDI1)) == 0) {
 
2030                         printk(KERN_ERR PFX "RIO GEM lacks MII phy, mif_cfg[%08x]\n",
 
2036         /* Determine initial PHY interface type guess.  MDIO1 is the
 
2037          * external PHY and thus takes precedence over MDIO0.
 
2040         if (mif_cfg & MIF_CFG_MDI1) {
 
2041                 gp->phy_type = phy_mii_mdio1;
 
2042                 mif_cfg |= MIF_CFG_PSELECT;
 
2043                 writel(mif_cfg, gp->regs + MIF_CFG);
 
2044         } else if (mif_cfg & MIF_CFG_MDI0) {
 
2045                 gp->phy_type = phy_mii_mdio0;
 
2046                 mif_cfg &= ~MIF_CFG_PSELECT;
 
2047                 writel(mif_cfg, gp->regs + MIF_CFG);
 
2049                 gp->phy_type = phy_serialink;
 
2051         if (gp->phy_type == phy_mii_mdio1 ||
 
2052             gp->phy_type == phy_mii_mdio0) {
 
2055                 for (i = 0; i < 32; i++) {
 
2056                         gp->mii_phy_addr = i;
 
2057                         if (phy_read(gp, MII_BMCR) != 0xffff)
 
2061                         if (pdev->device != PCI_DEVICE_ID_SUN_GEM) {
 
2062                                 printk(KERN_ERR PFX "RIO MII phy will not respond.\n");
 
2065                         gp->phy_type = phy_serdes;
 
2069         /* Fetch the FIFO configurations now too. */
 
2070         gp->tx_fifo_sz = readl(gp->regs + TXDMA_FSZ) * 64;
 
2071         gp->rx_fifo_sz = readl(gp->regs + RXDMA_FSZ) * 64;
 
2073         if (pdev->vendor == PCI_VENDOR_ID_SUN) {
 
2074                 if (pdev->device == PCI_DEVICE_ID_SUN_GEM) {
 
2075                         if (gp->tx_fifo_sz != (9 * 1024) ||
 
2076                             gp->rx_fifo_sz != (20 * 1024)) {
 
2077                                 printk(KERN_ERR PFX "GEM has bogus fifo sizes tx(%d) rx(%d)\n",
 
2078                                        gp->tx_fifo_sz, gp->rx_fifo_sz);
 
2083                         if (gp->tx_fifo_sz != (2 * 1024) ||
 
2084                             gp->rx_fifo_sz != (2 * 1024)) {
 
2085                                 printk(KERN_ERR PFX "RIO GEM has bogus fifo sizes tx(%d) rx(%d)\n",
 
2086                                        gp->tx_fifo_sz, gp->rx_fifo_sz);
 
2089                         gp->swrst_base = (64 / 4) << GREG_SWRST_CACHE_SHIFT;
 
2096 /* Must be invoked under gp->lock and gp->tx_lock. */
 
2097 static void gem_reinit_chip(struct gem *gp)
 
2099         /* Reset the chip */
 
2102         /* Make sure ints are disabled */
 
2103         gem_disable_ints(gp);
 
2105         /* Allocate & setup ring buffers */
 
2108         /* Configure pause thresholds */
 
2109         gem_init_pause_thresholds(gp);
 
2111         /* Init DMA & MAC engines */
 
2117 /* Must be invoked with no lock held. */
 
2118 static void gem_stop_phy(struct gem *gp, int wol)
 
2121         unsigned long flags;
 
2123         /* Let the chip settle down a bit, it seems that helps
 
2124          * for sleep mode on some models
 
2128         /* Make sure we aren't polling PHY status change. We
 
2129          * don't currently use that feature though
 
2131         mifcfg = readl(gp->regs + MIF_CFG);
 
2132         mifcfg &= ~MIF_CFG_POLL;
 
2133         writel(mifcfg, gp->regs + MIF_CFG);
 
2135         if (wol && gp->has_wol) {
 
2136                 unsigned char *e = &gp->dev->dev_addr[0];
 
2139                 /* Setup wake-on-lan for MAGIC packet */
 
2140                 writel(MAC_RXCFG_HFE | MAC_RXCFG_SFCS | MAC_RXCFG_ENAB,
 
2141                        gp->regs + MAC_RXCFG);   
 
2142                 writel((e[4] << 8) | e[5], gp->regs + WOL_MATCH0);
 
2143                 writel((e[2] << 8) | e[3], gp->regs + WOL_MATCH1);
 
2144                 writel((e[0] << 8) | e[1], gp->regs + WOL_MATCH2);
 
2146                 writel(WOL_MCOUNT_N | WOL_MCOUNT_M, gp->regs + WOL_MCOUNT);
 
2147                 csr = WOL_WAKECSR_ENABLE;
 
2148                 if ((readl(gp->regs + MAC_XIFCFG) & MAC_XIFCFG_GMII) == 0)
 
2149                         csr |= WOL_WAKECSR_MII;
 
2150                 writel(csr, gp->regs + WOL_WAKECSR);
 
2152                 writel(0, gp->regs + MAC_RXCFG);
 
2153                 (void)readl(gp->regs + MAC_RXCFG);
 
2154                 /* Machine sleep will die in strange ways if we
 
2155                  * dont wait a bit here, looks like the chip takes
 
2156                  * some time to really shut down
 
2161         writel(0, gp->regs + MAC_TXCFG);
 
2162         writel(0, gp->regs + MAC_XIFCFG);
 
2163         writel(0, gp->regs + TXDMA_CFG);
 
2164         writel(0, gp->regs + RXDMA_CFG);
 
2167                 spin_lock_irqsave(&gp->lock, flags);
 
2168                 spin_lock(&gp->tx_lock);
 
2170                 writel(MAC_TXRST_CMD, gp->regs + MAC_TXRST);
 
2171                 writel(MAC_RXRST_CMD, gp->regs + MAC_RXRST);
 
2172                 spin_unlock(&gp->tx_lock);
 
2173                 spin_unlock_irqrestore(&gp->lock, flags);
 
2175                 /* No need to take the lock here */
 
2177                 if (found_mii_phy(gp) && gp->phy_mii.def->ops->suspend)
 
2178                         gp->phy_mii.def->ops->suspend(&gp->phy_mii);
 
2180                 /* According to Apple, we must set the MDIO pins to this begnign
 
2181                  * state or we may 1) eat more current, 2) damage some PHYs
 
2183                 writel(mifcfg | MIF_CFG_BBMODE, gp->regs + MIF_CFG);
 
2184                 writel(0, gp->regs + MIF_BBCLK);
 
2185                 writel(0, gp->regs + MIF_BBDATA);
 
2186                 writel(0, gp->regs + MIF_BBOENAB);
 
2187                 writel(MAC_XIFCFG_GMII | MAC_XIFCFG_LBCK, gp->regs + MAC_XIFCFG);
 
2188                 (void) readl(gp->regs + MAC_XIFCFG);
 
2193 static int gem_do_start(struct net_device *dev)
 
2195         struct gem *gp = dev->priv;
 
2196         unsigned long flags;
 
2198         spin_lock_irqsave(&gp->lock, flags);
 
2199         spin_lock(&gp->tx_lock);
 
2201         /* Enable the cell */
 
2204         /* Init & setup chip hardware */
 
2205         gem_reinit_chip(gp);
 
2209         if (gp->lstate == link_up) {
 
2210                 netif_carrier_on(gp->dev);
 
2211                 gem_set_link_modes(gp);
 
2214         netif_wake_queue(gp->dev);
 
2216         spin_unlock(&gp->tx_lock);
 
2217         spin_unlock_irqrestore(&gp->lock, flags);
 
2219         if (request_irq(gp->pdev->irq, gem_interrupt,
 
2220                                    SA_SHIRQ, dev->name, (void *)dev)) {
 
2221                 printk(KERN_ERR "%s: failed to request irq !\n", gp->dev->name);
 
2223                 spin_lock_irqsave(&gp->lock, flags);
 
2224                 spin_lock(&gp->tx_lock);
 
2228                 gem_clean_rings(gp);
 
2231                 spin_unlock(&gp->tx_lock);
 
2232                 spin_unlock_irqrestore(&gp->lock, flags);
 
2240 static void gem_do_stop(struct net_device *dev, int wol)
 
2242         struct gem *gp = dev->priv;
 
2243         unsigned long flags;
 
2245         spin_lock_irqsave(&gp->lock, flags);
 
2246         spin_lock(&gp->tx_lock);
 
2250         /* Stop netif queue */
 
2251         netif_stop_queue(dev);
 
2253         /* Make sure ints are disabled */
 
2254         gem_disable_ints(gp);
 
2256         /* We can drop the lock now */
 
2257         spin_unlock(&gp->tx_lock);
 
2258         spin_unlock_irqrestore(&gp->lock, flags);
 
2260         /* If we are going to sleep with WOL */
 
2267         /* Get rid of rings */
 
2268         gem_clean_rings(gp);
 
2270         /* No irq needed anymore */
 
2271         free_irq(gp->pdev->irq, (void *) dev);
 
2273         /* Cell not needed neither if no WOL */
 
2275                 spin_lock_irqsave(&gp->lock, flags);
 
2277                 spin_unlock_irqrestore(&gp->lock, flags);
 
2281 static void gem_reset_task(void *data)
 
2283         struct gem *gp = (struct gem *) data;
 
2287         netif_poll_disable(gp->dev);
 
2289         spin_lock_irq(&gp->lock);
 
2290         spin_lock(&gp->tx_lock);
 
2292         if (gp->running == 0)
 
2296                 netif_stop_queue(gp->dev);
 
2298                 /* Reset the chip & rings */
 
2299                 gem_reinit_chip(gp);
 
2300                 if (gp->lstate == link_up)
 
2301                         gem_set_link_modes(gp);
 
2302                 netif_wake_queue(gp->dev);
 
2305         gp->reset_task_pending = 0;
 
2307         spin_unlock(&gp->tx_lock);
 
2308         spin_unlock_irq(&gp->lock);
 
2310         netif_poll_enable(gp->dev);
 
2316 static int gem_open(struct net_device *dev)
 
2318         struct gem *gp = dev->priv;
 
2323         /* We need the cell enabled */
 
2325                 rc = gem_do_start(dev);
 
2326         gp->opened = (rc == 0);
 
2333 static int gem_close(struct net_device *dev)
 
2335         struct gem *gp = dev->priv;
 
2337         /* Note: we don't need to call netif_poll_disable() here because
 
2338          * our caller (dev_close) already did it for us
 
2345                 gem_do_stop(dev, 0);
 
2353 static int gem_suspend(struct pci_dev *pdev, pm_message_t state)
 
2355         struct net_device *dev = pci_get_drvdata(pdev);
 
2356         struct gem *gp = dev->priv;
 
2357         unsigned long flags;
 
2361         netif_poll_disable(dev);
 
2363         printk(KERN_INFO "%s: suspending, WakeOnLan %s\n",
 
2365                (gp->wake_on_lan && gp->opened) ? "enabled" : "disabled");
 
2367         /* Keep the cell enabled during the entire operation */
 
2368         spin_lock_irqsave(&gp->lock, flags);
 
2369         spin_lock(&gp->tx_lock);
 
2371         spin_unlock(&gp->tx_lock);
 
2372         spin_unlock_irqrestore(&gp->lock, flags);
 
2374         /* If the driver is opened, we stop the MAC */
 
2376                 /* Stop traffic, mark us closed */
 
2377                 netif_device_detach(dev);
 
2379                 /* Switch off MAC, remember WOL setting */
 
2380                 gp->asleep_wol = gp->wake_on_lan;
 
2381                 gem_do_stop(dev, gp->asleep_wol);
 
2385         /* Mark us asleep */
 
2389         /* Stop the link timer */
 
2390         del_timer_sync(&gp->link_timer);
 
2392         /* Now we release the semaphore to not block the reset task who
 
2393          * can take it too. We are marked asleep, so there will be no
 
2398         /* Wait for a pending reset task to complete */
 
2399         while (gp->reset_task_pending)
 
2401         flush_scheduled_work();
 
2403         /* Shut the PHY down eventually and setup WOL */
 
2404         gem_stop_phy(gp, gp->asleep_wol);
 
2406         /* Make sure bus master is disabled */
 
2407         pci_disable_device(gp->pdev);
 
2409         /* Release the cell, no need to take a lock at this point since
 
2410          * nothing else can happen now
 
2417 static int gem_resume(struct pci_dev *pdev)
 
2419         struct net_device *dev = pci_get_drvdata(pdev);
 
2420         struct gem *gp = dev->priv;
 
2421         unsigned long flags;
 
2423         printk(KERN_INFO "%s: resuming\n", dev->name);
 
2427         /* Keep the cell enabled during the entire operation, no need to
 
2428          * take a lock here tho since nothing else can happen while we are
 
2433         /* Make sure PCI access and bus master are enabled */
 
2434         if (pci_enable_device(gp->pdev)) {
 
2435                 printk(KERN_ERR "%s: Can't re-enable chip !\n",
 
2437                 /* Put cell and forget it for now, it will be considered as
 
2438                  * still asleep, a new sleep cycle may bring it back
 
2444         pci_set_master(gp->pdev);
 
2446         /* Reset everything */
 
2449         /* Mark us woken up */
 
2453         /* Bring the PHY back. Again, lock is useless at this point as
 
2454          * nothing can be happening until we restart the whole thing
 
2458         /* If we were opened, bring everything back */
 
2463                 /* Re-attach net device */
 
2464                 netif_device_attach(dev);
 
2468         spin_lock_irqsave(&gp->lock, flags);
 
2469         spin_lock(&gp->tx_lock);
 
2471         /* If we had WOL enabled, the cell clock was never turned off during
 
2472          * sleep, so we end up beeing unbalanced. Fix that here
 
2477         /* This function doesn't need to hold the cell, it will be held if the
 
2478          * driver is open by gem_do_start().
 
2482         spin_unlock(&gp->tx_lock);
 
2483         spin_unlock_irqrestore(&gp->lock, flags);
 
2485         netif_poll_enable(dev);
 
2491 #endif /* CONFIG_PM */
 
2493 static struct net_device_stats *gem_get_stats(struct net_device *dev)
 
2495         struct gem *gp = dev->priv;
 
2496         struct net_device_stats *stats = &gp->net_stats;
 
2498         spin_lock_irq(&gp->lock);
 
2499         spin_lock(&gp->tx_lock);
 
2501         /* I have seen this being called while the PM was in progress,
 
2502          * so we shield against this
 
2505                 stats->rx_crc_errors += readl(gp->regs + MAC_FCSERR);
 
2506                 writel(0, gp->regs + MAC_FCSERR);
 
2508                 stats->rx_frame_errors += readl(gp->regs + MAC_AERR);
 
2509                 writel(0, gp->regs + MAC_AERR);
 
2511                 stats->rx_length_errors += readl(gp->regs + MAC_LERR);
 
2512                 writel(0, gp->regs + MAC_LERR);
 
2514                 stats->tx_aborted_errors += readl(gp->regs + MAC_ECOLL);
 
2515                 stats->collisions +=
 
2516                         (readl(gp->regs + MAC_ECOLL) +
 
2517                          readl(gp->regs + MAC_LCOLL));
 
2518                 writel(0, gp->regs + MAC_ECOLL);
 
2519                 writel(0, gp->regs + MAC_LCOLL);
 
2522         spin_unlock(&gp->tx_lock);
 
2523         spin_unlock_irq(&gp->lock);
 
2525         return &gp->net_stats;
 
2528 static void gem_set_multicast(struct net_device *dev)
 
2530         struct gem *gp = dev->priv;
 
2531         u32 rxcfg, rxcfg_new;
 
2535         spin_lock_irq(&gp->lock);
 
2536         spin_lock(&gp->tx_lock);
 
2541         netif_stop_queue(dev);
 
2543         rxcfg = readl(gp->regs + MAC_RXCFG);
 
2544         rxcfg_new = gem_setup_multicast(gp);
 
2546         rxcfg_new |= MAC_RXCFG_SFCS;
 
2548         gp->mac_rx_cfg = rxcfg_new;
 
2550         writel(rxcfg & ~MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
 
2551         while (readl(gp->regs + MAC_RXCFG) & MAC_RXCFG_ENAB) {
 
2557         rxcfg &= ~(MAC_RXCFG_PROM | MAC_RXCFG_HFE);
 
2560         writel(rxcfg, gp->regs + MAC_RXCFG);
 
2562         netif_wake_queue(dev);
 
2565         spin_unlock(&gp->tx_lock);
 
2566         spin_unlock_irq(&gp->lock);
 
2569 /* Jumbo-grams don't seem to work :-( */
 
2570 #define GEM_MIN_MTU     68
 
2572 #define GEM_MAX_MTU     1500
 
2574 #define GEM_MAX_MTU     9000
 
2577 static int gem_change_mtu(struct net_device *dev, int new_mtu)
 
2579         struct gem *gp = dev->priv;
 
2581         if (new_mtu < GEM_MIN_MTU || new_mtu > GEM_MAX_MTU)
 
2584         if (!netif_running(dev) || !netif_device_present(dev)) {
 
2585                 /* We'll just catch it later when the
 
2586                  * device is up'd or resumed.
 
2593         spin_lock_irq(&gp->lock);
 
2594         spin_lock(&gp->tx_lock);
 
2597                 gem_reinit_chip(gp);
 
2598                 if (gp->lstate == link_up)
 
2599                         gem_set_link_modes(gp);
 
2601         spin_unlock(&gp->tx_lock);
 
2602         spin_unlock_irq(&gp->lock);
 
2608 static void gem_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
 
2610         struct gem *gp = dev->priv;
 
2612         strcpy(info->driver, DRV_NAME);
 
2613         strcpy(info->version, DRV_VERSION);
 
2614         strcpy(info->bus_info, pci_name(gp->pdev));
 
2617 static int gem_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 
2619         struct gem *gp = dev->priv;
 
2621         if (gp->phy_type == phy_mii_mdio0 ||
 
2622             gp->phy_type == phy_mii_mdio1) {
 
2623                 if (gp->phy_mii.def)
 
2624                         cmd->supported = gp->phy_mii.def->features;
 
2626                         cmd->supported = (SUPPORTED_10baseT_Half |
 
2627                                           SUPPORTED_10baseT_Full);
 
2629                 /* XXX hardcoded stuff for now */
 
2630                 cmd->port = PORT_MII;
 
2631                 cmd->transceiver = XCVR_EXTERNAL;
 
2632                 cmd->phy_address = 0; /* XXX fixed PHYAD */
 
2634                 /* Return current PHY settings */
 
2635                 spin_lock_irq(&gp->lock);
 
2636                 cmd->autoneg = gp->want_autoneg;
 
2637                 cmd->speed = gp->phy_mii.speed;
 
2638                 cmd->duplex = gp->phy_mii.duplex;                       
 
2639                 cmd->advertising = gp->phy_mii.advertising;
 
2641                 /* If we started with a forced mode, we don't have a default
 
2642                  * advertise set, we need to return something sensible so
 
2643                  * userland can re-enable autoneg properly.
 
2645                 if (cmd->advertising == 0)
 
2646                         cmd->advertising = cmd->supported;
 
2647                 spin_unlock_irq(&gp->lock);
 
2648         } else { // XXX PCS ?
 
2650                         (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |
 
2651                          SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
 
2653                 cmd->advertising = cmd->supported;
 
2655                 cmd->duplex = cmd->port = cmd->phy_address =
 
2656                         cmd->transceiver = cmd->autoneg = 0;
 
2658         cmd->maxtxpkt = cmd->maxrxpkt = 0;
 
2663 static int gem_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 
2665         struct gem *gp = dev->priv;
 
2667         /* Verify the settings we care about. */
 
2668         if (cmd->autoneg != AUTONEG_ENABLE &&
 
2669             cmd->autoneg != AUTONEG_DISABLE)
 
2672         if (cmd->autoneg == AUTONEG_ENABLE &&
 
2673             cmd->advertising == 0)
 
2676         if (cmd->autoneg == AUTONEG_DISABLE &&
 
2677             ((cmd->speed != SPEED_1000 &&
 
2678               cmd->speed != SPEED_100 &&
 
2679               cmd->speed != SPEED_10) ||
 
2680              (cmd->duplex != DUPLEX_HALF &&
 
2681               cmd->duplex != DUPLEX_FULL)))
 
2684         /* Apply settings and restart link process. */
 
2685         spin_lock_irq(&gp->lock);
 
2687         gem_begin_auto_negotiation(gp, cmd);
 
2689         spin_unlock_irq(&gp->lock);
 
2694 static int gem_nway_reset(struct net_device *dev)
 
2696         struct gem *gp = dev->priv;
 
2698         if (!gp->want_autoneg)
 
2701         /* Restart link process. */
 
2702         spin_lock_irq(&gp->lock);
 
2704         gem_begin_auto_negotiation(gp, NULL);
 
2706         spin_unlock_irq(&gp->lock);
 
2711 static u32 gem_get_msglevel(struct net_device *dev)
 
2713         struct gem *gp = dev->priv;
 
2714         return gp->msg_enable;
 
2717 static void gem_set_msglevel(struct net_device *dev, u32 value)
 
2719         struct gem *gp = dev->priv;
 
2720         gp->msg_enable = value;
 
2724 /* Add more when I understand how to program the chip */
 
2725 /* like WAKE_UCAST | WAKE_MCAST | WAKE_BCAST */
 
2727 #define WOL_SUPPORTED_MASK      (WAKE_MAGIC)
 
2729 static void gem_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
 
2731         struct gem *gp = dev->priv;
 
2733         /* Add more when I understand how to program the chip */
 
2735                 wol->supported = WOL_SUPPORTED_MASK;
 
2736                 wol->wolopts = gp->wake_on_lan;
 
2743 static int gem_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
 
2745         struct gem *gp = dev->priv;
 
2749         gp->wake_on_lan = wol->wolopts & WOL_SUPPORTED_MASK;
 
2753 static struct ethtool_ops gem_ethtool_ops = {
 
2754         .get_drvinfo            = gem_get_drvinfo,
 
2755         .get_link               = ethtool_op_get_link,
 
2756         .get_settings           = gem_get_settings,
 
2757         .set_settings           = gem_set_settings,
 
2758         .nway_reset             = gem_nway_reset,
 
2759         .get_msglevel           = gem_get_msglevel,
 
2760         .set_msglevel           = gem_set_msglevel,
 
2761         .get_wol                = gem_get_wol,
 
2762         .set_wol                = gem_set_wol,
 
2765 static int gem_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 
2767         struct gem *gp = dev->priv;
 
2768         struct mii_ioctl_data *data = if_mii(ifr);
 
2769         int rc = -EOPNOTSUPP;
 
2770         unsigned long flags;
 
2772         /* Hold the PM semaphore while doing ioctl's or we may collide
 
2773          * with power management.
 
2777         spin_lock_irqsave(&gp->lock, flags);
 
2779         spin_unlock_irqrestore(&gp->lock, flags);
 
2782         case SIOCGMIIPHY:               /* Get address of MII PHY in use. */
 
2783                 data->phy_id = gp->mii_phy_addr;
 
2784                 /* Fallthrough... */
 
2786         case SIOCGMIIREG:               /* Read MII PHY register. */
 
2790                         data->val_out = __phy_read(gp, data->phy_id & 0x1f,
 
2791                                                    data->reg_num & 0x1f);
 
2796         case SIOCSMIIREG:               /* Write MII PHY register. */
 
2797                 if (!capable(CAP_NET_ADMIN))
 
2799                 else if (!gp->running)
 
2802                         __phy_write(gp, data->phy_id & 0x1f, data->reg_num & 0x1f,
 
2809         spin_lock_irqsave(&gp->lock, flags);
 
2811         spin_unlock_irqrestore(&gp->lock, flags);
 
2818 #if (!defined(__sparc__) && !defined(CONFIG_PPC_PMAC))
 
2819 /* Fetch MAC address from vital product data of PCI ROM. */
 
2820 static int find_eth_addr_in_vpd(void __iomem *rom_base, int len, unsigned char *dev_addr)
 
2824         for (this_offset = 0x20; this_offset < len; this_offset++) {
 
2825                 void __iomem *p = rom_base + this_offset;
 
2828                 if (readb(p + 0) != 0x90 ||
 
2829                     readb(p + 1) != 0x00 ||
 
2830                     readb(p + 2) != 0x09 ||
 
2831                     readb(p + 3) != 0x4e ||
 
2832                     readb(p + 4) != 0x41 ||
 
2833                     readb(p + 5) != 0x06)
 
2839                 for (i = 0; i < 6; i++)
 
2840                         dev_addr[i] = readb(p + i);
 
2846 static void get_gem_mac_nonobp(struct pci_dev *pdev, unsigned char *dev_addr)
 
2849         void __iomem *p = pci_map_rom(pdev, &size);
 
2854                 found = readb(p) == 0x55 &&
 
2855                         readb(p + 1) == 0xaa &&
 
2856                         find_eth_addr_in_vpd(p, (64 * 1024), dev_addr);
 
2857                 pci_unmap_rom(pdev, p);
 
2862         /* Sun MAC prefix then 3 random bytes. */
 
2866         get_random_bytes(dev_addr + 3, 3);
 
2869 #endif /* not Sparc and not PPC */
 
2871 static int __devinit gem_get_device_address(struct gem *gp)
 
2873 #if defined(__sparc__) || defined(CONFIG_PPC_PMAC)
 
2874         struct net_device *dev = gp->dev;
 
2877 #if defined(__sparc__)
 
2878         struct pci_dev *pdev = gp->pdev;
 
2879         struct pcidev_cookie *pcp = pdev->sysdata;
 
2883                 node = pcp->prom_node;
 
2884                 if (prom_getproplen(node, "local-mac-address") == 6)
 
2885                         prom_getproperty(node, "local-mac-address",
 
2891                 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
 
2892 #elif defined(CONFIG_PPC_PMAC)
 
2893         unsigned char *addr;
 
2895         addr = get_property(gp->of_node, "local-mac-address", NULL);
 
2898                 printk(KERN_ERR "%s: can't get mac-address\n", dev->name);
 
2901         memcpy(dev->dev_addr, addr, 6);
 
2903         get_gem_mac_nonobp(gp->pdev, gp->dev->dev_addr);
 
2908 static void __devexit gem_remove_one(struct pci_dev *pdev)
 
2910         struct net_device *dev = pci_get_drvdata(pdev);
 
2913                 struct gem *gp = dev->priv;
 
2915                 unregister_netdev(dev);
 
2917                 /* Stop the link timer */
 
2918                 del_timer_sync(&gp->link_timer);
 
2920                 /* We shouldn't need any locking here */
 
2923                 /* Wait for a pending reset task to complete */
 
2924                 while (gp->reset_task_pending)
 
2926                 flush_scheduled_work();
 
2928                 /* Shut the PHY down */
 
2929                 gem_stop_phy(gp, 0);
 
2933                 /* Make sure bus master is disabled */
 
2934                 pci_disable_device(gp->pdev);
 
2936                 /* Free resources */
 
2937                 pci_free_consistent(pdev,
 
2938                                     sizeof(struct gem_init_block),
 
2942                 pci_release_regions(pdev);
 
2945                 pci_set_drvdata(pdev, NULL);
 
2949 static int __devinit gem_init_one(struct pci_dev *pdev,
 
2950                                   const struct pci_device_id *ent)
 
2952         static int gem_version_printed = 0;
 
2953         unsigned long gemreg_base, gemreg_len;
 
2954         struct net_device *dev;
 
2956         int i, err, pci_using_dac;
 
2958         if (gem_version_printed++ == 0)
 
2959                 printk(KERN_INFO "%s", version);
 
2961         /* Apple gmac note: during probe, the chip is powered up by
 
2962          * the arch code to allow the code below to work (and to let
 
2963          * the chip be probed on the config space. It won't stay powered
 
2964          * up until the interface is brought up however, so we can't rely
 
2965          * on register configuration done at this point.
 
2967         err = pci_enable_device(pdev);
 
2969                 printk(KERN_ERR PFX "Cannot enable MMIO operation, "
 
2973         pci_set_master(pdev);
 
2975         /* Configure DMA attributes. */
 
2977         /* All of the GEM documentation states that 64-bit DMA addressing
 
2978          * is fully supported and should work just fine.  However the
 
2979          * front end for RIO based GEMs is different and only supports
 
2980          * 32-bit addressing.
 
2982          * For now we assume the various PPC GEMs are 32-bit only as well.
 
2984         if (pdev->vendor == PCI_VENDOR_ID_SUN &&
 
2985             pdev->device == PCI_DEVICE_ID_SUN_GEM &&
 
2986             !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
 
2989                 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
 
2991                         printk(KERN_ERR PFX "No usable DMA configuration, "
 
2993                         goto err_disable_device;
 
2998         gemreg_base = pci_resource_start(pdev, 0);
 
2999         gemreg_len = pci_resource_len(pdev, 0);
 
3001         if ((pci_resource_flags(pdev, 0) & IORESOURCE_IO) != 0) {
 
3002                 printk(KERN_ERR PFX "Cannot find proper PCI device "
 
3003                        "base address, aborting.\n");
 
3005                 goto err_disable_device;
 
3008         dev = alloc_etherdev(sizeof(*gp));
 
3010                 printk(KERN_ERR PFX "Etherdev alloc failed, aborting.\n");
 
3012                 goto err_disable_device;
 
3014         SET_MODULE_OWNER(dev);
 
3015         SET_NETDEV_DEV(dev, &pdev->dev);
 
3019         err = pci_request_regions(pdev, DRV_NAME);
 
3021                 printk(KERN_ERR PFX "Cannot obtain PCI resources, "
 
3023                 goto err_out_free_netdev;
 
3027         dev->base_addr = (long) pdev;
 
3030         gp->msg_enable = DEFAULT_MSG;
 
3032         spin_lock_init(&gp->lock);
 
3033         spin_lock_init(&gp->tx_lock);
 
3034         init_MUTEX(&gp->pm_sem);
 
3036         init_timer(&gp->link_timer);
 
3037         gp->link_timer.function = gem_link_timer;
 
3038         gp->link_timer.data = (unsigned long) gp;
 
3040         INIT_WORK(&gp->reset_task, gem_reset_task, gp);
 
3042         gp->lstate = link_down;
 
3043         gp->timer_ticks = 0;
 
3044         netif_carrier_off(dev);
 
3046         gp->regs = ioremap(gemreg_base, gemreg_len);
 
3047         if (gp->regs == 0UL) {
 
3048                 printk(KERN_ERR PFX "Cannot map device registers, "
 
3051                 goto err_out_free_res;
 
3054         /* On Apple, we want a reference to the Open Firmware device-tree
 
3055          * node. We use it for clock control.
 
3057 #ifdef CONFIG_PPC_PMAC
 
3058         gp->of_node = pci_device_to_OF_node(pdev);
 
3061         /* Only Apple version supports WOL afaik */
 
3062         if (pdev->vendor == PCI_VENDOR_ID_APPLE)
 
3065         /* Make sure cell is enabled */
 
3068         /* Make sure everything is stopped and in init state */
 
3071         /* Fill up the mii_phy structure (even if we won't use it) */
 
3072         gp->phy_mii.dev = dev;
 
3073         gp->phy_mii.mdio_read = _phy_read;
 
3074         gp->phy_mii.mdio_write = _phy_write;
 
3075 #ifdef CONFIG_PPC_PMAC
 
3076         gp->phy_mii.platform_data = gp->of_node;
 
3078         /* By default, we start with autoneg */
 
3079         gp->want_autoneg = 1;
 
3081         /* Check fifo sizes, PHY type, etc... */
 
3082         if (gem_check_invariants(gp)) {
 
3084                 goto err_out_iounmap;
 
3087         /* It is guaranteed that the returned buffer will be at least
 
3088          * PAGE_SIZE aligned.
 
3090         gp->init_block = (struct gem_init_block *)
 
3091                 pci_alloc_consistent(pdev, sizeof(struct gem_init_block),
 
3093         if (!gp->init_block) {
 
3094                 printk(KERN_ERR PFX "Cannot allocate init block, "
 
3097                 goto err_out_iounmap;
 
3100         if (gem_get_device_address(gp))
 
3101                 goto err_out_free_consistent;
 
3103         dev->open = gem_open;
 
3104         dev->stop = gem_close;
 
3105         dev->hard_start_xmit = gem_start_xmit;
 
3106         dev->get_stats = gem_get_stats;
 
3107         dev->set_multicast_list = gem_set_multicast;
 
3108         dev->do_ioctl = gem_ioctl;
 
3109         dev->poll = gem_poll;
 
3111         dev->ethtool_ops = &gem_ethtool_ops;
 
3112         dev->tx_timeout = gem_tx_timeout;
 
3113         dev->watchdog_timeo = 5 * HZ;
 
3114         dev->change_mtu = gem_change_mtu;
 
3115         dev->irq = pdev->irq;
 
3117 #ifdef CONFIG_NET_POLL_CONTROLLER
 
3118         dev->poll_controller = gem_poll_controller;
 
3121         /* Set that now, in case PM kicks in now */
 
3122         pci_set_drvdata(pdev, dev);
 
3124         /* Detect & init PHY, start autoneg, we release the cell now
 
3125          * too, it will be managed by whoever needs it
 
3129         spin_lock_irq(&gp->lock);
 
3131         spin_unlock_irq(&gp->lock);
 
3133         /* Register with kernel */
 
3134         if (register_netdev(dev)) {
 
3135                 printk(KERN_ERR PFX "Cannot register net device, "
 
3138                 goto err_out_free_consistent;
 
3141         printk(KERN_INFO "%s: Sun GEM (PCI) 10/100/1000BaseT Ethernet ",
 
3143         for (i = 0; i < 6; i++)
 
3144                 printk("%2.2x%c", dev->dev_addr[i],
 
3145                        i == 5 ? ' ' : ':');
 
3148         if (gp->phy_type == phy_mii_mdio0 ||
 
3149             gp->phy_type == phy_mii_mdio1)
 
3150                 printk(KERN_INFO "%s: Found %s PHY\n", dev->name, 
 
3151                         gp->phy_mii.def ? gp->phy_mii.def->name : "no");
 
3153         /* GEM can do it all... */
 
3154         dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_LLTX;
 
3156                 dev->features |= NETIF_F_HIGHDMA;
 
3160 err_out_free_consistent:
 
3161         gem_remove_one(pdev);
 
3167         pci_release_regions(pdev);
 
3169 err_out_free_netdev:
 
3172         pci_disable_device(pdev);
 
3178 static struct pci_driver gem_driver = {
 
3179         .name           = GEM_MODULE_NAME,
 
3180         .id_table       = gem_pci_tbl,
 
3181         .probe          = gem_init_one,
 
3182         .remove         = __devexit_p(gem_remove_one),
 
3184         .suspend        = gem_suspend,
 
3185         .resume         = gem_resume,
 
3186 #endif /* CONFIG_PM */
 
3189 static int __init gem_init(void)
 
3191         return pci_module_init(&gem_driver);
 
3194 static void __exit gem_cleanup(void)
 
3196         pci_unregister_driver(&gem_driver);
 
3199 module_init(gem_init);
 
3200 module_exit(gem_cleanup);