sonic_write(dev, SONIC_ISR,0x7fff); sonic_write(dev, SONIC_IMR,0); 
SONIC_WRITE(SONIC_IMR, 0); SONIC_WRITE(SONIC_ISR, 0x7fff); 
int __init mac_onboard_sonic_probe(struct net_device* dev){	/* Bwahahaha */	static int once_is_more_than_enough;	int i;	int dma_bitmode;		if (once_is_more_than_enough)		return -ENODEV;	once_is_more_than_enough = 1;	if (!MACH_IS_MAC)		return -ENODEV;	printk(KERN_INFO "Checking for internal Macintosh ethernet (SONIC).. ");	if (macintosh_config->ether_type != MAC_ETHER_SONIC)	{		printk("none.\n");		return -ENODEV;	}	/* Bogus probing, on the models which may or may not have	   Ethernet (BTW, the Ethernet *is* always at the same	   address, and nothing else lives there, at least if Apple's	   documentation is to be believed) */	if (macintosh_config->ident == MAC_MODEL_Q630 ||	    macintosh_config->ident == MAC_MODEL_P588 ||	    macintosh_config->ident == MAC_MODEL_C610) {		unsigned long flags;		int card_present;		local_irq_save(flags);		card_present = hwreg_present((void*)ONBOARD_SONIC_REGISTERS);		local_irq_restore(flags);		if (!card_present) {			printk("none.\n");			return -ENODEV;		}	}	printk("yes\n");		/* Danger!  My arms are flailing wildly!  You *must* set this           before using sonic_read() */	dev->base_addr = ONBOARD_SONIC_REGISTERS;	if (via_alt_mapping)		dev->irq = IRQ_AUTO_3;	else		dev->irq = IRQ_NUBUS_9;	if (!sonic_version_printed) {		printk(KERN_INFO "%s", version);		sonic_version_printed = 1;	}	printk(KERN_INFO "%s: onboard / comm-slot SONIC at 0x%08lx\n",	       dev->name, dev->base_addr);	/* Now do a song and dance routine in an attempt to determine           the bus width */	/* The PowerBook's SONIC is 16 bit always. */	if (macintosh_config->ident == MAC_MODEL_PB520) {		reg_offset = 0;		dma_bitmode = 0;	} else if (macintosh_config->ident == MAC_MODEL_C610) {		reg_offset = 0;		dma_bitmode = 1;	} else {		/* Some of the comm-slot cards are 16 bit.  But some                   of them are not.  The 32-bit cards use offset 2 and                   pad with zeroes or sometimes ones (I think...)                   Therefore, if we try offset 0 and get a silicon                   revision of 0, we assume 16 bit. */		int sr;		/* Technically this is not necessary since we zeroed                   it above */		reg_offset = 0;		dma_bitmode = 0;		sr = sonic_read(dev, SONIC_SR);		if (sr == 0 || sr == 0xffff) {			reg_offset = 2;			/* 83932 is 0x0004, 83934 is 0x0100 or 0x0101 */			sr = sonic_read(dev, SONIC_SR);			dma_bitmode = 1;					}		printk(KERN_INFO		       "%s: revision 0x%04x, using %d bit DMA and register offset %d\n",		       dev->name, sr, dma_bitmode?32:16, reg_offset);	}		/* this carries my sincere apologies -- by the time I got to updating	   the driver, support for "reg_offsets" appeares nowhere in the sonic	   code, going back for over a year.  Fortunately, my Mac does't seem	   to use whatever this was.	   If you know how this is supposed to be implemented, either fix it,	   or contact me (sammy@oh.verio.com) to explain what it is. --Sam */	   	if(reg_offset) {		printk("%s: register offset unsupported.  please fix this if you know what it is.\n", dev->name);		return -ENODEV;	}		/* Software reset, then initialize control registers. */	sonic_write(dev, SONIC_CMD, SONIC_CR_RST);	sonic_write(dev, SONIC_DCR, SONIC_DCR_BMS |		    SONIC_DCR_RFT1 | SONIC_DCR_TFT0 | SONIC_DCR_EXBUS |		    (dma_bitmode ? SONIC_DCR_DW : 0));	/* This *must* be written back to in order to restore the           extended programmable output bits */	sonic_write(dev, SONIC_DCR2, 0);	/* Clear *and* disable interrupts to be on the safe side */	sonic_write(dev, SONIC_ISR,0x7fff);	sonic_write(dev, SONIC_IMR,0);	/* Now look for the MAC address. */	if (mac_onboard_sonic_ethernet_addr(dev) != 0)		return -ENODEV;	printk(KERN_INFO "MAC ");	for (i = 0; i < 6; i++) {		printk("%2.2x", dev->dev_addr[i]);		if (i < 5)			printk(":");	}	printk(" IRQ %d\n", dev->irq);	/* Shared init code */	return macsonic_init(dev);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/efcce839360fb3a7b6dedeacaec80f68b0f2d052/macsonic.c/clean/drivers/net/macsonic.c