master/master.c
changeset 993 8c32564252fd
parent 992 50a44cbd30af
child 994 e29edcced328
equal deleted inserted replaced
992:50a44cbd30af 993:8c32564252fd
    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