master/fsm_master.c
changeset 1581 e51cf2af3ff9
parent 1543 373cd456dc26
parent 1579 326d47aa986c
child 1586 eb9185dfa8ac
equal deleted inserted replaced
1578:30f065ea5271 1581:e51cf2af3ff9
   342 }
   342 }
   343 
   343 
   344 /*****************************************************************************/
   344 /*****************************************************************************/
   345 
   345 
   346 /** Check for pending register requests and process one.
   346 /** Check for pending register requests and process one.
   347  * 
   347  *
   348  * \return non-zero, if a register request is processed.
   348  * \return non-zero, if a register request is processed.
   349  */
   349  */
   350 int ec_fsm_master_action_process_register(
   350 int ec_fsm_master_action_process_register(
   351         ec_fsm_master_t *fsm /**< Master state machine. */
   351         ec_fsm_master_t *fsm /**< Master state machine. */
   352         )
   352         )
   947                 request->nwords, slave->ring_position);
   947                 request->nwords, slave->ring_position);
   948 
   948 
   949     if (request->offset <= 4 && request->offset + request->nwords > 4) {
   949     if (request->offset <= 4 && request->offset + request->nwords > 4) {
   950         // alias was written
   950         // alias was written
   951         slave->sii.alias = EC_READ_U16(request->words + 4);
   951         slave->sii.alias = EC_READ_U16(request->words + 4);
       
   952         // TODO: read alias from register 0x0012
   952     }
   953     }
   953     // TODO: Evaluate other SII contents!
   954     // TODO: Evaluate other SII contents!
   954 
   955 
   955     request->state = EC_INT_REQUEST_SUCCESS;
   956     request->state = EC_INT_REQUEST_SUCCESS;
   956     wake_up(&master->sii_queue);
   957     wake_up(&master->sii_queue);
  1087         request->state = EC_INT_REQUEST_FAILURE;
  1088         request->state = EC_INT_REQUEST_FAILURE;
  1088         wake_up(&master->reg_queue);
  1089         wake_up(&master->reg_queue);
  1089         ec_fsm_master_restart(fsm);
  1090         ec_fsm_master_restart(fsm);
  1090         return;
  1091         return;
  1091     }
  1092     }
  1092     
  1093 
  1093     if (datagram->working_counter == 1) {
  1094     if (datagram->working_counter == 1) {
  1094         if (request->dir == EC_DIR_INPUT) { // read request
  1095         if (request->dir == EC_DIR_INPUT) { // read request
  1095             if (request->data)
  1096             if (request->data)
  1096                 kfree(request->data);
  1097                 kfree(request->data);
  1097             request->data = kmalloc(request->length, GFP_KERNEL);
  1098             request->data = kmalloc(request->length, GFP_KERNEL);