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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: %F% %I% %G% %U% %#%
  3.  */
  4. /*
  5.  * Fast Ethernet Controller (FEC) driver for Motorola MPC8xx.
  6.  * Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
  7.  *
  8.  * This version of the driver is specific to the FADS implementation,
  9.  * since the board contains control registers external to the processor
  10.  * for the control of the LevelOne LXT970 transceiver.  The MPC860T manual
  11.  * describes connections using the internal parallel port I/O, which
  12.  * is basically all of Port D.
  13.  *
  14.  * Includes support for the following PHYs: QS6612, LXT970, LXT971/2.
  15.  *
  16.  * Right now, I am very wasteful with the buffers.  I allocate memory
  17.  * pages and then divide them into 2K frame buffers.  This way I know I
  18.  * have buffers large enough to hold one frame within one buffer descriptor.
  19.  * Once I get this working, I will use 64 or 128 byte CPM buffers, which
  20.  * will be much more memory efficient and will easily handle lots of
  21.  * small packets.
  22.  *
  23.  * Much better multiple PHY support by Magnus Damm.
  24.  * Copyright (c) 2000 Ericsson Radio Systems AB.
  25.  *
  26.  * Make use of MII for PHY control configurable.
  27.  * Some fixes.
  28.  * Copyright (c) 2000 Wolfgang Denk, DENX Software Engineering.
  29.  */
  30. /* List of PHYs we wish to support.
  31. */
  32. #undef CONFIG_FEC_LXT970
  33. #define CONFIG_FEC_LXT971
  34. #undef CONFIG_FEC_QS6612
  35. #undef CONFIG_FEC_DP83843
  36. #undef CONFIG_FEC_DP83846A
  37. #include <linux/config.h>
  38. #include <linux/kernel.h>
  39. #include <linux/sched.h>
  40. #include <linux/string.h>
  41. #include <linux/ptrace.h>
  42. #include <linux/errno.h>
  43. #include <linux/ioport.h>
  44. #include <linux/slab.h>
  45. #include <linux/interrupt.h>
  46. #include <linux/pci.h>
  47. #include <linux/init.h>
  48. #include <linux/delay.h>
  49. #include <linux/netdevice.h>
  50. #include <linux/etherdevice.h>
  51. #include <linux/skbuff.h>
  52. #include <linux/spinlock.h>
  53. #include <linux/mii.h>
  54. #include <linux/ethtool.h>
  55. #include <asm/8xx_immap.h>
  56. #include <asm/pgtable.h>
  57. #include <asm/mpc8xx.h>
  58. #include <asm/irq.h>
  59. #include <asm/bitops.h>
  60. #include <asm/uaccess.h>
  61. #include <asm/commproc.h>
  62. #ifdef CONFIG_USE_MDIO
  63. /* Forward declarations of some structures to support different PHYs
  64. */
  65. typedef struct {
  66. uint mii_data;
  67. void (*funct)(uint mii_reg, struct net_device *dev, uint data);
  68. } phy_cmd_t;
  69. typedef struct {
  70. uint id;
  71. char *name;
  72. const phy_cmd_t *config;
  73. const phy_cmd_t *startup;
  74. const phy_cmd_t *ack_int;
  75. const phy_cmd_t *shutdown;
  76. } phy_info_t;
  77. #endif /* CONFIG_USE_MDIO */
  78. /* The number of Tx and Rx buffers.  These are allocated from the page
  79.  * pool.  The code may assume these are power of two, so it is best
  80.  * to keep them that size.
  81.  * We don't need to allocate pages for the transmitter.  We just use
  82.  * the skbuffer directly.
  83.  */
  84. #ifdef CONFIG_ENET_BIG_BUFFERS
  85. #define FEC_ENET_RX_PAGES 16
  86. #define FEC_ENET_RX_FRSIZE 2048
  87. #define FEC_ENET_RX_FRPPG (PAGE_SIZE / FEC_ENET_RX_FRSIZE)
  88. #define RX_RING_SIZE (FEC_ENET_RX_FRPPG * FEC_ENET_RX_PAGES)
  89. #define TX_RING_SIZE 16 /* Must be power of two */
  90. #define TX_RING_MOD_MASK 15 /*   for this to work */
  91. #else
  92. #define FEC_ENET_RX_PAGES 4
  93. #define FEC_ENET_RX_FRSIZE 2048
  94. #define FEC_ENET_RX_FRPPG (PAGE_SIZE / FEC_ENET_RX_FRSIZE)
  95. #define RX_RING_SIZE (FEC_ENET_RX_FRPPG * FEC_ENET_RX_PAGES)
  96. #define TX_RING_SIZE 8 /* Must be power of two */
  97. #define TX_RING_MOD_MASK 7 /*   for this to work */
  98. #endif
  99. /* Interrupt events/masks.
  100. */
  101. #define FEC_ENET_HBERR ((uint)0x80000000) /* Heartbeat error */
  102. #define FEC_ENET_BABR ((uint)0x40000000) /* Babbling receiver */
  103. #define FEC_ENET_BABT ((uint)0x20000000) /* Babbling transmitter */
  104. #define FEC_ENET_GRA ((uint)0x10000000) /* Graceful stop complete */
  105. #define FEC_ENET_TXF ((uint)0x08000000) /* Full frame transmitted */
  106. #define FEC_ENET_TXB ((uint)0x04000000) /* A buffer was transmitted */
  107. #define FEC_ENET_RXF ((uint)0x02000000) /* Full frame received */
  108. #define FEC_ENET_RXB ((uint)0x01000000) /* A buffer was received */
  109. #define FEC_ENET_MII ((uint)0x00800000) /* MII interrupt */
  110. #define FEC_ENET_EBERR ((uint)0x00400000) /* SDMA bus error */
  111. /*
  112. */
  113. #define FEC_ECNTRL_PINMUX 0x00000004
  114. #define FEC_ECNTRL_ETHER_EN 0x00000002
  115. #define FEC_ECNTRL_RESET 0x00000001
  116. #define FEC_RCNTRL_BC_REJ 0x00000010
  117. #define FEC_RCNTRL_PROM 0x00000008
  118. #define FEC_RCNTRL_MII_MODE 0x00000004
  119. #define FEC_RCNTRL_DRT 0x00000002
  120. #define FEC_RCNTRL_LOOP 0x00000001
  121. #define FEC_TCNTRL_FDEN 0x00000004
  122. #define FEC_TCNTRL_HBC 0x00000002
  123. #define FEC_TCNTRL_GTS 0x00000001
  124. /* Delay to wait for FEC reset command to complete (in us)
  125. */
  126. #define FEC_RESET_DELAY 50
  127. /* The FEC stores dest/src/type, data, and checksum for receive packets.
  128.  */
  129. #define PKT_MAXBUF_SIZE 1518
  130. #define PKT_MINBUF_SIZE 64
  131. #define PKT_MAXBLR_SIZE 1520
  132. /* The FEC buffer descriptors track the ring buffers.  The rx_bd_base and
  133.  * tx_bd_base always point to the base of the buffer descriptors.  The
  134.  * cur_rx and cur_tx point to the currently available buffer.
  135.  * The dirty_tx tracks the current buffer that is being sent by the
  136.  * controller.  The cur_tx and dirty_tx are equal under both completely
  137.  * empty and completely full conditions.  The empty/ready indicator in
  138.  * the buffer descriptor determines the actual condition.
  139.  */
  140. struct fec_enet_private {
  141. /* The saved address of a sent-in-place packet/buffer, for skfree(). */
  142. struct sk_buff* tx_skbuff[TX_RING_SIZE];
  143. ushort skb_cur;
  144. ushort skb_dirty;
  145. /* CPM dual port RAM relative addresses.
  146. */
  147. cbd_t *rx_bd_base; /* Address of Rx and Tx buffers. */
  148. cbd_t *tx_bd_base;
  149. cbd_t *cur_rx, *cur_tx; /* The next free ring entry */
  150. cbd_t *dirty_tx; /* The ring entries to be free()ed. */
  151. scc_t *sccp;
  152. struct net_device_stats stats;
  153. uint tx_full;
  154. spinlock_t lock;
  155. #ifdef CONFIG_USE_MDIO
  156. uint phy_id;
  157. uint phy_id_done;
  158. uint phy_status;
  159. uint phy_speed;
  160. phy_info_t *phy;
  161. struct tq_struct phy_task;
  162. uint sequence_done;
  163. uint phy_addr;
  164. struct timer_list phy_timer_list;
  165. u16 old_status;
  166. #endif /* CONFIG_USE_MDIO */
  167. int link;
  168. int old_link;
  169. int full_duplex;
  170. };
  171. static int fec_enet_open(struct net_device *dev);
  172. static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev);
  173. #ifdef CONFIG_USE_MDIO
  174. static void fec_enet_mii(struct net_device *dev);
  175. #endif /* CONFIG_USE_MDIO */
  176. static void fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs);
  177. static void  fec_enet_tx(struct net_device *dev);
  178. static void  fec_enet_rx(struct net_device *dev);
  179. static int fec_enet_close(struct net_device *dev);
  180. static struct net_device_stats *fec_enet_get_stats(struct net_device *dev);
  181. static void set_multicast_list(struct net_device *dev);
  182. static void fec_restart(struct net_device *dev, int duplex);
  183. static void fec_stop(struct net_device *dev);
  184. static ushort my_enet_addr[3];
  185. #ifdef CONFIG_USE_MDIO
  186. static int fec_enet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
  187. static int netdev_ethtool_ioctl(struct net_device *dev, void *useraddr);
  188. static void mdio_callback(uint regval, struct net_device *dev, uint data);
  189. static int mdio_read(struct net_device *dev, int phy_id, int location);
  190. #if defined(CONFIG_FEC_DP83846A)
  191. static void mdio_timer_callback(unsigned long data);
  192. #endif /* CONFIG_FEC_DP83846A */
  193. /* MII processing.  We keep this as simple as possible.  Requests are
  194.  * placed on the list (if there is room).  When the request is finished
  195.  * by the MII, an optional function may be called.
  196.  */
  197. typedef struct mii_list {
  198. uint mii_regval;
  199. void (*mii_func)(uint val, struct net_device *dev, uint data);
  200. struct mii_list *mii_next;
  201. uint mii_data;
  202. } mii_list_t;
  203. #define NMII 20
  204. mii_list_t mii_cmds[NMII];
  205. mii_list_t *mii_free;
  206. mii_list_t *mii_head;
  207. mii_list_t *mii_tail;
  208. typedef struct mdio_read_data {
  209. u16 regval;
  210. struct task_struct *sleeping_task;
  211. } mdio_read_data_t;
  212. static int mii_queue(struct net_device *dev, int request,
  213. void (*func)(uint, struct net_device *, uint), uint data);
  214. static void mii_queue_relink(uint mii_reg, struct net_device *dev, uint data);
  215. /* Make MII read/write commands for the FEC.
  216. */
  217. #define mk_mii_read(REG) (0x60020000 | ((REG & 0x1f) << 18))
  218. #define mk_mii_write(REG, VAL) (0x50020000 | ((REG & 0x1f) << 18) | 
  219. (VAL & 0xffff))
  220. #define mk_mii_end 0
  221. #endif /* CONFIG_USE_MDIO */
  222. /* Transmitter timeout.
  223. */
  224. #define TX_TIMEOUT (2*HZ)
  225. #ifdef CONFIG_USE_MDIO
  226. /* Register definitions for the PHY.
  227. */
  228. #define MII_REG_CR          0  /* Control Register                         */
  229. #define MII_REG_SR          1  /* Status Register                          */
  230. #define MII_REG_PHYIR1      2  /* PHY Identification Register 1            */
  231. #define MII_REG_PHYIR2      3  /* PHY Identification Register 2            */
  232. #define MII_REG_ANAR        4  /* A-N Advertisement Register               */
  233. #define MII_REG_ANLPAR      5  /* A-N Link Partner Ability Register        */
  234. #define MII_REG_ANER        6  /* A-N Expansion Register                   */
  235. #define MII_REG_ANNPTR      7  /* A-N Next Page Transmit Register          */
  236. #define MII_REG_ANLPRNPR    8  /* A-N Link Partner Received Next Page Reg. */
  237. /* values for phy_status */
  238. #define PHY_CONF_ANE 0x0001  /* 1 auto-negotiation enabled */
  239. #define PHY_CONF_LOOP 0x0002  /* 1 loopback mode enabled */
  240. #define PHY_CONF_SPMASK 0x00f0  /* mask for speed */
  241. #define PHY_CONF_10HDX 0x0010  /* 10 Mbit half duplex supported */
  242. #define PHY_CONF_10FDX 0x0020  /* 10 Mbit full duplex supported */
  243. #define PHY_CONF_100HDX 0x0040  /* 100 Mbit half duplex supported */
  244. #define PHY_CONF_100FDX 0x0080  /* 100 Mbit full duplex supported */
  245. #define PHY_STAT_LINK 0x0100  /* 1 up - 0 down */
  246. #define PHY_STAT_FAULT 0x0200  /* 1 remote fault */
  247. #define PHY_STAT_ANC 0x0400  /* 1 auto-negotiation complete */
  248. #define PHY_STAT_SPMASK 0xf000  /* mask for speed */
  249. #define PHY_STAT_10HDX 0x1000  /* 10 Mbit half duplex selected */
  250. #define PHY_STAT_10FDX 0x2000  /* 10 Mbit full duplex selected */
  251. #define PHY_STAT_100HDX 0x4000  /* 100 Mbit half duplex selected */
  252. #define PHY_STAT_100FDX 0x8000  /* 100 Mbit full duplex selected */
  253. #endif /* CONFIG_USE_MDIO */
  254. static int
  255. fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
  256. {
  257. struct fec_enet_private *fep;
  258. volatile fec_t *fecp;
  259. volatile cbd_t *bdp;
  260. fep = dev->priv;
  261. fecp = (volatile fec_t*)dev->base_addr;
  262. if (!fep->link) {
  263. /* Link is down or autonegotiation is in progress. */
  264. return 1;
  265. }
  266. /* Fill in a Tx ring entry */
  267. bdp = fep->cur_tx;
  268. #ifndef final_version
  269. if (bdp->cbd_sc & BD_ENET_TX_READY) {
  270. /* Ooops.  All transmit buffers are full.  Bail out.
  271.  * This should not happen, since dev->tbusy should be set.
  272.  */
  273. printk("%s: tx queue full!.n", dev->name);
  274. return 1;
  275. }
  276. #endif
  277. /* Clear all of the status flags.
  278.  */
  279. bdp->cbd_sc &= ~BD_ENET_TX_STATS;
  280. /* Set buffer length and buffer pointer.
  281. */
  282. bdp->cbd_bufaddr = __pa(skb->data);
  283. bdp->cbd_datlen = skb->len;
  284. /* Save skb pointer.
  285. */
  286. fep->tx_skbuff[fep->skb_cur] = skb;
  287. fep->stats.tx_bytes += skb->len;
  288. fep->skb_cur = (fep->skb_cur+1) & TX_RING_MOD_MASK;
  289. /* Push the data cache so the CPM does not get stale memory
  290.  * data.
  291.  */
  292. flush_dcache_range((unsigned long)skb->data,
  293.    (unsigned long)skb->data + skb->len);
  294. spin_lock_irq(&fep->lock);
  295. /* Send it on its way.  Tell FEC its ready, interrupt when done,
  296.  * its the last BD of the frame, and to put the CRC on the end.
  297.  */
  298. bdp->cbd_sc |= (BD_ENET_TX_READY | BD_ENET_TX_INTR
  299. | BD_ENET_TX_LAST | BD_ENET_TX_TC);
  300. dev->trans_start = jiffies;
  301. /* Trigger transmission start */
  302. fecp->fec_x_des_active = 0x01000000;
  303. /* If this was the last BD in the ring, start at the beginning again.
  304. */
  305. if (bdp->cbd_sc & BD_ENET_TX_WRAP) {
  306. bdp = fep->tx_bd_base;
  307. } else {
  308. bdp++;
  309. }
  310. if (bdp->cbd_sc & BD_ENET_TX_READY) {
  311. netif_stop_queue(dev);
  312. fep->tx_full = 1;
  313. }
  314. fep->cur_tx = (cbd_t *)bdp;
  315. spin_unlock_irq(&fep->lock);
  316. return 0;
  317. }
  318. static void
  319. fec_timeout(struct net_device *dev)
  320. {
  321. struct fec_enet_private *fep = dev->priv;
  322. printk("%s: transmit timed out.n", dev->name);
  323. fep->stats.tx_errors++;
  324. #ifndef final_version
  325. {
  326. int i;
  327. cbd_t *bdp;
  328. printk("Ring data dump: cur_tx %lx%s, dirty_tx %lx cur_rx: %lxn",
  329.        (unsigned long)fep->cur_tx, fep->tx_full ? " (full)" : "",
  330.        (unsigned long)fep->dirty_tx,
  331.        (unsigned long)fep->cur_rx);
  332. bdp = fep->tx_bd_base;
  333. printk(" tx: %u buffersn",  TX_RING_SIZE);
  334. for (i = 0 ; i < TX_RING_SIZE; i++) {
  335. printk("  %08x: %04x %04x %08xn",
  336.        (uint) bdp,
  337.        bdp->cbd_sc,
  338.        bdp->cbd_datlen,
  339.        bdp->cbd_bufaddr);
  340. bdp++;
  341. }
  342. bdp = fep->rx_bd_base;
  343. printk(" rx: %lu buffersn",  RX_RING_SIZE);
  344. for (i = 0 ; i < RX_RING_SIZE; i++) {
  345. printk("  %08x: %04x %04x %08xn",
  346.        (uint) bdp,
  347.        bdp->cbd_sc,
  348.        bdp->cbd_datlen,
  349.        bdp->cbd_bufaddr);
  350. bdp++;
  351. }
  352. }
  353. #endif
  354. if (!fep->tx_full)
  355. netif_wake_queue(dev);
  356. }
  357. /* The interrupt handler.
  358.  * This is called from the MPC core interrupt.
  359.  */
  360. static void
  361. fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs)
  362. {
  363. struct net_device *dev = dev_id;
  364. volatile fec_t *fecp;
  365. uint int_events;
  366. fecp = (volatile fec_t*)dev->base_addr;
  367. /* Get the interrupt events that caused us to be here.
  368. */
  369. while ((int_events = fecp->fec_ievent) != 0) {
  370. fecp->fec_ievent = int_events;
  371. if ((int_events & (FEC_ENET_HBERR | FEC_ENET_BABR |
  372.    FEC_ENET_BABT | FEC_ENET_EBERR)) != 0) {
  373. printk("FEC ERROR %xn", int_events);
  374. }
  375. /* Handle receive event in its own function.
  376.  */
  377. if (int_events & FEC_ENET_RXF)
  378. fec_enet_rx(dev);
  379. /* Transmit OK, or non-fatal error. Update the buffer
  380.    descriptors. FEC handles all errors, we just discover
  381.    them as part of the transmit process.
  382. */
  383. if (int_events & FEC_ENET_TXF)
  384. fec_enet_tx(dev);
  385. if (int_events & FEC_ENET_MII) {
  386. #ifdef CONFIG_USE_MDIO
  387. fec_enet_mii(dev);
  388. #else
  389. printk("%s[%d] %s: unexpected FEC_ENET_MII eventn", __FILE__,__LINE__,__FUNCTION__);
  390. #endif /* CONFIG_USE_MDIO */
  391. }
  392. }
  393. }
  394. static void
  395. fec_enet_tx(struct net_device *dev)
  396. {
  397. struct fec_enet_private *fep;
  398. volatile cbd_t *bdp;
  399. struct sk_buff *skb;
  400. fep = dev->priv;
  401. spin_lock(&fep->lock);
  402. bdp = fep->dirty_tx;
  403. while ((bdp->cbd_sc&BD_ENET_TX_READY) == 0) {
  404. if (bdp == fep->cur_tx && fep->tx_full == 0) break;
  405. skb = fep->tx_skbuff[fep->skb_dirty];
  406. /* Check for errors. */
  407. if (bdp->cbd_sc & (BD_ENET_TX_HB | BD_ENET_TX_LC |
  408.    BD_ENET_TX_RL | BD_ENET_TX_UN |
  409.    BD_ENET_TX_CSL)) {
  410. fep->stats.tx_errors++;
  411. if (bdp->cbd_sc & BD_ENET_TX_HB)  /* No heartbeat */
  412. fep->stats.tx_heartbeat_errors++;
  413. if (bdp->cbd_sc & BD_ENET_TX_LC)  /* Late collision */
  414. fep->stats.tx_window_errors++;
  415. if (bdp->cbd_sc & BD_ENET_TX_RL)  /* Retrans limit */
  416. fep->stats.tx_aborted_errors++;
  417. if (bdp->cbd_sc & BD_ENET_TX_UN)  /* Underrun */
  418. fep->stats.tx_fifo_errors++;
  419. if (bdp->cbd_sc & BD_ENET_TX_CSL) /* Carrier lost */
  420. fep->stats.tx_carrier_errors++;
  421. } else
  422. fep->stats.tx_packets++;
  423. #ifndef final_version
  424. if (bdp->cbd_sc & BD_ENET_TX_READY)
  425. printk("HEY! Enet xmit interrupt and TX_READY.n");
  426. #endif
  427. /* Deferred means some collisions occurred during transmit,
  428.  * but we eventually sent the packet OK.
  429.  */
  430. if (bdp->cbd_sc & BD_ENET_TX_DEF)
  431. fep->stats.collisions++;
  432. /* Free the sk buffer associated with this last transmit.
  433.  */
  434. #if 0
  435. printk("TXI: %x %x %xn", bdp, skb, fep->skb_dirty);
  436. #endif
  437. dev_kfree_skb_irq (skb/*, FREE_WRITE*/);
  438. fep->tx_skbuff[fep->skb_dirty] = NULL;
  439. fep->skb_dirty = (fep->skb_dirty + 1) & TX_RING_MOD_MASK;
  440. /* Update pointer to next buffer descriptor to be transmitted.
  441.  */
  442. if (bdp->cbd_sc & BD_ENET_TX_WRAP)
  443. bdp = fep->tx_bd_base;
  444. else
  445. bdp++;
  446. /* Since we have freed up a buffer, the ring is no longer
  447.  * full.
  448.  */
  449. if (fep->tx_full) {
  450. fep->tx_full = 0;
  451. if (netif_queue_stopped(dev))
  452. netif_wake_queue(dev);
  453. }
  454. }
  455. fep->dirty_tx = (cbd_t *)bdp;
  456. spin_unlock(&fep->lock);
  457. }
  458. /* During a receive, the cur_rx points to the current incoming buffer.
  459.  * When we update through the ring, if the next incoming buffer has
  460.  * not been given to the system, we just set the empty indicator,
  461.  * effectively tossing the packet.
  462.  */
  463. static void
  464. fec_enet_rx(struct net_device *dev)
  465. {
  466. struct fec_enet_private *fep;
  467. volatile fec_t *fecp;
  468. volatile cbd_t *bdp;
  469. struct sk_buff *skb;
  470. ushort pkt_len;
  471. __u8 *data;
  472. fep = dev->priv;
  473. fecp = (volatile fec_t*)dev->base_addr;
  474. /* First, grab all of the stats for the incoming packet.
  475.  * These get messed up if we get called due to a busy condition.
  476.  */
  477. bdp = fep->cur_rx;
  478. while (!(bdp->cbd_sc & BD_ENET_RX_EMPTY)) {
  479. #ifndef final_version
  480. /* Since we have allocated space to hold a complete frame,
  481.  * the last indicator should be set.
  482.  */
  483. if ((bdp->cbd_sc & BD_ENET_RX_LAST) == 0)
  484. printk("FEC ENET: rcv is not +lastn");
  485. #endif
  486. /* Check for errors. */
  487. if (bdp->cbd_sc & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_NO |
  488.    BD_ENET_RX_CR | BD_ENET_RX_OV)) {
  489. fep->stats.rx_errors++;
  490. if (bdp->cbd_sc & (BD_ENET_RX_LG | BD_ENET_RX_SH)) {
  491. /* Frame too long or too short. */
  492. fep->stats.rx_length_errors++;
  493. }
  494. if (bdp->cbd_sc & BD_ENET_RX_NO) /* Frame alignment */
  495. fep->stats.rx_frame_errors++;
  496. if (bdp->cbd_sc & BD_ENET_RX_CR) /* CRC Error */
  497. fep->stats.rx_crc_errors++;
  498. if (bdp->cbd_sc & BD_ENET_RX_OV) /* FIFO overrun */
  499. fep->stats.rx_crc_errors++;
  500. }
  501. /* Report late collisions as a frame error.
  502.  * On this error, the BD is closed, but we don't know what we
  503.  * have in the buffer.  So, just drop this frame on the floor.
  504.  */
  505. if (bdp->cbd_sc & BD_ENET_RX_CL) {
  506. fep->stats.rx_errors++;
  507. fep->stats.rx_frame_errors++;
  508. goto rx_processing_done;
  509. }
  510. /* Process the incoming frame.
  511.  */
  512. fep->stats.rx_packets++;
  513. pkt_len = bdp->cbd_datlen;
  514. fep->stats.rx_bytes += pkt_len;
  515. data = (__u8*)__va(bdp->cbd_bufaddr);
  516. /* This does 16 byte alignment, exactly what we need.
  517.  * The packet length includes FCS, but we don't want to
  518.  * include that when passing upstream as it messes up
  519.  * bridging applications.
  520.  */
  521. skb = dev_alloc_skb(pkt_len-4);
  522. if (skb == NULL) {
  523. printk("%s: Memory squeeze, dropping packet.n", dev->name);
  524. fep->stats.rx_dropped++;
  525. } else {
  526. skb->dev = dev;
  527. skb_put(skb,pkt_len-4); /* Make room */
  528. eth_copy_and_sum(skb,
  529.  (unsigned char *)__va(bdp->cbd_bufaddr),
  530.  pkt_len-4, 0);
  531. skb->protocol=eth_type_trans(skb,dev);
  532. netif_rx(skb);
  533. }
  534.   rx_processing_done:
  535. /* Clear the status flags for this buffer.
  536. */
  537. bdp->cbd_sc &= ~BD_ENET_RX_STATS;
  538. /* Mark the buffer empty.
  539. */
  540. bdp->cbd_sc |= BD_ENET_RX_EMPTY;
  541. /* Update BD pointer to next entry.
  542. */
  543. if (bdp->cbd_sc & BD_ENET_RX_WRAP)
  544. bdp = fep->rx_bd_base;
  545. else
  546. bdp++;
  547. #if 1
  548. /* Doing this here will keep the FEC running while we process
  549.  * incoming frames.  On a heavily loaded network, we should be
  550.  * able to keep up at the expense of system resources.
  551.  */
  552. fecp->fec_r_des_active = 0x01000000;
  553. #endif
  554.    } /* while (!(bdp->cbd_sc & BD_ENET_RX_EMPTY)) */
  555. fep->cur_rx = (cbd_t *)bdp;
  556. #if 0
  557. /* Doing this here will allow us to process all frames in the
  558.  * ring before the FEC is allowed to put more there.  On a heavily
  559.  * loaded network, some frames may be lost.  Unfortunately, this
  560.  * increases the interrupt overhead since we can potentially work
  561.  * our way back to the interrupt return only to come right back
  562.  * here.
  563.  */
  564. fecp->fec_r_des_active = 0x01000000;
  565. #endif
  566. }
  567. #ifdef CONFIG_USE_MDIO
  568. static void
  569. fec_enet_mii(struct net_device *dev)
  570. {
  571. struct fec_enet_private *fep;
  572. volatile fec_t *ep;
  573. mii_list_t *mip;
  574. uint mii_reg;
  575. fep = (struct fec_enet_private *)dev->priv;
  576. ep = &(((immap_t *)IMAP_ADDR)->im_cpm.cp_fec);
  577. mii_reg = ep->fec_mii_data;
  578. if ((mip = mii_head) == NULL) {
  579. printk("MII and no head!n");
  580. return;
  581. }
  582. if (mip->mii_func != NULL)
  583. (*(mip->mii_func))(mii_reg, dev, mip->mii_data);
  584. mii_head = mip->mii_next;
  585. mip->mii_next = mii_free;
  586. mii_free = mip;
  587. if ((mip = mii_head) != NULL) {
  588. ep->fec_mii_data = mip->mii_regval;
  589. }
  590. }
  591. static int
  592. mii_queue(struct net_device *dev, int regval, void (*func)(uint, struct net_device *, uint), uint data)
  593. {
  594. struct fec_enet_private *fep;
  595. unsigned long flags;
  596. mii_list_t *mip;
  597. int retval;
  598. /* Add PHY address to register command.
  599. */
  600. fep = dev->priv;
  601. regval |= fep->phy_addr << 23;
  602. retval = 0;
  603. save_flags(flags);
  604. cli();
  605. if ((mip = mii_free) != NULL) {
  606. mii_free = mip->mii_next;
  607. mip->mii_regval = regval;
  608. mip->mii_func = func;
  609. mip->mii_next = NULL;
  610. mip->mii_data = data;
  611. if (mii_head) {
  612. mii_tail->mii_next = mip;
  613. mii_tail = mip;
  614. } else {
  615. mii_head = mii_tail = mip;
  616. (&(((immap_t *)IMAP_ADDR)->im_cpm.cp_fec))->fec_mii_data = regval;
  617. }
  618. } else {
  619. retval = 1;
  620. }
  621. restore_flags(flags);
  622. return(retval);
  623. }
  624. static void mii_do_cmd(struct net_device *dev, const phy_cmd_t *c)
  625. {
  626. int k;
  627. if(!c)
  628. return;
  629. for(k = 0; (c+k)->mii_data != mk_mii_end; k++)
  630. mii_queue(dev, (c+k)->mii_data, (c+k)->funct, 0);
  631. }
  632. static void mii_parse_sr(uint mii_reg, struct net_device *dev, uint data)
  633. {
  634. struct fec_enet_private *fep = dev->priv;
  635. volatile uint *s = &(fep->phy_status);
  636. *s &= ~(PHY_STAT_LINK | PHY_STAT_FAULT | PHY_STAT_ANC);
  637. if (mii_reg & 0x0004)
  638. *s |= PHY_STAT_LINK;
  639. if (mii_reg & 0x0010)
  640. *s |= PHY_STAT_FAULT;
  641. if (mii_reg & 0x0020)
  642. *s |= PHY_STAT_ANC;
  643. fep->link = (*s & PHY_STAT_LINK) ? 1 : 0;
  644. }
  645. static void mii_parse_cr(uint mii_reg, struct net_device *dev, uint data)
  646. {
  647. struct fec_enet_private *fep = dev->priv;
  648. volatile uint *s = &(fep->phy_status);
  649. *s &= ~(PHY_CONF_ANE | PHY_CONF_LOOP);
  650. if (mii_reg & 0x1000)
  651. *s |= PHY_CONF_ANE;
  652. if (mii_reg & 0x4000)
  653. *s |= PHY_CONF_LOOP;
  654. }
  655. static void mii_parse_anar(uint mii_reg, struct net_device *dev, uint data)
  656. {
  657. struct fec_enet_private *fep = dev->priv;
  658. volatile uint *s = &(fep->phy_status);
  659. *s &= ~(PHY_CONF_SPMASK);
  660. if (mii_reg & 0x0020)
  661. *s |= PHY_CONF_10HDX;
  662. if (mii_reg & 0x0040)
  663. *s |= PHY_CONF_10FDX;
  664. if (mii_reg & 0x0080)
  665. *s |= PHY_CONF_100HDX;
  666. if (mii_reg & 0x00100)
  667. *s |= PHY_CONF_100FDX;
  668. }
  669. #if 0
  670. static void mii_disp_reg(uint mii_reg, struct net_device *dev)
  671. {
  672. printk("reg %u = 0x%04xn", (mii_reg >> 18) & 0x1f, mii_reg & 0xffff);
  673. }
  674. #endif
  675. /* ------------------------------------------------------------------------- */
  676. /* The Level one LXT970 is used by many boards      */
  677. #ifdef CONFIG_FEC_LXT970
  678. #define MII_LXT970_MIRROR    16  /* Mirror register           */
  679. #define MII_LXT970_IER       17  /* Interrupt Enable Register */
  680. #define MII_LXT970_ISR       18  /* Interrupt Status Register */
  681. #define MII_LXT970_CONFIG    19  /* Configuration Register    */
  682. #define MII_LXT970_CSR       20  /* Chip Status Register      */
  683. static void mii_parse_lxt970_csr(uint mii_reg, struct net_device *dev, uint data)
  684. {
  685. struct fec_enet_private *fep = dev->priv;
  686. volatile uint *s = &(fep->phy_status);
  687. *s &= ~(PHY_STAT_SPMASK);
  688. if (mii_reg & 0x0800) {
  689. if (mii_reg & 0x1000)
  690. *s |= PHY_STAT_100FDX;
  691. else
  692. *s |= PHY_STAT_100HDX;
  693. }
  694. else {
  695. if (mii_reg & 0x1000)
  696. *s |= PHY_STAT_10FDX;
  697. else
  698. *s |= PHY_STAT_10HDX;
  699. }
  700. }
  701. static phy_info_t phy_info_lxt970 = {
  702. 0x07810000,
  703. "LXT970",
  704. (const phy_cmd_t []) {  /* config */
  705. #if 0
  706. // { mk_mii_write(MII_REG_ANAR, 0x0021), NULL },
  707. /* Set default operation of 100-TX....for some reason
  708.  * some of these bits are set on power up, which is wrong.
  709.  */
  710. { mk_mii_write(MII_LXT970_CONFIG, 0), NULL },
  711. #endif
  712. { mk_mii_read(MII_REG_CR), mii_parse_cr },
  713. { mk_mii_read(MII_REG_ANAR), mii_parse_anar },
  714. { mk_mii_end, }
  715. },
  716. (const phy_cmd_t []) {  /* startup - enable interrupts */
  717. { mk_mii_write(MII_LXT970_IER, 0x0002), NULL },
  718. { mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
  719. { mk_mii_end, }
  720. },
  721. (const phy_cmd_t []) { /* ack_int */
  722. /* read SR and ISR to acknowledge */
  723. { mk_mii_read(MII_REG_SR), mii_parse_sr },
  724. { mk_mii_read(MII_LXT970_ISR), NULL },
  725. /* find out the current status */
  726. { mk_mii_read(MII_LXT970_CSR), mii_parse_lxt970_csr },
  727. { mk_mii_end, }
  728. },
  729. (const phy_cmd_t []) {  /* shutdown - disable interrupts */
  730. { mk_mii_write(MII_LXT970_IER, 0x0000), NULL },
  731. { mk_mii_end, }
  732. },
  733. };
  734. #endif /* CONFIG_FEC_LXT970 */
  735. /* ------------------------------------------------------------------------- */
  736. /* The Level one LXT971 is used on some of my custom boards                  */
  737. #ifdef CONFIG_FEC_LXT971
  738. /* register definitions for the 971 */
  739. #define MII_LXT971_PCR       16  /* Port Control Register     */
  740. #define MII_LXT971_SR2       17  /* Status Register 2         */
  741. #define MII_LXT971_IER       18  /* Interrupt Enable Register */
  742. #define MII_LXT971_ISR       19  /* Interrupt Status Register */
  743. #define MII_LXT971_LCR       20  /* LED Control Register      */
  744. #define MII_LXT971_TCR       30  /* Transmit Control Register */
  745. /*
  746.  * I had some nice ideas of running the MDIO faster...
  747.  * The 971 should support 8MHz and I tried it, but things acted really
  748.  * weird, so 2.5 MHz ought to be enough for anyone...
  749.  */
  750. static void mii_parse_lxt971_sr2(uint mii_reg, struct net_device *dev, uint data)
  751. {
  752. struct fec_enet_private *fep = dev->priv;
  753. volatile uint *s = &(fep->phy_status);
  754. *s &= ~(PHY_STAT_SPMASK);
  755. if (mii_reg & 0x4000) {
  756. if (mii_reg & 0x0200)
  757. *s |= PHY_STAT_100FDX;
  758. else
  759. *s |= PHY_STAT_100HDX;
  760. }
  761. else {
  762. if (mii_reg & 0x0200)
  763. *s |= PHY_STAT_10FDX;
  764. else
  765. *s |= PHY_STAT_10HDX;
  766. }
  767. if (mii_reg & 0x0008)
  768. *s |= PHY_STAT_FAULT;
  769. }
  770. static phy_info_t phy_info_lxt971 = {
  771. 0x0001378e,
  772. "LXT971",
  773. (const phy_cmd_t []) {  /* config */
  774. // { mk_mii_write(MII_REG_ANAR, 0x021), NULL }, /* 10  Mbps, HD */
  775. { mk_mii_read(MII_REG_CR), mii_parse_cr },
  776. { mk_mii_read(MII_REG_ANAR), mii_parse_anar },
  777. { mk_mii_end, }
  778. },
  779. (const phy_cmd_t []) {  /* startup - enable interrupts */
  780. { mk_mii_write(MII_LXT971_IER, 0x00f2), NULL },
  781. { mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
  782. /* Somehow does the 971 tell me that the link is down
  783.  * the first read after power-up.
  784.  * read here to get a valid value in ack_int */
  785. { mk_mii_read(MII_REG_SR), mii_parse_sr },
  786. { mk_mii_end, }
  787. },
  788. (const phy_cmd_t []) { /* ack_int */
  789. /* find out the current status */
  790. { mk_mii_read(MII_REG_SR), mii_parse_sr },
  791. { mk_mii_read(MII_LXT971_SR2), mii_parse_lxt971_sr2 },
  792. /* we only need to read ISR to acknowledge */
  793. { mk_mii_read(MII_LXT971_ISR), NULL },
  794. { mk_mii_end, }
  795. },
  796. (const phy_cmd_t []) {  /* shutdown - disable interrupts */
  797. { mk_mii_write(MII_LXT971_IER, 0x0000), NULL },
  798. { mk_mii_end, }
  799. },
  800. };
  801. #endif /* CONFIG_FEC_LXT970 */
  802. /* ------------------------------------------------------------------------- */
  803. /* The Quality Semiconductor QS6612 is used on the RPX CLLF                  */
  804. #ifdef CONFIG_FEC_QS6612
  805. /* register definitions */
  806. #define MII_QS6612_MCR       17  /* Mode Control Register      */
  807. #define MII_QS6612_FTR       27  /* Factory Test Register      */
  808. #define MII_QS6612_MCO       28  /* Misc. Control Register     */
  809. #define MII_QS6612_ISR       29  /* Interrupt Source Register  */
  810. #define MII_QS6612_IMR       30  /* Interrupt Mask Register    */
  811. #define MII_QS6612_PCR       31  /* 100BaseTx PHY Control Reg. */
  812. static void mii_parse_qs6612_pcr(uint mii_reg, struct net_device *dev, uint data)
  813. {
  814. struct fec_enet_private *fep = dev->priv;
  815. volatile uint *s = &(fep->phy_status);
  816. *s &= ~(PHY_STAT_SPMASK);
  817. switch((mii_reg >> 2) & 7) {
  818. case 1: *s |= PHY_STAT_10HDX; break;
  819. case 2: *s |= PHY_STAT_100HDX; break;
  820. case 5: *s |= PHY_STAT_10FDX; break;
  821. case 6: *s |= PHY_STAT_100FDX; break;
  822. }
  823. }
  824. static phy_info_t phy_info_qs6612 = {
  825. 0x00181440,
  826. "QS6612",
  827. (const phy_cmd_t []) {  /* config */
  828. // { mk_mii_write(MII_REG_ANAR, 0x061), NULL }, /* 10  Mbps */
  829. /* The PHY powers up isolated on the RPX,
  830.  * so send a command to allow operation.
  831.  */
  832. { mk_mii_write(MII_QS6612_PCR, 0x0dc0), NULL },
  833. /* parse cr and anar to get some info */
  834. { mk_mii_read(MII_REG_CR), mii_parse_cr },
  835. { mk_mii_read(MII_REG_ANAR), mii_parse_anar },
  836. { mk_mii_end, }
  837. },
  838. (const phy_cmd_t []) {  /* startup - enable interrupts */
  839. { mk_mii_write(MII_QS6612_IMR, 0x003a), NULL },
  840. { mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
  841. { mk_mii_end, }
  842. },
  843. (const phy_cmd_t []) { /* ack_int */
  844. /* we need to read ISR, SR and ANER to acknowledge */
  845. { mk_mii_read(MII_QS6612_ISR), NULL },
  846. { mk_mii_read(MII_REG_SR), mii_parse_sr },
  847. { mk_mii_read(MII_REG_ANER), NULL },
  848. /* read pcr to get info */
  849. { mk_mii_read(MII_QS6612_PCR), mii_parse_qs6612_pcr },
  850. { mk_mii_end, }
  851. },
  852. (const phy_cmd_t []) {  /* shutdown - disable interrupts */
  853. { mk_mii_write(MII_QS6612_IMR, 0x0000), NULL },
  854. { mk_mii_end, }
  855. },
  856. };
  857. #endif /* CONFIG_FEC_QS6612 */
  858. /* -------------------------------------------------------------------- */
  859. /* The National Semiconductor DP83843BVJE is used on a Mediatrix board  */
  860. /* -------------------------------------------------------------------- */
  861. #ifdef CONFIG_FEC_DP83843
  862. /* Register definitions */
  863. #define MII_DP83843_PHYSTS 0x10  /* PHY Status Register */
  864. #define MII_DP83843_MIPSCR 0x11  /* Specific Status Register */
  865. #define MII_DP83843_MIPGSR 0x12  /* Generic Status Register */
  866. static void mii_parse_dp83843_physts(uint mii_reg, struct net_device *dev, uint data)
  867. {
  868. struct fec_enet_private *fep = dev->priv;
  869. volatile uint *s = &(fep->phy_status);
  870. *s &= ~(PHY_STAT_SPMASK);
  871. if (mii_reg & 0x0002)
  872. {
  873. if (mii_reg & 0x0004)
  874. *s |= PHY_STAT_10FDX;
  875. else
  876. *s |= PHY_STAT_10HDX;
  877. }
  878. else
  879. {
  880. if (mii_reg & 0x0004)
  881. *s |= PHY_STAT_100FDX;
  882. else
  883. *s |= PHY_STAT_100HDX;
  884. }
  885. }
  886. static phy_info_t phy_info_dp83843 = {
  887. 0x020005c1,
  888. "DP83843BVJE",
  889. (const phy_cmd_t []) {  /* config */  
  890. { mk_mii_write(MII_REG_ANAR, 0x01E1), NULL  }, /* Auto-Negociation Register Control set to    */
  891.                                                /* auto-negociate 10/100MBps, Half/Full duplex */
  892. { mk_mii_read(MII_REG_CR),   mii_parse_cr   },
  893. { mk_mii_read(MII_REG_ANAR), mii_parse_anar },
  894. { mk_mii_end, }
  895. },
  896. (const phy_cmd_t []) {  /* startup */
  897. { mk_mii_write(MII_DP83843_MIPSCR, 0x0002), NULL }, /* Enable interrupts */
  898. { mk_mii_write(MII_REG_CR, 0x1200), NULL         }, /* Enable and Restart Auto-Negotiation */
  899. { mk_mii_read(MII_REG_SR), mii_parse_sr          },
  900. { mk_mii_read(MII_REG_CR), mii_parse_cr },
  901. { mk_mii_read(MII_DP83843_PHYSTS), mii_parse_dp83843_physts },
  902. { mk_mii_end, }
  903. },
  904. (const phy_cmd_t []) { /* ack_int */
  905. { mk_mii_read(MII_DP83843_MIPGSR), NULL },  /* Acknowledge interrupts */
  906. { mk_mii_read(MII_REG_SR), mii_parse_sr },  /* Find out the current status */
  907. { mk_mii_read(MII_REG_CR), mii_parse_cr },
  908. { mk_mii_read(MII_DP83843_PHYSTS), mii_parse_dp83843_physts },
  909. { mk_mii_end, }
  910. },
  911. (const phy_cmd_t []) {  /* shutdown - disable interrupts */
  912. { mk_mii_end, }
  913. }
  914. };
  915. #endif /* CONFIG_FEC_DP83843 */
  916. /* ----------------------------------------------------------------- */
  917. /* The National Semiconductor DP83846A is used on a Mediatrix board  */
  918. /* ----------------------------------------------------------------- */
  919. #ifdef CONFIG_FEC_DP83846A
  920. /* Register definitions */
  921. #define MII_DP83846A_PHYSTS 0x10  /* PHY Status Register */
  922. static void mii_parse_dp83846a_physts(uint mii_reg, struct net_device *dev, uint data)
  923. {
  924. struct fec_enet_private *fep = (struct fec_enet_private *)dev->priv;
  925. volatile uint *s = &(fep->phy_status);
  926. int link_change_mask;
  927. *s &= ~(PHY_STAT_SPMASK);
  928. if (mii_reg & 0x0002) {
  929. if (mii_reg & 0x0004)
  930. *s |= PHY_STAT_10FDX;
  931. else
  932. *s |= PHY_STAT_10HDX;
  933. }
  934. else {
  935. if (mii_reg & 0x0004)
  936. *s |= PHY_STAT_100FDX;
  937. else
  938. *s |= PHY_STAT_100HDX;
  939. }
  940. link_change_mask = PHY_STAT_LINK | PHY_STAT_10FDX | PHY_STAT_10HDX | PHY_STAT_100FDX | PHY_STAT_100HDX;
  941. if(fep->old_status != (link_change_mask & *s))
  942. {
  943. fep->old_status = (link_change_mask & *s);
  944. mii_queue_relink(mii_reg, dev, 0);
  945. }
  946. }
  947. static phy_info_t phy_info_dp83846a = {
  948. 0x020005c2,
  949. "DP83846A",
  950. (const phy_cmd_t []) {  /* config */  
  951. { mk_mii_write(MII_REG_ANAR, 0x01E1), NULL  }, /* Auto-Negociation Register Control set to    */
  952.                                                /* auto-negociate 10/100MBps, Half/Full duplex */
  953. { mk_mii_read(MII_REG_CR),   mii_parse_cr   },
  954. { mk_mii_read(MII_REG_ANAR), mii_parse_anar },
  955. { mk_mii_end, }
  956. },
  957. (const phy_cmd_t []) {  /* startup */
  958. { mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* Enable and Restart Auto-Negotiation */
  959. { mk_mii_read(MII_REG_SR), mii_parse_sr },
  960. { mk_mii_read(MII_REG_CR), mii_parse_cr   },
  961. { mk_mii_read(MII_DP83846A_PHYSTS), mii_parse_dp83846a_physts },
  962. { mk_mii_end, }
  963. },
  964. (const phy_cmd_t []) { /* ack_int */
  965. { mk_mii_read(MII_REG_SR), mii_parse_sr },
  966. { mk_mii_read(MII_REG_CR), mii_parse_cr   },
  967. { mk_mii_read(MII_DP83846A_PHYSTS), mii_parse_dp83846a_physts },
  968. { mk_mii_end, }
  969. },
  970. (const phy_cmd_t []) {  /* shutdown - disable interrupts */
  971. { mk_mii_end, }
  972. }
  973. };
  974. #endif /* CONFIG_FEC_DP83846A */
  975. static phy_info_t *phy_info[] = {
  976. #ifdef CONFIG_FEC_LXT970
  977. &phy_info_lxt970,
  978. #endif /* CONFIG_FEC_LXT970 */
  979. #ifdef CONFIG_FEC_LXT971
  980. &phy_info_lxt971,
  981. #endif /* CONFIG_FEC_LXT971 */
  982. #ifdef CONFIG_FEC_QS6612
  983. &phy_info_qs6612,
  984. #endif /* CONFIG_FEC_LXT971 */
  985. #ifdef CONFIG_FEC_DP83843
  986. &phy_info_dp83843,
  987. #endif /* CONFIG_FEC_DP83843 */
  988. #ifdef CONFIG_FEC_DP83846A
  989. &phy_info_dp83846a,
  990. #endif /* CONFIG_FEC_DP83846A */
  991. NULL
  992. };
  993. static void mii_display_status(struct net_device *dev)
  994. {
  995. struct fec_enet_private *fep = dev->priv;
  996. volatile uint *s = &(fep->phy_status);
  997. if (!fep->link && !fep->old_link) {
  998. /* Link is still down - don't print anything */
  999. return;
  1000. }
  1001. printk("%s: status: ", dev->name);
  1002. if (!fep->link) {
  1003. printk("link down");
  1004. } else {
  1005. printk("link up");
  1006. switch(*s & PHY_STAT_SPMASK) {
  1007. case PHY_STAT_100FDX: printk(", 100 Mbps Full Duplex"); break;
  1008. case PHY_STAT_100HDX: printk(", 100 Mbps Half Duplex"); break;
  1009. case PHY_STAT_10FDX: printk(", 10 Mbps Full Duplex"); break;
  1010. case PHY_STAT_10HDX: printk(", 10 Mbps Half Duplex"); break;
  1011. default:
  1012. printk(", Unknown speed/duplex");
  1013. }
  1014. if (*s & PHY_STAT_ANC)
  1015. printk(", auto-negotiation complete");
  1016. }
  1017. if (*s & PHY_STAT_FAULT)
  1018. printk(", remote fault");
  1019. printk(".n");
  1020. }
  1021. static void mii_display_config(struct net_device *dev)
  1022. {
  1023. struct fec_enet_private *fep = dev->priv;
  1024. volatile uint *s = &(fep->phy_status);
  1025. printk("%s: config: auto-negotiation ", dev->name);
  1026. if (*s & PHY_CONF_ANE)
  1027. printk("on");
  1028. else
  1029. printk("off");
  1030. if (*s & PHY_CONF_100FDX)
  1031. printk(", 100FDX");
  1032. if (*s & PHY_CONF_100HDX)
  1033. printk(", 100HDX");
  1034. if (*s & PHY_CONF_10FDX)
  1035. printk(", 10FDX");
  1036. if (*s & PHY_CONF_10HDX)
  1037. printk(", 10HDX");
  1038. if (!(*s & PHY_CONF_SPMASK))
  1039. printk(", No speed/duplex selected?");
  1040. if (*s & PHY_CONF_LOOP)
  1041. printk(", loopback enabled");
  1042. printk(".n");
  1043. fep->sequence_done = 1;
  1044. }
  1045. static void mii_relink(struct net_device *dev)
  1046. {
  1047. struct fec_enet_private *fep = dev->priv;
  1048. int duplex;
  1049. fep->link = (fep->phy_status & PHY_STAT_LINK) ? 1 : 0;
  1050. mii_display_status(dev);
  1051. fep->old_link = fep->link;
  1052. if (fep->link) {
  1053. duplex = 0;
  1054. if (fep->phy_status
  1055.     & (PHY_STAT_100FDX | PHY_STAT_10FDX))
  1056. duplex = 1;
  1057. fec_restart(dev, duplex);
  1058. }
  1059. else
  1060. fec_stop(dev);
  1061. #if 0
  1062. enable_irq(fep->mii_irq);
  1063. #endif
  1064. }
  1065. static void mii_queue_relink(uint mii_reg, struct net_device *dev, uint data)
  1066. {
  1067. struct fec_enet_private *fep = dev->priv;
  1068. fep->phy_task.routine = (void *)mii_relink;
  1069. fep->phy_task.data = dev;
  1070. schedule_task(&fep->phy_task);
  1071. }
  1072. static void mii_queue_config(uint mii_reg, struct net_device *dev, uint data)
  1073. {
  1074. struct fec_enet_private *fep = dev->priv;
  1075. fep->phy_task.routine = (void *)mii_display_config;
  1076. fep->phy_task.data = dev;
  1077. schedule_task(&fep->phy_task);
  1078. }
  1079. phy_cmd_t phy_cmd_relink[] = { { mk_mii_read(MII_REG_CR), mii_queue_relink },
  1080.        { mk_mii_end, } };
  1081. phy_cmd_t phy_cmd_config[] = { { mk_mii_read(MII_REG_CR), mii_queue_config },
  1082.        { mk_mii_end, } };
  1083. /* Read remainder of PHY ID.
  1084. */
  1085. static void
  1086. mii_discover_phy3(uint mii_reg, struct net_device *dev, uint data)
  1087. {
  1088. struct fec_enet_private *fep;
  1089. int i;
  1090. fep = dev->priv;
  1091. fep->phy_id |= (mii_reg & 0xffff);
  1092. for(i = 0; phy_info[i]; i++)
  1093. if(phy_info[i]->id == (fep->phy_id >> 4))
  1094. break;
  1095. if(!phy_info[i])
  1096. panic("%s: PHY id 0x%08x is not supported!n",
  1097.       dev->name, fep->phy_id);
  1098. fep->phy = phy_info[i];
  1099. fep->phy_id_done = 1;
  1100. printk("%s: Phy @ 0x%x, type %s (0x%08x)n",
  1101. dev->name, fep->phy_addr, fep->phy->name, fep->phy_id);
  1102. }
  1103. /* Scan all of the MII PHY addresses looking for someone to respond
  1104.  * with a valid ID.  This usually happens quickly.
  1105.  */
  1106. static void
  1107. mii_discover_phy(uint mii_reg, struct net_device *dev, uint data)
  1108. {
  1109. struct fec_enet_private *fep;
  1110. uint phytype;
  1111. fep = dev->priv;
  1112. if ((phytype = (mii_reg & 0xffff)) != 0xffff) {
  1113. /* Got first part of ID, now get remainder.
  1114. */
  1115. fep->phy_id = phytype << 16;
  1116. mii_queue(dev, mk_mii_read(MII_REG_PHYIR2), mii_discover_phy3, 0);
  1117. } else {
  1118. fep->phy_addr++;
  1119. if (fep->phy_addr < 32) {
  1120. mii_queue(dev, mk_mii_read(MII_REG_PHYIR1),
  1121. mii_discover_phy, 0);
  1122. } else {
  1123. printk("fec: No PHY device found.n");
  1124. }
  1125. }
  1126. }
  1127. #endif /* CONFIG_USE_MDIO */
  1128. /* This interrupt occurs when the PHY detects a link change.
  1129. */
  1130. static void
  1131. #ifdef CONFIG_RPXCLASSIC
  1132. mii_link_interrupt(void *dev_id)
  1133. #else
  1134. mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs)
  1135. #endif
  1136. {
  1137. #ifdef CONFIG_USE_MDIO
  1138. struct net_device *dev = dev_id;
  1139. struct fec_enet_private *fep = dev->priv;
  1140. volatile immap_t *immap = (immap_t *)IMAP_ADDR;
  1141. volatile fec_t *fecp = &(immap->im_cpm.cp_fec);
  1142. unsigned int ecntrl = fecp->fec_ecntrl;
  1143. /* We need the FEC enabled to access the MII
  1144. */
  1145. if ((ecntrl & FEC_ECNTRL_ETHER_EN) == 0) {
  1146. fecp->fec_ecntrl |= FEC_ECNTRL_ETHER_EN;
  1147. }
  1148. #endif /* CONFIG_USE_MDIO */
  1149. #if 0
  1150. disable_irq(fep->mii_irq);  /* disable now, enable later */
  1151. #endif
  1152. #ifdef CONFIG_USE_MDIO
  1153. mii_do_cmd(dev, fep->phy->ack_int);
  1154. mii_do_cmd(dev, phy_cmd_relink);  /* restart and display status */
  1155. if ((ecntrl & FEC_ECNTRL_ETHER_EN) == 0) {
  1156. fecp->fec_ecntrl = ecntrl; /* restore old settings */
  1157. }
  1158. #else
  1159. printk("%s[%d] %s: unexpected Link interruptn", __FILE__,__LINE__,__FUNCTION__);
  1160. #endif /* CONFIG_USE_MDIO */
  1161. }
  1162. static int
  1163. fec_enet_open(struct net_device *dev)
  1164. {
  1165. struct fec_enet_private *fep = dev->priv;
  1166. /* I should reset the ring buffers here, but I don't yet know
  1167.  * a simple way to do that.
  1168.  */
  1169. #ifdef CONFIG_USE_MDIO
  1170. fep->sequence_done = 0;
  1171. fep->link = 0;
  1172. if (fep->phy) {
  1173. mii_do_cmd(dev, fep->phy->config);
  1174. mii_do_cmd(dev, phy_cmd_config);  /* display configuration */
  1175. while(!fep->sequence_done)
  1176. schedule();
  1177. mii_do_cmd(dev, fep->phy->startup);
  1178. #if defined(CONFIG_USE_MDIO) && defined(CONFIG_FEC_DP83846A)
  1179. if(fep->phy == &phy_info_dp83846a)
  1180. {
  1181. /* Initializing timers
  1182.  */
  1183. init_timer( &fep->phy_timer_list ); 
  1184. /* Starting timer for periodic link status check
  1185.  * After 100 milli-seconds, mdio_timer_callback function is called.
  1186.  */
  1187. fep->phy_timer_list.expires  = jiffies + (100 * HZ / 1000);
  1188. fep->phy_timer_list.data     = (unsigned long)dev;
  1189. fep->phy_timer_list.function = mdio_timer_callback;
  1190. add_timer( &fep->phy_timer_list );
  1191. }
  1192. #if defined(CONFIG_IP_PNP)
  1193.         printk("%s: Waiting for the link to be up...n", dev->name);
  1194.         while(fep->link == 0 || ((((volatile fec_t*)dev->base_addr)->fec_ecntrl & FEC_ECNTRL_ETHER_EN) == 0))
  1195.         {
  1196.             schedule();
  1197.         }
  1198. #endif /* CONFIG_IP_PNP */
  1199. #endif /* CONFIG_USE_MDIO && CONFIG_FEC_DP83846A */
  1200. netif_start_queue(dev);
  1201. return 0; /* Success */
  1202. }
  1203. return -ENODEV; /* No PHY we understand */
  1204. #else
  1205. fep->link = 1;
  1206. netif_start_queue(dev);
  1207. return 0; /* Success */
  1208. #endif /* CONFIG_USE_MDIO */
  1209. }
  1210. static int
  1211. fec_enet_close(struct net_device *dev)
  1212. {
  1213. /* Don't know what to do yet.
  1214. */
  1215. netif_stop_queue(dev);
  1216. fec_stop(dev);
  1217. return 0;
  1218. }
  1219. static struct net_device_stats *fec_enet_get_stats(struct net_device *dev)
  1220. {
  1221. struct fec_enet_private *fep = (struct fec_enet_private *)dev->priv;
  1222. return &fep->stats;
  1223. }
  1224. #ifdef CONFIG_USE_MDIO
  1225. #if defined(CONFIG_FEC_DP83846A)
  1226. /* Execute the ack_int command set and schedules next timer call back.  */
  1227. static void mdio_timer_callback(unsigned long data)
  1228. {
  1229. struct net_device *dev = (struct net_device *)data;
  1230. struct fec_enet_private *fep = (struct fec_enet_private *)(dev->priv);
  1231. mii_do_cmd(dev, fep->phy->ack_int);
  1232. if(fep->link == 0)
  1233. {
  1234. fep->phy_timer_list.expires  = jiffies + (100 * HZ / 1000); /* Sleep for 100ms */
  1235. }
  1236. else
  1237. {
  1238. fep->phy_timer_list.expires  = jiffies + (1 * HZ); /* Sleep for 1 sec. */
  1239. }
  1240. add_timer( &fep->phy_timer_list ); 
  1241. }
  1242. #endif /* CONFIG_FEC_DP83846A */
  1243. static void mdio_callback(uint regval, struct net_device *dev, uint data)
  1244. {
  1245. mdio_read_data_t* mrd = (mdio_read_data_t *)data;
  1246. mrd->regval = 0xFFFF & regval;
  1247. wake_up_process(mrd->sleeping_task);
  1248. }
  1249. static int mdio_read(struct net_device *dev, int phy_id, int location)
  1250. {
  1251. uint retval;
  1252. mdio_read_data_t* mrd = (mdio_read_data_t *)kmalloc(sizeof(*mrd), GFP_KERNEL);
  1253. mrd->sleeping_task = current;
  1254. set_current_state(TASK_INTERRUPTIBLE);
  1255. mii_queue(dev, mk_mii_read(location), mdio_callback, (unsigned int) mrd);
  1256. schedule();
  1257. retval = mrd->regval;
  1258. kfree(mrd);
  1259. return retval;
  1260. }
  1261. void mdio_write(struct net_device *dev, int phy_id, int location, int value)
  1262. {
  1263. mii_queue(dev, mk_mii_write(location, value), NULL, 0);
  1264. }
  1265. static int fec_enet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  1266. {
  1267. struct fec_enet_private *cep = (struct fec_enet_private *)dev->priv;
  1268. struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data;
  1269. int phy = cep->phy_addr & 0x1f;
  1270. int retval;
  1271. if (data == NULL)
  1272. {
  1273. retval = -EINVAL;
  1274. }
  1275. else
  1276. {
  1277. switch(cmd)
  1278. {
  1279. case SIOCETHTOOL:
  1280. return netdev_ethtool_ioctl(dev, (void*)rq->ifr_data);
  1281. break;
  1282. case SIOCGMIIPHY: /* Get address of MII PHY in use. */
  1283. case SIOCDEVPRIVATE: /* for binary compat, remove in 2.5 */
  1284. data->phy_id = phy;
  1285. case SIOCGMIIREG: /* Read MII PHY register. */
  1286. case SIOCDEVPRIVATE+1: /* for binary compat, remove in 2.5 */
  1287. data->val_out = mdio_read(dev, data->phy_id & 0x1f, data->reg_num & 0x1f);
  1288. retval = 0;
  1289. break;
  1290. case SIOCSMIIREG: /* Write MII PHY register. */
  1291. case SIOCDEVPRIVATE+2: /* for binary compat, remove in 2.5 */
  1292. if (!capable(CAP_NET_ADMIN))
  1293. {
  1294. retval = -EPERM;
  1295. }
  1296. else
  1297. {
  1298. mdio_write(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
  1299. retval = 0;
  1300. }
  1301. break;
  1302. default:
  1303. retval = -EOPNOTSUPP;
  1304. break;
  1305. }
  1306. }
  1307. return retval;
  1308. }
  1309. static int netdev_ethtool_ioctl (struct net_device *dev, void *useraddr)
  1310. {
  1311. u32 ethcmd;
  1312. /* dev_ioctl() in ../../net/core/dev.c has already checked
  1313.    capable(CAP_NET_ADMIN), so don't bother with that here.  */
  1314. if (copy_from_user (&ethcmd, useraddr, sizeof (ethcmd)))
  1315. return -EFAULT;
  1316. switch (ethcmd) {
  1317. case ETHTOOL_GDRVINFO:
  1318. {
  1319. struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO };
  1320. strcpy (info.driver, dev->name);
  1321. strcpy (info.version, "0.2");
  1322. strcpy (info.bus_info, "");
  1323. if (copy_to_user (useraddr, &info, sizeof (info)))
  1324. return -EFAULT;
  1325. return 0;
  1326. }
  1327. default:
  1328. break;
  1329. }
  1330. return -EOPNOTSUPP;
  1331. }
  1332. #endif /* CONFIG_USE_MDIO */
  1333. /* Set or clear the multicast filter for this adaptor.
  1334.  * Skeleton taken from sunlance driver.
  1335.  * The CPM Ethernet implementation allows Multicast as well as individual
  1336.  * MAC address filtering.  Some of the drivers check to make sure it is
  1337.  * a group multicast address, and discard those that are not.  I guess I
  1338.  * will do the same for now, but just remove the test if you want
  1339.  * individual filtering as well (do the upper net layers want or support
  1340.  * this kind of feature?).
  1341.  */
  1342. static void set_multicast_list(struct net_device *dev)
  1343. {
  1344. struct fec_enet_private *fep;
  1345. volatile fec_t *ep;
  1346. fep = (struct fec_enet_private *)dev->priv;
  1347. ep = &(((immap_t *)IMAP_ADDR)->im_cpm.cp_fec);
  1348. if (dev->flags&IFF_PROMISC) {
  1349. /* Log any net taps. */
  1350. printk("%s: Promiscuous mode enabled.n", dev->name);
  1351. ep->fec_r_cntrl |= FEC_RCNTRL_PROM;
  1352. } else {
  1353. ep->fec_r_cntrl &= ~FEC_RCNTRL_PROM;
  1354. if (dev->flags & IFF_ALLMULTI) {
  1355. /* Catch all multicast addresses, so set the
  1356.  * filter to all 1's.
  1357.  */
  1358. ep->fec_hash_table_high = 0xffffffff;
  1359. ep->fec_hash_table_low = 0xffffffff;
  1360. }
  1361. #if 0
  1362. else {
  1363. /* Clear filter and add the addresses in the list.
  1364. */
  1365. ep->sen_gaddr1 = 0;
  1366. ep->sen_gaddr2 = 0;
  1367. ep->sen_gaddr3 = 0;
  1368. ep->sen_gaddr4 = 0;
  1369. dmi = dev->mc_list;
  1370. for (i=0; i<dev->mc_count; i++) {
  1371. /* Only support group multicast for now.
  1372. */
  1373. if (!(dmi->dmi_addr[0] & 1))
  1374. continue;
  1375. /* The address in dmi_addr is LSB first,
  1376.  * and taddr is MSB first.  We have to
  1377.  * copy bytes MSB first from dmi_addr.
  1378.  */
  1379. mcptr = (u_char *)dmi->dmi_addr + 5;
  1380. tdptr = (u_char *)&ep->sen_taddrh;
  1381. for (j=0; j<6; j++)
  1382. *tdptr++ = *mcptr--;
  1383. /* Ask CPM to run CRC and set bit in
  1384.  * filter mask.
  1385.  */
  1386. cpmp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SCC1, CPM_CR_SET_GADDR) | CPM_CR_FLG;
  1387. /* this delay is necessary here -- Cort */
  1388. udelay(10);
  1389. while (cpmp->cp_cpcr & CPM_CR_FLG);
  1390. }
  1391. }
  1392. #endif
  1393. }
  1394. }
  1395. /* Initialize the FEC Ethernet on 860T.
  1396.  */
  1397. int __init fec_enet_init(void)
  1398. {
  1399. struct net_device *dev;
  1400. struct fec_enet_private *fep;
  1401. int i, j;
  1402. unsigned char *eap, *iap;
  1403. unsigned long mem_addr;
  1404. pte_t *pte;
  1405. volatile cbd_t *bdp;
  1406. cbd_t *cbd_base;
  1407. volatile immap_t *immap;
  1408. volatile fec_t *fecp;
  1409. bd_t *bd;
  1410. #ifdef CONFIG_SCC_ENET
  1411. unsigned char tmpaddr[6];
  1412. #endif
  1413. immap = (immap_t *)IMAP_ADDR; /* pointer to internal registers */
  1414. bd = (bd_t *)__res;
  1415. /* Allocate some private information.
  1416. */
  1417. fep = (struct fec_enet_private *)kmalloc(sizeof(*fep), GFP_KERNEL);
  1418. if (fep == NULL)
  1419. return -ENOMEM;
  1420. __clear_user(fep,sizeof(*fep));
  1421. /* Create an Ethernet device instance.
  1422. */
  1423. dev = init_etherdev(0, 0);
  1424. fecp = &(immap->im_cpm.cp_fec);
  1425. /* Whack a reset.  We should wait for this.
  1426. */
  1427. fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;
  1428. for (i = 0;
  1429.      (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);
  1430.      ++i) {
  1431. udelay(1);
  1432. }
  1433. if (i == FEC_RESET_DELAY) {
  1434. printk ("FEC Reset timeout!n");
  1435. }
  1436. /* Set the Ethernet address.  If using multiple Enets on the 8xx,
  1437.  * this needs some work to get unique addresses.
  1438.  */
  1439. eap = (unsigned char *)my_enet_addr;
  1440. iap = bd->bi_enetaddr;
  1441. #ifdef CONFIG_SCC_ENET
  1442. /*
  1443.          * If a board has Ethernet configured both on a SCC and the
  1444.          * FEC, it needs (at least) 2 MAC addresses (we know that Sun
  1445.          * disagrees, but anyway). For the FEC port, we create
  1446.          * another address by setting one of the address bits above
  1447.          * something that would have (up to now) been allocated.
  1448.  */
  1449. for (i=0; i<6; i++)
  1450. tmpaddr[i] = *iap++;
  1451. tmpaddr[3] |= 0x80;
  1452. iap = tmpaddr;
  1453. #endif
  1454. for (i=0; i<6; i++) {
  1455. dev->dev_addr[i] = *eap++ = *iap++;
  1456. }
  1457. /* Allocate memory for buffer descriptors.
  1458. */
  1459. if (((RX_RING_SIZE + TX_RING_SIZE) * sizeof(cbd_t)) > PAGE_SIZE) {
  1460. printk("FEC init error.  Need more space.n");
  1461. printk("FEC initialization failed.n");
  1462. return 1;
  1463. }
  1464. mem_addr = __get_free_page(GFP_KERNEL);
  1465. cbd_base = (cbd_t *)mem_addr;
  1466. /* Make it uncached.
  1467. */
  1468. pte = va_to_pte(mem_addr);
  1469. pte_val(*pte) |= _PAGE_NO_CACHE;
  1470. flush_tlb_page(init_mm.mmap, mem_addr);
  1471. /* Set receive and transmit descriptor base.
  1472. */
  1473. fep->rx_bd_base = cbd_base;
  1474. fep->tx_bd_base = cbd_base + RX_RING_SIZE;
  1475. fep->skb_cur = fep->skb_dirty = 0;
  1476. /* Initialize the receive buffer descriptors.
  1477. */
  1478. bdp = fep->rx_bd_base;
  1479. for (i=0; i<FEC_ENET_RX_PAGES; i++) {
  1480. /* Allocate a page.
  1481. */
  1482. mem_addr = __get_free_page(GFP_KERNEL);
  1483. /* Make it uncached.
  1484. */
  1485. pte = va_to_pte(mem_addr);
  1486. pte_val(*pte) |= _PAGE_NO_CACHE;
  1487. flush_tlb_page(init_mm.mmap, mem_addr);
  1488. /* Initialize the BD for every fragment in the page.
  1489. */
  1490. for (j=0; j<FEC_ENET_RX_FRPPG; j++) {
  1491. bdp->cbd_sc = BD_ENET_RX_EMPTY;
  1492. bdp->cbd_bufaddr = __pa(mem_addr);
  1493. mem_addr += FEC_ENET_RX_FRSIZE;
  1494. bdp++;
  1495. }
  1496. }
  1497. /* Set the last buffer to wrap.
  1498. */
  1499. bdp--;
  1500. bdp->cbd_sc |= BD_SC_WRAP;
  1501. /* Install our interrupt handler. */
  1502. if (request_8xxirq(FEC_INTERRUPT, fec_enet_interrupt, 0, "fec", dev) != 0)
  1503. panic("Could not allocate FEC IRQ!");
  1504. #ifdef CONFIG_RPXCLASSIC
  1505. /* Make Port C, bit 15 an input that causes interrupts.
  1506. */
  1507. immap->im_ioport.iop_pcpar &= ~0x0001;
  1508. immap->im_ioport.iop_pcdir &= ~0x0001;
  1509. immap->im_ioport.iop_pcso  &= ~0x0001;
  1510. immap->im_ioport.iop_pcint |=  0x0001;
  1511. cpm_install_handler(CPMVEC_PIO_PC15, mii_link_interrupt, dev);
  1512. /* Make LEDS reflect Link status.
  1513. */
  1514. *((uint *) RPX_CSR_ADDR) &= ~BCSR2_FETHLEDMODE;
  1515. #endif
  1516. #ifdef PHY_INTERRUPT
  1517. ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_siel |=
  1518. (0x80000000 >> PHY_INTERRUPT);
  1519. if (request_8xxirq(PHY_INTERRUPT, mii_link_interrupt, 0, "mii", dev) != 0)
  1520. panic("Could not allocate MII IRQ!");
  1521. #endif
  1522. dev->base_addr = (unsigned long)fecp;
  1523. dev->priv = fep;
  1524. /* The FEC Ethernet specific entries in the device structure. */
  1525. dev->open = fec_enet_open;
  1526. dev->hard_start_xmit = fec_enet_start_xmit;
  1527. dev->tx_timeout = fec_timeout;
  1528. dev->watchdog_timeo = TX_TIMEOUT;
  1529. dev->stop = fec_enet_close;
  1530. dev->get_stats = fec_enet_get_stats;
  1531. dev->set_multicast_list = set_multicast_list;
  1532. #ifdef CONFIG_USE_MDIO
  1533. dev->do_ioctl = fec_enet_ioctl;
  1534. for (i=0; i<NMII-1; i++)
  1535. mii_cmds[i].mii_next = &mii_cmds[i+1];
  1536. mii_free = mii_cmds;
  1537. #endif /* CONFIG_USE_MDIO */
  1538. /* Configure all of port D for MII.
  1539. */
  1540. immap->im_ioport.iop_pdpar = 0x1fff;
  1541. /* Bits moved from Rev. D onward.
  1542. */
  1543. if ((mfspr(IMMR) & 0xffff) < 0x0501)
  1544. immap->im_ioport.iop_pddir = 0x1c58; /* Pre rev. D */
  1545. else
  1546. immap->im_ioport.iop_pddir = 0x1fff; /* Rev. D and later */
  1547. #ifdef CONFIG_USE_MDIO
  1548. /* Set MII speed to 2.5 MHz
  1549. */
  1550. fecp->fec_mii_speed = fep->phy_speed =
  1551. (( (bd->bi_intfreq + 500000) / 2500000 / 2 ) & 0x3F ) << 1;
  1552. #else
  1553. fecp->fec_mii_speed = 0; /* turn off MDIO */
  1554. #endif /* CONFIG_USE_MDIO */
  1555. printk ("%s: FEC ENET Version 0.2, FEC irq %d"
  1556. #ifdef PHY_INTERRUPT
  1557. ", MII irq %d"
  1558. #endif
  1559. ", addr ",
  1560. dev->name, FEC_INTERRUPT
  1561. #ifdef PHY_INTERRUPT
  1562. , PHY_INTERRUPT
  1563. #endif
  1564. );
  1565. for (i=0; i<6; i++)
  1566. printk("%02x%c", dev->dev_addr[i], (i==5) ? 'n' : ':');
  1567. #ifdef CONFIG_USE_MDIO /* start in full duplex mode, and negotiate speed */
  1568. fec_restart (dev, 1);
  1569. #else /* always use half duplex mode only */
  1570. fec_restart (dev, 0);
  1571. #endif
  1572. #ifdef CONFIG_USE_MDIO
  1573. /* Queue up command to detect the PHY and initialize the
  1574.  * remainder of the interface.
  1575.  */
  1576. fep->phy_id_done = 0;
  1577. fep->phy_addr = 0;
  1578. mii_queue(dev, mk_mii_read(MII_REG_PHYIR1), mii_discover_phy, 0);
  1579. #endif /* CONFIG_USE_MDIO */
  1580. fep->old_status = 0;
  1581. return 0;
  1582. }
  1583. /* This function is called to start or restart the FEC during a link
  1584.  * change.  This only happens when switching between half and full
  1585.  * duplex.
  1586.  */
  1587. static void
  1588. fec_restart(struct net_device *dev, int duplex)
  1589. {
  1590. struct fec_enet_private *fep;
  1591. int i;
  1592. volatile cbd_t *bdp;
  1593. volatile immap_t *immap;
  1594. volatile fec_t *fecp;
  1595. immap = (immap_t *)IMAP_ADDR; /* pointer to internal registers */
  1596. fecp = &(immap->im_cpm.cp_fec);
  1597. fep = dev->priv;
  1598. /* Whack a reset.  We should wait for this.
  1599. */
  1600. fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;
  1601. for (i = 0;
  1602.      (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);
  1603.      ++i) {
  1604. udelay(1);
  1605. }
  1606. if (i == FEC_RESET_DELAY) {
  1607. printk ("FEC Reset timeout!n");
  1608. }
  1609. /* Set station address.
  1610. */
  1611. fecp->fec_addr_low  = (my_enet_addr[0] << 16) | my_enet_addr[1];
  1612. fecp->fec_addr_high =  my_enet_addr[2];
  1613. /* Reset all multicast.
  1614. */
  1615. fecp->fec_hash_table_high = 0;
  1616. fecp->fec_hash_table_low  = 0;
  1617. /* Set maximum receive buffer size.
  1618. */
  1619. fecp->fec_r_buff_size = PKT_MAXBLR_SIZE;
  1620. fecp->fec_r_hash = PKT_MAXBUF_SIZE;
  1621. /* Set receive and transmit descriptor base.
  1622. */
  1623. fecp->fec_r_des_start = __pa((uint)(fep->rx_bd_base));
  1624. fecp->fec_x_des_start = __pa((uint)(fep->tx_bd_base));
  1625. fep->dirty_tx = fep->cur_tx = fep->tx_bd_base;
  1626. fep->cur_rx = fep->rx_bd_base;
  1627. /* Reset SKB transmit buffers.
  1628. */
  1629. fep->skb_cur = fep->skb_dirty = 0;
  1630. for (i=0; i<=TX_RING_MOD_MASK; i++) {
  1631. if (fep->tx_skbuff[i] != NULL) {
  1632. dev_kfree_skb(fep->tx_skbuff[i]);
  1633. fep->tx_skbuff[i] = NULL;
  1634. }
  1635. }
  1636. /* Initialize the receive buffer descriptors.
  1637. */
  1638. bdp = fep->rx_bd_base;
  1639. for (i=0; i<RX_RING_SIZE; i++) {
  1640. /* Initialize the BD for every fragment in the page.
  1641. */
  1642. bdp->cbd_sc = BD_ENET_RX_EMPTY;
  1643. bdp++;
  1644. }
  1645. /* Set the last buffer to wrap.
  1646. */
  1647. bdp--;
  1648. bdp->cbd_sc |= BD_SC_WRAP;
  1649. /* ...and the same for transmmit.
  1650. */
  1651. bdp = fep->tx_bd_base;
  1652. for (i=0; i<TX_RING_SIZE; i++) {
  1653. /* Initialize the BD for every fragment in the page.
  1654. */
  1655. bdp->cbd_sc = 0;
  1656. bdp->cbd_bufaddr = 0;
  1657. bdp++;
  1658. }
  1659. /* Set the last buffer to wrap.
  1660. */
  1661. bdp--;
  1662. bdp->cbd_sc |= BD_SC_WRAP;
  1663. /* Enable MII mode.
  1664. */
  1665. if (duplex) {
  1666. fecp->fec_r_cntrl = FEC_RCNTRL_MII_MODE; /* MII enable */
  1667. fecp->fec_x_cntrl = FEC_TCNTRL_FDEN; /* FD enable */
  1668. }
  1669. else {
  1670. fecp->fec_r_cntrl = FEC_RCNTRL_MII_MODE | FEC_RCNTRL_DRT;
  1671. fecp->fec_x_cntrl = 0;
  1672. }
  1673. fep->full_duplex = duplex;
  1674. /* Enable big endian and don't care about SDMA FC.
  1675. */
  1676. fecp->fec_fun_code = 0x78000000;
  1677. #ifdef CONFIG_USE_MDIO
  1678. /* Set MII speed.
  1679. */
  1680. fecp->fec_mii_speed = fep->phy_speed;
  1681. #endif /* CONFIG_USE_MDIO */
  1682. /* Clear any outstanding interrupt.
  1683. */
  1684. fecp->fec_ievent = 0xffc0;
  1685. fecp->fec_ivec = (FEC_INTERRUPT/2) << 29;
  1686. /* Enable interrupts we wish to service.
  1687. */
  1688. fecp->fec_imask = ( FEC_ENET_TXF | FEC_ENET_TXB |
  1689.     FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII );
  1690. /* And last, enable the transmit and receive processing.
  1691. */
  1692. fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN;
  1693. fecp->fec_r_des_active = 0x01000000;
  1694. /* The tx ring is no longer full. */
  1695. if(fep->tx_full)
  1696. {
  1697. fep->tx_full = 0;
  1698. netif_wake_queue(dev);
  1699. }
  1700. }
  1701. static void
  1702. fec_stop(struct net_device *dev)
  1703. {
  1704. volatile immap_t *immap;
  1705. volatile fec_t *fecp;
  1706. struct fec_enet_private *fep;
  1707. int i;
  1708. immap = (immap_t *)IMAP_ADDR; /* pointer to internal registers */
  1709. fecp = &(immap->im_cpm.cp_fec);
  1710. if ((fecp->fec_ecntrl & FEC_ECNTRL_ETHER_EN) == 0)
  1711. return; /* already down */
  1712. fep = dev->priv;
  1713. fecp->fec_x_cntrl = 0x01; /* Graceful transmit stop */
  1714. for (i = 0;
  1715.      ((fecp->fec_ievent & 0x10000000) == 0) && (i < FEC_RESET_DELAY);
  1716.      ++i) {
  1717. udelay(1);
  1718. }
  1719. if (i == FEC_RESET_DELAY) {
  1720. printk ("FEC timeout on graceful transmit stopn");
  1721. }
  1722. /* Clear outstanding MII command interrupts.
  1723. */
  1724. fecp->fec_ievent = FEC_ENET_MII;
  1725. /* Enable MII command finished interrupt
  1726. */
  1727. fecp->fec_ivec = (FEC_INTERRUPT/2) << 29;
  1728. fecp->fec_imask = FEC_ENET_MII;
  1729. #ifdef CONFIG_USE_MDIO
  1730. /* Set MII speed.
  1731. */
  1732. fecp->fec_mii_speed = fep->phy_speed;
  1733. #endif /* CONFIG_USE_MDIO */
  1734. /* Disable FEC
  1735. */
  1736. fecp->fec_ecntrl &= ~(FEC_ECNTRL_ETHER_EN);
  1737. }