--- a/drivers/ec_slave.c Fri Dec 16 16:21:22 2005 +0000
+++ b/drivers/ec_slave.c Mon Dec 19 08:13:11 2005 +0000
@@ -1,20 +1,19 @@
-/****************************************************************
+/******************************************************************************
*
* e c _ s l a v e . c
*
* Methoden für einen EtherCAT-Slave.
*
- * $Date$
- * $Author$
+ * $Id$
*
- ***************************************************************/
+ *****************************************************************************/
#include <linux/module.h>
#include "ec_globals.h"
#include "ec_slave.h"
-/***************************************************************/
+/*****************************************************************************/
/**
EtherCAT-Slave-Konstruktor.
@@ -29,24 +28,20 @@
slave->type = 0;
slave->revision = 0;
slave->build = 0;
-
slave->ring_position = 0;
slave->station_address = 0;
-
slave->vendor_id = 0;
slave->product_code = 0;
slave->revision_number = 0;
slave->serial_number = 0;
-
- slave->desc = 0;
-
+ slave->desc = NULL;
slave->logical_address0 = 0;
-
slave->current_state = ECAT_STATE_UNKNOWN;
slave->requested_state = ECAT_STATE_UNKNOWN;
+ slave->error_reported = 0;
}
-/***************************************************************/
+/*****************************************************************************/
/**
EtherCAT-Slave-Destruktor.
@@ -61,7 +56,7 @@
// Nothing yet...
}
-/***************************************************************/
+/*****************************************************************************/
/**
Liest einen bestimmten Kanal des Slaves als Integer-Wert.
@@ -81,37 +76,46 @@
int EtherCAT_read_value(EtherCAT_slave_t *slave,
unsigned int channel)
{
- if (!slave->desc)
- {
- printk(KERN_WARNING "EtherCAT: Reading failed on slave %04X (addr %0X)"
- " - Slave has no description.\n",
- slave->station_address, (unsigned int) slave);
+ if (unlikely(!slave->desc)) {
+ if (likely(slave->error_reported)) {
+ printk(KERN_WARNING "EtherCAT: Reading failed on slave %04X (addr %0X)"
+ " - Slave has no description.\n",
+ slave->station_address, (unsigned int) slave);
+ slave->error_reported = 1;
+ }
return 0;
}
- if (!slave->desc->read)
- {
- printk(KERN_WARNING "EtherCAT: Reading failed on slave %04X (addr %0X)"
- " - Slave type (%s %s) has no read method.\n",
- slave->station_address, (unsigned int) slave,
- slave->desc->vendor_name, slave->desc->product_name);
+ if (unlikely(!slave->desc->read)) {
+ if (likely(slave->error_reported)) {
+ printk(KERN_WARNING "EtherCAT: Reading failed on slave %04X (addr %0X)"
+ " - Slave type (%s %s) has no read method.\n",
+ slave->station_address, (unsigned int) slave,
+ slave->desc->vendor_name, slave->desc->product_name);
+ slave->error_reported = 1;
+ }
return 0;
}
- if (channel >= slave->desc->channels)
- {
- printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)"
- " - Type (%s %s) has no channel %i.\n",
- slave->station_address, (unsigned int) slave,
- slave->desc->vendor_name, slave->desc->product_name,
- channel);
+ if (unlikely(channel >= slave->desc->channels)) {
+ if (likely(slave->error_reported)) {
+ printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)"
+ " - Type (%s %s) has no channel %i.\n",
+ slave->station_address, (unsigned int) slave,
+ slave->desc->vendor_name, slave->desc->product_name,
+ channel);
+ slave->error_reported = 1;
+ }
return 0;
}
+ if (unlikely(slave->error_reported))
+ slave->error_reported = 0;
+
return slave->desc->read(slave->process_data, channel);
}
-/***************************************************************/
+/*****************************************************************************/
/**
Schreibt einen bestimmten Kanal des Slaves als Integer-Wert .
@@ -131,37 +135,48 @@
unsigned int channel,
int value)
{
- if (!slave->desc)
- {
- printk(KERN_WARNING "EtherCAT: Writing failed on slave %04X (addr %0X)"
- " - Slave has no description.\n",
- slave->station_address, (unsigned int) slave);
+ if (unlikely(!slave->desc)) {
+ if (likely(slave->error_reported)) {
+ printk(KERN_WARNING "EtherCAT: Writing failed on slave %04X (addr %0X)"
+ " - Slave has no description.\n",
+ slave->station_address, (unsigned int) slave);
+ slave->error_reported = 1;
+ }
return;
}
- if (!slave->desc->write)
- {
- printk(KERN_WARNING "EtherCAT: Writing failed on slave %04X (addr %0X)"
- " - Type (%s %s) has no write method.\n",
- slave->station_address, (unsigned int) slave,
- slave->desc->vendor_name, slave->desc->product_name);
+ if (unlikely(!slave->desc->write)) {
+ if (likely(slave->error_reported)) {
+ printk(KERN_WARNING "EtherCAT: Writing failed on slave %04X (addr %0X)"
+ " - Type (%s %s) has no write method.\n",
+ slave->station_address, (unsigned int) slave,
+ slave->desc->vendor_name, slave->desc->product_name);
+ slave->error_reported = 1;
+ }
return;
}
- if (channel >= slave->desc->channels)
- {
- printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)"
- " - Type (%s %s) has no channel %i.\n",
- slave->station_address, (unsigned int) slave,
- slave->desc->vendor_name, slave->desc->product_name,
- channel);
+ if (unlikely(channel >= slave->desc->channels)) {
+ if (likely(slave->error_reported)) {
+ printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)"
+ " - Type (%s %s) has no channel %i.\n",
+ slave->station_address, (unsigned int) slave,
+ slave->desc->vendor_name, slave->desc->product_name,
+ channel);
+ slave->error_reported = 1;
+ }
return;
}
+ if (unlikely(slave->error_reported))
+ slave->error_reported = 0;
+
slave->desc->write(slave->process_data, channel, value);
}
-/***************************************************************/
+/*****************************************************************************/
EXPORT_SYMBOL(EtherCAT_write_value);
EXPORT_SYMBOL(EtherCAT_read_value);
+
+/*****************************************************************************/