From patchwork Tue Sep 22 11:53:18 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 34074 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id B3C07B7B69 for ; Tue, 22 Sep 2009 22:15:43 +1000 (EST) Received: from localhost ([127.0.0.1]:43950 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mq4HU-0007ff-FO for incoming@patchwork.ozlabs.org; Tue, 22 Sep 2009 08:15:40 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mq3wA-0006UD-GA for qemu-devel@nongnu.org; Tue, 22 Sep 2009 07:53:38 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mq3w4-0006Rr-Vl for qemu-devel@nongnu.org; Tue, 22 Sep 2009 07:53:37 -0400 Received: from [199.232.76.173] (port=37783 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mq3w4-0006Rl-Ny for qemu-devel@nongnu.org; Tue, 22 Sep 2009 07:53:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34245) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Mq3w2-00061A-VX for qemu-devel@nongnu.org; Tue, 22 Sep 2009 07:53:32 -0400 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n8MBrSDv028994 for ; Tue, 22 Sep 2009 07:53:28 -0400 Received: from zweiblum.home.kraxel.org (vpn1-4-80.ams2.redhat.com [10.36.4.80]) by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with SMTP id n8MBrOAl022949; Tue, 22 Sep 2009 07:53:24 -0400 Received: by zweiblum.home.kraxel.org (Postfix, from userid 500) id 2BD7E700E2; Tue, 22 Sep 2009 13:53:22 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Tue, 22 Sep 2009 13:53:18 +0200 Message-Id: <1253620402-18682-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1253620402-18682-1-git-send-email-kraxel@redhat.com> References: <1253620402-18682-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.18 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: Gerd Hoffmann Subject: [Qemu-devel] [PATCH 1/5] floppy: add drive properties. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Gerd Hoffmann --- hw/fdc.c | 50 +++++++++++++++++++++++++++++++++++++------------- hw/fdc.h | 7 ++++--- hw/mips_jazz.c | 5 ++--- hw/mips_malta.c | 5 ++--- hw/pc.c | 6 ++---- hw/ppc_prep.c | 6 ++---- hw/sun4m.c | 16 ++++------------ hw/sun4u.c | 6 ++---- 8 files changed, 55 insertions(+), 46 deletions(-) diff --git a/hw/fdc.c b/hw/fdc.c index 389d9e6..ea3b8ac 100644 --- a/hw/fdc.c +++ b/hw/fdc.c @@ -81,6 +81,7 @@ typedef enum fdisk_flags_t { } fdisk_flags_t; typedef struct fdrive_t { + DriveInfo *dinfo; BlockDriverState *bs; /* Drive status */ fdrive_type_t drive; @@ -97,10 +98,10 @@ typedef struct fdrive_t { uint8_t ro; /* Is read-only */ } fdrive_t; -static void fd_init (fdrive_t *drv, BlockDriverState *bs) +static void fd_init (fdrive_t *drv) { /* Drive */ - drv->bs = bs; + drv->bs = drv->dinfo ? drv->dinfo->bdrv : NULL; drv->drive = FDRIVE_DRV_NONE; drv->perpendicular = 0; /* Disk */ @@ -1829,43 +1830,50 @@ static void fdctrl_result_timer(void *opaque) } /* Init functions */ -static void fdctrl_connect_drives(fdctrl_t *fdctrl, BlockDriverState **fds) +static void fdctrl_connect_drives(fdctrl_t *fdctrl) { unsigned int i; for (i = 0; i < MAX_FD; i++) { - fd_init(&fdctrl->drives[i], fds[i]); + fd_init(&fdctrl->drives[i]); fd_revalidate(&fdctrl->drives[i]); } } -fdctrl_t *fdctrl_init_isa(BlockDriverState **fds) +fdctrl_t *fdctrl_init_isa(DriveInfo **fds) { fdctrl_t *fdctrl; ISADevice *dev; int dma_chann = 2; - dev = isa_create_simple("isa-fdc"); + dev = isa_create("isa-fdc"); + qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]); + qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]); + if (qdev_init(&dev->qdev) != 0) + return NULL; fdctrl = &(DO_UPCAST(fdctrl_isabus_t, busdev, dev)->state); fdctrl->dma_chann = dma_chann; DMA_register_channel(dma_chann, &fdctrl_transfer_handler, fdctrl); - fdctrl_connect_drives(fdctrl, fds); + fdctrl_connect_drives(fdctrl); return fdctrl; } fdctrl_t *fdctrl_init_sysbus(qemu_irq irq, int dma_chann, target_phys_addr_t mmio_base, - BlockDriverState **fds) + DriveInfo **fds) { fdctrl_t *fdctrl; DeviceState *dev; fdctrl_sysbus_t *sys; dev = qdev_create(NULL, "sysbus-fdc"); - qdev_init(dev); + qdev_prop_set_drive(dev, "driveA", fds[0]); + qdev_prop_set_drive(dev, "driveB", fds[1]); + if (qdev_init(dev) != 0) + return NULL; sys = DO_UPCAST(fdctrl_sysbus_t, busdev.qdev, dev); fdctrl = &sys->state; sysbus_connect_irq(&sys->busdev, 0, irq); @@ -1873,20 +1881,22 @@ fdctrl_t *fdctrl_init_sysbus(qemu_irq irq, int dma_chann, fdctrl->dma_chann = dma_chann; DMA_register_channel(dma_chann, &fdctrl_transfer_handler, fdctrl); - fdctrl_connect_drives(fdctrl, fds); + fdctrl_connect_drives(fdctrl); return fdctrl; } fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base, - BlockDriverState **fds, qemu_irq *fdc_tc) + DriveInfo **fds, qemu_irq *fdc_tc) { DeviceState *dev; fdctrl_sysbus_t *sys; fdctrl_t *fdctrl; dev = qdev_create(NULL, "SUNW,fdtwo"); - qdev_init(dev); + qdev_prop_set_drive(dev, "drive", fds[0]); + if (qdev_init(dev) != 0) + return NULL; sys = DO_UPCAST(fdctrl_sysbus_t, busdev.qdev, dev); fdctrl = &sys->state; sysbus_connect_irq(&sys->busdev, 0, irq); @@ -1895,7 +1905,7 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base, fdctrl->dma_chann = -1; - fdctrl_connect_drives(fdctrl, fds); + fdctrl_connect_drives(fdctrl); return fdctrl; } @@ -1985,18 +1995,32 @@ static ISADeviceInfo isa_fdc_info = { .init = isabus_fdc_init1, .qdev.name = "isa-fdc", .qdev.size = sizeof(fdctrl_isabus_t), + .qdev.props = (Property[]) { + DEFINE_PROP_DRIVE("driveA", fdctrl_isabus_t, state.drives[0].dinfo), + DEFINE_PROP_DRIVE("driveB", fdctrl_isabus_t, state.drives[1].dinfo), + DEFINE_PROP_END_OF_LIST(), + }, }; static SysBusDeviceInfo sysbus_fdc_info = { .init = sysbus_fdc_init1, .qdev.name = "sysbus-fdc", .qdev.size = sizeof(fdctrl_sysbus_t), + .qdev.props = (Property[]) { + DEFINE_PROP_DRIVE("driveA", fdctrl_sysbus_t, state.drives[0].dinfo), + DEFINE_PROP_DRIVE("driveB", fdctrl_sysbus_t, state.drives[1].dinfo), + DEFINE_PROP_END_OF_LIST(), + }, }; static SysBusDeviceInfo sun4m_fdc_info = { .init = sun4m_fdc_init1, .qdev.name = "SUNW,fdtwo", .qdev.size = sizeof(fdctrl_sysbus_t), + .qdev.props = (Property[]) { + DEFINE_PROP_DRIVE("drive", fdctrl_sysbus_t, state.drives[0].dinfo), + DEFINE_PROP_END_OF_LIST(), + }, }; static void fdc_register_devices(void) diff --git a/hw/fdc.h b/hw/fdc.h index 1b81ec1..c64e8b4 100644 --- a/hw/fdc.h +++ b/hw/fdc.h @@ -1,12 +1,13 @@ /* fdc.c */ +#include "sysemu.h" #define MAX_FD 2 typedef struct fdctrl_t fdctrl_t; -fdctrl_t *fdctrl_init_isa(BlockDriverState **fds); +fdctrl_t *fdctrl_init_isa(DriveInfo **fds); fdctrl_t *fdctrl_init_sysbus(qemu_irq irq, int dma_chann, target_phys_addr_t mmio_base, - BlockDriverState **fds); + DriveInfo **fds); fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base, - BlockDriverState **fds, qemu_irq *fdc_tc); + DriveInfo **fds, qemu_irq *fdc_tc); int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num); diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index 2a70b8b..9578f28 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -126,7 +126,7 @@ void mips_jazz_init (ram_addr_t ram_size, int s_rtc, s_dma_dummy; NICInfo *nd; PITState *pit; - BlockDriverState *fds[MAX_FD]; + DriveInfo *fds[MAX_FD]; qemu_irq esp_reset; ram_addr_t ram_offset; ram_addr_t bios_offset; @@ -234,8 +234,7 @@ void mips_jazz_init (ram_addr_t ram_size, exit(1); } for (n = 0; n < MAX_FD; n++) { - DriveInfo *dinfo = drive_get(IF_FLOPPY, 0, n); - fds[n] = dinfo ? dinfo->bdrv : NULL; + fds[n] = drive_get(IF_FLOPPY, 0, n); } fdctrl_init_sysbus(rc4030[1], 0, 0x80003000, fds); diff --git a/hw/mips_malta.c b/hw/mips_malta.c index e09e971..7999cf9 100644 --- a/hw/mips_malta.c +++ b/hw/mips_malta.c @@ -786,7 +786,7 @@ void mips_malta_init (ram_addr_t ram_size, int i; DriveInfo *dinfo; DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; - BlockDriverState *fd[MAX_FD]; + DriveInfo *fd[MAX_FD]; int fl_idx = 0; int fl_sectors = 0; @@ -947,8 +947,7 @@ void mips_malta_init (ram_addr_t ram_size, if (parallel_hds[0]) parallel_init(0x378, isa_reserve_irq(7), parallel_hds[0]); for(i = 0; i < MAX_FD; i++) { - dinfo = drive_get(IF_FLOPPY, 0, i); - fd[i] = dinfo ? dinfo->bdrv : NULL; + fd[i] = drive_get(IF_FLOPPY, 0, i); } floppy_controller = fdctrl_init_isa(fd); diff --git a/hw/pc.c b/hw/pc.c index bc2875e..1453e90 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1133,9 +1133,8 @@ static void pc_init1(ram_addr_t ram_size, qemu_irq *isa_irq; qemu_irq *i8259; IsaIrqState *isa_irq_state; - DriveInfo *dinfo; DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; - BlockDriverState *fd[MAX_FD]; + DriveInfo *fd[MAX_FD]; int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled; void *fw_cfg; @@ -1381,8 +1380,7 @@ static void pc_init1(ram_addr_t ram_size, #endif for(i = 0; i < MAX_FD; i++) { - dinfo = drive_get(IF_FLOPPY, 0, i); - fd[i] = dinfo ? dinfo->bdrv : NULL; + fd[i] = drive_get(IF_FLOPPY, 0, i); } floppy_controller = fdctrl_init_isa(fd); diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c index 0525b1e..cb7167e 100644 --- a/hw/ppc_prep.c +++ b/hw/ppc_prep.c @@ -563,9 +563,8 @@ static void ppc_prep_init (ram_addr_t ram_size, PCIBus *pci_bus; qemu_irq *i8259; int ppc_boot_device; - DriveInfo *dinfo; DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; - BlockDriverState *fd[MAX_FD]; + DriveInfo *fd[MAX_FD]; sysctrl = qemu_mallocz(sizeof(sysctrl_t)); @@ -720,8 +719,7 @@ static void ppc_prep_init (ram_addr_t ram_size, // SB16_init(); for(i = 0; i < MAX_FD; i++) { - dinfo = drive_get(IF_FLOPPY, 0, i); - fd[i] = dinfo ? dinfo->bdrv : NULL; + fd[i] = drive_get(IF_FLOPPY, 0, i); } fdctrl_init_isa(fd); diff --git a/hw/sun4m.c b/hw/sun4m.c index a869d15..01c7cb4 100644 --- a/hw/sun4m.c +++ b/hw/sun4m.c @@ -758,9 +758,8 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, qemu_irq fdc_tc; qemu_irq *cpu_halt; unsigned long kernel_size; - BlockDriverState *fd[MAX_FD]; + DriveInfo *fd[MAX_FD]; void *fw_cfg; - DriveInfo *dinfo; /* init CPUs */ if (!cpu_model) @@ -834,10 +833,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, if (hwdef->fd_base) { /* there is zero or one floppy drive */ memset(fd, 0, sizeof(fd)); - dinfo = drive_get(IF_FLOPPY, 0, 0); - if (dinfo) - fd[0] = dinfo->bdrv; - + fd[0] = drive_get(IF_FLOPPY, 0, 0); sun4m_fdctrl_init(slavio_irq[22], hwdef->fd_base, fd, &fdc_tc); } @@ -1562,11 +1558,10 @@ static void sun4c_hw_init(const struct sun4c_hwdef *hwdef, ram_addr_t RAM_size, qemu_irq esp_reset; qemu_irq fdc_tc; unsigned long kernel_size; - BlockDriverState *fd[MAX_FD]; + DriveInfo *fd[MAX_FD]; void *fw_cfg; DeviceState *dev; unsigned int i; - DriveInfo *dinfo; /* init CPU */ if (!cpu_model) @@ -1618,10 +1613,7 @@ static void sun4c_hw_init(const struct sun4c_hwdef *hwdef, ram_addr_t RAM_size, if (hwdef->fd_base != (target_phys_addr_t)-1) { /* there is zero or one floppy drive */ memset(fd, 0, sizeof(fd)); - dinfo = drive_get(IF_FLOPPY, 0, 0); - if (dinfo) - fd[0] = dinfo->bdrv; - + fd[0] = drive_get(IF_FLOPPY, 0, 0); sun4m_fdctrl_init(slavio_irq[1], hwdef->fd_base, fd, &fdc_tc); } diff --git a/hw/sun4u.c b/hw/sun4u.c index 2c97d9d..71f6d19 100644 --- a/hw/sun4u.c +++ b/hw/sun4u.c @@ -573,9 +573,8 @@ static void sun4uv_init(ram_addr_t RAM_size, PCIBus *pci_bus, *pci_bus2, *pci_bus3; qemu_irq *irq; DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; - BlockDriverState *fd[MAX_FD]; + DriveInfo *fd[MAX_FD]; void *fw_cfg; - DriveInfo *dinfo; /* init CPUs */ env = cpu_devinit(cpu_model, hwdef); @@ -631,8 +630,7 @@ static void sun4uv_init(ram_addr_t RAM_size, isa_create_simple("i8042"); for(i = 0; i < MAX_FD; i++) { - dinfo = drive_get(IF_FLOPPY, 0, i); - fd[i] = dinfo ? dinfo->bdrv : NULL; + fd[i] = drive_get(IF_FLOPPY, 0, i); } fdctrl_init_isa(fd); nvram = m48t59_init_isa(0x0074, NVRAM_SIZE, 59);