master/slave.c
changeset 399 40375a50be4e
parent 394 ff1b018a9b09
child 400 99c1085fd5e2
equal deleted inserted replaced
398:ff37601361a8 399:40375a50be4e
   154     INIT_LIST_HEAD(&slave->sii_strings);
   154     INIT_LIST_HEAD(&slave->sii_strings);
   155     INIT_LIST_HEAD(&slave->sii_syncs);
   155     INIT_LIST_HEAD(&slave->sii_syncs);
   156     INIT_LIST_HEAD(&slave->sii_pdos);
   156     INIT_LIST_HEAD(&slave->sii_pdos);
   157     INIT_LIST_HEAD(&slave->sdo_dictionary);
   157     INIT_LIST_HEAD(&slave->sdo_dictionary);
   158     INIT_LIST_HEAD(&slave->sdo_confs);
   158     INIT_LIST_HEAD(&slave->sdo_confs);
   159     INIT_LIST_HEAD(&slave->varsize_fields);
       
   160 
   159 
   161     for (i = 0; i < 4; i++) {
   160     for (i = 0; i < 4; i++) {
   162         slave->dl_link[i] = 0;
   161         slave->dl_link[i] = 0;
   163         slave->dl_loop[i] = 0;
   162         slave->dl_loop[i] = 0;
   164         slave->dl_signal[i] = 0;
   163         slave->dl_signal[i] = 0;
   182     ec_sii_pdo_t *pdo, *next_pdo;
   181     ec_sii_pdo_t *pdo, *next_pdo;
   183     ec_sii_pdo_entry_t *entry, *next_ent;
   182     ec_sii_pdo_entry_t *entry, *next_ent;
   184     ec_sdo_t *sdo, *next_sdo;
   183     ec_sdo_t *sdo, *next_sdo;
   185     ec_sdo_entry_t *en, *next_en;
   184     ec_sdo_entry_t *en, *next_en;
   186     ec_sdo_data_t *sdodata, *next_sdodata;
   185     ec_sdo_data_t *sdodata, *next_sdodata;
   187     ec_varsize_t *var, *next_var;
       
   188 
   186 
   189     slave = container_of(kobj, ec_slave_t, kobj);
   187     slave = container_of(kobj, ec_slave_t, kobj);
   190 
   188 
   191     // free all string objects
   189     // free all string objects
   192     list_for_each_entry_safe(string, next_str, &slave->sii_strings, list) {
   190     list_for_each_entry_safe(string, next_str, &slave->sii_strings, list) {
   236     // free all SDO configurations
   234     // free all SDO configurations
   237     list_for_each_entry_safe(sdodata, next_sdodata, &slave->sdo_confs, list) {
   235     list_for_each_entry_safe(sdodata, next_sdodata, &slave->sdo_confs, list) {
   238         list_del(&sdodata->list);
   236         list_del(&sdodata->list);
   239         kfree(sdodata->data);
   237         kfree(sdodata->data);
   240         kfree(sdodata);
   238         kfree(sdodata);
   241     }
       
   242 
       
   243     // free information about variable sized data fields
       
   244     list_for_each_entry_safe(var, next_var, &slave->varsize_fields, list) {
       
   245         list_del(&var->list);
       
   246         kfree(var);
       
   247     }
   239     }
   248 
   240 
   249     if (slave->eeprom_data) kfree(slave->eeprom_data);
   241     if (slave->eeprom_data) kfree(slave->eeprom_data);
   250     if (slave->new_eeprom_data) kfree(slave->new_eeprom_data);
   242     if (slave->new_eeprom_data) kfree(slave->new_eeprom_data);
   251 }
   243 }