equal
deleted
inserted
replaced
181 master->app_receive_cb = NULL; |
181 master->app_receive_cb = NULL; |
182 master->app_cb_data = NULL; |
182 master->app_cb_data = NULL; |
183 |
183 |
184 INIT_LIST_HEAD(&master->sii_requests); |
184 INIT_LIST_HEAD(&master->sii_requests); |
185 init_waitqueue_head(&master->sii_queue); |
185 init_waitqueue_head(&master->sii_queue); |
186 |
|
187 INIT_LIST_HEAD(&master->slave_sdo_requests); |
|
188 init_waitqueue_head(&master->sdo_queue); |
|
189 |
186 |
190 INIT_LIST_HEAD(&master->reg_requests); |
187 INIT_LIST_HEAD(&master->reg_requests); |
191 init_waitqueue_head(&master->reg_queue); |
188 init_waitqueue_head(&master->reg_queue); |
192 |
189 |
193 INIT_LIST_HEAD(&master->foe_requests); |
190 INIT_LIST_HEAD(&master->foe_requests); |
403 request->slave->ring_position); |
400 request->slave->ring_position); |
404 request->state = EC_INT_REQUEST_FAILURE; |
401 request->state = EC_INT_REQUEST_FAILURE; |
405 wake_up(&master->reg_queue); |
402 wake_up(&master->reg_queue); |
406 } |
403 } |
407 |
404 |
408 // SDO requests |
|
409 while (1) { |
|
410 ec_master_sdo_request_t *request; |
|
411 if (list_empty(&master->slave_sdo_requests)) |
|
412 break; |
|
413 // get first request |
|
414 request = list_entry(master->slave_sdo_requests.next, |
|
415 ec_master_sdo_request_t, list); |
|
416 list_del_init(&request->list); // dequeue |
|
417 EC_INFO("Discarding SDO request, slave %u does not exist anymore.\n", |
|
418 request->slave->ring_position); |
|
419 request->req.state = EC_INT_REQUEST_FAILURE; |
|
420 wake_up(&master->sdo_queue); |
|
421 } |
|
422 |
|
423 // FoE requests |
405 // FoE requests |
424 while (1) { |
406 while (1) { |
425 ec_master_foe_request_t *request; |
407 ec_master_foe_request_t *request; |
426 if (list_empty(&master->foe_requests)) |
408 if (list_empty(&master->foe_requests)) |
427 break; |
409 break; |
436 } |
418 } |
437 |
419 |
438 for (slave = master->slaves; |
420 for (slave = master->slaves; |
439 slave < master->slaves + master->slave_count; |
421 slave < master->slaves + master->slave_count; |
440 slave++) { |
422 slave++) { |
|
423 // SDO requests |
|
424 while (1) { |
|
425 ec_master_sdo_request_t *request; |
|
426 if (list_empty(&slave->slave_sdo_requests)) |
|
427 break; |
|
428 // get first request |
|
429 request = list_entry(slave->slave_sdo_requests.next, |
|
430 ec_master_sdo_request_t, list); |
|
431 list_del_init(&request->list); // dequeue |
|
432 EC_INFO("Discarding SDO request, slave %u does not exist anymore.\n", |
|
433 request->slave->ring_position); |
|
434 request->req.state = EC_INT_REQUEST_FAILURE; |
|
435 wake_up(&slave->sdo_queue); |
|
436 } |
441 ec_slave_clear(slave); |
437 ec_slave_clear(slave); |
442 } |
438 } |
443 |
439 |
444 if (master->slaves) { |
440 if (master->slaves) { |
445 kfree(master->slaves); |
441 kfree(master->slaves); |
767 datagram->state = EC_DATAGRAM_QUEUED; |
763 datagram->state = EC_DATAGRAM_QUEUED; |
768 #ifdef EC_HAVE_CYCLES |
764 #ifdef EC_HAVE_CYCLES |
769 datagram->cycles_sent = get_cycles(); |
765 datagram->cycles_sent = get_cycles(); |
770 #endif |
766 #endif |
771 datagram->jiffies_sent = jiffies; |
767 datagram->jiffies_sent = jiffies; |
|
768 |
|
769 master->fsm.idle = 0; |
772 |
770 |
773 down(&master->io_sem); |
771 down(&master->io_sem); |
774 list_add_tail(&datagram->queue, &master->sdo_datagram_queue); |
772 list_add_tail(&datagram->queue, &master->sdo_datagram_queue); |
775 up(&master->io_sem); |
773 up(&master->io_sem); |
776 } |
774 } |