# HG changeset patch # User Florian Pose # Date 1239972117 0 # Node ID 3c4923051e43b0f2967c5cb2adb77028b10b7663 # Parent f79d4bb5b23a1f6ab848c62a302c29b0bfc5c019 Clear slave list on link down. diff -r f79d4bb5b23a -r 3c4923051e43 NEWS --- a/NEWS Fri Apr 17 12:03:12 2009 +0000 +++ b/NEWS Fri Apr 17 12:41:57 2009 +0000 @@ -32,6 +32,7 @@ * Added 64-bit data access macros to application header. * Added debug level for all masters as a module parameter. Thanks to Erwin Burgstaller. +* Clear slave list on link down. Changes in 1.4.0: diff -r f79d4bb5b23a -r 3c4923051e43 TODO --- a/TODO Fri Apr 17 12:03:12 2009 +0000 +++ b/TODO Fri Apr 17 12:41:57 2009 +0000 @@ -19,7 +19,6 @@ * Re-work EoE code. * Replace locking callbacks. * Implement EoE callbacks for library. -* Clear slave list on link down. * Rescan command. * Override sync manager size? * Remove ecrt_domain_state()? diff -r f79d4bb5b23a -r 3c4923051e43 master/fsm_master.c --- a/master/fsm_master.c Fri Apr 17 12:03:12 2009 +0000 +++ b/master/fsm_master.c Fri Apr 17 12:41:57 2009 +0000 @@ -73,6 +73,7 @@ fsm->datagram = datagram; fsm->state = ec_fsm_master_state_start; fsm->idle = 0; + fsm->link_state = 0; fsm->slaves_responding = 0; fsm->topology_change_pending = 0; fsm->slave_states = EC_SLAVE_STATE_UNKNOWN; @@ -194,6 +195,16 @@ EC_INFO("%u slave(s) responding.\n", fsm->slaves_responding); } + if (fsm->link_state && !master->main_device.link_state) { // link went down + // clear slave list +#ifdef EC_EOE + ec_master_eoe_stop(master); + ec_master_clear_eoe_handlers(master); +#endif + ec_master_clear_slaves(master); + } + fsm->link_state = master->main_device.link_state; + if (datagram->state != EC_DATAGRAM_RECEIVED) { // link is down ec_fsm_master_restart(fsm); return; diff -r f79d4bb5b23a -r 3c4923051e43 master/fsm_master.h --- a/master/fsm_master.h Fri Apr 17 12:03:12 2009 +0000 +++ b/master/fsm_master.h Fri Apr 17 12:41:57 2009 +0000 @@ -107,6 +107,7 @@ void (*state)(ec_fsm_master_t *); /**< master state function */ int idle; /**< state machine is in idle phase */ unsigned long scan_jiffies; /**< beginning of slave scanning */ + uint8_t link_state; /**< Last main device link state. */ unsigned int slaves_responding; /**< number of responding slaves */ unsigned int topology_change_pending; /**< bus topology changed */ ec_slave_state_t slave_states; /**< states of responding slaves */