master/fsm_slave.c
branchstable-1.5
changeset 2442 86ebf18a029f
parent 2440 341d9575745d
child 2443 2c3ccdde3919
equal deleted inserted replaced
2441:a89481754fd5 2442:86ebf18a029f
   232     if (!ec_fsm_coe_success(&fsm->fsm_coe)) {
   232     if (!ec_fsm_coe_success(&fsm->fsm_coe)) {
   233         EC_SLAVE_ERR(slave, "Failed to process SDO request.\n");
   233         EC_SLAVE_ERR(slave, "Failed to process SDO request.\n");
   234         request->state = EC_INT_REQUEST_FAILURE;
   234         request->state = EC_INT_REQUEST_FAILURE;
   235         wake_up(&slave->sdo_queue);
   235         wake_up(&slave->sdo_queue);
   236         fsm->sdo_request = NULL;
   236         fsm->sdo_request = NULL;
   237         fsm->state = ec_fsm_slave_state_idle;
   237         fsm->state = ec_fsm_slave_state_ready;
   238         return;
   238         return;
   239     }
   239     }
   240 
   240 
   241     EC_SLAVE_DBG(slave, 1, "Finished SDO request.\n");
   241     EC_SLAVE_DBG(slave, 1, "Finished SDO request.\n");
   242 
   242 
   248     fsm->state = ec_fsm_slave_state_ready;
   248     fsm->state = ec_fsm_slave_state_ready;
   249 }
   249 }
   250 
   250 
   251 /*****************************************************************************/
   251 /*****************************************************************************/
   252 
   252 
   253 /** Check for pending FOE requests and process one.
   253 /** Check for pending FoE requests and process one.
   254  *
   254  *
   255  * \return non-zero, if an FOE request is processed.
   255  * \return non-zero, if an FoE request is processed.
   256  */
   256  */
   257 int ec_fsm_slave_action_process_foe(
   257 int ec_fsm_slave_action_process_foe(
   258         ec_fsm_slave_t *fsm /**< Slave state machine. */
   258         ec_fsm_slave_t *fsm /**< Slave state machine. */
   259         )
   259         )
   260 {
   260 {
   262     ec_master_foe_request_t *request, *next;
   262     ec_master_foe_request_t *request, *next;
   263 
   263 
   264     // search the first request to be processed
   264     // search the first request to be processed
   265     list_for_each_entry_safe(request, next, &slave->foe_requests, list) {
   265     list_for_each_entry_safe(request, next, &slave->foe_requests, list) {
   266         if (slave->current_state & EC_SLAVE_STATE_ACK_ERR) {
   266         if (slave->current_state & EC_SLAVE_STATE_ACK_ERR) {
   267             EC_SLAVE_WARN(slave, "Aborting FOE request,"
   267             EC_SLAVE_WARN(slave, "Aborting FoE request,"
   268                     " slave has error flag set.\n");
   268                     " slave has error flag set.\n");
   269             request->req.state = EC_INT_REQUEST_FAILURE;
   269             request->req.state = EC_INT_REQUEST_FAILURE;
   270             wake_up(&slave->sdo_queue);
   270             wake_up(&slave->sdo_queue);
   271             fsm->sdo_request = NULL;
   271             fsm->sdo_request = NULL;
   272             fsm->state = ec_fsm_slave_state_idle;
   272             fsm->state = ec_fsm_slave_state_idle;
   306     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   306     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   307         EC_SLAVE_ERR(slave, "Failed to handle FoE request.\n");
   307         EC_SLAVE_ERR(slave, "Failed to handle FoE request.\n");
   308         request->state = EC_INT_REQUEST_FAILURE;
   308         request->state = EC_INT_REQUEST_FAILURE;
   309         wake_up(&slave->foe_queue);
   309         wake_up(&slave->foe_queue);
   310         fsm->foe_request = NULL;
   310         fsm->foe_request = NULL;
   311         fsm->state = ec_fsm_slave_state_idle;
   311         fsm->state = ec_fsm_slave_state_ready;
   312         return;
   312         return;
   313     }
   313     }
   314 
   314 
   315     // finished transferring FoE
   315     // finished transferring FoE
   316     EC_SLAVE_DBG(slave, 1, "Successfully transferred %zu bytes of FoE"
   316     EC_SLAVE_DBG(slave, 1, "Successfully transferred %zu bytes of FoE"
   392     if (!ec_fsm_soe_success(&fsm->fsm_soe)) {
   392     if (!ec_fsm_soe_success(&fsm->fsm_soe)) {
   393         EC_SLAVE_ERR(slave, "Failed to process SoE request.\n");
   393         EC_SLAVE_ERR(slave, "Failed to process SoE request.\n");
   394         request->state = EC_INT_REQUEST_FAILURE;
   394         request->state = EC_INT_REQUEST_FAILURE;
   395         wake_up(&slave->soe_queue);
   395         wake_up(&slave->soe_queue);
   396         fsm->soe_request = NULL;
   396         fsm->soe_request = NULL;
   397         fsm->state = ec_fsm_slave_state_idle;
   397         fsm->state = ec_fsm_slave_state_ready;
   398         return;
   398         return;
   399     }
   399     }
   400 
   400 
   401     EC_SLAVE_DBG(slave, 1, "Finished SoE request.\n");
   401     EC_SLAVE_DBG(slave, 1, "Finished SoE request.\n");
   402 
   402