sungem.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:76k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: sungem.c,v 1.44.2.22 2002/03/13 01:18:12 davem Exp $
  2.  * sungem.c: Sun GEM ethernet driver.
  3.  *
  4.  * Copyright (C) 2000, 2001, 2002 David S. Miller (davem@redhat.com)
  5.  * 
  6.  * Support for Apple GMAC and assorted PHYs by
  7.  * Benjamin Herrenscmidt (benh@kernel.crashing.org)
  8.  * 
  9.  * TODO: 
  10.  *  - Get rid of all those nasty mdelay's and replace them
  11.  * with schedule_timeout.
  12.  *  - Implement WOL
  13.  *  - Currently, forced Gb mode is only supported on bcm54xx
  14.  *    PHY for which I use the SPD2 bit of the control register.
  15.  *    On m1011 PHY, I can't force as I don't have the specs, but
  16.  *    I can at least detect gigabit with autoneg.
  17.  */
  18. #include <linux/config.h>
  19. #include <linux/module.h>
  20. #include <linux/kernel.h>
  21. #include <linux/sched.h>
  22. #include <linux/types.h>
  23. #include <linux/fcntl.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/ptrace.h>
  26. #include <linux/ioport.h>
  27. #include <linux/in.h>
  28. #include <linux/slab.h>
  29. #include <linux/string.h>
  30. #include <linux/delay.h>
  31. #include <linux/init.h>
  32. #include <linux/errno.h>
  33. #include <linux/pci.h>
  34. #include <linux/netdevice.h>
  35. #include <linux/etherdevice.h>
  36. #include <linux/skbuff.h>
  37. #include <linux/mii.h>
  38. #include <linux/ethtool.h>
  39. #include <linux/crc32.h>
  40. #include <linux/random.h>
  41. #include <asm/system.h>
  42. #include <asm/bitops.h>
  43. #include <asm/io.h>
  44. #include <asm/byteorder.h>
  45. #include <asm/uaccess.h>
  46. #include <asm/irq.h>
  47. #ifdef __sparc__
  48. #include <asm/idprom.h>
  49. #include <asm/openprom.h>
  50. #include <asm/oplib.h>
  51. #include <asm/pbm.h>
  52. #endif
  53. #ifdef CONFIG_ALL_PPC
  54. #include <asm/pci-bridge.h>
  55. #include <asm/prom.h>
  56. #include <asm/machdep.h>
  57. #include <asm/pmac_feature.h>
  58. #endif
  59. #include "sungem.h"
  60. #define DEFAULT_MSG (NETIF_MSG_DRV | 
  61.  NETIF_MSG_PROBE | 
  62.  NETIF_MSG_LINK)
  63. #define DRV_NAME "sungem"
  64. #define DRV_VERSION "0.97"
  65. #define DRV_RELDATE "3/20/02"
  66. #define DRV_AUTHOR "David S. Miller (davem@redhat.com)"
  67. static char version[] __devinitdata =
  68.         DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " " DRV_AUTHOR "n";
  69. MODULE_AUTHOR(DRV_AUTHOR);
  70. MODULE_DESCRIPTION("Sun GEM Gbit ethernet driver");
  71. MODULE_LICENSE("GPL");
  72. MODULE_PARM(gem_debug, "i");
  73. MODULE_PARM_DESC(gem_debug, "bitmapped message enable number");
  74. MODULE_PARM(link_mode, "i");
  75. MODULE_PARM_DESC(link_mode, "default link mode");
  76. int gem_debug = -1;
  77. static int link_mode;
  78. static u16 link_modes[] __devinitdata = {
  79. BMCR_ANENABLE, /* 0 : autoneg */
  80. 0, /* 1 : 10bt half duplex */
  81. BMCR_SPEED100, /* 2 : 100bt half duplex */
  82. BMCR_SPD2, /* bcm54xx only */   /* 3 : 1000bt half duplex */
  83. BMCR_FULLDPLX, /* 4 : 10bt full duplex */
  84. BMCR_SPEED100|BMCR_FULLDPLX, /* 5 : 100bt full duplex */
  85. BMCR_SPD2|BMCR_FULLDPLX /* 6 : 1000bt full duplex */
  86. };
  87. #define GEM_MODULE_NAME "gem"
  88. #define PFX GEM_MODULE_NAME ": "
  89. static struct pci_device_id gem_pci_tbl[] __devinitdata = {
  90. { PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_GEM,
  91.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
  92. /* These models only differ from the original GEM in
  93.  * that their tx/rx fifos are of a different size and
  94.  * they only support 10/100 speeds. -DaveM
  95.  * 
  96.  * Apple's GMAC does support gigabit on machines with
  97.  * the BCM54xx PHYs. -BenH
  98.  */
  99. { PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_RIO_GEM,
  100.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
  101. { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_GMAC,
  102.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
  103. { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_GMACP,
  104.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
  105. {0, }
  106. };
  107. MODULE_DEVICE_TABLE(pci, gem_pci_tbl);
  108. static u16 __phy_read(struct gem *gp, int reg, int phy_addr)
  109. {
  110. u32 cmd;
  111. int limit = 10000;
  112. cmd  = (1 << 30);
  113. cmd |= (2 << 28);
  114. cmd |= (phy_addr << 23) & MIF_FRAME_PHYAD;
  115. cmd |= (reg << 18) & MIF_FRAME_REGAD;
  116. cmd |= (MIF_FRAME_TAMSB);
  117. writel(cmd, gp->regs + MIF_FRAME);
  118. while (limit--) {
  119. cmd = readl(gp->regs + MIF_FRAME);
  120. if (cmd & MIF_FRAME_TALSB)
  121. break;
  122. udelay(10);
  123. }
  124. if (!limit)
  125. cmd = 0xffff;
  126. return cmd & MIF_FRAME_DATA;
  127. }
  128. static inline u16 phy_read(struct gem *gp, int reg)
  129. {
  130. return __phy_read(gp, reg, gp->mii_phy_addr);
  131. }
  132. static void __phy_write(struct gem *gp, int reg, u16 val, int phy_addr)
  133. {
  134. u32 cmd;
  135. int limit = 10000;
  136. cmd  = (1 << 30);
  137. cmd |= (1 << 28);
  138. cmd |= (phy_addr << 23) & MIF_FRAME_PHYAD;
  139. cmd |= (reg << 18) & MIF_FRAME_REGAD;
  140. cmd |= (MIF_FRAME_TAMSB);
  141. cmd |= (val & MIF_FRAME_DATA);
  142. writel(cmd, gp->regs + MIF_FRAME);
  143. while (limit--) {
  144. cmd = readl(gp->regs + MIF_FRAME);
  145. if (cmd & MIF_FRAME_TALSB)
  146. break;
  147. udelay(10);
  148. }
  149. }
  150. static inline void phy_write(struct gem *gp, int reg, u16 val)
  151. {
  152. __phy_write(gp, reg, val, gp->mii_phy_addr);
  153. }
  154. static void gem_handle_mif_event(struct gem *gp, u32 reg_val, u32 changed_bits)
  155. {
  156. if (netif_msg_intr(gp))
  157. printk(KERN_DEBUG "%s: mif interruptn", gp->dev->name);
  158. }
  159. static int gem_pcs_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
  160. {
  161. u32 pcs_istat = readl(gp->regs + PCS_ISTAT);
  162. u32 pcs_miistat;
  163. if (netif_msg_intr(gp))
  164. printk(KERN_DEBUG "%s: pcs interrupt, pcs_istat: 0x%xn",
  165. gp->dev->name, pcs_istat);
  166. if (!(pcs_istat & PCS_ISTAT_LSC)) {
  167. printk(KERN_ERR "%s: PCS irq but no link status change???n",
  168.        dev->name);
  169. return 0;
  170. }
  171. /* The link status bit latches on zero, so you must
  172.  * read it twice in such a case to see a transition
  173.  * to the link being up.
  174.  */
  175. pcs_miistat = readl(gp->regs + PCS_MIISTAT);
  176. if (!(pcs_miistat & PCS_MIISTAT_LS))
  177. pcs_miistat |=
  178. (readl(gp->regs + PCS_MIISTAT) &
  179.  PCS_MIISTAT_LS);
  180. if (pcs_miistat & PCS_MIISTAT_ANC) {
  181. /* The remote-fault indication is only valid
  182.  * when autoneg has completed.
  183.  */
  184. if (pcs_miistat & PCS_MIISTAT_RF)
  185. printk(KERN_INFO "%s: PCS AutoNEG complete, "
  186.        "RemoteFaultn", dev->name);
  187. else
  188. printk(KERN_INFO "%s: PCS AutoNEG complete.n",
  189.        dev->name);
  190. }
  191. if (pcs_miistat & PCS_MIISTAT_LS) {
  192. printk(KERN_INFO "%s: PCS link is now up.n",
  193.        dev->name);
  194. } else {
  195. printk(KERN_INFO "%s: PCS link is now down.n",
  196.        dev->name);
  197. /* If this happens and the link timer is not running,
  198.  * reset so we re-negotiate.
  199.  */
  200. if (!timer_pending(&gp->link_timer))
  201. return 1;
  202. }
  203. return 0;
  204. }
  205. static int gem_txmac_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
  206. {
  207. u32 txmac_stat = readl(gp->regs + MAC_TXSTAT);
  208. if (netif_msg_intr(gp))
  209. printk(KERN_DEBUG "%s: txmac interrupt, txmac_stat: 0x%xn",
  210. gp->dev->name, txmac_stat);
  211. /* Defer timer expiration is quite normal,
  212.  * don't even log the event.
  213.  */
  214. if ((txmac_stat & MAC_TXSTAT_DTE) &&
  215.     !(txmac_stat & ~MAC_TXSTAT_DTE))
  216. return 0;
  217. if (txmac_stat & MAC_TXSTAT_URUN) {
  218. printk(KERN_ERR "%s: TX MAC xmit underrun.n",
  219.        dev->name);
  220. gp->net_stats.tx_fifo_errors++;
  221. }
  222. if (txmac_stat & MAC_TXSTAT_MPE) {
  223. printk(KERN_ERR "%s: TX MAC max packet size error.n",
  224.        dev->name);
  225. gp->net_stats.tx_errors++;
  226. }
  227. /* The rest are all cases of one of the 16-bit TX
  228.  * counters expiring.
  229.  */
  230. if (txmac_stat & MAC_TXSTAT_NCE)
  231. gp->net_stats.collisions += 0x10000;
  232. if (txmac_stat & MAC_TXSTAT_ECE) {
  233. gp->net_stats.tx_aborted_errors += 0x10000;
  234. gp->net_stats.collisions += 0x10000;
  235. }
  236. if (txmac_stat & MAC_TXSTAT_LCE) {
  237. gp->net_stats.tx_aborted_errors += 0x10000;
  238. gp->net_stats.collisions += 0x10000;
  239. }
  240. /* We do not keep track of MAC_TXSTAT_FCE and
  241.  * MAC_TXSTAT_PCE events.
  242.  */
  243. return 0;
  244. }
  245. /* When we get a RX fifo overflow, the RX unit in GEM is probably hung
  246.  * so we do the following.
  247.  *
  248.  * If any part of the reset goes wrong, we return 1 and that causes the
  249.  * whole chip to be reset.
  250.  */
  251. static int gem_rxmac_reset(struct gem *gp)
  252. {
  253. struct net_device *dev = gp->dev;
  254. int limit, i;
  255. u64 desc_dma;
  256. u32 val;
  257. /* First, reset MAC RX. */
  258. writel(gp->mac_rx_cfg & ~MAC_RXCFG_ENAB,
  259.        gp->regs + MAC_RXCFG);
  260. for (limit = 0; limit < 5000; limit++) {
  261. if (!(readl(gp->regs + MAC_RXCFG) & MAC_RXCFG_ENAB))
  262. break;
  263. udelay(10);
  264. }
  265. if (limit == 5000) {
  266. printk(KERN_ERR "%s: RX MAC will not disable, resetting whole "
  267.        "chip.n", dev->name);
  268. return 1;
  269. }
  270. /* Second, disable RX DMA. */
  271. writel(0, gp->regs + RXDMA_CFG);
  272. for (limit = 0; limit < 5000; limit++) {
  273. if (!(readl(gp->regs + RXDMA_CFG) & RXDMA_CFG_ENABLE))
  274. break;
  275. udelay(10);
  276. }
  277. if (limit == 5000) {
  278. printk(KERN_ERR "%s: RX DMA will not disable, resetting whole "
  279.        "chip.n", dev->name);
  280. return 1;
  281. }
  282. udelay(5000);
  283. /* Execute RX reset command. */
  284. writel(gp->swrst_base | GREG_SWRST_RXRST,
  285.        gp->regs + GREG_SWRST);
  286. for (limit = 0; limit < 5000; limit++) {
  287. if (!(readl(gp->regs + GREG_SWRST) & GREG_SWRST_RXRST))
  288. break;
  289. udelay(10);
  290. }
  291. if (limit == 5000) {
  292. printk(KERN_ERR "%s: RX reset command will not execute, resetting "
  293.        "whole chip.n", dev->name);
  294. return 1;
  295. }
  296. /* Refresh the RX ring. */
  297. for (i = 0; i < RX_RING_SIZE; i++) {
  298. struct gem_rxd *rxd = &gp->init_block->rxd[i];
  299. if (gp->rx_skbs[i] == NULL) {
  300. printk(KERN_ERR "%s: Parts of RX ring empty, resetting "
  301.        "whole chip.n", dev->name);
  302. return 1;
  303. }
  304. rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp));
  305. }
  306. gp->rx_new = gp->rx_old = 0;
  307. /* Now we must reprogram the rest of RX unit. */
  308. desc_dma = (u64) gp->gblock_dvma;
  309. desc_dma += (INIT_BLOCK_TX_RING_SIZE * sizeof(struct gem_txd));
  310. writel(desc_dma >> 32, gp->regs + RXDMA_DBHI);
  311. writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
  312. writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
  313. val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
  314.        ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
  315. writel(val, gp->regs + RXDMA_CFG);
  316. if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
  317. writel(((5 & RXDMA_BLANK_IPKTS) |
  318. ((8 << 12) & RXDMA_BLANK_ITIME)),
  319.        gp->regs + RXDMA_BLANK);
  320. else
  321. writel(((5 & RXDMA_BLANK_IPKTS) |
  322. ((4 << 12) & RXDMA_BLANK_ITIME)),
  323.        gp->regs + RXDMA_BLANK);
  324. val  = (((gp->rx_pause_off / 64) << 0) & RXDMA_PTHRESH_OFF);
  325. val |= (((gp->rx_pause_on / 64) << 12) & RXDMA_PTHRESH_ON);
  326. writel(val, gp->regs + RXDMA_PTHRESH);
  327. val = readl(gp->regs + RXDMA_CFG);
  328. writel(val | RXDMA_CFG_ENABLE, gp->regs + RXDMA_CFG);
  329. writel(MAC_RXSTAT_RCV, gp->regs + MAC_RXMASK);
  330. val = readl(gp->regs + MAC_RXCFG);
  331. writel(val | MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
  332. return 0;
  333. }
  334. static int gem_rxmac_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
  335. {
  336. u32 rxmac_stat = readl(gp->regs + MAC_RXSTAT);
  337. int ret = 0;
  338. if (netif_msg_intr(gp))
  339. printk(KERN_DEBUG "%s: rxmac interrupt, rxmac_stat: 0x%xn",
  340. gp->dev->name, rxmac_stat);
  341. if (rxmac_stat & MAC_RXSTAT_OFLW) {
  342. gp->net_stats.rx_over_errors++;
  343. gp->net_stats.rx_fifo_errors++;
  344. ret = gem_rxmac_reset(gp);
  345. }
  346. if (rxmac_stat & MAC_RXSTAT_ACE)
  347. gp->net_stats.rx_frame_errors += 0x10000;
  348. if (rxmac_stat & MAC_RXSTAT_CCE)
  349. gp->net_stats.rx_crc_errors += 0x10000;
  350. if (rxmac_stat & MAC_RXSTAT_LCE)
  351. gp->net_stats.rx_length_errors += 0x10000;
  352. /* We do not track MAC_RXSTAT_FCE and MAC_RXSTAT_VCE
  353.  * events.
  354.  */
  355. return ret;
  356. }
  357. static int gem_mac_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
  358. {
  359. u32 mac_cstat = readl(gp->regs + MAC_CSTAT);
  360. if (netif_msg_intr(gp))
  361. printk(KERN_DEBUG "%s: mac interrupt, mac_cstat: 0x%xn",
  362. gp->dev->name, mac_cstat);
  363. /* This interrupt is just for pause frame and pause
  364.  * tracking.  It is useful for diagnostics and debug
  365.  * but probably by default we will mask these events.
  366.  */
  367. if (mac_cstat & MAC_CSTAT_PS)
  368. gp->pause_entered++;
  369. if (mac_cstat & MAC_CSTAT_PRCV)
  370. gp->pause_last_time_recvd = (mac_cstat >> 16);
  371. return 0;
  372. }
  373. static int gem_mif_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
  374. {
  375. u32 mif_status = readl(gp->regs + MIF_STATUS);
  376. u32 reg_val, changed_bits;
  377. reg_val = (mif_status & MIF_STATUS_DATA) >> 16;
  378. changed_bits = (mif_status & MIF_STATUS_STAT);
  379. gem_handle_mif_event(gp, reg_val, changed_bits);
  380. return 0;
  381. }
  382. static int gem_pci_interrupt(struct net_device *dev, struct gem *gp, u32 gem_status)
  383. {
  384. u32 pci_estat = readl(gp->regs + GREG_PCIESTAT);
  385. if (gp->pdev->vendor == PCI_VENDOR_ID_SUN &&
  386.     gp->pdev->device == PCI_DEVICE_ID_SUN_GEM) {
  387. printk(KERN_ERR "%s: PCI error [%04x] ",
  388.        dev->name, pci_estat);
  389. if (pci_estat & GREG_PCIESTAT_BADACK)
  390. printk("<No ACK64# during ABS64 cycle> ");
  391. if (pci_estat & GREG_PCIESTAT_DTRTO)
  392. printk("<Delayed transaction timeout> ");
  393. if (pci_estat & GREG_PCIESTAT_OTHER)
  394. printk("<other>");
  395. printk("n");
  396. } else {
  397. pci_estat |= GREG_PCIESTAT_OTHER;
  398. printk(KERN_ERR "%s: PCI errorn", dev->name);
  399. }
  400. if (pci_estat & GREG_PCIESTAT_OTHER) {
  401. u16 pci_cfg_stat;
  402. /* Interrogate PCI config space for the
  403.  * true cause.
  404.  */
  405. pci_read_config_word(gp->pdev, PCI_STATUS,
  406.      &pci_cfg_stat);
  407. printk(KERN_ERR "%s: Read PCI cfg space status [%04x]n",
  408.        dev->name, pci_cfg_stat);
  409. if (pci_cfg_stat & PCI_STATUS_PARITY)
  410. printk(KERN_ERR "%s: PCI parity error detected.n",
  411.        dev->name);
  412. if (pci_cfg_stat & PCI_STATUS_SIG_TARGET_ABORT)
  413. printk(KERN_ERR "%s: PCI target abort.n",
  414.        dev->name);
  415. if (pci_cfg_stat & PCI_STATUS_REC_TARGET_ABORT)
  416. printk(KERN_ERR "%s: PCI master acks target abort.n",
  417.        dev->name);
  418. if (pci_cfg_stat & PCI_STATUS_REC_MASTER_ABORT)
  419. printk(KERN_ERR "%s: PCI master abort.n",
  420.        dev->name);
  421. if (pci_cfg_stat & PCI_STATUS_SIG_SYSTEM_ERROR)
  422. printk(KERN_ERR "%s: PCI system error SERR#.n",
  423.        dev->name);
  424. if (pci_cfg_stat & PCI_STATUS_DETECTED_PARITY)
  425. printk(KERN_ERR "%s: PCI parity error.n",
  426.        dev->name);
  427. /* Write the error bits back to clear them. */
  428. pci_cfg_stat &= (PCI_STATUS_PARITY |
  429.  PCI_STATUS_SIG_TARGET_ABORT |
  430.  PCI_STATUS_REC_TARGET_ABORT |
  431.  PCI_STATUS_REC_MASTER_ABORT |
  432.  PCI_STATUS_SIG_SYSTEM_ERROR |
  433.  PCI_STATUS_DETECTED_PARITY);
  434. pci_write_config_word(gp->pdev,
  435.       PCI_STATUS, pci_cfg_stat);
  436. }
  437. /* For all PCI errors, we should reset the chip. */
  438. return 1;
  439. }
  440. /* All non-normal interrupt conditions get serviced here.
  441.  * Returns non-zero if we should just exit the interrupt
  442.  * handler right now (ie. if we reset the card which invalidates
  443.  * all of the other original irq status bits).
  444.  */
  445. static int gem_abnormal_irq(struct net_device *dev, struct gem *gp, u32 gem_status)
  446. {
  447. if (gem_status & GREG_STAT_RXNOBUF) {
  448. /* Frame arrived, no free RX buffers available. */
  449. if (netif_msg_rx_err(gp))
  450. printk(KERN_DEBUG "%s: no buffer for rx framen",
  451. gp->dev->name);
  452. gp->net_stats.rx_dropped++;
  453. }
  454. if (gem_status & GREG_STAT_RXTAGERR) {
  455. /* corrupt RX tag framing */
  456. if (netif_msg_rx_err(gp))
  457. printk(KERN_DEBUG "%s: corrupt rx tag framingn",
  458. gp->dev->name);
  459. gp->net_stats.rx_errors++;
  460. goto do_reset;
  461. }
  462. if (gem_status & GREG_STAT_PCS) {
  463. if (gem_pcs_interrupt(dev, gp, gem_status))
  464. goto do_reset;
  465. }
  466. if (gem_status & GREG_STAT_TXMAC) {
  467. if (gem_txmac_interrupt(dev, gp, gem_status))
  468. goto do_reset;
  469. }
  470. if (gem_status & GREG_STAT_RXMAC) {
  471. if (gem_rxmac_interrupt(dev, gp, gem_status))
  472. goto do_reset;
  473. }
  474. if (gem_status & GREG_STAT_MAC) {
  475. if (gem_mac_interrupt(dev, gp, gem_status))
  476. goto do_reset;
  477. }
  478. if (gem_status & GREG_STAT_MIF) {
  479. if (gem_mif_interrupt(dev, gp, gem_status))
  480. goto do_reset;
  481. }
  482. if (gem_status & GREG_STAT_PCIERR) {
  483. if (gem_pci_interrupt(dev, gp, gem_status))
  484. goto do_reset;
  485. }
  486. return 0;
  487. do_reset:
  488. gp->reset_task_pending = 2;
  489. schedule_task(&gp->reset_task);
  490. return 1;
  491. }
  492. static __inline__ void gem_tx(struct net_device *dev, struct gem *gp, u32 gem_status)
  493. {
  494. int entry, limit;
  495. if (netif_msg_intr(gp))
  496. printk(KERN_DEBUG "%s: tx interrupt, gem_status: 0x%xn",
  497. gp->dev->name, gem_status);
  498. entry = gp->tx_old;
  499. limit = ((gem_status & GREG_STAT_TXNR) >> GREG_STAT_TXNR_SHIFT);
  500. while (entry != limit) {
  501. struct sk_buff *skb;
  502. struct gem_txd *txd;
  503. dma_addr_t dma_addr;
  504. u32 dma_len;
  505. int frag;
  506. if (netif_msg_tx_done(gp))
  507. printk(KERN_DEBUG "%s: tx done, slot %dn",
  508. gp->dev->name, entry);
  509. skb = gp->tx_skbs[entry];
  510. if (skb_shinfo(skb)->nr_frags) {
  511. int last = entry + skb_shinfo(skb)->nr_frags;
  512. int walk = entry;
  513. int incomplete = 0;
  514. last &= (TX_RING_SIZE - 1);
  515. for (;;) {
  516. walk = NEXT_TX(walk);
  517. if (walk == limit)
  518. incomplete = 1;
  519. if (walk == last)
  520. break;
  521. }
  522. if (incomplete)
  523. break;
  524. }
  525. gp->tx_skbs[entry] = NULL;
  526. gp->net_stats.tx_bytes += skb->len;
  527. for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
  528. txd = &gp->init_block->txd[entry];
  529. dma_addr = le64_to_cpu(txd->buffer);
  530. dma_len = le64_to_cpu(txd->control_word) & TXDCTRL_BUFSZ;
  531. pci_unmap_page(gp->pdev, dma_addr, dma_len, PCI_DMA_TODEVICE);
  532. entry = NEXT_TX(entry);
  533. }
  534. gp->net_stats.tx_packets++;
  535. dev_kfree_skb_irq(skb);
  536. }
  537. gp->tx_old = entry;
  538. if (netif_queue_stopped(dev) &&
  539.     TX_BUFFS_AVAIL(gp) > (MAX_SKB_FRAGS + 1))
  540. netif_wake_queue(dev);
  541. }
  542. static __inline__ void gem_post_rxds(struct gem *gp, int limit)
  543. {
  544. int cluster_start, curr, count, kick;
  545. cluster_start = curr = (gp->rx_new & ~(4 - 1));
  546. count = 0;
  547. kick = -1;
  548. while (curr != limit) {
  549. curr = NEXT_RX(curr);
  550. if (++count == 4) {
  551. struct gem_rxd *rxd =
  552. &gp->init_block->rxd[cluster_start];
  553. for (;;) {
  554. rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp));
  555. rxd++;
  556. cluster_start = NEXT_RX(cluster_start);
  557. if (cluster_start == curr)
  558. break;
  559. }
  560. kick = curr;
  561. count = 0;
  562. }
  563. }
  564. if (kick >= 0)
  565. writel(kick, gp->regs + RXDMA_KICK);
  566. }
  567. static void gem_rx(struct gem *gp)
  568. {
  569. int entry, drops;
  570. if (netif_msg_intr(gp))
  571. printk(KERN_DEBUG "%s: rx interrupt, done: %d, rx_new: %dn",
  572. gp->dev->name, readl(gp->regs + RXDMA_DONE), gp->rx_new);
  573. entry = gp->rx_new;
  574. drops = 0;
  575. for (;;) {
  576. struct gem_rxd *rxd = &gp->init_block->rxd[entry];
  577. struct sk_buff *skb;
  578. u64 status = cpu_to_le64(rxd->status_word);
  579. dma_addr_t dma_addr;
  580. int len;
  581. if ((status & RXDCTRL_OWN) != 0)
  582. break;
  583. skb = gp->rx_skbs[entry];
  584. len = (status & RXDCTRL_BUFSZ) >> 16;
  585. if ((len < ETH_ZLEN) || (status & RXDCTRL_BAD)) {
  586. gp->net_stats.rx_errors++;
  587. if (len < ETH_ZLEN)
  588. gp->net_stats.rx_length_errors++;
  589. if (len & RXDCTRL_BAD)
  590. gp->net_stats.rx_crc_errors++;
  591. /* We'll just return it to GEM. */
  592. drop_it:
  593. gp->net_stats.rx_dropped++;
  594. goto next;
  595. }
  596. dma_addr = cpu_to_le64(rxd->buffer);
  597. if (len > RX_COPY_THRESHOLD) {
  598. struct sk_buff *new_skb;
  599. new_skb = gem_alloc_skb(RX_BUF_ALLOC_SIZE(gp), GFP_ATOMIC);
  600. if (new_skb == NULL) {
  601. drops++;
  602. goto drop_it;
  603. }
  604. pci_unmap_page(gp->pdev, dma_addr,
  605.        RX_BUF_ALLOC_SIZE(gp),
  606.        PCI_DMA_FROMDEVICE);
  607. gp->rx_skbs[entry] = new_skb;
  608. new_skb->dev = gp->dev;
  609. skb_put(new_skb, (ETH_FRAME_LEN + RX_OFFSET));
  610. rxd->buffer = cpu_to_le64(pci_map_page(gp->pdev,
  611.        virt_to_page(new_skb->data),
  612.        ((unsigned long) new_skb->data &
  613. ~PAGE_MASK),
  614.        RX_BUF_ALLOC_SIZE(gp),
  615.        PCI_DMA_FROMDEVICE));
  616. skb_reserve(new_skb, RX_OFFSET);
  617. /* Trim the original skb for the netif. */
  618. skb_trim(skb, len);
  619. } else {
  620. struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
  621. if (copy_skb == NULL) {
  622. drops++;
  623. goto drop_it;
  624. }
  625. copy_skb->dev = gp->dev;
  626. skb_reserve(copy_skb, 2);
  627. skb_put(copy_skb, len);
  628. pci_dma_sync_single(gp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
  629. memcpy(copy_skb->data, skb->data, len);
  630. /* We'll reuse the original ring buffer. */
  631. skb = copy_skb;
  632. }
  633. skb->csum = ntohs((status & RXDCTRL_TCPCSUM) ^ 0xffff);
  634. skb->ip_summed = CHECKSUM_HW;
  635. skb->protocol = eth_type_trans(skb, gp->dev);
  636. netif_rx(skb);
  637. gp->net_stats.rx_packets++;
  638. gp->net_stats.rx_bytes += len;
  639. gp->dev->last_rx = jiffies;
  640. next:
  641. entry = NEXT_RX(entry);
  642. }
  643. gem_post_rxds(gp, entry);
  644. gp->rx_new = entry;
  645. if (drops)
  646. printk(KERN_INFO "%s: Memory squeeze, deferring packet.n",
  647.        gp->dev->name);
  648. }
  649. static void gem_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  650. {
  651. struct net_device *dev = dev_id;
  652. struct gem *gp = dev->priv;
  653. u32 gem_status = readl(gp->regs + GREG_STAT);
  654. spin_lock(&gp->lock);
  655. if (gem_status & GREG_STAT_ABNORMAL) {
  656. if (gem_abnormal_irq(dev, gp, gem_status))
  657. goto out;
  658. }
  659. if (gem_status & (GREG_STAT_TXALL | GREG_STAT_TXINTME))
  660. gem_tx(dev, gp, gem_status);
  661. if (gem_status & GREG_STAT_RXDONE)
  662. gem_rx(gp);
  663. out:
  664. spin_unlock(&gp->lock);
  665. }
  666. static void gem_tx_timeout(struct net_device *dev)
  667. {
  668. struct gem *gp = dev->priv;
  669. printk(KERN_ERR "%s: transmit timed out, resettingn", dev->name);
  670. if (!gp->hw_running) {
  671. printk("%s: hrm.. hw not running !n", dev->name);
  672. return;
  673. }
  674. printk(KERN_ERR "%s: TX_STATE[%08x:%08x:%08x]n",
  675.        dev->name,
  676.        readl(gp->regs + TXDMA_CFG),
  677.        readl(gp->regs + MAC_TXSTAT),
  678.        readl(gp->regs + MAC_TXCFG));
  679. printk(KERN_ERR "%s: RX_STATE[%08x:%08x:%08x]n",
  680.        dev->name,
  681.        readl(gp->regs + RXDMA_CFG),
  682.        readl(gp->regs + MAC_RXSTAT),
  683.        readl(gp->regs + MAC_RXCFG));
  684. spin_lock_irq(&gp->lock);
  685. gp->reset_task_pending = 2;
  686. schedule_task(&gp->reset_task);
  687. spin_unlock_irq(&gp->lock);
  688. }
  689. static __inline__ int gem_intme(int entry)
  690. {
  691. /* Algorithm: IRQ every 1/2 of descriptors. */
  692. if (!(entry & ((TX_RING_SIZE>>1)-1)))
  693. return 1;
  694. return 0;
  695. }
  696. static int gem_start_xmit(struct sk_buff *skb, struct net_device *dev)
  697. {
  698. struct gem *gp = dev->priv;
  699. int entry;
  700. u64 ctrl;
  701. ctrl = 0;
  702. if (skb->ip_summed == CHECKSUM_HW) {
  703. u64 csum_start_off, csum_stuff_off;
  704. csum_start_off = (u64) (skb->h.raw - skb->data);
  705. csum_stuff_off = (u64) ((skb->h.raw + skb->csum) - skb->data);
  706. ctrl = (TXDCTRL_CENAB |
  707. (csum_start_off << 15) |
  708. (csum_stuff_off << 21));
  709. }
  710. spin_lock_irq(&gp->lock);
  711. /* This is a hard error, log it. */
  712. if (TX_BUFFS_AVAIL(gp) <= (skb_shinfo(skb)->nr_frags + 1)) {
  713. netif_stop_queue(dev);
  714. spin_unlock_irq(&gp->lock);
  715. printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!n",
  716.        dev->name);
  717. return 1;
  718. }
  719. entry = gp->tx_new;
  720. gp->tx_skbs[entry] = skb;
  721. if (skb_shinfo(skb)->nr_frags == 0) {
  722. struct gem_txd *txd = &gp->init_block->txd[entry];
  723. dma_addr_t mapping;
  724. u32 len;
  725. len = skb->len;
  726. mapping = pci_map_page(gp->pdev,
  727.        virt_to_page(skb->data),
  728.        ((unsigned long) skb->data &
  729. ~PAGE_MASK),
  730.        len, PCI_DMA_TODEVICE);
  731. ctrl |= TXDCTRL_SOF | TXDCTRL_EOF | len;
  732. if (gem_intme(entry))
  733. ctrl |= TXDCTRL_INTME;
  734. txd->buffer = cpu_to_le64(mapping);
  735. txd->control_word = cpu_to_le64(ctrl);
  736. entry = NEXT_TX(entry);
  737. } else {
  738. struct gem_txd *txd;
  739. u32 first_len;
  740. u64 intme;
  741. dma_addr_t first_mapping;
  742. int frag, first_entry = entry;
  743. intme = 0;
  744. if (gem_intme(entry))
  745. intme |= TXDCTRL_INTME;
  746. /* We must give this initial chunk to the device last.
  747.  * Otherwise we could race with the device.
  748.  */
  749. first_len = skb->len - skb->data_len;
  750. first_mapping = pci_map_page(gp->pdev, virt_to_page(skb->data),
  751.      ((unsigned long) skb->data & ~PAGE_MASK),
  752.      first_len, PCI_DMA_TODEVICE);
  753. entry = NEXT_TX(entry);
  754. for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) {
  755. skb_frag_t *this_frag = &skb_shinfo(skb)->frags[frag];
  756. u32 len;
  757. dma_addr_t mapping;
  758. u64 this_ctrl;
  759. len = this_frag->size;
  760. mapping = pci_map_page(gp->pdev,
  761.        this_frag->page,
  762.        this_frag->page_offset,
  763.        len, PCI_DMA_TODEVICE);
  764. this_ctrl = ctrl;
  765. if (frag == skb_shinfo(skb)->nr_frags - 1)
  766. this_ctrl |= TXDCTRL_EOF;
  767. txd = &gp->init_block->txd[entry];
  768. txd->buffer = cpu_to_le64(mapping);
  769. txd->control_word = cpu_to_le64(this_ctrl | len);
  770. if (gem_intme(entry))
  771. intme |= TXDCTRL_INTME;
  772. entry = NEXT_TX(entry);
  773. }
  774. txd = &gp->init_block->txd[first_entry];
  775. txd->buffer = cpu_to_le64(first_mapping);
  776. txd->control_word =
  777. cpu_to_le64(ctrl | TXDCTRL_SOF | intme | first_len);
  778. }
  779. gp->tx_new = entry;
  780. if (TX_BUFFS_AVAIL(gp) <= (MAX_SKB_FRAGS + 1))
  781. netif_stop_queue(dev);
  782. if (netif_msg_tx_queued(gp))
  783. printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %dn",
  784.        dev->name, entry, skb->len);
  785. writel(gp->tx_new, gp->regs + TXDMA_KICK);
  786. spin_unlock_irq(&gp->lock);
  787. dev->trans_start = jiffies;
  788. return 0;
  789. }
  790. /* Jumbo-grams don't seem to work :-( */
  791. #define GEM_MIN_MTU 68
  792. #if 1
  793. #define GEM_MAX_MTU 1500
  794. #else
  795. #define GEM_MAX_MTU 9000
  796. #endif
  797. static int gem_change_mtu(struct net_device *dev, int new_mtu)
  798. {
  799. struct gem *gp = dev->priv;
  800. if (new_mtu < GEM_MIN_MTU || new_mtu > GEM_MAX_MTU)
  801. return -EINVAL;
  802. if (!netif_running(dev) || !netif_device_present(dev)) {
  803. /* We'll just catch it later when the
  804.  * device is up'd or resumed.
  805.  */
  806. dev->mtu = new_mtu;
  807. return 0;
  808. }
  809. spin_lock_irq(&gp->lock);
  810. dev->mtu = new_mtu;
  811. gp->reset_task_pending = 1;
  812. schedule_task(&gp->reset_task);
  813. spin_unlock_irq(&gp->lock);
  814. flush_scheduled_tasks();
  815. return 0;
  816. }
  817. #define STOP_TRIES 32
  818. /* Must be invoked under gp->lock. */
  819. static void gem_stop(struct gem *gp)
  820. {
  821. int limit;
  822. u32 val;
  823. /* Make sure we won't get any more interrupts */
  824. writel(0xffffffff, gp->regs + GREG_IMASK);
  825. /* Reset the chip */
  826. writel(gp->swrst_base | GREG_SWRST_TXRST | GREG_SWRST_RXRST,
  827.        gp->regs + GREG_SWRST);
  828. limit = STOP_TRIES;
  829. do {
  830. udelay(20);
  831. val = readl(gp->regs + GREG_SWRST);
  832. if (limit-- <= 0)
  833. break;
  834. } while (val & (GREG_SWRST_TXRST | GREG_SWRST_RXRST));
  835. if (limit <= 0)
  836. printk(KERN_ERR "gem: SW reset is ghetto.n");
  837. }
  838. /* Must be invoked under gp->lock. */
  839. static void gem_start_dma(struct gem *gp)
  840. {
  841. unsigned long val;
  842. /* We are ready to rock, turn everything on. */
  843. val = readl(gp->regs + TXDMA_CFG);
  844. writel(val | TXDMA_CFG_ENABLE, gp->regs + TXDMA_CFG);
  845. val = readl(gp->regs + RXDMA_CFG);
  846. writel(val | RXDMA_CFG_ENABLE, gp->regs + RXDMA_CFG);
  847. val = readl(gp->regs + MAC_TXCFG);
  848. writel(val | MAC_TXCFG_ENAB, gp->regs + MAC_TXCFG);
  849. val = readl(gp->regs + MAC_RXCFG);
  850. writel(val | MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
  851. (void) readl(gp->regs + MAC_RXCFG);
  852. udelay(100);
  853. writel(GREG_STAT_TXDONE, gp->regs + GREG_IMASK);
  854. writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
  855. }
  856. /* Link modes of the BCM5400 PHY */
  857. static int phy_BCM5400_link_table[8][3] = {
  858. { 0, 0, 0 }, /* No link */
  859. { 0, 0, 0 }, /* 10BT Half Duplex */
  860. { 1, 0, 0 }, /* 10BT Full Duplex */
  861. { 0, 1, 0 }, /* 100BT Half Duplex */
  862. { 0, 1, 0 }, /* 100BT Half Duplex */
  863. { 1, 1, 0 }, /* 100BT Full Duplex*/
  864. { 1, 0, 1 }, /* 1000BT */
  865. { 1, 0, 1 }, /* 1000BT */
  866. };
  867. /* Must be invoked under gp->lock. */
  868. static void gem_begin_auto_negotiation(struct gem *gp, struct ethtool_cmd *ep)
  869. {
  870. u16 ctl;
  871. /* Setup link parameters */
  872. if (!ep)
  873. goto start_aneg;
  874. if (ep->autoneg == AUTONEG_ENABLE) {
  875. /* TODO: parse ep->advertising */
  876. gp->link_advertise |= (ADVERTISE_10HALF | ADVERTISE_10FULL);
  877. gp->link_advertise |= (ADVERTISE_100HALF | ADVERTISE_100FULL);
  878. /* Can I advertise gigabit here ? I'd need BCM PHY docs... */
  879. gp->link_cntl = BMCR_ANENABLE;
  880. } else {
  881. gp->link_cntl = 0;
  882. if (ep->speed == SPEED_100)
  883. gp->link_cntl |= BMCR_SPEED100;
  884. else if (ep->speed == SPEED_1000 && gp->gigabit_capable)
  885. /* Hrm... check if this is right... */
  886. gp->link_cntl |= BMCR_SPD2;
  887. if (ep->duplex == DUPLEX_FULL)
  888. gp->link_cntl |= BMCR_FULLDPLX;
  889. }
  890. start_aneg:
  891. if (!gp->hw_running)
  892. return;
  893. /* Configure PHY & start aneg */
  894. ctl = phy_read(gp, MII_BMCR);
  895. ctl &= ~(BMCR_FULLDPLX|BMCR_SPEED100|BMCR_ANENABLE);
  896. ctl |= gp->link_cntl;
  897. if (ctl & BMCR_ANENABLE) {
  898. ctl |= BMCR_ANRESTART;
  899. gp->lstate = link_aneg;
  900. } else {
  901. gp->lstate = link_force_ok;
  902. }
  903. phy_write(gp, MII_BMCR, ctl);
  904. gp->timer_ticks = 0;
  905. mod_timer(&gp->link_timer, jiffies + ((12 * HZ) / 10));
  906. }
  907. /* Must be invoked under gp->lock. */
  908. static void gem_read_mii_link_mode(struct gem *gp, int *fd, int *spd, int *pause)
  909. {
  910. u32 val;
  911. *fd = 0;
  912. *spd = 10;
  913. *pause = 0;
  914. if (gp->phy_mod == phymod_bcm5400 ||
  915.     gp->phy_mod == phymod_bcm5401 ||
  916.     gp->phy_mod == phymod_bcm5411) {
  917. int link_mode;
  918.      val = phy_read(gp, MII_BCM5400_AUXSTATUS);
  919. link_mode = ((val & MII_BCM5400_AUXSTATUS_LINKMODE_MASK) >>
  920.      MII_BCM5400_AUXSTATUS_LINKMODE_SHIFT);
  921. *fd = phy_BCM5400_link_table[link_mode][0];
  922. *spd = phy_BCM5400_link_table[link_mode][2] ?
  923. 1000 :
  924. (phy_BCM5400_link_table[link_mode][1] ? 100 : 10);
  925. val = phy_read(gp, MII_LPA);
  926. if (val & LPA_PAUSE)
  927. *pause = 1;
  928. } else {
  929. val = phy_read(gp, MII_LPA);
  930. if (val & (LPA_10FULL | LPA_100FULL))
  931. *fd = 1;
  932. if (val & (LPA_100FULL | LPA_100HALF))
  933. *spd = 100;
  934. if (gp->phy_mod == phymod_m1011) {
  935. val = phy_read(gp, 0x0a);
  936. if (val & 0xc00)
  937. *spd = 1000;
  938. if (val & 0x800)
  939. *fd = 1;
  940. }
  941. }
  942. }
  943. /* A link-up condition has occurred, initialize and enable the
  944.  * rest of the chip.
  945.  *
  946.  * Must be invoked under gp->lock.
  947.  */
  948. static void gem_set_link_modes(struct gem *gp)
  949. {
  950. u32 val;
  951. int full_duplex, speed, pause;
  952. full_duplex = 0;
  953. speed = 10;
  954. pause = 0;
  955. if (gp->phy_type == phy_mii_mdio0 ||
  956.     gp->phy_type == phy_mii_mdio1) {
  957. val = phy_read(gp, MII_BMCR);
  958. if (val & BMCR_ANENABLE)
  959. gem_read_mii_link_mode(gp, &full_duplex, &speed, &pause);
  960. else {
  961. if (val & BMCR_FULLDPLX)
  962. full_duplex = 1;
  963. if (val & BMCR_SPEED100)
  964. speed = 100;
  965. }
  966. } else {
  967. u32 pcs_lpa = readl(gp->regs + PCS_MIILP);
  968. if (pcs_lpa & PCS_MIIADV_FD)
  969. full_duplex = 1;
  970. speed = 1000;
  971. }
  972. if (netif_msg_link(gp))
  973. printk(KERN_INFO "%s: Link is up at %d Mbps, %s-duplex.n",
  974. gp->dev->name, speed, (full_duplex ? "full" : "half"));
  975. val = (MAC_TXCFG_EIPG0 | MAC_TXCFG_NGU);
  976. if (full_duplex) {
  977. val |= (MAC_TXCFG_ICS | MAC_TXCFG_ICOLL);
  978. } else {
  979. /* MAC_TXCFG_NBO must be zero. */
  980. }
  981. writel(val, gp->regs + MAC_TXCFG);
  982. val = (MAC_XIFCFG_OE | MAC_XIFCFG_LLED);
  983. if (!full_duplex &&
  984.     (gp->phy_type == phy_mii_mdio0 ||
  985.      gp->phy_type == phy_mii_mdio1)) {
  986. val |= MAC_XIFCFG_DISE;
  987. } else if (full_duplex) {
  988. val |= MAC_XIFCFG_FLED;
  989. }
  990. if (speed == 1000)
  991. val |= (MAC_XIFCFG_GMII);
  992. writel(val, gp->regs + MAC_XIFCFG);
  993. /* If gigabit and half-duplex, enable carrier extension
  994.  * mode.  Else, disable it.
  995.  */
  996. if (speed == 1000 && !full_duplex) {
  997. val = readl(gp->regs + MAC_TXCFG);
  998. writel(val | MAC_TXCFG_TCE, gp->regs + MAC_TXCFG);
  999. val = readl(gp->regs + MAC_RXCFG);
  1000. writel(val | MAC_RXCFG_RCE, gp->regs + MAC_RXCFG);
  1001. } else {
  1002. val = readl(gp->regs + MAC_TXCFG);
  1003. writel(val & ~MAC_TXCFG_TCE, gp->regs + MAC_TXCFG);
  1004. val = readl(gp->regs + MAC_RXCFG);
  1005. writel(val & ~MAC_RXCFG_RCE, gp->regs + MAC_RXCFG);
  1006. }
  1007. if (gp->phy_type == phy_serialink ||
  1008.     gp->phy_type == phy_serdes) {
  1009.   u32 pcs_lpa = readl(gp->regs + PCS_MIILP);
  1010. if (pcs_lpa & (PCS_MIIADV_SP | PCS_MIIADV_AP))
  1011. pause = 1;
  1012. }
  1013. if (netif_msg_link(gp)) {
  1014. if (pause) {
  1015. printk(KERN_INFO "%s: Pause is enabled "
  1016.        "(rxfifo: %d off: %d on: %d)n",
  1017.        gp->dev->name,
  1018.        gp->rx_fifo_sz,
  1019.        gp->rx_pause_off,
  1020.        gp->rx_pause_on);
  1021. } else {
  1022. printk(KERN_INFO "%s: Pause is disabledn",
  1023.        gp->dev->name);
  1024. }
  1025. }
  1026. if (!full_duplex)
  1027. writel(512, gp->regs + MAC_STIME);
  1028. else
  1029. writel(64, gp->regs + MAC_STIME);
  1030. val = readl(gp->regs + MAC_MCCFG);
  1031. if (pause)
  1032. val |= (MAC_MCCFG_SPE | MAC_MCCFG_RPE);
  1033. else
  1034. val &= ~(MAC_MCCFG_SPE | MAC_MCCFG_RPE);
  1035. writel(val, gp->regs + MAC_MCCFG);
  1036. gem_start_dma(gp);
  1037. }
  1038. /* Must be invoked under gp->lock. */
  1039. static int gem_mdio_link_not_up(struct gem *gp)
  1040. {
  1041. u16 val;
  1042. if (gp->lstate == link_force_ret) {
  1043. if (netif_msg_link(gp))
  1044. printk(KERN_INFO "%s: Autoneg failed again, keeping"
  1045. " forced moden", gp->dev->name);
  1046. phy_write(gp, MII_BMCR, gp->link_fcntl);
  1047. gp->timer_ticks = 5;
  1048. gp->lstate = link_force_ok;
  1049. } else if (gp->lstate == link_aneg) {
  1050. val = phy_read(gp, MII_BMCR);
  1051. if (netif_msg_link(gp))
  1052. printk(KERN_INFO "%s: switching to forced 100btn",
  1053. gp->dev->name);
  1054. /* Try forced modes. */
  1055. val &= ~(BMCR_ANRESTART | BMCR_ANENABLE);
  1056. val &= ~(BMCR_FULLDPLX);
  1057. val |= BMCR_SPEED100;
  1058. phy_write(gp, MII_BMCR, val);
  1059. gp->timer_ticks = 5;
  1060. gp->lstate = link_force_try;
  1061. } else {
  1062. /* Downgrade from 100 to 10 Mbps if necessary.
  1063.  * If already at 10Mbps, warn user about the
  1064.  * situation every 10 ticks.
  1065.  */
  1066. val = phy_read(gp, MII_BMCR);
  1067. if (val & BMCR_SPEED100) {
  1068. val &= ~BMCR_SPEED100;
  1069. phy_write(gp, MII_BMCR, val);
  1070. gp->timer_ticks = 5;
  1071. if (netif_msg_link(gp))
  1072. printk(KERN_INFO "%s: switching to forced 10btn",
  1073. gp->dev->name);
  1074. } else
  1075. return 1;
  1076. }
  1077. return 0;
  1078. }
  1079. static void gem_init_rings(struct gem *);
  1080. static void gem_init_hw(struct gem *, int);
  1081. static void gem_reset_task(void *data)
  1082. {
  1083. struct gem *gp = (struct gem *) data;
  1084. /* The link went down, we reset the ring, but keep
  1085.  * DMA stopped. Todo: Use this function for reset
  1086.  * on error as well.
  1087.  */
  1088. spin_lock_irq(&gp->lock);
  1089. if (gp->hw_running && gp->opened) {
  1090. /* Make sure we don't get interrupts or tx packets */
  1091. netif_stop_queue(gp->dev);
  1092. writel(0xffffffff, gp->regs + GREG_IMASK);
  1093. /* Reset the chip & rings */
  1094. gem_stop(gp);
  1095. gem_init_rings(gp);
  1096. gem_init_hw(gp,
  1097.     (gp->reset_task_pending == 2));
  1098. netif_wake_queue(gp->dev);
  1099. }
  1100. gp->reset_task_pending = 0;
  1101. spin_unlock_irq(&gp->lock);
  1102. }
  1103. static void gem_link_timer(unsigned long data)
  1104. {
  1105. struct gem *gp = (struct gem *) data;
  1106. if (!gp->hw_running)
  1107. return;
  1108. spin_lock_irq(&gp->lock);
  1109. /* If the link of task is still pending, we just
  1110.  * reschedule the link timer
  1111.  */
  1112. if (gp->reset_task_pending)
  1113. goto restart;
  1114.     
  1115. if (gp->phy_type == phy_mii_mdio0 ||
  1116.     gp->phy_type == phy_mii_mdio1) {
  1117. u16 val = phy_read(gp, MII_BMSR);
  1118. u16 cntl = phy_read(gp, MII_BMCR);
  1119. int up;
  1120. /* When using autoneg, we really wait for ANEGCOMPLETE or we may
  1121.  * get a "transcient" incorrect link state
  1122.  */
  1123. if (cntl & BMCR_ANENABLE)
  1124. up = (val & (BMSR_ANEGCOMPLETE | BMSR_LSTATUS)) == (BMSR_ANEGCOMPLETE | BMSR_LSTATUS);
  1125. else
  1126. up = (val & BMSR_LSTATUS) != 0;
  1127. if (up) {
  1128. /* Ok, here we got a link. If we had it due to a forced
  1129.  * fallback, and we were configured for autoneg, we do
  1130.  * retry a short autoneg pass. If you know your hub is
  1131.  * broken, use ethtool ;)
  1132.  */
  1133. if (gp->lstate == link_force_try && (gp->link_cntl & BMCR_ANENABLE)) {
  1134. gp->lstate = link_force_ret;
  1135. gp->link_fcntl = phy_read(gp, MII_BMCR);
  1136. gp->timer_ticks = 5;
  1137. if (netif_msg_link(gp))
  1138. printk(KERN_INFO "%s: Got link after fallback, retrying"
  1139. " autoneg once...n", gp->dev->name);
  1140. phy_write(gp, MII_BMCR,
  1141.   gp->link_fcntl | BMCR_ANENABLE | BMCR_ANRESTART);
  1142. } else if (gp->lstate != link_up) {
  1143. gp->lstate = link_up;
  1144. if (gp->opened)
  1145. gem_set_link_modes(gp);
  1146. }
  1147. } else {
  1148. int restart = 0;
  1149. /* If the link was previously up, we restart the
  1150.  * whole process
  1151.  */
  1152. if (gp->lstate == link_up) {
  1153. gp->lstate = link_down;
  1154. if (netif_msg_link(gp))
  1155. printk(KERN_INFO "%s: Link downn",
  1156. gp->dev->name);
  1157. gp->reset_task_pending = 2;
  1158. schedule_task(&gp->reset_task);
  1159. restart = 1;
  1160. } else if (++gp->timer_ticks > 10)
  1161. restart = gem_mdio_link_not_up(gp);
  1162. if (restart) {
  1163. gem_begin_auto_negotiation(gp, NULL);
  1164. goto out_unlock;
  1165. }
  1166. }
  1167. } else {
  1168. u32 val = readl(gp->regs + PCS_MIISTAT);
  1169. if (!(val & PCS_MIISTAT_LS))
  1170. val = readl(gp->regs + PCS_MIISTAT);
  1171. if ((val & PCS_MIISTAT_LS) != 0) {
  1172. gp->lstate = link_up;
  1173. if (gp->opened)
  1174. gem_set_link_modes(gp);
  1175. }
  1176. }
  1177. restart:
  1178. mod_timer(&gp->link_timer, jiffies + ((12 * HZ) / 10));
  1179. out_unlock:
  1180. spin_unlock_irq(&gp->lock);
  1181. }
  1182. /* Must be invoked under gp->lock. */
  1183. static void gem_clean_rings(struct gem *gp)
  1184. {
  1185. struct gem_init_block *gb = gp->init_block;
  1186. struct sk_buff *skb;
  1187. int i;
  1188. dma_addr_t dma_addr;
  1189. for (i = 0; i < RX_RING_SIZE; i++) {
  1190. struct gem_rxd *rxd;
  1191. rxd = &gb->rxd[i];
  1192. if (gp->rx_skbs[i] != NULL) {
  1193. skb = gp->rx_skbs[i];
  1194. dma_addr = le64_to_cpu(rxd->buffer);
  1195. pci_unmap_page(gp->pdev, dma_addr,
  1196.        RX_BUF_ALLOC_SIZE(gp),
  1197.        PCI_DMA_FROMDEVICE);
  1198. dev_kfree_skb_any(skb);
  1199. gp->rx_skbs[i] = NULL;
  1200. }
  1201. rxd->status_word = 0;
  1202. rxd->buffer = 0;
  1203. }
  1204. for (i = 0; i < TX_RING_SIZE; i++) {
  1205. if (gp->tx_skbs[i] != NULL) {
  1206. struct gem_txd *txd;
  1207. int frag;
  1208. skb = gp->tx_skbs[i];
  1209. gp->tx_skbs[i] = NULL;
  1210. for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
  1211. int ent = i & (TX_RING_SIZE - 1);
  1212. txd = &gb->txd[ent];
  1213. dma_addr = le64_to_cpu(txd->buffer);
  1214. pci_unmap_page(gp->pdev, dma_addr,
  1215.        le64_to_cpu(txd->control_word) &
  1216.        TXDCTRL_BUFSZ, PCI_DMA_TODEVICE);
  1217. if (frag != skb_shinfo(skb)->nr_frags)
  1218. i++;
  1219. }
  1220. dev_kfree_skb_any(skb);
  1221. }
  1222. }
  1223. }
  1224. /* Must be invoked under gp->lock. */
  1225. static void gem_init_rings(struct gem *gp)
  1226. {
  1227. struct gem_init_block *gb = gp->init_block;
  1228. struct net_device *dev = gp->dev;
  1229. int i;
  1230. dma_addr_t dma_addr;
  1231. gp->rx_new = gp->rx_old = gp->tx_new = gp->tx_old = 0;
  1232. gem_clean_rings(gp);
  1233. for (i = 0; i < RX_RING_SIZE; i++) {
  1234. struct sk_buff *skb;
  1235. struct gem_rxd *rxd = &gb->rxd[i];
  1236. skb = gem_alloc_skb(RX_BUF_ALLOC_SIZE(gp), GFP_ATOMIC);
  1237. if (!skb) {
  1238. rxd->buffer = 0;
  1239. rxd->status_word = 0;
  1240. continue;
  1241. }
  1242. gp->rx_skbs[i] = skb;
  1243. skb->dev = dev;
  1244. skb_put(skb, (ETH_FRAME_LEN + RX_OFFSET));
  1245. dma_addr = pci_map_page(gp->pdev,
  1246. virt_to_page(skb->data),
  1247. ((unsigned long) skb->data &
  1248.  ~PAGE_MASK),
  1249. RX_BUF_ALLOC_SIZE(gp),
  1250. PCI_DMA_FROMDEVICE);
  1251. rxd->buffer = cpu_to_le64(dma_addr);
  1252. rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp));
  1253. skb_reserve(skb, RX_OFFSET);
  1254. }
  1255. for (i = 0; i < TX_RING_SIZE; i++) {
  1256. struct gem_txd *txd = &gb->txd[i];
  1257. txd->control_word = 0;
  1258. txd->buffer = 0;
  1259. }
  1260. }
  1261. /* Must be invoked under gp->lock. */
  1262. static int gem_reset_one_mii_phy(struct gem *gp, int phy_addr)
  1263. {
  1264. u16 val;
  1265. int limit = 10000;
  1266. val = __phy_read(gp, MII_BMCR, phy_addr);
  1267. val &= ~BMCR_ISOLATE;
  1268. val |= BMCR_RESET;
  1269. __phy_write(gp, MII_BMCR, val, phy_addr);
  1270. udelay(100);
  1271. while (limit--) {
  1272. val = __phy_read(gp, MII_BMCR, phy_addr);
  1273. if ((val & BMCR_RESET) == 0)
  1274. break;
  1275. udelay(10);
  1276. }
  1277. if ((val & BMCR_ISOLATE) && limit > 0)
  1278. __phy_write(gp, MII_BMCR, val & ~BMCR_ISOLATE, phy_addr);
  1279. return (limit <= 0);
  1280. }
  1281. /* Must be invoked under gp->lock. */
  1282. static void gem_init_bcm5201_phy(struct gem *gp)
  1283. {
  1284. u16 data;
  1285. data = phy_read(gp, MII_BCM5201_MULTIPHY);
  1286. data &= ~MII_BCM5201_MULTIPHY_SUPERISOLATE;
  1287. phy_write(gp, MII_BCM5201_MULTIPHY, data);
  1288. }
  1289. /* Must be invoked under gp->lock. */
  1290. static void gem_init_bcm5400_phy(struct gem *gp)
  1291. {
  1292. u16 data;
  1293. /* Configure for gigabit full duplex */
  1294. data = phy_read(gp, MII_BCM5400_AUXCONTROL);
  1295. data |= MII_BCM5400_AUXCONTROL_PWR10BASET;
  1296. phy_write(gp, MII_BCM5400_AUXCONTROL, data);
  1297. data = phy_read(gp, MII_BCM5400_GB_CONTROL);
  1298. data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP;
  1299. phy_write(gp, MII_BCM5400_GB_CONTROL, data);
  1300. mdelay(10);
  1301. /* Reset and configure cascaded 10/100 PHY */
  1302. gem_reset_one_mii_phy(gp, 0x1f);
  1303. data = __phy_read(gp, MII_BCM5201_MULTIPHY, 0x1f);
  1304. data |= MII_BCM5201_MULTIPHY_SERIALMODE;
  1305. __phy_write(gp, MII_BCM5201_MULTIPHY, data, 0x1f);
  1306. data = phy_read(gp, MII_BCM5400_AUXCONTROL);
  1307. data &= ~MII_BCM5400_AUXCONTROL_PWR10BASET;
  1308. phy_write(gp, MII_BCM5400_AUXCONTROL, data);
  1309. }
  1310. /* Must be invoked under gp->lock. */
  1311. static void gem_init_bcm5401_phy(struct gem *gp)
  1312. {
  1313. u16 data;
  1314. int rev;
  1315. rev = phy_read(gp, MII_PHYSID2) & 0x000f;
  1316. if (rev == 0 || rev == 3) {
  1317. /* Some revisions of 5401 appear to need this
  1318.  * initialisation sequence to disable, according
  1319.  * to OF, "tap power management"
  1320.  * 
  1321.  * WARNING ! OF and Darwin don't agree on the
  1322.  * register addresses. OF seem to interpret the
  1323.  * register numbers below as decimal
  1324.  *
  1325.  * Note: This should (and does) match tg3_init_5401phy_dsp
  1326.  *       in the tg3.c driver. -DaveM
  1327.  */
  1328. phy_write(gp, 0x18, 0x0c20);
  1329. phy_write(gp, 0x17, 0x0012);
  1330. phy_write(gp, 0x15, 0x1804);
  1331. phy_write(gp, 0x17, 0x0013);
  1332. phy_write(gp, 0x15, 0x1204);
  1333. phy_write(gp, 0x17, 0x8006);
  1334. phy_write(gp, 0x15, 0x0132);
  1335. phy_write(gp, 0x17, 0x8006);
  1336. phy_write(gp, 0x15, 0x0232);
  1337. phy_write(gp, 0x17, 0x201f);
  1338. phy_write(gp, 0x15, 0x0a20);
  1339. }
  1340. /* Configure for gigabit full duplex */
  1341. data = phy_read(gp, MII_BCM5400_GB_CONTROL);
  1342. data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP;
  1343. phy_write(gp, MII_BCM5400_GB_CONTROL, data);
  1344. mdelay(1);
  1345. /* Reset and configure cascaded 10/100 PHY */
  1346. gem_reset_one_mii_phy(gp, 0x1f);
  1347. data = __phy_read(gp, MII_BCM5201_MULTIPHY, 0x1f);
  1348. data |= MII_BCM5201_MULTIPHY_SERIALMODE;
  1349. __phy_write(gp, MII_BCM5201_MULTIPHY, data, 0x1f);
  1350. }
  1351. /* Must be invoked under gp->lock. */
  1352. static void gem_init_bcm5411_phy(struct gem *gp)
  1353. {
  1354. u16 data;
  1355. /* Here's some more Apple black magic to setup
  1356.  * some voltage stuffs.
  1357.  */
  1358. phy_write(gp, 0x1c, 0x8c23);
  1359. phy_write(gp, 0x1c, 0x8ca3);
  1360. phy_write(gp, 0x1c, 0x8c23);
  1361. /* Here, Apple seems to want to reset it, do
  1362.  * it as well
  1363.  */
  1364. phy_write(gp, MII_BMCR, BMCR_RESET);
  1365. /* Start autoneg */
  1366. phy_write(gp, MII_BMCR,
  1367.   (BMCR_ANENABLE | BMCR_FULLDPLX |
  1368.    BMCR_ANRESTART | BMCR_SPD2));
  1369. data = phy_read(gp, MII_BCM5400_GB_CONTROL);
  1370. data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP;
  1371. phy_write(gp, MII_BCM5400_GB_CONTROL, data);
  1372. }
  1373. /* Must be invoked under gp->lock. */
  1374. static void gem_init_phy(struct gem *gp)
  1375. {
  1376. u32 mifcfg;
  1377. if (!gp->wake_on_lan && gp->phy_mod == phymod_bcm5201)
  1378. phy_write(gp, MII_BCM5201_INTERRUPT, 0);
  1379. /* Revert MIF CFG setting done on stop_phy */
  1380. mifcfg = readl(gp->regs + MIF_CFG);
  1381. mifcfg &= ~MIF_CFG_BBMODE;
  1382. writel(mifcfg, gp->regs + MIF_CFG);
  1383. #ifdef CONFIG_ALL_PPC
  1384. if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE) {
  1385. int i;
  1386. pmac_call_feature(PMAC_FTR_GMAC_PHY_RESET, gp->of_node, 0, 0);
  1387. for (i = 0; i < 32; i++) {
  1388. gp->mii_phy_addr = i;
  1389. if (phy_read(gp, MII_BMCR) != 0xffff)
  1390. break;
  1391. }
  1392. if (i == 32) {
  1393. printk(KERN_WARNING "%s: GMAC PHY not responding !n",
  1394.        gp->dev->name);
  1395. return;
  1396. }
  1397. }
  1398. #endif /* CONFIG_ALL_PPC */
  1399. if (gp->pdev->vendor == PCI_VENDOR_ID_SUN &&
  1400.     gp->pdev->device == PCI_DEVICE_ID_SUN_GEM) {
  1401. u32 val;
  1402. /* Init datapath mode register. */
  1403. if (gp->phy_type == phy_mii_mdio0 ||
  1404.     gp->phy_type == phy_mii_mdio1) {
  1405. val = PCS_DMODE_MGM;
  1406. } else if (gp->phy_type == phy_serialink) {
  1407. val = PCS_DMODE_SM | PCS_DMODE_GMOE;
  1408. } else {
  1409. val = PCS_DMODE_ESM;
  1410. }
  1411. writel(val, gp->regs + PCS_DMODE);
  1412. }
  1413. if (gp->phy_type == phy_mii_mdio0 ||
  1414.     gp->phy_type == phy_mii_mdio1) {
  1415. u32 phy_id;
  1416. u16 val;
  1417. /* Take PHY out of isloate mode and reset it. */
  1418. gem_reset_one_mii_phy(gp, gp->mii_phy_addr);
  1419. phy_id = (phy_read(gp, MII_PHYSID1) << 16 | phy_read(gp, MII_PHYSID2))
  1420.   & 0xfffffff0;
  1421. printk(KERN_INFO "%s: MII PHY ID: %x ", gp->dev->name, phy_id);
  1422. switch(phy_id) {
  1423. case 0x406210:
  1424. gp->phy_mod = phymod_bcm5201;
  1425. gem_init_bcm5201_phy(gp);
  1426. printk("BCM 5201n");
  1427. break;
  1428. case 0x4061e0:
  1429. printk("BCM 5221n");
  1430. gp->phy_mod = phymod_bcm5221;
  1431. break;
  1432. case 0x206040:
  1433. printk("BCM 5400n");
  1434. gp->phy_mod = phymod_bcm5400;
  1435. gem_init_bcm5400_phy(gp);
  1436. gp->gigabit_capable = 1;
  1437. break;
  1438. case 0x206050:
  1439. printk("BCM 5401n");
  1440. gp->phy_mod = phymod_bcm5401;
  1441. gem_init_bcm5401_phy(gp);
  1442. gp->gigabit_capable = 1;
  1443. break;
  1444. case 0x206070:
  1445. printk("BCM 5411n");
  1446. gp->phy_mod = phymod_bcm5411;
  1447. gem_init_bcm5411_phy(gp);
  1448. gp->gigabit_capable = 1;
  1449. break;
  1450. case 0x1410c60:
  1451. printk("M1011 (Marvel ?)n");
  1452. gp->phy_mod = phymod_m1011;
  1453. gp->gigabit_capable = 1;
  1454. break;
  1455. case 0x18074c0:
  1456. printk("Lucentn");
  1457. gp->phy_mod = phymod_generic;
  1458. break;
  1459. case 0x437420:
  1460. printk("Enable Semiconductorn");
  1461. gp->phy_mod = phymod_generic;
  1462. break;
  1463. default:
  1464. printk("Unknown (Using generic mode)n");
  1465. gp->phy_mod = phymod_generic;
  1466. break;
  1467. };
  1468. /* Init advertisement and enable autonegotiation. */
  1469. val = phy_read(gp, MII_BMCR);
  1470. val &= ~BMCR_ANENABLE;
  1471. phy_write(gp, MII_BMCR, val);
  1472. udelay(10);
  1473. phy_write(gp, MII_ADVERTISE,
  1474.   phy_read(gp, MII_ADVERTISE) |
  1475.   (ADVERTISE_10HALF | ADVERTISE_10FULL |
  1476.    ADVERTISE_100HALF | ADVERTISE_100FULL));
  1477. } else {
  1478. u32 val;
  1479. int limit;
  1480. /* Reset PCS unit. */
  1481. val = readl(gp->regs + PCS_MIICTRL);
  1482. val |= PCS_MIICTRL_RST;
  1483. writeb(val, gp->regs + PCS_MIICTRL);
  1484. limit = 32;
  1485. while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) {
  1486. udelay(100);
  1487. if (limit-- <= 0)
  1488. break;
  1489. }
  1490. if (limit <= 0)
  1491. printk(KERN_WARNING "%s: PCS reset bit would not clear.n",
  1492.        gp->dev->name);
  1493. /* Make sure PCS is disabled while changing advertisement
  1494.  * configuration.
  1495.  */
  1496. val = readl(gp->regs + PCS_CFG);
  1497. val &= ~(PCS_CFG_ENABLE | PCS_CFG_TO);
  1498. writel(val, gp->regs + PCS_CFG);
  1499. /* Advertise all capabilities except assymetric
  1500.  * pause.
  1501.  */
  1502. val = readl(gp->regs + PCS_MIIADV);
  1503. val |= (PCS_MIIADV_FD | PCS_MIIADV_HD |
  1504. PCS_MIIADV_SP | PCS_MIIADV_AP);
  1505. writel(val, gp->regs + PCS_MIIADV);
  1506. /* Enable and restart auto-negotiation, disable wrapback/loopback,
  1507.  * and re-enable PCS.
  1508.  */
  1509. val = readl(gp->regs + PCS_MIICTRL);
  1510. val |= (PCS_MIICTRL_RAN | PCS_MIICTRL_ANE);
  1511. val &= ~PCS_MIICTRL_WB;
  1512. writel(val, gp->regs + PCS_MIICTRL);
  1513. val = readl(gp->regs + PCS_CFG);
  1514. val |= PCS_CFG_ENABLE;
  1515. writel(val, gp->regs + PCS_CFG);
  1516. /* Make sure serialink loopback is off.  The meaning
  1517.  * of this bit is logically inverted based upon whether
  1518.  * you are in Serialink or SERDES mode.
  1519.  */
  1520. val = readl(gp->regs + PCS_SCTRL);
  1521. if (gp->phy_type == phy_serialink)
  1522. val &= ~PCS_SCTRL_LOOP;
  1523. else
  1524. val |= PCS_SCTRL_LOOP;
  1525. writel(val, gp->regs + PCS_SCTRL);
  1526. gp->gigabit_capable = 1;
  1527. }
  1528. /* BMCR_SPD2 is a broadcom 54xx specific thing afaik */
  1529. if (gp->phy_mod != phymod_bcm5400 && gp->phy_mod != phymod_bcm5401 &&
  1530.     gp->phy_mod != phymod_bcm5411)
  1531.      gp->link_cntl &= ~BMCR_SPD2;
  1532. }
  1533. /* Must be invoked under gp->lock. */
  1534. static void gem_init_dma(struct gem *gp)
  1535. {
  1536. u64 desc_dma = (u64) gp->gblock_dvma;
  1537. u32 val;
  1538. val = (TXDMA_CFG_BASE | (0x7ff << 10) | TXDMA_CFG_PMODE);
  1539. writel(val, gp->regs + TXDMA_CFG);
  1540. writel(desc_dma >> 32, gp->regs + TXDMA_DBHI);
  1541. writel(desc_dma & 0xffffffff, gp->regs + TXDMA_DBLOW);
  1542. desc_dma += (INIT_BLOCK_TX_RING_SIZE * sizeof(struct gem_txd));
  1543. writel(0, gp->regs + TXDMA_KICK);
  1544. val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
  1545.        ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
  1546. writel(val, gp->regs + RXDMA_CFG);
  1547. writel(desc_dma >> 32, gp->regs + RXDMA_DBHI);
  1548. writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
  1549. writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
  1550. val  = (((gp->rx_pause_off / 64) << 0) & RXDMA_PTHRESH_OFF);
  1551. val |= (((gp->rx_pause_on / 64) << 12) & RXDMA_PTHRESH_ON);
  1552. writel(val, gp->regs + RXDMA_PTHRESH);
  1553. if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
  1554. writel(((5 & RXDMA_BLANK_IPKTS) |
  1555. ((8 << 12) & RXDMA_BLANK_ITIME)),
  1556.        gp->regs + RXDMA_BLANK);
  1557. else
  1558. writel(((5 & RXDMA_BLANK_IPKTS) |
  1559. ((4 << 12) & RXDMA_BLANK_ITIME)),
  1560.        gp->regs + RXDMA_BLANK);
  1561. }
  1562. /* Must be invoked under gp->lock. */
  1563. static u32
  1564. gem_setup_multicast(struct gem *gp)
  1565. {
  1566. u32 rxcfg = 0;
  1567. int i;
  1568. if ((gp->dev->flags & IFF_ALLMULTI) ||
  1569.     (gp->dev->mc_count > 256)) {
  1570.      for (i=0; i<16; i++)
  1571. writel(0xffff, gp->regs + MAC_HASH0 + (i << 2));
  1572. rxcfg |= MAC_RXCFG_HFE;
  1573. } else if (gp->dev->flags & IFF_PROMISC) {
  1574. rxcfg |= MAC_RXCFG_PROM;
  1575. } else {
  1576. u16 hash_table[16];
  1577. u32 crc;
  1578. struct dev_mc_list *dmi = gp->dev->mc_list;
  1579. int i;
  1580. for (i = 0; i < 16; i++)
  1581. hash_table[i] = 0;
  1582. for (i = 0; i < gp->dev->mc_count; i++) {
  1583. char *addrs = dmi->dmi_addr;
  1584. dmi = dmi->next;
  1585. if (!(*addrs & 1))
  1586. continue;
  1587.   crc = ether_crc_le(6, addrs);
  1588. crc >>= 24;
  1589. hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf));
  1590. }
  1591.      for (i=0; i<16; i++)
  1592. writel(hash_table[i], gp->regs + MAC_HASH0 + (i << 2));
  1593. rxcfg |= MAC_RXCFG_HFE;
  1594. }
  1595. return rxcfg;
  1596. }
  1597. /* Must be invoked under gp->lock. */
  1598. static void gem_init_mac(struct gem *gp)
  1599. {
  1600. unsigned char *e = &gp->dev->dev_addr[0];
  1601. if (gp->pdev->vendor == PCI_VENDOR_ID_SUN &&
  1602.     gp->pdev->device == PCI_DEVICE_ID_SUN_GEM)
  1603. writel(0x1bf0, gp->regs + MAC_SNDPAUSE);
  1604. writel(0x00, gp->regs + MAC_IPG0);
  1605. writel(0x08, gp->regs + MAC_IPG1);
  1606. writel(0x04, gp->regs + MAC_IPG2);
  1607. writel(0x40, gp->regs + MAC_STIME);
  1608. writel(0x40, gp->regs + MAC_MINFSZ);
  1609. /* Ethernet payload + header + FCS + optional VLAN tag. */
  1610. writel(0x20000000 | (gp->dev->mtu + ETH_HLEN + 4 + 4), gp->regs + MAC_MAXFSZ);
  1611. writel(0x07, gp->regs + MAC_PASIZE);
  1612. writel(0x04, gp->regs + MAC_JAMSIZE);
  1613. writel(0x10, gp->regs + MAC_ATTLIM);
  1614. writel(0x8808, gp->regs + MAC_MCTYPE);
  1615. writel((e[5] | (e[4] << 8)) & 0x3ff, gp->regs + MAC_RANDSEED);
  1616. writel((e[4] << 8) | e[5], gp->regs + MAC_ADDR0);
  1617. writel((e[2] << 8) | e[3], gp->regs + MAC_ADDR1);
  1618. writel((e[0] << 8) | e[1], gp->regs + MAC_ADDR2);
  1619. writel(0, gp->regs + MAC_ADDR3);
  1620. writel(0, gp->regs + MAC_ADDR4);
  1621. writel(0, gp->regs + MAC_ADDR5);
  1622. writel(0x0001, gp->regs + MAC_ADDR6);
  1623. writel(0xc200, gp->regs + MAC_ADDR7);
  1624. writel(0x0180, gp->regs + MAC_ADDR8);
  1625. writel(0, gp->regs + MAC_AFILT0);
  1626. writel(0, gp->regs + MAC_AFILT1);
  1627. writel(0, gp->regs + MAC_AFILT2);
  1628. writel(0, gp->regs + MAC_AF21MSK);
  1629. writel(0, gp->regs + MAC_AF0MSK);
  1630. gp->mac_rx_cfg = gem_setup_multicast(gp);
  1631. writel(0, gp->regs + MAC_NCOLL);
  1632. writel(0, gp->regs + MAC_FASUCC);
  1633. writel(0, gp->regs + MAC_ECOLL);
  1634. writel(0, gp->regs + MAC_LCOLL);
  1635. writel(0, gp->regs + MAC_DTIMER);
  1636. writel(0, gp->regs + MAC_PATMPS);
  1637. writel(0, gp->regs + MAC_RFCTR);
  1638. writel(0, gp->regs + MAC_LERR);
  1639. writel(0, gp->regs + MAC_AERR);
  1640. writel(0, gp->regs + MAC_FCSERR);
  1641. writel(0, gp->regs + MAC_RXCVERR);
  1642. /* Clear RX/TX/MAC/XIF config, we will set these up and enable
  1643.  * them once a link is established.
  1644.  */
  1645. writel(0, gp->regs + MAC_TXCFG);
  1646. writel(gp->mac_rx_cfg, gp->regs + MAC_RXCFG);
  1647. writel(0, gp->regs + MAC_MCCFG);
  1648. writel(0, gp->regs + MAC_XIFCFG);
  1649. /* Setup MAC interrupts.  We want to get all of the interesting
  1650.  * counter expiration events, but we do not want to hear about
  1651.  * normal rx/tx as the DMA engine tells us that.
  1652.  */
  1653. writel(MAC_TXSTAT_XMIT, gp->regs + MAC_TXMASK);
  1654. writel(MAC_RXSTAT_RCV, gp->regs + MAC_RXMASK);
  1655. /* Don't enable even the PAUSE interrupts for now, we
  1656.  * make no use of those events other than to record them.
  1657.  */
  1658. writel(0xffffffff, gp->regs + MAC_MCMASK);
  1659. }
  1660. /* Must be invoked under gp->lock. */
  1661. static void gem_init_pause_thresholds(struct gem *gp)
  1662. {
  1663. /* Calculate pause thresholds.  Setting the OFF threshold to the
  1664.  * full RX fifo size effectively disables PAUSE generation which
  1665.  * is what we do for 10/100 only GEMs which have FIFOs too small
  1666.  * to make real gains from PAUSE.
  1667.  */
  1668. if (gp->rx_fifo_sz <= (2 * 1024)) {
  1669. gp->rx_pause_off = gp->rx_pause_on = gp->rx_fifo_sz;
  1670. } else {
  1671. int max_frame = (gp->dev->mtu + ETH_HLEN + 4 + 4 + 64) & ~63;
  1672. int off = (gp->rx_fifo_sz - (max_frame * 2));
  1673. int on = off - max_frame;
  1674. gp->rx_pause_off = off;
  1675. gp->rx_pause_on = on;
  1676. }
  1677. {
  1678. u32 cfg;
  1679. cfg  = 0;
  1680. #if !defined(CONFIG_SPARC64) && !defined(CONFIG_ALPHA)
  1681. cfg |= GREG_CFG_IBURST;
  1682. #endif
  1683. cfg |= ((31 << 1) & GREG_CFG_TXDMALIM);
  1684. cfg |= ((31 << 6) & GREG_CFG_RXDMALIM);
  1685. writel(cfg, gp->regs + GREG_CFG);
  1686. }
  1687. }
  1688. static int gem_check_invariants(struct gem *gp)
  1689. {
  1690. struct pci_dev *pdev = gp->pdev;
  1691. u32 mif_cfg;
  1692. /* On Apple's sungem, we can't rely on registers as the chip
  1693.  * was been powered down by the firmware. The PHY is looked
  1694.  * up later on.
  1695.  */
  1696. if (pdev->vendor == PCI_VENDOR_ID_APPLE) {
  1697. gp->phy_type = phy_mii_mdio0;
  1698. gp->tx_fifo_sz = readl(gp->regs + TXDMA_FSZ) * 64;
  1699. gp->rx_fifo_sz = readl(gp->regs + RXDMA_FSZ) * 64;
  1700. gp->swrst_base = 0;
  1701. return 0;
  1702. }
  1703. mif_cfg = readl(gp->regs + MIF_CFG);
  1704. if (pdev->vendor == PCI_VENDOR_ID_SUN &&
  1705.     pdev->device == PCI_DEVICE_ID_SUN_RIO_GEM) {
  1706. /* One of the MII PHYs _must_ be present
  1707.  * as this chip has no gigabit PHY.
  1708.  */
  1709. if ((mif_cfg & (MIF_CFG_MDI0 | MIF_CFG_MDI1)) == 0) {
  1710. printk(KERN_ERR PFX "RIO GEM lacks MII phy, mif_cfg[%08x]n",
  1711.        mif_cfg);
  1712. return -1;
  1713. }
  1714. }
  1715. /* Determine initial PHY interface type guess.  MDIO1 is the
  1716.  * external PHY and thus takes precedence over MDIO0.
  1717.  */
  1718. if (mif_cfg & MIF_CFG_MDI1) {
  1719. gp->phy_type = phy_mii_mdio1;
  1720. mif_cfg |= MIF_CFG_PSELECT;
  1721. writel(mif_cfg, gp->regs + MIF_CFG);
  1722. } else if (mif_cfg & MIF_CFG_MDI0) {
  1723. gp->phy_type = phy_mii_mdio0;
  1724. mif_cfg &= ~MIF_CFG_PSELECT;
  1725. writel(mif_cfg, gp->regs + MIF_CFG);
  1726. } else {
  1727. gp->phy_type = phy_serialink;
  1728. }
  1729. if (gp->phy_type == phy_mii_mdio1 ||
  1730.     gp->phy_type == phy_mii_mdio0) {
  1731. int i;
  1732. for (i = 0; i < 32; i++) {
  1733. gp->mii_phy_addr = i;
  1734. if (phy_read(gp, MII_BMCR) != 0xffff)
  1735. break;
  1736. }
  1737. if (i == 32) {
  1738. if (pdev->device != PCI_DEVICE_ID_SUN_GEM) {
  1739. printk(KERN_ERR PFX "RIO MII phy will not respond.n");
  1740. return -1;
  1741. }
  1742. gp->phy_type = phy_serdes;
  1743. }
  1744. }
  1745. /* Fetch the FIFO configurations now too. */
  1746. gp->tx_fifo_sz = readl(gp->regs + TXDMA_FSZ) * 64;
  1747. gp->rx_fifo_sz = readl(gp->regs + RXDMA_FSZ) * 64;
  1748. if (pdev->vendor == PCI_VENDOR_ID_SUN) {
  1749. if (pdev->device == PCI_DEVICE_ID_SUN_GEM) {
  1750. if (gp->tx_fifo_sz != (9 * 1024) ||
  1751.     gp->rx_fifo_sz != (20 * 1024)) {
  1752. printk(KERN_ERR PFX "GEM has bogus fifo sizes tx(%d) rx(%d)n",
  1753.        gp->tx_fifo_sz, gp->rx_fifo_sz);
  1754. return -1;
  1755. }
  1756. gp->swrst_base = 0;
  1757. } else {
  1758. if (gp->tx_fifo_sz != (2 * 1024) ||
  1759.     gp->rx_fifo_sz != (2 * 1024)) {
  1760. printk(KERN_ERR PFX "RIO GEM has bogus fifo sizes tx(%d) rx(%d)n",
  1761.        gp->tx_fifo_sz, gp->rx_fifo_sz);
  1762. return -1;
  1763. }
  1764. gp->swrst_base = (64 / 4) << GREG_SWRST_CACHE_SHIFT;
  1765. }
  1766. }
  1767. return 0;
  1768. }
  1769. /* Must be invoked under gp->lock. */
  1770. static void gem_init_hw(struct gem *gp, int restart_link)
  1771. {
  1772. /* On Apple's gmac, I initialize the PHY only after
  1773.  * setting up the chip. It appears the gigabit PHYs
  1774.  * don't quite like beeing talked to on the GII when
  1775.  * the chip is not running, I suspect it might not
  1776.  * be clocked at that point. --BenH
  1777.  */
  1778. if (restart_link)
  1779. gem_init_phy(gp);
  1780. gem_init_pause_thresholds(gp);
  1781. gem_init_dma(gp);
  1782. gem_init_mac(gp);
  1783. if (restart_link) {
  1784. /* Default aneg parameters */
  1785. gp->timer_ticks = 0;
  1786. gp->lstate = link_down;
  1787. /* Can I advertise gigabit here ? I'd need BCM PHY docs... */
  1788. gem_begin_auto_negotiation(gp, NULL);
  1789. } else {
  1790. if (gp->lstate == link_up)
  1791. gem_set_link_modes(gp);
  1792. }
  1793. }
  1794. #ifdef CONFIG_ALL_PPC
  1795. /* Enable the chip's clock and make sure it's config space is
  1796.  * setup properly. There appear to be no need to restore the
  1797.  * base addresses.
  1798.  */
  1799. static void gem_apple_powerup(struct gem *gp)
  1800. {
  1801. u16 cmd;
  1802. u32 mif_cfg;
  1803. pmac_call_feature(PMAC_FTR_GMAC_ENABLE, gp->of_node, 0, 1);
  1804. current->state = TASK_UNINTERRUPTIBLE;
  1805. schedule_timeout((21 * HZ) / 1000);
  1806. pci_read_config_word(gp->pdev, PCI_COMMAND, &cmd);
  1807. cmd |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
  1808.      pci_write_config_word(gp->pdev, PCI_COMMAND, cmd);
  1809.      pci_write_config_byte(gp->pdev, PCI_LATENCY_TIMER, 6);
  1810.      pci_write_config_byte(gp->pdev, PCI_CACHE_LINE_SIZE, 8);
  1811. mdelay(1);
  1812. mif_cfg = readl(gp->regs + MIF_CFG);
  1813. mif_cfg &= ~(MIF_CFG_PSELECT|MIF_CFG_POLL|MIF_CFG_BBMODE|MIF_CFG_MDI1);
  1814. mif_cfg |= MIF_CFG_MDI0;
  1815. writel(mif_cfg, gp->regs + MIF_CFG);
  1816. writel(PCS_DMODE_MGM, gp->regs + PCS_DMODE);
  1817. writel(MAC_XIFCFG_OE, gp->regs + MAC_XIFCFG);
  1818. mdelay(1);
  1819. }
  1820. /* Turn off the chip's clock */
  1821. static void gem_apple_powerdown(struct gem *gp)
  1822. {
  1823. pmac_call_feature(PMAC_FTR_GMAC_ENABLE, gp->of_node, 0, 0);
  1824. }
  1825. #endif /* CONFIG_ALL_PPC */
  1826. /* Must be invoked under gp->lock. */
  1827. static void gem_stop_phy(struct gem *gp)
  1828. {
  1829. u32 mifcfg;
  1830. if (!gp->wake_on_lan && gp->phy_mod == phymod_bcm5201)
  1831. phy_write(gp, MII_BCM5201_INTERRUPT, 0);
  1832. /* Make sure we aren't polling PHY status change. We
  1833.  * don't currently use that feature though
  1834.  */
  1835. mifcfg = readl(gp->regs + MIF_CFG);
  1836. mifcfg &= ~MIF_CFG_POLL;
  1837. writel(mifcfg, gp->regs + MIF_CFG);
  1838. /* Here's a strange hack used by both MacOS 9 and X */
  1839. phy_write(gp, MII_LPA, phy_read(gp, MII_LPA));
  1840. if (gp->wake_on_lan) {
  1841. /* Setup wake-on-lan */
  1842. } else
  1843. writel(0, gp->regs + MAC_RXCFG);
  1844. writel(0, gp->regs + MAC_TXCFG);
  1845. writel(0, gp->regs + MAC_XIFCFG);
  1846. writel(0, gp->regs + TXDMA_CFG);
  1847. writel(0, gp->regs + RXDMA_CFG);
  1848. if (!gp->wake_on_lan) {
  1849. gem_stop(gp);
  1850. writel(MAC_TXRST_CMD, gp->regs + MAC_TXRST);
  1851. writel(MAC_RXRST_CMD, gp->regs + MAC_RXRST);
  1852. if (gp->phy_mod == phymod_bcm5400 || gp->phy_mod == phymod_bcm5401 ||
  1853.     gp->phy_mod == phymod_bcm5411) {
  1854. #if 0 /* Commented out in Darwin... someone has those dawn docs ? */
  1855. phy_write(gp, MII_BMCR, BMCR_PDOWN);
  1856. #endif
  1857. } else if (gp->phy_mod == phymod_bcm5201 || gp->phy_mod == phymod_bcm5221) {
  1858. #if 0 /* Commented out in Darwin... someone has those dawn docs ? */
  1859. u16 val = phy_read(gp, MII_BCM5201_AUXMODE2)
  1860. phy_write(gp, MII_BCM5201_AUXMODE2,
  1861.   val & ~MII_BCM5201_AUXMODE2_LOWPOWER);
  1862. #endif
  1863. phy_write(gp, MII_BCM5201_MULTIPHY, MII_BCM5201_MULTIPHY_SUPERISOLATE);
  1864. } else if (gp->phy_mod == phymod_m1011)
  1865. phy_write(gp, MII_BMCR, BMCR_PDOWN);
  1866. /* According to Apple, we must set the MDIO pins to this begnign
  1867.  * state or we may 1) eat more current, 2) damage some PHYs
  1868.  */
  1869. writel(mifcfg | MIF_CFG_BBMODE, gp->regs + MIF_CFG);
  1870. writel(0, gp->regs + MIF_BBCLK);
  1871. writel(0, gp->regs + MIF_BBDATA);
  1872. writel(0, gp->regs + MIF_BBOENAB);
  1873. writel(MAC_XIFCFG_GMII | MAC_XIFCFG_LBCK, gp->regs + MAC_XIFCFG);
  1874. (void) readl(gp->regs + MAC_XIFCFG);
  1875. }
  1876. }
  1877. /* Shut down the chip, must be called with pm_sem held.  */
  1878. static void gem_shutdown(struct gem *gp)
  1879. {
  1880. /* Make us not-running to avoid timers respawning */
  1881. gp->hw_running = 0;
  1882. /* Stop the link timer */
  1883. del_timer_sync(&gp->link_timer);
  1884. /* Stop the reset task */
  1885. while (gp->reset_task_pending)
  1886. schedule();
  1887. /* Actually stop the chip */
  1888. spin_lock_irq(&gp->lock);
  1889. if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE) {
  1890. gem_stop_phy(gp);
  1891. spin_unlock_irq(&gp->lock);
  1892. #ifdef CONFIG_ALL_PPC
  1893. /* Power down the chip */
  1894. gem_apple_powerdown(gp);
  1895. #endif /* CONFIG_ALL_PPC */
  1896. } else {
  1897. gem_stop(gp);
  1898. spin_unlock_irq(&gp->lock);
  1899. }
  1900. }
  1901. static void gem_pm_task(void *data)
  1902. {
  1903. struct gem *gp = (struct gem *) data;
  1904. /* We assume if we can't lock the pm_sem, then open() was
  1905.  * called again (or suspend()), and we can safely ignore
  1906.  * the PM request
  1907.  */
  1908. if (down_trylock(&gp->pm_sem))
  1909. return;
  1910. /* Driver was re-opened or already shut down */
  1911. if (gp->opened || !gp->hw_running) {
  1912. up(&gp->pm_sem);
  1913. return;
  1914. }
  1915. gem_shutdown(gp);
  1916. up(&gp->pm_sem);
  1917. }
  1918. static void gem_pm_timer(unsigned long data)
  1919. {
  1920. struct gem *gp = (struct gem *) data;
  1921. schedule_task(&gp->pm_task);
  1922. }
  1923. static int gem_open(struct net_device *dev)
  1924. {
  1925. struct gem *gp = dev->priv;
  1926. int hw_was_up;
  1927. down(&gp->pm_sem);
  1928. hw_was_up = gp->hw_running;
  1929. /* Stop the PM timer/task */
  1930. del_timer(&gp->pm_timer);
  1931. flush_scheduled_tasks();
  1932. /* The power-management semaphore protects the hw_running
  1933.  * etc. state so it is safe to do this bit without gp->lock
  1934.  */
  1935. if (!gp->hw_running) {
  1936. #ifdef CONFIG_ALL_PPC
  1937. /* First, we need to bring up the chip */
  1938. if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE) {
  1939. gem_apple_powerup(gp);
  1940. gem_check_invariants(gp);
  1941. }
  1942. #endif /* CONFIG_ALL_PPC */
  1943. /* Reset the chip */
  1944. spin_lock_irq(&gp->lock);
  1945. gem_stop(gp);
  1946. spin_unlock_irq(&gp->lock);
  1947. gp->hw_running = 1;
  1948. }
  1949. spin_lock_irq(&gp->lock);
  1950. /* We can now request the interrupt as we know it's masked
  1951.  * on the controller
  1952.  */
  1953. if (request_irq(gp->pdev->irq, gem_interrupt,
  1954. SA_SHIRQ, dev->name, (void *)dev)) {
  1955. spin_unlock_irq(&gp->lock);
  1956. printk(KERN_ERR "%s: failed to request irq !n", gp->dev->name);
  1957. #ifdef CONFIG_ALL_PPC
  1958. if (!hw_was_up && gp->pdev->vendor == PCI_VENDOR_ID_APPLE)
  1959. gem_apple_powerdown(gp);
  1960. #endif /* CONFIG_ALL_PPC */
  1961. /* Fire the PM timer that will shut us down in about 10 seconds */
  1962. gp->pm_timer.expires = jiffies + 10*HZ;
  1963. add_timer(&gp->pm_timer);
  1964. up(&gp->pm_sem);
  1965. return -EAGAIN;
  1966. }
  1967. /* Allocate & setup ring buffers */
  1968. gem_init_rings(gp);
  1969. /* Init & setup chip hardware */
  1970. gem_init_hw(gp, !hw_was_up);
  1971. gp->opened = 1;
  1972. spin_unlock_irq(&gp->lock);
  1973. up(&gp->pm_sem);
  1974. return 0;
  1975. }
  1976. static int gem_close(struct net_device *dev)
  1977. {
  1978. struct gem *gp = dev->priv;
  1979. /* Make sure we don't get distracted by suspend/resume */
  1980. down(&gp->pm_sem);
  1981. /* Stop traffic, mark us closed */
  1982. spin_lock_irq(&gp->lock);
  1983. gp->opened = 0;
  1984. writel(0xffffffff, gp->regs + GREG_IMASK);
  1985. netif_stop_queue(dev);
  1986. /* Stop chip */
  1987. gem_stop(gp);
  1988. /* Get rid of rings */
  1989. gem_clean_rings(gp);
  1990. /* Bye, the pm timer will finish the job */
  1991. free_irq(gp->pdev->irq, (void *) dev);
  1992. spin_unlock_irq(&gp->lock);
  1993. /* Fire the PM timer that will shut us down in about 10 seconds */
  1994. gp->pm_timer.expires = jiffies + 10*HZ;
  1995. add_timer(&gp->pm_timer);
  1996. up(&gp->pm_sem);
  1997. return 0;
  1998. }
  1999. #ifdef CONFIG_PM
  2000. static int gem_suspend(struct pci_dev *pdev, u32 state)
  2001. {
  2002. struct net_device *dev = pci_get_drvdata(pdev);
  2003. struct gem *gp = dev->priv;
  2004. /* We hold the PM semaphore during entire driver
  2005.  * sleep time
  2006.  */
  2007. down(&gp->pm_sem);
  2008. printk(KERN_INFO "%s: suspending, WakeOnLan %sn",
  2009.        dev->name, gp->wake_on_lan ? "enabled" : "disabled");
  2010. /* If the driver is opened, we stop the DMA */
  2011. if (gp->opened) {
  2012. spin_lock_irq(&gp->lock);
  2013. /* Stop traffic, mark us closed */
  2014. netif_device_detach(dev);
  2015. writel(0xffffffff, gp->regs + GREG_IMASK);
  2016. /* Stop chip */
  2017. gem_stop(gp);
  2018. /* Get rid of ring buffers */
  2019. gem_clean_rings(gp);
  2020. spin_unlock_irq(&gp->lock);
  2021. if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE)
  2022. disable_irq(gp->pdev->irq);
  2023. }
  2024. if (gp->hw_running) {
  2025. /* Kill PM timer if any */
  2026. del_timer_sync(&gp->pm_timer);
  2027. flush_scheduled_tasks();
  2028. gem_shutdown(gp);
  2029. }
  2030. return 0;
  2031. }
  2032. static int gem_resume(struct pci_dev *pdev)
  2033. {
  2034. struct net_device *dev = pci_get_drvdata(pdev);
  2035. struct gem *gp = dev->priv;
  2036. printk(KERN_INFO "%s: resumingn", dev->name);
  2037. if (gp->opened) {
  2038. #ifdef CONFIG_ALL_PPC
  2039. /* First, we need to bring up the chip */
  2040. if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE) {
  2041. gem_apple_powerup(gp);
  2042. gem_check_invariants(gp);
  2043. }
  2044. #endif /* CONFIG_ALL_PPC */
  2045. spin_lock_irq(&gp->lock);
  2046. gem_stop(gp);
  2047. gp->hw_running = 1;
  2048. gem_init_rings(gp);
  2049. gem_init_hw(gp, 1);
  2050. spin_unlock_irq(&gp->lock);
  2051. netif_device_attach(dev);
  2052. if (gp->pdev->vendor == PCI_VENDOR_ID_APPLE)
  2053. enable_irq(gp->pdev->irq);
  2054. }
  2055. up(&gp->pm_sem);
  2056. return 0;
  2057. }
  2058. #endif /* CONFIG_PM */
  2059. static struct net_device_stats *gem_get_stats(struct net_device *dev)
  2060. {
  2061. struct gem *gp = dev->priv;
  2062. struct net_device_stats *stats = &gp->net_stats;
  2063. spin_lock_irq(&gp->lock);
  2064. if (gp->hw_running) {
  2065. stats->rx_crc_errors += readl(gp->regs + MAC_FCSERR);
  2066. writel(0, gp->regs + MAC_FCSERR);
  2067. stats->rx_frame_errors += readl(gp->regs + MAC_AERR);
  2068. writel(0, gp->regs + MAC_AERR);
  2069. stats->rx_length_errors += readl(gp->regs + MAC_LERR);
  2070. writel(0, gp->regs + MAC_LERR);
  2071. stats->tx_aborted_errors += readl(gp->regs + MAC_ECOLL);
  2072. stats->collisions +=
  2073. (readl(gp->regs + MAC_ECOLL) +
  2074.  readl(gp->regs + MAC_LCOLL));
  2075. writel(0, gp->regs + MAC_ECOLL);
  2076. writel(0, gp->regs + MAC_LCOLL);
  2077. }
  2078. spin_unlock_irq(&gp->lock);
  2079. return &gp->net_stats;
  2080. }
  2081. static void gem_set_multicast(struct net_device *dev)
  2082. {
  2083. struct gem *gp = dev->priv;
  2084. u32 rxcfg, rxcfg_new;
  2085. int limit = 10000;
  2086. if (!gp->hw_running)
  2087. return;
  2088. spin_lock_irq(&gp->lock);
  2089. netif_stop_queue(dev);
  2090. rxcfg = readl(gp->regs + MAC_RXCFG);
  2091. gp->mac_rx_cfg = rxcfg_new = gem_setup_multicast(gp);
  2092. writel(rxcfg & ~MAC_RXCFG_ENAB, gp->regs + MAC_RXCFG);
  2093. while (readl(gp->regs + MAC_RXCFG) & MAC_RXCFG_ENAB) {
  2094. if (!limit--)
  2095. break;
  2096. udelay(10);
  2097. }
  2098. rxcfg &= ~(MAC_RXCFG_PROM | MAC_RXCFG_HFE);
  2099. rxcfg |= rxcfg_new;
  2100. writel(rxcfg, gp->regs + MAC_RXCFG);
  2101. netif_wake_queue(dev);
  2102. spin_unlock_irq(&gp->lock);
  2103. }
  2104. /* Eventually add support for changing the advertisement
  2105.  * on autoneg.
  2106.  */
  2107. static int gem_ethtool_ioctl(struct net_device *dev, void *ep_user)
  2108. {
  2109. struct gem *gp = dev->priv;
  2110. u16 bmcr;
  2111. int full_duplex, speed, pause;
  2112. struct ethtool_cmd ecmd;
  2113. if (copy_from_user(&ecmd, ep_user, sizeof(ecmd)))
  2114. return -EFAULT;
  2115. switch(ecmd.cmd) {
  2116.         case ETHTOOL_GDRVINFO: {
  2117. struct ethtool_drvinfo info = { cmd: ETHTOOL_GDRVINFO };
  2118. strncpy(info.driver, DRV_NAME, ETHTOOL_BUSINFO_LEN);
  2119. strncpy(info.version, DRV_VERSION, ETHTOOL_BUSINFO_LEN);
  2120. info.fw_version[0] = '';
  2121. strncpy(info.bus_info, gp->pdev->slot_name, ETHTOOL_BUSINFO_LEN);
  2122. info.regdump_len = 0; /*SUNGEM_NREGS;*/
  2123. if (copy_to_user(ep_user, &info, sizeof(info)))
  2124. return -EFAULT;
  2125. return 0;
  2126. }
  2127. case ETHTOOL_GSET:
  2128. ecmd.supported =
  2129. (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |
  2130.  SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
  2131.  SUPPORTED_Autoneg | SUPPORTED_TP | SUPPORTED_MII);
  2132. if (gp->gigabit_capable)
  2133. ecmd.supported |=
  2134. (SUPPORTED_1000baseT_Half |
  2135.  SUPPORTED_1000baseT_Full);
  2136. /* XXX hardcoded stuff for now */
  2137. ecmd.port = PORT_MII;
  2138. ecmd.transceiver = XCVR_EXTERNAL;
  2139. ecmd.phy_address = 0; /* XXX fixed PHYAD */
  2140. /* Record PHY settings if HW is on. */
  2141. spin_lock_irq(&gp->lock);
  2142. if (gp->hw_running) {
  2143. bmcr = phy_read(gp, MII_BMCR);
  2144. gem_read_mii_link_mode(gp, &full_duplex, &speed, &pause);
  2145. } else
  2146. bmcr = 0;
  2147. spin_unlock_irq(&gp->lock);
  2148. if (bmcr & BMCR_ANENABLE) {
  2149. ecmd.autoneg = AUTONEG_ENABLE;
  2150. ecmd.speed = speed == 10 ? SPEED_10 : (speed == 1000 ? SPEED_1000 : SPEED_100);
  2151. ecmd.duplex = full_duplex ? DUPLEX_FULL : DUPLEX_HALF;
  2152. } else {
  2153. ecmd.autoneg = AUTONEG_DISABLE;
  2154. ecmd.speed =
  2155. (bmcr & BMCR_SPEED100) ?
  2156. SPEED_100 : SPEED_10;
  2157. ecmd.duplex =
  2158. (bmcr & BMCR_FULLDPLX) ?
  2159. DUPLEX_FULL : DUPLEX_HALF;
  2160. }
  2161. if (copy_to_user(ep_user, &ecmd, sizeof(ecmd)))
  2162. return -EFAULT;
  2163. return 0;
  2164. case ETHTOOL_SSET:
  2165. if (!capable(CAP_NET_ADMIN))
  2166. return -EPERM;
  2167. /* Verify the settings we care about. */
  2168. if (ecmd.autoneg != AUTONEG_ENABLE &&
  2169.     ecmd.autoneg != AUTONEG_DISABLE)
  2170. return -EINVAL;
  2171. if (ecmd.autoneg == AUTONEG_DISABLE &&
  2172.     ((ecmd.speed != SPEED_100 &&
  2173.       ecmd.speed != SPEED_10) ||
  2174.      (ecmd.duplex != DUPLEX_HALF &&
  2175.       ecmd.duplex != DUPLEX_FULL)))
  2176. return -EINVAL;
  2177. /* Apply settings and restart link process. */
  2178. spin_lock_irq(&gp->lock);
  2179. gem_begin_auto_negotiation(gp, &ecmd);
  2180. spin_unlock_irq(&gp->lock);
  2181. return 0;
  2182. case ETHTOOL_NWAY_RST:
  2183. if ((gp->link_cntl & BMCR_ANENABLE) == 0)
  2184. return -EINVAL;
  2185. /* Restart link process. */
  2186. spin_lock_irq(&gp->lock);
  2187. gem_begin_auto_negotiation(gp, NULL);
  2188. spin_unlock_irq(&gp->lock);
  2189. return 0;
  2190. case ETHTOOL_GWOL:
  2191. case ETHTOOL_SWOL:
  2192. break; /* todo */
  2193. /* get link status */
  2194. case ETHTOOL_GLINK: {
  2195. struct ethtool_value edata = { cmd: ETHTOOL_GLINK };
  2196. edata.data = (gp->lstate == link_up);
  2197. if (copy_to_user(ep_user, &edata, sizeof(edata)))
  2198. return -EFAULT;
  2199. return 0;
  2200. }
  2201. /* get message-level */
  2202. case ETHTOOL_GMSGLVL: {
  2203. struct ethtool_value edata = { cmd: ETHTOOL_GMSGLVL };
  2204. edata.data = gp->msg_enable;
  2205. if (copy_to_user(ep_user, &edata, sizeof(edata)))
  2206. return -EFAULT;
  2207. return 0;
  2208. }
  2209. /* set message-level */
  2210. case ETHTOOL_SMSGLVL: {
  2211. struct ethtool_value edata;
  2212. if (copy_from_user(&edata, ep_user, sizeof(edata)))
  2213. return -EFAULT;
  2214. gp->msg_enable = edata.data;
  2215. return 0;
  2216. }
  2217. #if 0
  2218. case ETHTOOL_GREGS: {
  2219. struct ethtool_regs regs;
  2220. u32 *regbuf;
  2221. int r = 0;
  2222. if (copy_from_user(&regs, useraddr, sizeof(regs)))
  2223. return -EFAULT;
  2224. if (regs.len > SUNGEM_NREGS) {
  2225. regs.len = SUNGEM_NREGS;
  2226. }
  2227. regs.version = 0;
  2228. if (copy_to_user(useraddr, &regs, sizeof(regs)))
  2229. return -EFAULT;
  2230. if (!gp->hw_running)
  2231. return -ENODEV;
  2232. useraddr += offsetof(struct ethtool_regs, data);
  2233. /* Use kmalloc to avoid bloating the stack */
  2234. regbuf = kmalloc(4 * SUNGEM_NREGS, GFP_KERNEL);
  2235. if (!regbuf)
  2236. return -ENOMEM;
  2237. spin_lock_irq(&np->lock);
  2238. gem_get_regs(gp, regbuf);
  2239. spin_unlock_irq(&np->lock);
  2240. if (copy_to_user(useraddr, regbuf, regs.len*sizeof(u32)))
  2241. r = -EFAULT;
  2242. kfree(regbuf);
  2243. return r;
  2244. }
  2245. #endif
  2246. };
  2247. return -EOPNOTSUPP;
  2248. }
  2249. static int gem_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
  2250. {
  2251. struct gem *gp = dev->priv;
  2252. struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data;
  2253. int rc = -EOPNOTSUPP;
  2254. /* Hold the PM semaphore while doing ioctl's or we may collide
  2255.  * with open/close and power management and oops.
  2256.  */
  2257. down(&gp->pm_sem);
  2258. switch (cmd) {
  2259. case SIOCETHTOOL:
  2260. rc = gem_ethtool_ioctl(dev, ifr->ifr_data);
  2261. break;
  2262. case SIOCGMIIPHY: /* Get address of MII PHY in use. */
  2263. data->phy_id = gp->mii_phy_addr;
  2264. /* Fallthrough... */
  2265. case SIOCGMIIREG: /* Read MII PHY register. */
  2266. data->val_out = __phy_read(gp, data->reg_num & 0x1f, data->phy_id & 0x1f);
  2267. rc = 0;
  2268. break;
  2269. case SIOCSMIIREG: /* Write MII PHY register. */
  2270. if (!capable(CAP_NET_ADMIN)) {
  2271. rc = -EPERM;
  2272. } else {
  2273. __phy_write(gp, data->reg_num & 0x1f, data->val_in, data->phy_id & 0x1f);
  2274. rc = 0;
  2275. }
  2276. break;
  2277. };
  2278. up(&gp->pm_sem);
  2279. return rc;
  2280. }
  2281. #if (!defined(__sparc__) && !defined(CONFIG_ALL_PPC))
  2282. /* Fetch MAC address from vital product data of PCI ROM. */
  2283. static void find_eth_addr_in_vpd(void *rom_base, int len, unsigned char *dev_addr)
  2284. {
  2285. int this_offset;
  2286. for (this_offset = 0x20; this_offset < len; this_offset++) {
  2287. void *p = rom_base + this_offset;
  2288. int i;
  2289. if (readb(p + 0) != 0x90 ||
  2290.     readb(p + 1) != 0x00 ||
  2291.     readb(p + 2) != 0x09 ||
  2292.     readb(p + 3) != 0x4e ||
  2293.     readb(p + 4) != 0x41 ||
  2294.     readb(p + 5) != 0x06)
  2295. continue;
  2296. this_offset += 6;
  2297. p += 6;
  2298. for (i = 0; i < 6; i++)
  2299. dev_addr[i] = readb(p + i);
  2300. break;
  2301. }
  2302. }
  2303. static void get_gem_mac_nonobp(struct pci_dev *pdev, unsigned char *dev_addr)
  2304. {
  2305. u32 rom_reg_orig;
  2306. void *p;
  2307. if (pdev->resource[PCI_ROM_RESOURCE].parent == NULL) {
  2308. if (pci_assign_resource(pdev, PCI_ROM_RESOURCE) < 0)
  2309. goto use_random;
  2310. }
  2311. pci_read_config_dword(pdev, pdev->rom_base_reg, &rom_reg_orig);
  2312. pci_write_config_dword(pdev, pdev->rom_base_reg,
  2313.        rom_reg_orig | PCI_ROM_ADDRESS_ENABLE);
  2314. p = ioremap(pci_resource_start(pdev, PCI_ROM_RESOURCE), (64 * 1024));
  2315. if (p != NULL && readb(p) == 0x55 && readb(p + 1) == 0xaa)
  2316. find_eth_addr_in_vpd(p, (64 * 1024), dev_addr);
  2317. if (p != NULL)
  2318. iounmap(p);
  2319. pci_write_config_dword(pdev, pdev->rom_base_reg, rom_reg_orig);
  2320. return;
  2321. use_random:
  2322. /* Sun MAC prefix then 3 random bytes. */
  2323. dev_addr[0] = 0x08;
  2324. dev_addr[1] = 0x00;
  2325. dev_addr[2] = 0x20;
  2326. get_random_bytes(dev_addr + 3, 3);
  2327. return;
  2328. }
  2329. #endif /* not Sparc and not PPC */
  2330. static int __devinit gem_get_device_address(struct gem *gp)
  2331. {
  2332. #if defined(__sparc__) || defined(CONFIG_ALL_PPC)
  2333. struct net_device *dev = gp->dev;
  2334. #endif
  2335. #if defined(__sparc__)
  2336. struct pci_dev *pdev = gp->pdev;
  2337. struct pcidev_cookie *pcp = pdev->sysdata;
  2338. int node = -1;
  2339. if (pcp != NULL) {
  2340. node = pcp->prom_node;
  2341. if (prom_getproplen(node, "local-mac-address") == 6)
  2342. prom_getproperty(node, "local-mac-address",
  2343.  dev->dev_addr, 6);
  2344. else
  2345. node = -1;
  2346. }
  2347. if (node == -1)
  2348. memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
  2349. #elif defined(CONFIG_ALL_PPC)
  2350. unsigned char *addr;
  2351. addr = get_property(gp->of_node, "local-mac-address", NULL);
  2352. if (addr == NULL) {
  2353. printk("n");
  2354. printk(KERN_ERR "%s: can't get mac-addressn", dev->name);
  2355. return -1;
  2356. }
  2357. memcpy(dev->dev_addr, addr, MAX_ADDR_LEN);
  2358. #else
  2359. get_gem_mac_nonobp(gp->pdev, gp->dev->dev_addr);
  2360. #endif
  2361. return 0;
  2362. }
  2363. static int __devinit gem_init_one(struct pci_dev *pdev,
  2364.   const struct pci_device_id *ent)
  2365. {
  2366. static int gem_version_printed = 0;
  2367. unsigned long gemreg_base, gemreg_len;
  2368. struct net_device *dev;
  2369. struct gem *gp;
  2370. int i, err, pci_using_dac;
  2371. if (gem_version_printed++ == 0)
  2372. printk(KERN_INFO "%s", version);
  2373. /* Apple gmac note: during probe, the chip is powered up by
  2374.  * the arch code to allow the code below to work (and to let
  2375.  * the chip be probed on the config space. It won't stay powered
  2376.  * up until the interface is brought up however, so we can't rely
  2377.  * on register configuration done at this point.
  2378.  */
  2379. err = pci_enable_device(pdev);
  2380. if (err) {
  2381. printk(KERN_ERR PFX "Cannot enable MMIO operation, "
  2382.        "aborting.n");
  2383. return err;
  2384. }
  2385. pci_set_master(pdev);
  2386. /* Configure DMA attributes. */
  2387. /* All of the GEM documentation states that 64-bit DMA addressing
  2388.  * is fully supported and should work just fine.  However the
  2389.  * front end for RIO based GEMs is different and only supports
  2390.  * 32-bit addressing.
  2391.  *
  2392.  * For now we assume the various PPC GEMs are 32-bit only as well.
  2393.  */
  2394. if (pdev->vendor == PCI_VENDOR_ID_SUN &&
  2395.     pdev->device == PCI_DEVICE_ID_SUN_GEM &&
  2396.     !pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff)) {
  2397. pci_using_dac = 1;
  2398. } else {
  2399. err = pci_set_dma_mask(pdev, (u64) 0xffffffff);
  2400. if (err) {
  2401. printk(KERN_ERR PFX "No usable DMA configuration, "
  2402.        "aborting.n");
  2403. return err;
  2404. }
  2405. pci_using_dac = 0;
  2406. }
  2407. gemreg_base = pci_resource_start(pdev, 0);
  2408. gemreg_len = pci_resource_len(pdev, 0);
  2409. if ((pci_resource_flags(pdev, 0) & IORESOURCE_IO) != 0) {
  2410. printk(KERN_ERR PFX "Cannot find proper PCI device "
  2411.        "base address, aborting.n");
  2412. return -ENODEV;
  2413. }
  2414. dev = alloc_etherdev(sizeof(*gp));
  2415. if (!dev) {
  2416. printk(KERN_ERR PFX "Etherdev alloc failed, aborting.n");
  2417. return -ENOMEM;
  2418. }
  2419. SET_MODULE_OWNER(dev);
  2420. gp = dev->priv;
  2421. if (pci_request_regions(pdev, dev->name)) {
  2422. printk(KERN_ERR PFX "Cannot obtain PCI resources, "
  2423.        "aborting.n");
  2424. goto err_out_free_netdev;
  2425. }
  2426. gp->pdev = pdev;
  2427. dev->base_addr = (long) pdev;
  2428. gp->dev = dev;
  2429. gp->msg_enable = (gem_debug < 0 ? DEFAULT_MSG : gem_debug);
  2430. spin_lock_init(&gp->lock);
  2431. init_MUTEX(&gp->pm_sem);
  2432. init_timer(&gp->link_timer);
  2433. gp->link_timer.function = gem_link_timer;
  2434. gp->link_timer.data = (unsigned long) gp;
  2435. init_timer(&gp->pm_timer);
  2436. gp->pm_timer.function = gem_pm_timer;
  2437. gp->pm_timer.data = (unsigned long) gp;
  2438. INIT_TQUEUE(&gp->pm_task, gem_pm_task, gp);
  2439. INIT_TQUEUE(&gp->reset_task, gem_reset_task, gp);
  2440. /* Default link parameters */
  2441. if (link_mode >= 0 && link_mode <= 6)
  2442. gp->link_cntl = link_modes[link_mode];
  2443. else
  2444. gp->link_cntl = BMCR_ANENABLE;
  2445. gp->lstate = link_down;
  2446. gp->timer_ticks = 0;
  2447. gp->regs = (unsigned long) ioremap(gemreg_base, gemreg_len);
  2448. if (gp->regs == 0UL) {
  2449. printk(KERN_ERR PFX "Cannot map device registers, "
  2450.        "aborting.n");
  2451. goto err_out_free_res;
  2452. }
  2453. /* On Apple, we power the chip up now in order for check
  2454.  * invariants to work, but also because the firmware might
  2455.  * not have properly shut down the PHY.
  2456.  */
  2457. #ifdef CONFIG_ALL_PPC
  2458. if (pdev->vendor == PCI_VENDOR_ID_APPLE)
  2459. gem_apple_powerup(gp);
  2460. #endif
  2461. spin_lock_irq(&gp->lock);
  2462. gem_stop(gp);
  2463. spin_unlock_irq(&gp->lock);
  2464. if (gem_check_invariants(gp))
  2465. goto err_out_iounmap;
  2466. spin_lock_irq(&gp->lock);
  2467. gp->hw_running = 1;
  2468. gem_init_phy(gp);
  2469. gem_begin_auto_negotiation(gp, NULL);
  2470. spin_unlock_irq(&gp->lock);
  2471. /* It is guarenteed that the returned buffer will be at least
  2472.  * PAGE_SIZE aligned.
  2473.  */
  2474. gp->init_block = (struct gem_init_block *)
  2475. pci_alloc_consistent(pdev, sizeof(struct gem_init_block),
  2476.      &gp->gblock_dvma);
  2477. if (!gp->init_block) {
  2478. printk(KERN_ERR PFX "Cannot allocate init block, "
  2479.        "aborting.n");
  2480. goto err_out_iounmap;
  2481. }
  2482. #ifdef CONFIG_ALL_PPC
  2483. gp->of_node = pci_device_to_OF_node(pdev);
  2484. #endif
  2485. if (gem_get_device_address(gp))
  2486. goto err_out_free_consistent;
  2487. if (register_netdev(dev)) {
  2488. printk(KERN_ERR PFX "Cannot register net device, "
  2489.        "aborting.n");
  2490. goto err_out_free_consistent;
  2491. }
  2492. printk(KERN_INFO "%s: Sun GEM (PCI) 10/100/1000BaseT Ethernet ",
  2493.        dev->name);
  2494. for (i = 0; i < 6; i++)
  2495. printk("%2.2x%c", dev->dev_addr[i],
  2496.        i == 5 ? ' ' : ':');
  2497. printk("n");
  2498. pci_set_drvdata(pdev, dev);
  2499. dev->open = gem_open;
  2500. dev->stop = gem_close;
  2501. dev->hard_start_xmit = gem_start_xmit;
  2502. dev->get_stats = gem_get_stats;
  2503. dev->set_multicast_list = gem_set_multicast;
  2504. dev->do_ioctl = gem_ioctl;
  2505. dev->tx_timeout = gem_tx_timeout;
  2506. dev->watchdog_timeo = 5 * HZ;
  2507. dev->change_mtu = gem_change_mtu;
  2508. dev->irq = pdev->irq;
  2509. dev->dma = 0;
  2510. /* GEM can do it all... */
  2511. dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
  2512. if (pci_using_dac)
  2513. dev->features |= NETIF_F_HIGHDMA;
  2514. /* Fire the PM timer that will shut us down in about 10 seconds */
  2515. gp->pm_timer.expires = jiffies + 10*HZ;
  2516. add_timer(&gp->pm_timer);
  2517. return 0;
  2518. err_out_free_consistent:
  2519. pci_free_consistent(pdev,
  2520.     sizeof(struct gem_init_block),
  2521.     gp->init_block,
  2522.     gp->gblock_dvma);
  2523. err_out_iounmap:
  2524. down(&gp->pm_sem);
  2525. /* Stop the PM timer & task */
  2526. del_timer_sync(&gp->pm_timer);
  2527. flush_scheduled_tasks();
  2528. if (gp->hw_running)
  2529. gem_shutdown(gp);
  2530. up(&gp->pm_sem);
  2531. iounmap((void *) gp->regs);
  2532. err_out_free_res:
  2533. pci_release_regions(pdev);
  2534. err_out_free_netdev:
  2535. kfree(dev);
  2536. return -ENODEV;
  2537. }
  2538. static void __devexit gem_remove_one(struct pci_dev *pdev)
  2539. {
  2540. struct net_device *dev = pci_get_drvdata(pdev);
  2541. if (dev) {
  2542. struct gem *gp = dev->priv;
  2543. unregister_netdev(dev);
  2544. down(&gp->pm_sem);
  2545. /* Stop the PM timer & task */
  2546. del_timer_sync(&gp->pm_timer);
  2547. flush_scheduled_tasks();
  2548. if (gp->hw_running)
  2549. gem_shutdown(gp);
  2550. up(&gp->pm_sem);
  2551. pci_free_consistent(pdev,
  2552.     sizeof(struct gem_init_block),
  2553.     gp->init_block,
  2554.     gp->gblock_dvma);
  2555. iounmap((void *) gp->regs);
  2556. pci_release_regions(pdev);
  2557. kfree(dev);
  2558. pci_set_drvdata(pdev, NULL);
  2559. }
  2560. }
  2561. static struct pci_driver gem_driver = {
  2562. name: GEM_MODULE_NAME,
  2563. id_table: gem_pci_tbl,
  2564. probe: gem_init_one,
  2565. remove: __devexit_p(gem_remove_one),
  2566. #ifdef CONFIG_PM
  2567. suspend: gem_suspend,
  2568. resume: gem_resume,
  2569. #endif /* CONFIG_PM */
  2570. };
  2571. static int __init gem_init(void)
  2572. {
  2573. return pci_module_init(&gem_driver);
  2574. }
  2575. static void __exit gem_cleanup(void)
  2576. {
  2577. pci_unregister_driver(&gem_driver);
  2578. }
  2579. module_init(gem_init);
  2580. module_exit(gem_cleanup);