#ifndef CONFIG_SH_HICOSH4 /* uses irq#1, so this won't work */ 
#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX0105) /* uses irq#1, so this won't work */ 
net_open(struct net_device *dev){	struct net_local *lp = netdev_priv(dev);	int result = 0;	int i;	int ret;#ifndef CONFIG_SH_HICOSH4 /* uses irq#1, so this won't work */	if (dev->irq < 2) {		/* Allow interrupts to be generated by the chip *//* Cirrus' release had this: */#if 0		writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );#endif/* And 2.3.47 had this: */		writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);		for (i = 2; i < CS8920_NO_INTS; i++) {			if ((1 << i) & lp->irq_map) {				if (request_irq(i, net_interrupt, 0, dev->name, dev) == 0) {					dev->irq = i;					write_irq(dev, lp->chip_type, i);					/* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */					break;				}			}		}		if (i >= CS8920_NO_INTS) {			writereg(dev, PP_BusCTL, 0);	/* disable interrupts. */			printk(KERN_ERR "cs89x0: can't get an interrupt\n");			ret = -EAGAIN;			goto bad_out;		}	}	else#endif	{#ifndef CONFIG_ARCH_IXDP2X01		if (((1 << dev->irq) & lp->irq_map) == 0) {			printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",                               dev->name, dev->irq, lp->irq_map);			ret = -EAGAIN;			goto bad_out;		}#endif/* FIXME: Cirrus' release had this: */		writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );/* And 2.3.47 had this: */#if 0		writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);#endif		write_irq(dev, lp->chip_type, dev->irq);		ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);		if (ret) {			if (net_debug)				printk(KERN_DEBUG "cs89x0: request_irq(%d) failed\n", dev->irq);			goto bad_out;		}	}#if ALLOW_DMA	if (lp->use_dma) {		if (lp->isa_config & ANY_ISA_DMA) {			unsigned long flags;			lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,							get_order(lp->dmasize * 1024));			if (!lp->dma_buff) {				printk(KERN_ERR "%s: cannot get %dK memory for DMA\n", dev->name, lp->dmasize);				goto release_irq;			}			if (net_debug > 1) {				printk(	"%s: dma %lx %lx\n",					dev->name,					(unsigned long)lp->dma_buff,					(unsigned long)isa_virt_to_bus(lp->dma_buff));			}			if ((unsigned long) lp->dma_buff >= MAX_DMA_ADDRESS ||			    !dma_page_eq(lp->dma_buff, lp->dma_buff+lp->dmasize*1024-1)) {				printk(KERN_ERR "%s: not usable as DMA buffer\n", dev->name);				goto release_irq;			}			memset(lp->dma_buff, 0, lp->dmasize * 1024);	/* Why? */			if (request_dma(dev->dma, dev->name)) {				printk(KERN_ERR "%s: cannot get dma channel %d\n", dev->name, dev->dma);				goto release_irq;			}			write_dma(dev, lp->chip_type, dev->dma);			lp->rx_dma_ptr = lp->dma_buff;			lp->end_dma_buff = lp->dma_buff + lp->dmasize*1024;			spin_lock_irqsave(&lp->lock, flags);			disable_dma(dev->dma);			clear_dma_ff(dev->dma);			set_dma_mode(dev->dma, 0x14); /* auto_init as well */			set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));			set_dma_count(dev->dma, lp->dmasize*1024);			enable_dma(dev->dma);			spin_unlock_irqrestore(&lp->lock, flags);		}	}#endif	/* ALLOW_DMA */	/* set the Ethernet address */	for (i=0; i < ETH_ALEN/2; i++)		writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));	/* while we're testing the interface, leave interrupts disabled */	writereg(dev, PP_BusCTL, MEMORY_ON);	/* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */	if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) && (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))                lp->linectl = LOW_RX_SQUELCH;	else                lp->linectl = 0;        /* check to make sure that they have the "right" hardware available */	switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {	case A_CNF_MEDIA_10B_T: result = lp->adapter_cnf & A_CNF_10B_T; break;	case A_CNF_MEDIA_AUI:   result = lp->adapter_cnf & A_CNF_AUI; break;	case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;        default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);        }        if (!result) {                printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name);        release_irq:#if ALLOW_DMA		release_dma_buff(lp);#endif                writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));                free_irq(dev->irq, dev);		ret = -EAGAIN;		goto bad_out;	}        /* set the hardware to the configured choice */	switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {	case A_CNF_MEDIA_10B_T:                result = detect_tp(dev);                if (result==DETECTED_NONE) {                        printk(KERN_WARNING "%s: 10Base-T (RJ-45) has no cable\n", dev->name);                        if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */                                result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */                }		break;	case A_CNF_MEDIA_AUI:                result = detect_aui(dev);                if (result==DETECTED_NONE) {                        printk(KERN_WARNING "%s: 10Base-5 (AUI) has no cable\n", dev->name);                        if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */                                result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */                }		break;	case A_CNF_MEDIA_10B_2:                result = detect_bnc(dev);                if (result==DETECTED_NONE) {                        printk(KERN_WARNING "%s: 10Base-2 (BNC) has no cable\n", dev->name);                        if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */                                result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */                }		break;	case A_CNF_MEDIA_AUTO:		writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);		if (lp->adapter_cnf & A_CNF_10B_T)			if ((result = detect_tp(dev)) != DETECTED_NONE)				break;		if (lp->adapter_cnf & A_CNF_AUI)			if ((result = detect_aui(dev)) != DETECTED_NONE)				break;		if (lp->adapter_cnf & A_CNF_10B_2)			if ((result = detect_bnc(dev)) != DETECTED_NONE)				break;		printk(KERN_ERR "%s: no media detected\n", dev->name);                goto release_irq;	}	switch(result) {	case DETECTED_NONE:		printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name);                goto release_irq;	case DETECTED_RJ45H:		printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);		break;	case DETECTED_RJ45F:		printk(KERN_INFO "%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);		break;	case DETECTED_AUI:		printk(KERN_INFO "%s: using 10Base-5 (AUI)\n", dev->name);		break;	case DETECTED_BNC:		printk(KERN_INFO "%s: using 10Base-2 (BNC)\n", dev->name);		break;	}	/* Turn on both receive and transmit operations */	writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);	/* Receive only error free packets addressed to this card */	lp->rx_mode = 0;	writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);	lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;	if (lp->isa_config & STREAM_TRANSFER)		lp->curr_rx_cfg |= RX_STREAM_ENBL;#if ALLOW_DMA	set_dma_cfg(dev);#endif	writereg(dev, PP_RxCFG, lp->curr_rx_cfg);	writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |		TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL | TX_16_COL_ENBL);	writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL |#if ALLOW_DMA		dma_bufcfg(dev) |#endif		TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL);	/* now that we've got our act together, enable everything */	writereg(dev, PP_BusCTL, ENABLE_IRQ		 | (dev->mem_start?MEMORY_ON : 0) /* turn memory on */#if ALLOW_DMA		 | dma_busctl(dev)#endif                 );        netif_start_queue(dev);	if (net_debug > 1)		printk("cs89x0: net_open() succeeded\n");	return 0;bad_out:	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0dd3c7814750adc58ed3e7b79e1943a14a790db6/cs89x0.c/clean/drivers/net/cs89x0.c