master/slave.c
branchstable-1.5
changeset 2467 74ede087bc85
parent 2465 35611452b785
child 2498 9cdd7669dc0b
equal deleted inserted replaced
2466:a0b686241178 2467:74ede087bc85
   151 
   151 
   152     slave->sdo_dictionary_fetched = 0;
   152     slave->sdo_dictionary_fetched = 0;
   153     slave->jiffies_preop = 0;
   153     slave->jiffies_preop = 0;
   154 
   154 
   155     INIT_LIST_HEAD(&slave->sdo_requests);
   155     INIT_LIST_HEAD(&slave->sdo_requests);
   156     init_waitqueue_head(&slave->sdo_queue);
       
   157 
       
   158     INIT_LIST_HEAD(&slave->reg_requests);
   156     INIT_LIST_HEAD(&slave->reg_requests);
   159     init_waitqueue_head(&slave->reg_queue);
       
   160 
       
   161     INIT_LIST_HEAD(&slave->foe_requests);
   157     INIT_LIST_HEAD(&slave->foe_requests);
   162     init_waitqueue_head(&slave->foe_queue);
       
   163 
       
   164     INIT_LIST_HEAD(&slave->soe_requests);
   158     INIT_LIST_HEAD(&slave->soe_requests);
   165     init_waitqueue_head(&slave->soe_queue);
       
   166 
   159 
   167     // init state machine datagram
   160     // init state machine datagram
   168     ec_datagram_init(&slave->fsm_datagram);
   161     ec_datagram_init(&slave->fsm_datagram);
   169     snprintf(slave->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE,
   162     snprintf(slave->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE,
   170             "slave%u-fsm", slave->ring_position);
   163             "slave%u-fsm", slave->ring_position);
   199             list_entry(slave->sdo_requests.next, ec_sdo_request_t, list);
   192             list_entry(slave->sdo_requests.next, ec_sdo_request_t, list);
   200         list_del_init(&request->list); // dequeue
   193         list_del_init(&request->list); // dequeue
   201         EC_SLAVE_WARN(slave, "Discarding SDO request,"
   194         EC_SLAVE_WARN(slave, "Discarding SDO request,"
   202                 " slave about to be deleted.\n");
   195                 " slave about to be deleted.\n");
   203         request->state = EC_INT_REQUEST_FAILURE;
   196         request->state = EC_INT_REQUEST_FAILURE;
   204         wake_up(&slave->sdo_queue);
   197         wake_up(&slave->master->request_queue);
   205     }
   198     }
   206 
   199 
   207     while (!list_empty(&slave->reg_requests)) {
   200     while (!list_empty(&slave->reg_requests)) {
   208         ec_reg_request_t *reg =
   201         ec_reg_request_t *reg =
   209             list_entry(slave->reg_requests.next, ec_reg_request_t, list);
   202             list_entry(slave->reg_requests.next, ec_reg_request_t, list);
   210         list_del_init(&reg->list); // dequeue
   203         list_del_init(&reg->list); // dequeue
   211         EC_SLAVE_WARN(slave, "Discarding register request,"
   204         EC_SLAVE_WARN(slave, "Discarding register request,"
   212                 " slave about to be deleted.\n");
   205                 " slave about to be deleted.\n");
   213         reg->state = EC_INT_REQUEST_FAILURE;
   206         reg->state = EC_INT_REQUEST_FAILURE;
   214         wake_up(&slave->reg_queue);
   207         wake_up(&slave->master->request_queue);
   215     }
   208     }
   216 
   209 
   217     while (!list_empty(&slave->foe_requests)) {
   210     while (!list_empty(&slave->foe_requests)) {
   218         ec_foe_request_t *request =
   211         ec_foe_request_t *request =
   219             list_entry(slave->foe_requests.next, ec_foe_request_t, list);
   212             list_entry(slave->foe_requests.next, ec_foe_request_t, list);
   220         list_del_init(&request->list); // dequeue
   213         list_del_init(&request->list); // dequeue
   221         EC_SLAVE_WARN(slave, "Discarding FoE request,"
   214         EC_SLAVE_WARN(slave, "Discarding FoE request,"
   222                 " slave about to be deleted.\n");
   215                 " slave about to be deleted.\n");
   223         request->state = EC_INT_REQUEST_FAILURE;
   216         request->state = EC_INT_REQUEST_FAILURE;
   224         wake_up(&slave->foe_queue);
   217         wake_up(&slave->master->request_queue);
   225     }
   218     }
   226 
   219 
   227     while (!list_empty(&slave->soe_requests)) {
   220     while (!list_empty(&slave->soe_requests)) {
   228         ec_soe_request_t *request =
   221         ec_soe_request_t *request =
   229             list_entry(slave->soe_requests.next, ec_soe_request_t, list);
   222             list_entry(slave->soe_requests.next, ec_soe_request_t, list);
   230         list_del_init(&request->list); // dequeue
   223         list_del_init(&request->list); // dequeue
   231         EC_SLAVE_WARN(slave, "Discarding SoE request,"
   224         EC_SLAVE_WARN(slave, "Discarding SoE request,"
   232                 " slave about to be deleted.\n");
   225                 " slave about to be deleted.\n");
   233         request->state = EC_INT_REQUEST_FAILURE;
   226         request->state = EC_INT_REQUEST_FAILURE;
   234         wake_up(&slave->soe_queue);
   227         wake_up(&slave->master->request_queue);
   235     }
   228     }
   236 
   229 
   237     if (slave->config) {
   230     if (slave->config) {
   238         ec_slave_config_detach(slave->config);
   231         ec_slave_config_detach(slave->config);
   239     }
   232     }