equal
deleted
inserted
replaced
55 #endif |
55 #endif |
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_clear_slave_configs(ec_master_t *); |
61 void ec_master_clear_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); |
224 |
224 |
225 void ec_master_clear( |
225 void ec_master_clear( |
226 ec_master_t *master /**< EtherCAT master */ |
226 ec_master_t *master /**< EtherCAT master */ |
227 ) |
227 ) |
228 { |
228 { |
|
229 ec_cdev_clear(&master->cdev); |
229 #ifdef EC_EOE |
230 #ifdef EC_EOE |
230 ec_master_clear_eoe_handlers(master); |
231 ec_master_clear_eoe_handlers(master); |
231 #endif |
232 #endif |
232 ec_master_clear_domains(master); |
233 ec_master_clear_domains(master); |
233 ec_master_destroy_slave_configs(master); |
234 ec_master_clear_slave_configs(master); |
234 ec_master_clear_slaves(master); |
235 ec_master_clear_slaves(master); |
235 ec_fsm_master_clear(&master->fsm); |
236 ec_fsm_master_clear(&master->fsm); |
236 ec_datagram_clear(&master->fsm_datagram); |
237 ec_datagram_clear(&master->fsm_datagram); |
237 ec_device_clear(&master->backup_device); |
238 ec_device_clear(&master->backup_device); |
238 ec_device_clear(&master->main_device); |
239 ec_device_clear(&master->main_device); |
239 ec_cdev_clear(&master->cdev); |
|
240 |
240 |
241 // destroy self |
241 // destroy self |
242 kobject_del(&master->kobj); |
242 kobject_del(&master->kobj); |
243 kobject_put(&master->kobj); |
243 kobject_put(&master->kobj); |
244 } |
244 } |
262 } |
262 } |
263 #endif |
263 #endif |
264 |
264 |
265 /*****************************************************************************/ |
265 /*****************************************************************************/ |
266 |
266 |
267 /** Destroy all slave configurations. |
267 /** Clear all slave configurations. |
268 */ |
268 */ |
269 void ec_master_destroy_slave_configs(ec_master_t *master) |
269 void ec_master_clear_slave_configs(ec_master_t *master) |
270 { |
270 { |
271 ec_slave_config_t *sc, *next; |
271 ec_slave_config_t *sc, *next; |
272 |
272 |
273 list_for_each_entry_safe(sc, next, &master->configs, list) { |
273 list_for_each_entry_safe(sc, next, &master->configs, list) { |
274 list_del(&sc->list); |
274 list_del(&sc->list); |
275 ec_slave_config_destroy(sc); |
275 ec_slave_config_clear(sc); |
|
276 kfree(sc); |
276 } |
277 } |
277 } |
278 } |
278 |
279 |
279 /*****************************************************************************/ |
280 /*****************************************************************************/ |
280 |
281 |
515 |
516 |
516 master->request_cb = ec_master_request_cb; |
517 master->request_cb = ec_master_request_cb; |
517 master->release_cb = ec_master_release_cb; |
518 master->release_cb = ec_master_release_cb; |
518 master->cb_data = master; |
519 master->cb_data = master; |
519 |
520 |
520 ec_master_destroy_slave_configs(master); |
|
521 ec_master_clear_domains(master); |
521 ec_master_clear_domains(master); |
|
522 ec_master_clear_slave_configs(master); |
522 |
523 |
523 // set states for all slaves |
524 // set states for all slaves |
524 list_for_each_entry(slave, &master->slaves, list) { |
525 list_for_each_entry(slave, &master->slaves, list) { |
525 ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); |
526 ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); |
526 } |
527 } |
1365 GFP_KERNEL))) { |
1366 GFP_KERNEL))) { |
1366 EC_ERR("Failed to allocate memory for slave configuration.\n"); |
1367 EC_ERR("Failed to allocate memory for slave configuration.\n"); |
1367 return NULL; |
1368 return NULL; |
1368 } |
1369 } |
1369 |
1370 |
1370 if (ec_slave_config_init(sc, master, alias, position, vendor_id, |
1371 ec_slave_config_init(sc, master, |
1371 product_code)) { |
1372 alias, position, vendor_id, product_code); |
1372 EC_ERR("Failed to init slave configuration.\n"); |
|
1373 return NULL; |
|
1374 } |
|
1375 |
1373 |
1376 // try to find the addressed slave |
1374 // try to find the addressed slave |
1377 ec_slave_config_attach(sc); |
1375 ec_slave_config_attach(sc); |
1378 ec_slave_config_load_default_assignment(sc); |
1376 ec_slave_config_load_default_assignment(sc); |
1379 |
1377 |