--- 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;
+ }
}
/*****************************************************************************/