out1: free_irq(dev->irq, dev); 
static int __init hp_probe1(struct net_device *dev, int ioaddr){	int i, retval, board_id, wordmode;	const char *name;	static unsigned version_printed;	if (!request_region(ioaddr, HP_IO_EXTENT, DRV_NAME))		return -EBUSY;	/* Check for the HP physical address, 08 00 09 xx xx xx. */	/* This really isn't good enough: we may pick up HP LANCE boards	   also!  Avoid the lance 0x5757 signature. */	if (inb(ioaddr) != 0x08		|| inb(ioaddr+1) != 0x00		|| inb(ioaddr+2) != 0x09		|| inb(ioaddr+14) == 0x57) {		retval = -ENODEV;		goto out;	}	/* Set up the parameters based on the board ID.	   If you have additional mappings, please mail them to me -djb. */	if ((board_id = inb(ioaddr + HP_ID)) & 0x80) {		name = "HP27247";		wordmode = 1;	} else {		name = "HP27250";		wordmode = 0;	}	if (ei_debug  &&  version_printed++ == 0)		printk(version);	printk("%s: %s (ID %02x) at %#3x,", dev->name, name, board_id, ioaddr);	for(i = 0; i < ETHER_ADDR_LEN; i++)		printk(" %2.2x", dev->dev_addr[i] = inb(ioaddr + i));	/* Snarf the interrupt now.  Someday this could be moved to open(). */	if (dev->irq < 2) {		int irq_16list[] = { 11, 10, 5, 3, 4, 7, 9, 0};		int irq_8list[] = { 7, 5, 3, 4, 9, 0};		int *irqp = wordmode ? irq_16list : irq_8list;		do {			int irq = *irqp;			if (request_irq (irq, NULL, 0, "bogus", NULL) != -EBUSY) {				unsigned long cookie = probe_irq_on();				/* Twinkle the interrupt, and check if it's seen. */				outb_p(irqmap[irq] | HP_RUN, ioaddr + HP_CONFIGURE);				outb_p( 0x00 | HP_RUN, ioaddr + HP_CONFIGURE);				if (irq == probe_irq_off(cookie)		 /* It's a good IRQ line! */					&& request_irq (irq, ei_interrupt, 0, DRV_NAME, dev) == 0) {					printk(" selecting IRQ %d.\n", irq);					dev->irq = *irqp;					break;				}			}		} while (*++irqp);		if (*irqp == 0) {			printk(" no free IRQ lines.\n");			retval = -EBUSY;			goto out;		}	} else {		if (dev->irq == 2)			dev->irq = 9;		if ((retval = request_irq(dev->irq, ei_interrupt, 0, DRV_NAME, dev))) {			printk (" unable to get IRQ %d.\n", dev->irq);			goto out;		}	}	/* Set the base address to point to the NIC, not the "real" base! */	dev->base_addr = ioaddr + NIC_OFFSET;	dev->open = &hp_open;	dev->stop = &hp_close;#ifdef CONFIG_NET_POLL_CONTROLLER	dev->poll_controller = ei_poll;#endif	ei_status.name = name;	ei_status.word16 = wordmode;	ei_status.tx_start_page = HP_START_PG;	ei_status.rx_start_page = HP_START_PG + TX_PAGES;	ei_status.stop_page = wordmode ? HP_16BSTOP_PG : HP_8BSTOP_PG;	ei_status.reset_8390 = &hp_reset_8390;	ei_status.get_8390_hdr = &hp_get_8390_hdr;	ei_status.block_input = &hp_block_input;	ei_status.block_output = &hp_block_output;	hp_init_card(dev);	return 0;out:	release_region(ioaddr, HP_IO_EXTENT);	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b1fc5505e0dbcc3fd7c75bfe6bee39ec50080963/hp.c/clean/drivers/net/hp.c