equal
deleted
inserted
replaced
819 spin_lock_bh(&master->internal_lock); |
819 spin_lock_bh(&master->internal_lock); |
820 ecrt_master_receive(master); |
820 ecrt_master_receive(master); |
821 spin_unlock_bh(&master->internal_lock); |
821 spin_unlock_bh(&master->internal_lock); |
822 } |
822 } |
823 |
823 |
|
824 if (master->fsm_datagram.state == EC_DATAGRAM_SENT) |
|
825 goto schedule; |
|
826 |
824 // execute master state machine |
827 // execute master state machine |
825 if (ec_fsm_master_exec(&master->fsm)) { |
828 if (ec_fsm_master_exec(&master->fsm)) { |
826 // queue and send |
829 // queue and send |
827 ec_master_queue_datagram(master, &master->fsm_datagram); |
830 ec_master_queue_datagram(master, &master->fsm_datagram); |
828 spin_lock_bh(&master->internal_lock); |
831 spin_lock_bh(&master->internal_lock); |
834 master->idle_cycle_times[master->idle_cycle_time_pos] |
837 master->idle_cycle_times[master->idle_cycle_time_pos] |
835 = (u32) (cycles_end - cycles_start) * 1000 / cpu_khz; |
838 = (u32) (cycles_end - cycles_start) * 1000 / cpu_khz; |
836 master->idle_cycle_time_pos++; |
839 master->idle_cycle_time_pos++; |
837 master->idle_cycle_time_pos %= HZ; |
840 master->idle_cycle_time_pos %= HZ; |
838 |
841 |
|
842 schedule: |
839 if (ec_fsm_master_idle(&master->fsm)) { |
843 if (ec_fsm_master_idle(&master->fsm)) { |
840 set_current_state(TASK_INTERRUPTIBLE); |
844 set_current_state(TASK_INTERRUPTIBLE); |
841 schedule_timeout(1); |
845 schedule_timeout(1); |
842 } |
846 } |
843 else { |
847 else { |