130 |
130 |
131 /*****************************************************************************/ |
131 /*****************************************************************************/ |
132 |
132 |
133 /** |
133 /** |
134 SDO destructor. |
134 SDO destructor. |
135 */ |
135 Clears and frees an SDO object. |
136 |
136 */ |
137 void ec_sdo_clear(struct kobject *kobj /**< SDO's kobject */) |
137 |
138 { |
138 void ec_sdo_destroy(ec_sdo_t *sdo /**< SDO */) |
139 ec_sdo_t *sdo = container_of(kobj, ec_sdo_t, kobj); |
139 { |
140 ec_sdo_entry_t *entry, *next; |
140 ec_sdo_entry_t *entry, *next; |
141 |
141 |
142 // free all entries |
142 // free all entries |
143 list_for_each_entry_safe(entry, next, &sdo->entries, list) { |
143 list_for_each_entry_safe(entry, next, &sdo->entries, list) { |
144 list_del(&entry->list); |
144 list_del(&entry->list); |
145 kobject_del(&entry->kobj); |
145 ec_sdo_entry_destroy(entry); |
146 kobject_put(&entry->kobj); |
146 } |
147 } |
147 |
|
148 // destroy self |
|
149 kobject_del(&sdo->kobj); |
|
150 kobject_put(&sdo->kobj); |
|
151 } |
|
152 |
|
153 /*****************************************************************************/ |
|
154 |
|
155 /** |
|
156 Clear and free SDO. |
|
157 This method is called by the kobject, |
|
158 once there are no more references to it. |
|
159 */ |
|
160 |
|
161 void ec_sdo_clear(struct kobject *kobj /**< SDO's kobject */) |
|
162 { |
|
163 ec_sdo_t *sdo = container_of(kobj, ec_sdo_t, kobj); |
148 |
164 |
149 if (sdo->name) kfree(sdo->name); |
165 if (sdo->name) kfree(sdo->name); |
150 |
166 |
151 kfree(sdo); |
167 kfree(sdo); |
152 } |
168 } |
213 } |
229 } |
214 |
230 |
215 /*****************************************************************************/ |
231 /*****************************************************************************/ |
216 |
232 |
217 /** |
233 /** |
218 SDO destructor. |
234 SDO entry destructor. |
|
235 Clears and frees an SDO entry object. |
|
236 */ |
|
237 |
|
238 void ec_sdo_entry_destroy(ec_sdo_entry_t *entry /**< SDO entry */) |
|
239 { |
|
240 // destroy self |
|
241 kobject_del(&entry->kobj); |
|
242 kobject_put(&entry->kobj); |
|
243 } |
|
244 |
|
245 /*****************************************************************************/ |
|
246 |
|
247 /** |
|
248 Clear and free SDO entry. |
|
249 This method is called by the kobject, |
|
250 once there are no more references to it. |
219 */ |
251 */ |
220 |
252 |
221 void ec_sdo_entry_clear(struct kobject *kobj /**< SDO entry's kobject */) |
253 void ec_sdo_entry_clear(struct kobject *kobj /**< SDO entry's kobject */) |
222 { |
254 { |
223 ec_sdo_entry_t *entry = container_of(kobj, ec_sdo_entry_t, kobj); |
255 ec_sdo_entry_t *entry = container_of(kobj, ec_sdo_entry_t, kobj); |