--- a/master/module.c Tue Jan 17 18:28:15 2006 +0000
+++ b/master/module.c Fri Jan 20 13:32:31 2006 +0000
@@ -168,6 +168,7 @@
struct module *module)
{
ec_device_t *ecd;
+ ec_master_t *master;
if (master_index >= ec_master_count) {
printk(KERN_ERR "EtherCAT: Master %i does not exist!\n", master_index);
@@ -179,13 +180,15 @@
return NULL;
}
- if (ec_masters[master_index].device_registered) {
+ master = ec_masters + master_index;
+
+ if (master->device_registered) {
printk(KERN_ERR "EtherCAT: Master %i already has a device!\n",
master_index);
return NULL;
}
- ecd = &ec_masters[master_index].device;
+ ecd = &master->device;
if (ec_device_init(ecd) < 0) {
return NULL;
@@ -197,6 +200,8 @@
ecd->isr = isr;
ecd->module = module;
+ master->device_registered = 1;
+
return ecd;
}
@@ -209,15 +214,24 @@
@param device Das EtherCAT-Geraet
*/
-void EtherCAT_dev_unregister(unsigned int master_index)
-{
+void EtherCAT_dev_unregister(unsigned int master_index, ec_device_t *ecd)
+{
+ ec_master_t *master;
+
if (master_index >= ec_master_count) {
printk(KERN_WARNING "EtherCAT: Master %i does not exist!\n", master_index);
return;
}
- ec_masters[master_index].device_registered = 0;
- ec_device_clear(&ec_masters[master_index].device);
+ master = ec_masters + master_index;
+
+ if (!master->device_registered || &master->device != ecd) {
+ printk(KERN_ERR "EtherCAT: Unable to unregister device!\n");
+ return;
+ }
+
+ master->device_registered = 0;
+ ec_device_clear(ecd);
}
/******************************************************************************
@@ -235,7 +249,7 @@
@returns Zeiger auf EtherCAT-Master oder NULL, wenn Parameter ungueltig.
*/
-ec_master_t *EtherCAT_rt_request_master(int index)
+ec_master_t *EtherCAT_rt_request_master(unsigned int index)
{
ec_master_t *master;
@@ -334,3 +348,9 @@
EXPORT_SYMBOL(EtherCAT_rt_release_master);
/*****************************************************************************/
+
+/* Emacs-Konfiguration
+;;; Local Variables: ***
+;;; c-basic-offset:2 ***
+;;; End: ***
+*/