From 85822a62428a0089d741711e9c2c2fc3d17c2959 Mon Sep 17 00:00:00 2001 From: Martin Troxler Date: Wed, 12 Jan 2011 14:56:53 +0100 Subject: [PATCH] Optionally compile with trace_printk support --- master/globals.h | 4 ++++ master/master.c | 25 ++++++++++++++++--------- master/master.h | 36 ++++++++++++++++++++++++++++++++++++ master/slave.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 9 deletions(-) diff --git a/master/globals.h b/master/globals.h index d2c135df..abf12f85 100644 --- a/master/globals.h +++ b/master/globals.h @@ -46,6 +46,10 @@ #endif // KERNEL_VERSION(2,6,24) #endif // __KERNEL__ +#ifdef CONFIG_TRACING +//#define USE_TRACE_PRINTK +#endif + /****************************************************************************** * EtherCAT master *****************************************************************************/ diff --git a/master/master.c b/master/master.c index 05525f94..24edd207 100644 --- a/master/master.c +++ b/master/master.c @@ -58,7 +58,11 @@ /** Set to 1 to enable external datagram injection debugging. */ +#ifdef USE_TRACE_PRINTK +#define DEBUG_INJECT 1 +#else #define DEBUG_INJECT 0 +#endif #ifdef EC_HAVE_CYCLES @@ -682,7 +686,7 @@ void ec_master_inject_fsm_datagrams( if (queue_size <= master->max_queue_size) { list_del_init(&datagram->queue); #if DEBUG_INJECT - EC_MASTER_DBG(master, 0, "Injecting fsm datagram %p" + EC_MASTER_DBG(master, 2, "Injecting fsm datagram %p" " size=%zu, queue_size=%zu\n", datagram, datagram->data_size, queue_size); #endif @@ -730,7 +734,7 @@ void ec_master_inject_fsm_datagrams( } #if DEBUG_INJECT else { - EC_MASTER_DBG(master, 0, "Deferred injecting" + EC_MASTER_DBG(master, 2, "Deferred injecting" " of fsm datagram %p" " size=%zu, queue_size=%zu\n", datagram, datagram->data_size, queue_size); @@ -801,7 +805,7 @@ void ec_master_queue_fsm_datagram( } #if DEBUG_INJECT - EC_MASTER_DBG(master, 0, "Requesting fsm datagram %p size=%zu\n", + EC_MASTER_DBG(master, 2, "Requesting fsm datagram %p size=%zu\n", datagram, datagram->data_size); #endif @@ -894,8 +898,8 @@ void ec_master_send_datagrams(ec_master_t *master /**< EtherCAT master */) list_add_tail(&datagram->sent, &sent_datagrams); datagram->index = master->datagram_index++; - EC_MASTER_DBG(master, 2, "adding datagram 0x%02X\n", - datagram->index); + EC_MASTER_DBG(master, 2, "adding datagram %p i=0x%02X size=%zu\n",datagram, + datagram->index,datagram_size); // set "datagram following" flag in previous frame if (follows_word) @@ -921,8 +925,8 @@ void ec_master_send_datagrams(ec_master_t *master /**< EtherCAT master */) unsigned int frame_offset = domain_fmmu->logical_start_address-datagram_address; memcpy(frame_datagram_data+frame_offset, domain_data, domain_fmmu->data_size); if (unlikely(master->debug_level > 1)) { - EC_DBG("sending dg 0x%02X fmmu %u fp=%u dp=%zu size=%u\n", - datagram->index, i,frame_offset,domain_data-datagram->data,domain_fmmu->data_size); + EC_DBG("sending dg %p i=0x%02X fmmu %u fp=%u dp=%zu size=%u\n", + datagram,datagram->index, i,frame_offset,domain_data-datagram->data,domain_fmmu->data_size); ec_print_data(domain_data, domain_fmmu->data_size); } } @@ -1097,8 +1101,9 @@ void ec_master_receive_datagrams(ec_master_t *master, /**< EtherCAT master */ unsigned int frame_offset = domain_fmmu->logical_start_address-datagram_address; memcpy(domain_data, frame_datagram_data+frame_offset, domain_fmmu->data_size); if (unlikely(master->debug_level > 1)) { - EC_DBG("receiving dg 0x%02X fmmu %u fp=%u dp=%zu size=%u\n", - datagram->index, i,frame_offset,domain_data-datagram->data,domain_fmmu->data_size); + EC_DBG("receiving dg %p i=0x%02X fmmu %u fp=%u dp=%zu size=%u\n", + datagram,datagram->index, i, + frame_offset,domain_data-datagram->data,domain_fmmu->data_size); ec_print_data(domain_data, domain_fmmu->data_size); } } @@ -1122,6 +1127,8 @@ void ec_master_receive_datagrams(ec_master_t *master, /**< EtherCAT master */ datagram->cycles_received = master->main_device.cycles_poll; #endif datagram->jiffies_received = master->main_device.jiffies_poll; + EC_MASTER_DBG(master, 2, "removing datagram %p i=0x%02X\n",datagram, + datagram->index); list_del_init(&datagram->queue); } } diff --git a/master/master.h b/master/master.h index 45222d77..a3ddb180 100644 --- a/master/master.h +++ b/master/master.h @@ -61,8 +61,16 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_MASTER_INFO(master, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT %u: " fmt, master->index, ##args); \ + printk(KERN_INFO "EtherCAT %u: " fmt, master->index, ##args); \ + } while (0) +#else #define EC_MASTER_INFO(master, fmt, args...) \ printk(KERN_INFO "EtherCAT %u: " fmt, master->index, ##args) +#endif /** Convenience macro for printing master-specific errors to syslog. * @@ -73,8 +81,16 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_MASTER_ERR(master, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT ERROR %u: " fmt, master->index, ##args); \ + printk(KERN_ERR "EtherCAT ERROR %u: " fmt, master->index, ##args); \ + } while (0) +#else #define EC_MASTER_ERR(master, fmt, args...) \ printk(KERN_ERR "EtherCAT ERROR %u: " fmt, master->index, ##args) +#endif /** Convenience macro for printing master-specific warnings to syslog. * @@ -85,8 +101,16 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_MASTER_WARN(master, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT WARNING %u: " fmt, master->index, ##args); \ + printk(KERN_WARNING "EtherCAT WARNING %u: " fmt, master->index, ##args); \ + } while (0) +#else #define EC_MASTER_WARN(master, fmt, args...) \ printk(KERN_WARNING "EtherCAT WARNING %u: " fmt, master->index, ##args) +#endif /** Convenience macro for printing master-specific debug messages to syslog. * @@ -97,6 +121,17 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_MASTER_DBG(master, level, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT DEBUG%u %u: " fmt, \ + level,master->index, ##args); \ + if (master->debug_level >= level) { \ + printk(KERN_DEBUG "EtherCAT DEBUG %u: " fmt, \ + master->index, ##args); \ + } \ + } while (0) +#else #define EC_MASTER_DBG(master, level, fmt, args...) \ do { \ if (master->debug_level >= level) { \ @@ -104,6 +139,7 @@ master->index, ##args); \ } \ } while (0) +#endif /*****************************************************************************/ diff --git a/master/slave.h b/master/slave.h index 906d6cc9..8a38740e 100644 --- a/master/slave.h +++ b/master/slave.h @@ -59,9 +59,19 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_SLAVE_INFO(slave, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT %u-%u: " fmt, slave->master->index, \ + slave->ring_position, ##args); \ + printk(KERN_INFO "EtherCAT %u-%u: " fmt, slave->master->index, \ + slave->ring_position, ##args); \ + } while (0) +#else #define EC_SLAVE_INFO(slave, fmt, args...) \ printk(KERN_INFO "EtherCAT %u-%u: " fmt, slave->master->index, \ slave->ring_position, ##args) +#endif /** Convenience macro for printing slave-specific errors to syslog. * @@ -73,9 +83,19 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_SLAVE_ERR(slave, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT ERROR %u-%u: " fmt, slave->master->index, \ + slave->ring_position, ##args); \ + printk(KERN_ERR "EtherCAT ERROR %u-%u: " fmt, slave->master->index, \ + slave->ring_position, ##args); \ + } while (0) +#else #define EC_SLAVE_ERR(slave, fmt, args...) \ printk(KERN_ERR "EtherCAT ERROR %u-%u: " fmt, slave->master->index, \ slave->ring_position, ##args) +#endif /** Convenience macro for printing slave-specific warnings to syslog. * @@ -87,9 +107,19 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_SLAVE_WARN(slave, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT WARNING %u-%u: " fmt, \ + slave->master->index, slave->ring_position, ##args); \ + printk(KERN_WARNING "EtherCAT WARNING %u-%u: " fmt, \ + slave->master->index, slave->ring_position, ##args); \ + } while (0) +#else #define EC_SLAVE_WARN(slave, fmt, args...) \ printk(KERN_WARNING "EtherCAT WARNING %u-%u: " fmt, \ slave->master->index, slave->ring_position, ##args) +#endif /** Convenience macro for printing slave-specific debug messages to syslog. * @@ -101,6 +131,17 @@ * \param fmt format string (like in printf()) * \param args arguments (optional) */ +#ifdef USE_TRACE_PRINTK +#define EC_SLAVE_DBG(slave, level, fmt, args...) \ + do { \ + __trace_printk(_THIS_IP_,"EtherCAT DEBUG%u %u-%u: " fmt, \ + level,slave->master->index, slave->ring_position, ##args); \ + if (slave->master->debug_level >= level) { \ + printk(KERN_DEBUG "EtherCAT DEBUG %u-%u: " fmt, \ + slave->master->index, slave->ring_position, ##args); \ + } \ + } while (0) +#else #define EC_SLAVE_DBG(slave, level, fmt, args...) \ do { \ if (slave->master->debug_level >= level) { \ @@ -108,6 +149,7 @@ slave->master->index, slave->ring_position, ##args); \ } \ } while (0) +#endif /*****************************************************************************/