# HG changeset patch # User Florian Pose # Date 1141304887 0 # Node ID e6264685dd7b5ba75c34a7eec2c651b6277fe7b4 # Parent 080b46eb6e2d209d51a1026018f8f864c50d23f1 Link-Down-Verhalten verbessert. diff -r 080b46eb6e2d -r e6264685dd7b devices/8139too.c --- a/devices/8139too.c Thu Mar 02 11:19:27 2006 +0000 +++ b/devices/8139too.c Thu Mar 02 13:08:07 2006 +0000 @@ -1925,18 +1925,6 @@ dirty_tx = tp->dirty_tx; tx_left = tp->cur_tx - dirty_tx; - /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - -#if 0 - if (EtherCAT_dev_is_ec(rtl_ec_dev, dev)) - { - rtl_ec_dev.tx_intr_cnt++; - rdtscl(rtl_ec_dev.tx_time); // Get CPU cycles - } -#endif - - /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ - while (tx_left > 0) { int entry = dirty_tx % NUM_TX_DESC; int txstatus; @@ -1967,9 +1955,7 @@ /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ if (EtherCAT_dev_is_ec(rtl_ec_dev, dev)) - { - EtherCAT_dev_state(rtl_ec_dev, EC_DEVICE_STATE_ERROR); - } + EtherCAT_dev_state(rtl_ec_dev, EC_DEVICE_STATE_ERROR); /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ @@ -2156,17 +2142,6 @@ RTL_R16 (RxBufAddr), RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd)); - /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ -#if 0 - if (EtherCAT_dev_is_ec(rtl_ec_dev, dev)) - { - rtl_ec_dev.rx_intr_cnt++; - rdtscl(rtl_ec_dev.rx_time); // Get CPU cycles - } -#endif - - /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ - while ((EtherCAT_dev_is_ec(rtl_ec_dev, dev) || netif_running(dev)) && received < budget && (RTL_R8 (ChipCmd) & RxBufEmpty) == 0) { diff -r 080b46eb6e2d -r e6264685dd7b master/device.c --- a/master/device.c Thu Mar 02 11:19:27 2006 +0000 +++ b/master/device.c Thu Mar 02 13:08:07 2006 +0000 @@ -168,9 +168,8 @@ { struct ethhdr *eth; - if (unlikely(!device->link_state)) { // Link down + if (unlikely(!device->link_state)) // Link down return; - } // Framegröße auf (jetzt bekannte) Länge abschneiden skb_trim(device->tx_skb, length); diff -r 080b46eb6e2d -r e6264685dd7b master/domain.c --- a/master/domain.c Thu Mar 02 11:19:27 2006 +0000 +++ b/master/domain.c Thu Mar 02 13:08:07 2006 +0000 @@ -180,6 +180,23 @@ return 0; } +/*****************************************************************************/ + +/** + Gibt die Anzahl der antwortenden Slaves aus. +*/ + +void ec_domain_response_count(ec_domain_t *domain, /**< Domäne */ + unsigned int count /**< Neue Anzahl */ + ) +{ + if (count != domain->response_count) { + domain->response_count = count; + EC_INFO("Domain %08X state change - %i slaves responding.\n", + (u32) domain, count); + } +} + /****************************************************************************** * * Echtzeitschnittstelle @@ -281,6 +298,12 @@ ec_cyclic_output(master); + if (unlikely(!master->device.link_state)) { + ec_domain_response_count(domain, working_counter_sum); + ec_device_call_isr(&master->device); + return -1; + } + rdtscl(start_ticks); // Sendezeit nehmen timeout_ticks = domain->timeout_us * cpu_khz / 1000; @@ -297,10 +320,7 @@ master->device.state = EC_DEVICE_STATE_READY; master->frames_lost++; ec_cyclic_output(master); - - // Falls Link down... - ec_device_call_isr(&master->device); - + ec_domain_response_count(domain, working_counter_sum); return -1; } @@ -323,12 +343,13 @@ master->device.state = EC_DEVICE_STATE_READY; master->frames_lost++; ec_cyclic_output(master); + ec_domain_response_count(domain, working_counter_sum); return -1; } } if (unlikely(ec_frame_receive(frame) < 0)) { - EC_ERR("Receiving process data failed!\n"); + ec_domain_response_count(domain, working_counter_sum); return -1; } @@ -340,11 +361,7 @@ offset += size; } - if (working_counter_sum != domain->response_count) { - domain->response_count = working_counter_sum; - EC_INFO("Domain %08X state change - %i slaves responding.\n", - (u32) domain, working_counter_sum); - } + ec_domain_response_count(domain, working_counter_sum); return 0; }