diff -r 05c992bf5847 -r 98acc19c7594 drivers/drv_8139too.c --- a/drivers/drv_8139too.c Fri Oct 21 11:21:42 2005 +0000 +++ b/drivers/drv_8139too.c Fri Oct 21 11:44:10 2005 +0000 @@ -133,7 +133,6 @@ #include #include - /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ #include "ec_device.h" @@ -143,7 +142,6 @@ /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ - #define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION #define PFX DRV_NAME ": " @@ -1053,7 +1051,7 @@ rtl_ecat_dev.lock = &tp->lock; } - /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ init_waitqueue_head (&tp->thr_wait); init_completion (&tp->thr_exited); @@ -1165,11 +1163,14 @@ assert (dev != NULL); np = dev->priv; assert (np != NULL); - /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ - /* EtherCATkarten nicht beim Stack angemeldet */ - if (dev != rtl_ecat_dev.dev) { - unregister_netdev (dev); - } + + /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + + if (dev != rtl_ecat_dev.dev) + { + unregister_netdev (dev); + } + /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ __rtl8139_cleanup_dev (dev); @@ -1376,14 +1377,18 @@ EC_DBG(KERN_DEBUG "%s: open\n", dev->name); /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + if (dev != rtl_ecat_dev.dev) - - retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev); - else {//ist Ethercatcard - //rt_disable_irq(dev->irq); - retval = rt_request_global_irq (dev->irq,rt_rtl8139_interrupt); + { + retval = request_irq(dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev); + } + else + { + //rt_disable_irq(dev->irq); + retval = rt_request_global_irq(dev->irq,rt_rtl8139_interrupt); //rt_enable_irq(dev->irq); } + if (retval) return retval; @@ -1397,10 +1402,14 @@ { /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - if (dev != rtl_ecat_dev.dev) + if (dev != rtl_ecat_dev.dev) + { free_irq(dev->irq, dev); + } else + { rt_free_global_irq (dev->irq); + } /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ @@ -1546,7 +1555,9 @@ RTL_W16 (IntrMask, rtl8139_intr_mask); /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + if (dev != rtl_ecat_dev.dev) netif_start_queue (dev); + /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ EC_DBG(KERN_DEBUG "%s: rtl8139_hw_start finished.\n", dev->name); @@ -1834,7 +1845,9 @@ rtl8139_hw_start (dev); /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + if (dev != rtl_ecat_dev.dev) netif_wake_queue (dev); + /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ EC_DBG(KERN_DEBUG "%s: tx_timeout finished.\n", dev->name); @@ -1914,10 +1927,13 @@ tx_left = tp->cur_tx - dirty_tx; /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - if (dev == rtl_ecat_dev.dev) { + + if (dev == rtl_ecat_dev.dev) + { (rtl_ecat_dev.tx_intr_cnt)++; rdtscl(rtl_ecat_dev.tx_time); // Get CPU cycles } + /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ while (tx_left > 0) { @@ -2104,11 +2120,14 @@ RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd)); /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - if (dev == rtl_ecat_dev.dev) { - (rtl_ecat_dev.rx_intr_cnt)++; - rdtscl(rtl_ecat_dev.rx_time); // Get CPU cycles - } - /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + + if (dev == rtl_ecat_dev.dev) + { + (rtl_ecat_dev.rx_intr_cnt)++; + rdtscl(rtl_ecat_dev.rx_time); // Get CPU cycles + } + + /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ while ((RTL_R8 (ChipCmd) & RxBufEmpty) == 0) { int ring_offset = cur_rx % RX_BUF_LEN; @@ -2128,10 +2147,10 @@ DPRINTK ("%s: rtl8139_rx() status %4.4x, size %4.4x," " cur %4.4x.\n", dev->name, rx_status, rx_size, cur_rx); -#if RTL8139_DEBUG > 2 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - + +#if RTL8139_DEBUG > 2 if (dev == rtl_ecat_dev.dev) { int i; @@ -2141,9 +2160,9 @@ rx_ring[ring_offset + i]); EC_DBG (".\n"); } +#endif /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ -#endif /* Packet copy from FIFO still in progress. * Theoretically, this should never happen @@ -2211,8 +2230,6 @@ } else { -// rdtscl(rtl_ecat_dev.rx_time); // Get CPU cycles - // Copy received data to ethercat-device buffer, skip Ethernet-II header memcpy(rtl_ecat_dev.rx_data, &rx_ring[ring_offset + 4] + ETH_HLEN, pkt_size - ETH_HLEN); @@ -2385,7 +2402,7 @@ rtl8139_interrupt(rtl_ecat_dev.dev->irq, rtl_ecat_dev.dev, NULL); } -/* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ +/* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ static int rtl8139_close (struct net_device *dev) { @@ -2412,7 +2429,6 @@ } } - /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ DPRINTK ("%s: Shutting down ethercard, status was 0x%4.4x.\n", @@ -2424,11 +2440,11 @@ if (dev == rtl_ecat_dev.dev) { - flags = rt_spin_lock_irqsave (&tp->lock); + flags = rt_spin_lock_irqsave(&tp->lock); } else { - spin_lock_irqsave (&tp->lock, flags); + spin_lock_irqsave(&tp->lock, flags); } /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ @@ -2452,8 +2468,8 @@ synchronize_irq (); } - /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + EC_DBG ("rtl8139: freeing irq"); mdelay(1); //hm @@ -2463,7 +2479,7 @@ } else { - rt_disable_irq(dev->irq); + rt_disable_irq(dev->irq); rt_free_global_irq (dev->irq); rt_enable_irq(dev->irq); } @@ -2895,8 +2911,10 @@ unsigned long flags; /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + if (dev == rtl_ecat_dev.dev || !netif_running (dev)) - return 0; + return 0; + /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ netif_device_detach (dev); @@ -2921,8 +2939,10 @@ struct net_device *dev = pci_get_drvdata (pdev); /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ + if (dev == rtl_ecat_dev.dev || !netif_running (dev)) - return 0; + return 0; + /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ netif_device_attach (dev); @@ -2957,18 +2977,10 @@ /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ -/* if (ecat_dev) - { - EC_DBG(KERN_WARNING "EtherCAT device already exists!!!\n"); - return -ENOMEM; - } -*/ -// if ((ecat_dev = (EtherCAT_device_t*) kmalloc(sizeof(EtherCAT_device_t), GFP_KERNEL)) == NULL) -// return -ENOMEM; - EtherCAT_device_init(&rtl_ecat_dev); - printk(KERN_DEBUG "Driver rtl_ecat_dev has adress %X.\n", (unsigned) &rtl_ecat_dev); + printk(KERN_DEBUG "Driver rtl_ecat_dev has address %X.\n", + (unsigned) &rtl_ecat_dev); /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ @@ -2982,12 +2994,7 @@ /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ -// if (ecat_dev) - { - EtherCAT_device_clear(&rtl_ecat_dev); -// kfree(ecat_dev); -// ecat_dev = NULL; - } + EtherCAT_device_clear(&rtl_ecat_dev); /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ }