cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sunhme.c (93309B)


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