equal
deleted
inserted
replaced
56 #include "master.h" |
56 #include "master.h" |
57 |
57 |
58 /*****************************************************************************/ |
58 /*****************************************************************************/ |
59 |
59 |
60 void ec_master_destroy_slave_configs(ec_master_t *); |
60 void ec_master_destroy_slave_configs(ec_master_t *); |
61 void ec_master_destroy_domains(ec_master_t *); |
61 void ec_master_clear_domains(ec_master_t *); |
62 static int ec_master_idle_thread(ec_master_t *); |
62 static int ec_master_idle_thread(ec_master_t *); |
63 static int ec_master_operation_thread(ec_master_t *); |
63 static int ec_master_operation_thread(ec_master_t *); |
64 #ifdef EC_EOE |
64 #ifdef EC_EOE |
65 void ec_master_eoe_run(unsigned long); |
65 void ec_master_eoe_run(unsigned long); |
66 #endif |
66 #endif |
229 #ifdef EC_EOE |
229 #ifdef EC_EOE |
230 ec_master_clear_eoe_handlers(master); |
230 ec_master_clear_eoe_handlers(master); |
231 #endif |
231 #endif |
232 ec_master_destroy_slave_configs(master); |
232 ec_master_destroy_slave_configs(master); |
233 ec_master_clear_slaves(master); |
233 ec_master_clear_slaves(master); |
234 ec_master_destroy_domains(master); |
234 ec_master_clear_domains(master); |
235 ec_fsm_master_clear(&master->fsm); |
235 ec_fsm_master_clear(&master->fsm); |
236 ec_datagram_clear(&master->fsm_datagram); |
236 ec_datagram_clear(&master->fsm_datagram); |
237 ec_device_clear(&master->backup_device); |
237 ec_device_clear(&master->backup_device); |
238 ec_device_clear(&master->main_device); |
238 ec_device_clear(&master->main_device); |
239 ec_cdev_clear(&master->cdev); |
239 ec_cdev_clear(&master->cdev); |
297 |
297 |
298 /** |
298 /** |
299 Destroy all domains. |
299 Destroy all domains. |
300 */ |
300 */ |
301 |
301 |
302 void ec_master_destroy_domains(ec_master_t *master) |
302 void ec_master_clear_domains(ec_master_t *master) |
303 { |
303 { |
304 ec_domain_t *domain, *next; |
304 ec_domain_t *domain, *next; |
305 |
305 |
306 list_for_each_entry_safe(domain, next, &master->domains, list) { |
306 list_for_each_entry_safe(domain, next, &master->domains, list) { |
307 list_del(&domain->list); |
307 list_del(&domain->list); |
308 ec_domain_destroy(domain); |
308 ec_domain_clear(domain); |
|
309 kfree(domain); |
309 } |
310 } |
310 } |
311 } |
311 |
312 |
312 /*****************************************************************************/ |
313 /*****************************************************************************/ |
313 |
314 |
515 master->request_cb = ec_master_request_cb; |
516 master->request_cb = ec_master_request_cb; |
516 master->release_cb = ec_master_release_cb; |
517 master->release_cb = ec_master_release_cb; |
517 master->cb_data = master; |
518 master->cb_data = master; |
518 |
519 |
519 ec_master_destroy_slave_configs(master); |
520 ec_master_destroy_slave_configs(master); |
520 ec_master_destroy_domains(master); |
521 ec_master_clear_domains(master); |
521 |
522 |
522 // set states for all slaves |
523 // set states for all slaves |
523 list_for_each_entry(slave, &master->slaves, list) { |
524 list_for_each_entry(slave, &master->slaves, list) { |
524 ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); |
525 ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); |
525 } |
526 } |
1200 if (!(domain = (ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) { |
1201 if (!(domain = (ec_domain_t *) kmalloc(sizeof(ec_domain_t), GFP_KERNEL))) { |
1201 EC_ERR("Error allocating domain memory!\n"); |
1202 EC_ERR("Error allocating domain memory!\n"); |
1202 return NULL; |
1203 return NULL; |
1203 } |
1204 } |
1204 |
1205 |
1205 if (list_empty(&master->domains)) index = 0; |
1206 if (list_empty(&master->domains)) { |
1206 else { |
1207 index = 0; |
|
1208 } else { |
1207 last_domain = list_entry(master->domains.prev, ec_domain_t, list); |
1209 last_domain = list_entry(master->domains.prev, ec_domain_t, list); |
1208 index = last_domain->index + 1; |
1210 index = last_domain->index + 1; |
1209 } |
1211 } |
1210 |
1212 |
1211 if (ec_domain_init(domain, master, index)) { |
1213 ec_domain_init(domain, master, index); |
1212 EC_ERR("Failed to init domain.\n"); |
|
1213 return NULL; |
|
1214 } |
|
1215 |
|
1216 list_add_tail(&domain->list, &master->domains); |
1214 list_add_tail(&domain->list, &master->domains); |
1217 |
1215 |
1218 return domain; |
1216 return domain; |
1219 } |
1217 } |
1220 |
1218 |