equal
deleted
inserted
replaced
206 master->app_cb_data = NULL; |
206 master->app_cb_data = NULL; |
207 |
207 |
208 INIT_LIST_HEAD(&master->sii_requests); |
208 INIT_LIST_HEAD(&master->sii_requests); |
209 init_waitqueue_head(&master->sii_queue); |
209 init_waitqueue_head(&master->sii_queue); |
210 |
210 |
211 INIT_LIST_HEAD(&master->reg_requests); |
|
212 init_waitqueue_head(&master->reg_queue); |
|
213 |
|
214 // init devices |
211 // init devices |
215 ret = ec_device_init(&master->devices[EC_DEVICE_MAIN], master); |
212 ret = ec_device_init(&master->devices[EC_DEVICE_MAIN], master); |
216 if (ret < 0) |
213 if (ret < 0) |
217 goto out_return; |
214 goto out_return; |
218 |
215 |
427 " to be deleted.\n", request->slave->ring_position); |
424 " to be deleted.\n", request->slave->ring_position); |
428 request->state = EC_INT_REQUEST_FAILURE; |
425 request->state = EC_INT_REQUEST_FAILURE; |
429 wake_up(&master->sii_queue); |
426 wake_up(&master->sii_queue); |
430 } |
427 } |
431 |
428 |
432 while (!list_empty(&master->reg_requests)) { |
|
433 ec_reg_request_t *request = |
|
434 list_entry(master->reg_requests.next, ec_reg_request_t, list); |
|
435 list_del_init(&request->list); // dequeue |
|
436 EC_MASTER_WARN(master, "Discarding register request, slave %u" |
|
437 " about to be deleted.\n", request->slave->ring_position); |
|
438 request->state = EC_INT_REQUEST_FAILURE; |
|
439 wake_up(&master->reg_queue); |
|
440 } |
|
441 |
|
442 for (slave = master->slaves; |
429 for (slave = master->slaves; |
443 slave < master->slaves + master->slave_count; |
430 slave < master->slaves + master->slave_count; |
444 slave++) { |
431 slave++) { |
445 ec_slave_clear(slave); |
432 ec_slave_clear(slave); |
446 } |
433 } |
872 * infinite loop!). Set the state to EC_DATAGRAM_QUEUED again, probably |
859 * infinite loop!). Set the state to EC_DATAGRAM_QUEUED again, probably |
873 * causing an unmatched datagram. */ |
860 * causing an unmatched datagram. */ |
874 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
861 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
875 if (queued_datagram == datagram) { |
862 if (queued_datagram == datagram) { |
876 datagram->skip_count++; |
863 datagram->skip_count++; |
877 EC_MASTER_DBG(master, 1, "Skipping re-initialized datagram %p.\n", |
864 EC_MASTER_DBG(master, 1, |
878 datagram); |
865 "Datagram %p already queued (skipping).\n", datagram); |
879 datagram->state = EC_DATAGRAM_QUEUED; |
866 datagram->state = EC_DATAGRAM_QUEUED; |
880 return; |
867 return; |
881 } |
868 } |
882 } |
869 } |
883 |
870 |