sonic_free_irq(dev->irq, dev);	/* release the IRQ */ 
/* unmap and free skbs that haven't been transmitted */ for (i = 0; i < SONIC_NUM_TDS; i++) { if(lp->tx_laddr[i]) { dma_unmap_single(lp->device, lp->tx_laddr[i], lp->tx_len[i], DMA_TO_DEVICE); lp->tx_laddr[i] = (dma_addr_t)0; } if(lp->tx_skb[i]) { dev_kfree_skb(lp->tx_skb[i]); lp->tx_skb[i] = NULL; } }  /* unmap and free the receive buffers */ for (i = 0; i < SONIC_NUM_RRS; i++) { if(lp->rx_laddr[i]) { dma_unmap_single(lp->device, lp->rx_laddr[i], SONIC_RBSIZE, DMA_FROM_DEVICE); lp->rx_laddr[i] = (dma_addr_t)0; } if(lp->rx_skb[i]) { dev_kfree_skb(lp->rx_skb[i]); lp->rx_skb[i] = NULL; } }  free_irq(dev->irq, dev);	/* release the IRQ */ 
static int sonic_close(struct net_device *dev){	unsigned int base_addr = dev->base_addr;	if (sonic_debug > 2)		printk("sonic_close\n");	netif_stop_queue(dev);	/*	 * stop the SONIC, disable interrupts	 */	SONIC_WRITE(SONIC_ISR, 0x7fff);	SONIC_WRITE(SONIC_IMR, 0);	SONIC_WRITE(SONIC_CMD, SONIC_CR_RST);	sonic_free_irq(dev->irq, dev);	/* release the IRQ */	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/efcce839360fb3a7b6dedeacaec80f68b0f2d052/sonic.c/clean/drivers/net/sonic.c