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:
		
							parent
							
								
									6d4c2f1755
								
							
						
					
					
						commit
						020c8e7602
					
				@ -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 ={
 | 
				
			||||||
 | 
				
			|||||||
@ -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",\
 | 
				
			||||||
        }, {\
 | 
					        }, {\
 | 
				
			||||||
 | 
				
			|||||||
@ -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);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user