Revision 7f23f812
b/hw/qdev.c | ||
---|---|---|
222 | 222 |
return qdev; |
223 | 223 |
} |
224 | 224 |
|
225 |
static void qdev_reset(void *opaque) |
|
226 |
{ |
|
227 |
DeviceState *dev = opaque; |
|
228 |
if (dev->info->reset) |
|
229 |
dev->info->reset(dev); |
|
230 |
} |
|
231 |
|
|
225 | 232 |
/* Initialize a device. Device properties should be set before calling |
226 | 233 |
this function. IRQs and MMIO regions should be connected/mapped after |
227 | 234 |
calling this function. */ |
... | ... | |
233 | 240 |
rc = dev->info->init(dev, dev->info); |
234 | 241 |
if (rc < 0) |
235 | 242 |
return rc; |
236 |
if (dev->info->reset) |
|
237 |
qemu_register_reset(dev->info->reset, dev); |
|
243 |
qemu_register_reset(qdev_reset, dev); |
|
238 | 244 |
if (dev->info->vmsd) |
239 | 245 |
vmstate_register(-1, dev->info->vmsd, dev); |
240 | 246 |
dev->state = DEV_STATE_INITIALIZED; |
... | ... | |
273 | 279 |
if (dev->info->vmsd) |
274 | 280 |
vmstate_unregister(dev->info->vmsd, dev); |
275 | 281 |
#endif |
276 |
if (dev->info->reset) |
|
277 |
qemu_unregister_reset(dev->info->reset, dev); |
|
278 | 282 |
if (dev->info->exit) |
279 | 283 |
dev->info->exit(dev); |
280 | 284 |
if (dev->opts) |
281 | 285 |
qemu_opts_del(dev->opts); |
282 | 286 |
} |
287 |
qemu_unregister_reset(qdev_reset, dev); |
|
283 | 288 |
QLIST_REMOVE(dev, sibling); |
284 | 289 |
qemu_free(dev); |
285 | 290 |
} |
b/hw/qdev.h | ||
---|---|---|
115 | 115 |
|
116 | 116 |
typedef int (*qdev_initfn)(DeviceState *dev, DeviceInfo *info); |
117 | 117 |
typedef int (*qdev_event)(DeviceState *dev); |
118 |
typedef void (*qdev_resetfn)(DeviceState *dev); |
|
118 | 119 |
|
119 | 120 |
struct DeviceInfo { |
120 | 121 |
const char *name; |
... | ... | |
125 | 126 |
int no_user; |
126 | 127 |
|
127 | 128 |
/* callbacks */ |
128 |
QEMUResetHandler *reset;
|
|
129 |
qdev_resetfn reset;
|
|
129 | 130 |
|
130 | 131 |
/* device state */ |
131 | 132 |
const VMStateDescription *vmsd; |
b/hw/rtl8139.c | ||
---|---|---|
1173 | 1173 |
s->RxBufAddr = 0; |
1174 | 1174 |
} |
1175 | 1175 |
|
1176 |
static void rtl8139_reset(void *opaque)
|
|
1176 |
static void rtl8139_reset(DeviceState *d)
|
|
1177 | 1177 |
{ |
1178 |
RTL8139State *s = opaque;
|
|
1178 |
RTL8139State *s = container_of(d, RTL8139State, dev.qdev);
|
|
1179 | 1179 |
int i; |
1180 | 1180 |
|
1181 | 1181 |
/* restore MAC address */ |
... | ... | |
1371 | 1371 |
if (val & CmdReset) |
1372 | 1372 |
{ |
1373 | 1373 |
DEBUG_PRINT(("RTL8139: ChipCmd reset\n")); |
1374 |
rtl8139_reset(s);
|
|
1374 |
rtl8139_reset(&s->dev.qdev);
|
|
1375 | 1375 |
} |
1376 | 1376 |
if (val & CmdRxEnb) |
1377 | 1377 |
{ |
... | ... | |
1544 | 1544 |
} else if (opmode == 0x40) { |
1545 | 1545 |
/* Reset. */ |
1546 | 1546 |
val = 0; |
1547 |
rtl8139_reset(s);
|
|
1547 |
rtl8139_reset(&s->dev.qdev);
|
|
1548 | 1548 |
} |
1549 | 1549 |
|
1550 | 1550 |
s->Cfg9346 = val; |
... | ... | |
3464 | 3464 |
PCI_ADDRESS_SPACE_MEM, rtl8139_mmio_map); |
3465 | 3465 |
|
3466 | 3466 |
qdev_get_macaddr(&dev->qdev, s->macaddr); |
3467 |
rtl8139_reset(s);
|
|
3467 |
rtl8139_reset(&s->dev.qdev);
|
|
3468 | 3468 |
s->vc = qdev_get_vlan_client(&dev->qdev, |
3469 | 3469 |
rtl8139_can_receive, rtl8139_receive, NULL, |
3470 | 3470 |
rtl8139_cleanup, s); |
b/hw/tcx.c | ||
---|---|---|
411 | 411 |
} |
412 | 412 |
}; |
413 | 413 |
|
414 |
static void tcx_reset(void *opaque)
|
|
414 |
static void tcx_reset(DeviceState *d)
|
|
415 | 415 |
{ |
416 |
TCXState *s = opaque;
|
|
416 |
TCXState *s = container_of(d, TCXState, busdev.qdev);
|
|
417 | 417 |
|
418 | 418 |
/* Initialize palette */ |
419 | 419 |
memset(s->r, 0, 256); |
... | ... | |
560 | 560 |
tcx_screen_dump, NULL, s); |
561 | 561 |
} |
562 | 562 |
|
563 |
tcx_reset(s);
|
|
563 |
tcx_reset(&s->busdev.qdev);
|
|
564 | 564 |
qemu_console_resize(s->ds, s->width, s->height); |
565 | 565 |
return 0; |
566 | 566 |
} |
Also available in: Unified diff