master/module.c
changeset 55 059a9e712aa7
parent 54 7506e67dd122
child 56 36d1fa37f5e1
--- 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: ***
+*/