equal
deleted
inserted
replaced
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; |