236 fsm->tainted = 0; |
237 fsm->tainted = 0; |
237 fsm->idle = 0; |
238 fsm->idle = 0; |
238 fsm->scan_jiffies = jiffies; |
239 fsm->scan_jiffies = jiffies; |
239 |
240 |
240 ec_master_eoe_stop(master); |
241 ec_master_eoe_stop(master); |
|
242 ec_master_clear_eoe_handlers(master); |
241 ec_master_destroy_slaves(master); |
243 ec_master_destroy_slaves(master); |
242 |
244 |
243 master->slave_count = datagram->working_counter; |
245 master->slave_count = datagram->working_counter; |
244 |
246 |
245 if (!master->slave_count) { |
247 if (!master->slave_count) { |
481 // check for pending slave configurations |
483 // check for pending slave configurations |
482 if (ec_fsm_master_action_configure(fsm)) |
484 if (ec_fsm_master_action_configure(fsm)) |
483 return; |
485 return; |
484 } |
486 } |
485 |
487 |
486 // Check, if EoE processing has to be started |
|
487 ec_master_eoe_start(master); |
|
488 |
|
489 // Check for a pending SDO request |
488 // Check for a pending SDO request |
490 if (ec_fsm_master_action_process_sdo(fsm)) |
489 if (ec_fsm_master_action_process_sdo(fsm)) |
491 return; |
490 return; |
492 |
491 |
493 if (master->mode == EC_MASTER_MODE_IDLE) { |
492 if (master->mode == EC_MASTER_MODE_IDLE) { |
807 ec_slave_t *slave = fsm->slave; |
806 ec_slave_t *slave = fsm->slave; |
808 |
807 |
809 if (ec_fsm_slave_exec(&fsm->fsm_slave)) // execute slave state machine |
808 if (ec_fsm_slave_exec(&fsm->fsm_slave)) // execute slave state machine |
810 return; |
809 return; |
811 |
810 |
|
811 if (slave->sii_mailbox_protocols & EC_MBOX_EOE) { |
|
812 // create EoE handler for this slave |
|
813 ec_eoe_t *eoe; |
|
814 if (!(eoe = kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) { |
|
815 EC_ERR("Failed to allocate EoE handler memory for slave %u!\n", |
|
816 slave->ring_position); |
|
817 } |
|
818 else if (ec_eoe_init(eoe, slave)) { |
|
819 EC_ERR("Failed to init EoE handler for slave %u!\n", |
|
820 slave->ring_position); |
|
821 kfree(eoe); |
|
822 } |
|
823 else { |
|
824 list_add_tail(&eoe->list, &master->eoe_handlers); |
|
825 } |
|
826 } |
|
827 |
812 // another slave to fetch? |
828 // another slave to fetch? |
813 if (slave->list.next != &master->slaves) { |
829 if (slave->list.next != &master->slaves) { |
814 fsm->slave = list_entry(slave->list.next, ec_slave_t, list); |
830 fsm->slave = list_entry(slave->list.next, ec_slave_t, list); |
815 ec_fsm_slave_start_scan(&fsm->fsm_slave, fsm->slave); |
831 ec_fsm_slave_start_scan(&fsm->fsm_slave, fsm->slave); |
816 ec_fsm_slave_exec(&fsm->fsm_slave); // execute immediately |
832 ec_fsm_slave_exec(&fsm->fsm_slave); // execute immediately |
817 return; |
833 return; |
818 } |
834 } |
819 |
835 |
820 EC_INFO("Bus scanning completed in %u ms.\n", |
836 EC_INFO("Bus scanning completed in %u ms.\n", |
821 (u32) (jiffies - fsm->scan_jiffies) * 1000 / HZ); |
837 (u32) (jiffies - fsm->scan_jiffies) * 1000 / HZ); |
|
838 |
|
839 // check if EoE processing has to be started |
|
840 ec_master_eoe_start(master); |
|
841 |
822 master->scan_state = EC_REQUEST_COMPLETE; |
842 master->scan_state = EC_REQUEST_COMPLETE; |
823 wake_up_interruptible(&master->scan_queue); |
843 wake_up_interruptible(&master->scan_queue); |
824 |
844 |
825 fsm->state = ec_fsm_master_state_end; |
845 fsm->state = ec_fsm_master_state_end; |
826 } |
846 } |