On Wed, 3 Aug 2011 15:07:59 +0200 Markus Armbruster <arm...@redhat.com> wrote:
> > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > hw/ide/internal.h | 1 + > hw/ide/qdev.c | 12 ++++++++++++ > 2 files changed, 13 insertions(+), 0 deletions(-) > > diff --git a/hw/ide/internal.h b/hw/ide/internal.h > index 3e56b45..0b0b8a7 100644 > --- a/hw/ide/internal.h > +++ b/hw/ide/internal.h > @@ -529,6 +529,7 @@ typedef int (*ide_qdev_initfn)(IDEDevice *dev); > struct IDEDeviceInfo { > DeviceInfo qdev; > ide_qdev_initfn init; > + ide_qdev_initfn exit; > }; > > #define BM_STATUS_DMAING 0x01 > diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c > index 6bd8d20..3b7b306 100644 > --- a/hw/ide/qdev.c > +++ b/hw/ide/qdev.c > @@ -91,9 +91,21 @@ err: > return -1; > } > > +static int ide_qdev_exit(DeviceState *qdev) > +{ > + IDEDevice *dev = DO_UPCAST(IDEDevice, qdev, qdev); > + IDEDeviceInfo *info = DO_UPCAST(IDEDeviceInfo, qdev, qdev->info); > + > + if (info->exit) { > + return info->exit(dev); > + } > + return 0; return info->exit ? info->exit(dev) : 0; > +} > + > static void ide_qdev_register(IDEDeviceInfo *info) > { > info->qdev.init = ide_qdev_init; > + info->qdev.exit = ide_qdev_exit; > info->qdev.bus_info = &ide_bus_info; > qdev_register(&info->qdev); > }