--- 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 <asm/io.h>
#include <asm/uaccess.h>
-
/* 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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
}