gmac.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:44k
源码类别:

嵌入式Linux

开发平台:

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