qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Roman Kagan <rkagan@virtuozzo.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	qemu-block@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	qemu-stable@nongnu.org, Roman Kagan <rkagan@virtuozzo.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>, John Snow <jsnow@redhat.com>,
	Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PATCH v4 1/4] i386/pc: expose identifying the floppy controller
Date: Fri, 25 Dec 2015 18:04:09 +0300	[thread overview]
Message-ID: <1451055852-30910-2-git-send-email-rkagan@virtuozzo.com> (raw)
In-Reply-To: <1451055852-30910-1-git-send-email-rkagan@virtuozzo.com>

Factor out and expose the function to locate the floppy controller in
the system.
It will be useful when dynamically populating the relevant objects in
the ACPI tables.

Signed-off-by: Roman Kagan <rkagan@virtuozzo.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: John Snow <jsnow@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: qemu-block@nongnu.org
Cc: qemu-stable@nongnu.org
---
changes since v3:
 - split out into a separate patch to faciliate review

 hw/i386/pc.c         | 44 ++++++++++++++++++++++++++------------------
 include/hw/i386/pc.h |  2 ++
 2 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 459260b..c36b8cf 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -360,6 +360,31 @@ static const char * const fdc_container_path[] = {
     "/unattached", "/peripheral", "/peripheral-anon"
 };
 
+/*
+ * Locate the FDC at IO address 0x3f0, in order to configure the CMOS registers
+ * and ACPI objects.
+ */
+ISADevice *pc_find_fdc0(void)
+{
+    int i;
+    Object *container;
+    CheckFdcState state = { 0 };
+
+    for (i = 0; i < ARRAY_SIZE(fdc_container_path); i++) {
+        container = container_get(qdev_get_machine(), fdc_container_path[i]);
+        object_child_foreach(container, check_fdc, &state);
+    }
+
+    if (state.multiple) {
+        error_report("warning: multiple floppy disk controllers with "
+                     "iobase=0x3f0 have been found;\n"
+                     "the one being picked for CMOS setup might not reflect "
+                     "your intent");
+    }
+
+    return state.floppy;
+}
+
 static void pc_cmos_init_late(void *opaque)
 {
     pc_cmos_init_late_arg *arg = opaque;
@@ -368,8 +393,6 @@ static void pc_cmos_init_late(void *opaque)
     int8_t heads, sectors;
     int val;
     int i, trans;
-    Object *container;
-    CheckFdcState state = { 0 };
 
     val = 0;
     if (ide_get_geometry(arg->idebus[0], 0,
@@ -399,22 +422,7 @@ static void pc_cmos_init_late(void *opaque)
     }
     rtc_set_memory(s, 0x39, val);
 
-    /*
-     * Locate the FDC at IO address 0x3f0, and configure the CMOS registers
-     * accordingly.
-     */
-    for (i = 0; i < ARRAY_SIZE(fdc_container_path); i++) {
-        container = container_get(qdev_get_machine(), fdc_container_path[i]);
-        object_child_foreach(container, check_fdc, &state);
-    }
-
-    if (state.multiple) {
-        error_report("warning: multiple floppy disk controllers with "
-                     "iobase=0x3f0 have been found;\n"
-                     "the one being picked for CMOS setup might not reflect "
-                     "your intent");
-    }
-    pc_cmos_init_floppy(s, state.floppy);
+    pc_cmos_init_floppy(s, pc_find_fdc0());
 
     qemu_unregister_reset(pc_cmos_init_late, opaque);
 }
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index b0d6283..8122229 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -267,6 +267,8 @@ 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);
+
 /* acpi_piix.c */
 
 I2CBus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
-- 
2.5.0

  reply	other threads:[~2015-12-25 15:04 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-25 15:04 [Qemu-devel] [PATCH v4 0/4] i386: expose floppy-related objects in SSDT Roman Kagan
2015-12-25 15:04 ` Roman Kagan [this message]
2015-12-25 15:04 ` [Qemu-devel] [PATCH v4 2/4] i386/acpi: make floppy controller object dynamic Roman Kagan
2015-12-25 15:04 ` [Qemu-devel] [PATCH v4 3/4] expose floppy drive geometry and CMOS type Roman Kagan
2015-12-25 15:04 ` [Qemu-devel] [PATCH v4 4/4] i386: populate floppy drive information in SSDT Roman Kagan
2015-12-29 14:09 ` [Qemu-devel] [PATCH v4 0/4] i386: expose floppy-related objects " Igor Mammedov
2015-12-29 16:17   ` Roman Kagan
2015-12-29 16:27     ` Igor Mammedov
2015-12-29 16:42     ` Michael S. Tsirkin
  -- strict thread matches above, loose matches on Subject: below --
2015-12-16  7:45 [Qemu-devel] [PATCH v2 1/1] " Denis V. Lunev
2015-12-16 16:46 ` John Snow
2015-12-16 16:46 ` Igor Mammedov
2015-12-16 17:34   ` Roman Kagan
2015-12-16 22:15     ` Igor Mammedov
2015-12-17 13:26       ` Roman Kagan
2015-12-17 17:08         ` Igor Mammedov
2015-12-18 19:32 ` [Qemu-devel] [PATCH v3 0/2] " Roman Kagan
2015-12-18 19:32   ` [Qemu-devel] [PATCH v3 1/2] " Roman Kagan
2015-12-22 15:07     ` Michael S. Tsirkin
2015-12-22 15:13       ` Roman Kagan
2015-12-22 15:56     ` Igor Mammedov
2015-12-18 19:32   ` [Qemu-devel] [PATCH v3 2/2] tests: update expected SSDT for floppy changes Roman Kagan
2015-12-22 16:41     ` Michael S. Tsirkin
2015-12-23 13:08       ` Roman Kagan
2015-12-23 13:45         ` Michael S. Tsirkin
2015-12-23 15:06           ` Roman Kagan
2015-12-23 17:20             ` Roman Kagan
2015-12-23 17:47               ` Igor Mammedov
2015-12-23 17:51                 ` Roman Kagan
2015-12-24  6:17                   ` Michael S. Tsirkin
2015-12-25 15:25                     ` Roman Kagan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1451055852-30910-2-git-send-email-rkagan@virtuozzo.com \
    --to=rkagan@virtuozzo.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).