master/fsm_master.c
changeset 652 15cff76b66c7
parent 650 c68995623e94
child 656 370aa8c2d1b1
equal deleted inserted replaced
651:8c11399cc911 652:15cff76b66c7
   225     if (fsm->topology_change_pending &&
   225     if (fsm->topology_change_pending &&
   226             master->mode == EC_MASTER_MODE_IDLE) {
   226             master->mode == EC_MASTER_MODE_IDLE) {
   227         fsm->topology_change_pending = 0;
   227         fsm->topology_change_pending = 0;
   228         fsm->tainted = 0;
   228         fsm->tainted = 0;
   229         fsm->idle = 0;
   229         fsm->idle = 0;
       
   230         fsm->scan_jiffies = jiffies;
   230 
   231 
   231         ec_master_eoe_stop(master);
   232         ec_master_eoe_stop(master);
   232         ec_master_destroy_slaves(master);
   233         ec_master_destroy_slaves(master);
   233 
   234 
   234         master->slave_count = datagram->working_counter;
   235         master->slave_count = datagram->working_counter;
   742 }
   743 }
   743 
   744 
   744 /*****************************************************************************/
   745 /*****************************************************************************/
   745 
   746 
   746 /**
   747 /**
   747    Master state: SCAN SLAVES.
   748  * Master state: SCAN SLAVES.
   748    Executes the sub-statemachine for the scanning of a slave.
   749  * Executes the sub-statemachine for the scanning of a slave.
   749 */
   750  */
   750 
   751 
   751 void ec_fsm_master_state_scan_slaves(ec_fsm_master_t *fsm /**< master state machine */)
   752 void ec_fsm_master_state_scan_slaves(
       
   753         ec_fsm_master_t *fsm /**< master state machine */
       
   754         )
   752 {
   755 {
   753     ec_master_t *master = fsm->master;
   756     ec_master_t *master = fsm->master;
   754     ec_slave_t *slave = fsm->slave;
   757     ec_slave_t *slave = fsm->slave;
   755 
   758 
   756     if (ec_fsm_slave_exec(&fsm->fsm_slave)) // execute slave state machine
   759     if (ec_fsm_slave_exec(&fsm->fsm_slave)) // execute slave state machine
   762         ec_fsm_slave_start_scan(&fsm->fsm_slave, fsm->slave);
   765         ec_fsm_slave_start_scan(&fsm->fsm_slave, fsm->slave);
   763         ec_fsm_slave_exec(&fsm->fsm_slave); // execute immediately
   766         ec_fsm_slave_exec(&fsm->fsm_slave); // execute immediately
   764         return;
   767         return;
   765     }
   768     }
   766 
   769 
   767     EC_INFO("Bus scanning completed.\n");
   770     EC_INFO("Bus scanning completed in %u ms.\n",
       
   771             (u32) (jiffies - fsm->scan_jiffies) * 1000 / HZ);
   768 
   772 
   769     // set initial states of all slaves to PREOP to make mailbox
   773     // set initial states of all slaves to PREOP to make mailbox
   770     // communication possible
   774     // communication possible
   771     list_for_each_entry(slave, &master->slaves, list) {
   775     list_for_each_entry(slave, &master->slaves, list) {
   772         if (slave->requested_state == EC_SLAVE_STATE_UNKNOWN)
   776         if (slave->requested_state == EC_SLAVE_STATE_UNKNOWN)