master/master.c
branchstable-1.5
changeset 2485 5535603c34a0
parent 2476 9a0d30056e70
child 2498 9cdd7669dc0b
equal deleted inserted replaced
2484:1cf54e2452c4 2485:5535603c34a0
   845 
   845 
   846     // check, if the datagram is already queued
   846     // check, if the datagram is already queued
   847     list_for_each_entry(queued_datagram, &master->external_datagram_queue,
   847     list_for_each_entry(queued_datagram, &master->external_datagram_queue,
   848             queue) {
   848             queue) {
   849         if (queued_datagram == datagram) {
   849         if (queued_datagram == datagram) {
       
   850             up(&master->io_sem);
   850             datagram->state = EC_DATAGRAM_QUEUED;
   851             datagram->state = EC_DATAGRAM_QUEUED;
   851             return;
   852             return;
   852         }
   853         }
   853     }
   854     }
   854 
   855 
   862 #ifdef EC_HAVE_CYCLES
   863 #ifdef EC_HAVE_CYCLES
   863     datagram->cycles_sent = get_cycles();
   864     datagram->cycles_sent = get_cycles();
   864 #endif
   865 #endif
   865     datagram->jiffies_sent = jiffies;
   866     datagram->jiffies_sent = jiffies;
   866 
   867 
       
   868     up(&master->io_sem);
       
   869 
   867     master->fsm.idle = 0;
   870     master->fsm.idle = 0;
   868     up(&master->io_sem);
       
   869 }
   871 }
   870 
   872 
   871 /*****************************************************************************/
   873 /*****************************************************************************/
   872 
   874 
   873 /** Places a datagram in the datagram queue.
   875 /** Places a datagram in the datagram queue.
  1476                 ec_fsm_slave_exec(&slave->fsm);
  1478                 ec_fsm_slave_exec(&slave->fsm);
  1477             }
  1479             }
  1478 
  1480 
  1479             up(&master->master_sem);
  1481             up(&master->master_sem);
  1480 
  1482 
  1481             // inject datagrams (let the rt thread queue them, see
  1483             // Inject datagrams (let the RT thread queue them, see
  1482             // ecrt_master_send)
  1484             // ecrt_master_send())
  1483             if (fsm_exec) {
  1485             if (fsm_exec) {
  1484                 master->injection_seq_fsm++;
  1486                 master->injection_seq_fsm++;
  1485             }
  1487             }
  1486         }
  1488         }
  1487 
  1489 
  2278 {
  2280 {
  2279     ec_datagram_t *datagram, *n;
  2281     ec_datagram_t *datagram, *n;
  2280     ec_device_index_t dev_idx;
  2282     ec_device_index_t dev_idx;
  2281 
  2283 
  2282     if (master->injection_seq_rt != master->injection_seq_fsm) {
  2284     if (master->injection_seq_rt != master->injection_seq_fsm) {
  2283         // inject datagrams produced by master and slave FSMs
  2285         // inject datagrams produced by master FSM
  2284         ec_master_queue_datagram(master, &master->fsm_datagram);
  2286         ec_master_queue_datagram(master, &master->fsm_datagram);
  2285         master->injection_seq_rt = master->injection_seq_fsm;
  2287         master->injection_seq_rt = master->injection_seq_fsm;
  2286     }
  2288     }
  2287 
  2289 
  2288     ec_master_inject_external_datagrams(master);
  2290     ec_master_inject_external_datagrams(master);