Revision ec990eb6 hw/qdev.c
b/hw/qdev.c | ||
---|---|---|
257 | 257 |
return qdev; |
258 | 258 |
} |
259 | 259 |
|
260 |
static void qdev_reset(void *opaque) |
|
261 |
{ |
|
262 |
DeviceState *dev = opaque; |
|
263 |
if (dev->info->reset) |
|
264 |
dev->info->reset(dev); |
|
265 |
} |
|
266 |
|
|
267 | 260 |
/* Initialize a device. Device properties should be set before calling |
268 | 261 |
this function. IRQs and MMIO regions should be connected/mapped after |
269 | 262 |
calling this function. |
... | ... | |
279 | 272 |
qdev_free(dev); |
280 | 273 |
return rc; |
281 | 274 |
} |
282 |
qemu_register_reset(qdev_reset, dev); |
|
283 | 275 |
if (dev->info->vmsd) { |
284 | 276 |
vmstate_register_with_alias_id(dev, -1, dev->info->vmsd, dev, |
285 | 277 |
dev->instance_id_alias, |
... | ... | |
308 | 300 |
return dev->info->unplug(dev); |
309 | 301 |
} |
310 | 302 |
|
303 |
static int qdev_reset_one(DeviceState *dev, void *opaque) |
|
304 |
{ |
|
305 |
if (dev->info->reset) { |
|
306 |
dev->info->reset(dev); |
|
307 |
} |
|
308 |
|
|
309 |
return 0; |
|
310 |
} |
|
311 |
|
|
312 |
BusState *sysbus_get_default(void) |
|
313 |
{ |
|
314 |
return main_system_bus; |
|
315 |
} |
|
316 |
|
|
317 |
void qbus_reset_all(BusState *bus) |
|
318 |
{ |
|
319 |
qbus_walk_children(bus, qdev_reset_one, NULL, NULL); |
|
320 |
} |
|
321 |
|
|
311 | 322 |
/* can be used as ->unplug() callback for the simple cases */ |
312 | 323 |
int qdev_simple_unplug_cb(DeviceState *dev) |
313 | 324 |
{ |
... | ... | |
351 | 362 |
if (dev->opts) |
352 | 363 |
qemu_opts_del(dev->opts); |
353 | 364 |
} |
354 |
qemu_unregister_reset(qdev_reset, dev); |
|
355 | 365 |
QLIST_REMOVE(dev, sibling); |
356 | 366 |
for (prop = dev->info->props; prop && prop->name; prop++) { |
357 | 367 |
if (prop->info->free) { |
Also available in: Unified diff