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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: sunhme.c,v 1.123 2001/10/02 02:22:30 davem Exp $
  2.  * sunhme.c: Sparc HME/BigMac 10/100baseT half/full duplex auto switching,
  3.  *           auto carrier detecting ethernet driver.  Also known as the
  4.  *           "Happy Meal Ethernet" found on SunSwift SBUS cards.
  5.  *
  6.  * Copyright (C) 1996, 1998, 1999, 2002 David S. Miller (davem@redhat.com)
  7.  *
  8.  * Changes :
  9.  * 2000/11/11 Willy Tarreau <willy AT meta-x.org>
  10.  *   - port to non-sparc architectures. Tested only on x86 and
  11.  *     only currently works with QFE PCI cards.
  12.  *   - ability to specify the MAC address at module load time by passing this
  13.  *     argument : macaddr=0x00,0x10,0x20,0x30,0x40,0x50
  14.  */
  15. static char version[] =
  16.         "sunhme.c:v2.01 26/Mar/2002 David S. Miller (davem@redhat.com)n";
  17. #include <linux/module.h>
  18. #include <linux/config.h>
  19. #include <linux/kernel.h>
  20. #include <linux/sched.h>
  21. #include <linux/types.h>
  22. #include <linux/fcntl.h>
  23. #include <linux/interrupt.h>
  24. #include <linux/ptrace.h>
  25. #include <linux/ioport.h>
  26. #include <linux/in.h>
  27. #include <linux/slab.h>
  28. #include <linux/string.h>
  29. #include <linux/delay.h>
  30. #include <linux/init.h>
  31. #include <linux/ethtool.h>
  32. #include <linux/mii.h>
  33. #include <linux/crc32.h>
  34. #include <linux/random.h>
  35. #include <asm/system.h>
  36. #include <asm/bitops.h>
  37. #include <asm/io.h>
  38. #include <asm/dma.h>
  39. #include <linux/errno.h>
  40. #include <asm/byteorder.h>
  41. #ifdef __sparc__
  42. #include <asm/idprom.h>
  43. #include <asm/sbus.h>
  44. #include <asm/openprom.h>
  45. #include <asm/oplib.h>
  46. #include <asm/auxio.h>
  47. #ifndef __sparc_v9__
  48. #include <asm/io-unit.h>
  49. #endif
  50. #endif
  51. #include <asm/uaccess.h>
  52. #include <asm/pgtable.h>
  53. #include <asm/irq.h>
  54. #include <linux/netdevice.h>
  55. #include <linux/etherdevice.h>
  56. #include <linux/skbuff.h>
  57. #ifdef CONFIG_PCI
  58. #include <linux/pci.h>
  59. #ifdef __sparc__
  60. #include <asm/pbm.h>
  61. #endif
  62. #endif
  63. #include "sunhme.h"
  64. static int macaddr[6];
  65. /* accept MAC address of the form macaddr=0x08,0x00,0x20,0x30,0x40,0x50 */
  66. MODULE_PARM(macaddr, "6i");
  67. MODULE_PARM_DESC(macaddr, "Happy Meal MAC address to set");
  68. MODULE_LICENSE("GPL");
  69. static struct happy_meal *root_happy_dev;
  70. #ifdef CONFIG_SBUS
  71. static struct quattro *qfe_sbus_list;
  72. #endif
  73. #ifdef CONFIG_PCI
  74. static struct quattro *qfe_pci_list;
  75. #endif
  76. #undef HMEDEBUG
  77. #undef SXDEBUG
  78. #undef RXDEBUG
  79. #undef TXDEBUG
  80. #undef TXLOGGING
  81. #ifdef TXLOGGING
  82. struct hme_tx_logent {
  83. unsigned int tstamp;
  84. int tx_new, tx_old;
  85. unsigned int action;
  86. #define TXLOG_ACTION_IRQ 0x01
  87. #define TXLOG_ACTION_TXMIT 0x02
  88. #define TXLOG_ACTION_TBUSY 0x04
  89. #define TXLOG_ACTION_NBUFS 0x08
  90. unsigned int status;
  91. };
  92. #define TX_LOG_LEN 128
  93. static struct hme_tx_logent tx_log[TX_LOG_LEN];
  94. static int txlog_cur_entry;
  95. static __inline__ void tx_add_log(struct happy_meal *hp, unsigned int a, unsigned int s)
  96. {
  97. struct hme_tx_logent *tlp;
  98. unsigned long flags;
  99. save_and_cli(flags);
  100. tlp = &tx_log[txlog_cur_entry];
  101. tlp->tstamp = (unsigned int)jiffies;
  102. tlp->tx_new = hp->tx_new;
  103. tlp->tx_old = hp->tx_old;
  104. tlp->action = a;
  105. tlp->status = s;
  106. txlog_cur_entry = (txlog_cur_entry + 1) & (TX_LOG_LEN - 1);
  107. restore_flags(flags);
  108. }
  109. static __inline__ void tx_dump_log(void)
  110. {
  111. int i, this;
  112. this = txlog_cur_entry;
  113. for (i = 0; i < TX_LOG_LEN; i++) {
  114. printk("TXLOG[%d]: j[%08x] tx[N(%d)O(%d)] action[%08x] stat[%08x]n", i,
  115.        tx_log[this].tstamp,
  116.        tx_log[this].tx_new, tx_log[this].tx_old,
  117.        tx_log[this].action, tx_log[this].status);
  118. this = (this + 1) & (TX_LOG_LEN - 1);
  119. }
  120. }
  121. static __inline__ void tx_dump_ring(struct happy_meal *hp)
  122. {
  123. struct hmeal_init_block *hb = hp->happy_block;
  124. struct happy_meal_txd *tp = &hb->happy_meal_txd[0];
  125. int i;
  126. for (i = 0; i < TX_RING_SIZE; i+=4) {
  127. printk("TXD[%d..%d]: [%08x:%08x] [%08x:%08x] [%08x:%08x] [%08x:%08x]n",
  128.        i, i + 4,
  129.        le32_to_cpu(tp[i].tx_flags), le32_to_cpu(tp[i].tx_addr),
  130.        le32_to_cpu(tp[i + 1].tx_flags), le32_to_cpu(tp[i + 1].tx_addr),
  131.        le32_to_cpu(tp[i + 2].tx_flags), le32_to_cpu(tp[i + 2].tx_addr),
  132.        le32_to_cpu(tp[i + 3].tx_flags), le32_to_cpu(tp[i + 3].tx_addr));
  133. }
  134. }
  135. #else
  136. #define tx_add_log(hp, a, s) do { } while(0)
  137. #define tx_dump_log() do { } while(0)
  138. #define tx_dump_ring(hp) do { } while(0)
  139. #endif
  140. #ifdef HMEDEBUG
  141. #define HMD(x)  printk x
  142. #else
  143. #define HMD(x)
  144. #endif
  145. /* #define AUTO_SWITCH_DEBUG */
  146. #ifdef AUTO_SWITCH_DEBUG
  147. #define ASD(x)  printk x
  148. #else
  149. #define ASD(x)
  150. #endif
  151. #define DEFAULT_IPG0      16 /* For lance-mode only */
  152. #define DEFAULT_IPG1       8 /* For all modes */
  153. #define DEFAULT_IPG2       4 /* For all modes */
  154. #define DEFAULT_JAMSIZE    4 /* Toe jam */
  155. #ifdef CONFIG_PCI
  156. /* This happy_pci_ids is declared __initdata because it is only used
  157.    as an advisory to depmod.  If this is ported to the new PCI interface
  158.    where it could be referenced at any time due to hot plugging,
  159.    it should be changed to __devinitdata. */
  160. struct pci_device_id happymeal_pci_ids[] __initdata = {
  161. {
  162.   vendor: PCI_VENDOR_ID_SUN,
  163.   device: PCI_DEVICE_ID_SUN_HAPPYMEAL,
  164.   subvendor: PCI_ANY_ID,
  165.   subdevice: PCI_ANY_ID,
  166. },
  167. { } /* Terminating entry */
  168. };
  169. MODULE_DEVICE_TABLE(pci, happymeal_pci_ids);
  170. #endif
  171. /* NOTE: In the descriptor writes one _must_ write the address
  172.  *  member _first_.  The card must not be allowed to see
  173.  *  the updated descriptor flags until the address is
  174.  *  correct.  I've added a write memory barrier between
  175.  *  the two stores so that I can sleep well at night... -DaveM
  176.  */
  177. #if defined(CONFIG_SBUS) && defined(CONFIG_PCI)
  178. static void sbus_hme_write32(unsigned long reg, u32 val)
  179. {
  180. sbus_writel(val, reg);
  181. }
  182. static u32 sbus_hme_read32(unsigned long reg)
  183. {
  184. return sbus_readl(reg);
  185. }
  186. static void sbus_hme_write_rxd(struct happy_meal_rxd *rxd, u32 flags, u32 addr)
  187. {
  188. rxd->rx_addr = addr;
  189. wmb();
  190. rxd->rx_flags = flags;
  191. }
  192. static void sbus_hme_write_txd(struct happy_meal_txd *txd, u32 flags, u32 addr)
  193. {
  194. txd->tx_addr = addr;
  195. wmb();
  196. txd->tx_flags = flags;
  197. }
  198. static u32 sbus_hme_read_desc32(u32 *p)
  199. {
  200. return *p;
  201. }
  202. static void pci_hme_write32(unsigned long reg, u32 val)
  203. {
  204. writel(val, reg);
  205. }
  206. static u32 pci_hme_read32(unsigned long reg)
  207. {
  208. return readl(reg);
  209. }
  210. static void pci_hme_write_rxd(struct happy_meal_rxd *rxd, u32 flags, u32 addr)
  211. {
  212. rxd->rx_addr = cpu_to_le32(addr);
  213. wmb();
  214. rxd->rx_flags = cpu_to_le32(flags);
  215. }
  216. static void pci_hme_write_txd(struct happy_meal_txd *txd, u32 flags, u32 addr)
  217. {
  218. txd->tx_addr = cpu_to_le32(addr);
  219. wmb();
  220. txd->tx_flags = cpu_to_le32(flags);
  221. }
  222. static u32 pci_hme_read_desc32(u32 *p)
  223. {
  224. return cpu_to_le32p(p);
  225. }
  226. #define hme_write32(__hp, __reg, __val) 
  227. ((__hp)->write32((__reg), (__val)))
  228. #define hme_read32(__hp, __reg) 
  229. ((__hp)->read32(__reg))
  230. #define hme_write_rxd(__hp, __rxd, __flags, __addr) 
  231. ((__hp)->write_rxd((__rxd), (__flags), (__addr)))
  232. #define hme_write_txd(__hp, __txd, __flags, __addr) 
  233. ((__hp)->write_txd((__txd), (__flags), (__addr)))
  234. #define hme_read_desc32(__hp, __p) 
  235. ((__hp)->read_desc32(__p))
  236. #define hme_dma_map(__hp, __ptr, __size, __dir) 
  237. ((__hp)->dma_map((__hp)->happy_dev, (__ptr), (__size), (__dir)))
  238. #define hme_dma_unmap(__hp, __addr, __size, __dir) 
  239. ((__hp)->dma_unmap((__hp)->happy_dev, (__addr), (__size), (__dir)))
  240. #define hme_dma_sync(__hp, __addr, __size, __dir) 
  241. ((__hp)->dma_sync((__hp)->happy_dev, (__addr), (__size), (__dir)))
  242. #else
  243. #ifdef CONFIG_SBUS
  244. /* SBUS only compilation */
  245. #define hme_write32(__hp, __reg, __val) 
  246. sbus_writel((__val), (__reg))
  247. #define hme_read32(__hp, __reg) 
  248. sbus_readl(__reg)
  249. #define hme_write_rxd(__hp, __rxd, __flags, __addr) 
  250. do { (__rxd)->rx_addr = (__addr); 
  251. wmb(); 
  252. (__rxd)->rx_flags = (__flags); 
  253. } while(0)
  254. #define hme_write_txd(__hp, __txd, __flags, __addr) 
  255. do { (__txd)->tx_addr = (__addr); 
  256. wmb(); 
  257. (__txd)->tx_flags = (__flags); 
  258. } while(0)
  259. #define hme_read_desc32(__hp, __p) (*(__p))
  260. #define hme_dma_map(__hp, __ptr, __size, __dir) 
  261. sbus_map_single((__hp)->happy_dev, (__ptr), (__size), (__dir))
  262. #define hme_dma_unmap(__hp, __addr, __size, __dir) 
  263. sbus_unmap_single((__hp)->happy_dev, (__addr), (__size), (__dir))
  264. #define hme_dma_sync(__hp, __addr, __size, __dir) 
  265. sbus_dma_sync_single((__hp)->happy_dev, (__addr), (__size), (__dir))
  266. #else
  267. /* PCI only compilation */
  268. #define hme_write32(__hp, __reg, __val) 
  269. writel((__val), (__reg))
  270. #define hme_read32(__hp, __reg) 
  271. readl(__reg)
  272. #define hme_write_rxd(__hp, __rxd, __flags, __addr) 
  273. do { (__rxd)->rx_addr = cpu_to_le32(__addr); 
  274. wmb(); 
  275. (__rxd)->rx_flags = cpu_to_le32(__flags); 
  276. } while(0)
  277. #define hme_write_txd(__hp, __txd, __flags, __addr) 
  278. do { (__txd)->tx_addr = cpu_to_le32(__addr); 
  279. wmb(); 
  280. (__txd)->tx_flags = cpu_to_le32(__flags); 
  281. } while(0)
  282. #define hme_read_desc32(__hp, __p) cpu_to_le32p(__p)
  283. #define hme_dma_map(__hp, __ptr, __size, __dir) 
  284. pci_map_single((__hp)->happy_dev, (__ptr), (__size), (__dir))
  285. #define hme_dma_unmap(__hp, __addr, __size, __dir) 
  286. pci_unmap_single((__hp)->happy_dev, (__addr), (__size), (__dir))
  287. #define hme_dma_sync(__hp, __addr, __size, __dir) 
  288. pci_dma_sync_single((__hp)->happy_dev, (__addr), (__size), (__dir))
  289. #endif
  290. #endif
  291. #ifdef SBUS_DMA_BIDIRECTIONAL
  292. # define DMA_BIDIRECTIONAL SBUS_DMA_BIDIRECTIONAL
  293. #else
  294. # define DMA_BIDIRECTIONAL 0
  295. #endif
  296. #ifdef SBUS_DMA_FROMDEVICE
  297. # define DMA_FROMDEVICE SBUS_DMA_FROMDEVICE
  298. #else
  299. # define DMA_TODEVICE 1
  300. #endif
  301. #ifdef SBUS_DMA_TODEVICE
  302. # define DMA_TODEVICE SBUS_DMA_TODEVICE
  303. #else
  304. # define DMA_FROMDEVICE 2
  305. #endif
  306. /* Oh yes, the MIF BitBang is mighty fun to program.  BitBucket is more like it. */
  307. static void BB_PUT_BIT(struct happy_meal *hp, unsigned long tregs, int bit)
  308. {
  309. hme_write32(hp, tregs + TCVR_BBDATA, bit);
  310. hme_write32(hp, tregs + TCVR_BBCLOCK, 0);
  311. hme_write32(hp, tregs + TCVR_BBCLOCK, 1);
  312. }
  313. #if 0
  314. static u32 BB_GET_BIT(struct happy_meal *hp, unsigned long tregs, int internal)
  315. {
  316. u32 ret;
  317. hme_write32(hp, tregs + TCVR_BBCLOCK, 0);
  318. hme_write32(hp, tregs + TCVR_BBCLOCK, 1);
  319. ret = hme_read32(hp, tregs + TCVR_CFG);
  320. if (internal)
  321. ret &= TCV_CFG_MDIO0;
  322. else
  323. ret &= TCV_CFG_MDIO1;
  324. return ret;
  325. }
  326. #endif
  327. static u32 BB_GET_BIT2(struct happy_meal *hp, unsigned long tregs, int internal)
  328. {
  329. u32 retval;
  330. hme_write32(hp, tregs + TCVR_BBCLOCK, 0);
  331. udelay(1);
  332. retval = hme_read32(hp, tregs + TCVR_CFG);
  333. if (internal)
  334. retval &= TCV_CFG_MDIO0;
  335. else
  336. retval &= TCV_CFG_MDIO1;
  337. hme_write32(hp, tregs + TCVR_BBCLOCK, 1);
  338. return retval;
  339. }
  340. #define TCVR_FAILURE      0x80000000     /* Impossible MIF read value */
  341. static int happy_meal_bb_read(struct happy_meal *hp,
  342.       unsigned long tregs, int reg)
  343. {
  344. u32 tmp;
  345. int retval = 0;
  346. int i;
  347. ASD(("happy_meal_bb_read: reg=%d ", reg));
  348. /* Enable the MIF BitBang outputs. */
  349. hme_write32(hp, tregs + TCVR_BBOENAB, 1);
  350. /* Force BitBang into the idle state. */
  351. for (i = 0; i < 32; i++)
  352. BB_PUT_BIT(hp, tregs, 1);
  353. /* Give it the read sequence. */
  354. BB_PUT_BIT(hp, tregs, 0);
  355. BB_PUT_BIT(hp, tregs, 1);
  356. BB_PUT_BIT(hp, tregs, 1);
  357. BB_PUT_BIT(hp, tregs, 0);
  358. /* Give it the PHY address. */
  359. tmp = hp->paddr & 0xff;
  360. for (i = 4; i >= 0; i--)
  361. BB_PUT_BIT(hp, tregs, ((tmp >> i) & 1));
  362. /* Tell it what register we want to read. */
  363. tmp = (reg & 0xff);
  364. for (i = 4; i >= 0; i--)
  365. BB_PUT_BIT(hp, tregs, ((tmp >> i) & 1));
  366. /* Close down the MIF BitBang outputs. */
  367. hme_write32(hp, tregs + TCVR_BBOENAB, 0);
  368. /* Now read in the value. */
  369. (void) BB_GET_BIT2(hp, tregs, (hp->tcvr_type == internal));
  370. for (i = 15; i >= 0; i--)
  371. retval |= BB_GET_BIT2(hp, tregs, (hp->tcvr_type == internal));
  372. (void) BB_GET_BIT2(hp, tregs, (hp->tcvr_type == internal));
  373. (void) BB_GET_BIT2(hp, tregs, (hp->tcvr_type == internal));
  374. (void) BB_GET_BIT2(hp, tregs, (hp->tcvr_type == internal));
  375. ASD(("value=%xn", retval));
  376. return retval;
  377. }
  378. static void happy_meal_bb_write(struct happy_meal *hp,
  379. unsigned long tregs, int reg,
  380. unsigned short value)
  381. {
  382. u32 tmp;
  383. int i;
  384. ASD(("happy_meal_bb_write: reg=%d value=%xn", reg, value));
  385. /* Enable the MIF BitBang outputs. */
  386. hme_write32(hp, tregs + TCVR_BBOENAB, 1);
  387. /* Force BitBang into the idle state. */
  388. for (i = 0; i < 32; i++)
  389. BB_PUT_BIT(hp, tregs, 1);
  390. /* Give it write sequence. */
  391. BB_PUT_BIT(hp, tregs, 0);
  392. BB_PUT_BIT(hp, tregs, 1);
  393. BB_PUT_BIT(hp, tregs, 0);
  394. BB_PUT_BIT(hp, tregs, 1);
  395. /* Give it the PHY address. */
  396. tmp = (hp->paddr & 0xff);
  397. for (i = 4; i >= 0; i--)
  398. BB_PUT_BIT(hp, tregs, ((tmp >> i) & 1));
  399. /* Tell it what register we will be writing. */
  400. tmp = (reg & 0xff);
  401. for (i = 4; i >= 0; i--)
  402. BB_PUT_BIT(hp, tregs, ((tmp >> i) & 1));
  403. /* Tell it to become ready for the bits. */
  404. BB_PUT_BIT(hp, tregs, 1);
  405. BB_PUT_BIT(hp, tregs, 0);
  406. for (i = 15; i >= 0; i--)
  407. BB_PUT_BIT(hp, tregs, ((value >> i) & 1));
  408. /* Close down the MIF BitBang outputs. */
  409. hme_write32(hp, tregs + TCVR_BBOENAB, 0);
  410. }
  411. #define TCVR_READ_TRIES   16
  412. static int happy_meal_tcvr_read(struct happy_meal *hp,
  413. unsigned long tregs, int reg)
  414. {
  415. int tries = TCVR_READ_TRIES;
  416. int retval;
  417. ASD(("happy_meal_tcvr_read: reg=0x%02x ", reg));
  418. if (hp->tcvr_type == none) {
  419. ASD(("no transceiver, value=TCVR_FAILUREn"));
  420. return TCVR_FAILURE;
  421. }
  422. if (!(hp->happy_flags & HFLAG_FENABLE)) {
  423. ASD(("doing bit bangn"));
  424. return happy_meal_bb_read(hp, tregs, reg);
  425. }
  426. hme_write32(hp, tregs + TCVR_FRAME,
  427.     (FRAME_READ | (hp->paddr << 23) | ((reg & 0xff) << 18)));
  428. while (!(hme_read32(hp, tregs + TCVR_FRAME) & 0x10000) && --tries)
  429. udelay(20);
  430. if (!tries) {
  431. printk(KERN_ERR "happy meal: Aieee, transceiver MIF read bolixedn");
  432. return TCVR_FAILURE;
  433. }
  434. retval = hme_read32(hp, tregs + TCVR_FRAME) & 0xffff;
  435. ASD(("value=%04xn", retval));
  436. return retval;
  437. }
  438. #define TCVR_WRITE_TRIES  16
  439. static void happy_meal_tcvr_write(struct happy_meal *hp,
  440.   unsigned long tregs, int reg,
  441.   unsigned short value)
  442. {
  443. int tries = TCVR_WRITE_TRIES;
  444. ASD(("happy_meal_tcvr_write: reg=0x%02x value=%04xn", reg, value));
  445. /* Welcome to Sun Microsystems, can I take your order please? */
  446. if (!hp->happy_flags & HFLAG_FENABLE)
  447. return happy_meal_bb_write(hp, tregs, reg, value);
  448. /* Would you like fries with that? */
  449. hme_write32(hp, tregs + TCVR_FRAME,
  450.     (FRAME_WRITE | (hp->paddr << 23) |
  451.      ((reg & 0xff) << 18) | (value & 0xffff)));
  452. while (!(hme_read32(hp, tregs + TCVR_FRAME) & 0x10000) && --tries)
  453. udelay(20);
  454. /* Anything else? */
  455. if (!tries)
  456. printk(KERN_ERR "happy meal: Aieee, transceiver MIF write bolixedn");
  457. /* Fifty-two cents is your change, have a nice day. */
  458. }
  459. /* Auto negotiation.  The scheme is very simple.  We have a timer routine
  460.  * that keeps watching the auto negotiation process as it progresses.
  461.  * The DP83840 is first told to start doing it's thing, we set up the time
  462.  * and place the timer state machine in it's initial state.
  463.  *
  464.  * Here the timer peeks at the DP83840 status registers at each click to see
  465.  * if the auto negotiation has completed, we assume here that the DP83840 PHY
  466.  * will time out at some point and just tell us what (didn't) happen.  For
  467.  * complete coverage we only allow so many of the ticks at this level to run,
  468.  * when this has expired we print a warning message and try another strategy.
  469.  * This "other" strategy is to force the interface into various speed/duplex
  470.  * configurations and we stop when we see a link-up condition before the
  471.  * maximum number of "peek" ticks have occurred.
  472.  *
  473.  * Once a valid link status has been detected we configure the BigMAC and
  474.  * the rest of the Happy Meal to speak the most efficient protocol we could
  475.  * get a clean link for.  The priority for link configurations, highest first
  476.  * is:
  477.  *                 100 Base-T Full Duplex
  478.  *                 100 Base-T Half Duplex
  479.  *                 10 Base-T Full Duplex
  480.  *                 10 Base-T Half Duplex
  481.  *
  482.  * We start a new timer now, after a successful auto negotiation status has
  483.  * been detected.  This timer just waits for the link-up bit to get set in
  484.  * the BMCR of the DP83840.  When this occurs we print a kernel log message
  485.  * describing the link type in use and the fact that it is up.
  486.  *
  487.  * If a fatal error of some sort is signalled and detected in the interrupt
  488.  * service routine, and the chip is reset, or the link is ifconfig'd down
  489.  * and then back up, this entire process repeats itself all over again.
  490.  */
  491. static int try_next_permutation(struct happy_meal *hp, unsigned long tregs)
  492. {
  493. hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  494. /* Downgrade from full to half duplex.  Only possible
  495.  * via ethtool.
  496.  */
  497. if (hp->sw_bmcr & BMCR_FULLDPLX) {
  498. hp->sw_bmcr &= ~(BMCR_FULLDPLX);
  499. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  500. return 0;
  501. }
  502. /* Downgrade from 100 to 10. */
  503. if (hp->sw_bmcr & BMCR_SPEED100) {
  504. hp->sw_bmcr &= ~(BMCR_SPEED100);
  505. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  506. return 0;
  507. }
  508. /* We've tried everything. */
  509. return -1;
  510. }
  511. static void display_link_mode(struct happy_meal *hp, unsigned long tregs)
  512. {
  513. printk(KERN_INFO "%s: Link is up using ", hp->dev->name);
  514. if (hp->tcvr_type == external)
  515. printk("external ");
  516. else
  517. printk("internal ");
  518. printk("transceiver at ");
  519. hp->sw_lpa = happy_meal_tcvr_read(hp, tregs, MII_LPA);
  520. if (hp->sw_lpa & (LPA_100HALF | LPA_100FULL)) {
  521. if (hp->sw_lpa & LPA_100FULL)
  522. printk("100Mb/s, Full Duplex.n");
  523. else
  524. printk("100Mb/s, Half Duplex.n");
  525. } else {
  526. if (hp->sw_lpa & LPA_10FULL)
  527. printk("10Mb/s, Full Duplex.n");
  528. else
  529. printk("10Mb/s, Half Duplex.n");
  530. }
  531. }
  532. static void display_forced_link_mode(struct happy_meal *hp, unsigned long tregs)
  533. {
  534. printk(KERN_INFO "%s: Link has been forced up using ", hp->dev->name);
  535. if (hp->tcvr_type == external)
  536. printk("external ");
  537. else
  538. printk("internal ");
  539. printk("transceiver at ");
  540. hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  541. if (hp->sw_bmcr & BMCR_SPEED100)
  542. printk("100Mb/s, ");
  543. else
  544. printk("10Mb/s, ");
  545. if (hp->sw_bmcr & BMCR_FULLDPLX)
  546. printk("Full Duplex.n");
  547. else
  548. printk("Half Duplex.n");
  549. }
  550. static int set_happy_link_modes(struct happy_meal *hp, unsigned long tregs)
  551. {
  552. int full;
  553. /* All we care about is making sure the bigmac tx_cfg has a
  554.  * proper duplex setting.
  555.  */
  556. if (hp->timer_state == arbwait) {
  557. hp->sw_lpa = happy_meal_tcvr_read(hp, tregs, MII_LPA);
  558. if (!(hp->sw_lpa & (LPA_10HALF | LPA_10FULL | LPA_100HALF | LPA_100FULL)))
  559. goto no_response;
  560. if (hp->sw_lpa & LPA_100FULL)
  561. full = 1;
  562. else if (hp->sw_lpa & LPA_100HALF)
  563. full = 0;
  564. else if (hp->sw_lpa & LPA_10FULL)
  565. full = 1;
  566. else
  567. full = 0;
  568. } else {
  569. /* Forcing a link mode. */
  570. hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  571. if (hp->sw_bmcr & BMCR_FULLDPLX)
  572. full = 1;
  573. else
  574. full = 0;
  575. }
  576. /* Before changing other bits in the tx_cfg register, and in
  577.  * general any of other the TX config registers too, you
  578.  * must:
  579.  * 1) Clear Enable
  580.  * 2) Poll with reads until that bit reads back as zero
  581.  * 3) Make TX configuration changes
  582.  * 4) Set Enable once more
  583.  */
  584. hme_write32(hp, hp->bigmacregs + BMAC_TXCFG,
  585.     hme_read32(hp, hp->bigmacregs + BMAC_TXCFG) &
  586.     ~(BIGMAC_TXCFG_ENABLE));
  587. while (hme_read32(hp, hp->bigmacregs + BMAC_TXCFG) & BIGMAC_TXCFG_ENABLE)
  588. barrier();
  589. if (full) {
  590. hp->happy_flags |= HFLAG_FULL;
  591. hme_write32(hp, hp->bigmacregs + BMAC_TXCFG,
  592.     hme_read32(hp, hp->bigmacregs + BMAC_TXCFG) |
  593.     BIGMAC_TXCFG_FULLDPLX);
  594. } else {
  595. hp->happy_flags &= ~(HFLAG_FULL);
  596. hme_write32(hp, hp->bigmacregs + BMAC_TXCFG,
  597.     hme_read32(hp, hp->bigmacregs + BMAC_TXCFG) &
  598.     ~(BIGMAC_TXCFG_FULLDPLX));
  599. }
  600. hme_write32(hp, hp->bigmacregs + BMAC_TXCFG,
  601.     hme_read32(hp, hp->bigmacregs + BMAC_TXCFG) |
  602.     BIGMAC_TXCFG_ENABLE);
  603. return 0;
  604. no_response:
  605. return 1;
  606. }
  607. static int happy_meal_init(struct happy_meal *hp);
  608. static int is_lucent_phy(struct happy_meal *hp)
  609. {
  610. unsigned long tregs = hp->tcvregs;
  611. unsigned short mr2, mr3;
  612. int ret = 0;
  613. mr2 = happy_meal_tcvr_read(hp, tregs, 2);
  614. mr3 = happy_meal_tcvr_read(hp, tregs, 3);
  615. if ((mr2 & 0xffff) == 0x0180 &&
  616.     ((mr3 & 0xffff) >> 10) == 0x1d)
  617. ret = 1;
  618. return ret;
  619. }
  620. static void happy_meal_timer(unsigned long data)
  621. {
  622. struct happy_meal *hp = (struct happy_meal *) data;
  623. unsigned long tregs = hp->tcvregs;
  624. int restart_timer = 0;
  625. spin_lock_irq(&hp->happy_lock);
  626. hp->timer_ticks++;
  627. switch(hp->timer_state) {
  628. case arbwait:
  629. /* Only allow for 5 ticks, thats 10 seconds and much too
  630.  * long to wait for arbitration to complete.
  631.  */
  632. if (hp->timer_ticks >= 10) {
  633. /* Enter force mode. */
  634. do_force_mode:
  635. hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  636. printk(KERN_NOTICE "%s: Auto-Negotiation unsuccessful, trying force link moden",
  637.        hp->dev->name);
  638. hp->sw_bmcr = BMCR_SPEED100;
  639. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  640. if (!is_lucent_phy(hp)) {
  641. /* OK, seems we need do disable the transceiver for the first
  642.  * tick to make sure we get an accurate link state at the
  643.  * second tick.
  644.  */
  645. hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs, DP83840_CSCONFIG);
  646. hp->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
  647. happy_meal_tcvr_write(hp, tregs, DP83840_CSCONFIG, hp->sw_csconfig);
  648. }
  649. hp->timer_state = ltrywait;
  650. hp->timer_ticks = 0;
  651. restart_timer = 1;
  652. } else {
  653. /* Anything interesting happen? */
  654. hp->sw_bmsr = happy_meal_tcvr_read(hp, tregs, MII_BMSR);
  655. if (hp->sw_bmsr & BMSR_ANEGCOMPLETE) {
  656. int ret;
  657. /* Just what we've been waiting for... */
  658. ret = set_happy_link_modes(hp, tregs);
  659. if (ret) {
  660. /* Ooops, something bad happened, go to force
  661.  * mode.
  662.  *
  663.  * XXX Broken hubs which don't support 802.3u
  664.  * XXX auto-negotiation make this happen as well.
  665.  */
  666. goto do_force_mode;
  667. }
  668. /* Success, at least so far, advance our state engine. */
  669. hp->timer_state = lupwait;
  670. restart_timer = 1;
  671. } else {
  672. restart_timer = 1;
  673. }
  674. }
  675. break;
  676. case lupwait:
  677. /* Auto negotiation was successful and we are awaiting a
  678.  * link up status.  I have decided to let this timer run
  679.  * forever until some sort of error is signalled, reporting
  680.  * a message to the user at 10 second intervals.
  681.  */
  682. hp->sw_bmsr = happy_meal_tcvr_read(hp, tregs, MII_BMSR);
  683. if (hp->sw_bmsr & BMSR_LSTATUS) {
  684. /* Wheee, it's up, display the link mode in use and put
  685.  * the timer to sleep.
  686.  */
  687. display_link_mode(hp, tregs);
  688. hp->timer_state = asleep;
  689. restart_timer = 0;
  690. } else {
  691. if (hp->timer_ticks >= 10) {
  692. printk(KERN_NOTICE "%s: Auto negotiation successful, link still "
  693.        "not completely up.n", hp->dev->name);
  694. hp->timer_ticks = 0;
  695. restart_timer = 1;
  696. } else {
  697. restart_timer = 1;
  698. }
  699. }
  700. break;
  701. case ltrywait:
  702. /* Making the timeout here too long can make it take
  703.  * annoyingly long to attempt all of the link mode
  704.  * permutations, but then again this is essentially
  705.  * error recovery code for the most part.
  706.  */
  707. hp->sw_bmsr = happy_meal_tcvr_read(hp, tregs, MII_BMSR);
  708. hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs, DP83840_CSCONFIG);
  709. if (hp->timer_ticks == 1) {
  710. if (!is_lucent_phy(hp)) {
  711. /* Re-enable transceiver, we'll re-enable the transceiver next
  712.  * tick, then check link state on the following tick.
  713.  */
  714. hp->sw_csconfig |= CSCONFIG_TCVDISAB;
  715. happy_meal_tcvr_write(hp, tregs,
  716.       DP83840_CSCONFIG, hp->sw_csconfig);
  717. }
  718. restart_timer = 1;
  719. break;
  720. }
  721. if (hp->timer_ticks == 2) {
  722. if (!is_lucent_phy(hp)) {
  723. hp->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
  724. happy_meal_tcvr_write(hp, tregs,
  725.       DP83840_CSCONFIG, hp->sw_csconfig);
  726. }
  727. restart_timer = 1;
  728. break;
  729. }
  730. if (hp->sw_bmsr & BMSR_LSTATUS) {
  731. /* Force mode selection success. */
  732. display_forced_link_mode(hp, tregs);
  733. set_happy_link_modes(hp, tregs); /* XXX error? then what? */
  734. hp->timer_state = asleep;
  735. restart_timer = 0;
  736. } else {
  737. if (hp->timer_ticks >= 4) { /* 6 seconds or so... */
  738. int ret;
  739. ret = try_next_permutation(hp, tregs);
  740. if (ret == -1) {
  741. /* Aieee, tried them all, reset the
  742.  * chip and try all over again.
  743.  */
  744. /* Let the user know... */
  745. printk(KERN_NOTICE "%s: Link down, cable problem?n",
  746.        hp->dev->name);
  747. ret = happy_meal_init(hp);
  748. if (ret) {
  749. /* ho hum... */
  750. printk(KERN_ERR "%s: Error, cannot re-init the "
  751.        "Happy Meal.n", hp->dev->name);
  752. }
  753. goto out;
  754. }
  755. if (!is_lucent_phy(hp)) {
  756. hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs,
  757.        DP83840_CSCONFIG);
  758. hp->sw_csconfig |= CSCONFIG_TCVDISAB;
  759. happy_meal_tcvr_write(hp, tregs,
  760.       DP83840_CSCONFIG, hp->sw_csconfig);
  761. }
  762. hp->timer_ticks = 0;
  763. restart_timer = 1;
  764. } else {
  765. restart_timer = 1;
  766. }
  767. }
  768. break;
  769. case asleep:
  770. default:
  771. /* Can't happens.... */
  772. printk(KERN_ERR "%s: Aieee, link timer is asleep but we got one anyways!n",
  773.        hp->dev->name);
  774. restart_timer = 0;
  775. hp->timer_ticks = 0;
  776. hp->timer_state = asleep; /* foo on you */
  777. break;
  778. };
  779. if (restart_timer) {
  780. hp->happy_timer.expires = jiffies + ((12 * HZ)/10); /* 1.2 sec. */
  781. add_timer(&hp->happy_timer);
  782. }
  783. out:
  784. spin_unlock_irq(&hp->happy_lock);
  785. }
  786. #define TX_RESET_TRIES     32
  787. #define RX_RESET_TRIES     32
  788. /* hp->happy_lock must be held */
  789. static void happy_meal_tx_reset(struct happy_meal *hp, unsigned long bregs)
  790. {
  791. int tries = TX_RESET_TRIES;
  792. HMD(("happy_meal_tx_reset: reset, "));
  793. /* Would you like to try our SMCC Delux? */
  794. hme_write32(hp, bregs + BMAC_TXSWRESET, 0);
  795. while ((hme_read32(hp, bregs + BMAC_TXSWRESET) & 1) && --tries)
  796. udelay(20);
  797. /* Lettuce, tomato, buggy hardware (no extra charge)? */
  798. if (!tries)
  799. printk(KERN_ERR "happy meal: Transceiver BigMac ATTACK!");
  800. /* Take care. */
  801. HMD(("donen"));
  802. }
  803. /* hp->happy_lock must be held */
  804. static void happy_meal_rx_reset(struct happy_meal *hp, unsigned long bregs)
  805. {
  806. int tries = RX_RESET_TRIES;
  807. HMD(("happy_meal_rx_reset: reset, "));
  808. /* We have a special on GNU/Viking hardware bugs today. */
  809. hme_write32(hp, bregs + BMAC_RXSWRESET, 0);
  810. while ((hme_read32(hp, bregs + BMAC_RXSWRESET) & 1) && --tries)
  811. udelay(20);
  812. /* Will that be all? */
  813. if (!tries)
  814. printk(KERN_ERR "happy meal: Receiver BigMac ATTACK!");
  815. /* Don't forget your vik_1137125_wa.  Have a nice day. */
  816. HMD(("donen"));
  817. }
  818. #define STOP_TRIES         16
  819. /* hp->happy_lock must be held */
  820. static void happy_meal_stop(struct happy_meal *hp, unsigned long gregs)
  821. {
  822. int tries = STOP_TRIES;
  823. HMD(("happy_meal_stop: reset, "));
  824. /* We're consolidating our STB products, it's your lucky day. */
  825. hme_write32(hp, gregs + GREG_SWRESET, GREG_RESET_ALL);
  826. while (hme_read32(hp, gregs + GREG_SWRESET) && --tries)
  827. udelay(20);
  828. /* Come back next week when we are "Sun Microelectronics". */
  829. if (!tries)
  830. printk(KERN_ERR "happy meal: Fry guys.");
  831. /* Remember: "Different name, same old buggy as shit hardware." */
  832. HMD(("donen"));
  833. }
  834. /* hp->happy_lock must be held */
  835. static void happy_meal_get_counters(struct happy_meal *hp, unsigned long bregs)
  836. {
  837. struct net_device_stats *stats = &hp->net_stats;
  838. stats->rx_crc_errors += hme_read32(hp, bregs + BMAC_RCRCECTR);
  839. hme_write32(hp, bregs + BMAC_RCRCECTR, 0);
  840. stats->rx_frame_errors += hme_read32(hp, bregs + BMAC_UNALECTR);
  841. hme_write32(hp, bregs + BMAC_UNALECTR, 0);
  842. stats->rx_length_errors += hme_read32(hp, bregs + BMAC_GLECTR);
  843. hme_write32(hp, bregs + BMAC_GLECTR, 0);
  844. stats->tx_aborted_errors += hme_read32(hp, bregs + BMAC_EXCTR);
  845. stats->collisions +=
  846. (hme_read32(hp, bregs + BMAC_EXCTR) +
  847.  hme_read32(hp, bregs + BMAC_LTCTR));
  848. hme_write32(hp, bregs + BMAC_EXCTR, 0);
  849. hme_write32(hp, bregs + BMAC_LTCTR, 0);
  850. }
  851. /* hp->happy_lock must be held */
  852. static void happy_meal_poll_stop(struct happy_meal *hp, unsigned long tregs)
  853. {
  854. ASD(("happy_meal_poll_stop: "));
  855. /* If polling disabled or not polling already, nothing to do. */
  856. if ((hp->happy_flags & (HFLAG_POLLENABLE | HFLAG_POLL)) !=
  857.    (HFLAG_POLLENABLE | HFLAG_POLL)) {
  858. HMD(("not polling, returnn"));
  859. return;
  860. }
  861. /* Shut up the MIF. */
  862. ASD(("were polling, mif ints off, "));
  863. hme_write32(hp, tregs + TCVR_IMASK, 0xffff);
  864. /* Turn off polling. */
  865. ASD(("polling off, "));
  866. hme_write32(hp, tregs + TCVR_CFG,
  867.     hme_read32(hp, tregs + TCVR_CFG) & ~(TCV_CFG_PENABLE));
  868. /* We are no longer polling. */
  869. hp->happy_flags &= ~(HFLAG_POLL);
  870. /* Let the bits set. */
  871. udelay(200);
  872. ASD(("donen"));
  873. }
  874. /* Only Sun can take such nice parts and fuck up the programming interface
  875.  * like this.  Good job guys...
  876.  */
  877. #define TCVR_RESET_TRIES       16 /* It should reset quickly        */
  878. #define TCVR_UNISOLATE_TRIES   32 /* Dis-isolation can take longer. */
  879. /* hp->happy_lock must be held */
  880. static int happy_meal_tcvr_reset(struct happy_meal *hp, unsigned long tregs)
  881. {
  882. u32 tconfig;
  883. int result, tries = TCVR_RESET_TRIES;
  884. tconfig = hme_read32(hp, tregs + TCVR_CFG);
  885. ASD(("happy_meal_tcvr_reset: tcfg<%08lx> ", tconfig));
  886. if (hp->tcvr_type == external) {
  887. ASD(("external<"));
  888. hme_write32(hp, tregs + TCVR_CFG, tconfig & ~(TCV_CFG_PSELECT));
  889. hp->tcvr_type = internal;
  890. hp->paddr = TCV_PADDR_ITX;
  891. ASD(("ISOLATE,"));
  892. happy_meal_tcvr_write(hp, tregs, MII_BMCR,
  893.       (BMCR_LOOPBACK|BMCR_PDOWN|BMCR_ISOLATE));
  894. result = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  895. if (result == TCVR_FAILURE) {
  896. ASD(("phyread_fail>n"));
  897. return -1;
  898. }
  899. ASD(("phyread_ok,PSELECT>"));
  900. hme_write32(hp, tregs + TCVR_CFG, tconfig | TCV_CFG_PSELECT);
  901. hp->tcvr_type = external;
  902. hp->paddr = TCV_PADDR_ETX;
  903. } else {
  904. if (tconfig & TCV_CFG_MDIO1) {
  905. ASD(("internal<PSELECT,"));
  906. hme_write32(hp, tregs + TCVR_CFG, (tconfig | TCV_CFG_PSELECT));
  907. ASD(("ISOLATE,"));
  908. happy_meal_tcvr_write(hp, tregs, MII_BMCR,
  909.       (BMCR_LOOPBACK|BMCR_PDOWN|BMCR_ISOLATE));
  910. result = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  911. if (result == TCVR_FAILURE) {
  912. ASD(("phyread_fail>n"));
  913. return -1;
  914. }
  915. ASD(("phyread_ok,~PSELECT>"));
  916. hme_write32(hp, tregs + TCVR_CFG, (tconfig & ~(TCV_CFG_PSELECT)));
  917. hp->tcvr_type = internal;
  918. hp->paddr = TCV_PADDR_ITX;
  919. }
  920. }
  921. ASD(("BMCR_RESET "));
  922. happy_meal_tcvr_write(hp, tregs, MII_BMCR, BMCR_RESET);
  923. while (--tries) {
  924. result = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  925. if (result == TCVR_FAILURE)
  926. return -1;
  927. hp->sw_bmcr = result;
  928. if (!(result & BMCR_RESET))
  929. break;
  930. udelay(20);
  931. }
  932. if (!tries) {
  933. ASD(("BMCR RESET FAILED!n"));
  934. return -1;
  935. }
  936. ASD(("RESET_OKn"));
  937. /* Get fresh copies of the PHY registers. */
  938. hp->sw_bmsr      = happy_meal_tcvr_read(hp, tregs, MII_BMSR);
  939. hp->sw_physid1   = happy_meal_tcvr_read(hp, tregs, MII_PHYSID1);
  940. hp->sw_physid2   = happy_meal_tcvr_read(hp, tregs, MII_PHYSID2);
  941. hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, MII_ADVERTISE);
  942. ASD(("UNISOLATE"));
  943. hp->sw_bmcr &= ~(BMCR_ISOLATE);
  944. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  945. tries = TCVR_UNISOLATE_TRIES;
  946. while (--tries) {
  947. result = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  948. if (result == TCVR_FAILURE)
  949. return -1;
  950. if (!(result & BMCR_ISOLATE))
  951. break;
  952. udelay(20);
  953. }
  954. if (!tries) {
  955. ASD((" FAILED!n"));
  956. return -1;
  957. }
  958. ASD((" SUCCESS and CSCONFIG_DFBYPASSn"));
  959. if (!is_lucent_phy(hp)) {
  960. result = happy_meal_tcvr_read(hp, tregs,
  961.       DP83840_CSCONFIG);
  962. happy_meal_tcvr_write(hp, tregs,
  963.       DP83840_CSCONFIG, (result | CSCONFIG_DFBYPASS));
  964. }
  965. return 0;
  966. }
  967. /* Figure out whether we have an internal or external transceiver.
  968.  *
  969.  * hp->happy_lock must be held
  970.  */
  971. static void happy_meal_transceiver_check(struct happy_meal *hp, unsigned long tregs)
  972. {
  973. unsigned long tconfig = hme_read32(hp, tregs + TCVR_CFG);
  974. ASD(("happy_meal_transceiver_check: tcfg=%08lx ", tconfig));
  975. if (hp->happy_flags & HFLAG_POLL) {
  976. /* If we are polling, we must stop to get the transceiver type. */
  977. ASD(("<polling> "));
  978. if (hp->tcvr_type == internal) {
  979. if (tconfig & TCV_CFG_MDIO1) {
  980. ASD(("<internal> <poll stop> "));
  981. happy_meal_poll_stop(hp, tregs);
  982. hp->paddr = TCV_PADDR_ETX;
  983. hp->tcvr_type = external;
  984. ASD(("<external>n"));
  985. tconfig &= ~(TCV_CFG_PENABLE);
  986. tconfig |= TCV_CFG_PSELECT;
  987. hme_write32(hp, tregs + TCVR_CFG, tconfig);
  988. }
  989. } else {
  990. if (hp->tcvr_type == external) {
  991. ASD(("<external> "));
  992. if (!(hme_read32(hp, tregs + TCVR_STATUS) >> 16)) {
  993. ASD(("<poll stop> "));
  994. happy_meal_poll_stop(hp, tregs);
  995. hp->paddr = TCV_PADDR_ITX;
  996. hp->tcvr_type = internal;
  997. ASD(("<internal>n"));
  998. hme_write32(hp, tregs + TCVR_CFG,
  999.     hme_read32(hp, tregs + TCVR_CFG) &
  1000.     ~(TCV_CFG_PSELECT));
  1001. }
  1002. ASD(("n"));
  1003. } else {
  1004. ASD(("<none>n"));
  1005. }
  1006. }
  1007. } else {
  1008. u32 reread = hme_read32(hp, tregs + TCVR_CFG);
  1009. /* Else we can just work off of the MDIO bits. */
  1010. ASD(("<not polling> "));
  1011. if (reread & TCV_CFG_MDIO1) {
  1012. hme_write32(hp, tregs + TCVR_CFG, tconfig | TCV_CFG_PSELECT);
  1013. hp->paddr = TCV_PADDR_ETX;
  1014. hp->tcvr_type = external;
  1015. ASD(("<external>n"));
  1016. } else {
  1017. if (reread & TCV_CFG_MDIO0) {
  1018. hme_write32(hp, tregs + TCVR_CFG,
  1019.     tconfig & ~(TCV_CFG_PSELECT));
  1020. hp->paddr = TCV_PADDR_ITX;
  1021. hp->tcvr_type = internal;
  1022. ASD(("<internal>n"));
  1023. } else {
  1024. printk(KERN_ERR "happy meal: Transceiver and a coke please.");
  1025. hp->tcvr_type = none; /* Grrr... */
  1026. ASD(("<none>n"));
  1027. }
  1028. }
  1029. }
  1030. }
  1031. /* The receive ring buffers are a bit tricky to get right.  Here goes...
  1032.  *
  1033.  * The buffers we dma into must be 64 byte aligned.  So we use a special
  1034.  * alloc_skb() routine for the happy meal to allocate 64 bytes more than
  1035.  * we really need.
  1036.  *
  1037.  * We use skb_reserve() to align the data block we get in the skb.  We
  1038.  * also program the etxregs->cfg register to use an offset of 2.  This
  1039.  * imperical constant plus the ethernet header size will always leave
  1040.  * us with a nicely aligned ip header once we pass things up to the
  1041.  * protocol layers.
  1042.  *
  1043.  * The numbers work out to:
  1044.  *
  1045.  *         Max ethernet frame size         1518
  1046.  *         Ethernet header size              14
  1047.  *         Happy Meal base offset             2
  1048.  *
  1049.  * Say a skb data area is at 0xf001b010, and its size alloced is
  1050.  * (ETH_FRAME_LEN + 64 + 2) = (1514 + 64 + 2) = 1580 bytes.
  1051.  *
  1052.  * First our alloc_skb() routine aligns the data base to a 64 byte
  1053.  * boundry.  We now have 0xf001b040 as our skb data address.  We
  1054.  * plug this into the receive descriptor address.
  1055.  *
  1056.  * Next, we skb_reserve() 2 bytes to account for the Happy Meal offset.
  1057.  * So now the data we will end up looking at starts at 0xf001b042.  When
  1058.  * the packet arrives, we will check out the size received and subtract
  1059.  * this from the skb->length.  Then we just pass the packet up to the
  1060.  * protocols as is, and allocate a new skb to replace this slot we have
  1061.  * just received from.
  1062.  *
  1063.  * The ethernet layer will strip the ether header from the front of the
  1064.  * skb we just sent to it, this leaves us with the ip header sitting
  1065.  * nicely aligned at 0xf001b050.  Also, for tcp and udp packets the
  1066.  * Happy Meal has even checksummed the tcp/udp data for us.  The 16
  1067.  * bit checksum is obtained from the low bits of the receive descriptor
  1068.  * flags, thus:
  1069.  *
  1070.  *  skb->csum = rxd->rx_flags & 0xffff;
  1071.  *  skb->ip_summed = CHECKSUM_HW;
  1072.  *
  1073.  * before sending off the skb to the protocols, and we are good as gold.
  1074.  */
  1075. static void happy_meal_clean_rings(struct happy_meal *hp)
  1076. {
  1077. int i;
  1078. for (i = 0; i < RX_RING_SIZE; i++) {
  1079. if (hp->rx_skbs[i] != NULL) {
  1080. struct sk_buff *skb = hp->rx_skbs[i];
  1081. struct happy_meal_rxd *rxd;
  1082. u32 dma_addr;
  1083. rxd = &hp->happy_block->happy_meal_rxd[i];
  1084. dma_addr = hme_read_desc32(hp, &rxd->rx_addr);
  1085. hme_dma_unmap(hp, dma_addr, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE);
  1086. dev_kfree_skb_any(skb);
  1087. hp->rx_skbs[i] = NULL;
  1088. }
  1089. }
  1090. for (i = 0; i < TX_RING_SIZE; i++) {
  1091. if (hp->tx_skbs[i] != NULL) {
  1092. struct sk_buff *skb = hp->tx_skbs[i];
  1093. struct happy_meal_txd *txd;
  1094. u32 dma_addr;
  1095. int frag;
  1096. hp->tx_skbs[i] = NULL;
  1097. for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
  1098. txd = &hp->happy_block->happy_meal_txd[i];
  1099. dma_addr = hme_read_desc32(hp, &txd->tx_addr);
  1100. hme_dma_unmap(hp, dma_addr,
  1101.       (hme_read_desc32(hp, &txd->tx_flags)
  1102.        & TXFLAG_SIZE),
  1103.       DMA_TODEVICE);
  1104. if (frag != skb_shinfo(skb)->nr_frags)
  1105. i++;
  1106. }
  1107. dev_kfree_skb_any(skb);
  1108. }
  1109. }
  1110. }
  1111. /* hp->happy_lock must be held */
  1112. static void happy_meal_init_rings(struct happy_meal *hp)
  1113. {
  1114. struct hmeal_init_block *hb = hp->happy_block;
  1115. struct net_device *dev = hp->dev;
  1116. int i;
  1117. HMD(("happy_meal_init_rings: counters to zero, "));
  1118. hp->rx_new = hp->rx_old = hp->tx_new = hp->tx_old = 0;
  1119. /* Free any skippy bufs left around in the rings. */
  1120. HMD(("clean, "));
  1121. happy_meal_clean_rings(hp);
  1122. /* Now get new skippy bufs for the receive ring. */
  1123. HMD(("init rxring, "));
  1124. for (i = 0; i < RX_RING_SIZE; i++) {
  1125. struct sk_buff *skb;
  1126. skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
  1127. if (!skb) {
  1128. hme_write_rxd(hp, &hb->happy_meal_rxd[i], 0, 0);
  1129. continue;
  1130. }
  1131. hp->rx_skbs[i] = skb;
  1132. skb->dev = dev;
  1133. /* Because we reserve afterwards. */
  1134. skb_put(skb, (ETH_FRAME_LEN + RX_OFFSET));
  1135. hme_write_rxd(hp, &hb->happy_meal_rxd[i],
  1136.       (RXFLAG_OWN | ((RX_BUF_ALLOC_SIZE - RX_OFFSET) << 16)),
  1137.       hme_dma_map(hp, skb->data, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE));
  1138. skb_reserve(skb, RX_OFFSET);
  1139. }
  1140. HMD(("init txring, "));
  1141. for (i = 0; i < TX_RING_SIZE; i++)
  1142. hme_write_txd(hp, &hb->happy_meal_txd[i], 0, 0);
  1143. HMD(("donen"));
  1144. }
  1145. /* hp->happy_lock must be held */
  1146. static void happy_meal_begin_auto_negotiation(struct happy_meal *hp,
  1147.       unsigned long tregs,
  1148.       struct ethtool_cmd *ep)
  1149. {
  1150. int timeout;
  1151. /* Read all of the registers we are interested in now. */
  1152. hp->sw_bmsr      = happy_meal_tcvr_read(hp, tregs, MII_BMSR);
  1153. hp->sw_bmcr      = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  1154. hp->sw_physid1   = happy_meal_tcvr_read(hp, tregs, MII_PHYSID1);
  1155. hp->sw_physid2   = happy_meal_tcvr_read(hp, tregs, MII_PHYSID2);
  1156. /* XXX Check BMSR_ANEGCAPABLE, should not be necessary though. */
  1157. hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, MII_ADVERTISE);
  1158. if (ep == NULL || ep->autoneg == AUTONEG_ENABLE) {
  1159. /* Advertise everything we can support. */
  1160. if (hp->sw_bmsr & BMSR_10HALF)
  1161. hp->sw_advertise |= (ADVERTISE_10HALF);
  1162. else
  1163. hp->sw_advertise &= ~(ADVERTISE_10HALF);
  1164. if (hp->sw_bmsr & BMSR_10FULL)
  1165. hp->sw_advertise |= (ADVERTISE_10FULL);
  1166. else
  1167. hp->sw_advertise &= ~(ADVERTISE_10FULL);
  1168. if (hp->sw_bmsr & BMSR_100HALF)
  1169. hp->sw_advertise |= (ADVERTISE_100HALF);
  1170. else
  1171. hp->sw_advertise &= ~(ADVERTISE_100HALF);
  1172. if (hp->sw_bmsr & BMSR_100FULL)
  1173. hp->sw_advertise |= (ADVERTISE_100FULL);
  1174. else
  1175. hp->sw_advertise &= ~(ADVERTISE_100FULL);
  1176. happy_meal_tcvr_write(hp, tregs, MII_ADVERTISE, hp->sw_advertise);
  1177. /* XXX Currently no Happy Meal cards I know off support 100BaseT4,
  1178.  * XXX and this is because the DP83840 does not support it, changes
  1179.  * XXX would need to be made to the tx/rx logic in the driver as well
  1180.  * XXX so I completely skip checking for it in the BMSR for now.
  1181.  */
  1182. #ifdef AUTO_SWITCH_DEBUG
  1183. ASD(("%s: Advertising [ ", hp->dev->name));
  1184. if (hp->sw_advertise & ADVERTISE_10HALF)
  1185. ASD(("10H "));
  1186. if (hp->sw_advertise & ADVERTISE_10FULL)
  1187. ASD(("10F "));
  1188. if (hp->sw_advertise & ADVERTISE_100HALF)
  1189. ASD(("100H "));
  1190. if (hp->sw_advertise & ADVERTISE_100FULL)
  1191. ASD(("100F "));
  1192. #endif
  1193. /* Enable Auto-Negotiation, this is usually on already... */
  1194. hp->sw_bmcr |= BMCR_ANENABLE;
  1195. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  1196. /* Restart it to make sure it is going. */
  1197. hp->sw_bmcr |= BMCR_ANRESTART;
  1198. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  1199. /* BMCR_ANRESTART self clears when the process has begun. */
  1200. timeout = 64;  /* More than enough. */
  1201. while (--timeout) {
  1202. hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  1203. if (!(hp->sw_bmcr & BMCR_ANRESTART))
  1204. break; /* got it. */
  1205. udelay(10);
  1206. }
  1207. if (!timeout) {
  1208. printk(KERN_ERR "%s: Happy Meal would not start auto negotiation "
  1209.        "BMCR=0x%04xn", hp->dev->name, hp->sw_bmcr);
  1210. printk(KERN_NOTICE "%s: Performing force link detection.n",
  1211.        hp->dev->name);
  1212. goto force_link;
  1213. } else {
  1214. hp->timer_state = arbwait;
  1215. }
  1216. } else {
  1217. force_link:
  1218. /* Force the link up, trying first a particular mode.
  1219.  * Either we are here at the request of ethtool or
  1220.  * because the Happy Meal would not start to autoneg.
  1221.  */
  1222. /* Disable auto-negotiation in BMCR, enable the duplex and
  1223.  * speed setting, init the timer state machine, and fire it off.
  1224.  */
  1225. if (ep == NULL || ep->autoneg == AUTONEG_ENABLE) {
  1226. hp->sw_bmcr = BMCR_SPEED100;
  1227. } else {
  1228. if (ep->speed == SPEED_100)
  1229. hp->sw_bmcr = BMCR_SPEED100;
  1230. else
  1231. hp->sw_bmcr = 0;
  1232. if (ep->duplex == DUPLEX_FULL)
  1233. hp->sw_bmcr |= BMCR_FULLDPLX;
  1234. }
  1235. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  1236. if (!is_lucent_phy(hp)) {
  1237. /* OK, seems we need do disable the transceiver for the first
  1238.  * tick to make sure we get an accurate link state at the
  1239.  * second tick.
  1240.  */
  1241. hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs,
  1242.        DP83840_CSCONFIG);
  1243. hp->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
  1244. happy_meal_tcvr_write(hp, tregs, DP83840_CSCONFIG,
  1245.       hp->sw_csconfig);
  1246. }
  1247. hp->timer_state = ltrywait;
  1248. }
  1249. hp->timer_ticks = 0;
  1250. hp->happy_timer.expires = jiffies + (12 * HZ)/10;  /* 1.2 sec. */
  1251. hp->happy_timer.data = (unsigned long) hp;
  1252. hp->happy_timer.function = &happy_meal_timer;
  1253. add_timer(&hp->happy_timer);
  1254. }
  1255. /* hp->happy_lock must be held */
  1256. static int happy_meal_init(struct happy_meal *hp)
  1257. {
  1258. unsigned long gregs        = hp->gregs;
  1259. unsigned long etxregs      = hp->etxregs;
  1260. unsigned long erxregs      = hp->erxregs;
  1261. unsigned long bregs        = hp->bigmacregs;
  1262. unsigned long tregs        = hp->tcvregs;
  1263. u32 regtmp, rxcfg;
  1264. unsigned char *e = &hp->dev->dev_addr[0];
  1265. /* If auto-negotiation timer is running, kill it. */
  1266. del_timer(&hp->happy_timer);
  1267. HMD(("happy_meal_init: happy_flags[%08x] ",
  1268.      hp->happy_flags));
  1269. if (!(hp->happy_flags & HFLAG_INIT)) {
  1270. HMD(("set HFLAG_INIT, "));
  1271. hp->happy_flags |= HFLAG_INIT;
  1272. happy_meal_get_counters(hp, bregs);
  1273. }
  1274. /* Stop polling. */
  1275. HMD(("to happy_meal_poll_stopn"));
  1276. happy_meal_poll_stop(hp, tregs);
  1277. /* Stop transmitter and receiver. */
  1278. HMD(("happy_meal_init: to happy_meal_stopn"));
  1279. happy_meal_stop(hp, gregs);
  1280. /* Alloc and reset the tx/rx descriptor chains. */
  1281. HMD(("happy_meal_init: to happy_meal_init_ringsn"));
  1282. happy_meal_init_rings(hp);
  1283. /* Shut up the MIF. */
  1284. HMD(("happy_meal_init: Disable all MIF irqs (old[%08x]), ",
  1285.      hme_read32(hp, tregs + TCVR_IMASK)));
  1286. hme_write32(hp, tregs + TCVR_IMASK, 0xffff);
  1287. /* See if we can enable the MIF frame on this card to speak to the DP83840. */
  1288. if (hp->happy_flags & HFLAG_FENABLE) {
  1289. HMD(("use frame old[%08x], ",
  1290.      hme_read32(hp, tregs + TCVR_CFG)));
  1291. hme_write32(hp, tregs + TCVR_CFG,
  1292.     hme_read32(hp, tregs + TCVR_CFG) & ~(TCV_CFG_BENABLE));
  1293. } else {
  1294. HMD(("use bitbang old[%08x], ",
  1295.      hme_read32(hp, tregs + TCVR_CFG)));
  1296. hme_write32(hp, tregs + TCVR_CFG,
  1297.     hme_read32(hp, tregs + TCVR_CFG) | TCV_CFG_BENABLE);
  1298. }
  1299. /* Check the state of the transceiver. */
  1300. HMD(("to happy_meal_transceiver_checkn"));
  1301. happy_meal_transceiver_check(hp, tregs);
  1302. /* Put the Big Mac into a sane state. */
  1303. HMD(("happy_meal_init: "));
  1304. switch(hp->tcvr_type) {
  1305. case none:
  1306. /* Cannot operate if we don't know the transceiver type! */
  1307. HMD(("AAIEEE no transceiver type, EAGAIN"));
  1308. return -EAGAIN;
  1309. case internal:
  1310. /* Using the MII buffers. */
  1311. HMD(("internal, using MII, "));
  1312. hme_write32(hp, bregs + BMAC_XIFCFG, 0);
  1313. break;
  1314. case external:
  1315. /* Not using the MII, disable it. */
  1316. HMD(("external, disable MII, "));
  1317. hme_write32(hp, bregs + BMAC_XIFCFG, BIGMAC_XCFG_MIIDISAB);
  1318. break;
  1319. };
  1320. if (happy_meal_tcvr_reset(hp, tregs))
  1321. return -EAGAIN;
  1322. /* Reset the Happy Meal Big Mac transceiver and the receiver. */
  1323. HMD(("tx/rx reset, "));
  1324. happy_meal_tx_reset(hp, bregs);
  1325. happy_meal_rx_reset(hp, bregs);
  1326. /* Set jam size and inter-packet gaps to reasonable defaults. */
  1327. HMD(("jsize/ipg1/ipg2, "));
  1328. hme_write32(hp, bregs + BMAC_JSIZE, DEFAULT_JAMSIZE);
  1329. hme_write32(hp, bregs + BMAC_IGAP1, DEFAULT_IPG1);
  1330. hme_write32(hp, bregs + BMAC_IGAP2, DEFAULT_IPG2);
  1331. /* Load up the MAC address and random seed. */
  1332. HMD(("rseed/macaddr, "));
  1333. /* The docs recommend to use the 10LSB of our MAC here. */
  1334. hme_write32(hp, bregs + BMAC_RSEED, ((e[5] | e[4]<<8)&0x3ff));
  1335. hme_write32(hp, bregs + BMAC_MACADDR2, ((e[4] << 8) | e[5]));
  1336. hme_write32(hp, bregs + BMAC_MACADDR1, ((e[2] << 8) | e[3]));
  1337. hme_write32(hp, bregs + BMAC_MACADDR0, ((e[0] << 8) | e[1]));
  1338. HMD(("htable, "));
  1339. if ((hp->dev->flags & IFF_ALLMULTI) ||
  1340.     (hp->dev->mc_count > 64)) {
  1341. hme_write32(hp, bregs + BMAC_HTABLE0, 0xffff);
  1342. hme_write32(hp, bregs + BMAC_HTABLE1, 0xffff);
  1343. hme_write32(hp, bregs + BMAC_HTABLE2, 0xffff);
  1344. hme_write32(hp, bregs + BMAC_HTABLE3, 0xffff);
  1345. } else if ((hp->dev->flags & IFF_PROMISC) == 0) {
  1346. u16 hash_table[4];
  1347. struct dev_mc_list *dmi = hp->dev->mc_list;
  1348. char *addrs;
  1349. int i;
  1350. u32 crc;
  1351. for (i = 0; i < 4; i++)
  1352. hash_table[i] = 0;
  1353. for (i = 0; i < hp->dev->mc_count; i++) {
  1354. addrs = dmi->dmi_addr;
  1355. dmi = dmi->next;
  1356. if (!(*addrs & 1))
  1357. continue;
  1358. crc = ether_crc_le(6, addrs);
  1359. crc >>= 26;
  1360. hash_table[crc >> 4] |= 1 << (crc & 0xf);
  1361. }
  1362. hme_write32(hp, bregs + BMAC_HTABLE0, hash_table[0]);
  1363. hme_write32(hp, bregs + BMAC_HTABLE1, hash_table[1]);
  1364. hme_write32(hp, bregs + BMAC_HTABLE2, hash_table[2]);
  1365. hme_write32(hp, bregs + BMAC_HTABLE3, hash_table[3]);
  1366. } else {
  1367. hme_write32(hp, bregs + BMAC_HTABLE3, 0);
  1368. hme_write32(hp, bregs + BMAC_HTABLE2, 0);
  1369. hme_write32(hp, bregs + BMAC_HTABLE1, 0);
  1370. hme_write32(hp, bregs + BMAC_HTABLE0, 0);
  1371. }
  1372. /* Set the RX and TX ring ptrs. */
  1373. HMD(("ring ptrs rxr[%08x] txr[%08x]n",
  1374.      ((__u32)hp->hblock_dvma + hblock_offset(happy_meal_rxd, 0)),
  1375.      ((__u32)hp->hblock_dvma + hblock_offset(happy_meal_txd, 0))));
  1376. hme_write32(hp, erxregs + ERX_RING,
  1377.     ((__u32)hp->hblock_dvma + hblock_offset(happy_meal_rxd, 0)));
  1378. hme_write32(hp, etxregs + ETX_RING,
  1379.     ((__u32)hp->hblock_dvma + hblock_offset(happy_meal_txd, 0)));
  1380. /* Parity issues in the ERX unit of some HME revisions can cause some
  1381.  * registers to not be written unless their parity is even.  Detect such
  1382.  * lost writes and simply rewrite with a low bit set (which will be ignored
  1383.  * since the rxring needs to be 2K aligned).
  1384.  */
  1385. if (hme_read32(hp, erxregs + ERX_RING) !=
  1386.     ((__u32)hp->hblock_dvma + hblock_offset(happy_meal_rxd, 0)))
  1387. hme_write32(hp, erxregs + ERX_RING,
  1388.     ((__u32)hp->hblock_dvma + hblock_offset(happy_meal_rxd, 0))
  1389.     | 0x4);
  1390. /* Set the supported burst sizes. */
  1391. HMD(("happy_meal_init: old[%08x] bursts<",
  1392.      hme_read32(hp, gregs + GREG_CFG)));
  1393. #ifndef __sparc__
  1394. /* It is always PCI and can handle 64byte bursts. */
  1395. hme_write32(hp, gregs + GREG_CFG, GREG_CFG_BURST64);
  1396. #else
  1397. if ((hp->happy_bursts & DMA_BURST64) &&
  1398.     ((hp->happy_flags & HFLAG_PCI) != 0
  1399. #ifdef CONFIG_SBUS
  1400.      || sbus_can_burst64(hp->happy_dev)
  1401. #endif
  1402.      || 0)) {
  1403. u32 gcfg = GREG_CFG_BURST64;
  1404. /* I have no idea if I should set the extended
  1405.  * transfer mode bit for Cheerio, so for now I
  1406.  * do not.  -DaveM
  1407.  */
  1408. #ifdef CONFIG_SBUS
  1409. if ((hp->happy_flags & HFLAG_PCI) == 0 &&
  1410.     sbus_can_dma_64bit(hp->happy_dev)) {
  1411. sbus_set_sbus64(hp->happy_dev,
  1412. hp->happy_bursts);
  1413. gcfg |= GREG_CFG_64BIT;
  1414. }
  1415. #endif
  1416. HMD(("64>"));
  1417. hme_write32(hp, gregs + GREG_CFG, gcfg);
  1418. } else if (hp->happy_bursts & DMA_BURST32) {
  1419. HMD(("32>"));
  1420. hme_write32(hp, gregs + GREG_CFG, GREG_CFG_BURST32);
  1421. } else if (hp->happy_bursts & DMA_BURST16) {
  1422. HMD(("16>"));
  1423. hme_write32(hp, gregs + GREG_CFG, GREG_CFG_BURST16);
  1424. } else {
  1425. HMD(("XXX>"));
  1426. hme_write32(hp, gregs + GREG_CFG, 0);
  1427. }
  1428. #endif /* __sparc__ */
  1429. /* Turn off interrupts we do not want to hear. */
  1430. HMD((", enable global interrupts, "));
  1431. hme_write32(hp, gregs + GREG_IMASK,
  1432.     (GREG_IMASK_GOTFRAME | GREG_IMASK_RCNTEXP |
  1433.      GREG_IMASK_SENTFRAME | GREG_IMASK_TXPERR));
  1434. /* Set the transmit ring buffer size. */
  1435. HMD(("tx rsize=%d oreg[%08x], ", (int)TX_RING_SIZE,
  1436.      hme_read32(hp, etxregs + ETX_RSIZE)));
  1437. hme_write32(hp, etxregs + ETX_RSIZE, (TX_RING_SIZE >> ETX_RSIZE_SHIFT) - 1);
  1438. /* Enable transmitter DVMA. */
  1439. HMD(("tx dma enable old[%08x], ",
  1440.      hme_read32(hp, etxregs + ETX_CFG)));
  1441. hme_write32(hp, etxregs + ETX_CFG,
  1442.     hme_read32(hp, etxregs + ETX_CFG) | ETX_CFG_DMAENABLE);
  1443. /* This chip really rots, for the receiver sometimes when you
  1444.  * write to it's control registers not all the bits get there
  1445.  * properly.  I cannot think of a sane way to provide complete
  1446.  * coverage for this hardware bug yet.
  1447.  */
  1448. HMD(("erx regs bug old[%08x]n",
  1449.      hme_read32(hp, erxregs + ERX_CFG)));
  1450. hme_write32(hp, erxregs + ERX_CFG, ERX_CFG_DEFAULT(RX_OFFSET));
  1451. regtmp = hme_read32(hp, erxregs + ERX_CFG);
  1452. hme_write32(hp, erxregs + ERX_CFG, ERX_CFG_DEFAULT(RX_OFFSET));
  1453. if (hme_read32(hp, erxregs + ERX_CFG) != ERX_CFG_DEFAULT(RX_OFFSET)) {
  1454. printk(KERN_ERR "happy meal: Eieee, rx config register gets greasy fries.n");
  1455. printk(KERN_ERR "happy meal: Trying to set %08x, reread gives %08xn",
  1456.        ERX_CFG_DEFAULT(RX_OFFSET), regtmp);
  1457. /* XXX Should return failure here... */
  1458. }
  1459. /* Enable Big Mac hash table filter. */
  1460. HMD(("happy_meal_init: enable hash rx_cfg_old[%08x], ",
  1461.      hme_read32(hp, bregs + BMAC_RXCFG)));
  1462. rxcfg = BIGMAC_RXCFG_HENABLE | BIGMAC_RXCFG_REJME;
  1463. if (hp->dev->flags & IFF_PROMISC)
  1464. rxcfg |= BIGMAC_RXCFG_PMISC;
  1465. hme_write32(hp, bregs + BMAC_RXCFG, rxcfg);
  1466. /* Let the bits settle in the chip. */
  1467. udelay(10);
  1468. /* Ok, configure the Big Mac transmitter. */
  1469. HMD(("BIGMAC init, "));
  1470. regtmp = 0;
  1471. if (hp->happy_flags & HFLAG_FULL)
  1472. regtmp |= BIGMAC_TXCFG_FULLDPLX;
  1473. /* Don't turn on the "don't give up" bit for now.  It could cause hme
  1474.  * to deadlock with the PHY if a Jabber occurs.
  1475.  */
  1476. hme_write32(hp, bregs + BMAC_TXCFG, regtmp /*| BIGMAC_TXCFG_DGIVEUP*/);
  1477. /* Give up after 16 TX attempts. */
  1478. hme_write32(hp, bregs + BMAC_ALIMIT, 16);
  1479. /* Enable the output drivers no matter what. */
  1480. regtmp = BIGMAC_XCFG_ODENABLE;
  1481. /* If card can do lance mode, enable it. */
  1482. if (hp->happy_flags & HFLAG_LANCE)
  1483. regtmp |= (DEFAULT_IPG0 << 5) | BIGMAC_XCFG_LANCE;
  1484. /* Disable the MII buffers if using external transceiver. */
  1485. if (hp->tcvr_type == external)
  1486. regtmp |= BIGMAC_XCFG_MIIDISAB;
  1487. HMD(("XIF config old[%08x], ",
  1488.      hme_read32(hp, bregs + BMAC_XIFCFG)));
  1489. hme_write32(hp, bregs + BMAC_XIFCFG, regtmp);
  1490. /* Start things up. */
  1491. HMD(("tx old[%08x] and rx [%08x] ON!n",
  1492.      hme_read32(hp, bregs + BMAC_TXCFG),
  1493.      hme_read32(hp, bregs + BMAC_RXCFG)));
  1494. hme_write32(hp, bregs + BMAC_TXCFG,
  1495.     hme_read32(hp, bregs + BMAC_TXCFG) | BIGMAC_TXCFG_ENABLE);
  1496. hme_write32(hp, bregs + BMAC_RXCFG,
  1497.     hme_read32(hp, bregs + BMAC_RXCFG) | BIGMAC_RXCFG_ENABLE);
  1498. /* Get the autonegotiation started, and the watch timer ticking. */
  1499. happy_meal_begin_auto_negotiation(hp, tregs, NULL);
  1500. /* Success. */
  1501. return 0;
  1502. }
  1503. /* hp->happy_lock must be held */
  1504. static void happy_meal_set_initial_advertisement(struct happy_meal *hp)
  1505. {
  1506. unsigned long tregs = hp->tcvregs;
  1507. unsigned long bregs = hp->bigmacregs;
  1508. unsigned long gregs = hp->gregs;
  1509. happy_meal_stop(hp, gregs);
  1510. hme_write32(hp, tregs + TCVR_IMASK, 0xffff);
  1511. if (hp->happy_flags & HFLAG_FENABLE)
  1512. hme_write32(hp, tregs + TCVR_CFG,
  1513.     hme_read32(hp, tregs + TCVR_CFG) & ~(TCV_CFG_BENABLE));
  1514. else
  1515. hme_write32(hp, tregs + TCVR_CFG,
  1516.     hme_read32(hp, tregs + TCVR_CFG) | TCV_CFG_BENABLE);
  1517. happy_meal_transceiver_check(hp, tregs);
  1518. switch(hp->tcvr_type) {
  1519. case none:
  1520. return;
  1521. case internal:
  1522. hme_write32(hp, bregs + BMAC_XIFCFG, 0);
  1523. break;
  1524. case external:
  1525. hme_write32(hp, bregs + BMAC_XIFCFG, BIGMAC_XCFG_MIIDISAB);
  1526. break;
  1527. };
  1528. if (happy_meal_tcvr_reset(hp, tregs))
  1529. return;
  1530. /* Latch PHY registers as of now. */
  1531. hp->sw_bmsr      = happy_meal_tcvr_read(hp, tregs, MII_BMSR);
  1532. hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, MII_ADVERTISE);
  1533. /* Advertise everything we can support. */
  1534. if (hp->sw_bmsr & BMSR_10HALF)
  1535. hp->sw_advertise |= (ADVERTISE_10HALF);
  1536. else
  1537. hp->sw_advertise &= ~(ADVERTISE_10HALF);
  1538. if (hp->sw_bmsr & BMSR_10FULL)
  1539. hp->sw_advertise |= (ADVERTISE_10FULL);
  1540. else
  1541. hp->sw_advertise &= ~(ADVERTISE_10FULL);
  1542. if (hp->sw_bmsr & BMSR_100HALF)
  1543. hp->sw_advertise |= (ADVERTISE_100HALF);
  1544. else
  1545. hp->sw_advertise &= ~(ADVERTISE_100HALF);
  1546. if (hp->sw_bmsr & BMSR_100FULL)
  1547. hp->sw_advertise |= (ADVERTISE_100FULL);
  1548. else
  1549. hp->sw_advertise &= ~(ADVERTISE_100FULL);
  1550. /* Update the PHY advertisement register. */
  1551. happy_meal_tcvr_write(hp, tregs, MII_ADVERTISE, hp->sw_advertise);
  1552. }
  1553. /* Once status is latched (by happy_meal_interrupt) it is cleared by
  1554.  * the hardware, so we cannot re-read it and get a correct value.
  1555.  *
  1556.  * hp->happy_lock must be held
  1557.  */
  1558. static int happy_meal_is_not_so_happy(struct happy_meal *hp, u32 status)
  1559. {
  1560. int reset = 0;
  1561. /* Only print messages for non-counter related interrupts. */
  1562. if (status & (GREG_STAT_STSTERR | GREG_STAT_TFIFO_UND |
  1563.       GREG_STAT_MAXPKTERR | GREG_STAT_RXERR |
  1564.       GREG_STAT_RXPERR | GREG_STAT_RXTERR | GREG_STAT_EOPERR |
  1565.       GREG_STAT_MIFIRQ | GREG_STAT_TXEACK | GREG_STAT_TXLERR |
  1566.       GREG_STAT_TXPERR | GREG_STAT_TXTERR | GREG_STAT_SLVERR |
  1567.       GREG_STAT_SLVPERR))
  1568. printk(KERN_ERR "%s: Error interrupt for happy meal, status = %08xn",
  1569.        hp->dev->name, status);
  1570. if (status & GREG_STAT_RFIFOVF) {
  1571. /* Receive FIFO overflow is harmless and the hardware will take
  1572.    care of it, just some packets are lost. Who cares. */
  1573. printk(KERN_DEBUG "%s: Happy Meal receive FIFO overflow.n", hp->dev->name);
  1574. }
  1575. if (status & GREG_STAT_STSTERR) {
  1576. /* BigMAC SQE link test failed. */
  1577. printk(KERN_ERR "%s: Happy Meal BigMAC SQE test failed.n", hp->dev->name);
  1578. reset = 1;
  1579. }
  1580. if (status & GREG_STAT_TFIFO_UND) {
  1581. /* Transmit FIFO underrun, again DMA error likely. */
  1582. printk(KERN_ERR "%s: Happy Meal transmitter FIFO underrun, DMA error.n",
  1583.        hp->dev->name);
  1584. reset = 1;
  1585. }
  1586. if (status & GREG_STAT_MAXPKTERR) {
  1587. /* Driver error, tried to transmit something larger
  1588.  * than ethernet max mtu.
  1589.  */
  1590. printk(KERN_ERR "%s: Happy Meal MAX Packet size error.n", hp->dev->name);
  1591. reset = 1;
  1592. }
  1593. if (status & GREG_STAT_NORXD) {
  1594. /* This is harmless, it just means the system is
  1595.  * quite loaded and the incoming packet rate was
  1596.  * faster than the interrupt handler could keep up
  1597.  * with.
  1598.  */
  1599. printk(KERN_INFO "%s: Happy Meal out of receive "
  1600.        "descriptors, packet dropped.n",
  1601.        hp->dev->name);
  1602. }
  1603. if (status & (GREG_STAT_RXERR|GREG_STAT_RXPERR|GREG_STAT_RXTERR)) {
  1604. /* All sorts of DMA receive errors. */
  1605. printk(KERN_ERR "%s: Happy Meal rx DMA errors [ ", hp->dev->name);
  1606. if (status & GREG_STAT_RXERR)
  1607. printk("GenericError ");
  1608. if (status & GREG_STAT_RXPERR)
  1609. printk("ParityError ");
  1610. if (status & GREG_STAT_RXTERR)
  1611. printk("RxTagBotch ");
  1612. printk("]n");
  1613. reset = 1;
  1614. }
  1615. if (status & GREG_STAT_EOPERR) {
  1616. /* Driver bug, didn't set EOP bit in tx descriptor given
  1617.  * to the happy meal.
  1618.  */
  1619. printk(KERN_ERR "%s: EOP not set in happy meal transmit descriptor!n",
  1620.        hp->dev->name);
  1621. reset = 1;
  1622. }
  1623. if (status & GREG_STAT_MIFIRQ) {
  1624. /* MIF signalled an interrupt, were we polling it? */
  1625. printk(KERN_ERR "%s: Happy Meal MIF interrupt.n", hp->dev->name);
  1626. }
  1627. if (status &
  1628.     (GREG_STAT_TXEACK|GREG_STAT_TXLERR|GREG_STAT_TXPERR|GREG_STAT_TXTERR)) {
  1629. /* All sorts of transmit DMA errors. */
  1630. printk(KERN_ERR "%s: Happy Meal tx DMA errors [ ", hp->dev->name);
  1631. if (status & GREG_STAT_TXEACK)
  1632. printk("GenericError ");
  1633. if (status & GREG_STAT_TXLERR)
  1634. printk("LateError ");
  1635. if (status & GREG_STAT_TXPERR)
  1636. printk("ParityErro ");
  1637. if (status & GREG_STAT_TXTERR)
  1638. printk("TagBotch ");
  1639. printk("]n");
  1640. reset = 1;
  1641. }
  1642. if (status & (GREG_STAT_SLVERR|GREG_STAT_SLVPERR)) {
  1643. /* Bus or parity error when cpu accessed happy meal registers
  1644.  * or it's internal FIFO's.  Should never see this.
  1645.  */
  1646. printk(KERN_ERR "%s: Happy Meal register access SBUS slave (%s) error.n",
  1647.        hp->dev->name,
  1648.        (status & GREG_STAT_SLVPERR) ? "parity" : "generic");
  1649. reset = 1;
  1650. }
  1651. if (reset) {
  1652. printk(KERN_NOTICE "%s: Resetting...n", hp->dev->name);
  1653. happy_meal_init(hp);
  1654. return 1;
  1655. }
  1656. return 0;
  1657. }
  1658. /* hp->happy_lock must be held */
  1659. static void happy_meal_mif_interrupt(struct happy_meal *hp)
  1660. {
  1661. unsigned long tregs = hp->tcvregs;
  1662. printk(KERN_INFO "%s: Link status change.n", hp->dev->name);
  1663. hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
  1664. hp->sw_lpa = happy_meal_tcvr_read(hp, tregs, MII_LPA);
  1665. /* Use the fastest transmission protocol possible. */
  1666. if (hp->sw_lpa & LPA_100FULL) {
  1667. printk(KERN_INFO "%s: Switching to 100Mbps at full duplex.", hp->dev->name);
  1668. hp->sw_bmcr |= (BMCR_FULLDPLX | BMCR_SPEED100);
  1669. } else if (hp->sw_lpa & LPA_100HALF) {
  1670. printk(KERN_INFO "%s: Switching to 100MBps at half duplex.", hp->dev->name);
  1671. hp->sw_bmcr |= BMCR_SPEED100;
  1672. } else if (hp->sw_lpa & LPA_10FULL) {
  1673. printk(KERN_INFO "%s: Switching to 10MBps at full duplex.", hp->dev->name);
  1674. hp->sw_bmcr |= BMCR_FULLDPLX;
  1675. } else {
  1676. printk(KERN_INFO "%s: Using 10Mbps at half duplex.", hp->dev->name);
  1677. }
  1678. happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
  1679. /* Finally stop polling and shut up the MIF. */
  1680. happy_meal_poll_stop(hp, tregs);
  1681. }
  1682. #ifdef TXDEBUG
  1683. #define TXD(x) printk x
  1684. #else
  1685. #define TXD(x)
  1686. #endif
  1687. /* hp->happy_lock must be held */
  1688. static void happy_meal_tx(struct happy_meal *hp)
  1689. {
  1690. struct happy_meal_txd *txbase = &hp->happy_block->happy_meal_txd[0];
  1691. struct happy_meal_txd *this;
  1692. struct net_device *dev = hp->dev;
  1693. int elem;
  1694. elem = hp->tx_old;
  1695. TXD(("TX<"));
  1696. while (elem != hp->tx_new) {
  1697. struct sk_buff *skb;
  1698. u32 flags, dma_addr, dma_len;
  1699. int frag;
  1700. TXD(("[%d]", elem));
  1701. this = &txbase[elem];
  1702. flags = hme_read_desc32(hp, &this->tx_flags);
  1703. if (flags & TXFLAG_OWN)
  1704. break;
  1705. skb = hp->tx_skbs[elem];
  1706. if (skb_shinfo(skb)->nr_frags) {
  1707. int last;
  1708. last = elem + skb_shinfo(skb)->nr_frags;
  1709. last &= (TX_RING_SIZE - 1);
  1710. flags = hme_read_desc32(hp, &txbase[last].tx_flags);
  1711. if (flags & TXFLAG_OWN)
  1712. break;
  1713. }
  1714. hp->tx_skbs[elem] = NULL;
  1715. hp->net_stats.tx_bytes += skb->len;
  1716. for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
  1717. dma_addr = hme_read_desc32(hp, &this->tx_addr);
  1718. dma_len = hme_read_desc32(hp, &this->tx_flags);
  1719. dma_len &= TXFLAG_SIZE;
  1720. hme_dma_unmap(hp, dma_addr, dma_len, DMA_TODEVICE);
  1721. elem = NEXT_TX(elem);
  1722. this = &txbase[elem];
  1723. }
  1724. dev_kfree_skb_irq(skb);
  1725. hp->net_stats.tx_packets++;
  1726. }
  1727. hp->tx_old = elem;
  1728. TXD((">"));
  1729. if (netif_queue_stopped(dev) &&
  1730.     TX_BUFFS_AVAIL(hp) > (MAX_SKB_FRAGS + 1))
  1731. netif_wake_queue(dev);
  1732. }
  1733. #ifdef RXDEBUG
  1734. #define RXD(x) printk x
  1735. #else
  1736. #define RXD(x)
  1737. #endif
  1738. /* Originally I used to handle the allocation failure by just giving back just
  1739.  * that one ring buffer to the happy meal.  Problem is that usually when that
  1740.  * condition is triggered, the happy meal expects you to do something reasonable
  1741.  * with all of the packets it has DMA'd in.  So now I just drop the entire
  1742.  * ring when we cannot get a new skb and give them all back to the happy meal,
  1743.  * maybe things will be "happier" now.
  1744.  *
  1745.  * hp->happy_lock must be held
  1746.  */
  1747. static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)
  1748. {
  1749. struct happy_meal_rxd *rxbase = &hp->happy_block->happy_meal_rxd[0];
  1750. struct happy_meal_rxd *this;
  1751. int elem = hp->rx_new, drops = 0;
  1752. u32 flags;
  1753. RXD(("RX<"));
  1754. this = &rxbase[elem];
  1755. while (!((flags = hme_read_desc32(hp, &this->rx_flags)) & RXFLAG_OWN)) {
  1756. struct sk_buff *skb;
  1757. int len = flags >> 16;
  1758. u16 csum = flags & RXFLAG_CSUM;
  1759. u32 dma_addr = hme_read_desc32(hp, &this->rx_addr);
  1760. RXD(("[%d ", elem));
  1761. /* Check for errors. */
  1762. if ((len < ETH_ZLEN) || (flags & RXFLAG_OVERFLOW)) {
  1763. RXD(("ERR(%08x)]", flags));
  1764. hp->net_stats.rx_errors++;
  1765. if (len < ETH_ZLEN)
  1766. hp->net_stats.rx_length_errors++;
  1767. if (len & (RXFLAG_OVERFLOW >> 16)) {
  1768. hp->net_stats.rx_over_errors++;
  1769. hp->net_stats.rx_fifo_errors++;
  1770. }
  1771. /* Return it to the Happy meal. */
  1772. drop_it:
  1773. hp->net_stats.rx_dropped++;
  1774. hme_write_rxd(hp, this,
  1775.       (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
  1776.       dma_addr);
  1777. goto next;
  1778. }
  1779. skb = hp->rx_skbs[elem];
  1780. if (len > RX_COPY_THRESHOLD) {
  1781. struct sk_buff *new_skb;
  1782. /* Now refill the entry, if we can. */
  1783. new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
  1784. if (new_skb == NULL) {
  1785. drops++;
  1786. goto drop_it;
  1787. }
  1788. hme_dma_unmap(hp, dma_addr, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE);
  1789. hp->rx_skbs[elem] = new_skb;
  1790. new_skb->dev = dev;
  1791. skb_put(new_skb, (ETH_FRAME_LEN + RX_OFFSET));
  1792. hme_write_rxd(hp, this,
  1793.       (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
  1794.       hme_dma_map(hp, new_skb->data, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE));
  1795. skb_reserve(new_skb, RX_OFFSET);
  1796. /* Trim the original skb for the netif. */
  1797. skb_trim(skb, len);
  1798. } else {
  1799. struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
  1800. if (copy_skb == NULL) {
  1801. drops++;
  1802. goto drop_it;
  1803. }
  1804. copy_skb->dev = dev;
  1805. skb_reserve(copy_skb, 2);
  1806. skb_put(copy_skb, len);
  1807. hme_dma_sync(hp, dma_addr, len, DMA_FROMDEVICE);
  1808. memcpy(copy_skb->data, skb->data, len);
  1809. /* Reuse original ring buffer. */
  1810. hme_write_rxd(hp, this,
  1811.       (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
  1812.       dma_addr);
  1813. skb = copy_skb;
  1814. }
  1815. /* This card is _fucking_ hot... */
  1816. skb->csum = ntohs(csum ^ 0xffff);
  1817. skb->ip_summed = CHECKSUM_HW;
  1818. RXD(("len=%d csum=%4x]", len, csum));
  1819. skb->protocol = eth_type_trans(skb, dev);
  1820. netif_rx(skb);
  1821. dev->last_rx = jiffies;
  1822. hp->net_stats.rx_packets++;
  1823. hp->net_stats.rx_bytes += len;
  1824. next:
  1825. elem = NEXT_RX(elem);
  1826. this = &rxbase[elem];
  1827. }
  1828. hp->rx_new = elem;
  1829. if (drops)
  1830. printk(KERN_INFO "%s: Memory squeeze, deferring packet.n", hp->dev->name);
  1831. RXD((">"));
  1832. }
  1833. static void happy_meal_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  1834. {
  1835. struct net_device *dev = (struct net_device *) dev_id;
  1836. struct happy_meal *hp  = dev->priv;
  1837. u32 happy_status       = hme_read32(hp, hp->gregs + GREG_STAT);
  1838. HMD(("happy_meal_interrupt: status=%08x ", happy_status));
  1839. spin_lock(&hp->happy_lock);
  1840. if (happy_status & GREG_STAT_ERRORS) {
  1841. HMD(("ERRORS "));
  1842. if (happy_meal_is_not_so_happy(hp, /* un- */ happy_status))
  1843. goto out;
  1844. }
  1845. if (happy_status & GREG_STAT_MIFIRQ) {
  1846. HMD(("MIFIRQ "));
  1847. happy_meal_mif_interrupt(hp);
  1848. }
  1849. if (happy_status & GREG_STAT_TXALL) {
  1850. HMD(("TXALL "));
  1851. happy_meal_tx(hp);
  1852. }
  1853. if (happy_status & GREG_STAT_RXTOHOST) {
  1854. HMD(("RXTOHOST "));
  1855. happy_meal_rx(hp, dev);
  1856. }
  1857. HMD(("donen"));
  1858. out:
  1859. spin_unlock(&hp->happy_lock);
  1860. }
  1861. #ifdef CONFIG_SBUS
  1862. static void quattro_sbus_interrupt(int irq, void *cookie, struct pt_regs *ptregs)
  1863. {
  1864. struct quattro *qp = (struct quattro *) cookie;
  1865. int i;
  1866. for (i = 0; i < 4; i++) {
  1867. struct net_device *dev = qp->happy_meals[i];
  1868. struct happy_meal *hp  = dev->priv;
  1869. u32 happy_status       = hme_read32(hp, hp->gregs + GREG_STAT);
  1870. HMD(("quattro_interrupt: status=%08x ", happy_status));
  1871. if (!(happy_status & (GREG_STAT_ERRORS |
  1872.       GREG_STAT_MIFIRQ |
  1873.       GREG_STAT_TXALL |
  1874.       GREG_STAT_RXTOHOST)))
  1875. continue;
  1876. spin_lock(&hp->happy_lock);
  1877. if (happy_status & GREG_STAT_ERRORS) {
  1878. HMD(("ERRORS "));
  1879. if (happy_meal_is_not_so_happy(hp, happy_status))
  1880. goto next;
  1881. }
  1882. if (happy_status & GREG_STAT_MIFIRQ) {
  1883. HMD(("MIFIRQ "));
  1884. happy_meal_mif_interrupt(hp);
  1885. }
  1886. if (happy_status & GREG_STAT_TXALL) {
  1887. HMD(("TXALL "));
  1888. happy_meal_tx(hp);
  1889. }
  1890. if (happy_status & GREG_STAT_RXTOHOST) {
  1891. HMD(("RXTOHOST "));
  1892. happy_meal_rx(hp, dev);
  1893. }
  1894. next:
  1895. spin_unlock(&hp->happy_lock);
  1896. }
  1897. HMD(("donen"));
  1898. }
  1899. #endif
  1900. static int happy_meal_open(struct net_device *dev)
  1901. {
  1902. struct happy_meal *hp = dev->priv;
  1903. int res;
  1904. HMD(("happy_meal_open: "));
  1905. /* On SBUS Quattro QFE cards, all hme interrupts are concentrated
  1906.  * into a single source which we register handling at probe time.
  1907.  */
  1908. if ((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO) {
  1909. if (request_irq(dev->irq, &happy_meal_interrupt,
  1910. SA_SHIRQ, dev->name, (void *)dev)) {
  1911. HMD(("EAGAINn"));
  1912. #ifdef __sparc__
  1913. printk(KERN_ERR "happy_meal(SBUS): Can't order irq %s to go.n",
  1914.        __irq_itoa(dev->irq));
  1915. #else
  1916. printk(KERN_ERR "happy_meal(SBUS): Can't order irq %d to go.n",
  1917.        dev->irq);
  1918. #endif
  1919. return -EAGAIN;
  1920. }
  1921. }
  1922. HMD(("to happy_meal_initn"));
  1923. spin_lock_irq(&hp->happy_lock);
  1924. res = happy_meal_init(hp);
  1925. spin_unlock_irq(&hp->happy_lock);
  1926. if (res && ((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO))
  1927. free_irq(dev->irq, dev);
  1928. return res;
  1929. }
  1930. static int happy_meal_close(struct net_device *dev)
  1931. {
  1932. struct happy_meal *hp = dev->priv;
  1933. spin_lock_irq(&hp->happy_lock);
  1934. happy_meal_stop(hp, hp->gregs);
  1935. happy_meal_clean_rings(hp);
  1936. /* If auto-negotiation timer is running, kill it. */
  1937. del_timer(&hp->happy_timer);
  1938. spin_unlock_irq(&hp->happy_lock);
  1939. /* On Quattro QFE cards, all hme interrupts are concentrated
  1940.  * into a single source which we register handling at probe
  1941.  * time and never unregister.
  1942.  */
  1943. if ((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO)
  1944. free_irq(dev->irq, dev);
  1945. return 0;
  1946. }
  1947. #ifdef SXDEBUG
  1948. #define SXD(x) printk x
  1949. #else
  1950. #define SXD(x)
  1951. #endif
  1952. static void happy_meal_tx_timeout(struct net_device *dev)
  1953. {
  1954. struct happy_meal *hp = dev->priv;
  1955. printk (KERN_ERR "%s: transmit timed out, resettingn", dev->name);
  1956. tx_dump_log();
  1957. printk (KERN_ERR "%s: Happy Status %08x TX[%08x:%08x]n", dev->name,
  1958. hme_read32(hp, hp->gregs + GREG_STAT),
  1959. hme_read32(hp, hp->etxregs + ETX_CFG),
  1960. hme_read32(hp, hp->bigmacregs + BMAC_TXCFG));
  1961. spin_lock_irq(&hp->happy_lock);
  1962. happy_meal_init(hp);
  1963. spin_unlock_irq(&hp->happy_lock);
  1964. netif_wake_queue(dev);
  1965. }
  1966. static int happy_meal_start_xmit(struct sk_buff *skb, struct net_device *dev)
  1967. {
  1968. struct happy_meal *hp = dev->priv;
  1969.   int entry;
  1970.   u32 tx_flags;
  1971. tx_flags = TXFLAG_OWN;
  1972. if (skb->ip_summed == CHECKSUM_HW) {
  1973. u32 csum_start_off, csum_stuff_off;
  1974. csum_start_off = (u32) (skb->h.raw - skb->data);
  1975. csum_stuff_off = (u32) ((skb->h.raw + skb->csum) - skb->data);
  1976. tx_flags = (TXFLAG_OWN | TXFLAG_CSENABLE |
  1977.     ((csum_start_off << 14) & TXFLAG_CSBUFBEGIN) |
  1978.     ((csum_stuff_off << 20) & TXFLAG_CSLOCATION));
  1979. }
  1980. spin_lock_irq(&hp->happy_lock);
  1981.   if (TX_BUFFS_AVAIL(hp) <= (skb_shinfo(skb)->nr_frags + 1)) {
  1982. netif_stop_queue(dev);
  1983. spin_unlock_irq(&hp->happy_lock);
  1984. printk(KERN_ERR "%s: BUG! Tx Ring full when queue awake!n",
  1985.        dev->name);
  1986. return 1;
  1987. }
  1988. entry = hp->tx_new;
  1989. SXD(("SX<l[%d]e[%d]>", len, entry));
  1990. hp->tx_skbs[entry] = skb;
  1991. if (skb_shinfo(skb)->nr_frags == 0) {
  1992. u32 mapping, len;
  1993. len = skb->len;
  1994. mapping = hme_dma_map(hp, skb->data, len, DMA_TODEVICE);
  1995. tx_flags |= (TXFLAG_SOP | TXFLAG_EOP);
  1996. hme_write_txd(hp, &hp->happy_block->happy_meal_txd[entry],
  1997.       (tx_flags | (len & TXFLAG_SIZE)),
  1998.       mapping);
  1999. entry = NEXT_TX(entry);
  2000. } else {
  2001. u32 first_len, first_mapping;
  2002. int frag, first_entry = entry;
  2003. /* We must give this initial chunk to the device last.
  2004.  * Otherwise we could race with the device.
  2005.  */
  2006. first_len = skb->len - skb->data_len;
  2007. first_mapping = hme_dma_map(hp, skb->data, first_len, DMA_TODEVICE);
  2008. entry = NEXT_TX(entry);
  2009. for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) {
  2010. skb_frag_t *this_frag = &skb_shinfo(skb)->frags[frag];
  2011. u32 len, mapping, this_txflags;
  2012. len = this_frag->size;
  2013. mapping = hme_dma_map(hp,
  2014.       ((void *) page_address(this_frag->page) +
  2015.        this_frag->page_offset),
  2016.       len, DMA_TODEVICE);
  2017. this_txflags = tx_flags;
  2018. if (frag == skb_shinfo(skb)->nr_frags - 1)
  2019. this_txflags |= TXFLAG_EOP;
  2020. hme_write_txd(hp, &hp->happy_block->happy_meal_txd[entry],
  2021.       (this_txflags | (len & TXFLAG_SIZE)),
  2022.       mapping);
  2023. entry = NEXT_TX(entry);
  2024. }
  2025. hme_write_txd(hp, &hp->happy_block->happy_meal_txd[first_entry],
  2026.       (tx_flags | TXFLAG_SOP | (first_len & TXFLAG_SIZE)),
  2027.       first_mapping);
  2028. }
  2029. hp->tx_new = entry;
  2030. if (TX_BUFFS_AVAIL(hp) <= (MAX_SKB_FRAGS + 1))
  2031. netif_stop_queue(dev);
  2032. /* Get it going. */
  2033. hme_write32(hp, hp->etxregs + ETX_PENDING, ETX_TP_DMAWAKEUP);
  2034. spin_unlock_irq(&hp->happy_lock);
  2035. dev->trans_start = jiffies;
  2036. tx_add_log(hp, TXLOG_ACTION_TXMIT, 0);
  2037. return 0;
  2038. }
  2039. static struct net_device_stats *happy_meal_get_stats(struct net_device *dev)
  2040. {
  2041. struct happy_meal *hp = dev->priv;
  2042. spin_lock_irq(&hp->happy_lock);
  2043. happy_meal_get_counters(hp, hp->bigmacregs);
  2044. spin_unlock_irq(&hp->happy_lock);
  2045. return &hp->net_stats;
  2046. }
  2047. static void happy_meal_set_multicast(struct net_device *dev)
  2048. {
  2049. struct happy_meal *hp = dev->priv;
  2050. unsigned long bregs = hp->bigmacregs;
  2051. struct dev_mc_list *dmi = dev->mc_list;
  2052. char *addrs;
  2053. int i;
  2054. u32 crc;
  2055. spin_lock_irq(&hp->happy_lock);
  2056. netif_stop_queue(dev);
  2057. if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
  2058. hme_write32(hp, bregs + BMAC_HTABLE0, 0xffff);
  2059. hme_write32(hp, bregs + BMAC_HTABLE1, 0xffff);
  2060. hme_write32(hp, bregs + BMAC_HTABLE2, 0xffff);
  2061. hme_write32(hp, bregs + BMAC_HTABLE3, 0xffff);
  2062. } else if (dev->flags & IFF_PROMISC) {
  2063. hme_write32(hp, bregs + BMAC_RXCFG,
  2064.     hme_read32(hp, bregs + BMAC_RXCFG) | BIGMAC_RXCFG_PMISC);
  2065. } else {
  2066. u16 hash_table[4];
  2067. for (i = 0; i < 4; i++)
  2068. hash_table[i] = 0;
  2069. for (i = 0; i < dev->mc_count; i++) {
  2070. addrs = dmi->dmi_addr;
  2071. dmi = dmi->next;
  2072. if (!(*addrs & 1))
  2073. continue;
  2074. crc = ether_crc_le(6, addrs);
  2075. crc >>= 26;
  2076. hash_table[crc >> 4] |= 1 << (crc & 0xf);
  2077. }
  2078. hme_write32(hp, bregs + BMAC_HTABLE0, hash_table[0]);
  2079. hme_write32(hp, bregs + BMAC_HTABLE1, hash_table[1]);
  2080. hme_write32(hp, bregs + BMAC_HTABLE2, hash_table[2]);
  2081. hme_write32(hp, bregs + BMAC_HTABLE3, hash_table[3]);
  2082. }
  2083. netif_wake_queue(dev);
  2084. spin_unlock_irq(&hp->happy_lock);
  2085. }
  2086. /* Ethtool support... */
  2087. static int happy_meal_ioctl(struct net_device *dev,
  2088.     struct ifreq *rq, int cmd)
  2089. {
  2090. struct happy_meal *hp = dev->priv;
  2091. struct ethtool_cmd *ep_user = (struct ethtool_cmd *) rq->ifr_data;
  2092. struct ethtool_cmd ecmd;
  2093. if (cmd != SIOCETHTOOL)
  2094. return -EOPNOTSUPP;
  2095. if (copy_from_user(&ecmd, ep_user, sizeof(ecmd)))
  2096. return -EFAULT;
  2097. if (ecmd.cmd == ETHTOOL_GSET) {
  2098. ecmd.supported =
  2099. (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |
  2100.  SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
  2101.  SUPPORTED_Autoneg | SUPPORTED_TP | SUPPORTED_MII);
  2102. /* XXX hardcoded stuff for now */
  2103. ecmd.port = PORT_TP; /* XXX no MII support */
  2104. ecmd.transceiver = XCVR_INTERNAL; /* XXX no external xcvr support */
  2105. ecmd.phy_address = 0; /* XXX fixed PHYAD */
  2106. /* Record PHY settings. */
  2107. spin_lock_irq(&hp->happy_lock);
  2108. hp->sw_bmcr = happy_meal_tcvr_read(hp, hp->tcvregs, MII_BMCR);
  2109. hp->sw_lpa = happy_meal_tcvr_read(hp, hp->tcvregs, MII_LPA);
  2110. spin_unlock_irq(&hp->happy_lock);
  2111. if (hp->sw_bmcr & BMCR_ANENABLE) {
  2112. ecmd.autoneg = AUTONEG_ENABLE;
  2113. ecmd.speed =
  2114. (hp->sw_lpa & (LPA_100HALF | LPA_100FULL)) ?
  2115. SPEED_100 : SPEED_10;
  2116. if (ecmd.speed == SPEED_100)
  2117. ecmd.duplex =
  2118. (hp->sw_lpa & (LPA_100FULL)) ?
  2119. DUPLEX_FULL : DUPLEX_HALF;
  2120. else
  2121. ecmd.duplex =
  2122. (hp->sw_lpa & (LPA_10FULL)) ?
  2123. DUPLEX_FULL : DUPLEX_HALF;
  2124. } else {
  2125. ecmd.autoneg = AUTONEG_DISABLE;
  2126. ecmd.speed =
  2127. (hp->sw_bmcr & BMCR_SPEED100) ?
  2128. SPEED_100 : SPEED_10;
  2129. ecmd.duplex =
  2130. (hp->sw_bmcr & BMCR_FULLDPLX) ?
  2131. DUPLEX_FULL : DUPLEX_HALF;
  2132. }
  2133. if (copy_to_user(ep_user, &ecmd, sizeof(ecmd)))
  2134. return -EFAULT;
  2135. return 0;
  2136. } else if (ecmd.cmd == ETHTOOL_SSET) {
  2137. if (!capable(CAP_NET_ADMIN))
  2138. return -EPERM;
  2139. /* Verify the settings we care about. */
  2140. if (ecmd.autoneg != AUTONEG_ENABLE &&
  2141.     ecmd.autoneg != AUTONEG_DISABLE)
  2142. return -EINVAL;
  2143. if (ecmd.autoneg == AUTONEG_DISABLE &&
  2144.     ((ecmd.speed != SPEED_100 &&
  2145.       ecmd.speed != SPEED_10) ||
  2146.      (ecmd.duplex != DUPLEX_HALF &&
  2147.       ecmd.duplex != DUPLEX_FULL)))
  2148. return -EINVAL;
  2149. /* Ok, do it to it. */
  2150. spin_lock_irq(&hp->happy_lock);
  2151. del_timer(&hp->happy_timer);
  2152. happy_meal_begin_auto_negotiation(hp,
  2153.   hp->tcvregs,
  2154.   &ecmd);
  2155. spin_unlock_irq(&hp->happy_lock);
  2156. return 0;
  2157. } else
  2158. return -EOPNOTSUPP;
  2159. }
  2160. static int hme_version_printed;
  2161. #ifdef CONFIG_SBUS
  2162. void __init quattro_get_ranges(struct quattro *qp)
  2163. {
  2164. struct sbus_dev *sdev = qp->quattro_dev;
  2165. int err;
  2166. err = prom_getproperty(sdev->prom_node,
  2167.        "ranges",
  2168.        (char *)&qp->ranges[0],
  2169.        sizeof(qp->ranges));
  2170. if (err == 0 || err == -1) {
  2171. qp->nranges = 0;
  2172. return;
  2173. }
  2174. qp->nranges = (err / sizeof(struct linux_prom_ranges));
  2175. }
  2176. static void __init quattro_apply_ranges(struct quattro *qp, struct happy_meal *hp)
  2177. {
  2178. struct sbus_dev *sdev = hp->happy_dev;
  2179. int rng;
  2180. for (rng = 0; rng < qp->nranges; rng++) {
  2181. struct linux_prom_ranges *rngp = &qp->ranges[rng];
  2182. int reg;
  2183. for (reg = 0; reg < 5; reg++) {
  2184. if (sdev->reg_addrs[reg].which_io ==
  2185.     rngp->ot_child_space)
  2186. break;
  2187. }
  2188. if (reg == 5)
  2189. continue;
  2190. sdev->reg_addrs[reg].which_io = rngp->ot_parent_space;
  2191. sdev->reg_addrs[reg].phys_addr += rngp->ot_parent_base;
  2192. }
  2193. }
  2194. /* Given a happy meal sbus device, find it's quattro parent.
  2195.  * If none exist, allocate and return a new one.
  2196.  *
  2197.  * Return NULL on failure.
  2198.  */
  2199. static struct quattro * __init quattro_sbus_find(struct sbus_dev *goal_sdev)
  2200. {
  2201. struct sbus_bus *sbus;
  2202. struct sbus_dev *sdev;
  2203. struct quattro *qp;
  2204. int i;
  2205. if (qfe_sbus_list == NULL)
  2206. goto found;
  2207. for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) {
  2208. for (i = 0, sdev = qp->quattro_dev;
  2209.      (sdev != NULL) && (i < 4);
  2210.      sdev = sdev->next, i++) {
  2211. if (sdev == goal_sdev)
  2212. return qp;
  2213. }
  2214. }
  2215. for_each_sbus(sbus) {
  2216. for_each_sbusdev(sdev, sbus) {
  2217. if (sdev == goal_sdev)
  2218. goto found;
  2219. }
  2220. }
  2221. /* Cannot find quattro parent, fail. */
  2222. return NULL;
  2223. found:
  2224. qp = kmalloc(sizeof(struct quattro), GFP_KERNEL);
  2225. if (qp != NULL) {
  2226. int i;
  2227. for (i = 0; i < 4; i++)
  2228. qp->happy_meals[i] = NULL;
  2229. qp->quattro_dev = goal_sdev;
  2230. qp->next = qfe_sbus_list;
  2231. qfe_sbus_list = qp;
  2232. quattro_get_ranges(qp);
  2233. }
  2234. return qp;
  2235. }
  2236. /* After all quattro cards have been probed, we call these functions
  2237.  * to register the IRQ handlers.
  2238.  */
  2239. static void __init quattro_sbus_register_irqs(void)
  2240. {
  2241. struct quattro *qp;
  2242. for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) {
  2243. struct sbus_dev *sdev = qp->quattro_dev;
  2244. int err;
  2245. err = request_irq(sdev->irqs[0],
  2246.   quattro_sbus_interrupt,
  2247.   SA_SHIRQ, "Quattro",
  2248.   qp);
  2249. if (err != 0) {
  2250. printk(KERN_ERR "Quattro: Fatal IRQ registery error %d.n", err);
  2251. panic("QFE request irq");
  2252. }
  2253. }
  2254. }
  2255. #endif /* CONFIG_SBUS */
  2256. #ifdef CONFIG_PCI
  2257. static struct quattro * __init quattro_pci_find(struct pci_dev *pdev)
  2258. {
  2259. struct pci_dev *bdev = pdev->bus->self;
  2260. struct quattro *qp;
  2261. if (!bdev) return NULL;
  2262. for (qp = qfe_pci_list; qp != NULL; qp = qp->next) {
  2263. struct pci_dev *qpdev = qp->quattro_dev;
  2264. if (qpdev == bdev)
  2265. return qp;
  2266. }
  2267. qp = kmalloc(sizeof(struct quattro), GFP_KERNEL);
  2268. if (qp != NULL) {
  2269. int i;
  2270. for (i = 0; i < 4; i++)
  2271. qp->happy_meals[i] = NULL;
  2272. qp->quattro_dev = bdev;
  2273. qp->next = qfe_pci_list;
  2274. qfe_pci_list = qp;
  2275. /* No range tricks necessary on PCI. */
  2276. qp->nranges = 0;
  2277. }
  2278. return qp;
  2279. }
  2280. #endif /* CONFIG_PCI */
  2281. #ifdef CONFIG_SBUS
  2282. static int __init happy_meal_sbus_init(struct sbus_dev *sdev, int is_qfe)
  2283. {
  2284. struct quattro *qp = NULL;
  2285. struct happy_meal *hp;
  2286. struct net_device *dev;
  2287. int i, qfe_slot = -1;
  2288. int err = -ENODEV;
  2289. if (is_qfe) {
  2290. qp = quattro_sbus_find(sdev);
  2291. if (qp == NULL)
  2292. goto err_out;
  2293. for (qfe_slot = 0; qfe_slot < 4; qfe_slot++)
  2294. if (qp->happy_meals[qfe_slot] == NULL)
  2295. break;
  2296. if (qfe_slot == 4)
  2297. goto err_out;
  2298. }
  2299. err = -ENOMEM;
  2300. dev = alloc_etherdev(sizeof(struct happy_meal));
  2301. if (!dev)
  2302. goto err_out;
  2303. SET_MODULE_OWNER(dev);
  2304. if (hme_version_printed++ == 0)
  2305. printk(KERN_INFO "%s", version);
  2306. /* If user did not specify a MAC address specifically, use
  2307.  * the Quattro local-mac-address property...
  2308.  */
  2309. for (i = 0; i < 6; i++) {
  2310. if (macaddr[i] != 0)
  2311. break;
  2312. }
  2313. if (i < 6) { /* a mac address was given */
  2314. for (i = 0; i < 6; i++)
  2315. dev->dev_addr[i] = macaddr[i];
  2316. macaddr[5]++;
  2317. } else if (qfe_slot != -1 &&
  2318.    prom_getproplen(sdev->prom_node,
  2319.    "local-mac-address") == 6) {
  2320. prom_getproperty(sdev->prom_node, "local-mac-address",
  2321.  dev->dev_addr, 6);
  2322. } else {
  2323. memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
  2324. }
  2325. hp = dev->priv;
  2326. memset(hp, 0, sizeof(*hp));
  2327. hp->happy_dev = sdev;
  2328. spin_lock_init(&hp->happy_lock);
  2329. err = -ENODEV;
  2330. if (sdev->num_registers != 5) {
  2331. printk(KERN_ERR "happymeal: Device does not have 5 regs, it has %d.n",
  2332.        sdev->num_registers);
  2333. printk(KERN_ERR "happymeal: Would you like that for here or to go?n");
  2334. goto err_out_free_netdev;
  2335. }
  2336. if (qp != NULL) {
  2337. hp->qfe_parent = qp;
  2338. hp->qfe_ent = qfe_slot;
  2339. qp->happy_meals[qfe_slot] = dev;
  2340. quattro_apply_ranges(qp, hp);
  2341. }
  2342. hp->gregs = sbus_ioremap(&sdev->resource[0], 0,
  2343.  GREG_REG_SIZE, "HME Global Regs");
  2344. if (!hp->gregs) {
  2345. printk(KERN_ERR "happymeal: Cannot map Happy Meal global registers.n");
  2346. goto err_out_free_netdev;
  2347. }
  2348. hp->etxregs = sbus_ioremap(&sdev->resource[1], 0,
  2349.    ETX_REG_SIZE, "HME TX Regs");
  2350. if (!hp->etxregs) {
  2351. printk(KERN_ERR "happymeal: Cannot map Happy Meal MAC Transmit registers.n");
  2352. goto err_out_iounmap;
  2353. }
  2354. hp->erxregs = sbus_ioremap(&sdev->resource[2], 0,
  2355.    ERX_REG_SIZE, "HME RX Regs");
  2356. if (!hp->erxregs) {
  2357. printk(KERN_ERR "happymeal: Cannot map Happy Meal MAC Receive registers.n");
  2358. goto err_out_iounmap;
  2359. }
  2360. hp->bigmacregs = sbus_ioremap(&sdev->resource[3], 0,
  2361.       BMAC_REG_SIZE, "HME BIGMAC Regs");
  2362. if (!hp->bigmacregs) {
  2363. printk(KERN_ERR "happymeal: Cannot map Happy Meal BIGMAC registers.n");
  2364. goto err_out_iounmap;
  2365. }
  2366. hp->tcvregs = sbus_ioremap(&sdev->resource[4], 0,
  2367.    TCVR_REG_SIZE, "HME Tranceiver Regs");
  2368. if (!hp->tcvregs) {
  2369. printk(KERN_ERR "happymeal: Cannot map Happy Meal Tranceiver registers.n");
  2370. goto err_out_iounmap;
  2371. }
  2372. hp->hm_revision = prom_getintdefault(sdev->prom_node, "hm-rev", 0xff);
  2373. if (hp->hm_revision == 0xff)
  2374. hp->hm_revision = 0xa0;
  2375. /* Now enable the feature flags we can. */
  2376. if (hp->hm_revision == 0x20 || hp->hm_revision == 0x21)
  2377. hp->happy_flags = HFLAG_20_21;
  2378. else if (hp->hm_revision != 0xa0)
  2379. hp->happy_flags = HFLAG_NOT_A0;
  2380. if (qp != NULL)
  2381. hp->happy_flags |= HFLAG_QUATTRO;
  2382. /* Get the supported DVMA burst sizes from our Happy SBUS. */
  2383. hp->happy_bursts = prom_getintdefault(sdev->bus->prom_node,
  2384.       "burst-sizes", 0x00);
  2385. hp->happy_block = sbus_alloc_consistent(hp->happy_dev,
  2386. PAGE_SIZE,
  2387. &hp->hblock_dvma);
  2388. err = -ENOMEM;
  2389. if (!hp->happy_block) {
  2390. printk(KERN_ERR "happymeal: Cannot allocate descriptors.n");
  2391. goto err_out_iounmap;
  2392. }
  2393. /* Force check of the link first time we are brought up. */
  2394. hp->linkcheck = 0;
  2395. /* Force timer state to 'asleep' with count of zero. */
  2396. hp->timer_state = asleep;
  2397. hp->timer_ticks = 0;
  2398. init_timer(&hp->happy_timer);
  2399. hp->dev = dev;
  2400. dev->open = &happy_meal_open;
  2401. dev->stop = &happy_meal_close;
  2402. dev->hard_start_xmit = &happy_meal_start_xmit;
  2403. dev->get_stats = &happy_meal_get_stats;
  2404. dev->set_multicast_list = &happy_meal_set_multicast;
  2405. dev->tx_timeout = &happy_meal_tx_timeout;
  2406. dev->watchdog_timeo = 5*HZ;
  2407. dev->do_ioctl = &happy_meal_ioctl;
  2408. /* Happy Meal can do it all... */
  2409. dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
  2410. dev->irq = sdev->irqs[0];
  2411. #if defined(CONFIG_SBUS) && defined(CONFIG_PCI)
  2412. /* Hook up PCI register/dma accessors. */
  2413. hp->read_desc32 = sbus_hme_read_desc32;
  2414. hp->write_txd = sbus_hme_write_txd;
  2415. hp->write_rxd = sbus_hme_write_rxd;
  2416. hp->dma_map = (u32 (*)(void *, void *, long, int))sbus_map_single;
  2417. hp->dma_unmap = (void (*)(void *, u32, long, int))sbus_unmap_single;
  2418. hp->dma_sync = (void (*)(void *, u32, long, int))sbus_dma_sync_single;
  2419. hp->read32 = sbus_hme_read32;
  2420. hp->write32 = sbus_hme_write32;
  2421. #endif
  2422. /* Grrr, Happy Meal comes up by default not advertising
  2423.  * full duplex 100baseT capabilities, fix this.
  2424.  */
  2425. spin_lock_irq(&hp->happy_lock);
  2426. happy_meal_set_initial_advertisement(hp);
  2427. spin_unlock_irq(&hp->happy_lock);
  2428. if (register_netdev(hp->dev)) {
  2429. printk(KERN_ERR "happymeal: Cannot register net device, "
  2430.        "aborting.n");
  2431. goto err_out_free_consistent;
  2432. }
  2433. if (qfe_slot != -1)
  2434. printk(KERN_INFO "%s: Quattro HME slot %d (SBUS) 10/100baseT Ethernet ",
  2435.        dev->name, qfe_slot);
  2436. else
  2437. printk(KERN_INFO "%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet ",
  2438.        dev->name);
  2439. for (i = 0; i < 6; i++)
  2440. printk("%2.2x%c",
  2441.        dev->dev_addr[i], i == 5 ? ' ' : ':');
  2442. printk("n");
  2443. /* We are home free at this point, link us in to the happy
  2444.  * device list.
  2445.  */
  2446. hp->next_module = root_happy_dev;
  2447. root_happy_dev = hp;
  2448. return 0;
  2449. err_out_free_consistent:
  2450. sbus_free_consistent(hp->happy_dev,
  2451.      PAGE_SIZE,
  2452.      hp->happy_block,
  2453.      hp->hblock_dvma);
  2454. err_out_iounmap:
  2455. if (hp->gregs)
  2456. sbus_iounmap(hp->gregs, GREG_REG_SIZE);
  2457. if (hp->etxregs)
  2458. sbus_iounmap(hp->etxregs, ETX_REG_SIZE);
  2459. if (hp->erxregs)
  2460. sbus_iounmap(hp->erxregs, ERX_REG_SIZE);
  2461. if (hp->bigmacregs)
  2462. sbus_iounmap(hp->bigmacregs, BMAC_REG_SIZE);
  2463. if (hp->tcvregs)
  2464. sbus_iounmap(hp->tcvregs, TCVR_REG_SIZE);
  2465. err_out_free_netdev:
  2466. kfree(dev);
  2467. err_out:
  2468. return err;
  2469. }
  2470. #endif
  2471. #ifdef CONFIG_PCI
  2472. #ifndef __sparc__
  2473. static int is_quattro_p(struct pci_dev *pdev)
  2474. {
  2475. struct pci_dev *busdev = pdev->bus->self;
  2476. struct list_head *tmp;
  2477. int n_hmes;
  2478. if (busdev->vendor != PCI_VENDOR_ID_DEC ||
  2479.     busdev->device != PCI_DEVICE_ID_DEC_21153)
  2480. return 0;
  2481. n_hmes = 0;
  2482. tmp = pdev->bus->devices.next;
  2483. while (tmp != &pdev->bus->devices) {
  2484. struct pci_dev *this_pdev = pci_dev_b(tmp);
  2485. if (this_pdev->vendor == PCI_VENDOR_ID_SUN &&
  2486.     this_pdev->device == PCI_DEVICE_ID_SUN_HAPPYMEAL)
  2487. n_hmes++;
  2488. tmp = tmp->next;
  2489. }
  2490. if (n_hmes != 4)
  2491. return 0;
  2492. return 1;
  2493. }
  2494. /* Fetch MAC address from vital product data of PCI ROM. */
  2495. static void find_eth_addr_in_vpd(void *rom_base, int len, int index, unsigned char *dev_addr)
  2496. {
  2497. int this_offset;
  2498. for (this_offset = 0x20; this_offset < len; this_offset++) {
  2499. void *p = rom_base + this_offset;
  2500. if (readb(p + 0) != 0x90 ||
  2501.     readb(p + 1) != 0x00 ||
  2502.     readb(p + 2) != 0x09 ||
  2503.     readb(p + 3) != 0x4e ||
  2504.     readb(p + 4) != 0x41 ||
  2505.     readb(p + 5) != 0x06)
  2506. continue;
  2507. this_offset += 6;
  2508. p += 6;
  2509. if (index == 0) {
  2510. int i;
  2511. for (i = 0; i < 6; i++)
  2512. dev_addr[i] = readb(p + i);
  2513. break;
  2514. }
  2515. index--;
  2516. }
  2517. }
  2518. static void get_hme_mac_nonsparc(struct pci_dev *pdev, unsigned char *dev_addr)
  2519. {
  2520. u32 rom_reg_orig;
  2521. void *p;
  2522. int index;
  2523. index = 0;
  2524. if (is_quattro_p(pdev))
  2525. index = PCI_SLOT(pdev->devfn);
  2526. if (pdev->resource[PCI_ROM_RESOURCE].parent == NULL) {
  2527. if (pci_assign_resource(pdev, PCI_ROM_RESOURCE) < 0)
  2528. goto use_random;
  2529. }
  2530. pci_read_config_dword(pdev, pdev->rom_base_reg, &rom_reg_orig);
  2531. pci_write_config_dword(pdev, pdev->rom_base_reg,
  2532.        rom_reg_orig | PCI_ROM_ADDRESS_ENABLE);
  2533. p = ioremap(pci_resource_start(pdev, PCI_ROM_RESOURCE), (64 * 1024));
  2534. if (p != NULL && readb(p) == 0x55 && readb(p + 1) == 0xaa)
  2535. find_eth_addr_in_vpd(p, (64 * 1024), index, dev_addr);
  2536. if (p != NULL)
  2537. iounmap(p);
  2538. pci_write_config_dword(pdev, pdev->rom_base_reg, rom_reg_orig);
  2539. return;
  2540. use_random:
  2541. /* Sun MAC prefix then 3 random bytes. */
  2542. dev_addr[0] = 0x08;
  2543. dev_addr[1] = 0x00;
  2544. dev_addr[2] = 0x20;
  2545. get_random_bytes(dev_addr, 3);
  2546. return;
  2547. }
  2548. #endif /* !(__sparc__) */
  2549. static int __init happy_meal_pci_init(struct pci_dev *pdev)
  2550. {
  2551. struct quattro *qp = NULL;
  2552. #ifdef __sparc__
  2553. struct pcidev_cookie *pcp;
  2554. int node;
  2555. #endif
  2556. struct happy_meal *hp;
  2557. struct net_device *dev;
  2558. unsigned long hpreg_base;
  2559. int i, qfe_slot = -1;
  2560. char prom_name[64];
  2561. int err;
  2562. /* Now make sure pci_dev cookie is there. */
  2563. #ifdef __sparc__
  2564. pcp = pdev->sysdata;
  2565. if (pcp == NULL || pcp->prom_node == -1) {
  2566. printk(KERN_ERR "happymeal(PCI): Some PCI device info missingn");
  2567. return -ENODEV;
  2568. }
  2569. node = pcp->prom_node;
  2570. prom_getstring(node, "name", prom_name, sizeof(prom_name));
  2571. #else
  2572. if (is_quattro_p(pdev))
  2573. strcpy(prom_name, "SUNW,qfe");
  2574. else
  2575. strcpy(prom_name, "SUNW,hme");
  2576. #endif
  2577. err = -ENODEV;
  2578. if (!strcmp(prom_name, "SUNW,qfe") || !strcmp(prom_name, "qfe")) {
  2579. qp = quattro_pci_find(pdev);
  2580. if (qp == NULL)
  2581. goto err_out;
  2582. for (qfe_slot = 0; qfe_slot < 4; qfe_slot++)
  2583. if (qp->happy_meals[qfe_slot] == NULL)
  2584. break;
  2585. if (qfe_slot == 4)
  2586. goto err_out;
  2587. }
  2588. dev = alloc_etherdev(sizeof(struct happy_meal));
  2589. err = -ENOMEM;
  2590. if (!dev)
  2591. goto err_out;
  2592. SET_MODULE_OWNER(dev);
  2593. if (hme_version_printed++ == 0)
  2594. printk(KERN_INFO "%s", version);
  2595. dev->base_addr = (long) pdev;
  2596. hp = (struct happy_meal *)dev->priv;
  2597. memset(hp, 0, sizeof(*hp));
  2598. hp->happy_dev = pdev;
  2599. spin_lock_init(&hp->happy_lock);
  2600. if (qp != NULL) {
  2601. hp->qfe_parent = qp;
  2602. hp->qfe_ent = qfe_slot;
  2603. qp->happy_meals[qfe_slot] = dev;
  2604. }
  2605. hpreg_base = pci_resource_start(pdev, 0);
  2606. err = -ENODEV;
  2607. if ((pci_resource_flags(pdev, 0) & IORESOURCE_IO) != 0) {
  2608. printk(KERN_ERR "happymeal(PCI): Cannot find proper PCI device base address.n");
  2609. goto err_out_clear_quattro;
  2610. }
  2611. if (pci_request_regions(pdev, dev->name)) {
  2612. printk(KERN_ERR "happymeal(PCI): Cannot obtain PCI resources, "
  2613.        "aborting.n");
  2614. goto err_out_clear_quattro;
  2615. }
  2616. if ((hpreg_base = (unsigned long) ioremap(hpreg_base, 0x8000)) == 0) {
  2617. printk(KERN_ERR "happymeal(PCI): Unable to remap card memory.n");
  2618. goto err_out_free_res;
  2619. }
  2620. for (i = 0; i < 6; i++) {
  2621. if (macaddr[i] != 0)
  2622. break;
  2623. }
  2624. if (i < 6) { /* a mac address was given */
  2625. for (i = 0; i < 6; i++)
  2626. dev->dev_addr[i] = macaddr[i];
  2627. macaddr[5]++;
  2628. } else {
  2629. #ifdef __sparc__
  2630. if (qfe_slot != -1 &&
  2631.     prom_getproplen(node, "local-mac-address") == 6) {
  2632. prom_getproperty(node, "local-mac-address",
  2633.  dev->dev_addr, 6);
  2634. } else {
  2635. memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
  2636. }
  2637. #else
  2638. get_hme_mac_nonsparc(pdev, &dev->dev_addr[0]);
  2639. #endif
  2640. }
  2641. /* Layout registers. */
  2642. hp->gregs      = (hpreg_base + 0x0000UL);
  2643. hp->etxregs    = (hpreg_base + 0x2000UL);
  2644. hp->erxregs    = (hpreg_base + 0x4000UL);
  2645. hp->bigmacregs = (hpreg_base + 0x6000UL);
  2646. hp->tcvregs    = (hpreg_base + 0x7000UL);
  2647. #ifdef __sparc__
  2648. hp->hm_revision = prom_getintdefault(node, "hm-rev", 0xff);
  2649. if (hp->hm_revision == 0xff)
  2650. hp->hm_revision = 0xa0;
  2651. #else
  2652. /* works with this on non-sparc hosts */
  2653. hp->hm_revision = 0x20;
  2654. #endif
  2655. /* Now enable the feature flags we can. */
  2656. if (hp->hm_revision == 0x20 || hp->hm_revision == 0x21)
  2657. hp->happy_flags = HFLAG_20_21;
  2658. else if (hp->hm_revision != 0xa0)
  2659. hp->happy_flags = HFLAG_NOT_A0;
  2660. if (qp != NULL)
  2661. hp->happy_flags |= HFLAG_QUATTRO;
  2662. /* And of course, indicate this is PCI. */
  2663. hp->happy_flags |= HFLAG_PCI;
  2664. #ifdef __sparc__
  2665. /* Assume PCI happy meals can handle all burst sizes. */
  2666. hp->happy_bursts = DMA_BURSTBITS;
  2667. #endif
  2668. hp->happy_block = (struct hmeal_init_block *)
  2669. pci_alloc_consistent(pdev, PAGE_SIZE, &hp->hblock_dvma);
  2670. err = -ENODEV;
  2671. if (!hp->happy_block) {
  2672. printk(KERN_ERR "happymeal(PCI): Cannot get hme init block.n");
  2673. goto err_out_iounmap;
  2674. }
  2675. hp->linkcheck = 0;
  2676. hp->timer_state = asleep;
  2677. hp->timer_ticks = 0;
  2678. init_timer(&hp->happy_timer);
  2679. hp->dev = dev;
  2680. dev->open = &happy_meal_open;
  2681. dev->stop = &happy_meal_close;
  2682. dev->hard_start_xmit = &happy_meal_start_xmit;
  2683. dev->get_stats = &happy_meal_get_stats;
  2684. dev->set_multicast_list = &happy_meal_set_multicast;
  2685. dev->tx_timeout = &happy_meal_tx_timeout;
  2686. dev->watchdog_timeo = 5*HZ;
  2687. dev->do_ioctl = &happy_meal_ioctl;
  2688. dev->irq = pdev->irq;
  2689. dev->dma = 0;
  2690. /* Happy Meal can do it all... */
  2691. dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
  2692. #if defined(CONFIG_SBUS) && defined(CONFIG_PCI)
  2693. /* Hook up PCI register/dma accessors. */
  2694. hp->read_desc32 = pci_hme_read_desc32;
  2695. hp->write_txd = pci_hme_write_txd;
  2696. hp->write_rxd = pci_hme_write_rxd;
  2697. hp->dma_map = (u32 (*)(void *, void *, long, int))pci_map_single;
  2698. hp->dma_unmap = (void (*)(void *, u32, long, int))pci_unmap_single;
  2699. hp->dma_sync = (void (*)(void *, u32, long, int))pci_dma_sync_single;
  2700. hp->read32 = pci_hme_read32;
  2701. hp->write32 = pci_hme_write32;
  2702. #endif
  2703. /* Grrr, Happy Meal comes up by default not advertising
  2704.  * full duplex 100baseT capabilities, fix this.
  2705.  */
  2706. spin_lock_irq(&hp->happy_lock);
  2707. happy_meal_set_initial_advertisement(hp);
  2708. spin_unlock_irq(&hp->happy_lock);
  2709. if (register_netdev(hp->dev)) {
  2710. printk(KERN_ERR "happymeal(PCI): Cannot register net device, "
  2711.        "aborting.n");
  2712. goto err_out_iounmap;
  2713. }
  2714. if (!qfe_slot) {
  2715. struct pci_dev *qpdev = qp->quattro_dev;
  2716. prom_name[0] = 0;
  2717. if (!strncmp(dev->name, "eth", 3)) {
  2718. int i = simple_strtoul(dev->name + 3, NULL, 10);
  2719. sprintf(prom_name, "-%d", i + 3);
  2720. }
  2721. printk(KERN_INFO "%s%s: Quattro HME (PCI/CheerIO) 10/100baseT Ethernet ", dev->name, prom_name);
  2722. if (qpdev->vendor == PCI_VENDOR_ID_DEC &&
  2723.     qpdev->device == PCI_DEVICE_ID_DEC_21153)
  2724. printk("DEC 21153 PCI Bridgen");
  2725. else
  2726. printk("unknown bridge %04x.%04xn", 
  2727. qpdev->vendor, qpdev->device);
  2728. }
  2729. if (qfe_slot != -1)
  2730. printk(KERN_INFO "%s: Quattro HME slot %d (PCI/CheerIO) 10/100baseT Ethernet ",
  2731.        dev->name, qfe_slot);
  2732. else
  2733. printk(KERN_INFO "%s: HAPPY MEAL (PCI/CheerIO) 10/100BaseT Ethernet ",
  2734.        dev->name);
  2735. for (i = 0; i < 6; i++)
  2736. printk("%2.2x%c", dev->dev_addr[i], i == 5 ? ' ' : ':');
  2737. printk("n");
  2738. /* We are home free at this point, link us in to the happy
  2739.  * device list.
  2740.  */
  2741. hp->next_module = root_happy_dev;
  2742. root_happy_dev = hp;
  2743. return 0;
  2744. err_out_iounmap:
  2745. iounmap((void *)hp->gregs);
  2746. err_out_free_res:
  2747. pci_release_regions(pdev);
  2748. err_out_clear_quattro:
  2749. if (qp != NULL)
  2750. qp->happy_meals[qfe_slot] = NULL;
  2751. kfree(dev);
  2752. err_out:
  2753. return err;
  2754. }
  2755. #endif
  2756. #ifdef CONFIG_SBUS
  2757. static int __init happy_meal_sbus_probe(void)
  2758. {
  2759. struct sbus_bus *sbus;
  2760. struct sbus_dev *sdev;
  2761. int cards = 0;
  2762. char model[128];
  2763. for_each_sbus(sbus) {
  2764. for_each_sbusdev(sdev, sbus) {
  2765. char *name = sdev->prom_name;
  2766. if (!strcmp(name, "SUNW,hme")) {
  2767. cards++;
  2768. prom_getstring(sdev->prom_node, "model",
  2769.        model, sizeof(model));
  2770. if (!strcmp(model, "SUNW,sbus-qfe"))
  2771. happy_meal_sbus_init(sdev, 1);
  2772. else
  2773. happy_meal_sbus_init(sdev, 0);
  2774. } else if (!strcmp(name, "qfe") ||
  2775.    !strcmp(name, "SUNW,qfe")) {
  2776. cards++;
  2777. happy_meal_sbus_init(sdev, 1);
  2778. }
  2779. }
  2780. }
  2781. if (cards != 0)
  2782. quattro_sbus_register_irqs();
  2783. return cards;
  2784. }
  2785. #endif
  2786. #ifdef CONFIG_PCI
  2787. static int __init happy_meal_pci_probe(void)
  2788. {
  2789. struct pci_dev *pdev = NULL;
  2790. int cards = 0;
  2791. while ((pdev = pci_find_device(PCI_VENDOR_ID_SUN,
  2792.        PCI_DEVICE_ID_SUN_HAPPYMEAL, pdev)) != NULL) {
  2793. if (pci_enable_device(pdev))
  2794. continue;
  2795. pci_set_master(pdev);
  2796. cards++;
  2797. happy_meal_pci_init(pdev);
  2798. }
  2799. return cards;
  2800. }
  2801. #endif
  2802. static int __init happy_meal_probe(void)
  2803. {
  2804. static int called = 0;
  2805. int cards;
  2806. root_happy_dev = NULL;
  2807. if (called)
  2808. return -ENODEV;
  2809. called++;
  2810. cards = 0;
  2811. #ifdef CONFIG_SBUS
  2812. cards += happy_meal_sbus_probe();
  2813. #endif
  2814. #ifdef CONFIG_PCI
  2815. cards += happy_meal_pci_probe();
  2816. #endif
  2817. if (!cards)
  2818. return -ENODEV;
  2819. return 0;
  2820. }
  2821. static void __exit happy_meal_cleanup_module(void)
  2822. {
  2823. #ifdef CONFIG_SBUS
  2824. struct quattro *last_seen_qfe = NULL;
  2825. #endif
  2826. while (root_happy_dev) {
  2827. struct happy_meal *hp = root_happy_dev;
  2828. struct happy_meal *next = root_happy_dev->next_module;
  2829. struct net_device *dev = hp->dev;
  2830. /* Unregister netdev before unmapping registers as this
  2831.  * call can end up trying to access those registers.
  2832.  */
  2833. unregister_netdev(dev);
  2834. #ifdef CONFIG_SBUS
  2835. if (!(hp->happy_flags & HFLAG_PCI)) {
  2836. if (hp->happy_flags & HFLAG_QUATTRO) {
  2837. if (hp->qfe_parent != last_seen_qfe) {
  2838. free_irq(dev->irq, hp->qfe_parent);
  2839. last_seen_qfe = hp->qfe_parent;
  2840. }
  2841. }
  2842. sbus_iounmap(hp->gregs, GREG_REG_SIZE);
  2843. sbus_iounmap(hp->etxregs, ETX_REG_SIZE);
  2844. sbus_iounmap(hp->erxregs, ERX_REG_SIZE);
  2845. sbus_iounmap(hp->bigmacregs, BMAC_REG_SIZE);
  2846. sbus_iounmap(hp->tcvregs, TCVR_REG_SIZE);
  2847. sbus_free_consistent(hp->happy_dev,
  2848.      PAGE_SIZE,
  2849.      hp->happy_block,
  2850.      hp->hblock_dvma);
  2851. }
  2852. #endif
  2853. #ifdef CONFIG_PCI
  2854. if ((hp->happy_flags & HFLAG_PCI)) {
  2855. pci_free_consistent(hp->happy_dev,
  2856.     PAGE_SIZE,
  2857.     hp->happy_block,
  2858.     hp->hblock_dvma);
  2859. iounmap((void *)hp->gregs);
  2860. pci_release_regions(hp->happy_dev);
  2861. }
  2862. #endif
  2863. kfree(dev);
  2864. root_happy_dev = next;
  2865. }
  2866. /* Now cleanup the quattro lists. */
  2867. #ifdef CONFIG_SBUS
  2868. while (qfe_sbus_list) {
  2869. struct quattro *qfe = qfe_sbus_list;
  2870. struct quattro *next = qfe->next;
  2871. kfree(qfe);
  2872. qfe_sbus_list = next;
  2873. }
  2874. #endif
  2875. #ifdef CONFIG_PCI
  2876. while (qfe_pci_list) {
  2877. struct quattro *qfe = qfe_pci_list;
  2878. struct quattro *next = qfe->next;
  2879. kfree(qfe);
  2880. qfe_pci_list = next;
  2881. }
  2882. #endif
  2883. }
  2884. module_init(happy_meal_probe);
  2885. module_exit(happy_meal_cleanup_module);