Commit b54885f9 authored by Jeff Garzik's avatar Jeff Garzik

Merge redhat.com:/spare/repo/netdev-2.6/acenic

into redhat.com:/spare/repo/net-drivers-2.6
parents 393ce840 1906bc68
...@@ -131,7 +131,6 @@ ...@@ -131,7 +131,6 @@
#define PCI_DEVICE_ID_SGI_ACENIC 0x0009 #define PCI_DEVICE_ID_SGI_ACENIC 0x0009
#endif #endif
#if LINUX_VERSION_CODE >= 0x20400
static struct pci_device_id acenic_pci_tbl[] = { static struct pci_device_id acenic_pci_tbl[] = {
{ PCI_VENDOR_ID_ALTEON, PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE, { PCI_VENDOR_ID_ALTEON, PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE,
PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, }, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
...@@ -156,37 +155,6 @@ static struct pci_device_id acenic_pci_tbl[] = { ...@@ -156,37 +155,6 @@ static struct pci_device_id acenic_pci_tbl[] = {
{ } { }
}; };
MODULE_DEVICE_TABLE(pci, acenic_pci_tbl); MODULE_DEVICE_TABLE(pci, acenic_pci_tbl);
#endif
#ifndef MODULE_LICENSE
#define MODULE_LICENSE(a)
#endif
#ifndef wmb
#define wmb() mb()
#endif
#ifndef __exit
#define __exit
#endif
#ifndef __devinit
#define __devinit __init
#endif
#ifndef SMP_CACHE_BYTES
#define SMP_CACHE_BYTES L1_CACHE_BYTES
#endif
#ifndef SET_MODULE_OWNER
#define SET_MODULE_OWNER(dev) do{} while(0)
#define ACE_MOD_INC_USE_COUNT MOD_INC_USE_COUNT
#define ACE_MOD_DEC_USE_COUNT MOD_DEC_USE_COUNT
#else
#define ACE_MOD_INC_USE_COUNT do{} while(0)
#define ACE_MOD_DEC_USE_COUNT do{} while(0)
#endif
#ifndef SET_NETDEV_DEV #ifndef SET_NETDEV_DEV
#define SET_NETDEV_DEV(net, pdev) do{} while(0) #define SET_NETDEV_DEV(net, pdev) do{} while(0)
...@@ -198,151 +166,8 @@ MODULE_DEVICE_TABLE(pci, acenic_pci_tbl); ...@@ -198,151 +166,8 @@ MODULE_DEVICE_TABLE(pci, acenic_pci_tbl);
#define ace_sync_irq(irq) synchronize_irq() #define ace_sync_irq(irq) synchronize_irq()
#endif #endif
#if LINUX_VERSION_CODE < 0x2051e #ifndef offset_in_page
#define local_irq_save(flags) do{__save_flags(flags) ; \ #define offset_in_page(ptr) ((unsigned long)(ptr) & ~PAGE_MASK)
__cli();} while(0)
#define local_irq_restore(flags) __restore_flags(flags)
#endif
#if (LINUX_VERSION_CODE < 0x02030d)
#define pci_resource_start(dev, bar) dev->base_address[bar]
#elif (LINUX_VERSION_CODE < 0x02032c)
#define pci_resource_start(dev, bar) dev->resource[bar].start
#endif
#if (LINUX_VERSION_CODE < 0x02030e)
#define net_device device
#endif
#if (LINUX_VERSION_CODE < 0x02032a)
typedef u32 dma_addr_t;
static inline void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
dma_addr_t *dma_handle)
{
void *virt_ptr;
virt_ptr = kmalloc(size, GFP_KERNEL);
if (!virt_ptr)
return NULL;
*dma_handle = virt_to_bus(virt_ptr);
return virt_ptr;
}
#define pci_free_consistent(cookie, size, ptr, dma_ptr) kfree(ptr)
#define pci_map_page(cookie, page, off, size, dir) \
virt_to_bus(page_address(page)+(off))
#define pci_unmap_page(cookie, address, size, dir)
#define pci_set_dma_mask(dev, mask) \
(((u64)(mask) & 0xffffffff00000000) == 0 ? 0 : -EIO)
#define pci_dma_supported(dev, mask) \
(((u64)(mask) & 0xffffffff00000000) == 0 ? 1 : 0)
#elif (LINUX_VERSION_CODE < 0x02040d)
/*
* 2.4.13 introduced pci_map_page()/pci_unmap_page() - for 2.4.12 and prior,
* fall back on pci_map_single()/pci_unnmap_single().
*
* We are guaranteed that the page is mapped at this point since
* pci_map_page() is only used upon valid struct skb's.
*/
static inline dma_addr_t
pci_map_page(struct pci_dev *cookie, struct page *page, unsigned long off,
size_t size, int dir)
{
void *page_virt;
page_virt = page_address(page);
if (!page_virt)
BUG();
return pci_map_single(cookie, (page_virt + off), size, dir);
}
#define pci_unmap_page(cookie, dma_addr, size, dir) \
pci_unmap_single(cookie, dma_addr, size, dir)
#endif
#if (LINUX_VERSION_CODE < 0x020412)
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
#define pci_unmap_addr(PTR, ADDR_NAME) 0
#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do{} while(0)
#define pci_unmap_len(PTR, LEN_NAME) 0
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do{} while(0)
#endif
#if (LINUX_VERSION_CODE < 0x02032b)
/*
* SoftNet
*
* For pre-softnet kernels we need to tell the upper layer not to
* re-enter start_xmit() while we are in there. However softnet
* guarantees not to enter while we are in there so there is no need
* to do the netif_stop_queue() dance unless the transmit queue really
* gets stuck. This should also improve performance according to tests
* done by Aman Singla.
*/
#define dev_kfree_skb_irq(a) dev_kfree_skb(a)
#define netif_wake_queue(dev) clear_bit(0, &dev->tbusy)
#define netif_stop_queue(dev) set_bit(0, &dev->tbusy)
#define late_stop_netif_stop_queue(dev) do{} while(0)
#define early_stop_netif_stop_queue(dev) test_and_set_bit(0,&dev->tbusy)
#define early_stop_netif_wake_queue(dev) netif_wake_queue(dev)
static inline void netif_start_queue(struct net_device *dev)
{
dev->tbusy = 0;
dev->interrupt = 0;
dev->start = 1;
}
#define ace_mark_net_bh() mark_bh(NET_BH)
#define netif_queue_stopped(dev) dev->tbusy
#define netif_running(dev) dev->start
#define ace_if_down(dev) do{dev->start = 0;} while(0)
#define tasklet_struct tq_struct
static inline void tasklet_schedule(struct tasklet_struct *tasklet)
{
queue_task(tasklet, &tq_immediate);
mark_bh(IMMEDIATE_BH);
}
static inline void tasklet_init(struct tasklet_struct *tasklet,
void (*func)(unsigned long),
unsigned long data)
{
tasklet->next = NULL;
tasklet->sync = 0;
tasklet->routine = (void (*)(void *))func;
tasklet->data = (void *)data;
}
#define tasklet_kill(tasklet) do{} while(0)
#else
#define late_stop_netif_stop_queue(dev) netif_stop_queue(dev)
#define early_stop_netif_stop_queue(dev) 0
#define early_stop_netif_wake_queue(dev) do{} while(0)
#define ace_mark_net_bh() do{} while(0)
#define ace_if_down(dev) do{} while(0)
#endif
#if (LINUX_VERSION_CODE >= 0x02031b)
#define NEW_NETINIT
#define ACE_PROBE_ARG void
#else
#define ACE_PROBE_ARG struct net_device *dev
#endif
#ifndef min_t
#define min_t(type,a,b) (((a)<(b))?(a):(b))
#endif
#ifndef ARCH_HAS_PREFETCHW
#ifndef prefetchw
#define prefetchw(x) do{} while(0)
#endif
#endif #endif
#define ACE_MAX_MOD_PARMS 8 #define ACE_MAX_MOD_PARMS 8
...@@ -595,58 +420,41 @@ static int max_rx_desc[ACE_MAX_MOD_PARMS]; ...@@ -595,58 +420,41 @@ static int max_rx_desc[ACE_MAX_MOD_PARMS];
static int tx_ratio[ACE_MAX_MOD_PARMS]; static int tx_ratio[ACE_MAX_MOD_PARMS];
static int dis_pci_mem_inval[ACE_MAX_MOD_PARMS] = {1, 1, 1, 1, 1, 1, 1, 1}; static int dis_pci_mem_inval[ACE_MAX_MOD_PARMS] = {1, 1, 1, 1, 1, 1, 1, 1};
MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver");
MODULE_PARM(link, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(trace, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(tx_coal_tick, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(max_tx_desc, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(rx_coal_tick, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(max_rx_desc, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(tx_ratio, "1-" __MODULE_STRING(8) "i");
MODULE_PARM_DESC(link, "AceNIC/3C985/NetGear link state");
MODULE_PARM_DESC(trace, "AceNIC/3C985/NetGear firmware trace level");
MODULE_PARM_DESC(tx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first tx descriptor arrives");
MODULE_PARM_DESC(max_tx_desc, "AceNIC/3C985/GA620 max number of transmit descriptors to wait");
MODULE_PARM_DESC(rx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first rx descriptor arrives");
MODULE_PARM_DESC(max_rx_desc, "AceNIC/3C985/GA620 max number of receive descriptors to wait");
MODULE_PARM_DESC(tx_ratio, "AceNIC/3C985/GA620 ratio of NIC memory used for TX/RX descriptors (range 0-63)");
static char version[] __initdata = static char version[] __initdata =
"acenic.c: v0.92 08/05/2002 Jes Sorensen, linux-acenic@SunSITE.dk\n" "acenic.c: v0.92 08/05/2002 Jes Sorensen, linux-acenic@SunSITE.dk\n"
" http://home.cern.ch/~jes/gige/acenic.html\n"; " http://home.cern.ch/~jes/gige/acenic.html\n";
static struct net_device *root_dev; static int __devinit acenic_probe_one(struct pci_dev *pdev,
const struct pci_device_id *id)
static int probed __initdata = 0;
int __devinit acenic_probe (ACE_PROBE_ARG)
{ {
#ifdef NEW_NETINIT
struct net_device *dev; struct net_device *dev;
#endif
struct ace_private *ap; struct ace_private *ap;
struct pci_dev *pdev = NULL; static int boards_found;
int boards_found = 0;
int version_disp;
if (probed)
return -ENODEV;
probed++;
version_disp = 0;
while ((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET<<8, pdev))) {
if (!((pdev->vendor == PCI_VENDOR_ID_ALTEON) &&
((pdev->device == PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE) ||
(pdev->device == PCI_DEVICE_ID_ALTEON_ACENIC_COPPER)))&&
!((pdev->vendor == PCI_VENDOR_ID_3COM) &&
(pdev->device == PCI_DEVICE_ID_3COM_3C985)) &&
!((pdev->vendor == PCI_VENDOR_ID_NETGEAR) &&
((pdev->device == PCI_DEVICE_ID_NETGEAR_GA620) ||
(pdev->device == PCI_DEVICE_ID_NETGEAR_GA620T))) &&
/*
* Farallon used the DEC vendor ID on their cards by
* mistake for a while
*/
!((pdev->vendor == PCI_VENDOR_ID_DEC) &&
(pdev->device == PCI_DEVICE_ID_FARALLON_PN9000SX)) &&
!((pdev->vendor == PCI_VENDOR_ID_ALTEON) &&
(pdev->device == PCI_DEVICE_ID_FARALLON_PN9100T)) &&
!((pdev->vendor == PCI_VENDOR_ID_SGI) &&
(pdev->device == PCI_DEVICE_ID_SGI_ACENIC)))
continue;
dev = alloc_etherdev(sizeof(struct ace_private)); dev = alloc_etherdev(sizeof(struct ace_private));
if (dev == NULL) { if (dev == NULL) {
printk(KERN_ERR "acenic: Unable to allocate " printk(KERN_ERR "acenic: Unable to allocate "
"net_device structure!\n"); "net_device structure!\n");
break; return -ENOMEM;
} }
SET_MODULE_OWNER(dev); SET_MODULE_OWNER(dev);
...@@ -655,8 +463,6 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -655,8 +463,6 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
ap = dev->priv; ap = dev->priv;
ap->pdev = pdev; ap->pdev = pdev;
dev->open = &ace_open;
dev->hard_start_xmit = &ace_start_xmit;
dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM; dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
#if ACENIC_DO_VLAN #if ACENIC_DO_VLAN
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
...@@ -668,26 +474,22 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -668,26 +474,22 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
dev->tx_timeout = &ace_watchdog; dev->tx_timeout = &ace_watchdog;
dev->watchdog_timeo = 5*HZ; dev->watchdog_timeo = 5*HZ;
} }
dev->open = &ace_open;
dev->stop = &ace_close; dev->stop = &ace_close;
dev->hard_start_xmit = &ace_start_xmit;
dev->get_stats = &ace_get_stats; dev->get_stats = &ace_get_stats;
dev->set_multicast_list = &ace_set_multicast_list; dev->set_multicast_list = &ace_set_multicast_list;
dev->do_ioctl = &ace_ioctl; dev->do_ioctl = &ace_ioctl;
dev->set_mac_address = &ace_set_mac_addr; dev->set_mac_address = &ace_set_mac_addr;
dev->change_mtu = &ace_change_mtu; dev->change_mtu = &ace_change_mtu;
/* display version info if adapter is found */
if (!version_disp)
{
/* set display flag to TRUE so that */
/* we only display this string ONCE */ /* we only display this string ONCE */
version_disp = 1; if (!boards_found)
printk(version); printk(version);
}
if (pci_enable_device(pdev)) { if (pci_enable_device(pdev))
free_netdev(dev); goto fail_free_netdev;
continue;
}
/* /*
* Enable master mode before we start playing with the * Enable master mode before we start playing with the
...@@ -709,12 +511,10 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -709,12 +511,10 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
wmb(); wmb();
} }
pci_read_config_byte(pdev, PCI_LATENCY_TIMER, pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &ap->pci_latency);
&ap->pci_latency);
if (ap->pci_latency <= 0x40) { if (ap->pci_latency <= 0x40) {
ap->pci_latency = 0x40; ap->pci_latency = 0x40;
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, pci_write_config_byte(pdev, PCI_LATENCY_TIMER, ap->pci_latency);
ap->pci_latency);
} }
/* /*
...@@ -728,7 +528,7 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -728,7 +528,7 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
printk(KERN_ERR "%s: Unable to map I/O register, " printk(KERN_ERR "%s: Unable to map I/O register, "
"AceNIC %i will be disabled.\n", "AceNIC %i will be disabled.\n",
dev->name, boards_found); dev->name, boards_found);
break; goto fail_free_netdev;
} }
switch(pdev->vendor) { switch(pdev->vendor) {
...@@ -774,6 +574,7 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -774,6 +574,7 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
printk(KERN_INFO "%s: Unknown AceNIC ", dev->name); printk(KERN_INFO "%s: Unknown AceNIC ", dev->name);
break; break;
} }
ap->name [sizeof (ap->name) - 1] = '\0'; ap->name [sizeof (ap->name) - 1] = '\0';
printk("Gigabit Ethernet at 0x%08lx, ", dev->base_addr); printk("Gigabit Ethernet at 0x%08lx, ", dev->base_addr);
#ifdef __sparc__ #ifdef __sparc__
...@@ -786,20 +587,12 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -786,20 +587,12 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
if ((readl(&ap->regs->HostCtrl) >> 28) == 4) { if ((readl(&ap->regs->HostCtrl) >> 28) == 4) {
printk(KERN_ERR "%s: Driver compiled without Tigon I" printk(KERN_ERR "%s: Driver compiled without Tigon I"
" support - NIC disabled\n", dev->name); " support - NIC disabled\n", dev->name);
ace_init_cleanup(dev); goto fail_uninit;
free_netdev(dev);
continue;
} }
#endif #endif
if (ace_allocate_descriptors(dev)) { if (ace_allocate_descriptors(dev))
/* goto fail_free_netdev;
* ace_allocate_descriptors() calls
* ace_init_cleanup() on error.
*/
free_netdev(dev);
continue;
}
#ifdef MODULE #ifdef MODULE
if (boards_found >= ACE_MAX_MOD_PARMS) if (boards_found >= ACE_MAX_MOD_PARMS)
...@@ -810,79 +603,42 @@ int __devinit acenic_probe (ACE_PROBE_ARG) ...@@ -810,79 +603,42 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
ap->board_idx = BOARD_IDX_STATIC; ap->board_idx = BOARD_IDX_STATIC;
#endif #endif
if (ace_init(dev)) { if (ace_init(dev))
/* goto fail_free_netdev;
* ace_init() calls ace_init_cleanup() on error.
*/
free_netdev(dev);
continue;
}
if (register_netdev(dev)) { if (register_netdev(dev)) {
printk(KERN_ERR "acenic: device registration failed\n"); printk(KERN_ERR "acenic: device registration failed\n");
ace_init_cleanup(dev); goto fail_uninit;
free_netdev(dev);
continue;
} }
if (ap->pci_using_dac) if (ap->pci_using_dac)
dev->features |= NETIF_F_HIGHDMA; dev->features |= NETIF_F_HIGHDMA;
boards_found++; pci_set_drvdata(pdev, dev);
}
/* boards_found++;
* If we're at this point we're going through ace_probe() for
* the first time. Return success (0) if we've initialized 1
* or more boards. Otherwise, return failure (-ENODEV).
*/
if (boards_found > 0)
return 0; return 0;
else
fail_uninit:
ace_init_cleanup(dev);
fail_free_netdev:
free_netdev(dev);
return -ENODEV; return -ENODEV;
} }
static void __devexit acenic_remove_one(struct pci_dev *pdev)
#ifdef MODULE
MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver");
MODULE_PARM(link, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(trace, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(tx_coal_tick, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(max_tx_desc, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(rx_coal_tick, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(max_rx_desc, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(tx_ratio, "1-" __MODULE_STRING(8) "i");
MODULE_PARM_DESC(link, "AceNIC/3C985/NetGear link state");
MODULE_PARM_DESC(trace, "AceNIC/3C985/NetGear firmware trace level");
MODULE_PARM_DESC(tx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first tx descriptor arrives");
MODULE_PARM_DESC(max_tx_desc, "AceNIC/3C985/GA620 max number of transmit descriptors to wait");
MODULE_PARM_DESC(rx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first rx descriptor arrives");
MODULE_PARM_DESC(max_rx_desc, "AceNIC/3C985/GA620 max number of receive descriptors to wait");
MODULE_PARM_DESC(tx_ratio, "AceNIC/3C985/GA620 ratio of NIC memory used for TX/RX descriptors (range 0-63)");
#endif
static void __exit ace_module_cleanup(void)
{ {
struct ace_private *ap; struct net_device *dev = pci_get_drvdata(pdev);
struct ace_regs *regs; struct ace_private *ap = dev->priv;
struct net_device *next; struct ace_regs *regs = ap->regs;
short i; short i;
while (root_dev) { unregister_netdev(dev);
ap = root_dev->priv;
next = ap->next;
unregister_netdev(root_dev);
regs = ap->regs;
writel(readl(&regs->CpuCtrl) | CPU_HALT, &regs->CpuCtrl); writel(readl(&regs->CpuCtrl) | CPU_HALT, &regs->CpuCtrl);
if (ap->version >= 2) if (ap->version >= 2)
writel(readl(&regs->CpuBCtrl) | CPU_HALT, writel(readl(&regs->CpuBCtrl) | CPU_HALT, &regs->CpuBCtrl);
&regs->CpuBCtrl);
/* /*
* This clears any pending interrupts * This clears any pending interrupts
*/ */
...@@ -898,7 +654,7 @@ static void __exit ace_module_cleanup(void) ...@@ -898,7 +654,7 @@ static void __exit ace_module_cleanup(void)
* Then release the RX buffers - jumbo buffers were * Then release the RX buffers - jumbo buffers were
* already released in ace_close(). * already released in ace_close().
*/ */
ace_sync_irq(root_dev->irq); ace_sync_irq(dev->irq);
for (i = 0; i < RX_STD_RING_ENTRIES; i++) { for (i = 0; i < RX_STD_RING_ENTRIES; i++) {
struct sk_buff *skb = ap->skb->rx_std_skbuff[i].skb; struct sk_buff *skb = ap->skb->rx_std_skbuff[i].skb;
...@@ -918,6 +674,7 @@ static void __exit ace_module_cleanup(void) ...@@ -918,6 +674,7 @@ static void __exit ace_module_cleanup(void)
dev_kfree_skb(skb); dev_kfree_skb(skb);
} }
} }
if (ap->version >= 2) { if (ap->version >= 2) {
for (i = 0; i < RX_MINI_RING_ENTRIES; i++) { for (i = 0; i < RX_MINI_RING_ENTRIES; i++) {
struct sk_buff *skb = ap->skb->rx_mini_skbuff[i].skb; struct sk_buff *skb = ap->skb->rx_mini_skbuff[i].skb;
...@@ -938,6 +695,7 @@ static void __exit ace_module_cleanup(void) ...@@ -938,6 +695,7 @@ static void __exit ace_module_cleanup(void)
} }
} }
} }
for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) { for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) {
struct sk_buff *skb = ap->skb->rx_jumbo_skbuff[i].skb; struct sk_buff *skb = ap->skb->rx_jumbo_skbuff[i].skb;
if (skb) { if (skb) {
...@@ -956,46 +714,29 @@ static void __exit ace_module_cleanup(void) ...@@ -956,46 +714,29 @@ static void __exit ace_module_cleanup(void)
} }
} }
ace_init_cleanup(root_dev); ace_init_cleanup(dev);
free_netdev(root_dev); free_netdev(dev);
root_dev = next;
}
}
int __init ace_module_init(void)
{
int status;
root_dev = NULL;
#ifdef NEW_NETINIT
status = acenic_probe();
#else
status = acenic_probe(NULL);
#endif
return status;
} }
static struct pci_driver acenic_pci_driver = {
.name = "acenic",
.id_table = acenic_pci_tbl,
.probe = acenic_probe_one,
.remove = __devexit_p(acenic_remove_one),
};
#if (LINUX_VERSION_CODE < 0x02032a) static int __init acenic_init(void)
#ifdef MODULE
int init_module(void)
{ {
return ace_module_init(); return pci_module_init(&acenic_pci_driver);
} }
static void __exit acenic_exit(void)
void cleanup_module(void)
{ {
ace_module_cleanup(); pci_unregister_driver(&acenic_pci_driver);
} }
#endif
#else
module_init(ace_module_init);
module_exit(ace_module_cleanup);
#endif
module_init(acenic_init);
module_exit(acenic_exit);
static void ace_free_descriptors(struct net_device *dev) static void ace_free_descriptors(struct net_device *dev)
{ {
...@@ -1462,13 +1203,6 @@ static int __init ace_init(struct net_device *dev) ...@@ -1462,13 +1203,6 @@ static int __init ace_init(struct net_device *dev)
} else } else
dev->irq = pdev->irq; dev->irq = pdev->irq;
/*
* Register the device here to be able to catch allocated
* interrupt handlers in case the firmware doesn't come up.
*/
ap->next = root_dev;
root_dev = dev;
#ifdef INDEX_DEBUG #ifdef INDEX_DEBUG
spin_lock_init(&ap->debug_lock); spin_lock_init(&ap->debug_lock);
ap->last_tx = ACE_TX_RING_ENTRIES(ap) - 1; ap->last_tx = ACE_TX_RING_ENTRIES(ap) - 1;
...@@ -2642,8 +2376,6 @@ static int ace_open(struct net_device *dev) ...@@ -2642,8 +2376,6 @@ static int ace_open(struct net_device *dev)
netif_start_queue(dev); netif_start_queue(dev);
ACE_MOD_INC_USE_COUNT;
/* /*
* Setup the bottom half rx ring refill handler * Setup the bottom half rx ring refill handler
*/ */
...@@ -2660,8 +2392,6 @@ static int ace_close(struct net_device *dev) ...@@ -2660,8 +2392,6 @@ static int ace_close(struct net_device *dev)
unsigned long flags; unsigned long flags;
short i; short i;
ace_if_down(dev);
/* /*
* Without (or before) releasing irq and stopping hardware, this * Without (or before) releasing irq and stopping hardware, this
* is an absolute non-sense, by the way. It will be reset instantly * is an absolute non-sense, by the way. It will be reset instantly
...@@ -2733,7 +2463,6 @@ static int ace_close(struct net_device *dev) ...@@ -2733,7 +2463,6 @@ static int ace_close(struct net_device *dev)
ace_unmask_irq(dev); ace_unmask_irq(dev);
local_irq_restore(flags); local_irq_restore(flags);
ACE_MOD_DEC_USE_COUNT;
return 0; return 0;
} }
...@@ -2790,12 +2519,6 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -2790,12 +2519,6 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)
struct tx_desc *desc; struct tx_desc *desc;
u32 idx, flagsize; u32 idx, flagsize;
/*
* This only happens with pre-softnet, ie. 2.2.x kernels.
*/
if (early_stop_netif_stop_queue(dev))
return 1;
restart: restart:
idx = ap->tx_prd; idx = ap->tx_prd;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment