From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Denis V. Lunev" <den@openvz.org>
Cc: Eduardo Habkost <ehabkost@redhat.com>,
qemu-devel@nongnu.org, Roman Kagan <rkagan@virtuozzo.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Igor Mammedov <imammedo@redhat.com>,
Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH for 2.5? 1/1] DSDT: add floppy-related objects
Date: Mon, 14 Dec 2015 11:21:18 +0200 [thread overview]
Message-ID: <20151214112012-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1450081359-7753-1-git-send-email-den@openvz.org>
On Mon, Dec 14, 2015 at 11:22:39AM +0300, Denis V. Lunev wrote:
> From: Roman Kagan <rkagan@virtuozzo.com>
>
> On x86-based systems Linux determines the presence and the type of
> floppy drives via a query of a CMOS field. So does SeaBIOS when
> populating the return data for int 0x13 function 0x08.
>
> Windows doesn't; instead, it requests this information from BIOS via int
> 0x13/0x08 or through ACPI objects _FDE (Floppy Drive Enumerate) and _FDI
> (Floppy Drive Information). On UEFI systems only ACPI-based detection
> is supported.
>
> QEMU used not to provide those objects in its DSDT; as a result floppy
> drives were invisible to Windows on UEFI/OVMF.
>
> This patch implements those objects in ASL, making the ACPI interpreter
> query the CMOS field and populate the objects. The data values used for
> _FDI (which, per ACPI spec, is supposed to be equivalent to BIOS int
> 0x13/0x08) are taken from SeaBIOS.
>
> Signed-off-by: Roman Kagan <rkagan@virtuozzo.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Michael S. Tsirkin <mst@redhat.com>
> CC: Igor Mammedov <imammedo@redhat.com>
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Eduardo Habkost <ehabkost@redhat.com>
This is not a regression, so I'm inclined not to merge this for 2.5.
Pls correct me if I'm wrong.
> ---
> hw/i386/acpi-dsdt-isa.dsl | 109 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 109 insertions(+)
>
> diff --git a/hw/i386/acpi-dsdt-isa.dsl b/hw/i386/acpi-dsdt-isa.dsl
> index 89caa16..8b03e2b 100644
> --- a/hw/i386/acpi-dsdt-isa.dsl
> +++ b/hw/i386/acpi-dsdt-isa.dsl
> @@ -23,6 +23,8 @@ Scope(\_SB.PCI0.ISA) {
> IRQNoFlags() { 8 }
> IO(Decode16, 0x0072, 0x0072, 0x02, 0x06)
> })
> +
> + OperationRegion(CMS0, SystemCMOS, Zero, 0x40)
> }
>
> Device(KBD) {
> @@ -63,6 +65,113 @@ Scope(\_SB.PCI0.ISA) {
> IRQNoFlags() { 6 }
> DMA(Compatibility, NotBusMaster, Transfer8) { 2 }
> })
> +
> + Field(^RTC.CMS0, ByteAcc, NoLock, Preserve) {
> + Offset(0x10),
> + FDTS, 8
> + }
> +
> + Method(FDTY, 1, NotSerialized) {
> + If (LEqual(Arg0, 0x00)) {
> + Return (And(ShiftRight(FDTS, 0x04), 0x0F))
> + } ElseIf (LEqual(Arg0, 0x01)) {
> + Return (And(FDTS, 0x0F))
> + } Else {
> + Return (0x00)
> + }
> + }
> +
> + Method(_FDE, 0, NotSerialized) {
> + Store(Buffer(0x14) {}, Local0)
> + CreateDWordField(Local0, 0x00, FDAE)
> + CreateDWordField(Local0, 0x04, FDBE)
> + CreateDWordField(Local0, 0x10, TAPE)
> +
> + If (LNotEqual(FDTY(0x00), 0)) {
> + Store(0x01, FDAE)
> + }
> + If (LNotEqual(FDTY(0x01), 0)) {
> + Store(0x01, FDBE)
> + }
> + Store(0x02, TAPE)
> +
> + Return (Local0)
> + }
> +
> + Method(FSTA, 1, NotSerialized) {
> + If (LEqual(FDTY(Arg0), 0x00)) {
> + Return (0x00)
> + } Else {
> + Return (0x0F)
> + }
> + }
> +
> + Method(XFDI, 1, NotSerialized) {
> + Store(FDTY(Arg0), Local0)
> +
> + Store(Package (0x10) {
> + 0x00, // Drive Number
> + 0x00, // Device Type
> + 0x00, // Maximum Cylinder Number
> + 0x00, // Maximum Sector Number
> + 0x00, // Maximum Head Number
> + /* SeaBIOS uses the below values regardless of the drive
> + * type, so shall we */
> + 0xAF, // disk_specify_1
> + 0x02, // disk_specify_2
> + 0x25, // disk_motor_wait
> + 0x02, // disk_sector_siz
> + 0x12, // disk_eot
> + 0x1B, // disk_rw_gap
> + 0xFF, // disk_dtl
> + 0x6C, // disk_formt_gap
> + 0xF6, // disk_fill
> + 0x0F, // disk_head_sttl
> + 0x08, // disk_motor_strt
> + }, Local1)
> +
> + Store(Arg0, Index(Local1, 0x00))
> + Store(Local0, Index(Local1, 0x01))
> +
> + If (LEqual(Local0, 4)) {
> + /* 1.44 Mb 3"5 drive */
> + Store(0x4F, Index(Local1, 0x02))
> + Store(0x12, Index(Local1, 0x03))
> + Store(0x01, Index(Local1, 0x04))
> + } ElseIf (LEqual(Local0, 5)) {
> + /* 2.88 Mb 3"5 drive */
> + Store(0x4F, Index(Local1, 0x02))
> + Store(0x24, Index(Local1, 0x03))
> + Store(0x01, Index(Local1, 0x04))
> + } ElseIf (LEqual(Local0, 2)) {
> + /* 1.2 Mb 5"5 drive */
> + Store(0x4F, Index(Local1, 0x02))
> + Store(0x0F, Index(Local1, 0x03))
> + Store(0x01, Index(Local1, 0x04))
> + }
> +
> + Return (Local1)
> + }
> +
> + Device(FLPA) {
> + Name(_ADR, 0x00)
> + Method(_STA, 0, NotSerialized) {
> + Return (FSTA(_ADR))
> + }
> + Method(_FDI, 0, NotSerialized) {
> + Return (XFDI(_ADR))
> + }
> + }
> +
> + Device(FLPB) {
> + Name(_ADR, 0x01)
> + Method(_STA, 0, NotSerialized) {
> + Return (FSTA(_ADR))
> + }
> + Method(_FDI, 0, NotSerialized) {
> + Return (XFDI(_ADR))
> + }
> + }
> }
>
> Device(LPT) {
> --
> 2.1.4
next prev parent reply other threads:[~2015-12-14 9:21 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-14 8:22 [Qemu-devel] [PATCH for 2.5? 1/1] DSDT: add floppy-related objects Denis V. Lunev
2015-12-14 9:21 ` Michael S. Tsirkin [this message]
2015-12-14 9:26 ` Denis V. Lunev
2015-12-14 9:28 ` Paolo Bonzini
2015-12-14 9:41 ` Denis V. Lunev
2015-12-14 9:44 ` Paolo Bonzini
2015-12-14 9:49 ` Denis V. Lunev
2015-12-14 9:52 ` Paolo Bonzini
2015-12-14 14:21 ` Michael S. Tsirkin
2015-12-14 15:05 ` Igor Mammedov
2015-12-14 15:11 ` Denis V. Lunev
2015-12-14 15:27 ` Igor Mammedov
2015-12-14 15:38 ` Roman Kagan
2015-12-14 15:59 ` Igor Mammedov
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=20151214112012-mutt-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=den@openvz.org \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rkagan@virtuozzo.com \
--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).