fdc: QOM'ify ISA floppy controller

Introduce type constant and cast macro to obsolete DO_UPCAST().
Reuse type constant for PC machine compatibility settings.

Prepares for ISA realizefn.

Signed-off-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Message-id: 1367093935-29091-4-git-send-email-afaerber@suse.de
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Andreas Färber 2013-04-27 22:18:38 +02:00 committed by Anthony Liguori
parent 6d4c2f1755
commit 020c8e7602
3 changed files with 15 additions and 10 deletions

View file

@ -549,8 +549,11 @@ typedef struct FDCtrlSysBus {
struct FDCtrl state; struct FDCtrl state;
} FDCtrlSysBus; } FDCtrlSysBus;
#define ISA_FDC(obj) OBJECT_CHECK(FDCtrlISABus, (obj), TYPE_ISA_FDC)
typedef struct FDCtrlISABus { typedef struct FDCtrlISABus {
ISADevice busdev; ISADevice parent_obj;
uint32_t iobase; uint32_t iobase;
uint32_t irq; uint32_t irq;
uint32_t dma; uint32_t dma;
@ -778,7 +781,7 @@ static void fdctrl_external_reset_sysbus(DeviceState *d)
static void fdctrl_external_reset_isa(DeviceState *d) static void fdctrl_external_reset_isa(DeviceState *d)
{ {
FDCtrlISABus *isa = container_of(d, FDCtrlISABus, busdev.qdev); FDCtrlISABus *isa = ISA_FDC(d);
FDCtrl *s = &isa->state; FDCtrl *s = &isa->state;
fdctrl_reset(s, 0); fdctrl_reset(s, 0);
@ -2021,7 +2024,7 @@ ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds)
{ {
ISADevice *dev; ISADevice *dev;
dev = isa_try_create(bus, "isa-fdc"); dev = isa_try_create(bus, TYPE_ISA_FDC);
if (!dev) { if (!dev) {
return NULL; return NULL;
} }
@ -2116,13 +2119,13 @@ static const MemoryRegionPortio fdc_portio_list[] = {
static int isabus_fdc_init1(ISADevice *dev) static int isabus_fdc_init1(ISADevice *dev)
{ {
FDCtrlISABus *isa = DO_UPCAST(FDCtrlISABus, busdev, dev); FDCtrlISABus *isa = ISA_FDC(dev);
FDCtrl *fdctrl = &isa->state; FDCtrl *fdctrl = &isa->state;
int ret; int ret;
isa_register_portio_list(dev, isa->iobase, fdc_portio_list, fdctrl, "fdc"); isa_register_portio_list(dev, isa->iobase, fdc_portio_list, fdctrl, "fdc");
isa_init_irq(&isa->busdev, &fdctrl->irq, isa->irq); isa_init_irq(dev, &fdctrl->irq, isa->irq);
fdctrl->dma_chann = isa->dma; fdctrl->dma_chann = isa->dma;
qdev_set_legacy_instance_id(&dev->qdev, isa->iobase, 2); qdev_set_legacy_instance_id(&dev->qdev, isa->iobase, 2);
@ -2169,7 +2172,7 @@ static int sun4m_fdc_init1(SysBusDevice *dev)
FDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i) FDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i)
{ {
FDCtrlISABus *isa = DO_UPCAST(FDCtrlISABus, busdev, fdc); FDCtrlISABus *isa = ISA_FDC(fdc);
return isa->state.drives[i].drive; return isa->state.drives[i].drive;
} }
@ -2197,7 +2200,7 @@ static Property isa_fdc_properties[] = {
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
}; };
static void isabus_fdc_class_init1(ObjectClass *klass, void *data) static void isabus_fdc_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); ISADeviceClass *ic = ISA_DEVICE_CLASS(klass);
@ -2210,10 +2213,10 @@ static void isabus_fdc_class_init1(ObjectClass *klass, void *data)
} }
static const TypeInfo isa_fdc_info = { static const TypeInfo isa_fdc_info = {
.name = "isa-fdc", .name = TYPE_ISA_FDC,
.parent = TYPE_ISA_DEVICE, .parent = TYPE_ISA_DEVICE,
.instance_size = sizeof(FDCtrlISABus), .instance_size = sizeof(FDCtrlISABus),
.class_init = isabus_fdc_class_init1, .class_init = isabus_fdc_class_init,
}; };
static const VMStateDescription vmstate_sysbus_fdc ={ static const VMStateDescription vmstate_sysbus_fdc ={

View file

@ -458,7 +458,7 @@ static QEMUMachine pc_machine_v1_1 = {
.property = "rom_only",\ .property = "rom_only",\
.value = stringify(1),\ .value = stringify(1),\
}, {\ }, {\
.driver = "isa-fdc",\ .driver = TYPE_ISA_FDC,\
.property = "check_media_rate",\ .property = "check_media_rate",\
.value = "off",\ .value = "off",\
}, {\ }, {\

View file

@ -13,6 +13,8 @@ typedef enum FDriveType {
FDRIVE_DRV_NONE = 0x03, /* No drive connected */ FDRIVE_DRV_NONE = 0x03, /* No drive connected */
} FDriveType; } FDriveType;
#define TYPE_ISA_FDC "isa-fdc"
ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds); ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds);
void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
hwaddr mmio_base, DriveInfo **fds); hwaddr mmio_base, DriveInfo **fds);