equal
deleted
inserted
replaced
141 INIT_LIST_HEAD(&master->domains); |
141 INIT_LIST_HEAD(&master->domains); |
142 master->debug_level = 0; |
142 master->debug_level = 0; |
143 |
143 |
144 master->stats.timeouts = 0; |
144 master->stats.timeouts = 0; |
145 master->stats.corrupted = 0; |
145 master->stats.corrupted = 0; |
146 master->stats.skipped = 0; |
|
147 master->stats.unmatched = 0; |
146 master->stats.unmatched = 0; |
148 master->stats.output_jiffies = 0; |
147 master->stats.output_jiffies = 0; |
149 |
148 |
150 for (i = 0; i < HZ; i++) { |
149 for (i = 0; i < HZ; i++) { |
151 master->idle_cycle_times[i] = 0; |
150 master->idle_cycle_times[i] = 0; |
184 if (ec_device_init(&master->backup_device, master)) |
183 if (ec_device_init(&master->backup_device, master)) |
185 goto out_clear_main; |
184 goto out_clear_main; |
186 |
185 |
187 // init state machine datagram |
186 // init state machine datagram |
188 ec_datagram_init(&master->fsm_datagram); |
187 ec_datagram_init(&master->fsm_datagram); |
|
188 snprintf(master->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE, "master-fsm"); |
189 if (ec_datagram_prealloc(&master->fsm_datagram, EC_MAX_DATA_SIZE)) { |
189 if (ec_datagram_prealloc(&master->fsm_datagram, EC_MAX_DATA_SIZE)) { |
190 EC_ERR("Failed to allocate FSM datagram.\n"); |
190 EC_ERR("Failed to allocate FSM datagram.\n"); |
191 goto out_clear_backup; |
191 goto out_clear_backup; |
192 } |
192 } |
193 |
193 |
546 ec_datagram_t *queued_datagram; |
546 ec_datagram_t *queued_datagram; |
547 |
547 |
548 // check, if the datagram is already queued |
548 // check, if the datagram is already queued |
549 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
549 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
550 if (queued_datagram == datagram) { |
550 if (queued_datagram == datagram) { |
551 master->stats.skipped++; |
551 datagram->skip_count++; |
552 if (master->debug_level) |
552 if (master->debug_level) |
553 EC_DBG("skipping datagram %x.\n", (unsigned int) datagram); |
553 EC_DBG("skipping datagram %x.\n", (unsigned int) datagram); |
554 ec_master_output_stats(master); |
|
555 datagram->state = EC_DATAGRAM_QUEUED; |
554 datagram->state = EC_DATAGRAM_QUEUED; |
556 return; |
555 return; |
557 } |
556 } |
558 } |
557 } |
559 |
558 |
796 if (master->stats.corrupted) { |
795 if (master->stats.corrupted) { |
797 EC_WARN("%i frame%s CORRUPTED!\n", master->stats.corrupted, |
796 EC_WARN("%i frame%s CORRUPTED!\n", master->stats.corrupted, |
798 master->stats.corrupted == 1 ? "" : "s"); |
797 master->stats.corrupted == 1 ? "" : "s"); |
799 master->stats.corrupted = 0; |
798 master->stats.corrupted = 0; |
800 } |
799 } |
801 if (master->stats.skipped) { |
|
802 EC_WARN("%i datagram%s SKIPPED!\n", master->stats.skipped, |
|
803 master->stats.skipped == 1 ? "" : "s"); |
|
804 master->stats.skipped = 0; |
|
805 } |
|
806 if (master->stats.unmatched) { |
800 if (master->stats.unmatched) { |
807 EC_WARN("%i datagram%s UNMATCHED!\n", master->stats.unmatched, |
801 EC_WARN("%i datagram%s UNMATCHED!\n", master->stats.unmatched, |
808 master->stats.unmatched == 1 ? "" : "s"); |
802 master->stats.unmatched == 1 ? "" : "s"); |
809 master->stats.unmatched = 0; |
803 master->stats.unmatched = 0; |
810 } |
804 } |
824 daemonize("EtherCAT-IDLE"); |
818 daemonize("EtherCAT-IDLE"); |
825 allow_signal(SIGTERM); |
819 allow_signal(SIGTERM); |
826 |
820 |
827 while (!signal_pending(current)) { |
821 while (!signal_pending(current)) { |
828 cycles_start = get_cycles(); |
822 cycles_start = get_cycles(); |
|
823 ec_datagram_output_stats(&master->fsm_datagram); |
829 |
824 |
830 if (ec_fsm_master_running(&master->fsm)) { // datagram on the way |
825 if (ec_fsm_master_running(&master->fsm)) { // datagram on the way |
831 // receive |
826 // receive |
832 spin_lock_bh(&master->internal_lock); |
827 spin_lock_bh(&master->internal_lock); |
833 ecrt_master_receive(master); |
828 ecrt_master_receive(master); |
880 |
875 |
881 daemonize("EtherCAT-OP"); |
876 daemonize("EtherCAT-OP"); |
882 allow_signal(SIGTERM); |
877 allow_signal(SIGTERM); |
883 |
878 |
884 while (!signal_pending(current)) { |
879 while (!signal_pending(current)) { |
|
880 ec_datagram_output_stats(&master->fsm_datagram); |
885 if (master->injection_seq_rt != master->injection_seq_fsm || |
881 if (master->injection_seq_rt != master->injection_seq_fsm || |
886 master->fsm_datagram.state == EC_DATAGRAM_SENT || |
882 master->fsm_datagram.state == EC_DATAGRAM_SENT || |
887 master->fsm_datagram.state == EC_DATAGRAM_QUEUED) |
883 master->fsm_datagram.state == EC_DATAGRAM_QUEUED) |
888 goto schedule; |
884 goto schedule; |
889 |
885 |