On Wed, Jun 10, 2009 at 05:01:18PM +0200, Jes Sorensen wrote: > Index: qemu-kvm/kvm/bios/acpi-ssdt.dsl > =================================================================== > --- /dev/null > +++ qemu-kvm/kvm/bios/acpi-ssdt.dsl > @@ -0,0 +1,140 @@ > +/* > + * Bochs/QEMU ACPI SSDT ASL definition > + * > + * Copyright (c) 2006 Fabrice Bellard I am not sure that there is even one bit of code below written by Fabrice. > + * Copyright (c) 2009 SGI, Jes Sorensen <jes@xxxxxxx> > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License version 2 as published by the Free Software Foundation. > + * > + * This library 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 > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + */ > +DefinitionBlock ( > + "acpi-ssdt.aml", // Output Filename > + "SSDT", // Signature > + 0x01, // DSDT Compliance Revision > + "BXPC", // OEMID > + "BXSSDT", // TABLE ID > + 0x1 // OEM Revision > + ) > +{ > + Scope (\_PR) > + { > + /* pointer to first element of MADT APIC structures */ > + OperationRegion(ATPR, SystemMemory, 0x0514, 4) > + Field (ATPR, DwordAcc, NoLock, Preserve) > + { > + ATP, 32 > + } > + > +#define madt_addr(nr) Add (ATP, Multiply(nr, 8)) > + > +#define gen_processor(nr, name) \ > + Processor (C##name, nr, 0x0000b010, 0x06) { \ > + OperationRegion (MATR, SystemMemory, madt_addr(nr), 8) \ > + Field (MATR, ByteAcc, NoLock, Preserve) \ > + { \ > + MAT, 64 \ > + } \ > + Field (MATR, ByteAcc, NoLock, Preserve) \ > + { \ > + Offset(4), \ > + FLG, 1 \ > + } \ > + Method(_MAT, 0) { \ > + Return(MAT) \ > + } \ > + Method (_STA) { \ > + If (FLG) { Return(0xF) } Else { Return(0x9) } \ > + } \ > + } \ > + > + > + gen_processor(0, 0) > + gen_processor(1, 1) > + gen_processor(2, 2) > + gen_processor(3, 3) > + gen_processor(4, 4) > + gen_processor(5, 5) > + gen_processor(6, 6) > + gen_processor(7, 7) > + gen_processor(8, 8) > + gen_processor(9, 9) > + gen_processor(10, A) > + gen_processor(11, B) > + gen_processor(12, C) > + gen_processor(13, D) > + gen_processor(14, E) > + > + Method (NTFY, 2) { > +#define gen_ntfy(nr) \ > + If (LEqual(Arg0, 0x##nr)) { \ > + If (LNotEqual(Arg1, \_PR.C##nr.FLG)) { \ > + Store (Arg1, \_PR.C##nr.FLG) \ > + If (LEqual(Arg1, 1)) { \ > + Notify(C##nr, 1) \ > + } Else { \ > + Notify(C##nr, 3) \ > + } \ > + } \ > + } > + gen_ntfy(0) > + gen_ntfy(1) > + gen_ntfy(2) > + gen_ntfy(3) > + gen_ntfy(4) > + gen_ntfy(5) > + gen_ntfy(6) > + gen_ntfy(7) > + gen_ntfy(8) > + gen_ntfy(9) > + gen_ntfy(A) > + gen_ntfy(B) > + gen_ntfy(C) > + gen_ntfy(D) > + gen_ntfy(E) > + Return(One) > + } > + > + OperationRegion(PRST, SystemIO, 0xaf00, 32) > + Field (PRST, ByteAcc, NoLock, Preserve) > + { > + PRS, 256 > + } > + > + Method(PRSC, 0) { > + Store(PRS, Local3) > + Store(Zero, Local0) > + While(LLess(Local0, 32)) { > + Store(Zero, Local1) > + Store(DerefOf(Index(Local3, Local0)), Local2) > + While(LLess(Local1, 8)) { > + NTFY(Add(Multiply(Local0, 8), Local1), > + And(Local2, 1)) > + ShiftRight(Local2, 1, Local2) > + Increment(Local1) > + } > + Increment(Local0) > + } > + Return(One) > + } > + } > + > + Scope (\) > + { > + /* Debug Output */ > + OperationRegion (DBG, SystemIO, 0xb044, 0x04) > + Field (DBG, DWordAcc, NoLock, Preserve) > + { > + DBGL, 32, > + } > + } Except may be this one, but it should stay in DSDT. -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html