diff -r ea38efeeb7b3 -r 6aa393418fb3 master/master.c --- a/master/master.c Fri May 07 15:26:26 2010 +0200 +++ b/master/master.c Tue May 11 13:57:58 2010 +0200 @@ -139,6 +139,7 @@ master->phase = EC_ORPHANED; master->active = 0; + master->config_changed = 0; master->injection_seq_fsm = 0; master->injection_seq_rt = 0; @@ -153,7 +154,7 @@ #endif master->dc_jiffies_app_time = 0; master->app_start_time = 0ULL; - master->has_start_time = 0; + master->has_app_time = 0; master->scan_busy = 0; master->allow_scan = 1; @@ -220,7 +221,7 @@ ret = ec_datagram_prealloc(&master->fsm_datagram, EC_MAX_DATA_SIZE); if (ret < 0) { ec_datagram_clear(&master->fsm_datagram); - EC_ERR("Failed to allocate FSM datagram.\n"); + EC_MASTER_ERR(master, "Failed to allocate FSM datagram.\n"); goto out_clear_backup; } @@ -233,7 +234,8 @@ ret = ec_datagram_apwr(&master->ref_sync_datagram, 0, 0x0910, 8); if (ret < 0) { ec_datagram_clear(&master->ref_sync_datagram); - EC_ERR("Failed to allocate reference synchronisation datagram.\n"); + EC_MASTER_ERR(master, "Failed to allocate reference" + " synchronisation datagram.\n"); goto out_clear_fsm; } @@ -243,7 +245,8 @@ ret = ec_datagram_prealloc(&master->sync_datagram, 4); if (ret < 0) { ec_datagram_clear(&master->sync_datagram); - EC_ERR("Failed to allocate synchronisation datagram.\n"); + EC_MASTER_ERR(master, "Failed to allocate" + " synchronisation datagram.\n"); goto out_clear_ref_sync; } @@ -253,7 +256,8 @@ ret = ec_datagram_brd(&master->sync_mon_datagram, 0x092c, 4); if (ret < 0) { ec_datagram_clear(&master->sync_mon_datagram); - EC_ERR("Failed to allocate sync monitoring datagram.\n"); + EC_MASTER_ERR(master, "Failed to allocate sync" + " monitoring datagram.\n"); goto out_clear_sync; } @@ -282,7 +286,7 @@ "EtherCAT%u", master->index); #endif if (IS_ERR(master->class_device)) { - EC_ERR("Failed to create class device!\n"); + EC_MASTER_ERR(master, "Failed to create class device!\n"); ret = PTR_ERR(master->class_device); goto out_clear_cdev; } @@ -386,33 +390,24 @@ // external requests are obsolete, so we wake pending waiters and remove // them from the list - // - // SII requests - while (1) { - ec_sii_write_request_t *request; - if (list_empty(&master->sii_requests)) - break; - // get first request - request = list_entry(master->sii_requests.next, - ec_sii_write_request_t, list); + + while (!list_empty(&master->sii_requests)) { + ec_sii_write_request_t *request = + list_entry(master->sii_requests.next, + ec_sii_write_request_t, list); list_del_init(&request->list); // dequeue - EC_INFO("Discarding SII request, slave %u does not exist anymore.\n", - request->slave->ring_position); + EC_MASTER_WARN(master, "Discarding SII request, slave %u about" + " to be deleted.\n", request->slave->ring_position); request->state = EC_INT_REQUEST_FAILURE; wake_up(&master->sii_queue); } - // Register requests - while (1) { - ec_reg_request_t *request; - if (list_empty(&master->reg_requests)) - break; - // get first request - request = list_entry(master->reg_requests.next, - ec_reg_request_t, list); + while (!list_empty(&master->reg_requests)) { + ec_reg_request_t *request = + list_entry(master->reg_requests.next, ec_reg_request_t, list); list_del_init(&request->list); // dequeue - EC_INFO("Discarding Reg request, slave %u does not exist anymore.\n", - request->slave->ring_position); + EC_MASTER_WARN(master, "Discarding register request, slave %u" + " about to be deleted.\n", request->slave->ring_position); request->state = EC_INT_REQUEST_FAILURE; wake_up(&master->reg_queue); } @@ -420,51 +415,6 @@ for (slave = master->slaves; slave < master->slaves + master->slave_count; slave++) { - // SDO requests - while (1) { - ec_master_sdo_request_t *request; - if (list_empty(&slave->slave_sdo_requests)) - break; - // get first request - request = list_entry(slave->slave_sdo_requests.next, - ec_master_sdo_request_t, list); - list_del_init(&request->list); // dequeue - EC_INFO("Discarding SDO request," - " slave %u does not exist anymore.\n", - slave->ring_position); - request->req.state = EC_INT_REQUEST_FAILURE; - wake_up(&slave->sdo_queue); - } - // FoE requests - while (1) { - ec_master_foe_request_t *request; - if (list_empty(&slave->foe_requests)) - break; - // get first request - request = list_entry(slave->foe_requests.next, - ec_master_foe_request_t, list); - list_del_init(&request->list); // dequeue - EC_INFO("Discarding FoE request," - " slave %u does not exist anymore.\n", - slave->ring_position); - request->req.state = EC_INT_REQUEST_FAILURE; - wake_up(&slave->foe_queue); - } - // SoE requests - while (1) { - ec_master_soe_request_t *request; - if (list_empty(&slave->soe_requests)) - break; - // get first request - request = list_entry(slave->soe_requests.next, - ec_master_soe_request_t, list); - list_del_init(&request->list); // dequeue - EC_INFO("Discarding SoE request," - " slave %u does not exist anymore.\n", - slave->ring_position); - request->req.state = EC_INT_REQUEST_FAILURE; - wake_up(&slave->soe_queue); - } ec_slave_clear(slave); } @@ -532,11 +482,12 @@ const char *name /**< Thread name. */ ) { - EC_INFO("Starting %s thread.\n", name); + EC_MASTER_INFO(master, "Starting %s thread.\n", name); master->thread = kthread_run(thread_func, master, name); if (IS_ERR(master->thread)) { int err = (int) PTR_ERR(master->thread); - EC_ERR("Failed to start master thread (error %i)!\n", err); + EC_MASTER_ERR(master, "Failed to start master thread (error %i)!\n", + err); master->thread = NULL; return err; } @@ -555,16 +506,15 @@ unsigned long sleep_jiffies; if (!master->thread) { - EC_WARN("ec_master_thread_stop(): Already finished!\n"); + EC_MASTER_WARN(master, "%s(): Already finished!\n", __func__); return; } - if (master->debug_level) - EC_DBG("Stopping master thread.\n"); + EC_MASTER_DBG(master, 1, "Stopping master thread.\n"); kthread_stop(master->thread); master->thread = NULL; - EC_INFO("Master thread exited.\n"); + EC_MASTER_INFO(master, "Master thread exited.\n"); if (master->fsm_datagram.state != EC_DATAGRAM_SENT) return; @@ -584,8 +534,7 @@ { int ret; - if (master->debug_level) - EC_DBG("ORPHANED -> IDLE.\n"); + EC_MASTER_DBG(master, 1, "ORPHANED -> IDLE.\n"); master->send_cb = ec_master_internal_send_cb; master->receive_cb = ec_master_internal_receive_cb; @@ -606,8 +555,7 @@ */ void ec_master_leave_idle_phase(ec_master_t *master /**< EtherCAT master */) { - if (master->debug_level) - EC_DBG("IDLE -> ORPHANED.\n"); + EC_MASTER_DBG(master, 1, "IDLE -> ORPHANED.\n"); master->phase = EC_ORPHANED; @@ -633,8 +581,7 @@ ec_eoe_t *eoe; #endif - if (master->debug_level) - EC_DBG("IDLE -> OPERATION.\n"); + EC_MASTER_DBG(master, 1, "IDLE -> OPERATION.\n"); down(&master->config_sem); master->allow_config = 0; // temporarily disable slave configuration @@ -645,12 +592,13 @@ ret = wait_event_interruptible(master->config_queue, !master->config_busy); if (ret) { - EC_INFO("Finishing slave configuration interrupted by signal.\n"); + EC_MASTER_INFO(master, "Finishing slave configuration" + " interrupted by signal.\n"); goto out_allow; } - if (master->debug_level) - EC_DBG("Waiting for pending slave configuration returned.\n"); + EC_MASTER_DBG(master, 1, "Waiting for pending slave" + " configuration returned.\n"); } else { up(&master->config_sem); } @@ -665,12 +613,13 @@ // wait for slave scan to complete ret = wait_event_interruptible(master->scan_queue, !master->scan_busy); if (ret) { - EC_INFO("Waiting for slave scan interrupted by signal.\n"); + EC_MASTER_INFO(master, "Waiting for slave scan" + " interrupted by signal.\n"); goto out_allow; } - if (master->debug_level) - EC_DBG("Waiting for pending slave scan returned.\n"); + EC_MASTER_DBG(master, 1, "Waiting for pending" + " slave scan returned.\n"); } // set states for all slaves @@ -711,8 +660,7 @@ if (master->active) ecrt_master_deactivate(master); - if (master->debug_level) - EC_DBG("OPERATION -> IDLE.\n"); + EC_MASTER_DBG(master, 1, "OPERATION -> IDLE.\n"); master->phase = EC_IDLE; } @@ -739,11 +687,9 @@ if (queue_size <= master->max_queue_size) { list_del_init(&datagram->queue); #if DEBUG_INJECT - if (master->debug_level) { - EC_DBG("Injecting external datagram %08x size=%u," - " queue_size=%u\n", (unsigned int) datagram, - datagram->data_size, queue_size); - } + EC_MASTER_DBG(master, 0, "Injecting external datagram %08x" + " size=%u, queue_size=%u\n", (unsigned int) datagram, + datagram->data_size, queue_size); #endif #ifdef EC_HAVE_CYCLES datagram->cycles_sent = 0; @@ -755,7 +701,7 @@ if (datagram->data_size > master->max_queue_size) { list_del_init(&datagram->queue); datagram->state = EC_DATAGRAM_ERROR; - EC_ERR("External datagram %p is too large," + EC_MASTER_ERR(master, "External datagram %p is too large," " size=%u, max_queue_size=%u\n", datagram, datagram->data_size, master->max_queue_size); @@ -782,14 +728,15 @@ time_us = (unsigned int) ((jiffies - datagram->jiffies_sent) * 1000000 / HZ); #endif - EC_ERR("Timeout %u us: injecting external datagram %p" - " size=%u, max_queue_size=%u\n", - time_us, datagram, + EC_MASTER_ERR(master, "Timeout %u us: Injecting" + " external datagram %p size=%u," + " max_queue_size=%u\n", time_us, datagram, datagram->data_size, master->max_queue_size); } #if DEBUG_INJECT - else if (master->debug_level) { - EC_DBG("Deferred injecting of external datagram %p" + else { + EC_MASTER_DBG(master, 0, "Deferred injecting" + " of external datagram %p" " size=%u, queue_size=%u\n", datagram, datagram->data_size, queue_size); } @@ -838,10 +785,8 @@ } #if DEBUG_INJECT - if (master->debug_level) { - EC_DBG("Requesting external datagram %p size=%u\n", - datagram, datagram->data_size); - } + EC_MASTER_DBG(master, 0, "Requesting external datagram %p size=%u\n", + datagram, datagram->data_size); #endif list_add_tail(&datagram->queue, &master->external_datagram_queue); @@ -872,8 +817,7 @@ list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { if (queued_datagram == datagram) { datagram->skip_count++; - if (master->debug_level) - EC_DBG("skipping datagram %p.\n", datagram); + EC_MASTER_DBG(master, 1, "skipping datagram %p.\n", datagram); datagram->state = EC_DATAGRAM_QUEUED; return; } @@ -922,8 +866,7 @@ frame_count = 0; INIT_LIST_HEAD(&sent_datagrams); - if (unlikely(master->debug_level > 1)) - EC_DBG("ec_master_send_datagrams\n"); + EC_MASTER_DBG(master, 2, "ec_master_send_datagrams\n"); do { // fetch pointer to transmit socket buffer @@ -947,8 +890,8 @@ list_add_tail(&datagram->sent, &sent_datagrams); datagram->index = master->datagram_index++; - if (unlikely(master->debug_level > 1)) - EC_DBG("adding datagram 0x%02X\n", datagram->index); + EC_MASTER_DBG(master, 2, "adding datagram 0x%02X\n", + datagram->index); // set "datagram following" flag in previous frame if (follows_word) @@ -994,8 +937,7 @@ } if (list_empty(&sent_datagrams)) { - if (unlikely(master->debug_level > 1)) - EC_DBG("nothing to send.\n"); + EC_MASTER_DBG(master, 2, "nothing to send.\n"); break; } @@ -1007,8 +949,7 @@ while (cur_data - frame_data < ETH_ZLEN - ETH_HLEN) EC_WRITE_U8(cur_data++, 0x00); - if (unlikely(master->debug_level > 1)) - EC_DBG("frame size: %zu\n", cur_data - frame_data); + EC_MASTER_DBG(master, 2, "frame size: %zu\n", cur_data - frame_data); // send frame ec_device_send(&master->main_device, cur_data - frame_data); @@ -1034,8 +975,8 @@ #ifdef EC_HAVE_CYCLES if (unlikely(master->debug_level > 1)) { cycles_end = get_cycles(); - EC_DBG("ec_master_send_datagrams sent %u frames in %uus.\n", - frame_count, + EC_MASTER_DBG(master, 0, "ec_master_send_datagrams" + " sent %u frames in %uus.\n", frame_count, (unsigned int) (cycles_end - cycles_start) * 1000 / cpu_khz); } #endif @@ -1063,7 +1004,8 @@ if (unlikely(size < EC_FRAME_HEADER_SIZE)) { if (master->debug_level) { - EC_DBG("Corrupted frame received (size %zu < %u byte):\n", + EC_MASTER_DBG(master, 0, "Corrupted frame received" + " (size %zu < %u byte):\n", size, EC_FRAME_HEADER_SIZE); ec_print_data(frame_data, size); } @@ -1080,7 +1022,8 @@ if (unlikely(frame_size > size)) { if (master->debug_level) { - EC_DBG("Corrupted frame received (invalid frame size %zu for " + EC_MASTER_DBG(master, 0, "Corrupted frame received" + " (invalid frame size %zu for " "received size %zu):\n", frame_size, size); ec_print_data(frame_data, size); } @@ -1101,8 +1044,8 @@ if (unlikely(cur_data - frame_data + data_size + EC_DATAGRAM_FOOTER_SIZE > size)) { if (master->debug_level) { - EC_DBG("Corrupted frame received (invalid data size %zu):\n", - data_size); + EC_MASTER_DBG(master, 0, "Corrupted frame received" + " (invalid data size %zu):\n", data_size); ec_print_data(frame_data, size); } master->stats.corrupted++; @@ -1128,7 +1071,7 @@ ec_master_output_stats(master); if (unlikely(master->debug_level > 0)) { - EC_DBG("UNMATCHED datagram:\n"); + EC_MASTER_DBG(master, 0, "UNMATCHED datagram:\n"); ec_print_data(cur_data - EC_DATAGRAM_HEADER_SIZE, EC_DATAGRAM_HEADER_SIZE + data_size + EC_DATAGRAM_FOOTER_SIZE); @@ -1192,17 +1135,20 @@ master->stats.output_jiffies = jiffies; if (master->stats.timeouts) { - EC_WARN("%u datagram%s TIMED OUT!\n", master->stats.timeouts, + EC_MASTER_WARN(master, "%u datagram%s TIMED OUT!\n", + master->stats.timeouts, master->stats.timeouts == 1 ? "" : "s"); master->stats.timeouts = 0; } if (master->stats.corrupted) { - EC_WARN("%u frame%s CORRUPTED!\n", master->stats.corrupted, + EC_MASTER_WARN(master, "%u frame%s CORRUPTED!\n", + master->stats.corrupted, master->stats.corrupted == 1 ? "" : "s"); master->stats.corrupted = 0; } if (master->stats.unmatched) { - EC_WARN("%u datagram%s UNMATCHED!\n", master->stats.unmatched, + EC_MASTER_WARN(master, "%u datagram%s UNMATCHED!\n", + master->stats.unmatched, master->stats.unmatched == 1 ? "" : "s"); master->stats.unmatched = 0; } @@ -1299,10 +1245,9 @@ // send interval in IDLE phase ec_master_set_send_interval(master, 1000000 / HZ); - if (master->debug_level) - EC_DBG("Idle thread running with send interval = %d us," - " max data size=%d\n", master->send_interval, - master->max_queue_size); + EC_MASTER_DBG(master, 1, "Idle thread running with send interval = %d us," + " max data size=%d\n", master->send_interval, + master->max_queue_size); while (!kthread_should_stop()) { ec_datagram_output_stats(&master->fsm_datagram); @@ -1351,8 +1296,7 @@ } } - if (master->debug_level) - EC_DBG("Master IDLE thread exiting...\n"); + EC_MASTER_DBG(master, 1, "Master IDLE thread exiting...\n"); return 0; } @@ -1367,11 +1311,9 @@ ec_slave_t *slave = NULL; int fsm_exec; - if (master->debug_level) - EC_DBG("Operation thread running with fsm interval = %d us," - " max data size=%d\n", - master->send_interval, - master->max_queue_size); + EC_MASTER_DBG(master, 1, "Operation thread running" + " with fsm interval = %d us, max data size=%d\n", + master->send_interval, master->max_queue_size); while (!kthread_should_stop()) { ec_datagram_output_stats(&master->fsm_datagram); @@ -1411,8 +1353,7 @@ #endif } - if (master->debug_level) - EC_DBG("Master OP thread exiting...\n"); + EC_MASTER_DBG(master, 1, "Master OP thread exiting...\n"); return 0; } @@ -1426,7 +1367,7 @@ struct sched_param param = { .sched_priority = 0 }; if (master->eoe_thread) { - EC_WARN("EoE already running!\n"); + EC_MASTER_WARN(master, "EoE already running!\n"); return; } @@ -1434,16 +1375,18 @@ return; if (!master->send_cb || !master->receive_cb) { - EC_WARN("No EoE processing because of missing callbacks!\n"); + EC_MASTER_WARN(master, "No EoE processing" + " because of missing callbacks!\n"); return; } - EC_INFO("Starting EoE thread.\n"); + EC_MASTER_INFO(master, "Starting EoE thread.\n"); master->eoe_thread = kthread_run(ec_master_eoe_thread, master, "EtherCAT-EoE"); if (IS_ERR(master->eoe_thread)) { int err = (int) PTR_ERR(master->eoe_thread); - EC_ERR("Failed to start EoE thread (error %i)!\n", err); + EC_MASTER_ERR(master, "Failed to start EoE thread (error %i)!\n", + err); master->eoe_thread = NULL; return; } @@ -1459,11 +1402,11 @@ void ec_master_eoe_stop(ec_master_t *master /**< EtherCAT master */) { if (master->eoe_thread) { - EC_INFO("Stopping EoE thread.\n"); + EC_MASTER_INFO(master, "Stopping EoE thread.\n"); kthread_stop(master->eoe_thread); master->eoe_thread = NULL; - EC_INFO("EoE thread exited.\n"); + EC_MASTER_INFO(master, "EoE thread exited.\n"); } } @@ -1477,8 +1420,7 @@ ec_eoe_t *eoe; unsigned int none_open, sth_to_send, all_idle; - if (master->debug_level) - EC_DBG("EoE thread running.\n"); + EC_MASTER_DBG(master, 1, "EoE thread running.\n"); while (!kthread_should_stop()) { none_open = 1; @@ -1527,8 +1469,7 @@ } } - if (master->debug_level) - EC_DBG("EoE thread exiting...\n"); + EC_MASTER_DBG(master, 1, "EoE thread exiting...\n"); return 0; } #endif @@ -1802,13 +1743,14 @@ ) { if (level > 2) { - EC_ERR("Invalid debug level %u!\n", level); + EC_MASTER_ERR(master, "Invalid debug level %u!\n", level); return -EINVAL; } if (level != master->debug_level) { master->debug_level = level; - EC_INFO("Master debug level set to %u.\n", master->debug_level); + EC_MASTER_INFO(master, "Master debug level set to %u.\n", + master->debug_level); } return 0; @@ -1888,7 +1830,7 @@ return; if (ec_master_calc_topology_rec(master, NULL, &slave_position)) - EC_ERR("Failed to calculate bus topology.\n"); + EC_MASTER_ERR(master, "Failed to calculate bus topology.\n"); } /*****************************************************************************/ @@ -1930,6 +1872,37 @@ ec_master_calc_transmission_delays(master); } +/*****************************************************************************/ + +/** Request OP state for configured slaves. + */ +void ec_master_request_op( + ec_master_t *master /**< EtherCAT master. */ + ) +{ + unsigned int i; + ec_slave_t *slave; + + if (!master->active) + return; + + EC_MASTER_DBG(master, 1, "Requesting OP...\n"); + + // request OP for all configured slaves + for (i = 0; i < master->slave_count; i++) { + slave = master->slaves + i; + if (slave->config) { + ec_slave_request_state(slave, EC_SLAVE_STATE_OP); + } + } + + // always set DC reference clock to OP + if (master->dc_ref_clock) { + ec_slave_request_state(master->dc_ref_clock, + EC_SLAVE_STATE_OP); + } +} + /****************************************************************************** * Application interface *****************************************************************************/ @@ -1943,11 +1916,11 @@ ec_domain_t *domain, *last_domain; unsigned int index; - if (master->debug_level) - EC_DBG("ecrt_master_create_domain(master = 0x%p)\n", master); + EC_MASTER_DBG(master, 1, "ecrt_master_create_domain(master = 0x%p)\n", + master); if (!(domain = (ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) { - EC_ERR("Error allocating domain memory!\n"); + EC_MASTER_ERR(master, "Error allocating domain memory!\n"); return ERR_PTR(-ENOMEM); } @@ -1965,8 +1938,7 @@ up(&master->master_sem); - if (master->debug_level) - EC_DBG("Created domain %u.\n", domain->index); + EC_MASTER_DBG(master, 1, "Created domain %u.\n", domain->index); return domain; } @@ -1992,11 +1964,10 @@ int eoe_was_running; #endif - if (master->debug_level) - EC_DBG("ecrt_master_activate(master = 0x%p)\n", master); + EC_MASTER_DBG(master, 1, "ecrt_master_activate(master = 0x%p)\n", master); if (master->active) { - EC_WARN("%s: Master already active!\n", __func__); + EC_MASTER_WARN(master, "%s: Master already active!\n", __func__); return 0; } @@ -2008,17 +1979,12 @@ ret = ec_domain_finish(domain, domain_offset); if (ret < 0) { up(&master->master_sem); - EC_ERR("Failed to finish domain 0x%p!\n", domain); + EC_MASTER_ERR(master, "Failed to finish domain 0x%p!\n", domain); return ret; } domain_offset += domain->data_size; } - // always set DC reference clock to OP - if (master->dc_ref_clock) { - ec_slave_request_state(master->dc_ref_clock, EC_SLAVE_STATE_OP); - } - up(&master->master_sem); // restart EoE process and master thread with new locking @@ -2029,8 +1995,7 @@ ec_master_eoe_stop(master); #endif - if (master->debug_level) - EC_DBG("FSM datagram is %p.\n", &master->fsm_datagram); + EC_MASTER_DBG(master, 1, "FSM datagram is %p.\n", &master->fsm_datagram); master->injection_seq_fsm = 0; master->injection_seq_rt = 0; @@ -2047,13 +2012,17 @@ ret = ec_master_thread_start(master, ec_master_operation_thread, "EtherCAT-OP"); if (ret < 0) { - EC_ERR("Failed to start master thread!\n"); + EC_MASTER_ERR(master, "Failed to start master thread!\n"); return ret; } master->allow_config = 1; // request the current configuration master->allow_scan = 1; // allow re-scanning on topology change master->active = 1; + + // notify state machine, that the configuration shall now be applied + master->config_changed = 1; + return 0; } @@ -2067,11 +2036,11 @@ int eoe_was_running; #endif - if (master->debug_level) - EC_DBG("ecrt_master_deactivate(master = 0x%x)\n", (u32) master); + EC_MASTER_DBG(master, 1, "ecrt_master_deactivate(master = 0x%x)\n", + (u32) master); if (!master->active) { - EC_WARN("%s: Master not active.\n", __func__); + EC_MASTER_WARN(master, "%s: Master not active.\n", __func__); return; } @@ -2113,7 +2082,7 @@ master->app_time = 0ULL; master->app_start_time = 0ULL; - master->has_start_time = 0; + master->has_app_time = 0; #ifdef EC_EOE if (eoe_was_running) { @@ -2122,7 +2091,7 @@ #endif if (ec_master_thread_start(master, ec_master_idle_thread, "EtherCAT-IDLE")) - EC_WARN("Failed to restart master thread!\n"); + EC_MASTER_WARN(master, "Failed to restart master thread!\n"); master->allow_scan = 1; master->allow_config = 1; @@ -2195,7 +2164,8 @@ time_us = (unsigned int) ((master->main_device.jiffies_poll - datagram->jiffies_sent) * 1000000 / HZ); #endif - EC_DBG("TIMED OUT datagram %p, index %02X waited %u us.\n", + EC_MASTER_DBG(master, 0, "TIMED OUT datagram %p," + " index %02X waited %u us.\n", datagram, datagram->index, time_us); } } @@ -2229,10 +2199,10 @@ unsigned int found = 0; - if (master->debug_level) - EC_DBG("ecrt_master_slave_config(master = 0x%p, alias = %u, " - "position = %u, vendor_id = 0x%08x, product_code = 0x%08x)\n", - master, alias, position, vendor_id, product_code); + EC_MASTER_DBG(master, 1, "ecrt_master_slave_config(master = 0x%p," + " alias = %u, position = %u, vendor_id = 0x%08x," + " product_code = 0x%08x)\n", + master, alias, position, vendor_id, product_code); list_for_each_entry(sc, &master->configs, list) { if (sc->alias == alias && sc->position == position) { @@ -2243,20 +2213,21 @@ if (found) { // config with same alias/position already existing if (sc->vendor_id != vendor_id || sc->product_code != product_code) { - EC_ERR("Slave type mismatch. Slave was configured as" - " 0x%08X/0x%08X before. Now configuring with" - " 0x%08X/0x%08X.\n", sc->vendor_id, sc->product_code, + EC_MASTER_ERR(master, "Slave type mismatch. Slave was" + " configured as 0x%08X/0x%08X before. Now configuring" + " with 0x%08X/0x%08X.\n", sc->vendor_id, sc->product_code, vendor_id, product_code); return ERR_PTR(-ENOENT); } } else { - if (master->debug_level) - EC_DBG("Creating slave configuration for %u:%u, 0x%08X/0x%08X.\n", - alias, position, vendor_id, product_code); + EC_MASTER_DBG(master, 1, "Creating slave configuration for %u:%u," + " 0x%08X/0x%08X.\n", + alias, position, vendor_id, product_code); if (!(sc = (ec_slave_config_t *) kmalloc(sizeof(ec_slave_config_t), GFP_KERNEL))) { - EC_ERR("Failed to allocate memory for slave configuration.\n"); + EC_MASTER_ERR(master, "Failed to allocate memory" + " for slave configuration.\n"); return ERR_PTR(-ENOMEM); } @@ -2291,9 +2262,8 @@ int ecrt_master(ec_master_t *master, ec_master_info_t *master_info) { - if (master->debug_level) - EC_DBG("ecrt_master(master = 0x%p, master_info = 0x%p)\n", - master, master_info); + EC_MASTER_DBG(master, 1, "ecrt_master(master = 0x%p," + " master_info = 0x%p)\n", master, master_info); master_info->slave_count = master->slave_count; master_info->link_up = master->main_device.link_state; @@ -2342,10 +2312,9 @@ void ecrt_master_callbacks(ec_master_t *master, void (*send_cb)(void *), void (*receive_cb)(void *), void *cb_data) { - if (master->debug_level) - EC_DBG("ecrt_master_callbacks(master = 0x%p, send_cb = 0x%p, " - " receive_cb = 0x%p, cb_data = 0x%p)\n", master, - send_cb, receive_cb, cb_data); + EC_MASTER_DBG(master, 1, "ecrt_master_callbacks(master = 0x%p," + " send_cb = 0x%p, receive_cb = 0x%p, cb_data = 0x%p)\n", + master, send_cb, receive_cb, cb_data); master->app_send_cb = send_cb; master->app_receive_cb = receive_cb; @@ -2390,9 +2359,10 @@ #endif master->dc_jiffies_app_time = jiffies; - if (unlikely(!master->has_start_time)) { - master->app_start_time = app_time; - master->has_start_time = 1; + if (unlikely(!master->has_app_time)) { + EC_MASTER_DBG(master, 1, "set application start time = %llu\n",app_time); + master->app_start_time = app_time; + master->has_app_time = 1; } }