From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48892) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIeVS-0007nF-8l for qemu-devel@nongnu.org; Mon, 11 Jan 2016 10:35:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aIeVR-0006ay-43 for qemu-devel@nongnu.org; Mon, 11 Jan 2016 10:35:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:32888) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIeVQ-0006aj-Vs for qemu-devel@nongnu.org; Mon, 11 Jan 2016 10:35:41 -0500 From: Igor Mammedov Date: Mon, 11 Jan 2016 16:35:33 +0100 Message-Id: <1452526534-106444-3-git-send-email-imammedo@redhat.com> In-Reply-To: <1452526534-106444-1-git-send-email-imammedo@redhat.com> References: <1452526534-106444-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH v6 2/3] expose floppy drive geometry and CMOS type List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: rkagan@virtuozzo.com, mst@redhat.com From: Roman Kagan Make it possible to query the geometry and the CMOS type of a floppy drive outside of the respective source files. It will be useful, in particular, when dynamically building ACPI tables, and will allow to properly populate the corresponding ACPI objects and thus enable BIOS-less systems to access the floppy drives. Signed-off-by: Roman Kagan Signed-off-by: Igor Mammedov Reviewed-by: John Snow --- hw/block/fdc.c | 11 +++++++++++ hw/i386/pc.c | 2 +- include/hw/block/fdc.h | 2 ++ include/hw/i386/pc.h | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/hw/block/fdc.c b/hw/block/fdc.c index 4292ece..c858c5f 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -2408,6 +2408,17 @@ FDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i) return isa->state.drives[i].drive; } +void isa_fdc_get_drive_geometry(ISADevice *fdc, int i, uint8_t *cylinders, + uint8_t *heads, uint8_t *sectors) +{ + FDCtrlISABus *isa = ISA_FDC(fdc); + FDrive *drv = &isa->state.drives[i]; + + *cylinders = drv->max_track; + *heads = (drv->flags & FDISK_DBL_SIDES) ? 2 : 1; + *sectors = drv->last_sect; +} + static const VMStateDescription vmstate_isa_fdc ={ .name = "fdc", .version_id = 2, diff --git a/hw/i386/pc.c b/hw/i386/pc.c index c36b8cf..99fab83 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -199,7 +199,7 @@ static void pic_irq_request(void *opaque, int irq, int level) #define REG_EQUIPMENT_BYTE 0x14 -static int cmos_get_fd_drive_type(FDriveType fd0) +int cmos_get_fd_drive_type(FDriveType fd0) { int val; diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h index d48b2f8..adaf3dc 100644 --- a/include/hw/block/fdc.h +++ b/include/hw/block/fdc.h @@ -22,5 +22,7 @@ void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, DriveInfo **fds, qemu_irq *fdc_tc); FDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i); +void isa_fdc_get_drive_geometry(ISADevice *fdc, int i, uint8_t *cylinders, + uint8_t *heads, uint8_t *sectors); #endif diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 8122229..d044a9a 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -268,6 +268,7 @@ typedef void (*cpu_set_smm_t)(int smm, void *arg); void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name); ISADevice *pc_find_fdc0(void); +int cmos_get_fd_drive_type(FDriveType fd0); /* acpi_piix.c */ -- 1.8.3.1