master/master.c
changeset 113 a3dbd6bc8fce
parent 111 9963537ec776
child 114 e4b4b5a85e75
--- a/master/master.c	Mon Mar 20 12:54:17 2006 +0000
+++ b/master/master.c	Mon Mar 20 13:36:10 2006 +0000
@@ -369,13 +369,15 @@
     unsigned int response_tries_left;
 
     response_tries_left = 10;
-    do
+
+    while (1)
     {
         ec_master_queue_command(master, command);
         ecrt_master_sync_io(master);
 
         if (command->state == EC_CMD_RECEIVED) {
-            break;
+            if (likely(command->working_counter))
+                return 0;
         }
         else if (command->state == EC_CMD_TIMEOUT) {
             EC_ERR("Simple-IO TIMEOUT!\n");
@@ -388,15 +390,12 @@
 
         // Keine direkte Antwort. Dem Slave Zeit lassen...
         udelay(10);
-    }
-    while (unlikely(!command->working_counter && --response_tries_left));
-
-    if (unlikely(!response_tries_left)) {
-        EC_ERR("No response in simple-IO!\n");
-        return -1;
-    }
-
-    return 0;
+
+        if (unlikely(--response_tries_left)) {
+            EC_ERR("No response in simple-IO!\n");
+            return -1;
+        }
+    }
 }
 
 /*****************************************************************************/
@@ -860,7 +859,8 @@
     t_start = get_cycles(); // Sendezeit nehmen
     t_timeout = master->timeout * cpu_khz / 1000;
 
-    do {
+    while (1)
+    {
         ec_device_call_isr(master->device);
 
         t_end = get_cycles(); // Aktuelle Zeit nehmen
@@ -873,7 +873,9 @@
             else if (command->state == EC_CMD_SENT)
                 commands_sent++;
         }
-    } while (commands_sent);
+
+        if (!commands_sent) break;
+    }
 
     // Zeit abgelaufen. Alle verbleibenden Kommandos entfernen.
     list_for_each_entry_safe(command, next, &master->commands, list) {
@@ -983,10 +985,10 @@
     t_timeout = master->timeout * cpu_khz / 1000;
 
     // Aktiv warten!
-    do {
+    while (1) {
         t_end = get_cycles();
-    }
-    while (t_end - t_start < t_timeout);
+        if (t_end - t_start >= t_timeout) break;
+    }
 }
 
 /*****************************************************************************/