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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Driver for SGI's IOC3 based Ethernet cards as found in the PCI card.
  7.  *
  8.  * Copyright (C) 1999, 2000, 2001 Ralf Baechle
  9.  * Copyright (C) 1995, 1999, 2000, 2001 by Silicon Graphics, Inc.
  10.  *
  11.  * References:
  12.  *  o IOC3 ASIC specification 4.51, 1996-04-18
  13.  *  o IEEE 802.3 specification, 2000 edition
  14.  *  o DP38840A Specification, National Semiconductor, March 1997
  15.  *
  16.  * To do:
  17.  *
  18.  *  o Handle allocation failures in ioc3_alloc_skb() more gracefully.
  19.  *  o Handle allocation failures in ioc3_init_rings().
  20.  *  o Use prefetching for large packets.  What is a good lower limit for
  21.  *    prefetching?
  22.  *  o We're probably allocating a bit too much memory.
  23.  *  o Use hardware checksums.
  24.  *  o Convert to using a IOC3 meta driver.
  25.  *  o Which PHYs might possibly be attached to the IOC3 in real live,
  26.  *    which workarounds are required for them?  Do we ever have Lucent's?
  27.  *  o For the 2.5 branch kill the mii-tool ioctls.
  28.  */
  29. #include <linux/init.h>
  30. #include <linux/delay.h>
  31. #include <linux/kernel.h>
  32. #include <linux/mm.h>
  33. #include <linux/errno.h>
  34. #include <linux/module.h>
  35. #include <linux/pci.h>
  36. #ifdef CONFIG_SERIAL
  37. #include <linux/serial.h>
  38. #include <asm/serial.h>
  39. #define IOC3_BAUD (22000000 / (3*16))
  40. #define IOC3_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
  41. #endif
  42. #include <linux/netdevice.h>
  43. #include <linux/etherdevice.h>
  44. #include <linux/ethtool.h>
  45. #include <linux/skbuff.h>
  46. #include <linux/dp83840.h>
  47. #include <asm/byteorder.h>
  48. #include <asm/io.h>
  49. #include <asm/pgtable.h>
  50. #include <asm/uaccess.h>
  51. #include <asm/sn/types.h>
  52. #include <asm/sn/sn0/addrs.h>
  53. #include <asm/sn/sn0/hubni.h>
  54. #include <asm/sn/sn0/hubio.h>
  55. #include <asm/sn/klconfig.h>
  56. #include <asm/sn/ioc3.h>
  57. #include <asm/sn/sn0/ip27.h>
  58. #include <asm/pci/bridge.h>
  59. /*
  60.  * 64 RX buffers.  This is tunable in the range of 16 <= x < 512.  The
  61.  * value must be a power of two.
  62.  */
  63. #define RX_BUFFS 64
  64. /* Timer state engine. */
  65. enum ioc3_timer_state {
  66. arbwait  = 0, /* Waiting for auto negotiation to complete.          */
  67. lupwait  = 1, /* Auto-neg complete, awaiting link-up status.        */
  68. ltrywait = 2, /* Forcing try of all modes, from fastest to slowest. */
  69. asleep   = 3, /* Time inactive.                                     */
  70. };
  71. /* Private per NIC data of the driver.  */
  72. struct ioc3_private {
  73. struct ioc3 *regs;
  74. int phy;
  75. unsigned long *rxr; /* pointer to receiver ring */
  76. struct ioc3_etxd *txr;
  77. struct sk_buff *rx_skbs[512];
  78. struct sk_buff *tx_skbs[128];
  79. struct net_device_stats stats;
  80. int rx_ci; /* RX consumer index */
  81. int rx_pi; /* RX producer index */
  82. int tx_ci; /* TX consumer index */
  83. int tx_pi; /* TX producer index */
  84. int txqlen;
  85. u32 emcr, ehar_h, ehar_l;
  86. spinlock_t ioc3_lock;
  87. struct net_device *dev;
  88. /* Members used by autonegotiation  */
  89. struct timer_list ioc3_timer;
  90. enum ioc3_timer_state timer_state; /* State of auto-neg timer.    */
  91. unsigned int timer_ticks; /* Number of clicks at each state  */
  92. unsigned short sw_bmcr; /* sw copy of MII config register  */
  93. unsigned short sw_bmsr; /* sw copy of MII status register  */
  94. unsigned short sw_physid1; /* sw copy of PHYSID1    */
  95. unsigned short sw_physid2; /* sw copy of PHYSID2    */
  96. unsigned short sw_advertise; /* sw copy of ADVERTISE    */
  97. unsigned short sw_lpa; /* sw copy of LPA    */
  98. unsigned short sw_csconfig; /* sw copy of CSCONFIG    */
  99. };
  100. static int ioc3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
  101. static void ioc3_set_multicast_list(struct net_device *dev);
  102. static int ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev);
  103. static void ioc3_timeout(struct net_device *dev);
  104. static inline unsigned int ioc3_hash(const unsigned char *addr);
  105. static inline void ioc3_stop(struct ioc3_private *ip);
  106. static void ioc3_init(struct ioc3_private *ip);
  107. static const char ioc3_str[] = "IOC3 Ethernet";
  108. /* We use this to acquire receive skb's that we can DMA directly into. */
  109. #define ALIGNED_RX_SKB_ADDR(addr) 
  110. ((((unsigned long)(addr) + (128 - 1)) & ~(128 - 1)) - (unsigned long)(addr))
  111. #define ioc3_alloc_skb(__length, __gfp_flags) 
  112. ({ struct sk_buff *__skb; 
  113. __skb = alloc_skb((__length) + 128, (__gfp_flags)); 
  114. if (__skb) { 
  115. int __offset = ALIGNED_RX_SKB_ADDR(__skb->data); 
  116. if(__offset) 
  117. skb_reserve(__skb, __offset); 
  118. __skb; 
  119. })
  120. /* BEWARE: The IOC3 documentation documents the size of rx buffers as
  121.    1644 while it's actually 1664.  This one was nasty to track down ...  */
  122. #define RX_OFFSET 10
  123. #define RX_BUF_ALLOC_SIZE (1664 + RX_OFFSET + 128)
  124. /* DMA barrier to separate cached and uncached accesses.  */
  125. #define BARRIER()
  126. __asm__("sync" ::: "memory")
  127. #define IOC3_SIZE 0x100000
  128. #define ioc3_r(reg)
  129. ({
  130. u32 __res;
  131. __res = ioc3->reg;
  132. __res;
  133. })
  134. #define ioc3_w(reg,val)
  135. do {
  136. (ioc3->reg = (val));
  137. } while(0)
  138. static inline u32
  139. mcr_pack(u32 pulse, u32 sample)
  140. {
  141. return (pulse << 10) | (sample << 2);
  142. }
  143. static int
  144. nic_wait(struct ioc3 *ioc3)
  145. {
  146. u32 mcr;
  147.         do {
  148.                 mcr = ioc3_r(mcr);
  149.         } while (!(mcr & 2));
  150.         return mcr & 1;
  151. }
  152. static int
  153. nic_reset(struct ioc3 *ioc3)
  154. {
  155.         int presence;
  156. ioc3_w(mcr, mcr_pack(500, 65));
  157. presence = nic_wait(ioc3);
  158. ioc3_w(mcr, mcr_pack(0, 500));
  159. nic_wait(ioc3);
  160.         return presence;
  161. }
  162. static inline int
  163. nic_read_bit(struct ioc3 *ioc3)
  164. {
  165. int result;
  166. ioc3_w(mcr, mcr_pack(6, 13));
  167. result = nic_wait(ioc3);
  168. ioc3_w(mcr, mcr_pack(0, 100));
  169. nic_wait(ioc3);
  170. return result;
  171. }
  172. static inline void
  173. nic_write_bit(struct ioc3 *ioc3, int bit)
  174. {
  175. if (bit)
  176. ioc3_w(mcr, mcr_pack(6, 110));
  177. else
  178. ioc3_w(mcr, mcr_pack(80, 30));
  179. nic_wait(ioc3);
  180. }
  181. /*
  182.  * Read a byte from an iButton device
  183.  */
  184. static u32
  185. nic_read_byte(struct ioc3 *ioc3)
  186. {
  187. u32 result = 0;
  188. int i;
  189. for (i = 0; i < 8; i++)
  190. result = (result >> 1) | (nic_read_bit(ioc3) << 7);
  191. return result;
  192. }
  193. /*
  194.  * Write a byte to an iButton device
  195.  */
  196. static void
  197. nic_write_byte(struct ioc3 *ioc3, int byte)
  198. {
  199. int i, bit;
  200. for (i = 8; i; i--) {
  201. bit = byte & 1;
  202. byte >>= 1;
  203. nic_write_bit(ioc3, bit);
  204. }
  205. }
  206. static u64
  207. nic_find(struct ioc3 *ioc3, int *last)
  208. {
  209. int a, b, index, disc;
  210. u64 address = 0;
  211. nic_reset(ioc3);
  212. /* Search ROM.  */
  213. nic_write_byte(ioc3, 0xf0);
  214. /* Algorithm from ``Book of iButton Standards''.  */
  215. for (index = 0, disc = 0; index < 64; index++) {
  216. a = nic_read_bit(ioc3);
  217. b = nic_read_bit(ioc3);
  218. if (a && b) {
  219. printk("NIC search failed (not fatal).n");
  220. *last = 0;
  221. return 0;
  222. }
  223. if (!a && !b) {
  224. if (index == *last) {
  225. address |= 1UL << index;
  226. } else if (index > *last) {
  227. address &= ~(1UL << index);
  228. disc = index;
  229. } else if ((address & (1UL << index)) == 0)
  230. disc = index;
  231. nic_write_bit(ioc3, address & (1UL << index));
  232. continue;
  233. } else {
  234. if (a)
  235. address |= 1UL << index;
  236. else
  237. address &= ~(1UL << index);
  238. nic_write_bit(ioc3, a);
  239. continue;
  240. }
  241. }
  242. *last = disc;
  243. return address;
  244. }
  245. static int nic_init(struct ioc3 *ioc3)
  246. {
  247. const char *type;
  248. u8 crc;
  249. u8 serial[6];
  250. int save = 0, i;
  251. type = "unknown";
  252. while (1) {
  253. u64 reg;
  254. reg = nic_find(ioc3, &save);
  255. switch (reg & 0xff) {
  256. case 0x91:
  257. type = "DS1981U";
  258. break;
  259. default:
  260. if (save == 0) {
  261. /* Let the caller try again.  */
  262. return -1;
  263. }
  264. continue;
  265. }
  266. nic_reset(ioc3);
  267. /* Match ROM.  */
  268. nic_write_byte(ioc3, 0x55);
  269. for (i = 0; i < 8; i++)
  270. nic_write_byte(ioc3, (reg >> (i << 3)) & 0xff);
  271. reg >>= 8; /* Shift out type.  */
  272. for (i = 0; i < 6; i++) {
  273. serial[i] = reg & 0xff;
  274. reg >>= 8;
  275. }
  276. crc = reg & 0xff;
  277. break;
  278. }
  279. printk("Found %s NIC", type);
  280. if (type != "unknown") {
  281. printk (" registration number %02x:%02x:%02x:%02x:%02x:%02x,"
  282. " CRC %02x", serial[0], serial[1], serial[2],
  283. serial[3], serial[4], serial[5], crc);
  284. }
  285. printk(".n");
  286. return 0;
  287. }
  288. /*
  289.  * Read the NIC (Number-In-a-Can) device.
  290.  */
  291. static void ioc3_get_eaddr(struct ioc3_private *ip)
  292. {
  293. struct ioc3 *ioc3 = ip->regs;
  294. u8 nic[14];
  295. int i;
  296. int tries = 2; /* There may be some problem with the battery?  */
  297. ioc3_w(gpcr_s, (1 << 21));
  298. while (tries--) {
  299. if (!nic_init(ioc3))
  300. break;
  301. udelay(500);
  302. }
  303. if (tries < 0) {
  304. printk("Failed to read MAC addressn");
  305. return;
  306. }
  307. /* Read Memory.  */
  308. nic_write_byte(ioc3, 0xf0);
  309. nic_write_byte(ioc3, 0x00);
  310. nic_write_byte(ioc3, 0x00);
  311. for (i = 13; i >= 0; i--)
  312. nic[i] = nic_read_byte(ioc3);
  313. printk("Ethernet address is ");
  314. for (i = 2; i < 8; i++) {
  315. ip->dev->dev_addr[i - 2] = nic[i];
  316. printk("%02x", nic[i]);
  317. if (i < 7)
  318. printk(":");
  319. }
  320. printk(".n");
  321. }
  322. /*
  323.  * Caller must hold the ioc3_lock ever for MII readers.  This is also
  324.  * used to protect the transmitter side but it's low contention.
  325.  */
  326. static u16 mii_read(struct ioc3_private *ip, int reg)
  327. {
  328. struct ioc3 *ioc3 = ip->regs;
  329. int phy = ip->phy;
  330. while (ioc3->micr & MICR_BUSY);
  331. ioc3->micr = (phy << MICR_PHYADDR_SHIFT) | reg | MICR_READTRIG;
  332. while (ioc3->micr & MICR_BUSY);
  333. return ioc3->midr_r & MIDR_DATA_MASK;
  334. }
  335. static void mii_write(struct ioc3_private *ip, int reg, u16 data)
  336. {
  337. struct ioc3 *ioc3 = ip->regs;
  338. int phy = ip->phy;
  339. while (ioc3->micr & MICR_BUSY);
  340. ioc3->midr_w = data;
  341. ioc3->micr = (phy << MICR_PHYADDR_SHIFT) | reg;
  342. while (ioc3->micr & MICR_BUSY);
  343. }
  344. static int ioc3_mii_init(struct ioc3_private *ip);
  345. static struct net_device_stats *ioc3_get_stats(struct net_device *dev)
  346. {
  347. struct ioc3_private *ip = dev->priv;
  348. struct ioc3 *ioc3 = ip->regs;
  349. ip->stats.collisions += (ioc3->etcdc & ETCDC_COLLCNT_MASK);
  350. return &ip->stats;
  351. }
  352. static inline void
  353. ioc3_rx(struct ioc3_private *ip)
  354. {
  355. struct sk_buff *skb, *new_skb;
  356. struct ioc3 *ioc3 = ip->regs;
  357. int rx_entry, n_entry, len;
  358. struct ioc3_erxbuf *rxb;
  359. unsigned long *rxr;
  360. u32 w0, err;
  361. rxr = (unsigned long *) ip->rxr; /* Ring base */
  362. rx_entry = ip->rx_ci; /* RX consume index */
  363. n_entry = ip->rx_pi;
  364. skb = ip->rx_skbs[rx_entry];
  365. rxb = (struct ioc3_erxbuf *) (skb->data - RX_OFFSET);
  366. w0 = rxb->w0;
  367. while (w0 & ERXBUF_V) {
  368. err = rxb->err; /* It's valid ...  */
  369. if (err & ERXBUF_GOODPKT) {
  370. len = ((w0 >> ERXBUF_BYTECNT_SHIFT) & 0x7ff) - 4;
  371. skb_trim(skb, len);
  372. skb->protocol = eth_type_trans(skb, ip->dev);
  373. new_skb = ioc3_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
  374. if (!new_skb) {
  375. /* Ouch, drop packet and just recycle packet
  376.    to keep the ring filled.  */
  377. ip->stats.rx_dropped++;
  378. new_skb = skb;
  379. goto next;
  380. }
  381. netif_rx(skb);
  382. ip->rx_skbs[rx_entry] = NULL; /* Poison  */
  383. new_skb->dev = ip->dev;
  384. /* Because we reserve afterwards. */
  385. skb_put(new_skb, (1664 + RX_OFFSET));
  386. rxb = (struct ioc3_erxbuf *) new_skb->data;
  387. skb_reserve(new_skb, RX_OFFSET);
  388. ip->dev->last_rx = jiffies;
  389. ip->stats.rx_packets++; /* Statistics */
  390. ip->stats.rx_bytes += len;
  391. } else {
  392.   /* The frame is invalid and the skb never
  393.                            reached the network layer so we can just
  394.                            recycle it.  */
  395.   new_skb = skb;
  396.   ip->stats.rx_errors++;
  397. }
  398. if (err & ERXBUF_CRCERR) /* Statistics */
  399. ip->stats.rx_crc_errors++;
  400. if (err & ERXBUF_FRAMERR)
  401. ip->stats.rx_frame_errors++;
  402. next:
  403. ip->rx_skbs[n_entry] = new_skb;
  404. rxr[n_entry] = (0xa5UL << 56) |
  405.                 ((unsigned long) rxb & TO_PHYS_MASK);
  406. rxb->w0 = 0; /* Clear valid flag */
  407. n_entry = (n_entry + 1) & 511; /* Update erpir */
  408. /* Now go on to the next ring entry.  */
  409. rx_entry = (rx_entry + 1) & 511;
  410. skb = ip->rx_skbs[rx_entry];
  411. rxb = (struct ioc3_erxbuf *) (skb->data - RX_OFFSET);
  412. w0 = rxb->w0;
  413. }
  414. ioc3->erpir = (n_entry << 3) | ERPIR_ARM;
  415. ip->rx_pi = n_entry;
  416. ip->rx_ci = rx_entry;
  417. }
  418. static inline void
  419. ioc3_tx(struct ioc3_private *ip)
  420. {
  421. unsigned long packets, bytes;
  422. struct ioc3 *ioc3 = ip->regs;
  423. int tx_entry, o_entry;
  424. struct sk_buff *skb;
  425. u32 etcir;
  426. spin_lock(&ip->ioc3_lock);
  427. etcir = ioc3->etcir;
  428. tx_entry = (etcir >> 7) & 127;
  429. o_entry = ip->tx_ci;
  430. packets = 0;
  431. bytes = 0;
  432. while (o_entry != tx_entry) {
  433. packets++;
  434. skb = ip->tx_skbs[o_entry];
  435. bytes += skb->len;
  436. dev_kfree_skb_irq(skb);
  437. ip->tx_skbs[o_entry] = NULL;
  438. o_entry = (o_entry + 1) & 127; /* Next */
  439. etcir = ioc3->etcir; /* More pkts sent?  */
  440. tx_entry = (etcir >> 7) & 127;
  441. }
  442. ip->stats.tx_packets += packets;
  443. ip->stats.tx_bytes += bytes;
  444. ip->txqlen -= packets;
  445. if (ip->txqlen < 128)
  446. netif_wake_queue(ip->dev);
  447. ip->tx_ci = o_entry;
  448. spin_unlock(&ip->ioc3_lock);
  449. }
  450. /*
  451.  * Deal with fatal IOC3 errors.  This condition might be caused by a hard or
  452.  * software problems, so we should try to recover
  453.  * more gracefully if this ever happens.  In theory we might be flooded
  454.  * with such error interrupts if something really goes wrong, so we might
  455.  * also consider to take the interface down.
  456.  */
  457. static void
  458. ioc3_error(struct ioc3_private *ip, u32 eisr)
  459. {
  460. struct net_device *dev = ip->dev;
  461. unsigned char *iface = dev->name;
  462. if (eisr & EISR_RXOFLO)
  463. printk(KERN_ERR "%s: RX overflow.n", iface);
  464. if (eisr & EISR_RXBUFOFLO)
  465. printk(KERN_ERR "%s: RX buffer overflow.n", iface);
  466. if (eisr & EISR_RXMEMERR)
  467. printk(KERN_ERR "%s: RX PCI error.n", iface);
  468. if (eisr & EISR_RXPARERR)
  469. printk(KERN_ERR "%s: RX SSRAM parity error.n", iface);
  470. if (eisr & EISR_TXBUFUFLO)
  471. printk(KERN_ERR "%s: TX buffer underflow.n", iface);
  472. if (eisr & EISR_TXMEMERR)
  473. printk(KERN_ERR "%s: TX PCI error.n", iface);
  474. ioc3_stop(ip);
  475. ioc3_init(ip);
  476. ioc3_mii_init(ip);
  477. dev->trans_start = jiffies;
  478. netif_wake_queue(dev);
  479. }
  480. /* The interrupt handler does all of the Rx thread work and cleans up
  481.    after the Tx thread.  */
  482. static void ioc3_interrupt(int irq, void *_dev, struct pt_regs *regs)
  483. {
  484. struct net_device *dev = (struct net_device *)_dev;
  485. struct ioc3_private *ip = dev->priv;
  486. struct ioc3 *ioc3 = ip->regs;
  487. const u32 enabled = EISR_RXTIMERINT | EISR_RXOFLO | EISR_RXBUFOFLO |
  488.                     EISR_RXMEMERR | EISR_RXPARERR | EISR_TXBUFUFLO |
  489.                     EISR_TXEXPLICIT | EISR_TXMEMERR;
  490. u32 eisr;
  491. eisr = ioc3->eisr & enabled;
  492. while (eisr) {
  493. ioc3->eisr = eisr;
  494. ioc3->eisr; /* Flush */
  495. if (eisr & (EISR_RXOFLO | EISR_RXBUFOFLO | EISR_RXMEMERR |
  496.             EISR_RXPARERR | EISR_TXBUFUFLO | EISR_TXMEMERR))
  497. ioc3_error(ip, eisr);
  498. if (eisr & EISR_RXTIMERINT)
  499. ioc3_rx(ip);
  500. if (eisr & EISR_TXEXPLICIT)
  501. ioc3_tx(ip);
  502. eisr = ioc3->eisr & enabled;
  503. }
  504. }
  505. /*
  506.  * Auto negotiation.  The scheme is very simple.  We have a timer routine that
  507.  * keeps watching the auto negotiation process as it progresses.  The DP83840
  508.  * is first told to start doing it's thing, we set up the time and place the
  509.  * timer state machine in it's initial state.
  510.  *
  511.  * Here the timer peeks at the DP83840 status registers at each click to see
  512.  * if the auto negotiation has completed, we assume here that the DP83840 PHY
  513.  * will time out at some point and just tell us what (didn't) happen.  For
  514.  * complete coverage we only allow so many of the ticks at this level to run,
  515.  * when this has expired we print a warning message and try another strategy.
  516.  * This "other" strategy is to force the interface into various speed/duplex
  517.  * configurations and we stop when we see a link-up condition before the
  518.  * maximum number of "peek" ticks have occurred.
  519.  *
  520.  * Once a valid link status has been detected we configure the IOC3 to speak
  521.  * the most efficient protocol we could get a clean link for.  The priority
  522.  * for link configurations, highest first is:
  523.  *
  524.  *     100 Base-T Full Duplex
  525.  *     100 Base-T Half Duplex
  526.  *     10 Base-T Full Duplex
  527.  *     10 Base-T Half Duplex
  528.  *
  529.  * We start a new timer now, after a successful auto negotiation status has
  530.  * been detected.  This timer just waits for the link-up bit to get set in
  531.  * the BMCR of the DP83840.  When this occurs we print a kernel log message
  532.  * describing the link type in use and the fact that it is up.
  533.  *
  534.  * If a fatal error of some sort is signalled and detected in the interrupt
  535.  * service routine, and the chip is reset, or the link is ifconfig'd down
  536.  * and then back up, this entire process repeats itself all over again.
  537.  */
  538. static int ioc3_try_next_permutation(struct ioc3_private *ip)
  539. {
  540. ip->sw_bmcr = mii_read(ip, MII_BMCR);
  541. /* Downgrade from full to half duplex.  Only possible via ethtool.  */
  542. if (ip->sw_bmcr & BMCR_FULLDPLX) {
  543. ip->sw_bmcr &= ~BMCR_FULLDPLX;
  544. mii_write(ip, MII_BMCR, ip->sw_bmcr);
  545. return 0;
  546. }
  547. /* Downgrade from 100 to 10. */
  548. if (ip->sw_bmcr & BMCR_SPEED100) {
  549. ip->sw_bmcr &= ~BMCR_SPEED100;
  550. mii_write(ip, MII_BMCR, ip->sw_bmcr);
  551. return 0;
  552. }
  553. /* We've tried everything. */
  554. return -1;
  555. }
  556. static void
  557. ioc3_display_link_mode(struct ioc3_private *ip)
  558. {
  559. char *tmode = "";
  560. ip->sw_lpa = mii_read(ip, MII_LPA);
  561. if (ip->sw_lpa & (LPA_100HALF | LPA_100FULL)) {
  562. if (ip->sw_lpa & LPA_100FULL)
  563. tmode = "100Mb/s, Full Duplex";
  564. else
  565. tmode = "100Mb/s, Half Duplex";
  566. } else {
  567. if (ip->sw_lpa & LPA_10FULL)
  568. tmode = "10Mb/s, Full Duplex";
  569. else
  570. tmode = "10Mb/s, Half Duplex";
  571. }
  572. printk(KERN_INFO "%s: Link is up at %s.n", ip->dev->name, tmode);
  573. }
  574. static void
  575. ioc3_display_forced_link_mode(struct ioc3_private *ip)
  576. {
  577. char *speed = "", *duplex = "";
  578. ip->sw_bmcr = mii_read(ip, MII_BMCR);
  579. if (ip->sw_bmcr & BMCR_SPEED100)
  580. speed = "100Mb/s, ";
  581. else
  582. speed = "10Mb/s, ";
  583. if (ip->sw_bmcr & BMCR_FULLDPLX)
  584. duplex = "Full Duplex.n";
  585. else
  586. duplex = "Half Duplex.n";
  587. printk(KERN_INFO "%s: Link has been forced up at %s%s", ip->dev->name,
  588.        speed, duplex);
  589. }
  590. static int ioc3_set_link_modes(struct ioc3_private *ip)
  591. {
  592. struct ioc3 *ioc3 = ip->regs;
  593. int full;
  594. /*
  595.  * All we care about is making sure the bigmac tx_cfg has a
  596.  * proper duplex setting.
  597.  */
  598. if (ip->timer_state == arbwait) {
  599. ip->sw_lpa = mii_read(ip, MII_LPA);
  600. if (!(ip->sw_lpa & (LPA_10HALF | LPA_10FULL |
  601.                     LPA_100HALF | LPA_100FULL)))
  602. goto no_response;
  603. if (ip->sw_lpa & LPA_100FULL)
  604. full = 1;
  605. else if (ip->sw_lpa & LPA_100HALF)
  606. full = 0;
  607. else if (ip->sw_lpa & LPA_10FULL)
  608. full = 1;
  609. else
  610. full = 0;
  611. } else {
  612. /* Forcing a link mode. */
  613. ip->sw_bmcr = mii_read(ip, MII_BMCR);
  614. if (ip->sw_bmcr & BMCR_FULLDPLX)
  615. full = 1;
  616. else
  617. full = 0;
  618. }
  619. if (full)
  620. ip->emcr |= EMCR_DUPLEX;
  621. else
  622. ip->emcr &= ~EMCR_DUPLEX;
  623. ioc3->emcr = ip->emcr;
  624. ioc3->emcr;
  625. return 0;
  626. no_response:
  627. return 1;
  628. }
  629. static int is_lucent_phy(struct ioc3_private *ip)
  630. {
  631. unsigned short mr2, mr3;
  632. int ret = 0;
  633. mr2 = mii_read(ip, MII_PHYSID1);
  634. mr3 = mii_read(ip, MII_PHYSID2);
  635. if ((mr2 & 0xffff) == 0x0180 && ((mr3 & 0xffff) >> 10) == 0x1d) {
  636. ret = 1;
  637. }
  638. return ret;
  639. }
  640. static void ioc3_timer(unsigned long data)
  641. {
  642. struct ioc3_private *ip = (struct ioc3_private *) data;
  643. int restart_timer = 0;
  644. ip->timer_ticks++;
  645. switch (ip->timer_state) {
  646. case arbwait:
  647. /*
  648.  * Only allow for 5 ticks, thats 10 seconds and much too
  649.  * long to wait for arbitration to complete.
  650.  */
  651. if (ip->timer_ticks >= 10) {
  652. /* Enter force mode. */
  653. do_force_mode:
  654. ip->sw_bmcr = mii_read(ip, MII_BMCR);
  655. printk(KERN_NOTICE "%s: Auto-Negotiation unsuccessful,"
  656.        " trying force link moden", ip->dev->name);
  657. ip->sw_bmcr = BMCR_SPEED100;
  658. mii_write(ip, MII_BMCR, ip->sw_bmcr);
  659. if (!is_lucent_phy(ip)) {
  660. /*
  661.  * OK, seems we need do disable the transceiver
  662.  * for the first tick to make sure we get an
  663.  * accurate link state at the second tick.
  664.  */
  665. ip->sw_csconfig = mii_read(ip, MII_CSCONFIG);
  666. ip->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
  667. mii_write(ip, MII_CSCONFIG, ip->sw_csconfig);
  668. }
  669. ip->timer_state = ltrywait;
  670. ip->timer_ticks = 0;
  671. restart_timer = 1;
  672. } else {
  673. /* Anything interesting happen? */
  674. ip->sw_bmsr = mii_read(ip, MII_BMSR);
  675. if (ip->sw_bmsr & BMSR_ANEGCOMPLETE) {
  676. int ret;
  677. /* Just what we've been waiting for... */
  678. ret = ioc3_set_link_modes(ip);
  679. if (ret) {
  680. /* Ooops, something bad happened, go to
  681.  * force mode.
  682.  *
  683.  * XXX Broken hubs which don't support
  684.  * XXX 802.3u auto-negotiation make this
  685.  * XXX happen as well.
  686.  */
  687. goto do_force_mode;
  688. }
  689. /*
  690.  * Success, at least so far, advance our state
  691.  * engine.
  692.  */
  693. ip->timer_state = lupwait;
  694. restart_timer = 1;
  695. } else {
  696. restart_timer = 1;
  697. }
  698. }
  699. break;
  700. case lupwait:
  701. /*
  702.  * Auto negotiation was successful and we are awaiting a
  703.  * link up status.  I have decided to let this timer run
  704.  * forever until some sort of error is signalled, reporting
  705.  * a message to the user at 10 second intervals.
  706.  */
  707. ip->sw_bmsr = mii_read(ip, MII_BMSR);
  708. if (ip->sw_bmsr & BMSR_LSTATUS) {
  709. /*
  710.  * Wheee, it's up, display the link mode in use and put
  711.  * the timer to sleep.
  712.  */
  713. ioc3_display_link_mode(ip);
  714. ip->timer_state = asleep;
  715. restart_timer = 0;
  716. } else {
  717. if (ip->timer_ticks >= 10) {
  718. printk(KERN_NOTICE "%s: Auto negotiation successful, link still "
  719.        "not completely up.n", ip->dev->name);
  720. ip->timer_ticks = 0;
  721. restart_timer = 1;
  722. } else {
  723. restart_timer = 1;
  724. }
  725. }
  726. break;
  727. case ltrywait:
  728. /*
  729.  * Making the timeout here too long can make it take
  730.  * annoyingly long to attempt all of the link mode
  731.  * permutations, but then again this is essentially
  732.  * error recovery code for the most part.
  733.  */
  734. ip->sw_bmsr = mii_read(ip, MII_BMSR);
  735. ip->sw_csconfig = mii_read(ip, MII_CSCONFIG);
  736. if (ip->timer_ticks == 1) {
  737. if (!is_lucent_phy(ip)) {
  738. /*
  739.  * Re-enable transceiver, we'll re-enable the
  740.  * transceiver next tick, then check link state
  741.  * on the following tick.
  742.  */
  743. ip->sw_csconfig |= CSCONFIG_TCVDISAB;
  744. mii_write(ip, MII_CSCONFIG, ip->sw_csconfig);
  745. }
  746. restart_timer = 1;
  747. break;
  748. }
  749. if (ip->timer_ticks == 2) {
  750. if (!is_lucent_phy(ip)) {
  751. ip->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
  752. mii_write(ip, MII_CSCONFIG, ip->sw_csconfig);
  753. }
  754. restart_timer = 1;
  755. break;
  756. }
  757. if (ip->sw_bmsr & BMSR_LSTATUS) {
  758. /* Force mode selection success. */
  759. ioc3_display_forced_link_mode(ip);
  760. ioc3_set_link_modes(ip);  /* XXX error? then what? */
  761. ip->timer_state = asleep;
  762. restart_timer = 0;
  763. } else {
  764. if (ip->timer_ticks >= 4) { /* 6 seconds or so... */
  765. int ret;
  766. ret = ioc3_try_next_permutation(ip);
  767. if (ret == -1) {
  768. /*
  769.  * Aieee, tried them all, reset the
  770.  * chip and try all over again.
  771.  */
  772. printk(KERN_NOTICE "%s: Link down, "
  773.        "cable problem?n",
  774.        ip->dev->name);
  775. ioc3_init(ip);
  776. return;
  777. }
  778. if (!is_lucent_phy(ip)) {
  779. ip->sw_csconfig = mii_read(ip,
  780.                     MII_CSCONFIG);
  781. ip->sw_csconfig |= CSCONFIG_TCVDISAB;
  782. mii_write(ip, MII_CSCONFIG,
  783.           ip->sw_csconfig);
  784. }
  785. ip->timer_ticks = 0;
  786. restart_timer = 1;
  787. } else {
  788. restart_timer = 1;
  789. }
  790. }
  791. break;
  792. case asleep:
  793. default:
  794. /* Can't happens.... */
  795. printk(KERN_ERR "%s: Aieee, link timer is asleep but we got "
  796.        "one anyways!n", ip->dev->name);
  797. restart_timer = 0;
  798. ip->timer_ticks = 0;
  799. ip->timer_state = asleep; /* foo on you */
  800. break;
  801. };
  802. if (restart_timer) {
  803. ip->ioc3_timer.expires = jiffies + ((12 * HZ)/10); /* 1.2s */
  804. add_timer(&ip->ioc3_timer);
  805. }
  806. }
  807. static void
  808. ioc3_start_auto_negotiation(struct ioc3_private *ip, struct ethtool_cmd *ep)
  809. {
  810. int timeout;
  811. /* Read all of the registers we are interested in now. */
  812. ip->sw_bmsr      = mii_read(ip, MII_BMSR);
  813. ip->sw_bmcr      = mii_read(ip, MII_BMCR);
  814. ip->sw_physid1   = mii_read(ip, MII_PHYSID1);
  815. ip->sw_physid2   = mii_read(ip, MII_PHYSID2);
  816. /* XXX Check BMSR_ANEGCAPABLE, should not be necessary though. */
  817. ip->sw_advertise = mii_read(ip, MII_ADVERTISE);
  818. if (ep == NULL || ep->autoneg == AUTONEG_ENABLE) {
  819. /* Advertise everything we can support. */
  820. if (ip->sw_bmsr & BMSR_10HALF)
  821. ip->sw_advertise |= ADVERTISE_10HALF;
  822. else
  823. ip->sw_advertise &= ~ADVERTISE_10HALF;
  824. if (ip->sw_bmsr & BMSR_10FULL)
  825. ip->sw_advertise |= ADVERTISE_10FULL;
  826. else
  827. ip->sw_advertise &= ~ADVERTISE_10FULL;
  828. if (ip->sw_bmsr & BMSR_100HALF)
  829. ip->sw_advertise |= ADVERTISE_100HALF;
  830. else
  831. ip->sw_advertise &= ~ADVERTISE_100HALF;
  832. if (ip->sw_bmsr & BMSR_100FULL)
  833. ip->sw_advertise |= ADVERTISE_100FULL;
  834. else
  835. ip->sw_advertise &= ~ADVERTISE_100FULL;
  836. mii_write(ip, MII_ADVERTISE, ip->sw_advertise);
  837. /*
  838.  * XXX Currently no IOC3 card I know off supports 100BaseT4,
  839.  * XXX and this is because the DP83840 does not support it,
  840.  * XXX changes XXX would need to be made to the tx/rx logic in
  841.  * XXX the driver as well so I completely skip checking for it
  842.  * XXX in the BMSR for now.
  843.  */
  844. #ifdef AUTO_SWITCH_DEBUG
  845. ASD(("%s: Advertising [ ", ip->dev->name));
  846. if (ip->sw_advertise & ADVERTISE_10HALF)
  847. ASD(("10H "));
  848. if (ip->sw_advertise & ADVERTISE_10FULL)
  849. ASD(("10F "));
  850. if (ip->sw_advertise & ADVERTISE_100HALF)
  851. ASD(("100H "));
  852. if (ip->sw_advertise & ADVERTISE_100FULL)
  853. ASD(("100F "));
  854. #endif
  855. /* Enable Auto-Negotiation, this is usually on already... */
  856. ip->sw_bmcr |= BMCR_ANENABLE;
  857. mii_write(ip, MII_BMCR, ip->sw_bmcr);
  858. /* Restart it to make sure it is going. */
  859. ip->sw_bmcr |= BMCR_ANRESTART;
  860. mii_write(ip, MII_BMCR, ip->sw_bmcr);
  861. /* BMCR_ANRESTART self clears when the process has begun. */
  862. timeout = 64;  /* More than enough. */
  863. while (--timeout) {
  864. ip->sw_bmcr = mii_read(ip, MII_BMCR);
  865. if (!(ip->sw_bmcr & BMCR_ANRESTART))
  866. break; /* got it. */
  867. udelay(10);
  868. }
  869. if (!timeout) {
  870. printk(KERN_ERR "%s: IOC3 would not start auto "
  871.        "negotiation BMCR=0x%04xn",
  872.        ip->dev->name, ip->sw_bmcr);
  873. printk(KERN_NOTICE "%s: Performing force link "
  874.        "detection.n", ip->dev->name);
  875. goto force_link;
  876. } else {
  877. ip->timer_state = arbwait;
  878. }
  879. } else {
  880. force_link:
  881. /*
  882.  * Force the link up, trying first a particular mode.  Either
  883.  * we are here at the request of ethtool or because the IOC3
  884.  * would not start to autoneg.
  885.  */
  886. /*
  887.  * Disable auto-negotiation in BMCR, enable the duplex and
  888.  * speed setting, init the timer state machine, and fire it off.
  889.  */
  890. if (ep == NULL || ep->autoneg == AUTONEG_ENABLE) {
  891. ip->sw_bmcr = BMCR_SPEED100;
  892. } else {
  893. if (ep->speed == SPEED_100)
  894. ip->sw_bmcr = BMCR_SPEED100;
  895. else
  896. ip->sw_bmcr = 0;
  897. if (ep->duplex == DUPLEX_FULL)
  898. ip->sw_bmcr |= BMCR_FULLDPLX;
  899. }
  900. mii_write(ip, MII_BMCR, ip->sw_bmcr);
  901. if (!is_lucent_phy(ip)) {
  902. /*
  903.  * OK, seems we need do disable the transceiver for the
  904.  * first tick to make sure we get an accurate link
  905.  * state at the second tick.
  906.  */
  907. ip->sw_csconfig = mii_read(ip, MII_CSCONFIG);
  908. ip->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
  909. mii_write(ip, MII_CSCONFIG, ip->sw_csconfig);
  910. }
  911. ip->timer_state = ltrywait;
  912. }
  913. del_timer(&ip->ioc3_timer);
  914. ip->timer_ticks = 0;
  915. ip->ioc3_timer.expires = jiffies + (12 * HZ)/10;  /* 1.2 sec. */
  916. ip->ioc3_timer.data = (unsigned long) ip;
  917. ip->ioc3_timer.function = &ioc3_timer;
  918. add_timer(&ip->ioc3_timer);
  919. }
  920. static int ioc3_mii_init(struct ioc3_private *ip)
  921. {
  922. int i, found;
  923. u16 word;
  924. found = 0;
  925. spin_lock_irq(&ip->ioc3_lock);
  926. for (i = 0; i < 32; i++) {
  927. ip->phy = i;
  928. word = mii_read(ip, 2);
  929. if ((word != 0xffff) && (word != 0x0000)) {
  930. found = 1;
  931. break; /* Found a PHY */
  932. }
  933. }
  934. if (!found) {
  935. spin_unlock_irq(&ip->ioc3_lock);
  936. return -ENODEV;
  937. }
  938. ioc3_start_auto_negotiation(ip, NULL); // XXX ethtool
  939. spin_unlock_irq(&ip->ioc3_lock);
  940. return 0;
  941. }
  942. static inline void
  943. ioc3_clean_rx_ring(struct ioc3_private *ip)
  944. {
  945. struct sk_buff *skb;
  946. int i;
  947. for (i = ip->rx_ci; i & 15; i++) {
  948. ip->rx_skbs[ip->rx_pi] = ip->rx_skbs[ip->rx_ci];
  949. ip->rxr[ip->rx_pi++] = ip->rxr[ip->rx_ci++];
  950. }
  951. ip->rx_pi &= 511;
  952. ip->rx_ci &= 511;
  953. for (i = ip->rx_ci; i != ip->rx_pi; i = (i+1) & 511) {
  954. struct ioc3_erxbuf *rxb;
  955. skb = ip->rx_skbs[i];
  956. rxb = (struct ioc3_erxbuf *) (skb->data - RX_OFFSET);
  957. rxb->w0 = 0;
  958. }
  959. }
  960. static inline void
  961. ioc3_clean_tx_ring(struct ioc3_private *ip)
  962. {
  963. struct sk_buff *skb;
  964. int i;
  965. for (i=0; i < 128; i++) {
  966. skb = ip->tx_skbs[i];
  967. if (skb) {
  968. ip->tx_skbs[i] = NULL;
  969. dev_kfree_skb_any(skb);
  970. }
  971. ip->txr[i].cmd = 0;
  972. }
  973. ip->tx_pi = 0;
  974. ip->tx_ci = 0;
  975. }
  976. static void
  977. ioc3_free_rings(struct ioc3_private *ip)
  978. {
  979. struct sk_buff *skb;
  980. int rx_entry, n_entry;
  981. if (ip->txr) {
  982. ioc3_clean_tx_ring(ip);
  983. free_pages((unsigned long)ip->txr, 2);
  984. ip->txr = NULL;
  985. }
  986. if (ip->rxr) {
  987. n_entry = ip->rx_ci;
  988. rx_entry = ip->rx_pi;
  989. while (n_entry != rx_entry) {
  990. skb = ip->rx_skbs[n_entry];
  991. if (skb)
  992. dev_kfree_skb_any(skb);
  993. n_entry = (n_entry + 1) & 511;
  994. }
  995. free_page((unsigned long)ip->rxr);
  996. ip->rxr = NULL;
  997. }
  998. }
  999. static void
  1000. ioc3_alloc_rings(struct net_device *dev, struct ioc3_private *ip,
  1001.  struct ioc3 *ioc3)
  1002. {
  1003. struct ioc3_erxbuf *rxb;
  1004. unsigned long *rxr;
  1005. int i;
  1006. if (ip->rxr == NULL) {
  1007. /* Allocate and initialize rx ring.  4kb = 512 entries  */
  1008. ip->rxr = (unsigned long *) get_free_page(GFP_ATOMIC);
  1009. rxr = (unsigned long *) ip->rxr;
  1010. if (!rxr)
  1011. printk("ioc3_alloc_rings(): get_free_page() failed!n");
  1012. /* Now the rx buffers.  The RX ring may be larger but
  1013.    we only allocate 16 buffers for now.  Need to tune
  1014.    this for performance and memory later.  */
  1015. for (i = 0; i < RX_BUFFS; i++) {
  1016. struct sk_buff *skb;
  1017. skb = ioc3_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
  1018. if (!skb) {
  1019. show_free_areas();
  1020. continue;
  1021. }
  1022. ip->rx_skbs[i] = skb;
  1023. skb->dev = dev;
  1024. /* Because we reserve afterwards. */
  1025. skb_put(skb, (1664 + RX_OFFSET));
  1026. rxb = (struct ioc3_erxbuf *) skb->data;
  1027. rxr[i] = (0xa5UL << 56)
  1028. | ((unsigned long) rxb & TO_PHYS_MASK);
  1029. skb_reserve(skb, RX_OFFSET);
  1030. }
  1031. ip->rx_ci = 0;
  1032. ip->rx_pi = RX_BUFFS;
  1033. }
  1034. if (ip->txr == NULL) {
  1035. /* Allocate and initialize tx rings.  16kb = 128 bufs.  */
  1036. ip->txr = (struct ioc3_etxd *)__get_free_pages(GFP_KERNEL, 2);
  1037. if (!ip->txr)
  1038. printk("ioc3_alloc_rings(): get_free_page() failed!n");
  1039. ip->tx_pi = 0;
  1040. ip->tx_ci = 0;
  1041. }
  1042. }
  1043. static void
  1044. ioc3_init_rings(struct net_device *dev, struct ioc3_private *ip,
  1045.         struct ioc3 *ioc3)
  1046. {
  1047. unsigned long ring;
  1048. ioc3_free_rings(ip);
  1049. ioc3_alloc_rings(dev, ip, ioc3);
  1050. ioc3_clean_rx_ring(ip);
  1051. ioc3_clean_tx_ring(ip);
  1052. /* Now the rx ring base, consume & produce registers.  */
  1053. ring = (0xa5UL << 56) | ((unsigned long)ip->rxr & TO_PHYS_MASK);
  1054. ioc3->erbr_h = ring >> 32;
  1055. ioc3->erbr_l = ring & 0xffffffff;
  1056. ioc3->ercir  = (ip->rx_ci << 3);
  1057. ioc3->erpir  = (ip->rx_pi << 3) | ERPIR_ARM;
  1058. ring = (0xa5UL << 56) | ((unsigned long)ip->txr & TO_PHYS_MASK);
  1059. ip->txqlen = 0; /* nothing queued  */
  1060. /* Now the tx ring base, consume & produce registers.  */
  1061. ioc3->etbr_h = ring >> 32;
  1062. ioc3->etbr_l = ring & 0xffffffff;
  1063. ioc3->etpir  = (ip->tx_pi << 7);
  1064. ioc3->etcir  = (ip->tx_ci << 7);
  1065. ioc3->etcir; /* Flush */
  1066. }
  1067. static inline void
  1068. ioc3_ssram_disc(struct ioc3_private *ip)
  1069. {
  1070. struct ioc3 *ioc3 = ip->regs;
  1071. volatile u32 *ssram0 = &ioc3->ssram[0x0000];
  1072. volatile u32 *ssram1 = &ioc3->ssram[0x4000];
  1073. unsigned int pattern = 0x5555;
  1074. /* Assume the larger size SSRAM and enable parity checking */
  1075. ioc3->emcr |= (EMCR_BUFSIZ | EMCR_RAMPAR);
  1076. *ssram0 = pattern;
  1077. *ssram1 = ~pattern & IOC3_SSRAM_DM;
  1078. if ((*ssram0 & IOC3_SSRAM_DM) != pattern ||
  1079.     (*ssram1 & IOC3_SSRAM_DM) != (~pattern & IOC3_SSRAM_DM)) {
  1080. /* set ssram size to 64 KB */
  1081. ip->emcr = EMCR_RAMPAR;
  1082. ioc3->emcr &= ~EMCR_BUFSIZ;
  1083. } else {
  1084. ip->emcr = EMCR_BUFSIZ | EMCR_RAMPAR;
  1085. }
  1086. }
  1087. static void ioc3_init(struct ioc3_private *ip)
  1088. {
  1089. struct net_device *dev = ip->dev;
  1090. struct ioc3 *ioc3 = ip->regs;
  1091. del_timer(&ip->ioc3_timer); /* Kill if running */
  1092. ioc3->emcr = EMCR_RST; /* Reset */
  1093. ioc3->emcr; /* Flush WB */
  1094. udelay(4); /* Give it time ... */
  1095. ioc3->emcr = 0;
  1096. ioc3->emcr;
  1097. /* Misc registers  */
  1098. ioc3->erbar = 0;
  1099. ioc3->etcsr = (17<<ETCSR_IPGR2_SHIFT) | (11<<ETCSR_IPGR1_SHIFT) | 21;
  1100. ioc3->etcdc; /* Clear on read */
  1101. ioc3->ercsr = 15; /* RX low watermark  */
  1102. ioc3->ertr = 0; /* Interrupt immediately */
  1103. ioc3->emar_h = (dev->dev_addr[5] << 8) | dev->dev_addr[4];
  1104. ioc3->emar_l = (dev->dev_addr[3] << 24) | (dev->dev_addr[2] << 16) |
  1105.                (dev->dev_addr[1] <<  8) | dev->dev_addr[0];
  1106. ioc3->ehar_h = ip->ehar_h;
  1107. ioc3->ehar_l = ip->ehar_l;
  1108. ioc3->ersr = 42; /* XXX should be random */
  1109. ioc3_init_rings(ip->dev, ip, ioc3);
  1110. ip->emcr |= ((RX_OFFSET / 2) << EMCR_RXOFF_SHIFT) | EMCR_TXDMAEN |
  1111.              EMCR_TXEN | EMCR_RXDMAEN | EMCR_RXEN;
  1112. ioc3->emcr = ip->emcr;
  1113. ioc3->eier = EISR_RXTIMERINT | EISR_RXOFLO | EISR_RXBUFOFLO |
  1114.              EISR_RXMEMERR | EISR_RXPARERR | EISR_TXBUFUFLO |
  1115.              EISR_TXEXPLICIT | EISR_TXMEMERR;
  1116. ioc3->eier;
  1117. }
  1118. static inline void ioc3_stop(struct ioc3_private *ip)
  1119. {
  1120. struct ioc3 *ioc3 = ip->regs;
  1121. ioc3->emcr = 0; /* Shutup */
  1122. ioc3->eier = 0; /* Disable interrupts */
  1123. ioc3->eier; /* Flush */
  1124. }
  1125. static int
  1126. ioc3_open(struct net_device *dev)
  1127. {
  1128. struct ioc3_private *ip = dev->priv;
  1129. if (request_irq(dev->irq, ioc3_interrupt, SA_SHIRQ, ioc3_str, dev)) {
  1130. printk(KERN_ERR "%s: Can't get irq %dn", dev->name, dev->irq);
  1131. return -EAGAIN;
  1132. }
  1133. ip->ehar_h = 0;
  1134. ip->ehar_l = 0;
  1135. ioc3_init(ip);
  1136. netif_start_queue(dev);
  1137. return 0;
  1138. }
  1139. static int
  1140. ioc3_close(struct net_device *dev)
  1141. {
  1142. struct ioc3_private *ip = dev->priv;
  1143. del_timer(&ip->ioc3_timer);
  1144. netif_stop_queue(dev);
  1145. ioc3_stop(ip);
  1146. free_irq(dev->irq, dev);
  1147. ioc3_free_rings(ip);
  1148. return 0;
  1149. }
  1150. /*
  1151.  * MENET cards have four IOC3 chips, which are attached to two sets of
  1152.  * PCI slot resources each: the primary connections are on slots
  1153.  * 0..3 and the secondaries are on 4..7
  1154.  *
  1155.  * All four ethernets are brought out to connectors; six serial ports
  1156.  * (a pair from each of the first three IOC3s) are brought out to
  1157.  * MiniDINs; all other subdevices are left swinging in the wind, leave
  1158.  * them disabled.
  1159.  */
  1160. static inline int ioc3_is_menet(struct pci_dev *pdev)
  1161. {
  1162. struct pci_dev *dev;
  1163. return pdev->bus->parent == NULL
  1164.        && (dev = pci_find_slot(pdev->bus->number, PCI_DEVFN(0, 0)))
  1165.        && dev->vendor == PCI_VENDOR_ID_SGI
  1166.        && dev->device == PCI_DEVICE_ID_SGI_IOC3
  1167.        && (dev = pci_find_slot(pdev->bus->number, PCI_DEVFN(1, 0)))
  1168.        && dev->vendor == PCI_VENDOR_ID_SGI
  1169.        && dev->device == PCI_DEVICE_ID_SGI_IOC3
  1170.        && (dev = pci_find_slot(pdev->bus->number, PCI_DEVFN(2, 0)))
  1171.        && dev->vendor == PCI_VENDOR_ID_SGI
  1172.        && dev->device == PCI_DEVICE_ID_SGI_IOC3;
  1173. }
  1174. static void inline ioc3_serial_probe(struct pci_dev *pdev,
  1175. struct ioc3 *ioc3)
  1176. {
  1177. struct serial_struct req;
  1178. /*
  1179.  * We need to recognice and treat the fourth MENET serial as it
  1180.  * does not have an SuperIO chip attached to it, therefore attempting
  1181.  * to access it will result in bus errors.  We call something an
  1182.  * MENET if PCI slot 0, 1, 2 and 3 of a master PCI bus all have an IOC3
  1183.  * in it.  This is paranoid but we want to avoid blowing up on a
  1184.  * showhorn PCI box that happens to have 4 IOC3 cards in it so it's
  1185.  * not paranoid enough ...
  1186.  */
  1187. if (ioc3_is_menet(pdev) && PCI_SLOT(pdev->devfn) == 3)
  1188. return;
  1189. /* Register to interrupt zero because we share the interrupt with
  1190.    the serial driver which we don't properly support yet.  */
  1191. memset(&req, 0, sizeof(req));
  1192. req.irq             = 0;
  1193. req.flags           = IOC3_COM_FLAGS;
  1194. req.io_type         = SERIAL_IO_MEM;
  1195. req.iomem_reg_shift = 0;
  1196. req.baud_base       = IOC3_BAUD;
  1197. req.iomem_base      = (unsigned char *) &ioc3->sregs.uarta;
  1198. register_serial(&req);
  1199. req.iomem_base      = (unsigned char *) &ioc3->sregs.uartb;
  1200. register_serial(&req);
  1201. }
  1202. static int __devinit ioc3_probe(struct pci_dev *pdev,
  1203.                         const struct pci_device_id *ent)
  1204. {
  1205. struct net_device *dev = NULL;
  1206. struct ioc3_private *ip;
  1207. struct ioc3 *ioc3;
  1208. unsigned long ioc3_base, ioc3_size;
  1209. u32 vendor, model, rev;
  1210. int err;
  1211. dev = alloc_etherdev(sizeof(struct ioc3_private));
  1212. if (!dev)
  1213. return -ENOMEM;
  1214. err = pci_request_regions(pdev, "ioc3");
  1215. if (err)
  1216. goto out_free;
  1217. SET_MODULE_OWNER(dev);
  1218. ip = dev->priv;
  1219. ip->dev = dev;
  1220. dev->irq = pdev->irq;
  1221. ioc3_base = pci_resource_start(pdev, 0);
  1222. ioc3_size = pci_resource_len(pdev, 0);
  1223. ioc3 = (struct ioc3 *) ioremap(ioc3_base, ioc3_size);
  1224. if (!ioc3) {
  1225. printk(KERN_CRIT "ioc3eth(%s): ioremap failed, goodbye.n",
  1226.        pdev->slot_name);
  1227. err = -ENOMEM;
  1228. goto out_res;
  1229. }
  1230. ip->regs = ioc3;
  1231. #ifdef CONFIG_SERIAL
  1232. ioc3_serial_probe(pdev, ioc3);
  1233. #endif
  1234. spin_lock_init(&ip->ioc3_lock);
  1235. ioc3_stop(ip);
  1236. ioc3_init(ip);
  1237. init_timer(&ip->ioc3_timer);
  1238. ioc3_mii_init(ip);
  1239. if (ip->phy == -1) {
  1240. printk(KERN_CRIT "ioc3-eth(%s): Didn't find a PHY, goodbye.n",
  1241.        pdev->slot_name);
  1242. err = -ENODEV;
  1243. goto out_stop;
  1244. }
  1245. ioc3_ssram_disc(ip);
  1246. ioc3_get_eaddr(ip);
  1247. /* The IOC3-specific entries in the device structure. */
  1248. dev->open = ioc3_open;
  1249. dev->hard_start_xmit = ioc3_start_xmit;
  1250. dev->tx_timeout = ioc3_timeout;
  1251. dev->watchdog_timeo = 5 * HZ;
  1252. dev->stop = ioc3_close;
  1253. dev->get_stats = ioc3_get_stats;
  1254. dev->do_ioctl = ioc3_ioctl;
  1255. dev->set_multicast_list = ioc3_set_multicast_list;
  1256. err = register_netdev(dev);
  1257. if (err)
  1258. goto out_stop;
  1259. vendor = (ip->sw_physid1 << 12) | (ip->sw_physid2 >> 4);
  1260. model  = (ip->sw_physid2 >> 4) & 0x3f;
  1261. rev    = ip->sw_physid2 & 0xf;
  1262. printk(KERN_INFO "%s: Using PHY %d, vendor 0x%x, model %d, "
  1263.        "rev %d.n", dev->name, ip->phy, vendor, model, rev);
  1264. printk(KERN_INFO "%s: IOC3 SSRAM has %d kbyte.n", dev->name,
  1265.        ip->emcr & EMCR_BUFSIZ ? 128 : 64);
  1266. return 0;
  1267. out_stop:
  1268. ioc3_stop(ip);
  1269. free_irq(dev->irq, dev);
  1270. ioc3_free_rings(ip);
  1271. out_res:
  1272. pci_release_regions(pdev);
  1273. out_free:
  1274. kfree(dev);
  1275. return err;
  1276. }
  1277. static void __devexit ioc3_remove_one (struct pci_dev *pdev)
  1278. {
  1279. struct net_device *dev = pci_get_drvdata(pdev);
  1280. struct ioc3_private *ip = dev->priv;
  1281. struct ioc3 *ioc3 = ip->regs;
  1282. iounmap(ioc3);
  1283. pci_release_regions(pdev);
  1284. kfree(dev);
  1285. }
  1286. static struct pci_device_id ioc3_pci_tbl[] __devinitdata = {
  1287. { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3, PCI_ANY_ID, PCI_ANY_ID },
  1288. { 0 }
  1289. };
  1290. MODULE_DEVICE_TABLE(pci, ioc3_pci_tbl);
  1291. static struct pci_driver ioc3_driver = {
  1292. name: "ioc3-eth",
  1293. id_table: ioc3_pci_tbl,
  1294. probe: ioc3_probe,
  1295. remove: __devexit_p(ioc3_remove_one),
  1296. };
  1297. static int __init ioc3_init_module(void)
  1298. {
  1299. return pci_module_init(&ioc3_driver);
  1300. }
  1301. static void __exit ioc3_cleanup_module(void)
  1302. {
  1303. pci_unregister_driver(&ioc3_driver);
  1304. }
  1305. static int
  1306. ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev)
  1307. {
  1308. unsigned long data;
  1309. struct ioc3_private *ip = dev->priv;
  1310. struct ioc3 *ioc3 = ip->regs;
  1311. unsigned int len;
  1312. struct ioc3_etxd *desc;
  1313. int produce;
  1314. spin_lock_irq(&ip->ioc3_lock);
  1315. data = (unsigned long) skb->data;
  1316. len = skb->len;
  1317. produce = ip->tx_pi;
  1318. desc = &ip->txr[produce];
  1319. if (len <= 104) {
  1320. /* Short packet, let's copy it directly into the ring.  */
  1321. memcpy(desc->data, skb->data, skb->len);
  1322. if (len < ETH_ZLEN) {
  1323. /* Very short packet, pad with zeros at the end. */
  1324. memset(desc->data + len, 0, ETH_ZLEN - len);
  1325. len = ETH_ZLEN;
  1326. }
  1327. desc->cmd    = len | ETXD_INTWHENDONE | ETXD_D0V;
  1328. desc->bufcnt = len;
  1329. } else if ((data ^ (data + len)) & 0x4000) {
  1330. unsigned long b2, s1, s2;
  1331. b2 = (data | 0x3fffUL) + 1UL;
  1332. s1 = b2 - data;
  1333. s2 = data + len - b2;
  1334. desc->cmd    = len | ETXD_INTWHENDONE | ETXD_B1V | ETXD_B2V;
  1335. desc->bufcnt = (s1 << ETXD_B1CNT_SHIFT) |
  1336.                (s2 << ETXD_B2CNT_SHIFT);
  1337. desc->p1     = (0xa5UL << 56) | (data & TO_PHYS_MASK);
  1338. desc->p2     = (0xa5UL << 56) | (data & TO_PHYS_MASK);
  1339. } else {
  1340. /* Normal sized packet that doesn't cross a page boundary. */
  1341. desc->cmd    = len | ETXD_INTWHENDONE | ETXD_B1V;
  1342. desc->bufcnt = len << ETXD_B1CNT_SHIFT;
  1343. desc->p1     = (0xa5UL << 56) | (data & TO_PHYS_MASK);
  1344. }
  1345. BARRIER();
  1346. dev->trans_start = jiffies;
  1347. ip->tx_skbs[produce] = skb; /* Remember skb */
  1348. produce = (produce + 1) & 127;
  1349. ip->tx_pi = produce;
  1350. ioc3->etpir = produce << 7; /* Fire ... */
  1351. ip->txqlen++;
  1352. if (ip->txqlen > 127)
  1353. netif_stop_queue(dev);
  1354. spin_unlock_irq(&ip->ioc3_lock);
  1355. return 0;
  1356. }
  1357. static void ioc3_timeout(struct net_device *dev)
  1358. {
  1359. struct ioc3_private *ip = dev->priv;
  1360. printk(KERN_ERR "%s: transmit timed out, resettingn", dev->name);
  1361. ioc3_stop(ip);
  1362. ioc3_init(ip);
  1363. ioc3_mii_init(ip);
  1364. dev->trans_start = jiffies;
  1365. netif_wake_queue(dev);
  1366. }
  1367. /*
  1368.  * Given a multicast ethernet address, this routine calculates the
  1369.  * address's bit index in the logical address filter mask
  1370.  */
  1371. #define CRC_MASK        0xedb88320
  1372. static inline unsigned int
  1373. ioc3_hash(const unsigned char *addr)
  1374. {
  1375. unsigned int temp = 0;
  1376. unsigned char byte;
  1377. unsigned int crc;
  1378. int bits, len;
  1379. len = ETH_ALEN;
  1380. for (crc = ~0; --len >= 0; addr++) {
  1381. byte = *addr;
  1382. for (bits = 8; --bits >= 0; ) {
  1383. if ((byte ^ crc) & 1)
  1384. crc = (crc >> 1) ^ CRC_MASK;
  1385. else
  1386. crc >>= 1;
  1387. byte >>= 1;
  1388. }
  1389. }
  1390. crc &= 0x3f;    /* bit reverse lowest 6 bits for hash index */
  1391. for (bits = 6; --bits >= 0; ) {
  1392. temp <<= 1;
  1393. temp |= (crc & 0x1);
  1394. crc >>= 1;
  1395. }
  1396. return temp;
  1397. }
  1398. /* We provide both the mii-tools and the ethtool ioctls.  */
  1399. static int ioc3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  1400. {
  1401. struct ioc3_private *ip = dev->priv;
  1402. struct ethtool_cmd *ep_user = (struct ethtool_cmd *) rq->ifr_data;
  1403. u16 *data = (u16 *)&rq->ifr_data;
  1404. struct ioc3 *ioc3 = ip->regs;
  1405. struct ethtool_cmd ecmd;
  1406. switch (cmd) {
  1407. case SIOCGMIIPHY: /* Get the address of the PHY in use.  */
  1408. if (ip->phy == -1)
  1409. return -ENODEV;
  1410. data[0] = ip->phy;
  1411. return 0;
  1412. case SIOCGMIIREG: { /* Read a PHY register.  */
  1413. unsigned int phy = data[0];
  1414. unsigned int reg = data[1];
  1415. if (phy > 0x1f || reg > 0x1f)
  1416. return -EINVAL;
  1417. spin_lock_irq(&ip->ioc3_lock);
  1418. while (ioc3->micr & MICR_BUSY);
  1419. ioc3->micr = (phy << MICR_PHYADDR_SHIFT) | reg | MICR_READTRIG;
  1420. while (ioc3->micr & MICR_BUSY);
  1421. data[3] = (ioc3->midr_r & MIDR_DATA_MASK);
  1422. spin_unlock_irq(&ip->ioc3_lock);
  1423. return 0;
  1424. case SIOCSMIIREG: /* Write a PHY register.  */
  1425. phy = data[0];
  1426. reg = data[1];
  1427. if (!capable(CAP_NET_ADMIN))
  1428. return -EPERM;
  1429. if (phy > 0x1f || reg > 0x1f)
  1430. return -EINVAL;
  1431. spin_lock_irq(&ip->ioc3_lock);
  1432. while (ioc3->micr & MICR_BUSY);
  1433. ioc3->midr_w = data[2];
  1434. ioc3->micr = (phy << MICR_PHYADDR_SHIFT) | reg;
  1435. while (ioc3->micr & MICR_BUSY);
  1436. spin_unlock_irq(&ip->ioc3_lock);
  1437. return 0;
  1438. }
  1439. case SIOCETHTOOL:
  1440. if (copy_from_user(&ecmd, ep_user, sizeof(ecmd)))
  1441. return -EFAULT;
  1442. if (ecmd.cmd == ETHTOOL_GSET) {
  1443. ecmd.supported =
  1444. (SUPPORTED_10baseT_Half |
  1445.  SUPPORTED_10baseT_Full |
  1446.  SUPPORTED_100baseT_Half |
  1447.  SUPPORTED_100baseT_Full | SUPPORTED_Autoneg |
  1448.  SUPPORTED_TP | SUPPORTED_MII);
  1449. ecmd.port = PORT_TP;
  1450. ecmd.transceiver = XCVR_INTERNAL;
  1451. ecmd.phy_address = ip->phy;
  1452. /* Record PHY settings. */
  1453. spin_lock_irq(&ip->ioc3_lock);
  1454. ip->sw_bmcr = mii_read(ip, MII_BMCR);
  1455. ip->sw_lpa = mii_read(ip, MII_LPA);
  1456. spin_unlock_irq(&ip->ioc3_lock);
  1457. if (ip->sw_bmcr & BMCR_ANENABLE) {
  1458. ecmd.autoneg = AUTONEG_ENABLE;
  1459. ecmd.speed = (ip->sw_lpa &
  1460.              (LPA_100HALF | LPA_100FULL)) ?
  1461.              SPEED_100 : SPEED_10;
  1462. if (ecmd.speed == SPEED_100)
  1463. ecmd.duplex = (ip->sw_lpa & (LPA_100FULL)) ?
  1464.               DUPLEX_FULL : DUPLEX_HALF;
  1465. else
  1466. ecmd.duplex = (ip->sw_lpa & (LPA_10FULL)) ?
  1467.               DUPLEX_FULL : DUPLEX_HALF;
  1468. } else {
  1469. ecmd.autoneg = AUTONEG_DISABLE;
  1470. ecmd.speed = (ip->sw_bmcr & BMCR_SPEED100) ?
  1471.              SPEED_100 : SPEED_10;
  1472. ecmd.duplex = (ip->sw_bmcr & BMCR_FULLDPLX) ?
  1473.               DUPLEX_FULL : DUPLEX_HALF;
  1474. }
  1475. if (copy_to_user(ep_user, &ecmd, sizeof(ecmd)))
  1476. return -EFAULT;
  1477. return 0;
  1478. } else if (ecmd.cmd == ETHTOOL_SSET) {
  1479. if (!capable(CAP_NET_ADMIN))
  1480. return -EPERM;
  1481. /* Verify the settings we care about. */
  1482. if (ecmd.autoneg != AUTONEG_ENABLE &&
  1483.     ecmd.autoneg != AUTONEG_DISABLE)
  1484. return -EINVAL;
  1485. if (ecmd.autoneg == AUTONEG_DISABLE &&
  1486.     ((ecmd.speed != SPEED_100 &&
  1487.       ecmd.speed != SPEED_10) ||
  1488.      (ecmd.duplex != DUPLEX_HALF &&
  1489.       ecmd.duplex != DUPLEX_FULL)))
  1490. return -EINVAL;
  1491. /* Ok, do it to it. */
  1492. del_timer(&ip->ioc3_timer);
  1493. spin_lock_irq(&ip->ioc3_lock);
  1494. ioc3_start_auto_negotiation(ip, &ecmd);
  1495. spin_unlock_irq(&ip->ioc3_lock);
  1496. return 0;
  1497. } else
  1498. default:
  1499. return -EOPNOTSUPP;
  1500. }
  1501. return -EOPNOTSUPP;
  1502. }
  1503. static void ioc3_set_multicast_list(struct net_device *dev)
  1504. {
  1505. struct dev_mc_list *dmi = dev->mc_list;
  1506. struct ioc3_private *ip = dev->priv;
  1507. struct ioc3 *ioc3 = ip->regs;
  1508. u64 ehar = 0;
  1509. int i;
  1510. netif_stop_queue(dev); /* Lock out others. */
  1511. if (dev->flags & IFF_PROMISC) { /* Set promiscuous.  */
  1512. /* Unconditionally log net taps.  */
  1513. printk(KERN_INFO "%s: Promiscuous mode enabled.n", dev->name);
  1514. ip->emcr |= EMCR_PROMISC;
  1515. ioc3->emcr = ip->emcr;
  1516. ioc3->emcr;
  1517. } else {
  1518. ip->emcr &= ~EMCR_PROMISC;
  1519. ioc3->emcr = ip->emcr; /* Clear promiscuous. */
  1520. ioc3->emcr;
  1521. if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
  1522. /* Too many for hashing to make sense or we want all
  1523.    multicast packets anyway,  so skip computing all the
  1524.    hashes and just accept all packets.  */
  1525. ip->ehar_h = 0xffffffff;
  1526. ip->ehar_l = 0xffffffff;
  1527. } else {
  1528. for (i = 0; i < dev->mc_count; i++) {
  1529. char *addr = dmi->dmi_addr;
  1530. dmi = dmi->next;
  1531. if (!(*addr & 1))
  1532. continue;
  1533. ehar |= (1UL << ioc3_hash(addr));
  1534. }
  1535. ip->ehar_h = ehar >> 32;
  1536. ip->ehar_l = ehar & 0xffffffff;
  1537. }
  1538. ioc3->ehar_h = ip->ehar_h;
  1539. ioc3->ehar_l = ip->ehar_l;
  1540. }
  1541. netif_wake_queue(dev); /* Let us get going again. */
  1542. }
  1543. MODULE_AUTHOR("Ralf Baechle <ralf@oss.sgi.com>");
  1544. MODULE_DESCRIPTION("SGI IOC3 Ethernet driver");
  1545. MODULE_LICENSE("GPL");
  1546. module_init(ioc3_init_module);
  1547. module_exit(ioc3_cleanup_module);