master/master.c
changeset 1930 59a50053ccc6
parent 1925 29161abef052
child 1939 1ba48f78a0a5
equal deleted inserted replaced
1929:b5dab7ee6cf7 1930:59a50053ccc6
   696         else {
   696         else {
   697             if (datagram->data_size > master->max_queue_size) {
   697             if (datagram->data_size > master->max_queue_size) {
   698                 list_del_init(&datagram->queue);
   698                 list_del_init(&datagram->queue);
   699                 datagram->state = EC_DATAGRAM_ERROR;
   699                 datagram->state = EC_DATAGRAM_ERROR;
   700                 EC_MASTER_ERR(master, "External datagram %p is too large,"
   700                 EC_MASTER_ERR(master, "External datagram %p is too large,"
   701                         " size=%u, max_queue_size=%u\n",
   701                         " size=%zu, max_queue_size=%zu\n",
   702                         datagram, datagram->data_size,
   702                         datagram, datagram->data_size,
   703                         master->max_queue_size);
   703                         master->max_queue_size);
   704             } else {
   704             } else {
   705 #ifdef EC_HAVE_CYCLES
   705 #ifdef EC_HAVE_CYCLES
   706                 cycles_t cycles_now = get_cycles();
   706                 cycles_t cycles_now = get_cycles();
   723 #else
   723 #else
   724                     time_us = (unsigned int)
   724                     time_us = (unsigned int)
   725                         ((jiffies - datagram->jiffies_sent) * 1000000 / HZ);
   725                         ((jiffies - datagram->jiffies_sent) * 1000000 / HZ);
   726 #endif
   726 #endif
   727                     EC_MASTER_ERR(master, "Timeout %u us: Injecting"
   727                     EC_MASTER_ERR(master, "Timeout %u us: Injecting"
   728                             " external datagram %p size=%u,"
   728                             " external datagram %p size=%zu,"
   729                             " max_queue_size=%u\n", time_us, datagram,
   729                             " max_queue_size=%zu\n", time_us, datagram,
   730                             datagram->data_size, master->max_queue_size);
   730                             datagram->data_size, master->max_queue_size);
   731                 }
   731                 }
   732 #if DEBUG_INJECT
   732 #if DEBUG_INJECT
   733                 else {
   733                 else {
   734                     EC_MASTER_DBG(master, 0, "Deferred injecting"
   734                     EC_MASTER_DBG(master, 0, "Deferred injecting"
   747 /** Sets the expected interval between calls to ecrt_master_send
   747 /** Sets the expected interval between calls to ecrt_master_send
   748  * and calculates the maximum amount of data to queue.
   748  * and calculates the maximum amount of data to queue.
   749  */
   749  */
   750 void ec_master_set_send_interval(
   750 void ec_master_set_send_interval(
   751         ec_master_t *master, /**< EtherCAT master */
   751         ec_master_t *master, /**< EtherCAT master */
   752         size_t send_interval /**< Send interval */
   752         unsigned int send_interval /**< Send interval */
   753         )
   753         )
   754 {
   754 {
   755     master->send_interval = send_interval;
   755     master->send_interval = send_interval;
   756     master->max_queue_size =
   756     master->max_queue_size =
   757         (send_interval * 1000) / EC_BYTE_TRANSMISSION_TIME_NS;
   757         (send_interval * 1000) / EC_BYTE_TRANSMISSION_TIME_NS;
  1196     size_t sent_bytes;
  1196     size_t sent_bytes;
  1197 
  1197 
  1198     // send interval in IDLE phase
  1198     // send interval in IDLE phase
  1199     ec_master_set_send_interval(master, 1000000 / HZ); 
  1199     ec_master_set_send_interval(master, 1000000 / HZ); 
  1200 
  1200 
  1201     EC_MASTER_DBG(master, 1, "Idle thread running with send interval = %d us,"
  1201     EC_MASTER_DBG(master, 1, "Idle thread running with send interval = %u us,"
  1202             " max data size=%d\n", master->send_interval,
  1202             " max data size=%zu\n", master->send_interval,
  1203             master->max_queue_size);
  1203             master->max_queue_size);
  1204 
  1204 
  1205     while (!kthread_should_stop()) {
  1205     while (!kthread_should_stop()) {
  1206         ec_datagram_output_stats(&master->fsm_datagram);
  1206         ec_datagram_output_stats(&master->fsm_datagram);
  1207 
  1207 
  1263     ec_master_t *master = (ec_master_t *) priv_data;
  1263     ec_master_t *master = (ec_master_t *) priv_data;
  1264     ec_slave_t *slave = NULL;
  1264     ec_slave_t *slave = NULL;
  1265     int fsm_exec;
  1265     int fsm_exec;
  1266 
  1266 
  1267     EC_MASTER_DBG(master, 1, "Operation thread running"
  1267     EC_MASTER_DBG(master, 1, "Operation thread running"
  1268             " with fsm interval = %d us, max data size=%d\n",
  1268             " with fsm interval = %u us, max data size=%zu\n",
  1269             master->send_interval, master->max_queue_size);
  1269             master->send_interval, master->max_queue_size);
  1270 
  1270 
  1271     while (!kthread_should_stop()) {
  1271     while (!kthread_should_stop()) {
  1272         ec_datagram_output_stats(&master->fsm_datagram);
  1272         ec_datagram_output_stats(&master->fsm_datagram);
  1273 
  1273 
  1987 #ifdef EC_EOE
  1987 #ifdef EC_EOE
  1988     ec_eoe_t *eoe;
  1988     ec_eoe_t *eoe;
  1989     int eoe_was_running;
  1989     int eoe_was_running;
  1990 #endif
  1990 #endif
  1991 
  1991 
  1992     EC_MASTER_DBG(master, 1, "ecrt_master_deactivate(master = 0x%x)\n",
  1992     EC_MASTER_DBG(master, 1, "ecrt_master_deactivate(master = 0x%p)\n",
  1993             (u32) master);
  1993             master);
  1994 
  1994 
  1995     if (!master->active) {
  1995     if (!master->active) {
  1996         EC_MASTER_WARN(master, "%s: Master not active.\n", __func__);
  1996         EC_MASTER_WARN(master, "%s: Master not active.\n", __func__);
  1997         return;
  1997         return;
  1998     }
  1998     }