Added qemu-devel, since that is where this stuff belongs now. Everyone else, sorry for the dupe...
On Thu, Nov 21, 2013 at 07:14:27PM +0100, Paolo Bonzini wrote: > Can you remind us about your DSDT modifications? It should be possible > to patch the HPET and applesmc bits appropriately from QEMU (or to move > them from the DSDT to an SSDT that is built entirely in QEMU). > > It actually isn't impossible that Mac OS X would boot just fine with 1.8... My current DSDT patch (against QEMU) is enclosed below. The HPET basically needs "IRQNoFlags() {2, 8}", which causes XP to bluescreen. So, I've made it conditional on the SMC STA method returning success (0x0B). The SMC node's STA method returns 0x0B unconditionally on real hardware. So I was planning on figuring out what's easier in the context of the most recent QEMU code base: 1. dynamically generating (during qemu runtime initialization) a DSDT entry for SMC with hardcoded 0x0B STA method, whenever "--device isa-applesmc" is present on the qemu command line or 2. writing a static (compile-time) SMC node but with a slightly smarter _STA method, which returns 0x0B when "--device isa-applesmc" was given on the cmdline, or which returns 0x00 in the absence of "--device isa-applesmc". Either 1. or 2. could be used with HPET -- I can make inclusion of IRQNoFlags dependent on either the success or on the presence of SMC._STA() :) Let me know what you think. Thanks, --Gabriel ############################################################################### # Modify DSDT entry for HPET: conditionally insert "IRQNoFlags() {2, 8}" into # _CRS method only if an AppleSMC DSDT node is also present and enabled (it # otherwise causes WinXP to BSOD). ############################################################################### diff --git a/hw/i386/acpi-dsdt-hpet.dsl b/hw/i386/acpi-dsdt-hpet.dsl index dfde174..205cf05 100644 --- a/hw/i386/acpi-dsdt-hpet.dsl +++ b/hw/i386/acpi-dsdt-hpet.dsl @@ -38,14 +38,23 @@ Scope(\_SB) { } Return (0x0F) } - Name(_CRS, ResourceTemplate() { -#if 0 /* This makes WinXP BSOD for not yet figured reasons. */ - IRQNoFlags() {2, 8} -#endif + Name(RESP, ResourceTemplate() { Memory32Fixed(ReadOnly, 0xFED00000, // Address Base 0x00000400, // Address Length ) }) + Name(RESI, ResourceTemplate() { + IRQNoFlags() {2, 8} + }) + Method(_CRS, 0) { + Store(\_SB.PCI0.ISA.SMC._STA(), Local0) + If (LEqual(Local0, 0x0B)) { // AppleSMC present, add IRQ + ConcatenateResTemplate(RESP, RESI, Local1) + Return (Local1) + } else { + Return (RESP) + } + } } } ############################################################################### # Add DSDT entry for AppleSMC; # TODO: find a way to make the _STA method return 0x0b only if QEMU command # line contains "-device isa-applesmc", and 0x00 otherwise! ############################################################################### diff --git a/hw/i386/acpi-dsdt-isa.dsl b/hw/i386/acpi-dsdt-isa.dsl index 89caa16..b7a27bb 100644 --- a/hw/i386/acpi-dsdt-isa.dsl +++ b/hw/i386/acpi-dsdt-isa.dsl @@ -16,6 +16,28 @@ /* Common legacy ISA style devices. */ Scope(\_SB.PCI0.ISA) { + Device (SMC) { + Name(_HID, EisaId("APP0001")) + OperationRegion(SMC, SystemIO, 0x0300, 0x20) + Field(SMC, ByteAcc, NoLock, Preserve) { + Offset(0x04), + CMDP, 8, + } + Method(_STA, 0) { +// Store(0x10, CMDP) // APPLESMC_READ_CMD +// Store(CMDP, Local0) +// If (LEqual(Local0, 0x0c)) { + Return (0x0B) +// } Else { +// Return (0x00) +// } + } + Name (_CRS, ResourceTemplate () { + IO (Decode16, 0x0300, 0x0300, 0x01, 0x20) + IRQNoFlags() { 6 } + }) + } + Device(RTC) { Name(_HID, EisaId("PNP0B00")) Name(_CRS, ResourceTemplate() {