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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.fcc_enet.c 1.7 05/17/01 18:14:20 cort
  3.  */
  4. /*
  5.  * Fast Ethernet Controller (FCC) driver for Motorola MPC8260.
  6.  * Copyright (c) 2000 MontaVista Software, Inc.   Dan Malek (dmalek@jlc.net)
  7.  *
  8.  * This version of the driver is a combination of the 8xx fec and
  9.  * 8260 SCC Ethernet drivers.  People seem to be choosing common I/O
  10.  * configurations, so this driver will work on the EST8260 boards and
  11.  * others yet to be announced.
  12.  *
  13.  * Right now, I am very watseful with the buffers.  I allocate memory
  14.  * pages and then divide them into 2K frame buffers.  This way I know I
  15.  * have buffers large enough to hold one frame within one buffer descriptor.
  16.  * Once I get this working, I will use 64 or 128 byte CPM buffers, which
  17.  * will be much more memory efficient and will easily handle lots of
  18.  * small packets.
  19.  *
  20.  */
  21. #include <linux/config.h>
  22. #include <linux/kernel.h>
  23. #include <linux/sched.h>
  24. #include <linux/string.h>
  25. #include <linux/ptrace.h>
  26. #include <linux/errno.h>
  27. #include <linux/ioport.h>
  28. #include <linux/slab.h>
  29. #include <linux/interrupt.h>
  30. #include <linux/pci.h>
  31. #include <linux/init.h>
  32. #include <linux/delay.h>
  33. #include <linux/netdevice.h>
  34. #include <linux/etherdevice.h>
  35. #include <linux/skbuff.h>
  36. #include <linux/spinlock.h>
  37. #include <asm/immap_8260.h>
  38. #include <asm/pgtable.h>
  39. #include <asm/mpc8260.h>
  40. #include <asm/irq.h>
  41. #include <asm/bitops.h>
  42. #include <asm/uaccess.h>
  43. #include <asm/cpm_8260.h>
  44. /* The transmitter timeout
  45.  */
  46. #define TX_TIMEOUT (2*HZ)
  47. /* The number of Tx and Rx buffers.  These are allocated from the page
  48.  * pool.  The code may assume these are power of two, so it is best
  49.  * to keep them that size.
  50.  * We don't need to allocate pages for the transmitter.  We just use
  51.  * the skbuffer directly.
  52.  */
  53. #define FCC_ENET_RX_PAGES 16
  54. #define FCC_ENET_RX_FRSIZE 2048
  55. #define FCC_ENET_RX_FRPPG (PAGE_SIZE / FCC_ENET_RX_FRSIZE)
  56. #define RX_RING_SIZE (FCC_ENET_RX_FRPPG * FCC_ENET_RX_PAGES)
  57. #define TX_RING_SIZE 16 /* Must be power of two */
  58. #define TX_RING_MOD_MASK 15 /*   for this to work */
  59. /* The FCC stores dest/src/type, data, and checksum for receive packets.
  60.  */
  61. #define PKT_MAXBUF_SIZE 1518
  62. #define PKT_MINBUF_SIZE 64
  63. /* Maximum input DMA size.  Must be a should(?) be a multiple of 4.
  64. */
  65. #define PKT_MAXDMA_SIZE 1520
  66. /* Maximum input buffer size.  Must be a multiple of 32.
  67. */
  68. #define PKT_MAXBLR_SIZE 1536
  69. static int fcc_enet_open(struct net_device *dev);
  70. static int fcc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev);
  71. static int fcc_enet_rx(struct net_device *dev);
  72. static void fcc_enet_mii(struct net_device *dev);
  73. static void fcc_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs);
  74. static int fcc_enet_close(struct net_device *dev);
  75. static struct net_device_stats *fcc_enet_get_stats(struct net_device *dev);
  76. static void set_multicast_list(struct net_device *dev);
  77. static void restart_fcc(struct net_device *dev);
  78. /* These will be configurable for the FCC choice.
  79.  * Multiple ports can be configured.  There is little choice among the
  80.  * I/O pins to the PHY, except the clocks.  We will need some board
  81.  * dependent clock selection.
  82.  * Why in the hell did I put these inside #ifdef's?  I dunno, maybe to
  83.  * help show what pins are used for each device.
  84.  */
  85. /* I/O Pin assignment for FCC1.  I don't yet know the best way to do this,
  86.  * but there is little variation among the choices.
  87.  */
  88. #define PA1_COL ((uint)0x00000001)
  89. #define PA1_CRS ((uint)0x00000002)
  90. #define PA1_TXER ((uint)0x00000004)
  91. #define PA1_TXEN ((uint)0x00000008)
  92. #define PA1_RXDV ((uint)0x00000010)
  93. #define PA1_RXER ((uint)0x00000020)
  94. #define PA1_TXDAT ((uint)0x00003c00)
  95. #define PA1_RXDAT ((uint)0x0003c000)
  96. #define PA1_PSORA0 (PA1_RXDAT | PA1_TXDAT)
  97. #define PA1_PSORA1 (PA1_COL | PA1_CRS | PA1_TXER | PA1_TXEN | 
  98. PA1_RXDV | PA1_RXER)
  99. #define PA1_DIRA0 (PA1_RXDAT | PA1_CRS | PA1_COL | PA1_RXER | PA1_RXDV)
  100. #define PA1_DIRA1 (PA1_TXDAT | PA1_TXEN | PA1_TXER)
  101. /* CLK12 is receive, CLK11 is transmit.  These are board specific.
  102. */
  103. #define PC_F1RXCLK ((uint)0x00000800)
  104. #define PC_F1TXCLK ((uint)0x00000400)
  105. #define CMX1_CLK_ROUTE ((uint)0x3e000000)
  106. #define CMX1_CLK_MASK ((uint)0xff000000)
  107. /* I/O Pin assignment for FCC2.  I don't yet know the best way to do this,
  108.  * but there is little variation among the choices.
  109.  */
  110. #define PB2_TXER ((uint)0x00000001)
  111. #define PB2_RXDV ((uint)0x00000002)
  112. #define PB2_TXEN ((uint)0x00000004)
  113. #define PB2_RXER ((uint)0x00000008)
  114. #define PB2_COL ((uint)0x00000010)
  115. #define PB2_CRS ((uint)0x00000020)
  116. #define PB2_TXDAT ((uint)0x000003c0)
  117. #define PB2_RXDAT ((uint)0x00003c00)
  118. #define PB2_PSORB0 (PB2_RXDAT | PB2_TXDAT | PB2_CRS | PB2_COL | 
  119. PB2_RXER | PB2_RXDV | PB2_TXER)
  120. #define PB2_PSORB1 (PB2_TXEN)
  121. #define PB2_DIRB0 (PB2_RXDAT | PB2_CRS | PB2_COL | PB2_RXER | PB2_RXDV)
  122. #define PB2_DIRB1 (PB2_TXDAT | PB2_TXEN | PB2_TXER)
  123. /* CLK13 is receive, CLK14 is transmit.  These are board dependent.
  124. */
  125. #define PC_F2RXCLK ((uint)0x00001000)
  126. #define PC_F2TXCLK ((uint)0x00002000)
  127. #define CMX2_CLK_ROUTE ((uint)0x00250000)
  128. #define CMX2_CLK_MASK ((uint)0x00ff0000)
  129. /* I/O Pin assignment for FCC3.  I don't yet know the best way to do this,
  130.  * but there is little variation among the choices.
  131.  */
  132. #define PB3_RXDV ((uint)0x00004000)
  133. #define PB3_RXER ((uint)0x00008000)
  134. #define PB3_TXER ((uint)0x00010000)
  135. #define PB3_TXEN ((uint)0x00020000)
  136. #define PB3_COL ((uint)0x00040000)
  137. #define PB3_CRS ((uint)0x00080000)
  138. #define PB3_TXDAT ((uint)0x0f000000)
  139. #define PB3_RXDAT ((uint)0x00f00000)
  140. #define PB3_PSORB0 (PB3_RXDAT | PB3_TXDAT | PB3_CRS | PB3_COL | 
  141. PB3_RXER | PB3_RXDV | PB3_TXER | PB3_TXEN)
  142. #define PB3_PSORB1 (0)
  143. #define PB3_DIRB0 (PB3_RXDAT | PB3_CRS | PB3_COL | PB3_RXER | PB3_RXDV)
  144. #define PB3_DIRB1 (PB3_TXDAT | PB3_TXEN | PB3_TXER)
  145. /* CLK15 is receive, CLK16 is transmit.  These are board dependent.
  146. */
  147. #define PC_F3RXCLK ((uint)0x00004000)
  148. #define PC_F3TXCLK ((uint)0x00008000)
  149. #define CMX3_CLK_ROUTE ((uint)0x00003700)
  150. #define CMX3_CLK_MASK ((uint)0x0000ff00)
  151. /* MII status/control serial interface.
  152. */
  153. #define PC_MDIO ((uint)0x00400000)
  154. #define PC_MDCK ((uint)0x00200000)
  155. /* A table of information for supporting FCCs.  This does two things.
  156.  * First, we know how many FCCs we have and they are always externally
  157.  * numbered from zero.  Second, it holds control register and I/O
  158.  * information that could be different among board designs.
  159.  */
  160. typedef struct fcc_info {
  161. uint fc_fccnum;
  162. uint fc_cpmblock;
  163. uint fc_cpmpage;
  164. uint fc_proff;
  165. uint fc_interrupt;
  166. uint fc_trxclocks;
  167. uint fc_clockroute;
  168. uint fc_clockmask;
  169. uint fc_mdio;
  170. uint fc_mdck;
  171. } fcc_info_t;
  172. static fcc_info_t fcc_ports[] = {
  173. #ifdef CONFIG_FCC1_ENET
  174. { 0, CPM_CR_FCC1_SBLOCK, CPM_CR_FCC1_PAGE, PROFF_FCC1, SIU_INT_FCC1,
  175. (PC_F1RXCLK | PC_F1TXCLK), CMX1_CLK_ROUTE, CMX1_CLK_MASK,
  176. PC_MDIO, PC_MDCK },
  177. #endif
  178. #ifdef CONFIG_FCC2_ENET
  179. { 1, CPM_CR_FCC2_SBLOCK, CPM_CR_FCC2_PAGE, PROFF_FCC2, SIU_INT_FCC2,
  180. (PC_F2RXCLK | PC_F2TXCLK), CMX2_CLK_ROUTE, CMX2_CLK_MASK,
  181. PC_MDIO, PC_MDCK },
  182. #endif
  183. #ifdef CONFIG_FCC3_ENET
  184. { 2, CPM_CR_FCC3_SBLOCK, CPM_CR_FCC3_PAGE, PROFF_FCC3, SIU_INT_FCC3,
  185. (PC_F3RXCLK | PC_F3TXCLK), CMX3_CLK_ROUTE, CMX3_CLK_MASK,
  186. PC_MDIO, PC_MDCK },
  187. #endif
  188. };
  189. /* The FCC buffer descriptors track the ring buffers.  The rx_bd_base and
  190.  * tx_bd_base always point to the base of the buffer descriptors.  The
  191.  * cur_rx and cur_tx point to the currently available buffer.
  192.  * The dirty_tx tracks the current buffer that is being sent by the
  193.  * controller.  The cur_tx and dirty_tx are equal under both completely
  194.  * empty and completely full conditions.  The empty/ready indicator in
  195.  * the buffer descriptor determines the actual condition.
  196.  */
  197. struct fcc_enet_private {
  198. /* The saved address of a sent-in-place packet/buffer, for skfree(). */
  199. struct sk_buff* tx_skbuff[TX_RING_SIZE];
  200. ushort skb_cur;
  201. ushort skb_dirty;
  202. /* CPM dual port RAM relative addresses.
  203. */
  204. cbd_t *rx_bd_base; /* Address of Rx and Tx buffers. */
  205. cbd_t *tx_bd_base;
  206. cbd_t *cur_rx, *cur_tx; /* The next free ring entry */
  207. cbd_t *dirty_tx; /* The ring entries to be free()ed. */
  208. volatile fcc_t *fccp;
  209. volatile fcc_enet_t *ep;
  210. struct net_device_stats stats;
  211. uint tx_full;
  212. spinlock_t lock;
  213. uint phy_address;
  214. uint phy_type;
  215. uint phy_duplex;
  216. fcc_info_t *fip;
  217. };
  218. static void init_fcc_shutdown(fcc_info_t *fip, struct fcc_enet_private *cep,
  219. volatile immap_t *immap);
  220. static void init_fcc_startup(fcc_info_t *fip, struct net_device *dev);
  221. static void init_fcc_ioports(fcc_info_t *fip, volatile iop8260_t *io,
  222. volatile immap_t *immap);
  223. static void init_fcc_param(fcc_info_t *fip, struct net_device *dev,
  224. volatile immap_t *immap);
  225. /* MII processing.  We keep this as simple as possible.  Requests are
  226.  * placed on the list (if there is room).  When the request is finished
  227.  * by the MII, an optional function may be called.
  228.  */
  229. typedef struct mii_list {
  230. uint mii_regval;
  231. void (*mii_func)(uint val, struct net_device *dev);
  232. struct mii_list *mii_next;
  233. } mii_list_t;
  234. #define NMII 20
  235. mii_list_t mii_cmds[NMII];
  236. mii_list_t *mii_free;
  237. mii_list_t *mii_head;
  238. mii_list_t *mii_tail;
  239. static int phyaddr;
  240. static uint phytype;
  241. static int mii_queue(int request, void (*func)(uint, struct net_device *));
  242. static void mii_startup_cmds(void);
  243. static uint mii_send_receive(fcc_info_t *fip, uint cmd);
  244. /* Make MII read/write commands for the FCC.
  245. */
  246. #define mk_mii_phyaddr(ADDR) (0x60020000 | ((ADDR) << 23) | (2 << 18))
  247. #define mk_mii_read(REG) (0x60020000 | ((phyaddr << 23) | 
  248. (REG & 0x1f) << 18))
  249. #define mk_mii_write(REG, VAL) (0x50020000 | ((phyaddr << 23) | 
  250. (REG & 0x1f) << 18) | 
  251. (VAL & 0xffff))
  252. static int
  253. fcc_enet_open(struct net_device *dev)
  254. {
  255. netif_start_queue(dev);
  256. return 0; /* Always succeed */
  257. }
  258. static int
  259. fcc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
  260. {
  261. struct fcc_enet_private *cep = (struct fcc_enet_private *)dev->priv;
  262. volatile cbd_t *bdp;
  263. /* Fill in a Tx ring entry */
  264. bdp = cep->cur_tx;
  265. #ifndef final_version
  266. if (bdp->cbd_sc & BD_ENET_TX_READY) {
  267. /* Ooops.  All transmit buffers are full.  Bail out.
  268.  * This should not happen, since cep->tx_full should be set.
  269.  */
  270. printk("%s: tx queue full!.n", dev->name);
  271. return 1;
  272. }
  273. #endif
  274. /* Clear all of the status flags.
  275.  */
  276. bdp->cbd_sc &= ~BD_ENET_TX_STATS;
  277. /* If the frame is short, tell CPM to pad it.
  278. */
  279. if (skb->len <= ETH_ZLEN)
  280. bdp->cbd_sc |= BD_ENET_TX_PAD;
  281. else
  282. bdp->cbd_sc &= ~BD_ENET_TX_PAD;
  283. /* Set buffer length and buffer pointer.
  284. */
  285. bdp->cbd_datlen = skb->len;
  286. bdp->cbd_bufaddr = __pa(skb->data);
  287. /* Save skb pointer.
  288. */
  289. cep->tx_skbuff[cep->skb_cur] = skb;
  290. cep->stats.tx_bytes += skb->len;
  291. cep->skb_cur = (cep->skb_cur+1) & TX_RING_MOD_MASK;
  292. spin_lock_irq(&cep->lock);
  293. /* Send it on its way.  Tell CPM its ready, interrupt when done,
  294.  * its the last BD of the frame, and to put the CRC on the end.
  295.  */
  296. bdp->cbd_sc |= (BD_ENET_TX_READY | BD_ENET_TX_INTR | BD_ENET_TX_LAST | BD_ENET_TX_TC);
  297. #if 0
  298. /* Errata says don't do this.
  299. */
  300. cep->fccp->fcc_ftodr = 0x8000;
  301. #endif
  302. dev->trans_start = jiffies;
  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 = cep->tx_bd_base;
  307. else
  308. bdp++;
  309. if (bdp->cbd_sc & BD_ENET_TX_READY) {
  310. netif_stop_queue(dev);
  311. cep->tx_full = 1;
  312. }
  313. cep->cur_tx = (cbd_t *)bdp;
  314. spin_unlock_irq(&cep->lock);
  315. return 0;
  316. }
  317. static void
  318. fcc_enet_timeout(struct net_device *dev)
  319. {
  320. struct fcc_enet_private *cep = (struct fcc_enet_private *)dev->priv;
  321. printk("%s: transmit timed out.n", dev->name);
  322. cep->stats.tx_errors++;
  323. #ifndef final_version
  324. {
  325. int i;
  326. cbd_t *bdp;
  327. printk(" Ring data dump: cur_tx %p%s cur_rx %p.n",
  328.        cep->cur_tx, cep->tx_full ? " (full)" : "",
  329.        cep->cur_rx);
  330. bdp = cep->tx_bd_base;
  331. printk(" Tx @base %p :n", bdp);
  332. for (i = 0 ; i < TX_RING_SIZE; i++, bdp++)
  333. printk("%04x %04x %08xn",
  334.        bdp->cbd_sc,
  335.        bdp->cbd_datlen,
  336.        bdp->cbd_bufaddr);
  337. bdp = cep->rx_bd_base;
  338. printk(" Rx @base %p :n", bdp);
  339. for (i = 0 ; i < RX_RING_SIZE; i++, bdp++)
  340. printk("%04x %04x %08xn",
  341.        bdp->cbd_sc,
  342.        bdp->cbd_datlen,
  343.        bdp->cbd_bufaddr);
  344. }
  345. #endif
  346. if (!cep->tx_full)
  347. netif_wake_queue(dev);
  348. }
  349. /* The interrupt handler.
  350.  */
  351. static void
  352. fcc_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs)
  353. {
  354. struct net_device *dev = dev_id;
  355. volatile struct fcc_enet_private *cep;
  356. volatile cbd_t *bdp;
  357. ushort int_events;
  358. int must_restart;
  359. cep = (struct fcc_enet_private *)dev->priv;
  360. /* Get the interrupt events that caused us to be here.
  361. */
  362. int_events = cep->fccp->fcc_fcce;
  363. cep->fccp->fcc_fcce = int_events;
  364. must_restart = 0;
  365. /* Handle receive event in its own function.
  366. */
  367. if (int_events & FCC_ENET_RXF)
  368. fcc_enet_rx(dev_id);
  369. /* Check for a transmit error.  The manual is a little unclear
  370.  * about this, so the debug code until I get it figured out.  It
  371.  * appears that if TXE is set, then TXB is not set.  However,
  372.  * if carrier sense is lost during frame transmission, the TXE
  373.  * bit is set, "and continues the buffer transmission normally."
  374.  * I don't know if "normally" implies TXB is set when the buffer
  375.  * descriptor is closed.....trial and error :-).
  376.  */
  377. /* Transmit OK, or non-fatal error.  Update the buffer descriptors.
  378. */
  379. if (int_events & (FCC_ENET_TXE | FCC_ENET_TXB)) {
  380.     spin_lock(&cep->lock);
  381.     bdp = cep->dirty_tx;
  382.     while ((bdp->cbd_sc&BD_ENET_TX_READY)==0) {
  383. if ((bdp==cep->cur_tx) && (cep->tx_full == 0))
  384.     break;
  385. if (bdp->cbd_sc & BD_ENET_TX_HB) /* No heartbeat */
  386. cep->stats.tx_heartbeat_errors++;
  387. if (bdp->cbd_sc & BD_ENET_TX_LC) /* Late collision */
  388. cep->stats.tx_window_errors++;
  389. if (bdp->cbd_sc & BD_ENET_TX_RL) /* Retrans limit */
  390. cep->stats.tx_aborted_errors++;
  391. if (bdp->cbd_sc & BD_ENET_TX_UN) /* Underrun */
  392. cep->stats.tx_fifo_errors++;
  393. if (bdp->cbd_sc & BD_ENET_TX_CSL) /* Carrier lost */
  394. cep->stats.tx_carrier_errors++;
  395. /* No heartbeat or Lost carrier are not really bad errors.
  396.  * The others require a restart transmit command.
  397.  */
  398. if (bdp->cbd_sc &
  399.     (BD_ENET_TX_LC | BD_ENET_TX_RL | BD_ENET_TX_UN)) {
  400. must_restart = 1;
  401. cep->stats.tx_errors++;
  402. }
  403. cep->stats.tx_packets++;
  404. /* Deferred means some collisions occurred during transmit,
  405.  * but we eventually sent the packet OK.
  406.  */
  407. if (bdp->cbd_sc & BD_ENET_TX_DEF)
  408. cep->stats.collisions++;
  409. /* Free the sk buffer associated with this last transmit.
  410. */
  411. dev_kfree_skb_irq(cep->tx_skbuff[cep->skb_dirty]);
  412. cep->skb_dirty = (cep->skb_dirty + 1) & TX_RING_MOD_MASK;
  413. /* Update pointer to next buffer descriptor to be transmitted.
  414. */
  415. if (bdp->cbd_sc & BD_ENET_TX_WRAP)
  416. bdp = cep->tx_bd_base;
  417. else
  418. bdp++;
  419. /* I don't know if we can be held off from processing these
  420.  * interrupts for more than one frame time.  I really hope
  421.  * not.  In such a case, we would now want to check the
  422.  * currently available BD (cur_tx) and determine if any
  423.  * buffers between the dirty_tx and cur_tx have also been
  424.  * sent.  We would want to process anything in between that
  425.  * does not have BD_ENET_TX_READY set.
  426.  */
  427. /* Since we have freed up a buffer, the ring is no longer
  428.  * full.
  429.  */
  430. if (cep->tx_full) {
  431. cep->tx_full = 0;
  432. if (netif_queue_stopped(dev)) {
  433. netif_wake_queue(dev);
  434. }
  435. }
  436. cep->dirty_tx = (cbd_t *)bdp;
  437.     }
  438.     if (must_restart) {
  439. volatile cpm8260_t *cp;
  440. /* Some transmit errors cause the transmitter to shut
  441.  * down.  We now issue a restart transmit.  Since the
  442.  * errors close the BD and update the pointers, the restart
  443.  * _should_ pick up without having to reset any of our
  444.  * pointers either.
  445.  */
  446. cp = cpmp;
  447. cp->cp_cpcr =
  448.     mk_cr_cmd(cep->fip->fc_cpmpage, cep->fip->fc_cpmblock,
  449.      0x0c, CPM_CR_RESTART_TX) | CPM_CR_FLG;
  450. while (cp->cp_cpcr & CPM_CR_FLG);
  451.     }
  452.     spin_unlock(&cep->lock);
  453. }
  454. /* Check for receive busy, i.e. packets coming but no place to
  455.  * put them.
  456.  */
  457. if (int_events & FCC_ENET_BSY) {
  458. cep->stats.rx_dropped++;
  459. }
  460. return;
  461. }
  462. /* During a receive, the cur_rx points to the current incoming buffer.
  463.  * When we update through the ring, if the next incoming buffer has
  464.  * not been given to the system, we just set the empty indicator,
  465.  * effectively tossing the packet.
  466.  */
  467. static int
  468. fcc_enet_rx(struct net_device *dev)
  469. {
  470. struct fcc_enet_private *cep;
  471. volatile cbd_t *bdp;
  472. struct sk_buff *skb;
  473. ushort pkt_len;
  474. cep = (struct fcc_enet_private *)dev->priv;
  475. /* First, grab all of the stats for the incoming packet.
  476.  * These get messed up if we get called due to a busy condition.
  477.  */
  478. bdp = cep->cur_rx;
  479. for (;;) {
  480. if (bdp->cbd_sc & BD_ENET_RX_EMPTY)
  481. break;
  482. #ifndef final_version
  483. /* Since we have allocated space to hold a complete frame, both
  484.  * the first and last indicators should be set.
  485.  */
  486. if ((bdp->cbd_sc & (BD_ENET_RX_FIRST | BD_ENET_RX_LAST)) !=
  487. (BD_ENET_RX_FIRST | BD_ENET_RX_LAST))
  488. printk("CPM ENET: rcv is not first+lastn");
  489. #endif
  490. /* Frame too long or too short.
  491. */
  492. if (bdp->cbd_sc & (BD_ENET_RX_LG | BD_ENET_RX_SH))
  493. cep->stats.rx_length_errors++;
  494. if (bdp->cbd_sc & BD_ENET_RX_NO) /* Frame alignment */
  495. cep->stats.rx_frame_errors++;
  496. if (bdp->cbd_sc & BD_ENET_RX_CR) /* CRC Error */
  497. cep->stats.rx_crc_errors++;
  498. if (bdp->cbd_sc & BD_ENET_RX_OV) /* FIFO overrun */
  499. cep->stats.rx_crc_errors++;
  500. /* Report late collisions as a frame error.
  501.  * On this error, the BD is closed, but we don't know what we
  502.  * have in the buffer.  So, just drop this frame on the floor.
  503.  */
  504. if (bdp->cbd_sc & BD_ENET_RX_CL) {
  505. cep->stats.rx_frame_errors++;
  506. }
  507. else {
  508. /* Process the incoming frame.
  509. */
  510. cep->stats.rx_packets++;
  511. pkt_len = bdp->cbd_datlen;
  512. cep->stats.rx_bytes += pkt_len;
  513. /* This does 16 byte alignment, much more than we need.
  514.  * The packet length includes FCS, but we don't want to
  515.  * include that when passing upstream as it messes up
  516.  * bridging applications.
  517.  */
  518. skb = dev_alloc_skb(pkt_len-4);
  519. if (skb == NULL) {
  520. printk("%s: Memory squeeze, dropping packet.n", dev->name);
  521. cep->stats.rx_dropped++;
  522. }
  523. else {
  524. skb->dev = dev;
  525. skb_put(skb,pkt_len-4); /* Make room */
  526. eth_copy_and_sum(skb,
  527. (unsigned char *)__va(bdp->cbd_bufaddr),
  528. pkt_len-4, 0);
  529. skb->protocol=eth_type_trans(skb,dev);
  530. netif_rx(skb);
  531. }
  532. }
  533. /* Clear the status flags for this buffer.
  534. */
  535. bdp->cbd_sc &= ~BD_ENET_RX_STATS;
  536. /* Mark the buffer empty.
  537. */
  538. bdp->cbd_sc |= BD_ENET_RX_EMPTY;
  539. /* Update BD pointer to next entry.
  540. */
  541. if (bdp->cbd_sc & BD_ENET_RX_WRAP)
  542. bdp = cep->rx_bd_base;
  543. else
  544. bdp++;
  545.    }
  546. cep->cur_rx = (cbd_t *)bdp;
  547. return 0;
  548. }
  549. static int
  550. fcc_enet_close(struct net_device *dev)
  551. {
  552. /* Don't know what to do yet.
  553. */
  554. netif_stop_queue(dev);
  555. return 0;
  556. }
  557. static struct net_device_stats *fcc_enet_get_stats(struct net_device *dev)
  558. {
  559. struct fcc_enet_private *cep = (struct fcc_enet_private *)dev->priv;
  560. return &cep->stats;
  561. }
  562. /* The MII is simulated from the 8xx FEC implementation.  The FCC
  563.  * is not responsible for the MII control/status interface.
  564.  */
  565. static void
  566. fcc_enet_mii(struct net_device *dev)
  567. {
  568. struct fcc_enet_private *fep;
  569. mii_list_t *mip;
  570. uint mii_reg;
  571. fep = (struct fcc_enet_private *)dev->priv;
  572. #if 0
  573. ep = &(((immap_t *)IMAP_ADDR)->im_cpm.cp_fec);
  574. mii_reg = ep->fec_mii_data;
  575. #endif
  576. if ((mip = mii_head) == NULL) {
  577. printk("MII and no head!n");
  578. return;
  579. }
  580. if (mip->mii_func != NULL)
  581. (*(mip->mii_func))(mii_reg, dev);
  582. mii_head = mip->mii_next;
  583. mip->mii_next = mii_free;
  584. mii_free = mip;
  585. #if 0
  586. if ((mip = mii_head) != NULL)
  587. ep->fec_mii_data = mip->mii_regval;
  588. #endif
  589. }
  590. static int
  591. mii_queue(int regval, void (*func)(uint, struct net_device *))
  592. {
  593. unsigned long flags;
  594. mii_list_t *mip;
  595. int retval;
  596. retval = 0;
  597. save_flags(flags);
  598. cli();
  599. if ((mip = mii_free) != NULL) {
  600. mii_free = mip->mii_next;
  601. mip->mii_regval = regval;
  602. mip->mii_func = func;
  603. mip->mii_next = NULL;
  604. if (mii_head) {
  605. mii_tail->mii_next = mip;
  606. mii_tail = mip;
  607. }
  608. else {
  609. mii_head = mii_tail = mip;
  610. #if 0
  611. (&(((immap_t *)IMAP_ADDR)->im_cpm.cp_fec))->fec_mii_data = regval;
  612. #endif
  613. }
  614. }
  615. else {
  616. retval = 1;
  617. }
  618. restore_flags(flags);
  619. return(retval);
  620. }
  621. static volatile uint full_duplex;
  622. static void
  623. mii_status(uint mii_reg, struct net_device *dev)
  624. {
  625. volatile uint prev_duplex;
  626. if (((mii_reg >> 18) & 0x1f) == 1) {
  627. /* status register.
  628. */
  629. printk("fec: ");
  630. if (mii_reg & 0x0004)
  631. printk("link up");
  632. else
  633. printk("link down");
  634. if (mii_reg & 0x0010)
  635. printk(",remote fault");
  636. if (mii_reg & 0x0020)
  637. printk(",auto complete");
  638. printk("n");
  639. }
  640. if (((mii_reg >> 18) & 0x1f) == 0x14) {
  641. /* Extended chip status register.
  642. */
  643. prev_duplex = full_duplex;
  644. printk("fec: ");
  645. if (mii_reg & 0x0800)
  646. printk("100 Mbps");
  647. else
  648. printk("10 Mbps");
  649. if (mii_reg & 0x1000) {
  650. printk(", Full-Duplexn");
  651. full_duplex = 1;
  652. }
  653. else {
  654. printk(", Half-Duplexn");
  655. full_duplex = 0;
  656. }
  657. #if 0
  658. if (prev_duplex != full_duplex)
  659. restart_fec(dev);
  660. #endif
  661. }
  662. if (((mii_reg >> 18) & 0x1f) == 31) {
  663. /* QS6612 PHY Control/Status.
  664.  * OK, now we have it all, so figure out what is going on.
  665.  */
  666. prev_duplex = full_duplex;
  667. printk("fec: ");
  668. mii_reg = (mii_reg >> 2) & 7;
  669. if (mii_reg & 1)
  670. printk("10 Mbps");
  671. else
  672. printk("100 Mbps");
  673. if (mii_reg > 4) {
  674. printk(", Full-Duplexn");
  675. full_duplex = 1;
  676. }
  677. else {
  678. printk(", Half-Duplexn");
  679. full_duplex = 0;
  680. }
  681. #if 0
  682. if (prev_duplex != full_duplex)
  683. restart_fec(dev);
  684. #endif
  685. }
  686. }
  687. static uint phyno;
  688. static void
  689. mii_discover_phy3(uint mii_reg, struct net_device *dev)
  690. {
  691. phytype <<= 16;
  692. phytype |= (mii_reg & 0xffff);
  693. printk("fec: Phy @ 0x%x, type 0x%08xn", phyno, phytype);
  694. mii_startup_cmds();
  695. }
  696. static void
  697. mii_discover_phy(uint mii_reg, struct net_device *dev)
  698. {
  699. if (phyno < 32) {
  700. if ((phytype = (mii_reg & 0xffff)) != 0xffff) {
  701. phyaddr = phyno;
  702. mii_queue(mk_mii_read(3), mii_discover_phy3);
  703. }
  704. else {
  705. phyno++;
  706. mii_queue(mk_mii_phyaddr(phyno), mii_discover_phy);
  707. }
  708. }
  709. else {
  710. printk("FEC: No PHY device found.n");
  711. }
  712. }
  713. static void
  714. mii_discover_phy_poll(fcc_info_t *fip)
  715. {
  716. uint rv;
  717. int i;
  718. for (i=0; i<32; i++) {
  719. rv = mii_send_receive(fip, mk_mii_phyaddr(i));
  720. if ((phytype = (rv & 0xffff)) != 0xffff) {
  721. phyaddr = i;
  722. rv = mii_send_receive(fip, mk_mii_read(3));
  723. phytype <<= 16;
  724. phytype |= (rv & 0xffff);
  725. printk("fec: Phy @ 0x%x, type 0x%08xn", phyaddr, phytype);
  726. }
  727. }
  728. }
  729. static void
  730. mii_startup_cmds(void)
  731. {
  732. #if 1
  733. /* Level One PHY.
  734. */
  735. /* Read status registers to clear any pending interrupt.
  736. */
  737. mii_queue(mk_mii_read(1), mii_status);
  738. mii_queue(mk_mii_read(18), mii_status);
  739. /* Read extended chip status register.
  740. */
  741. mii_queue(mk_mii_read(0x14), mii_status);
  742. /* Set default operation of 100-TX....for some reason
  743.  * some of these bits are set on power up, which is wrong.
  744.  */
  745. mii_queue(mk_mii_write(0x13, 0), NULL);
  746. /* Enable Link status change interrupts.
  747. */
  748. mii_queue(mk_mii_write(0x11, 0x0002), NULL);
  749. /* Don't advertize Full duplex.
  750. mii_queue(mk_mii_write(0x04, 0x0021), NULL);
  751. */
  752. #endif
  753. }
  754. /* This supports the mii_link interrupt below.
  755.  * We should get called three times.  Once for register 1, once for
  756.  * register 18, and once for register 20.
  757.  */
  758. static uint mii_saved_reg1;
  759. static void
  760. mii_relink(uint mii_reg, struct net_device *dev)
  761. {
  762. volatile uint prev_duplex;
  763. unsigned long flags;
  764. if (((mii_reg >> 18) & 0x1f) == 1) {
  765. /* Just save the status register and get out.
  766. */
  767. mii_saved_reg1 = mii_reg;
  768. return;
  769. }
  770. if (((mii_reg >> 18) & 0x1f) == 18) {
  771. /* Not much here, but has to be read to clear the
  772.  * interrupt condition.
  773.  */
  774. if ((mii_reg & 0x8000) == 0)
  775. printk("fec: re-link and no IRQ?n");
  776. if ((mii_reg & 0x4000) == 0)
  777. printk("fec: no PHY power?n");
  778. }
  779. if (((mii_reg >> 18) & 0x1f) == 20) {
  780. /* Extended chip status register.
  781.  * OK, now we have it all, so figure out what is going on.
  782.  */
  783. prev_duplex = full_duplex;
  784. printk("fec: ");
  785. if (mii_saved_reg1 & 0x0004)
  786. printk("link up");
  787. else
  788. printk("link down");
  789. if (mii_saved_reg1 & 0x0010)
  790. printk(", remote fault");
  791. if (mii_saved_reg1 & 0x0020)
  792. printk(", auto complete");
  793. if (mii_reg & 0x0800)
  794. printk(", 100 Mbps");
  795. else
  796. printk(", 10 Mbps");
  797. if (mii_reg & 0x1000) {
  798. printk(", Full-Duplexn");
  799. full_duplex = 1;
  800. }
  801. else {
  802. printk(", Half-Duplexn");
  803. full_duplex = 0;
  804. }
  805. if (prev_duplex != full_duplex) {
  806. save_flags(flags);
  807. cli();
  808. #if 0
  809. restart_fec(dev);
  810. #endif
  811. restore_flags(flags);
  812. }
  813. }
  814. if (((mii_reg >> 18) & 0x1f) == 31) {
  815. /* QS6612 PHY Control/Status.
  816.  * OK, now we have it all, so figure out what is going on.
  817.  */
  818. prev_duplex = full_duplex;
  819. printk("fec: ");
  820. if (mii_saved_reg1 & 0x0004)
  821. printk("link up");
  822. else
  823. printk("link down");
  824. if (mii_saved_reg1 & 0x0010)
  825. printk(", remote fault");
  826. if (mii_saved_reg1 & 0x0020)
  827. printk(", auto complete");
  828. mii_reg = (mii_reg >> 2) & 7;
  829. if (mii_reg & 1)
  830. printk(", 10 Mbps");
  831. else
  832. printk(", 100 Mbps");
  833. if (mii_reg > 4) {
  834. printk(", Full-Duplexn");
  835. full_duplex = 1;
  836. }
  837. else {
  838. printk(", Half-Duplexn");
  839. full_duplex = 0;
  840. }
  841. #if 0
  842. if (prev_duplex != full_duplex) {
  843. save_flags(flags);
  844. cli();
  845. restart_fec(dev);
  846. restore_flags(flags);
  847. }
  848. #endif
  849. }
  850. }
  851. /* Set or clear the multicast filter for this adaptor.
  852.  * Skeleton taken from sunlance driver.
  853.  * The CPM Ethernet implementation allows Multicast as well as individual
  854.  * MAC address filtering.  Some of the drivers check to make sure it is
  855.  * a group multicast address, and discard those that are not.  I guess I
  856.  * will do the same for now, but just remove the test if you want
  857.  * individual filtering as well (do the upper net layers want or support
  858.  * this kind of feature?).
  859.  */
  860. static void
  861. set_multicast_list(struct net_device *dev)
  862. {
  863. struct fcc_enet_private *cep;
  864. struct dev_mc_list *dmi;
  865. u_char *mcptr, *tdptr;
  866. volatile fcc_enet_t *ep;
  867. int i, j;
  868. cep = (struct fcc_enet_private *)dev->priv;
  869. return;
  870. /* Get pointer to FCC area in parameter RAM.
  871. */
  872. ep = (fcc_enet_t *)dev->base_addr;
  873. if (dev->flags&IFF_PROMISC) {
  874.   
  875. /* Log any net taps. */
  876. printk("%s: Promiscuous mode enabled.n", dev->name);
  877. cep->fccp->fcc_fpsmr |= FCC_PSMR_PRO;
  878. } else {
  879. cep->fccp->fcc_fpsmr &= ~FCC_PSMR_PRO;
  880. if (dev->flags & IFF_ALLMULTI) {
  881. /* Catch all multicast addresses, so set the
  882.  * filter to all 1's.
  883.  */
  884. ep->fen_gaddrh = 0xffffffff;
  885. ep->fen_gaddrl = 0xffffffff;
  886. }
  887. else {
  888. /* Clear filter and add the addresses in the list.
  889. */
  890. ep->fen_gaddrh = 0;
  891. ep->fen_gaddrl = 0;
  892. dmi = dev->mc_list;
  893. for (i=0; i<dev->mc_count; i++) {
  894. /* Only support group multicast for now.
  895. */
  896. if (!(dmi->dmi_addr[0] & 1))
  897. continue;
  898. /* The address in dmi_addr is LSB first,
  899.  * and taddr is MSB first.  We have to
  900.  * copy bytes MSB first from dmi_addr.
  901.  */
  902. mcptr = (u_char *)dmi->dmi_addr + 5;
  903. tdptr = (u_char *)&ep->fen_taddrh;
  904. for (j=0; j<6; j++)
  905. *tdptr++ = *mcptr--;
  906. /* Ask CPM to run CRC and set bit in
  907.  * filter mask.
  908.  */
  909. cpmp->cp_cpcr = mk_cr_cmd(cep->fip->fc_cpmpage,
  910. cep->fip->fc_cpmblock, 0x0c,
  911. CPM_CR_SET_GADDR) | CPM_CR_FLG;
  912. udelay(10);
  913. while (cpmp->cp_cpcr & CPM_CR_FLG);
  914. }
  915. }
  916. }
  917. }
  918. /* Initialize the CPM Ethernet on FCC.
  919.  */
  920. int __init fec_enet_init(void)
  921. {
  922. struct net_device *dev;
  923. struct fcc_enet_private *cep;
  924. fcc_info_t *fip;
  925. int i, np;
  926. volatile immap_t *immap;
  927. volatile iop8260_t *io;
  928. immap = (immap_t *)IMAP_ADDR; /* and to internal registers */
  929. io = &immap->im_ioport;
  930. np = sizeof(fcc_ports) / sizeof(fcc_info_t);
  931. fip = fcc_ports;
  932. while (np-- > 0) {
  933. /* Allocate some private information.
  934. */
  935. cep = (struct fcc_enet_private *)
  936. kmalloc(sizeof(*cep), GFP_KERNEL);
  937. if (cep == NULL)
  938. return -ENOMEM;
  939. __clear_user(cep,sizeof(*cep));
  940. spin_lock_init(&cep->lock);
  941. cep->fip = fip;
  942. /* Create an Ethernet device instance.
  943. */
  944. dev = init_etherdev(0, 0);
  945. dev->priv = cep;
  946. init_fcc_shutdown(fip, cep, immap);
  947. init_fcc_ioports(fip, io, immap);
  948. init_fcc_param(fip, dev, immap);
  949. dev->base_addr = (unsigned long)(cep->ep);
  950. /* The CPM Ethernet specific entries in the device
  951.  * structure.
  952.  */
  953. dev->open = fcc_enet_open;
  954. dev->hard_start_xmit = fcc_enet_start_xmit;
  955. dev->tx_timeout = fcc_enet_timeout;
  956. dev->watchdog_timeo = TX_TIMEOUT;
  957. dev->stop = fcc_enet_close;
  958. dev->get_stats = fcc_enet_get_stats;
  959. dev->set_multicast_list = set_multicast_list;
  960. init_fcc_startup(fip, dev);
  961. printk("%s: FCC ENET Version 0.2, ", dev->name);
  962. for (i=0; i<5; i++)
  963. printk("%02x:", dev->dev_addr[i]);
  964. printk("%02xn", dev->dev_addr[5]);
  965. /* This is just a hack for now that works only on the EST
  966.  * board, or anything else that has MDIO/CK configured.
  967.  * It is mainly to test the MII software clocking.
  968.  */
  969. mii_discover_phy_poll(fip);
  970. fip++;
  971. }
  972. return 0;
  973. }
  974. /* Make sure the device is shut down during initialization.
  975. */
  976. static void __init
  977. init_fcc_shutdown(fcc_info_t *fip, struct fcc_enet_private *cep,
  978. volatile immap_t *immap)
  979. {
  980. volatile fcc_enet_t *ep;
  981. volatile fcc_t *fccp;
  982. /* Get pointer to FCC area in parameter RAM.
  983. */
  984. ep = (fcc_enet_t *)(&immap->im_dprambase[fip->fc_proff]);
  985. /* And another to the FCC register area.
  986. */
  987. fccp = (volatile fcc_t *)(&immap->im_fcc[fip->fc_fccnum]);
  988. cep->fccp = fccp; /* Keep the pointers handy */
  989. cep->ep = ep;
  990. /* Disable receive and transmit in case someone left it running.
  991. */
  992. fccp->fcc_gfmr &= ~(FCC_GFMR_ENR | FCC_GFMR_ENT);
  993. }
  994. /* Initialize the I/O pins for the FCC Ethernet.
  995. */
  996. static void __init
  997. init_fcc_ioports(fcc_info_t *fip, volatile iop8260_t *io,
  998. volatile immap_t *immap)
  999. {
  1000. /* FCC1 pins are on port A/C.  FCC2/3 are port B/C.
  1001. */
  1002. if (fip->fc_proff == PROFF_FCC1) {
  1003. /* Configure port A and C pins for FCC1 Ethernet.
  1004.  */
  1005. io->iop_pdira &= ~PA1_DIRA0;
  1006. io->iop_pdira |= PA1_DIRA1;
  1007. io->iop_psora &= ~PA1_PSORA0;
  1008. io->iop_psora |= PA1_PSORA1;
  1009. io->iop_ppara |= (PA1_DIRA0 | PA1_DIRA1);
  1010. }
  1011. if (fip->fc_proff == PROFF_FCC2) {
  1012. /* Configure port B and C pins for FCC Ethernet.
  1013.  */
  1014. io->iop_pdirb &= ~PB2_DIRB0;
  1015. io->iop_pdirb |= PB2_DIRB1;
  1016. io->iop_psorb &= ~PB2_PSORB0;
  1017. io->iop_psorb |= PB2_PSORB1;
  1018. io->iop_pparb |= (PB2_DIRB0 | PB2_DIRB1);
  1019. }
  1020. if (fip->fc_proff == PROFF_FCC3) {
  1021. /* Configure port B and C pins for FCC Ethernet.
  1022.  */
  1023. io->iop_pdirb &= ~PB3_DIRB0;
  1024. io->iop_pdirb |= PB3_DIRB1;
  1025. io->iop_psorb &= ~PB3_PSORB0;
  1026. io->iop_psorb |= PB3_PSORB1;
  1027. io->iop_pparb |= (PB3_DIRB0 | PB3_DIRB1);
  1028. }
  1029. /* Port C has clocks......
  1030. */
  1031. io->iop_psorc &= ~(fip->fc_trxclocks);
  1032. io->iop_pdirc &= ~(fip->fc_trxclocks);
  1033. io->iop_pparc |= fip->fc_trxclocks;
  1034. /* ....and the MII serial clock/data.
  1035. */
  1036. io->iop_pdatc |= (fip->fc_mdio | fip->fc_mdck);
  1037. io->iop_podrc |= fip->fc_mdio;
  1038. io->iop_pdirc |= (fip->fc_mdio | fip->fc_mdck);
  1039. io->iop_pparc &= ~(fip->fc_mdio | fip->fc_mdck);
  1040. /* Configure Serial Interface clock routing.
  1041.  * First, clear all FCC bits to zero,
  1042.  * then set the ones we want.
  1043.  */
  1044. immap->im_cpmux.cmx_fcr &= ~(fip->fc_clockmask);
  1045. immap->im_cpmux.cmx_fcr |= fip->fc_clockroute;
  1046. }
  1047. static void __init
  1048. init_fcc_param(fcc_info_t *fip, struct net_device *dev,
  1049. volatile immap_t *immap)
  1050. {
  1051. unsigned char *eap;
  1052. unsigned long mem_addr;
  1053. bd_t *bd;
  1054. int i, j;
  1055. struct fcc_enet_private *cep;
  1056. volatile fcc_enet_t *ep;
  1057. volatile cbd_t *bdp;
  1058. volatile cpm8260_t *cp;
  1059. cep = (struct fcc_enet_private *)(dev->priv);
  1060. ep = cep->ep;
  1061. cp = cpmp;
  1062. bd = (bd_t *)__res;
  1063. /* Zero the whole thing.....I must have missed some individually.
  1064.  * It works when I do this.
  1065.  */
  1066. memset((char *)ep, 0, sizeof(fcc_enet_t));
  1067. /* Allocate space for the buffer descriptors in the DP ram.
  1068.  * These are relative offsets in the DP ram address space.
  1069.  * Initialize base addresses for the buffer descriptors.
  1070.  */
  1071. #if 0
  1072. /* I really want to do this, but for some reason it doesn't
  1073.  * work with the data cache enabled, so I allocate from the
  1074.  * main memory instead.
  1075.  */
  1076. i = m8260_cpm_dpalloc(sizeof(cbd_t) * RX_RING_SIZE, 8);
  1077. ep->fen_genfcc.fcc_rbase = (uint)&immap->im_dprambase[i];
  1078. cep->rx_bd_base = (cbd_t *)&immap->im_dprambase[i];
  1079. i = m8260_cpm_dpalloc(sizeof(cbd_t) * TX_RING_SIZE, 8);
  1080. ep->fen_genfcc.fcc_tbase = (uint)&immap->im_dprambase[i];
  1081. cep->tx_bd_base = (cbd_t *)&immap->im_dprambase[i];
  1082. #else
  1083. cep->rx_bd_base = (cbd_t *)m8260_cpm_hostalloc(sizeof(cbd_t) * RX_RING_SIZE, 8);
  1084. ep->fen_genfcc.fcc_rbase = __pa(cep->rx_bd_base);
  1085. cep->tx_bd_base = (cbd_t *)m8260_cpm_hostalloc(sizeof(cbd_t) * TX_RING_SIZE, 8);
  1086. ep->fen_genfcc.fcc_tbase = __pa(cep->tx_bd_base);
  1087. #endif
  1088. cep->dirty_tx = cep->cur_tx = cep->tx_bd_base;
  1089. cep->cur_rx = cep->rx_bd_base;
  1090. ep->fen_genfcc.fcc_rstate = (CPMFCR_GBL | CPMFCR_EB) << 24;
  1091. ep->fen_genfcc.fcc_tstate = (CPMFCR_GBL | CPMFCR_EB) << 24;
  1092. /* Set maximum bytes per receive buffer.
  1093.  * It must be a multiple of 32.
  1094.  */
  1095. ep->fen_genfcc.fcc_mrblr = PKT_MAXBLR_SIZE;
  1096. /* Allocate space in the reserved FCC area of DPRAM for the
  1097.  * internal buffers.  No one uses this space (yet), so we
  1098.  * can do this.  Later, we will add resource management for
  1099.  * this area.
  1100.  */
  1101. mem_addr = CPM_FCC_SPECIAL_BASE + (fip->fc_fccnum * 128);
  1102. ep->fen_genfcc.fcc_riptr = mem_addr;
  1103. ep->fen_genfcc.fcc_tiptr = mem_addr+32;
  1104. ep->fen_padptr = mem_addr+64;
  1105. memset((char *)(&(immap->im_dprambase[(mem_addr+64)])), 0x88, 32);
  1106. ep->fen_genfcc.fcc_rbptr = 0;
  1107. ep->fen_genfcc.fcc_tbptr = 0;
  1108. ep->fen_genfcc.fcc_rcrc = 0;
  1109. ep->fen_genfcc.fcc_tcrc = 0;
  1110. ep->fen_genfcc.fcc_res1 = 0;
  1111. ep->fen_genfcc.fcc_res2 = 0;
  1112. ep->fen_camptr = 0; /* CAM isn't used in this driver */
  1113. /* Set CRC preset and mask.
  1114. */
  1115. ep->fen_cmask = 0xdebb20e3;
  1116. ep->fen_cpres = 0xffffffff;
  1117. ep->fen_crcec = 0; /* CRC Error counter */
  1118. ep->fen_alec = 0; /* alignment error counter */
  1119. ep->fen_disfc = 0; /* discard frame counter */
  1120. ep->fen_retlim = 15; /* Retry limit threshold */
  1121. ep->fen_pper = 0; /* Normal persistence */
  1122. /* Clear hash filter tables.
  1123. */
  1124. ep->fen_gaddrh = 0;
  1125. ep->fen_gaddrl = 0;
  1126. ep->fen_iaddrh = 0;
  1127. ep->fen_iaddrl = 0;
  1128. /* Clear the Out-of-sequence TxBD.
  1129. */
  1130. ep->fen_tfcstat = 0;
  1131. ep->fen_tfclen = 0;
  1132. ep->fen_tfcptr = 0;
  1133. ep->fen_mflr = PKT_MAXBUF_SIZE;   /* maximum frame length register */
  1134. ep->fen_minflr = PKT_MINBUF_SIZE;  /* minimum frame length register */
  1135. /* Set Ethernet station address.
  1136.  *
  1137.  * This is supplied in the board information structure, so we
  1138.  * copy that into the controller.
  1139.  * So, far we have only been given one Ethernet address. We make
  1140.  * it unique by setting a few bits in the upper byte of the
  1141.  * non-static part of the address.
  1142.  */
  1143. eap = (unsigned char *)&(ep->fen_paddrh);
  1144. for (i=5; i>=0; i--) {
  1145. if (i == 3) {
  1146. dev->dev_addr[i] = bd->bi_enetaddr[i];
  1147. dev->dev_addr[i] |= (1 << (7 - fip->fc_fccnum));
  1148. *eap++ = dev->dev_addr[i];
  1149. }
  1150. else {
  1151. *eap++ = dev->dev_addr[i] = bd->bi_enetaddr[i];
  1152. }
  1153. }
  1154. ep->fen_taddrh = 0;
  1155. ep->fen_taddrm = 0;
  1156. ep->fen_taddrl = 0;
  1157. ep->fen_maxd1 = PKT_MAXDMA_SIZE; /* maximum DMA1 length */
  1158. ep->fen_maxd2 = PKT_MAXDMA_SIZE; /* maximum DMA2 length */
  1159. /* Clear stat counters, in case we ever enable RMON.
  1160. */
  1161. ep->fen_octc = 0;
  1162. ep->fen_colc = 0;
  1163. ep->fen_broc = 0;
  1164. ep->fen_mulc = 0;
  1165. ep->fen_uspc = 0;
  1166. ep->fen_frgc = 0;
  1167. ep->fen_ospc = 0;
  1168. ep->fen_jbrc = 0;
  1169. ep->fen_p64c = 0;
  1170. ep->fen_p65c = 0;
  1171. ep->fen_p128c = 0;
  1172. ep->fen_p256c = 0;
  1173. ep->fen_p512c = 0;
  1174. ep->fen_p1024c = 0;
  1175. ep->fen_rfthr = 0; /* Suggested by manual */
  1176. ep->fen_rfcnt = 0;
  1177. ep->fen_cftype = 0;
  1178. /* Now allocate the host memory pages and initialize the
  1179.  * buffer descriptors.
  1180.  */
  1181. bdp = cep->tx_bd_base;
  1182. for (i=0; i<TX_RING_SIZE; i++) {
  1183. /* Initialize the BD for every fragment in the page.
  1184. */
  1185. bdp->cbd_sc = 0;
  1186. bdp->cbd_datlen = 0;
  1187. bdp->cbd_bufaddr = 0;
  1188. bdp++;
  1189. }
  1190. /* Set the last buffer to wrap.
  1191. */
  1192. bdp--;
  1193. bdp->cbd_sc |= BD_SC_WRAP;
  1194. bdp = cep->rx_bd_base;
  1195. for (i=0; i<FCC_ENET_RX_PAGES; i++) {
  1196. /* Allocate a page.
  1197. */
  1198. mem_addr = __get_free_page(GFP_KERNEL);
  1199. /* Initialize the BD for every fragment in the page.
  1200. */
  1201. for (j=0; j<FCC_ENET_RX_FRPPG; j++) {
  1202. bdp->cbd_sc = BD_ENET_RX_EMPTY | BD_ENET_RX_INTR;
  1203. bdp->cbd_datlen = 0;
  1204. bdp->cbd_bufaddr = __pa(mem_addr);
  1205. mem_addr += FCC_ENET_RX_FRSIZE;
  1206. bdp++;
  1207. }
  1208. }
  1209. /* Set the last buffer to wrap.
  1210. */
  1211. bdp--;
  1212. bdp->cbd_sc |= BD_SC_WRAP;
  1213. /* Let's re-initialize the channel now.  We have to do it later
  1214.  * than the manual describes because we have just now finished
  1215.  * the BD initialization.
  1216.  */
  1217. cp->cp_cpcr = mk_cr_cmd(fip->fc_cpmpage, fip->fc_cpmblock, 0x0c,
  1218. CPM_CR_INIT_TRX) | CPM_CR_FLG;
  1219. while (cp->cp_cpcr & CPM_CR_FLG);
  1220. cep->skb_cur = cep->skb_dirty = 0;
  1221. }
  1222. /* Let 'er rip.
  1223. */
  1224. static void __init
  1225. init_fcc_startup(fcc_info_t *fip, struct net_device *dev)
  1226. {
  1227. volatile fcc_t *fccp;
  1228. struct fcc_enet_private *cep;
  1229. cep = (struct fcc_enet_private *)(dev->priv);
  1230. fccp = cep->fccp;
  1231. fccp->fcc_fcce = 0xffff; /* Clear any pending events */
  1232. /* Enable interrupts for transmit error, complete frame
  1233.  * received, and any transmit buffer we have also set the
  1234.  * interrupt flag.
  1235.  */
  1236. fccp->fcc_fccm = (FCC_ENET_TXE | FCC_ENET_RXF | FCC_ENET_TXB);
  1237. /* Install our interrupt handler.
  1238. */
  1239. if (request_8xxirq(fip->fc_interrupt, fcc_enet_interrupt, 0,
  1240. "fenet", dev) < 0)
  1241. printk("Can't get FCC IRQ %dn", fip->fc_interrupt);
  1242. /* Set GFMR to enable Ethernet operating mode.
  1243.  */
  1244. fccp->fcc_gfmr = (FCC_GFMR_TCI | FCC_GFMR_MODE_ENET);
  1245. /* Set sync/delimiters.
  1246. */
  1247. fccp->fcc_fdsr = 0xd555;
  1248. /* Set protocol specific processing mode for Ethernet.
  1249.  * This has to be adjusted for Full Duplex operation after we can
  1250.  * determine how to detect that.
  1251.  */
  1252. fccp->fcc_fpsmr = FCC_PSMR_ENCRC;
  1253. /* And last, enable the transmit and receive processing.
  1254. */
  1255. fccp->fcc_gfmr |= (FCC_GFMR_ENR | FCC_GFMR_ENT);
  1256. }
  1257. /* MII command/status interface.
  1258.  * I'm not going to describe all of the details.  You can find the
  1259.  * protocol definition in many other places, including the data sheet
  1260.  * of most PHY parts.
  1261.  * I wonder what "they" were thinking (maybe weren't) when they leave
  1262.  * the I2C in the CPM but I have to toggle these bits......
  1263.  */
  1264. static uint
  1265. mii_send_receive(fcc_info_t *fip, uint cmd)
  1266. {
  1267. unsigned long flags;
  1268. uint retval;
  1269. int read_op, i;
  1270. volatile immap_t *immap;
  1271. volatile iop8260_t *io;
  1272. immap = (immap_t *)IMAP_ADDR;
  1273. io = &immap->im_ioport;
  1274. /* When we get here, both clock and data are high, outputs.
  1275.  * Output is open drain.
  1276.  * Data transitions on high->low clock, is valid on low->high clock.
  1277.  * Spec says edge transitions no closer than 160 nSec, minimum clock
  1278.  * cycle 400 nSec.  I could only manage about 500 nSec edges with
  1279.  * an XOR loop, so I won't worry about delays yet.
  1280.  * I disable interrupts during bit flipping to ensure atomic
  1281.  * updates of the registers.  I do lots of interrupt disable/enable
  1282.  * to ensure we don't hang out too long with interrupts disabled.
  1283.  */
  1284. /* First, crank out 32 1-bits as preamble.
  1285.  * This is 64 transitions to clock the bits, with clock/data
  1286.  * left high.
  1287.  */
  1288. save_flags(flags);
  1289. cli();
  1290. for (i=0; i<64; i++) {
  1291. io->iop_pdatc ^= fip->fc_mdck;
  1292. udelay(0);
  1293. }
  1294. restore_flags(flags);
  1295. read_op = ((cmd & 0xf0000000) == 0x60000000);
  1296. /* We return the command word on a write op, or the command portion
  1297.  * plus the new data on a read op.  This is what the 8xx FEC does,
  1298.  * and it allows the functions to simply look at the returned value
  1299.  * and know the PHY/register as well.
  1300.  */
  1301. if (read_op)
  1302. retval = cmd;
  1303. else
  1304. retval = (cmd >> 16);
  1305. /* Clock out the first 16 MS bits of the command.
  1306. */
  1307. save_flags(flags);
  1308. cli();
  1309. for (i=0; i<16; i++) {
  1310. io->iop_pdatc &= ~(fip->fc_mdck);
  1311. if (cmd & 0x80000000)
  1312. io->iop_pdatc |= fip->fc_mdio;
  1313. else
  1314. io->iop_pdatc &= ~(fip->fc_mdio);
  1315. cmd <<= 1;
  1316. io->iop_pdatc |= fip->fc_mdck;
  1317. udelay(0);
  1318. }
  1319. /* Do the turn-around.  If read op, we make the IO and input.
  1320.  * If write op, do the 1/0 thing.
  1321.  */
  1322. io->iop_pdatc &= ~(fip->fc_mdck);
  1323. if (read_op)
  1324. io->iop_pdirc &= ~(fip->fc_mdio);
  1325. else
  1326. io->iop_pdatc |= fip->fc_mdio;
  1327. io->iop_pdatc |= fip->fc_mdck;
  1328. /* I do this mainly to get just a little delay.
  1329. */
  1330. restore_flags(flags);
  1331. save_flags(flags);
  1332. cli();
  1333. io->iop_pdatc &= ~(fip->fc_mdck);
  1334. io->iop_pdirc &= ~(fip->fc_mdio);
  1335. io->iop_pdatc |= fip->fc_mdck;
  1336. restore_flags(flags);
  1337. save_flags(flags);
  1338. cli();
  1339. /* For read, clock in 16 bits.  For write, clock out
  1340.  * rest of command.
  1341.  */
  1342. if (read_op) {
  1343. io->iop_pdatc &= ~(fip->fc_mdck);
  1344. udelay(0);
  1345. for (i=0; i<16; i++) {
  1346. io->iop_pdatc |= fip->fc_mdck;
  1347. udelay(0);
  1348. retval <<= 1;
  1349. if (io->iop_pdatc & fip->fc_mdio)
  1350. retval |= 1;
  1351. io->iop_pdatc &= ~(fip->fc_mdck);
  1352. udelay(0);
  1353. }
  1354. }
  1355. else {
  1356. for (i=0; i<16; i++) {
  1357. io->iop_pdatc &= ~(fip->fc_mdck);
  1358. if (cmd & 0x80000000)
  1359. io->iop_pdatc |= fip->fc_mdio;
  1360. else
  1361. io->iop_pdatc &= ~(fip->fc_mdio);
  1362. cmd <<= 1;
  1363. io->iop_pdatc |= fip->fc_mdck;
  1364. udelay(0);
  1365. }
  1366. io->iop_pdatc &= ~(fip->fc_mdck);
  1367. }
  1368. restore_flags(flags);
  1369. /* Some diagrams show two 1 bits for "idle".  I don't know if
  1370.  * this is really necessary or if it was just to indicate nothing
  1371.  * is going to happen for a while.
  1372.  * Make the data pin an output, set the data high, and clock it.
  1373.  */
  1374. save_flags(flags);
  1375. cli();
  1376. io->iop_pdatc |= fip->fc_mdio;
  1377. io->iop_pdirc |= fip->fc_mdio;
  1378. for (i=0; i<3; i++)
  1379. io->iop_pdatc ^= fip->fc_mdck;
  1380. restore_flags(flags);
  1381. /* We exit with the same conditions as entry.
  1382. */
  1383. return(retval);
  1384. }