master/fsm_master.c
changeset 715 f12ff7c08623
parent 713 ae41cadd25b6
child 716 ac2a81a33d3d
equal deleted inserted replaced
714:898f87414af1 715:f12ff7c08623
    39 /*****************************************************************************/
    39 /*****************************************************************************/
    40 
    40 
    41 #include "globals.h"
    41 #include "globals.h"
    42 #include "master.h"
    42 #include "master.h"
    43 #include "mailbox.h"
    43 #include "mailbox.h"
       
    44 #ifdef EC_EOE
    44 #include "ethernet.h"
    45 #include "ethernet.h"
       
    46 #endif
    45 #include "fsm_master.h"
    47 #include "fsm_master.h"
    46 
    48 
    47 /*****************************************************************************/
    49 /*****************************************************************************/
    48 
    50 
    49 void ec_fsm_master_state_start(ec_fsm_master_t *);
    51 void ec_fsm_master_state_start(ec_fsm_master_t *);
   236             fsm->topology_change_pending = 0;
   238             fsm->topology_change_pending = 0;
   237             fsm->tainted = 0;
   239             fsm->tainted = 0;
   238             fsm->idle = 0;
   240             fsm->idle = 0;
   239             fsm->scan_jiffies = jiffies;
   241             fsm->scan_jiffies = jiffies;
   240 
   242 
       
   243 #ifdef EC_EOE
   241             ec_master_eoe_stop(master);
   244             ec_master_eoe_stop(master);
   242             ec_master_clear_eoe_handlers(master);
   245             ec_master_clear_eoe_handlers(master);
       
   246 #endif
   243             ec_master_destroy_slaves(master);
   247             ec_master_destroy_slaves(master);
   244 
   248 
   245             master->slave_count = datagram->working_counter;
   249             master->slave_count = datagram->working_counter;
   246 
   250 
   247             if (!master->slave_count) {
   251             if (!master->slave_count) {
   810     ec_slave_t *slave = fsm->slave;
   814     ec_slave_t *slave = fsm->slave;
   811 
   815 
   812     if (ec_fsm_slave_exec(&fsm->fsm_slave)) // execute slave state machine
   816     if (ec_fsm_slave_exec(&fsm->fsm_slave)) // execute slave state machine
   813         return;
   817         return;
   814 
   818 
       
   819 #ifdef EC_EOE
   815     if (slave->sii_mailbox_protocols & EC_MBOX_EOE) {
   820     if (slave->sii_mailbox_protocols & EC_MBOX_EOE) {
   816         // create EoE handler for this slave
   821         // create EoE handler for this slave
   817         ec_eoe_t *eoe;
   822         ec_eoe_t *eoe;
   818         if (!(eoe = kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) {
   823         if (!(eoe = kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) {
   819             EC_ERR("Failed to allocate EoE handler memory for slave %u!\n",
   824             EC_ERR("Failed to allocate EoE handler memory for slave %u!\n",
   826         }
   831         }
   827         else {
   832         else {
   828             list_add_tail(&eoe->list, &master->eoe_handlers);
   833             list_add_tail(&eoe->list, &master->eoe_handlers);
   829         }
   834         }
   830     }
   835     }
       
   836 #endif
   831 
   837 
   832     // another slave to fetch?
   838     // another slave to fetch?
   833     if (slave->list.next != &master->slaves) {
   839     if (slave->list.next != &master->slaves) {
   834         fsm->slave = list_entry(slave->list.next, ec_slave_t, list);
   840         fsm->slave = list_entry(slave->list.next, ec_slave_t, list);
   835         ec_fsm_slave_start_scan(&fsm->fsm_slave, fsm->slave);
   841         ec_fsm_slave_start_scan(&fsm->fsm_slave, fsm->slave);
   839 
   845 
   840     EC_INFO("Bus scanning completed in %u ms.\n",
   846     EC_INFO("Bus scanning completed in %u ms.\n",
   841             (u32) (jiffies - fsm->scan_jiffies) * 1000 / HZ);
   847             (u32) (jiffies - fsm->scan_jiffies) * 1000 / HZ);
   842 
   848 
   843     // check if EoE processing has to be started
   849     // check if EoE processing has to be started
       
   850 #ifdef EC_EOE
   844     ec_master_eoe_start(master);
   851     ec_master_eoe_start(master);
       
   852 #endif
   845 
   853 
   846     master->scan_state = EC_REQUEST_COMPLETE;
   854     master->scan_state = EC_REQUEST_COMPLETE;
   847     wake_up_interruptible(&master->scan_queue);
   855     wake_up_interruptible(&master->scan_queue);
   848 
   856 
   849     fsm->state = ec_fsm_master_state_end;
   857     fsm->state = ec_fsm_master_state_end;