master/slave.c
changeset 628 e94a16bc52ce
parent 627 4793ca94f082
child 630 1b755b7342eb
--- a/master/slave.c	Wed Mar 07 11:46:02 2007 +0000
+++ b/master/slave.c	Wed Mar 07 13:06:40 2007 +0000
@@ -255,7 +255,13 @@
     }
 
     // free all sync managers
-    if (slave->sii_syncs) kfree(slave->sii_syncs);
+    if (slave->sii_syncs) {
+        for (i = 0; i < slave->sii_sync_count; i++) {
+            ec_sync_clear(&slave->sii_syncs[i]);
+            kfree(&slave->sii_syncs[i]);
+        }
+        kfree(slave->sii_syncs);
+    }
 
     // free all PDOs
     list_for_each_entry_safe(pdo, next_pdo, &slave->sii_pdos, list) {
@@ -480,22 +486,22 @@
     // sync manager struct is 4 words long
     slave->sii_sync_count = word_count / 4;
 
-    if (!(slave->sii_syncs = kmalloc(sizeof(ec_sync_t) *
-                    slave->sii_sync_count, GFP_ATOMIC))) {
-        EC_ERR("Failed to allocate Sync-Manager memory.\n");
+    if (!(slave->sii_syncs =
+                kmalloc(sizeof(ec_sync_t) * slave->sii_sync_count,
+                    GFP_KERNEL))) {
+        EC_ERR("Failed to allocate memory for sync managers.\n");
+        slave->sii_sync_count = 0;
         return -1;
     }
     
     for (i = 0; i < slave->sii_sync_count; i++, data += 8) {
         sync = &slave->sii_syncs[i];
 
-        sync->index = i; 
+        ec_sync_init(sync, slave, i);
         sync->physical_start_address = EC_READ_U16(data);
-        sync->length                 = EC_READ_U16(data + 2);
-        sync->control_register       = EC_READ_U8 (data + 4);
-        sync->enable                 = EC_READ_U8 (data + 6);
-        
-        sync->est_length = 0;
+        sync->length = EC_READ_U16(data + 2);
+        sync->control_register = EC_READ_U8 (data + 4);
+        sync->enable = EC_READ_U8 (data + 6);
     }
 
     return 0;
@@ -761,7 +767,7 @@
 
     for (i = 0; i < slave->sii_sync_count; i++) {
         sync = &slave->sii_syncs[i];
-        off += sprintf(buffer + off, "  %i: 0x%04X, length %i,"
+        off += sprintf(buffer + off, "  %u) 0x%04X, length %i,"
                 " control 0x%02X, %s\n",
                 sync->index, sync->physical_start_address,
                 sync->length, sync->control_register,
@@ -1051,15 +1057,14 @@
 /*****************************************************************************/
 
 /**
-   Calculates the size of a sync manager by evaluating PDO sizes.
-   \return sync manager size
-*/
-
-uint16_t ec_slave_calc_sync_size(const ec_slave_t *slave,
-                                 /**< EtherCAT slave */
-                                 const ec_sync_t *sync
-                                 /**< sync manager */
-                                 )
+ * Calculates the size of a sync manager by evaluating PDO sizes.
+ * \return sync manager size
+ */
+
+uint16_t ec_slave_calc_sync_size(
+        const ec_slave_t *slave, /**< EtherCAT slave */
+        const ec_sync_t *sync /**< sync manager */
+        )
 {
     const ec_pdo_t *pdo;
     const ec_pdo_entry_t *pdo_entry;