master/fsm_master.c
changeset 1579 326d47aa986c
parent 1507 68e89abadd19
child 1581 e51cf2af3ff9
child 1583 017fa8fd9ac1
equal deleted inserted replaced
1511:53bf35f7b6ea 1579:326d47aa986c
   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);