Index: drivers/net/ncr885e.c =================================================================== RCS file: /g/cvslan/linux_2_3/drivers/net/ncr885e.c,v retrieving revision 1.1.1.9 diff -u -r1.1.1.9 ncr885e.c --- drivers/net/ncr885e.c 2000/05/21 10:52:34 1.1.1.9 +++ drivers/net/ncr885e.c 2000/06/11 03:19:15 @@ -1144,18 +1144,11 @@ unsigned char *p; int i; - dev = init_etherdev(NULL, 0 ); - - /* construct private data for the 885 ethernet */ - dev->priv = kmalloc( sizeof( struct ncr885e_private ), GFP_KERNEL ); - - if ( dev->priv == NULL ) { - release_region( ioaddr, NCR885E_TOTAL_SIZE ); + dev = init_etherdev( NULL, sizeof( struct ncr885e_private ) ); + if (!dev) return -ENOMEM; - } - sp = (struct ncr885e_private *) dev->priv; - memset( sp, 0, sizeof( struct ncr885e_private )); + sp = dev->priv; /* snag the station address and display it */ for( i = 0; i < 3; i++ ) { @@ -1210,7 +1203,8 @@ unsigned short cmd; unsigned char irq, latency; - while(( pdev = pci_find_device( PCI_VENDOR_ID_NCR, + /* use 'if' not 'while' where because driver only supports one device */ + if (( pdev = pci_find_device( PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C885_ETHERNET, pdev )) != NULL ) { @@ -1219,11 +1213,13 @@ printk( KERN_INFO "%s", version ); } + if (pci_enable_device(pdev)) + continue; + /* Use I/O space */ - pci_read_config_dword( pdev, PCI_BASE_ADDRESS_0, &ioaddr ); - pci_read_config_byte( pdev, PCI_INTERRUPT_LINE, &irq ); + ioaddr = pci_resource_start (pdev, 0); + irq = pdev->irq; - ioaddr &= ~3; /* Adjust around the Grackle... */ #ifdef CONFIG_GEMINI ioaddr |= 0xfe000000; @@ -1237,28 +1233,16 @@ chips++; + pci_set_master (pdev); + /* Access is via I/O space, bus master enabled... */ pci_read_config_word( pdev, PCI_COMMAND, &cmd ); - if ( !(cmd & PCI_COMMAND_MASTER) ) { - printk( KERN_INFO " PCI master bit not set! Now setting.\n"); - cmd |= PCI_COMMAND_MASTER; - pci_write_config_word( pdev, PCI_COMMAND, cmd ); - } - if ( !(cmd & PCI_COMMAND_IO) ) { printk( KERN_INFO " Enabling I/O space.\n" ); cmd |= PCI_COMMAND_IO; pci_write_config_word( pdev, PCI_COMMAND, cmd ); } - - pci_read_config_byte( pdev, PCI_LATENCY_TIMER, &latency ); - - if ( latency < 10 ) { - printk( KERN_INFO " PCI latency timer (CFLT) is unreasonably" - " low at %d. Setting to 255.\n", latency ); - pci_write_config_byte( pdev, PCI_LATENCY_TIMER, 255 ); - } } } @@ -1401,14 +1385,10 @@ static void __exit cleanup_module(void) { - struct ncr885e_private *np; - if ( root_dev ) { - unregister_netdev( root_dev ); - np = (struct ncr885e_private *) root_dev->priv; release_region( root_dev->base_addr, NCR885E_TOTAL_SIZE ); - kfree( root_dev->priv ); + kfree( root_dev ); root_dev = NULL; } }