equal
deleted
inserted
replaced
367 ) |
367 ) |
368 { |
368 { |
369 unsigned int response_tries_left; |
369 unsigned int response_tries_left; |
370 |
370 |
371 response_tries_left = 10; |
371 response_tries_left = 10; |
372 do |
372 |
|
373 while (1) |
373 { |
374 { |
374 ec_master_queue_command(master, command); |
375 ec_master_queue_command(master, command); |
375 ecrt_master_sync_io(master); |
376 ecrt_master_sync_io(master); |
376 |
377 |
377 if (command->state == EC_CMD_RECEIVED) { |
378 if (command->state == EC_CMD_RECEIVED) { |
378 break; |
379 if (likely(command->working_counter)) |
|
380 return 0; |
379 } |
381 } |
380 else if (command->state == EC_CMD_TIMEOUT) { |
382 else if (command->state == EC_CMD_TIMEOUT) { |
381 EC_ERR("Simple-IO TIMEOUT!\n"); |
383 EC_ERR("Simple-IO TIMEOUT!\n"); |
382 return -1; |
384 return -1; |
383 } |
385 } |
386 return -1; |
388 return -1; |
387 } |
389 } |
388 |
390 |
389 // Keine direkte Antwort. Dem Slave Zeit lassen... |
391 // Keine direkte Antwort. Dem Slave Zeit lassen... |
390 udelay(10); |
392 udelay(10); |
391 } |
393 |
392 while (unlikely(!command->working_counter && --response_tries_left)); |
394 if (unlikely(--response_tries_left)) { |
393 |
395 EC_ERR("No response in simple-IO!\n"); |
394 if (unlikely(!response_tries_left)) { |
396 return -1; |
395 EC_ERR("No response in simple-IO!\n"); |
397 } |
396 return -1; |
398 } |
397 } |
|
398 |
|
399 return 0; |
|
400 } |
399 } |
401 |
400 |
402 /*****************************************************************************/ |
401 /*****************************************************************************/ |
403 |
402 |
404 /** |
403 /** |
858 ec_master_send_commands(master); |
857 ec_master_send_commands(master); |
859 |
858 |
860 t_start = get_cycles(); // Sendezeit nehmen |
859 t_start = get_cycles(); // Sendezeit nehmen |
861 t_timeout = master->timeout * cpu_khz / 1000; |
860 t_timeout = master->timeout * cpu_khz / 1000; |
862 |
861 |
863 do { |
862 while (1) |
|
863 { |
864 ec_device_call_isr(master->device); |
864 ec_device_call_isr(master->device); |
865 |
865 |
866 t_end = get_cycles(); // Aktuelle Zeit nehmen |
866 t_end = get_cycles(); // Aktuelle Zeit nehmen |
867 if (t_end - t_start >= t_timeout) break; // Timeout |
867 if (t_end - t_start >= t_timeout) break; // Timeout |
868 |
868 |
871 if (command->state == EC_CMD_RECEIVED) |
871 if (command->state == EC_CMD_RECEIVED) |
872 list_del_init(&command->list); |
872 list_del_init(&command->list); |
873 else if (command->state == EC_CMD_SENT) |
873 else if (command->state == EC_CMD_SENT) |
874 commands_sent++; |
874 commands_sent++; |
875 } |
875 } |
876 } while (commands_sent); |
876 |
|
877 if (!commands_sent) break; |
|
878 } |
877 |
879 |
878 // Zeit abgelaufen. Alle verbleibenden Kommandos entfernen. |
880 // Zeit abgelaufen. Alle verbleibenden Kommandos entfernen. |
879 list_for_each_entry_safe(command, next, &master->commands, list) { |
881 list_for_each_entry_safe(command, next, &master->commands, list) { |
880 switch (command->state) { |
882 switch (command->state) { |
881 case EC_CMD_SENT: |
883 case EC_CMD_SENT: |
981 |
983 |
982 t_start = get_cycles(); // Sendezeit nehmen |
984 t_start = get_cycles(); // Sendezeit nehmen |
983 t_timeout = master->timeout * cpu_khz / 1000; |
985 t_timeout = master->timeout * cpu_khz / 1000; |
984 |
986 |
985 // Aktiv warten! |
987 // Aktiv warten! |
986 do { |
988 while (1) { |
987 t_end = get_cycles(); |
989 t_end = get_cycles(); |
988 } |
990 if (t_end - t_start >= t_timeout) break; |
989 while (t_end - t_start < t_timeout); |
991 } |
990 } |
992 } |
991 |
993 |
992 /*****************************************************************************/ |
994 /*****************************************************************************/ |
993 |
995 |
994 /** |
996 /** |