[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 4/4] pc: merge DSDT common parts into acpi-ds
From: |
Michael S. Tsirkin |
Subject: |
Re: [Qemu-devel] [PATCH v2 4/4] pc: merge DSDT common parts into acpi-dsdt-common.dsl |
Date: |
Mon, 19 Jan 2015 17:26:23 +0200 |
On Wed, Dec 24, 2014 at 05:07:38PM +0100, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <address@hidden>
This isn't a dependency of patches 5 and on, is it?
> ---
> hw/i386/acpi-dsdt-common.dsl | 345
> +++++++++++++++++++++++++++++++++++++-
> hw/i386/acpi-dsdt-dbug.dsl | 41 -----
> hw/i386/acpi-dsdt-hpet.dsl | 48 ------
> hw/i386/acpi-dsdt-isa.dsl | 132 ---------------
> hw/i386/acpi-dsdt-mem-hotplug.dsl | 176 -------------------
> 5 files changed, 341 insertions(+), 401 deletions(-)
> delete mode 100644 hw/i386/acpi-dsdt-dbug.dsl
> delete mode 100644 hw/i386/acpi-dsdt-hpet.dsl
> delete mode 100644 hw/i386/acpi-dsdt-isa.dsl
> delete mode 100644 hw/i386/acpi-dsdt-mem-hotplug.dsl
>
> diff --git a/hw/i386/acpi-dsdt-common.dsl b/hw/i386/acpi-dsdt-common.dsl
> index 1929f8f..19e9753 100644
> --- a/hw/i386/acpi-dsdt-common.dsl
> +++ b/hw/i386/acpi-dsdt-common.dsl
> @@ -24,10 +24,347 @@ DefinitionBlock ("acpi-dsdt-common.aml", "SSDT", 0x01,
> "BXPC", "BXSSDTCOMM", 0x1
> External(\_SB.PCI0.PCI, DeviceObj)
>
> #include "hw/acpi/pc-hotplug.h"
> -#include "acpi-dsdt-dbug.dsl"
> -#include "acpi-dsdt-hpet.dsl"
> -#include "acpi-dsdt-isa.dsl"
> -#include "acpi-dsdt-mem-hotplug.dsl"
> +
> +/****************************************************************
> + * Debugging
> + ****************************************************************/
> +
> + Scope(\) {
> + /* Debug Output */
> + OperationRegion(DBG, SystemIO, 0x0402, 0x01)
> + Field(DBG, ByteAcc, NoLock, Preserve) {
> + DBGB, 8,
> + }
> +
> + /* Debug method - use this method to send output to the QEMU
> + * BIOS debug port. This method handles strings, integers,
> + * and buffers. For example: DBUG("abc") DBUG(0x123) */
> + Method(DBUG, 1) {
> + ToHexString(Arg0, Local0)
> + ToBuffer(Local0, Local0)
> + Subtract(SizeOf(Local0), 1, Local1)
> + Store(Zero, Local2)
> + While (LLess(Local2, Local1)) {
> + Store(DerefOf(Index(Local0, Local2)), DBGB)
> + Increment(Local2)
> + }
> + Store(0x0A, DBGB)
> + }
> + }
> +
> + /****************************************************************
> + * HPET
> + ****************************************************************/
> +
> + Scope(\_SB) {
> + Device(HPET) {
> + Name(_HID, EISAID("PNP0103"))
> + Name(_UID, 0)
> + OperationRegion(HPTM, SystemMemory, 0xFED00000, 0x400)
> + Field(HPTM, DWordAcc, Lock, Preserve) {
> + VEND, 32,
> + PRD, 32,
> + }
> + Method(_STA, 0, NotSerialized) {
> + Store(VEND, Local0)
> + Store(PRD, Local1)
> + ShiftRight(Local0, 16, Local0)
> + If (LOr(LEqual(Local0, 0), LEqual(Local0, 0xffff))) {
> + Return (0x0)
> + }
> + If (LOr(LEqual(Local1, 0), LGreater(Local1, 100000000))) {
> + Return (0x0)
> + }
> + Return (0x0F)
> + }
> + Name(_CRS, ResourceTemplate() {
> + Memory32Fixed(ReadOnly,
> + 0xFED00000, // Address Base
> + 0x00000400, // Address Length
> + )
> + })
> + }
> + }
> +
> + /* Common legacy ISA style devices. */
> + Scope(\_SB.PCI0.ISA) {
> +
> + Device (SMC) {
> + Name(_HID, EisaId("APP0001"))
> + /* _STA will be patched to 0x0B if AppleSMC is present */
> + ACPI_EXTRACT_NAME_BYTE_CONST dsdt_applesmc_sta
> + Name(_STA, 0xF0)
> + Name(_CRS, ResourceTemplate () {
> + IO (Decode16, 0x0300, 0x0300, 0x01, 0x20)
> + IRQNoFlags() { 6 }
> + })
> + }
> +
> + Device(RTC) {
> + Name(_HID, EisaId("PNP0B00"))
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, 0x0070, 0x0070, 0x10, 0x02)
> + IRQNoFlags() { 8 }
> + IO(Decode16, 0x0072, 0x0072, 0x02, 0x06)
> + })
> + }
> +
> + Device(KBD) {
> + Name(_HID, EisaId("PNP0303"))
> + Method(_STA, 0, NotSerialized) {
> + Return (0x0f)
> + }
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, 0x0060, 0x0060, 0x01, 0x01)
> + IO(Decode16, 0x0064, 0x0064, 0x01, 0x01)
> + IRQNoFlags() { 1 }
> + })
> + }
> +
> + Device(MOU) {
> + Name(_HID, EisaId("PNP0F13"))
> + Method(_STA, 0, NotSerialized) {
> + Return (0x0f)
> + }
> + Name(_CRS, ResourceTemplate() {
> + IRQNoFlags() { 12 }
> + })
> + }
> +
> + External(FDEN)
> + Device(FDC0) {
> + Name(_HID, EisaId("PNP0700"))
> + Method(_STA, 0, NotSerialized) {
> + Store(FDEN, Local0)
> + If (LEqual(Local0, 0)) {
> + Return (0x00)
> + } Else {
> + Return (0x0F)
> + }
> + }
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, 0x03F2, 0x03F2, 0x00, 0x04)
> + IO(Decode16, 0x03F7, 0x03F7, 0x00, 0x01)
> + IRQNoFlags() { 6 }
> + DMA(Compatibility, NotBusMaster, Transfer8) { 2 }
> + })
> + }
> +
> + External(LPEN)
> + Device(LPT) {
> + Name(_HID, EisaId("PNP0400"))
> + Method(_STA, 0, NotSerialized) {
> + Store(LPEN, Local0)
> + If (LEqual(Local0, 0)) {
> + Return (0x00)
> + } Else {
> + Return (0x0F)
> + }
> + }
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, 0x0378, 0x0378, 0x08, 0x08)
> + IRQNoFlags() { 7 }
> + })
> + }
> +
> + External(CAEN)
> + Device(COM1) {
> + Name(_HID, EisaId("PNP0501"))
> + Name(_UID, 0x01)
> + Method(_STA, 0, NotSerialized) {
> + Store(CAEN, Local0)
> + If (LEqual(Local0, 0)) {
> + Return (0x00)
> + } Else {
> + Return (0x0F)
> + }
> + }
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, 0x03F8, 0x03F8, 0x00, 0x08)
> + IRQNoFlags() { 4 }
> + })
> + }
> +
> + External(CBEN)
> + Device(COM2) {
> + Name(_HID, EisaId("PNP0501"))
> + Name(_UID, 0x02)
> + Method(_STA, 0, NotSerialized) {
> + Store(CBEN, Local0)
> + If (LEqual(Local0, 0)) {
> + Return (0x00)
> + } Else {
> + Return (0x0F)
> + }
> + }
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, 0x02F8, 0x02F8, 0x00, 0x08)
> + IRQNoFlags() { 3 }
> + })
> + }
> + }
> +
> + External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> +
> + Scope(\_SB.PCI0) {
> + Device(MEMORY_HOTPLUG_DEVICE) {
> + Name(_HID, "PNP0A06")
> + Name(_UID, "Memory hotplug resources")
> + External(MEMORY_SLOTS_NUMBER, IntObj)
> +
> + /* Memory hotplug IO registers */
> + OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> + ACPI_MEMORY_HOTPLUG_BASE,
> + ACPI_MEMORY_HOTPLUG_IO_LEN)
> +
> + Name(_CRS, ResourceTemplate() {
> + IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE,
> ACPI_MEMORY_HOTPLUG_BASE,
> + 0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> + })
> +
> + Method(_STA, 0) {
> + If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> + Return(0x0)
> + }
> + /* present, functioning, decoding, not shown in UI */
> + Return(0xB)
> + }
> +
> + Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> + MEMORY_SLOT_ADDR_LOW, 32, // read only
> + MEMORY_SLOT_ADDR_HIGH, 32, // read only
> + MEMORY_SLOT_SIZE_LOW, 32, // read only
> + MEMORY_SLOT_SIZE_HIGH, 32, // read only
> + MEMORY_SLOT_PROXIMITY, 32, // read only
> + }
> + Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
> + Offset(20),
> + MEMORY_SLOT_ENABLED, 1, // 1 if enabled, read only
> + MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert
> event. (write) 1 to clear event
> + }
> +
> + Mutex (MEMORY_SLOT_LOCK, 0)
> + Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> + MEMORY_SLOT_SLECTOR, 32, // DIMM selector, write only
> + MEMORY_SLOT_OST_EVENT, 32, // _OST event code, write only
> + MEMORY_SLOT_OST_STATUS, 32, // _OST status code, write only
> + }
> +
> + Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> + If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> + Return(Zero)
> + }
> +
> + Store(Zero, Local0) // Mem devs iterrator
> + Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> + while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> + Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
> + If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory
> device needs check
> + MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> + Store(1, MEMORY_SLOT_INSERT_EVENT)
> + }
> + // TODO: handle memory eject request
> + Add(Local0, One, Local0) // goto next DIMM
> + }
> + Release(MEMORY_SLOT_LOCK)
> + Return(One)
> + }
> +
> + Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> + Store(Zero, Local0)
> +
> + Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> + Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> +
> + If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> + Store(0xF, Local0)
> + }
> +
> + Release(MEMORY_SLOT_LOCK)
> + Return(Local0)
> + }
> +
> + Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> + Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> + Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> +
> + Name(MR64, ResourceTemplate() {
> + QWordMemory(ResourceProducer, PosDecode, MinFixed,
> MaxFixed,
> + Cacheable, ReadWrite,
> + 0x0000000000000000, // Address Space Granularity
> + 0x0000000000000000, // Address Range Minimum
> + 0xFFFFFFFFFFFFFFFE, // Address Range Maximum
> + 0x0000000000000000, // Address Translation Offset
> + 0xFFFFFFFFFFFFFFFF, // Address Length
> + ,, MW64, AddressRangeMemory, TypeStatic)
> + })
> +
> + CreateDWordField(MR64, 14, MINL)
> + CreateDWordField(MR64, 18, MINH)
> + CreateDWordField(MR64, 38, LENL)
> + CreateDWordField(MR64, 42, LENH)
> + CreateDWordField(MR64, 22, MAXL)
> + CreateDWordField(MR64, 26, MAXH)
> +
> + Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> + Store(MEMORY_SLOT_ADDR_LOW, MINL)
> + Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> + Store(MEMORY_SLOT_SIZE_LOW, LENL)
> +
> + // 64-bit math: MAX = MIN + LEN - 1
> + Add(MINL, LENL, MAXL)
> + Add(MINH, LENH, MAXH)
> + If (LLess(MAXL, MINL)) {
> + Add(MAXH, One, MAXH)
> + }
> + If (LLess(MAXL, One)) {
> + Subtract(MAXH, One, MAXH)
> + }
> + Subtract(MAXL, One, MAXL)
> +
> + If (LEqual(MAXH, Zero)){
> + Name(MR32, ResourceTemplate() {
> + DWordMemory(ResourceProducer, PosDecode, MinFixed,
> MaxFixed,
> + Cacheable, ReadWrite,
> + 0x00000000, // Address Space Granularity
> + 0x00000000, // Address Range Minimum
> + 0xFFFFFFFE, // Address Range Maximum
> + 0x00000000, // Address Translation Offset
> + 0xFFFFFFFF, // Address Length
> + ,, MW32, AddressRangeMemory, TypeStatic)
> + })
> + CreateDWordField(MR32, MW32._MIN, MIN)
> + CreateDWordField(MR32, MW32._MAX, MAX)
> + CreateDWordField(MR32, MW32._LEN, LEN)
> + Store(MINL, MIN)
> + Store(MAXL, MAX)
> + Store(LENL, LEN)
> +
> + Release(MEMORY_SLOT_LOCK)
> + Return(MR32)
> + }
> +
> + Release(MEMORY_SLOT_LOCK)
> + Return(MR64)
> + }
> +
> + Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> + Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> + Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> + Store(MEMORY_SLOT_PROXIMITY, Local0)
> + Release(MEMORY_SLOT_LOCK)
> + Return(Local0)
> + }
> +
> + Method(MEMORY_SLOT_OST_METHOD, 4) {
> + Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> + Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> + Store(Arg1, MEMORY_SLOT_OST_EVENT)
> + Store(Arg2, MEMORY_SLOT_OST_STATUS)
> + Release(MEMORY_SLOT_LOCK)
> + }
> + } // Device()
> + } // Scope()
>
>
> /****************************************************************
> diff --git a/hw/i386/acpi-dsdt-dbug.dsl b/hw/i386/acpi-dsdt-dbug.dsl
> deleted file mode 100644
> index 86230f7..0000000
> --- a/hw/i386/acpi-dsdt-dbug.dsl
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> -
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> -
> - * You should have received a copy of the GNU General Public License along
> - * with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -/****************************************************************
> - * Debugging
> - ****************************************************************/
> -
> -Scope(\) {
> - /* Debug Output */
> - OperationRegion(DBG, SystemIO, 0x0402, 0x01)
> - Field(DBG, ByteAcc, NoLock, Preserve) {
> - DBGB, 8,
> - }
> -
> - /* Debug method - use this method to send output to the QEMU
> - * BIOS debug port. This method handles strings, integers,
> - * and buffers. For example: DBUG("abc") DBUG(0x123) */
> - Method(DBUG, 1) {
> - ToHexString(Arg0, Local0)
> - ToBuffer(Local0, Local0)
> - Subtract(SizeOf(Local0), 1, Local1)
> - Store(Zero, Local2)
> - While (LLess(Local2, Local1)) {
> - Store(DerefOf(Index(Local0, Local2)), DBGB)
> - Increment(Local2)
> - }
> - Store(0x0A, DBGB)
> - }
> -}
> diff --git a/hw/i386/acpi-dsdt-hpet.dsl b/hw/i386/acpi-dsdt-hpet.dsl
> deleted file mode 100644
> index 44961b8..0000000
> --- a/hw/i386/acpi-dsdt-hpet.dsl
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> -
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> -
> - * You should have received a copy of the GNU General Public License along
> - * with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -/****************************************************************
> - * HPET
> - ****************************************************************/
> -
> -Scope(\_SB) {
> - Device(HPET) {
> - Name(_HID, EISAID("PNP0103"))
> - Name(_UID, 0)
> - OperationRegion(HPTM, SystemMemory, 0xFED00000, 0x400)
> - Field(HPTM, DWordAcc, Lock, Preserve) {
> - VEND, 32,
> - PRD, 32,
> - }
> - Method(_STA, 0, NotSerialized) {
> - Store(VEND, Local0)
> - Store(PRD, Local1)
> - ShiftRight(Local0, 16, Local0)
> - If (LOr(LEqual(Local0, 0), LEqual(Local0, 0xffff))) {
> - Return (0x0)
> - }
> - If (LOr(LEqual(Local1, 0), LGreater(Local1, 100000000))) {
> - Return (0x0)
> - }
> - Return (0x0F)
> - }
> - Name(_CRS, ResourceTemplate() {
> - Memory32Fixed(ReadOnly,
> - 0xFED00000, // Address Base
> - 0x00000400, // Address Length
> - )
> - })
> - }
> -}
> diff --git a/hw/i386/acpi-dsdt-isa.dsl b/hw/i386/acpi-dsdt-isa.dsl
> deleted file mode 100644
> index a8851b0..0000000
> --- a/hw/i386/acpi-dsdt-isa.dsl
> +++ /dev/null
> @@ -1,132 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> -
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> -
> - * You should have received a copy of the GNU General Public License along
> - * with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -/* Common legacy ISA style devices. */
> -Scope(\_SB.PCI0.ISA) {
> -
> - Device (SMC) {
> - Name(_HID, EisaId("APP0001"))
> - /* _STA will be patched to 0x0B if AppleSMC is present */
> - ACPI_EXTRACT_NAME_BYTE_CONST dsdt_applesmc_sta
> - Name(_STA, 0xF0)
> - Name(_CRS, ResourceTemplate () {
> - IO (Decode16, 0x0300, 0x0300, 0x01, 0x20)
> - IRQNoFlags() { 6 }
> - })
> - }
> -
> - Device(RTC) {
> - Name(_HID, EisaId("PNP0B00"))
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x0070, 0x0070, 0x10, 0x02)
> - IRQNoFlags() { 8 }
> - IO(Decode16, 0x0072, 0x0072, 0x02, 0x06)
> - })
> - }
> -
> - Device(KBD) {
> - Name(_HID, EisaId("PNP0303"))
> - Method(_STA, 0, NotSerialized) {
> - Return (0x0f)
> - }
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x0060, 0x0060, 0x01, 0x01)
> - IO(Decode16, 0x0064, 0x0064, 0x01, 0x01)
> - IRQNoFlags() { 1 }
> - })
> - }
> -
> - Device(MOU) {
> - Name(_HID, EisaId("PNP0F13"))
> - Method(_STA, 0, NotSerialized) {
> - Return (0x0f)
> - }
> - Name(_CRS, ResourceTemplate() {
> - IRQNoFlags() { 12 }
> - })
> - }
> -
> - External(FDEN)
> - Device(FDC0) {
> - Name(_HID, EisaId("PNP0700"))
> - Method(_STA, 0, NotSerialized) {
> - Store(FDEN, Local0)
> - If (LEqual(Local0, 0)) {
> - Return (0x00)
> - } Else {
> - Return (0x0F)
> - }
> - }
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x03F2, 0x03F2, 0x00, 0x04)
> - IO(Decode16, 0x03F7, 0x03F7, 0x00, 0x01)
> - IRQNoFlags() { 6 }
> - DMA(Compatibility, NotBusMaster, Transfer8) { 2 }
> - })
> - }
> -
> - External(LPEN)
> - Device(LPT) {
> - Name(_HID, EisaId("PNP0400"))
> - Method(_STA, 0, NotSerialized) {
> - Store(LPEN, Local0)
> - If (LEqual(Local0, 0)) {
> - Return (0x00)
> - } Else {
> - Return (0x0F)
> - }
> - }
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x0378, 0x0378, 0x08, 0x08)
> - IRQNoFlags() { 7 }
> - })
> - }
> -
> - External(CAEN)
> - Device(COM1) {
> - Name(_HID, EisaId("PNP0501"))
> - Name(_UID, 0x01)
> - Method(_STA, 0, NotSerialized) {
> - Store(CAEN, Local0)
> - If (LEqual(Local0, 0)) {
> - Return (0x00)
> - } Else {
> - Return (0x0F)
> - }
> - }
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x03F8, 0x03F8, 0x00, 0x08)
> - IRQNoFlags() { 4 }
> - })
> - }
> -
> - External(CBEN)
> - Device(COM2) {
> - Name(_HID, EisaId("PNP0501"))
> - Name(_UID, 0x02)
> - Method(_STA, 0, NotSerialized) {
> - Store(CBEN, Local0)
> - If (LEqual(Local0, 0)) {
> - Return (0x00)
> - } Else {
> - Return (0x0F)
> - }
> - }
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x02F8, 0x02F8, 0x00, 0x08)
> - IRQNoFlags() { 3 }
> - })
> - }
> -}
> diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl
> b/hw/i386/acpi-dsdt-mem-hotplug.dsl
> deleted file mode 100644
> index 2a36c47..0000000
> --- a/hw/i386/acpi-dsdt-mem-hotplug.dsl
> +++ /dev/null
> @@ -1,176 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> -
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> -
> - * You should have received a copy of the GNU General Public License along
> - * with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> - External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> -
> - Scope(\_SB.PCI0) {
> - Device(MEMORY_HOTPLUG_DEVICE) {
> - Name(_HID, "PNP0A06")
> - Name(_UID, "Memory hotplug resources")
> - External(MEMORY_SLOTS_NUMBER, IntObj)
> -
> - /* Memory hotplug IO registers */
> - OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> - ACPI_MEMORY_HOTPLUG_BASE,
> - ACPI_MEMORY_HOTPLUG_IO_LEN)
> -
> - Name(_CRS, ResourceTemplate() {
> - IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE,
> ACPI_MEMORY_HOTPLUG_BASE,
> - 0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> - })
> -
> - Method(_STA, 0) {
> - If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> - Return(0x0)
> - }
> - /* present, functioning, decoding, not shown in UI */
> - Return(0xB)
> - }
> -
> - Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> - MEMORY_SLOT_ADDR_LOW, 32, // read only
> - MEMORY_SLOT_ADDR_HIGH, 32, // read only
> - MEMORY_SLOT_SIZE_LOW, 32, // read only
> - MEMORY_SLOT_SIZE_HIGH, 32, // read only
> - MEMORY_SLOT_PROXIMITY, 32, // read only
> - }
> - Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
> - Offset(20),
> - MEMORY_SLOT_ENABLED, 1, // 1 if enabled, read only
> - MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert
> event. (write) 1 to clear event
> - }
> -
> - Mutex (MEMORY_SLOT_LOCK, 0)
> - Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> - MEMORY_SLOT_SLECTOR, 32, // DIMM selector, write only
> - MEMORY_SLOT_OST_EVENT, 32, // _OST event code, write only
> - MEMORY_SLOT_OST_STATUS, 32, // _OST status code, write only
> - }
> -
> - Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> - If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> - Return(Zero)
> - }
> -
> - Store(Zero, Local0) // Mem devs iterrator
> - Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> - while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> - Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
> - If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory
> device needs check
> - MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> - Store(1, MEMORY_SLOT_INSERT_EVENT)
> - }
> - // TODO: handle memory eject request
> - Add(Local0, One, Local0) // goto next DIMM
> - }
> - Release(MEMORY_SLOT_LOCK)
> - Return(One)
> - }
> -
> - Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> - Store(Zero, Local0)
> -
> - Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> - Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> -
> - If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> - Store(0xF, Local0)
> - }
> -
> - Release(MEMORY_SLOT_LOCK)
> - Return(Local0)
> - }
> -
> - Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> - Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> - Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> -
> - Name(MR64, ResourceTemplate() {
> - QWordMemory(ResourceProducer, PosDecode, MinFixed,
> MaxFixed,
> - Cacheable, ReadWrite,
> - 0x0000000000000000, // Address Space Granularity
> - 0x0000000000000000, // Address Range Minimum
> - 0xFFFFFFFFFFFFFFFE, // Address Range Maximum
> - 0x0000000000000000, // Address Translation Offset
> - 0xFFFFFFFFFFFFFFFF, // Address Length
> - ,, MW64, AddressRangeMemory, TypeStatic)
> - })
> -
> - CreateDWordField(MR64, 14, MINL)
> - CreateDWordField(MR64, 18, MINH)
> - CreateDWordField(MR64, 38, LENL)
> - CreateDWordField(MR64, 42, LENH)
> - CreateDWordField(MR64, 22, MAXL)
> - CreateDWordField(MR64, 26, MAXH)
> -
> - Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> - Store(MEMORY_SLOT_ADDR_LOW, MINL)
> - Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> - Store(MEMORY_SLOT_SIZE_LOW, LENL)
> -
> - // 64-bit math: MAX = MIN + LEN - 1
> - Add(MINL, LENL, MAXL)
> - Add(MINH, LENH, MAXH)
> - If (LLess(MAXL, MINL)) {
> - Add(MAXH, One, MAXH)
> - }
> - If (LLess(MAXL, One)) {
> - Subtract(MAXH, One, MAXH)
> - }
> - Subtract(MAXL, One, MAXL)
> -
> - If (LEqual(MAXH, Zero)){
> - Name(MR32, ResourceTemplate() {
> - DWordMemory(ResourceProducer, PosDecode, MinFixed,
> MaxFixed,
> - Cacheable, ReadWrite,
> - 0x00000000, // Address Space Granularity
> - 0x00000000, // Address Range Minimum
> - 0xFFFFFFFE, // Address Range Maximum
> - 0x00000000, // Address Translation Offset
> - 0xFFFFFFFF, // Address Length
> - ,, MW32, AddressRangeMemory, TypeStatic)
> - })
> - CreateDWordField(MR32, MW32._MIN, MIN)
> - CreateDWordField(MR32, MW32._MAX, MAX)
> - CreateDWordField(MR32, MW32._LEN, LEN)
> - Store(MINL, MIN)
> - Store(MAXL, MAX)
> - Store(LENL, LEN)
> -
> - Release(MEMORY_SLOT_LOCK)
> - Return(MR32)
> - }
> -
> - Release(MEMORY_SLOT_LOCK)
> - Return(MR64)
> - }
> -
> - Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> - Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> - Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> - Store(MEMORY_SLOT_PROXIMITY, Local0)
> - Release(MEMORY_SLOT_LOCK)
> - Return(Local0)
> - }
> -
> - Method(MEMORY_SLOT_OST_METHOD, 4) {
> - Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> - Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> - Store(Arg1, MEMORY_SLOT_OST_EVENT)
> - Store(Arg2, MEMORY_SLOT_OST_STATUS)
> - Release(MEMORY_SLOT_LOCK)
> - }
> - } // Device()
> - } // Scope()
> --
> 1.8.3.1
>
>
- Re: [Qemu-devel] [PATCH v2 4/4] pc: merge DSDT common parts into acpi-dsdt-common.dsl,
Michael S. Tsirkin <=