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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Network device driver for the GMAC ethernet controller on
  3.  * Apple G4 Powermacs.
  4.  *
  5.  * Copyright (C) 2000 Paul Mackerras & Ben. Herrenschmidt
  6.  * 
  7.  * portions based on sunhme.c by David S. Miller
  8.  *
  9.  * Changes:
  10.  * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/06/2000
  11.  * - check init_etherdev return in gmac_probe1
  12.  * BenH <benh@kernel.crashing.org> - 03/09/2000
  13.  * - Add support for new PHYs
  14.  * - Add some PowerBook sleep code
  15.  * BenH <benh@kernel.crashing.org> - ??/??/????
  16.  *  - PHY updates
  17.  * BenH <benh@kernel.crashing.org> - 08/08/2001
  18.  * - Add more PHYs, fixes to sleep code
  19.  * Matt Domsch <Matt_Domsch@dell.com> - 11/12/2001
  20.  * - use library crc32 functions
  21.  */
  22. #include <linux/module.h>
  23. #include <linux/config.h>
  24. #include <linux/kernel.h>
  25. #include <linux/sched.h>
  26. #include <linux/types.h>
  27. #include <linux/fcntl.h>
  28. #include <linux/interrupt.h>
  29. #include <linux/netdevice.h>
  30. #include <linux/etherdevice.h>
  31. #include <linux/delay.h>
  32. #include <linux/string.h>
  33. #include <linux/timer.h>
  34. #include <linux/init.h>
  35. #include <linux/pci.h>
  36. #include <linux/crc32.h>
  37. #include <asm/prom.h>
  38. #include <asm/io.h>
  39. #include <asm/pgtable.h>
  40. #include <asm/machdep.h>
  41. #include <asm/pmac_feature.h>
  42. #include <asm/keylargo.h>
  43. #include <asm/pci-bridge.h>
  44. #ifdef CONFIG_PMAC_PBOOK
  45. #include <linux/adb.h>
  46. #include <linux/pmu.h>
  47. #include <asm/irq.h>
  48. #endif
  49. #include "gmac.h"
  50. #define DEBUG_PHY
  51. /* Driver version 1.5, kernel 2.4.x */
  52. #define GMAC_VERSION "v1.5k4"
  53. #define DUMMY_BUF_LEN RX_BUF_ALLOC_SIZE + RX_OFFSET + GMAC_BUFFER_ALIGN
  54. static unsigned char *dummy_buf;
  55. static struct net_device *gmacs;
  56. /* Prototypes */
  57. static int mii_read(struct gmac *gm, int phy, int r);
  58. static int mii_write(struct gmac *gm, int phy, int r, int v);
  59. static void mii_poll_start(struct gmac *gm);
  60. static void mii_poll_stop(struct gmac *gm);
  61. static void mii_interrupt(struct gmac *gm);
  62. static int mii_lookup_and_reset(struct gmac *gm);
  63. static void mii_setup_phy(struct gmac *gm);
  64. static int mii_do_reset_phy(struct gmac *gm, int phy_addr);
  65. static void mii_init_BCM5400(struct gmac *gm);
  66. static void mii_init_BCM5401(struct gmac *gm);
  67. static void gmac_set_power(struct gmac *gm, int power_up);
  68. static int gmac_powerup_and_reset(struct net_device *dev);
  69. static void gmac_set_gigabit_mode(struct gmac *gm, int gigabit);
  70. static void gmac_set_duplex_mode(struct gmac *gm, int full_duplex);
  71. static void gmac_mac_init(struct gmac *gm, unsigned char *mac_addr);
  72. static void gmac_init_rings(struct gmac *gm, int from_irq);
  73. static void gmac_start_dma(struct gmac *gm);
  74. static void gmac_stop_dma(struct gmac *gm);
  75. static void gmac_set_multicast(struct net_device *dev);
  76. static int gmac_open(struct net_device *dev);
  77. static int gmac_close(struct net_device *dev);
  78. static void gmac_tx_timeout(struct net_device *dev);
  79. static int gmac_xmit_start(struct sk_buff *skb, struct net_device *dev);
  80. static void gmac_tx_cleanup(struct net_device *dev, int force_cleanup);
  81. static void gmac_receive(struct net_device *dev);
  82. static void gmac_interrupt(int irq, void *dev_id, struct pt_regs *regs);
  83. static struct net_device_stats *gmac_stats(struct net_device *dev);
  84. static int gmac_probe(void);
  85. static void gmac_probe1(struct device_node *gmac);
  86. #ifdef CONFIG_PMAC_PBOOK
  87. int gmac_sleep_notify(struct pmu_sleep_notifier *self, int when);
  88. static struct pmu_sleep_notifier gmac_sleep_notifier = {
  89. gmac_sleep_notify, SLEEP_LEVEL_NET,
  90. };
  91. #endif
  92. /*
  93.  * Read via the mii interface from a PHY register
  94.  */
  95. static int
  96. mii_read(struct gmac *gm, int phy, int r)
  97. {
  98. int timeout;
  99. GM_OUT(GM_MIF_FRAME_CTL_DATA,
  100. (0x01 << GM_MIF_FRAME_START_SHIFT) |
  101. (0x02 << GM_MIF_FRAME_OPCODE_SHIFT) |
  102. GM_MIF_FRAME_TURNAROUND_HI |
  103. (phy << GM_MIF_FRAME_PHY_ADDR_SHIFT) |
  104. (r << GM_MIF_FRAME_REG_ADDR_SHIFT));
  105. for (timeout = 1000; timeout > 0; --timeout) {
  106. udelay(20);
  107. if (GM_IN(GM_MIF_FRAME_CTL_DATA) & GM_MIF_FRAME_TURNAROUND_LO)
  108. return GM_IN(GM_MIF_FRAME_CTL_DATA) & GM_MIF_FRAME_DATA_MASK;
  109. }
  110. return -1;
  111. }
  112. /*
  113.  * Write on the mii interface to a PHY register
  114.  */
  115. static int
  116. mii_write(struct gmac *gm, int phy, int r, int v)
  117. {
  118. int timeout;
  119. GM_OUT(GM_MIF_FRAME_CTL_DATA,
  120. (0x01 << GM_MIF_FRAME_START_SHIFT) |
  121. (0x01 << GM_MIF_FRAME_OPCODE_SHIFT) |
  122. GM_MIF_FRAME_TURNAROUND_HI |
  123. (phy << GM_MIF_FRAME_PHY_ADDR_SHIFT) |
  124. (r << GM_MIF_FRAME_REG_ADDR_SHIFT) |
  125. (v & GM_MIF_FRAME_DATA_MASK));
  126. for (timeout = 1000; timeout > 0; --timeout) {
  127. udelay(20);
  128. if (GM_IN(GM_MIF_FRAME_CTL_DATA) & GM_MIF_FRAME_TURNAROUND_LO)
  129. return 0;
  130. }
  131. return -1;
  132. }
  133. /*
  134.  * Start MIF autopolling of the PHY status register
  135.  */
  136. static void 
  137. mii_poll_start(struct gmac *gm)
  138. {
  139. unsigned int tmp;
  140. /* Start the MIF polling on the external transceiver. */
  141. tmp = GM_IN(GM_MIF_CFG);
  142. tmp &= ~(GM_MIF_CFGPR_MASK | GM_MIF_CFGPD_MASK);
  143. tmp |= ((gm->phy_addr & 0x1f) << GM_MIF_CFGPD_SHIFT);
  144. tmp |= (MII_SR << GM_MIF_CFGPR_SHIFT);
  145. tmp |= GM_MIF_CFGPE;
  146. GM_OUT(GM_MIF_CFG, tmp);
  147. /* Let the bits set. */
  148. udelay(GM_MIF_POLL_DELAY);
  149. GM_OUT(GM_MIF_IRQ_MASK, 0xffc0);
  150. }
  151. /*
  152.  * Stop MIF autopolling of the PHY status register
  153.  */
  154. static void 
  155. mii_poll_stop(struct gmac *gm)
  156. {
  157. GM_OUT(GM_MIF_IRQ_MASK, 0xffff);
  158. GM_BIC(GM_MIF_CFG, GM_MIF_CFGPE);
  159. udelay(GM_MIF_POLL_DELAY);
  160. }
  161. /*
  162.  * Called when the MIF detect a change of the PHY status
  163.  * 
  164.  * handles monitoring the link and updating GMAC with the correct
  165.  * duplex mode.
  166.  * 
  167.  * Note: Are we missing status changes ? In this case, we'll have to
  168.  * a timer and control the autoneg. process more closely. Also, we may
  169.  * want to stop rx and tx side when the link is down.
  170.  */
  171. /* Link modes of the BCM5400 PHY */
  172. static int phy_BCM5400_link_table[8][3] = {
  173. { 0, 0, 0 }, /* No link */
  174. { 0, 0, 0 }, /* 10BT Half Duplex */
  175. { 1, 0, 0 }, /* 10BT Full Duplex */
  176. { 0, 1, 0 }, /* 100BT Half Duplex */
  177. { 0, 1, 0 }, /* 100BT Half Duplex */
  178. { 1, 1, 0 }, /* 100BT Full Duplex*/
  179. { 1, 0, 1 }, /* 1000BT */
  180. { 1, 0, 1 }, /* 1000BT */
  181. };
  182. static void
  183. mii_interrupt(struct gmac *gm)
  184. {
  185. int phy_status;
  186. int lpar_ability;
  187. mii_poll_stop(gm);
  188. /* May the status change before polling is re-enabled ? */
  189. mii_poll_start(gm);
  190. /* We read the Auxilliary Status Summary register */
  191. phy_status = mii_read(gm, gm->phy_addr, MII_SR);
  192. if ((phy_status ^ gm->phy_status) & (MII_SR_ASSC | MII_SR_LKS)) {
  193. int full_duplex = 0;
  194. int link_100 = 0;
  195. int gigabit = 0;
  196. #ifdef DEBUG_PHY
  197. printk(KERN_INFO "%s: Link state change, phy_status: 0x%04xn",
  198. gm->dev->name, phy_status);
  199. #endif
  200. gm->phy_status = phy_status;
  201. /* Should we enable that in generic mode ? */
  202. lpar_ability = mii_read(gm, gm->phy_addr, MII_ANLPA);
  203. if (lpar_ability & MII_ANLPA_PAUS)
  204. GM_BIS(GM_MAC_CTRL_CONFIG, GM_MAC_CTRL_CONF_SND_PAUSE_EN);
  205. else
  206. GM_BIC(GM_MAC_CTRL_CONFIG, GM_MAC_CTRL_CONF_SND_PAUSE_EN);
  207. /* Link ? Check for speed and duplex */
  208. if ((phy_status & MII_SR_LKS) && (phy_status & MII_SR_ASSC)) {
  209.     int restart = 0;
  210.     int aux_stat, link;
  211.     switch (gm->phy_type) {
  212.       case PHY_B5201:
  213.       case PHY_B5221:
  214.      aux_stat = mii_read(gm, gm->phy_addr, MII_BCM5201_AUXCTLSTATUS);
  215. #ifdef DEBUG_PHY
  216. printk(KERN_INFO "%s:    Link up ! BCM5201/5221 aux_stat: 0x%04xn",
  217. gm->dev->name, aux_stat);
  218. #endif
  219.      full_duplex = ((aux_stat & MII_BCM5201_AUXCTLSTATUS_DUPLEX) != 0);
  220.      link_100 = ((aux_stat & MII_BCM5201_AUXCTLSTATUS_SPEED) != 0);
  221. netif_carrier_on(gm->dev);
  222.         break;
  223.       case PHY_B5400:
  224.       case PHY_B5401:
  225.       case PHY_B5411:
  226.      aux_stat = mii_read(gm, gm->phy_addr, MII_BCM5400_AUXSTATUS);
  227.      link = (aux_stat & MII_BCM5400_AUXSTATUS_LINKMODE_MASK) >>
  228.      MII_BCM5400_AUXSTATUS_LINKMODE_SHIFT;
  229. #ifdef DEBUG_PHY
  230. printk(KERN_INFO "%s:    Link up ! BCM54xx aux_stat: 0x%04x (link mode: %d)n",
  231. gm->dev->name, aux_stat, link);
  232. #endif
  233.      full_duplex = phy_BCM5400_link_table[link][0];
  234.      link_100 = phy_BCM5400_link_table[link][1];
  235.      gigabit = phy_BCM5400_link_table[link][2];
  236. netif_carrier_on(gm->dev);
  237.      break;
  238.       case PHY_LXT971:
  239.      aux_stat = mii_read(gm, gm->phy_addr, MII_LXT971_STATUS2);
  240. #ifdef DEBUG_PHY
  241. printk(KERN_INFO "%s:    Link up ! LXT971 stat2: 0x%04xn",
  242. gm->dev->name, aux_stat);
  243. #endif
  244.      full_duplex = ((aux_stat & MII_LXT971_STATUS2_FULLDUPLEX) != 0);
  245.      link_100 = ((aux_stat & MII_LXT971_STATUS2_SPEED) != 0);
  246. netif_carrier_on(gm->dev);
  247.      break;
  248.       default:
  249.      full_duplex = (lpar_ability & MII_ANLPA_FDAM) != 0;
  250.      link_100 = (lpar_ability & MII_ANLPA_100M) != 0;
  251.      break;
  252.     }
  253. #ifdef DEBUG_PHY
  254.     printk(KERN_INFO "%s:    Full Duplex: %d, Speed: %sn",
  255.      gm->dev->name, full_duplex,
  256.      gigabit ? "1000" : (link_100 ? "100" : "10"));
  257. #endif
  258.                     if (gigabit != gm->gigabit) {
  259.                      gm->gigabit = gigabit;
  260.                      gmac_set_gigabit_mode(gm, gm->gigabit);
  261.                      restart = 1;
  262.                     }
  263.     if (full_duplex != gm->full_duplex) {
  264. gm->full_duplex = full_duplex;
  265. gmac_set_duplex_mode(gm, gm->full_duplex);
  266. restart = 1;
  267.     }
  268.     if (restart)
  269. gmac_start_dma(gm);
  270. } else if (!(phy_status & MII_SR_LKS)) {
  271. #ifdef DEBUG_PHY
  272.     printk(KERN_INFO "%s:    Link down !n", gm->dev->name);
  273. #endif
  274. netif_carrier_off(gm->dev);
  275. }
  276. }
  277. }
  278. #ifdef CONFIG_PMAC_PBOOK
  279. /* Power management: stop PHY chip for suspend mode
  280.  * 
  281.  * TODO: This will have to be modified is WOL is to be supported.
  282.  */
  283. static void
  284. gmac_suspend(struct gmac* gm)
  285. {
  286. int data, timeout;
  287. unsigned long flags;
  288. gm->sleeping = 1;
  289. netif_device_detach(gm->dev);
  290. spin_lock_irqsave(&gm->lock, flags);
  291. if (gm->opened) {
  292. disable_irq(gm->dev->irq);
  293. /* Stop polling PHY */
  294. mii_poll_stop(gm);
  295. }
  296. /* Mask out all chips interrupts */
  297. GM_OUT(GM_IRQ_MASK, 0xffffffff);
  298. spin_unlock_irqrestore(&gm->lock, flags);
  299. if (gm->opened) {
  300. int i;
  301. /* Empty Tx ring of any remaining gremlins */
  302. gmac_tx_cleanup(gm->dev, 1);
  303. /* Empty Rx ring of any remaining gremlins */
  304. for (i = 0; i < NRX; ++i) {
  305. if (gm->rx_buff[i] != 0) {
  306. dev_kfree_skb_irq(gm->rx_buff[i]);
  307. gm->rx_buff[i] = 0;
  308. }
  309. }
  310. }
  311. /* Clear interrupts on 5201 */
  312. if (gm->phy_type == PHY_B5201 || gm->phy_type == PHY_B5221)
  313. mii_write(gm, gm->phy_addr, MII_BCM5201_INTERRUPT, 0);
  314. /* Drive MDIO high */
  315. GM_OUT(GM_MIF_CFG, 0);
  316. /* Unchanged, don't ask me why */
  317. data = mii_read(gm, gm->phy_addr, MII_ANLPA);
  318. mii_write(gm, gm->phy_addr, MII_ANLPA, data);
  319. /* Stop everything */
  320. GM_OUT(GM_MAC_RX_CONFIG, 0);
  321. GM_OUT(GM_MAC_TX_CONFIG, 0);
  322. GM_OUT(GM_MAC_XIF_CONFIG, 0);
  323. GM_OUT(GM_TX_CONF, 0);
  324. GM_OUT(GM_RX_CONF, 0);
  325. /* Set MAC in reset state */
  326. GM_OUT(GM_RESET, GM_RESET_TX | GM_RESET_RX);
  327. for (timeout = 100; timeout > 0; --timeout) {
  328. mdelay(10);
  329. if ((GM_IN(GM_RESET) & (GM_RESET_TX | GM_RESET_RX)) == 0)
  330. break;
  331. }
  332. GM_OUT(GM_MAC_TX_RESET, GM_MAC_TX_RESET_NOW);
  333. GM_OUT(GM_MAC_RX_RESET, GM_MAC_RX_RESET_NOW);
  334. /* Superisolate PHY */
  335. if (gm->phy_type == PHY_B5201 || gm->phy_type == PHY_B5221)
  336. mii_write(gm, gm->phy_addr, MII_BCM5201_MULTIPHY,
  337. MII_BCM5201_MULTIPHY_SUPERISOLATE);
  338. /* Put MDIO in sane electric state. According to an obscure
  339.  * Apple comment, not doing so may let them drive some current
  340.  * during sleep and possibly damage BCM PHYs.
  341.  */
  342. GM_OUT(GM_MIF_CFG, GM_MIF_CFGBB);
  343. GM_OUT(GM_MIF_BB_CLOCK, 0);
  344. GM_OUT(GM_MIF_BB_DATA, 0);
  345. GM_OUT(GM_MIF_BB_OUT_ENABLE, 0);
  346. GM_OUT(GM_MAC_XIF_CONFIG,
  347. GM_MAC_XIF_CONF_GMII_MODE|GM_MAC_XIF_CONF_MII_INT_LOOP);
  348. (void)GM_IN(GM_MAC_XIF_CONFIG);
  349. /* Unclock the GMAC chip */
  350. gmac_set_power(gm, 0);
  351. }
  352. static void
  353. gmac_resume(struct gmac *gm)
  354. {
  355. int data;
  356. if (gmac_powerup_and_reset(gm->dev)) {
  357. printk(KERN_ERR "%s: Couldn't revive gmac ethernet !n", gm->dev->name);
  358. return;
  359. }
  360. gm->sleeping = 0;
  361. if (gm->opened) {
  362. /* Create fresh rings */
  363. gmac_init_rings(gm, 1);
  364. /* re-initialize the MAC */
  365. gmac_mac_init(gm, gm->dev->dev_addr);
  366. /* re-initialize the multicast tables & promisc mode if any */
  367. gmac_set_multicast(gm->dev);
  368. }
  369. /* Early enable Tx and Rx so that we are clocked */
  370. GM_BIS(GM_TX_CONF, GM_TX_CONF_DMA_EN);
  371. mdelay(20);
  372. GM_BIS(GM_RX_CONF, GM_RX_CONF_DMA_EN);
  373. mdelay(20);
  374. GM_BIS(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_ENABLE);
  375. mdelay(20);
  376. GM_BIS(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_ENABLE);
  377. mdelay(20);
  378. if (gm->phy_type == PHY_B5201 || gm->phy_type == PHY_B5221) {
  379. data = mii_read(gm, gm->phy_addr, MII_BCM5201_MULTIPHY);
  380. mii_write(gm, gm->phy_addr, MII_BCM5201_MULTIPHY,
  381. data & ~MII_BCM5201_MULTIPHY_SUPERISOLATE);
  382. }
  383. mdelay(1);
  384. if (gm->opened) {
  385. /* restart polling PHY */
  386. mii_interrupt(gm);
  387. /* restart DMA operations */
  388. gmac_start_dma(gm);
  389. netif_device_attach(gm->dev);
  390. enable_irq(gm->dev->irq);
  391. } else {
  392. /* Driver not opened, just leave things off. Note that
  393.  * we could be smart and superisolate the PHY when the
  394.  * driver is closed, but I won't do that unless I have
  395.  * a better understanding of some electrical issues with
  396.  * this PHY chip --BenH
  397.  */
  398. GM_OUT(GM_MAC_RX_CONFIG, 0);
  399. GM_OUT(GM_MAC_TX_CONFIG, 0);
  400. GM_OUT(GM_MAC_XIF_CONFIG, 0);
  401. GM_OUT(GM_TX_CONF, 0);
  402. GM_OUT(GM_RX_CONF, 0);
  403. }
  404. }
  405. #endif
  406. static int
  407. mii_do_reset_phy(struct gmac *gm, int phy_addr)
  408. {
  409. int mii_control, timeout;
  410. mii_control = mii_read(gm, phy_addr, MII_CR);
  411. mii_write(gm, phy_addr, MII_CR, mii_control | MII_CR_RST);
  412. mdelay(10);
  413. for (timeout = 100; timeout > 0; --timeout) {
  414. mii_control = mii_read(gm, phy_addr, MII_CR);
  415. if (mii_control == -1) {
  416. printk(KERN_ERR "%s PHY died after reset !n",
  417. gm->dev->name);
  418. return 1;
  419. }
  420. if ((mii_control & MII_CR_RST) == 0)
  421. break;
  422. mdelay(10);
  423. }
  424. if (mii_control & MII_CR_RST) {
  425. printk(KERN_ERR "%s PHY reset timeout !n", gm->dev->name);
  426. return 1;
  427. }
  428. mii_write(gm, phy_addr, MII_CR, mii_control & ~MII_CR_ISOL);
  429. return 0;
  430. }
  431. /* Here's a bunch of configuration routines for
  432.  * Broadcom PHYs used on various Mac models. Unfortunately,
  433.  * except for the 5201, Broadcom never sent me any documentation,
  434.  * so this is from my understanding of Apple's Open Firmware
  435.  * drivers and Darwin's implementation
  436.  */
  437.  
  438. static void
  439. mii_init_BCM5400(struct gmac *gm)
  440. {
  441. int data;
  442. /* Configure for gigabit full duplex */
  443. data = mii_read(gm, gm->phy_addr, MII_BCM5400_AUXCONTROL);
  444. data |= MII_BCM5400_AUXCONTROL_PWR10BASET;
  445. mii_write(gm, gm->phy_addr, MII_BCM5400_AUXCONTROL, data);
  446. data = mii_read(gm, gm->phy_addr, MII_BCM5400_GB_CONTROL);
  447. data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP;
  448. mii_write(gm, gm->phy_addr, MII_BCM5400_GB_CONTROL, data);
  449. mdelay(10);
  450. /* Reset and configure cascaded 10/100 PHY */
  451. mii_do_reset_phy(gm, 0x1f);
  452. data = mii_read(gm, 0x1f, MII_BCM5201_MULTIPHY);
  453. data |= MII_BCM5201_MULTIPHY_SERIALMODE;
  454. mii_write(gm, 0x1f, MII_BCM5201_MULTIPHY, data);
  455. data = mii_read(gm, gm->phy_addr, MII_BCM5400_AUXCONTROL);
  456. data &= ~MII_BCM5400_AUXCONTROL_PWR10BASET;
  457. mii_write(gm, gm->phy_addr, MII_BCM5400_AUXCONTROL, data);
  458. }
  459. static void
  460. mii_init_BCM5401(struct gmac *gm)
  461. {
  462. int data;
  463. int rev;
  464. rev = mii_read(gm, gm->phy_addr, MII_ID1) & 0x000f;
  465. if (rev == 0 || rev == 3) {
  466. /* Some revisions of 5401 appear to need this
  467.  * initialisation sequence to disable, according
  468.  * to OF, "tap power management"
  469.  * 
  470.  * WARNING ! OF and Darwin don't agree on the
  471.  * register addresses. OF seem to interpret the
  472.  * register numbers below as decimal
  473.  */
  474. mii_write(gm, gm->phy_addr, 0x18, 0x0c20);
  475. mii_write(gm, gm->phy_addr, 0x17, 0x0012);
  476. mii_write(gm, gm->phy_addr, 0x15, 0x1804);
  477. mii_write(gm, gm->phy_addr, 0x17, 0x0013);
  478. mii_write(gm, gm->phy_addr, 0x15, 0x1204);
  479. mii_write(gm, gm->phy_addr, 0x17, 0x8006);
  480. mii_write(gm, gm->phy_addr, 0x15, 0x0132);
  481. mii_write(gm, gm->phy_addr, 0x17, 0x8006);
  482. mii_write(gm, gm->phy_addr, 0x15, 0x0232);
  483. mii_write(gm, gm->phy_addr, 0x17, 0x201f);
  484. mii_write(gm, gm->phy_addr, 0x15, 0x0a20);
  485. }
  486. /* Configure for gigabit full duplex */
  487. data = mii_read(gm, gm->phy_addr, MII_BCM5400_GB_CONTROL);
  488. data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP;
  489. mii_write(gm, gm->phy_addr, MII_BCM5400_GB_CONTROL, data);
  490. mdelay(10);
  491. /* Reset and configure cascaded 10/100 PHY */
  492. mii_do_reset_phy(gm, 0x1f);
  493. data = mii_read(gm, 0x1f, MII_BCM5201_MULTIPHY);
  494. data |= MII_BCM5201_MULTIPHY_SERIALMODE;
  495. mii_write(gm, 0x1f, MII_BCM5201_MULTIPHY, data);
  496. }
  497. static void
  498. mii_init_BCM5411(struct gmac *gm)
  499. {
  500. int data;
  501. /* Here's some more Apple black magic to setup
  502.  * some voltage stuffs.
  503.  */
  504. mii_write(gm, gm->phy_addr, 0x1c, 0x8c23);
  505. mii_write(gm, gm->phy_addr, 0x1c, 0x8ca3);
  506. mii_write(gm, gm->phy_addr, 0x1c, 0x8c23);
  507. /* Here, Apple seems to want to reset it, do
  508.  * it as well
  509.  */
  510. mii_write(gm, gm->phy_addr, MII_CR, MII_CR_RST);
  511. /* Start autoneg */
  512. mii_write(gm, gm->phy_addr, MII_CR,
  513. MII_CR_ASSE|MII_CR_FDM| /* Autospeed, full duplex */
  514. MII_CR_RAN|
  515. MII_CR_SPEEDSEL2 /* chip specific, gigabit enable ? */);
  516. data = mii_read(gm, gm->phy_addr, MII_BCM5400_GB_CONTROL);
  517. data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP;
  518. mii_write(gm, gm->phy_addr, MII_BCM5400_GB_CONTROL, data);
  519. }
  520. static int
  521. mii_lookup_and_reset(struct gmac *gm)
  522. {
  523. int i, mii_status, mii_control;
  524. gm->phy_addr = -1;
  525. gm->phy_type = PHY_UNKNOWN;
  526. /* Hard reset the PHY */
  527. pmac_call_feature(PMAC_FTR_GMAC_PHY_RESET, gm->of_node, 0, 0);
  528. /* Find the PHY */
  529. for(i=0; i<=31; i++) {
  530. mii_control = mii_read(gm, i, MII_CR);
  531. mii_status = mii_read(gm, i, MII_SR);
  532. if (mii_control != -1  && mii_status != -1 &&
  533. (mii_control != 0xffff || mii_status != 0xffff))
  534. break;
  535. }
  536. gm->phy_addr = i;
  537. if (gm->phy_addr > 31)
  538. return 0;
  539. /* Reset it */
  540. if (mii_do_reset_phy(gm, gm->phy_addr))
  541. goto fail;
  542. /* Read the PHY ID */
  543. gm->phy_id = (mii_read(gm, gm->phy_addr, MII_ID0) << 16) |
  544. mii_read(gm, gm->phy_addr, MII_ID1);
  545. #ifdef DEBUG_PHY
  546. printk(KERN_INFO "%s: PHY ID: 0x%08xn", gm->dev->name, gm->phy_id);
  547. #endif
  548. if ((gm->phy_id & MII_BCM5400_MASK) == MII_BCM5400_ID) {
  549. gm->phy_type = PHY_B5400;
  550. printk(KERN_INFO  "%s: Found Broadcom BCM5400 PHY (Gigabit)n",
  551. gm->dev->name);
  552. mii_init_BCM5400(gm);
  553. } else if ((gm->phy_id & MII_BCM5401_MASK) == MII_BCM5401_ID) {
  554. gm->phy_type = PHY_B5401;
  555. printk(KERN_INFO  "%s: Found Broadcom BCM5401 PHY (Gigabit)n",
  556. gm->dev->name);
  557. mii_init_BCM5401(gm);
  558. } else if ((gm->phy_id & MII_BCM5411_MASK) == MII_BCM5411_ID) {
  559. gm->phy_type = PHY_B5411;
  560. printk(KERN_INFO  "%s: Found Broadcom BCM5411 PHY (Gigabit)n",
  561. gm->dev->name);
  562. mii_init_BCM5411(gm);
  563. } else if ((gm->phy_id & MII_BCM5201_MASK) == MII_BCM5201_ID) {
  564. gm->phy_type = PHY_B5201;
  565. printk(KERN_INFO "%s: Found Broadcom BCM5201 PHYn", gm->dev->name);
  566. } else if ((gm->phy_id & MII_BCM5221_MASK) == MII_BCM5221_ID) {
  567. gm->phy_type = PHY_B5221;
  568. printk(KERN_INFO "%s: Found Broadcom BCM5221 PHYn", gm->dev->name);
  569. } else if ((gm->phy_id & MII_LXT971_MASK) == MII_LXT971_ID) {
  570. gm->phy_type = PHY_LXT971;
  571. printk(KERN_INFO "%s: Found LevelOne LX971 PHYn", gm->dev->name);
  572. } else {
  573. printk(KERN_WARNING "%s: Warning ! Unknown PHY ID 0x%08x, using generic mode...n",
  574. gm->dev->name, gm->phy_id);
  575. }
  576. return 1;
  577. fail:
  578. gm->phy_addr = -1;
  579. return 0;
  580. }
  581. /* 
  582.  * Setup the PHY autonegociation parameters
  583.  * 
  584.  * Code to force the PHY duplex mode and speed should be
  585.  * added here
  586.  */
  587. static void
  588. mii_setup_phy(struct gmac *gm)
  589. {
  590. int data;
  591. /* Stop auto-negociation */
  592. data = mii_read(gm, gm->phy_addr, MII_CR);
  593. mii_write(gm, gm->phy_addr, MII_CR, data & ~MII_CR_ASSE);
  594. /* Set advertisement to 10/100 and Half/Full duplex
  595.  * (full capabilities) */
  596. data = mii_read(gm, gm->phy_addr, MII_ANA);
  597. data |= MII_ANA_TXAM | MII_ANA_FDAM | MII_ANA_10M;
  598. mii_write(gm, gm->phy_addr, MII_ANA, data);
  599. /* Restart auto-negociation */
  600. data = mii_read(gm, gm->phy_addr, MII_CR);
  601. data |= MII_CR_ASSE;
  602. mii_write(gm, gm->phy_addr, MII_CR, data);
  603. data |= MII_CR_RAN;
  604. mii_write(gm, gm->phy_addr, MII_CR, data);
  605. }
  606. /* 
  607.  * Turn On/Off the gmac cell inside Uni-N
  608.  * 
  609.  * ToDo: Add code to support powering down of the PHY.
  610.  */
  611. static void
  612. gmac_set_power(struct gmac *gm, int power_up)
  613. {
  614. if (power_up) {
  615. pmac_call_feature(PMAC_FTR_GMAC_ENABLE, gm->of_node, 0, 1);
  616. if (gm->pci_devfn != 0xff) {
  617. u16 cmd;
  618. /*
  619.  * Make sure PCI is correctly configured
  620.  *
  621.  * We use old pci_bios versions of the function since, by
  622.  * default, gmac is not powered up, and so will be absent
  623.  * from the kernel initial PCI lookup. 
  624.  * 
  625.  * Should be replaced by 2.4 new PCI mecanisms and really
  626.  * regiser the device.
  627.  */
  628. pcibios_read_config_word(gm->pci_bus, gm->pci_devfn,
  629. PCI_COMMAND, &cmd);
  630. cmd |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
  631.      pcibios_write_config_word(gm->pci_bus, gm->pci_devfn,
  632.      PCI_COMMAND, cmd);
  633.      pcibios_write_config_byte(gm->pci_bus, gm->pci_devfn,
  634.      PCI_LATENCY_TIMER, 16);
  635.      pcibios_write_config_byte(gm->pci_bus, gm->pci_devfn,
  636.      PCI_CACHE_LINE_SIZE, 8);
  637. }
  638. } else {
  639. pmac_call_feature(PMAC_FTR_GMAC_ENABLE, gm->of_node, 0, 0);
  640. }
  641. }
  642. /*
  643.  * Makes sure the GMAC cell is powered up, and reset it
  644.  */
  645. static int
  646. gmac_powerup_and_reset(struct net_device *dev)
  647. {
  648. struct gmac *gm = (struct gmac *) dev->priv;
  649. int timeout;
  650. /* turn on GB clock */
  651. gmac_set_power(gm, 1);
  652. /* Perform a software reset */
  653. GM_OUT(GM_RESET, GM_RESET_TX | GM_RESET_RX);
  654. for (timeout = 100; timeout > 0; --timeout) {
  655. mdelay(10);
  656. if ((GM_IN(GM_RESET) & (GM_RESET_TX | GM_RESET_RX)) == 0) {
  657. /* Mask out all chips interrupts */
  658. GM_OUT(GM_IRQ_MASK, 0xffffffff);
  659. GM_OUT(GM_MAC_TX_RESET, GM_MAC_TX_RESET_NOW);
  660. GM_OUT(GM_MAC_RX_RESET, GM_MAC_RX_RESET_NOW);
  661. return 0;
  662. }
  663. }
  664. printk(KERN_ERR "%s reset failed!n", dev->name);
  665. gmac_set_power(gm, 0);
  666. gm->phy_type = 0;
  667. return -1;
  668. }
  669. /*
  670.  * Set the MAC duplex mode.
  671.  * 
  672.  * Side effect: stops Tx MAC
  673.  */
  674. static void
  675. gmac_set_duplex_mode(struct gmac *gm, int full_duplex)
  676. {
  677. /* Stop Tx MAC */
  678. GM_BIC(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_ENABLE);
  679. while(GM_IN(GM_MAC_TX_CONFIG) & GM_MAC_TX_CONF_ENABLE)
  680. ;
  681. if (full_duplex) {
  682. GM_BIS(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_IGNORE_CARRIER
  683. | GM_MAC_TX_CONF_IGNORE_COLL);
  684. GM_BIC(GM_MAC_XIF_CONFIG, GM_MAC_XIF_CONF_DISABLE_ECHO);
  685. } else {
  686. GM_BIC(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_IGNORE_CARRIER
  687. | GM_MAC_TX_CONF_IGNORE_COLL);
  688. GM_BIS(GM_MAC_XIF_CONFIG, GM_MAC_XIF_CONF_DISABLE_ECHO);
  689. }
  690. }
  691. /* Set the MAC gigabit mode. Side effect: stops Tx MAC */
  692. static void
  693. gmac_set_gigabit_mode(struct gmac *gm, int gigabit)
  694. {
  695. /* Stop Tx MAC */
  696. GM_BIC(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_ENABLE);
  697. while(GM_IN(GM_MAC_TX_CONFIG) & GM_MAC_TX_CONF_ENABLE)
  698. ;
  699. if (gigabit) {
  700. GM_BIS(GM_MAC_XIF_CONFIG, GM_MAC_XIF_CONF_GMII_MODE);
  701. } else {
  702. GM_BIC(GM_MAC_XIF_CONFIG, GM_MAC_XIF_CONF_GMII_MODE);
  703. }
  704. }
  705. /*
  706.  * Initialize a bunch of registers to put the chip into a known
  707.  * and hopefully happy state
  708.  */
  709. static void
  710. gmac_mac_init(struct gmac *gm, unsigned char *mac_addr)
  711. {
  712. int i, fifo_size;
  713. /* Set random seed to low bits of MAC address */
  714. GM_OUT(GM_MAC_RANDOM_SEED, mac_addr[5] | (mac_addr[4] << 8));
  715. /* Configure the data path mode to MII/GII */
  716. GM_OUT(GM_PCS_DATAPATH_MODE, GM_PCS_DATAPATH_MII);
  717. /* Configure XIF to MII mode. Full duplex led is set
  718.  * by Apple, so...
  719.  */
  720. GM_OUT(GM_MAC_XIF_CONFIG, GM_MAC_XIF_CONF_TX_MII_OUT_EN
  721. | GM_MAC_XIF_CONF_FULL_DPLX_LED);
  722. /* Mask out all MAC interrupts */
  723. GM_OUT(GM_MAC_TX_MASK, 0xffff);
  724. GM_OUT(GM_MAC_RX_MASK, 0xffff);
  725. GM_OUT(GM_MAC_CTRLSTAT_MASK, 0xff);
  726. /* Setup bits of MAC */
  727. GM_OUT(GM_MAC_SND_PAUSE, GM_MAC_SND_PAUSE_DEFAULT);
  728. GM_OUT(GM_MAC_CTRL_CONFIG, GM_MAC_CTRL_CONF_RCV_PAUSE_EN);
  729. /* Configure GEM DMA */
  730. GM_OUT(GM_GCONF, GM_GCONF_BURST_SZ |
  731. (31 << GM_GCONF_TXDMA_LIMIT_SHIFT) |
  732. (31 << GM_GCONF_RXDMA_LIMIT_SHIFT));
  733. GM_OUT(GM_TX_CONF,
  734. (GM_TX_CONF_FIFO_THR_DEFAULT << GM_TX_CONF_FIFO_THR_SHIFT) |
  735. NTX_CONF);
  736. /* 34 byte offset for checksum computation.  This works because ip_input() will clear out
  737.  * the skb->csum and skb->ip_summed fields and recompute the csum if IP options are
  738.  * present in the header.  34 == (ethernet header len) + sizeof(struct iphdr)
  739.   */
  740. GM_OUT(GM_RX_CONF,
  741. (RX_OFFSET << GM_RX_CONF_FBYTE_OFF_SHIFT) |
  742. (0x22 << GM_RX_CONF_CHK_START_SHIFT) |
  743. (GM_RX_CONF_DMA_THR_DEFAULT << GM_RX_CONF_DMA_THR_SHIFT) |
  744. NRX_CONF);
  745. /* Configure other bits of MAC */
  746. GM_OUT(GM_MAC_INTR_PKT_GAP0, GM_MAC_INTR_PKT_GAP0_DEFAULT);
  747. GM_OUT(GM_MAC_INTR_PKT_GAP1, GM_MAC_INTR_PKT_GAP1_DEFAULT);
  748. GM_OUT(GM_MAC_INTR_PKT_GAP2, GM_MAC_INTR_PKT_GAP2_DEFAULT);
  749. GM_OUT(GM_MAC_MIN_FRAME_SIZE, GM_MAC_MIN_FRAME_SIZE_DEFAULT);
  750. GM_OUT(GM_MAC_MAX_FRAME_SIZE, GM_MAC_MAX_FRAME_SIZE_DEFAULT);
  751. GM_OUT(GM_MAC_PREAMBLE_LEN, GM_MAC_PREAMBLE_LEN_DEFAULT);
  752. GM_OUT(GM_MAC_JAM_SIZE, GM_MAC_JAM_SIZE_DEFAULT);
  753. GM_OUT(GM_MAC_ATTEMPT_LIMIT, GM_MAC_ATTEMPT_LIMIT_DEFAULT);
  754. GM_OUT(GM_MAC_SLOT_TIME, GM_MAC_SLOT_TIME_DEFAULT);
  755. GM_OUT(GM_MAC_CONTROL_TYPE, GM_MAC_CONTROL_TYPE_DEFAULT);
  756. /* Setup MAC addresses, clear filters, clear hash table */
  757. GM_OUT(GM_MAC_ADDR_NORMAL0, (mac_addr[4] << 8) + mac_addr[5]);
  758. GM_OUT(GM_MAC_ADDR_NORMAL1, (mac_addr[2] << 8) + mac_addr[3]);
  759. GM_OUT(GM_MAC_ADDR_NORMAL2, (mac_addr[0] << 8) + mac_addr[1]);
  760. GM_OUT(GM_MAC_ADDR_ALT0, 0);
  761. GM_OUT(GM_MAC_ADDR_ALT1, 0);
  762. GM_OUT(GM_MAC_ADDR_ALT2, 0);
  763. GM_OUT(GM_MAC_ADDR_CTRL0, 0x0001);
  764. GM_OUT(GM_MAC_ADDR_CTRL1, 0xc200);
  765. GM_OUT(GM_MAC_ADDR_CTRL2, 0x0180);
  766. GM_OUT(GM_MAC_ADDR_FILTER0, 0);
  767. GM_OUT(GM_MAC_ADDR_FILTER1, 0);
  768. GM_OUT(GM_MAC_ADDR_FILTER2, 0);
  769. GM_OUT(GM_MAC_ADDR_FILTER_MASK1_2, 0);
  770. GM_OUT(GM_MAC_ADDR_FILTER_MASK0, 0);
  771. for (i = 0; i < 27; ++i)
  772. GM_OUT(GM_MAC_ADDR_FILTER_HASH0 + i, 0);
  773. /* Clear stat counters */
  774. GM_OUT(GM_MAC_COLLISION_CTR, 0);
  775. GM_OUT(GM_MAC_FIRST_COLLISION_CTR, 0);
  776. GM_OUT(GM_MAC_EXCS_COLLISION_CTR, 0);
  777. GM_OUT(GM_MAC_LATE_COLLISION_CTR, 0);
  778. GM_OUT(GM_MAC_DEFER_TIMER_COUNTER, 0);
  779. GM_OUT(GM_MAC_PEAK_ATTEMPTS, 0);
  780. GM_OUT(GM_MAC_RX_FRAME_CTR, 0);
  781. GM_OUT(GM_MAC_RX_LEN_ERR_CTR, 0);
  782. GM_OUT(GM_MAC_RX_ALIGN_ERR_CTR, 0);
  783. GM_OUT(GM_MAC_RX_CRC_ERR_CTR, 0);
  784. GM_OUT(GM_MAC_RX_CODE_VIOLATION_CTR, 0);
  785. /* default to half duplex */
  786. GM_OUT(GM_MAC_TX_CONFIG, 0);
  787. GM_OUT(GM_MAC_RX_CONFIG, 0);
  788. gmac_set_duplex_mode(gm, gm->full_duplex);
  789. /* Setup pause thresholds */
  790. fifo_size = GM_IN(GM_RX_FIFO_SIZE);
  791. GM_OUT(GM_RX_PTH,
  792. ((fifo_size - ((GM_MAC_MAX_FRAME_SIZE_ALIGN + 8) * 2 / GM_RX_PTH_UNITS))
  793. << GM_RX_PTH_OFF_SHIFT) |
  794. ((fifo_size - ((GM_MAC_MAX_FRAME_SIZE_ALIGN + 8) * 3 / GM_RX_PTH_UNITS))
  795. << GM_RX_PTH_ON_SHIFT));
  796. /* Setup interrupt blanking */
  797. if (GM_IN(GM_BIF_CFG) & GM_BIF_CFG_M66EN)
  798. GM_OUT(GM_RX_BLANK, (5 << GM_RX_BLANK_INTR_PACKETS_SHIFT)
  799. | (8 << GM_RX_BLANK_INTR_TIME_SHIFT));
  800. else
  801. GM_OUT(GM_RX_BLANK, (5 << GM_RX_BLANK_INTR_PACKETS_SHIFT)
  802. | (4 << GM_RX_BLANK_INTR_TIME_SHIFT));
  803. }
  804. /*
  805.  * Fill the Rx and Tx rings with good initial values, alloc
  806.  * fresh Rx skb's.
  807.  */
  808. static void
  809. gmac_init_rings(struct gmac *gm, int from_irq)
  810. {
  811. int i;
  812. struct sk_buff *skb;
  813. unsigned char *data;
  814. struct gmac_dma_desc *ring;
  815. int gfp_flags = GFP_KERNEL;
  816. if (from_irq || in_interrupt())
  817. gfp_flags = GFP_ATOMIC;
  818. /* init rx ring */
  819. ring = (struct gmac_dma_desc *) gm->rxring;
  820. memset(ring, 0, NRX * sizeof(struct gmac_dma_desc));
  821. for (i = 0; i < NRX; ++i, ++ring) {
  822. data = dummy_buf;
  823. gm->rx_buff[i] = skb = gmac_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags);
  824. if (skb != 0) {
  825. skb->dev = gm->dev;
  826. skb_put(skb, ETH_FRAME_LEN + RX_OFFSET);
  827. skb_reserve(skb, RX_OFFSET);
  828. data = skb->data - RX_OFFSET;
  829. }
  830. st_le32(&ring->lo_addr, virt_to_bus(data));
  831. st_le32(&ring->size, RX_SZ_OWN | ((RX_BUF_ALLOC_SIZE-RX_OFFSET) << RX_SZ_SHIFT));
  832. }
  833. /* init tx ring */
  834. ring = (struct gmac_dma_desc *) gm->txring;
  835. memset(ring, 0, NTX * sizeof(struct gmac_dma_desc));
  836. gm->next_rx = 0;
  837. gm->next_tx = 0;
  838. gm->tx_gone = 0;
  839. /* set pointers in chip */
  840. mb();
  841. GM_OUT(GM_RX_DESC_HI, 0);
  842. GM_OUT(GM_RX_DESC_LO, virt_to_bus(gm->rxring));
  843. GM_OUT(GM_TX_DESC_HI, 0);
  844. GM_OUT(GM_TX_DESC_LO, virt_to_bus(gm->txring));
  845. }
  846. /*
  847.  * Start the Tx and Rx DMA engines and enable interrupts
  848.  * 
  849.  * Note: The various mdelay(20); come from Darwin implentation. Some
  850.  * tests (doc ?) are needed to replace those with something more intrusive.
  851.  */
  852. static void
  853. gmac_start_dma(struct gmac *gm)
  854. {
  855. /* Enable Tx and Rx */
  856. GM_BIS(GM_TX_CONF, GM_TX_CONF_DMA_EN);
  857. mdelay(20);
  858. GM_BIS(GM_RX_CONF, GM_RX_CONF_DMA_EN);
  859. mdelay(20);
  860. GM_BIS(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_ENABLE);
  861. mdelay(20);
  862. GM_BIS(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_ENABLE);
  863. mdelay(20);
  864. /* Kick the receiver and enable interrupts */
  865. GM_OUT(GM_RX_KICK, NRX);
  866. GM_BIC(GM_IRQ_MASK,  GM_IRQ_TX_INT_ME |
  867. GM_IRQ_TX_ALL |
  868. GM_IRQ_RX_DONE |
  869. GM_IRQ_RX_TAG_ERR |
  870. GM_IRQ_MAC_RX |
  871. GM_IRQ_MIF |
  872. GM_IRQ_BUS_ERROR);
  873. }
  874. /*
  875.  * Stop the Tx and Rx DMA engines after disabling interrupts
  876.  * 
  877.  * Note: The various mdelay(20); come from Darwin implentation. Some
  878.  * tests (doc ?) are needed to replace those with something more intrusive.
  879.  */
  880. static void
  881. gmac_stop_dma(struct gmac *gm)
  882. {
  883. /* disable interrupts */
  884. GM_OUT(GM_IRQ_MASK, 0xffffffff);
  885. /* Enable Tx and Rx */
  886. GM_BIC(GM_TX_CONF, GM_TX_CONF_DMA_EN);
  887. mdelay(20);
  888. GM_BIC(GM_RX_CONF, GM_RX_CONF_DMA_EN);
  889. mdelay(20);
  890. GM_BIC(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_ENABLE);
  891. mdelay(20);
  892. GM_BIC(GM_MAC_TX_CONFIG, GM_MAC_TX_CONF_ENABLE);
  893. mdelay(20);
  894. }
  895. /*
  896.  * Configure promisc mode and setup multicast hash table
  897.  * filter
  898.  */
  899. static void
  900. gmac_set_multicast(struct net_device *dev)
  901. {
  902. struct gmac *gm = (struct gmac *) dev->priv;
  903. struct dev_mc_list *dmi = dev->mc_list;
  904. int i,j,k,b;
  905. u32 crc;
  906. int multicast_hash = 0;
  907. int multicast_all = 0;
  908. int promisc = 0;
  909. if (gm->sleeping)
  910. return;
  911. /* Lock out others. */
  912. netif_stop_queue(dev);
  913. if (dev->flags & IFF_PROMISC)
  914. promisc = 1;
  915. else if ((dev->flags & IFF_ALLMULTI) /* || (dev->mc_count > XXX) */) {
  916. multicast_all = 1;
  917. } else {
  918. u16 hash_table[16];
  919. for(i = 0; i < 16; i++)
  920. hash_table[i] = 0;
  921.      for (i = 0; i < dev->mc_count; i++) {
  922. crc = ether_crc_le(6, dmi->dmi_addr);
  923. j = crc >> 24; /* bit number in multicast_filter */
  924. hash_table[j >> 4] |= 1 << (15 - (j & 0xf));
  925. dmi = dmi->next;
  926.      }
  927.      for (i = 0; i < 16; i++)
  928.      GM_OUT(GM_MAC_ADDR_FILTER_HASH0 + (i*4), hash_table[i]);
  929. GM_BIS(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_HASH_ENABLE);
  930.      multicast_hash = 1;
  931. }
  932. if (promisc)
  933. GM_BIS(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_RX_ALL);
  934. else
  935. GM_BIC(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_RX_ALL);
  936. if (multicast_hash)
  937. GM_BIS(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_HASH_ENABLE);
  938. else
  939. GM_BIC(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_HASH_ENABLE);
  940. if (multicast_all)
  941. GM_BIS(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_RX_ALL_MULTI);
  942. else
  943. GM_BIC(GM_MAC_RX_CONFIG, GM_MAC_RX_CONF_RX_ALL_MULTI);
  944. /* Let us get going again. */
  945. netif_wake_queue(dev);
  946. }
  947. /*
  948.  * Open the interface
  949.  */
  950. static int
  951. gmac_open(struct net_device *dev)
  952. {
  953. int ret;
  954. struct gmac *gm = (struct gmac *) dev->priv;
  955. /* Power up and reset chip */
  956. if (gmac_powerup_and_reset(dev))
  957. return -EIO;
  958. /* Get our interrupt */
  959. ret = request_irq(dev->irq, gmac_interrupt, 0, dev->name, dev);
  960. if (ret) {
  961. printk(KERN_ERR "%s can't get irq %dn", dev->name, dev->irq);
  962. return ret;
  963. }
  964. gm->full_duplex = 0;
  965. gm->phy_status = 0;
  966. /* Find a PHY */
  967. if (!mii_lookup_and_reset(gm))
  968. printk(KERN_WARNING "%s WARNING ! Can't find PHYn", dev->name);
  969. /* Configure the PHY */
  970. mii_setup_phy(gm);
  971. /* Initialize the descriptor rings */
  972. gmac_init_rings(gm, 0);
  973. /* Initialize the MAC */
  974. gmac_mac_init(gm, dev->dev_addr);
  975. /* Initialize the multicast tables & promisc mode if any */
  976. gmac_set_multicast(dev);
  977. /* Initialize the carrier status */
  978. netif_carrier_off(dev);
  979. /*
  980.  * Check out PHY status and start auto-poll
  981.  * 
  982.  * Note: do this before enabling interrutps
  983.  */
  984. mii_interrupt(gm);
  985. /* Start the chip */
  986. gmac_start_dma(gm);
  987. gm->opened = 1;
  988. return 0;
  989. }
  990. /* 
  991.  * Close the interface
  992.  */
  993. static int
  994. gmac_close(struct net_device *dev)
  995. {
  996. struct gmac *gm = (struct gmac *) dev->priv;
  997. int i;
  998. gm->opened = 0;
  999. /* Stop chip and interrupts */
  1000. gmac_stop_dma(gm);
  1001. /* Stop polling PHY */
  1002. mii_poll_stop(gm);
  1003. /* Free interrupt */
  1004. free_irq(dev->irq, dev);
  1005. /* Shut down chip */
  1006. gmac_set_power(gm, 0);
  1007. gm->phy_type = 0;
  1008. /* Empty rings of any remaining gremlins */
  1009. for (i = 0; i < NRX; ++i) {
  1010. if (gm->rx_buff[i] != 0) {
  1011. dev_kfree_skb(gm->rx_buff[i]);
  1012. gm->rx_buff[i] = 0;
  1013. }
  1014. }
  1015. for (i = 0; i < NTX; ++i) {
  1016. if (gm->tx_buff[i] != 0) {
  1017. dev_kfree_skb(gm->tx_buff[i]);
  1018. gm->tx_buff[i] = 0;
  1019. }
  1020. }
  1021. return 0;
  1022. }
  1023. #ifdef CONFIG_PMAC_PBOOK
  1024. int
  1025. gmac_sleep_notify(struct pmu_sleep_notifier *self, int when)
  1026. {
  1027. struct gmac *gm;
  1028. /* XXX should handle more than one */
  1029. if (gmacs == NULL)
  1030. return PBOOK_SLEEP_OK;
  1031. gm = (struct gmac *) gmacs->priv;
  1032. if (!gm->opened)
  1033. return PBOOK_SLEEP_OK;
  1034. switch (when) {
  1035. case PBOOK_SLEEP_REQUEST:
  1036. break;
  1037. case PBOOK_SLEEP_REJECT:
  1038. break;
  1039. case PBOOK_SLEEP_NOW:
  1040. gmac_suspend(gm);
  1041. break;
  1042. case PBOOK_WAKE:
  1043. gmac_resume(gm);
  1044. break;
  1045. }
  1046. return PBOOK_SLEEP_OK;
  1047. }
  1048. #endif /* CONFIG_PMAC_PBOOK */
  1049. /*
  1050.  * Handle a transmit timeout
  1051.  */
  1052. static void
  1053. gmac_tx_timeout(struct net_device *dev)
  1054. {
  1055. struct gmac *gm = (struct gmac *) dev->priv;
  1056. int i, timeout;
  1057. unsigned long flags;
  1058. if (gm->sleeping)
  1059. return;
  1060. printk (KERN_ERR "%s: transmit timed out, resettingn", dev->name);
  1061. spin_lock_irqsave(&gm->lock, flags);
  1062. /* Stop chip */
  1063. gmac_stop_dma(gm);
  1064. /* Empty Tx ring of any remaining gremlins */
  1065. gmac_tx_cleanup(dev, 1);
  1066. /* Empty Rx ring of any remaining gremlins */
  1067. for (i = 0; i < NRX; ++i) {
  1068. if (gm->rx_buff[i] != 0) {
  1069. dev_kfree_skb_irq(gm->rx_buff[i]);
  1070. gm->rx_buff[i] = 0;
  1071. }
  1072. }
  1073. /* Perform a software reset */
  1074. GM_OUT(GM_RESET, GM_RESET_TX | GM_RESET_RX);
  1075. for (timeout = 100; timeout > 0; --timeout) {
  1076. mdelay(10);
  1077. if ((GM_IN(GM_RESET) & (GM_RESET_TX | GM_RESET_RX)) == 0) {
  1078. /* Mask out all chips interrupts */
  1079. GM_OUT(GM_IRQ_MASK, 0xffffffff);
  1080. GM_OUT(GM_MAC_TX_RESET, GM_MAC_TX_RESET_NOW);
  1081. GM_OUT(GM_MAC_RX_RESET, GM_MAC_RX_RESET_NOW);
  1082. break;
  1083. }
  1084. }
  1085. if (!timeout)
  1086. printk(KERN_ERR "%s reset chip failed !n", dev->name);
  1087. /* Create fresh rings */
  1088. gmac_init_rings(gm, 1);
  1089. /* re-initialize the MAC */
  1090. gmac_mac_init(gm, dev->dev_addr);
  1091. /* re-initialize the multicast tables & promisc mode if any */
  1092. gmac_set_multicast(dev);
  1093. /* Restart PHY auto-poll */
  1094. mii_interrupt(gm);
  1095. /* Restart chip */
  1096. gmac_start_dma(gm);
  1097. spin_unlock_irqrestore(&gm->lock, flags);
  1098. netif_wake_queue(dev);
  1099. }
  1100. /*
  1101.  * Add a packet to the transmit ring
  1102.  */
  1103. static int
  1104. gmac_xmit_start(struct sk_buff *skb, struct net_device *dev)
  1105. {
  1106. struct gmac *gm = (struct gmac *) dev->priv;
  1107. volatile struct gmac_dma_desc *dp;
  1108. unsigned long flags;
  1109. int i;
  1110. if (gm->sleeping)
  1111. return 1;
  1112. spin_lock_irqsave(&gm->lock, flags);
  1113. i = gm->next_tx;
  1114. if (gm->tx_buff[i] != 0) {
  1115. /* 
  1116.  * Buffer is full, can't send this packet at the moment
  1117.  * 
  1118.  * Can this ever happen in 2.4 ?
  1119.  */
  1120. netif_stop_queue(dev);
  1121. spin_unlock_irqrestore(&gm->lock, flags);
  1122. return 1;
  1123. }
  1124. gm->next_tx = (i + 1) & (NTX - 1);
  1125. gm->tx_buff[i] = skb;
  1126. dp = &gm->txring[i];
  1127. /* FIXME: Interrupt on all packet for now, change this to every N packet,
  1128.  * with N to be adjusted
  1129.  */
  1130. dp->flags = TX_FL_INTERRUPT;
  1131. dp->hi_addr = 0;
  1132. st_le32(&dp->lo_addr, virt_to_bus(skb->data));
  1133. mb();
  1134. st_le32(&dp->size, TX_SZ_SOP | TX_SZ_EOP | skb->len);
  1135. mb();
  1136. GM_OUT(GM_TX_KICK, gm->next_tx);
  1137. if (gm->tx_buff[gm->next_tx] != 0)
  1138. netif_stop_queue(dev);
  1139. spin_unlock_irqrestore(&gm->lock, flags);
  1140. dev->trans_start = jiffies;
  1141. return 0;
  1142. }
  1143. /*
  1144.  * Handle servicing of the transmit ring by deallocating used
  1145.  * Tx packets and restoring flow control when necessary
  1146.  */
  1147. static void
  1148. gmac_tx_cleanup(struct net_device *dev, int force_cleanup)
  1149. {
  1150. struct gmac *gm = (struct gmac *) dev->priv;
  1151. volatile struct gmac_dma_desc *dp;
  1152. struct sk_buff *skb;
  1153. int gone, i;
  1154. i = gm->tx_gone;
  1155. /* Note: If i==gone, we empty the entire ring. This works because
  1156.  * if the ring was empty, we wouldn't have received the interrupt
  1157.  */
  1158. do {
  1159. gone = GM_IN(GM_TX_COMP);
  1160. skb = gm->tx_buff[i];
  1161. if (skb == NULL)
  1162. break;
  1163. dp = &gm->txring[i];
  1164. if (force_cleanup)
  1165. ++gm->stats.tx_errors;
  1166. else {
  1167. ++gm->stats.tx_packets;
  1168. gm->stats.tx_bytes += skb->len;
  1169. }
  1170. gm->tx_buff[i] = NULL;
  1171. dev_kfree_skb_irq(skb);
  1172. if (++i >= NTX)
  1173. i = 0;
  1174. } while (force_cleanup || i != gone);
  1175. gm->tx_gone = i;
  1176. if (!force_cleanup && netif_queue_stopped(dev) &&
  1177.     (gm->tx_buff[gm->next_tx] == 0))
  1178. netif_wake_queue(dev);
  1179. }
  1180. /*
  1181.  * Handle servicing of receive ring
  1182.  */
  1183. static void
  1184. gmac_receive(struct net_device *dev)
  1185. {
  1186. struct gmac *gm = (struct gmac *) dev->priv;
  1187. int i = gm->next_rx;
  1188. volatile struct gmac_dma_desc *dp;
  1189. struct sk_buff *skb, *new_skb;
  1190. int len, flags, drop, last;
  1191. unsigned char *data;
  1192. u16 csum;
  1193. last = -1;
  1194. for (;;) {
  1195. dp = &gm->rxring[i];
  1196. /* Buffer not yet filled, no more Rx buffers to handle */
  1197. if (ld_le32(&dp->size) & RX_SZ_OWN)
  1198. break;
  1199. /* Get packet length, flags, etc... */
  1200. len = (ld_le32(&dp->size) >> 16) & 0x7fff;
  1201. flags = ld_le32(&dp->flags);
  1202. skb = gm->rx_buff[i];
  1203. drop = 0;
  1204. new_skb = NULL;
  1205. csum = ld_le32(&dp->size) & RX_SZ_CKSUM_MASK;
  1206. /* Handle errors */
  1207. if ((len < ETH_ZLEN)||(flags & RX_FL_CRC_ERROR)||(!skb)) {
  1208. ++gm->stats.rx_errors;
  1209. if (len < ETH_ZLEN)
  1210. ++gm->stats.rx_length_errors;
  1211. if (flags & RX_FL_CRC_ERROR)
  1212. ++gm->stats.rx_crc_errors;
  1213. if (!skb) {
  1214. ++gm->stats.rx_dropped;
  1215. skb = gmac_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
  1216. if (skb) {
  1217. gm->rx_buff[i] = skb;
  1218.      skb->dev = dev;
  1219.      skb_put(skb, ETH_FRAME_LEN + RX_OFFSET);
  1220.      skb_reserve(skb, RX_OFFSET);
  1221. }
  1222. }
  1223. drop = 1;
  1224. } else {
  1225. /* Large packet, alloc a new skb for the ring */
  1226. if (len > RX_COPY_THRESHOLD) {
  1227.     new_skb = gmac_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
  1228.     if(!new_skb) {
  1229.      printk(KERN_INFO "%s: Out of SKBs in Rx, packet dropped !n",
  1230.      dev->name);
  1231.      drop = 1;
  1232.      ++gm->stats.rx_dropped;
  1233.      goto finish;
  1234.     }
  1235.     gm->rx_buff[i] = new_skb;
  1236.     new_skb->dev = dev;
  1237.     skb_put(new_skb, ETH_FRAME_LEN + RX_OFFSET);
  1238.     skb_reserve(new_skb, RX_OFFSET);
  1239.     skb_trim(skb, len);
  1240. } else {
  1241.     /* Small packet, copy it to a new small skb */
  1242.     struct sk_buff *copy_skb = dev_alloc_skb(len + RX_OFFSET);
  1243.     if(!copy_skb) {
  1244. printk(KERN_INFO "%s: Out of SKBs in Rx, packet dropped !n",
  1245. dev->name);
  1246. drop = 1;
  1247. ++gm->stats.rx_dropped;
  1248.      goto finish;
  1249.     }
  1250.     copy_skb->dev = dev;
  1251.     skb_reserve(copy_skb, RX_OFFSET);
  1252.     skb_put(copy_skb, len);
  1253.     memcpy(copy_skb->data, skb->data, len);
  1254.     new_skb = skb;
  1255.     skb = copy_skb;
  1256. }
  1257. }
  1258. finish:
  1259. /* Need to drop packet ? */
  1260. if (drop) {
  1261. new_skb = skb;
  1262. skb = NULL;
  1263. }
  1264. /* Put back ring entry */
  1265. data = new_skb ? (new_skb->data - RX_OFFSET) : dummy_buf;
  1266. dp->hi_addr = 0;
  1267. st_le32(&dp->lo_addr, virt_to_bus(data));
  1268. mb();
  1269. st_le32(&dp->size, RX_SZ_OWN | ((RX_BUF_ALLOC_SIZE-RX_OFFSET) << RX_SZ_SHIFT));
  1270. /* Got Rx packet ? */
  1271. if (skb) {
  1272. /* Yes, baby, keep that hot ;) */
  1273. if(!(csum ^ 0xffff))
  1274. skb->ip_summed = CHECKSUM_UNNECESSARY;
  1275. else
  1276. skb->ip_summed = CHECKSUM_NONE;
  1277. skb->ip_summed = CHECKSUM_NONE;
  1278. skb->protocol = eth_type_trans(skb, dev);
  1279. gm->stats.rx_bytes += skb->len;
  1280. netif_rx(skb);
  1281. dev->last_rx = jiffies;
  1282. ++gm->stats.rx_packets;
  1283. }
  1284. last = i;
  1285. if (++i >= NRX)
  1286. i = 0;
  1287. }
  1288. gm->next_rx = i;
  1289. if (last >= 0) {
  1290. mb();
  1291. GM_OUT(GM_RX_KICK, last & 0xfffffffc);
  1292. }
  1293. }
  1294. /*
  1295.  * Service chip interrupts
  1296.  */
  1297. static void
  1298. gmac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  1299. {
  1300. struct net_device *dev = (struct net_device *) dev_id;
  1301. struct gmac *gm = (struct gmac *) dev->priv;
  1302. unsigned int status;
  1303. status = GM_IN(GM_IRQ_STATUS);
  1304. if (status & (GM_IRQ_BUS_ERROR | GM_IRQ_MIF))
  1305. GM_OUT(GM_IRQ_ACK, status & (GM_IRQ_BUS_ERROR | GM_IRQ_MIF));
  1306. if (status & (GM_IRQ_RX_TAG_ERR | GM_IRQ_BUS_ERROR)) {
  1307. printk(KERN_ERR "%s: IRQ Error status: 0x%08xn",
  1308. dev->name, status);
  1309. }
  1310. if (status & GM_IRQ_MIF) {
  1311. spin_lock(&gm->lock);
  1312. mii_interrupt(gm);
  1313. spin_unlock(&gm->lock);
  1314. }
  1315. if (status & GM_IRQ_RX_DONE) {
  1316. spin_lock(&gm->lock);
  1317. gmac_receive(dev);
  1318. spin_unlock(&gm->lock);
  1319. }
  1320. if (status & (GM_IRQ_TX_INT_ME | GM_IRQ_TX_ALL)) {
  1321. spin_lock(&gm->lock);
  1322. gmac_tx_cleanup(dev, 0);
  1323. spin_unlock(&gm->lock);
  1324. }
  1325. }
  1326. /*
  1327.  * Retreive some error stats from chip and return them
  1328.  * to above layer
  1329.  */
  1330. static struct net_device_stats *
  1331. gmac_stats(struct net_device *dev)
  1332. {
  1333. struct gmac *gm = (struct gmac *) dev->priv;
  1334. struct net_device_stats *stats = &gm->stats;
  1335. if (gm && gm->opened && !gm->sleeping) {
  1336. stats->rx_crc_errors += GM_IN(GM_MAC_RX_CRC_ERR_CTR);
  1337. GM_OUT(GM_MAC_RX_CRC_ERR_CTR, 0);
  1338. stats->rx_frame_errors += GM_IN(GM_MAC_RX_ALIGN_ERR_CTR);
  1339. GM_OUT(GM_MAC_RX_ALIGN_ERR_CTR, 0);
  1340. stats->rx_length_errors += GM_IN(GM_MAC_RX_LEN_ERR_CTR);
  1341. GM_OUT(GM_MAC_RX_LEN_ERR_CTR, 0);
  1342. stats->tx_aborted_errors += GM_IN(GM_MAC_EXCS_COLLISION_CTR);
  1343. stats->collisions +=
  1344. (GM_IN(GM_MAC_EXCS_COLLISION_CTR) +
  1345.  GM_IN(GM_MAC_LATE_COLLISION_CTR));
  1346. GM_OUT(GM_MAC_EXCS_COLLISION_CTR, 0);
  1347. GM_OUT(GM_MAC_LATE_COLLISION_CTR, 0);
  1348. }
  1349. return stats;
  1350. }
  1351. static int __init
  1352. gmac_probe(void)
  1353. {
  1354. struct device_node *gmac;
  1355. /* We bump use count during probe since get_free_page can sleep
  1356.  * which can be a race condition if module is unloaded at this
  1357.  * point.
  1358.  */
  1359. MOD_INC_USE_COUNT;
  1360. /*
  1361.  * We don't use PCI scanning on pmac since the GMAC cell is disabled
  1362.  * by default, and thus absent from kernel original PCI probing.
  1363.  */
  1364. for (gmac = find_compatible_devices("network", "gmac"); gmac != 0;
  1365.      gmac = gmac->next)
  1366. gmac_probe1(gmac);
  1367. #ifdef CONFIG_PMAC_PBOOK
  1368. if (gmacs)
  1369. pmu_register_sleep_notifier(&gmac_sleep_notifier);
  1370. #endif
  1371. MOD_DEC_USE_COUNT;
  1372. return gmacs? 0: -ENODEV;
  1373. }
  1374. static void
  1375. gmac_probe1(struct device_node *gmac)
  1376. {
  1377. struct gmac *gm;
  1378. unsigned long tx_descpage, rx_descpage;
  1379. unsigned char *addr;
  1380. struct net_device *dev;
  1381. int i;
  1382. if (gmac->n_addrs < 1 || gmac->n_intrs < 1) {
  1383. printk(KERN_ERR "can't use GMAC %s: %d addrs and %d intrsn",
  1384.        gmac->full_name, gmac->n_addrs, gmac->n_intrs);
  1385. return;
  1386. }
  1387. addr = get_property(gmac, "local-mac-address", NULL);
  1388. if (addr == NULL) {
  1389. printk(KERN_ERR "Can't get mac-address for GMAC %sn",
  1390.        gmac->full_name);
  1391. return;
  1392. }
  1393. if (dummy_buf == NULL) {
  1394. dummy_buf = kmalloc(DUMMY_BUF_LEN, GFP_KERNEL);
  1395. if (dummy_buf == NULL) {
  1396. printk(KERN_ERR "GMAC: failed to allocated dummy buffern");
  1397. return;
  1398. }
  1399. }
  1400. tx_descpage = get_free_page(GFP_KERNEL);
  1401. if (tx_descpage == 0) {
  1402. printk(KERN_ERR "GMAC: can't get a page for tx descriptorsn");
  1403. return;
  1404. }
  1405. rx_descpage = get_free_page(GFP_KERNEL);
  1406. if (rx_descpage == 0) {
  1407. printk(KERN_ERR "GMAC: can't get a page for rx descriptorsn");
  1408. goto out_txdesc;
  1409. }
  1410. dev = init_etherdev(NULL, sizeof(struct gmac));
  1411. if (!dev) {
  1412. printk(KERN_ERR "GMAC: init_etherdev failed, out of memoryn");
  1413. goto out_rxdesc;
  1414. }
  1415. SET_MODULE_OWNER(dev);
  1416. gm = dev->priv;
  1417. gm->of_node = gmac;
  1418. if (!request_OF_resource(gmac, 0, " (gmac)")) {
  1419. printk(KERN_ERR "GMAC: can't request IO resource !n");
  1420. goto out_unreg;
  1421. }
  1422. dev->base_addr = gmac->addrs[0].address;
  1423. gm->regs = (volatile unsigned int *)
  1424. ioremap(gmac->addrs[0].address, 0x10000);
  1425. if (!gm->regs) {
  1426. printk(KERN_ERR "GMAC: unable to map I/O registersn");
  1427. goto out_unreg;
  1428. }
  1429. dev->irq = gmac->intrs[0].line;
  1430. gm->dev = dev;
  1431. spin_lock_init(&gm->lock);
  1432. if (pci_device_from_OF_node(gmac, &gm->pci_bus, &gm->pci_devfn)) {
  1433. gm->pci_bus = gm->pci_devfn = 0xff;
  1434. printk(KERN_ERR "Can't locate GMAC PCI entryn");
  1435. }
  1436. printk(KERN_INFO "%s: GMAC at", dev->name);
  1437. for (i = 0; i < 6; ++i) {
  1438. dev->dev_addr[i] = addr[i];
  1439. printk("%c%.2x", (i? ':': ' '), addr[i]);
  1440. }
  1441. printk(", driver " GMAC_VERSION "n");
  1442. gm->tx_desc_page = tx_descpage;
  1443. gm->rx_desc_page = rx_descpage;
  1444. gm->rxring = (volatile struct gmac_dma_desc *) rx_descpage;
  1445. gm->txring = (volatile struct gmac_dma_desc *) tx_descpage;
  1446. gm->phy_addr = 0;
  1447. gm->opened = 0;
  1448. gm->sleeping = 0;
  1449. dev->open = gmac_open;
  1450. dev->stop = gmac_close;
  1451. dev->hard_start_xmit = gmac_xmit_start;
  1452. dev->get_stats = gmac_stats;
  1453. dev->set_multicast_list = &gmac_set_multicast;
  1454. dev->tx_timeout = &gmac_tx_timeout;
  1455. dev->watchdog_timeo = 5*HZ;
  1456. ether_setup(dev);
  1457. gm->next_gmac = gmacs;
  1458. gmacs = dev;
  1459. return;
  1460. out_unreg:
  1461. unregister_netdev(dev);
  1462. if (gm->of_node)
  1463. release_OF_resource(gm->of_node, 0);
  1464. kfree(dev);
  1465. out_rxdesc:
  1466. free_page(rx_descpage);
  1467. out_txdesc:
  1468. free_page(tx_descpage);
  1469. }
  1470. MODULE_AUTHOR("Paul Mackerras/Ben Herrenschmidt");
  1471. MODULE_DESCRIPTION("PowerMac GMAC driver.");
  1472. MODULE_LICENSE("GPL");
  1473. EXPORT_NO_SYMBOLS;
  1474. static void __exit gmac_cleanup_module(void)
  1475. {
  1476. struct gmac *gm;
  1477. struct net_device *dev;
  1478. #ifdef CONFIG_PMAC_PBOOK
  1479. if (gmacs)
  1480. pmu_unregister_sleep_notifier(&gmac_sleep_notifier);
  1481. #endif
  1482. while ((dev = gmacs) != NULL) {
  1483. gm = (struct gmac *) dev->priv;
  1484. unregister_netdev(dev);
  1485. iounmap((void *) gm->regs);
  1486. free_page(gm->tx_desc_page);
  1487. free_page(gm->rx_desc_page);
  1488. release_OF_resource(gm->of_node, 0);
  1489. gmacs = gm->next_gmac;
  1490. kfree(dev);
  1491. }
  1492. if (dummy_buf != NULL) {
  1493. kfree(dummy_buf);
  1494. dummy_buf = NULL;
  1495. }
  1496. }
  1497. module_init(gmac_probe);
  1498. module_exit(gmac_cleanup_module);