Apparently the listserver ate my message for breakfast, resending. Maybe too big? I'm only attaching the patch this time; the other files are available on request.
-----Forwarded Message----- From: Craig Boston <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Subject: Re: ACPI + Compaq Armada m700 Date: 04 Dec 2002 08:55:34 -0600 I've been conversing with Paul off-list about this and it is working on his m700 now with a fixed AML file. I'm posing my modified AML since there appear to be a few more people using current on the m700 now than the last time I checked (when it was 0 :). Impatient user version: 1. Put the attached acpi_dsdt.aml file in /boot/ 2. Add these two lines to /boot/loader.conf: acpi_dsdt_load="YES" acpi_dsdt_name="/boot/acpi_dsdt.aml" Developer version: It appears that the AML code in the Compaq BIOS has a few problems with it that Windows ignores, but a stricter implementation doesn't like. The problem is that on bootup, no devices are detected. As a result, the root filesystem can't be mounted and the system panics. Attached is the ASL output from acpidump (gzipped) and a patch that corrects some of the bigger problems. Mostly the changes are along the lines of: - Name(_HID, "*PNP0C0D") + Name(_HID, "PNP0C0D") For some unknown reason Compaq seems to like the * character in all the device names. Removing them makes iasl much happier and now the devices are detected on bootup. There are also a couple of changes like this: @@ -625,8 +627,10 @@ Store(Arg0, C082) Store(Arg1, C081) Store(Arg2, C082) + Store(C082, Local0) ^C097() Release(^C08A) + Return(Local0) } iasl was complaining about a method or two that were called expecting a return value, but didn't actually return anything. There are many similar methods that do return a value, and they all seem to just return whatever was in Arg0. Admittedly, I know next to nothing about ASL/AML, so maybe one of the ACPI wizards can figure out if this is the right thing to do or not. Anyway, it works for Paul and me. Suspend doesn't seem to work correctly for me, but I don't know if that's an AML issue or something else. Everything else ACPI works fine on the m700 I'm using. Craig
--- compaq.asl Tue Oct 29 10:24:52 2002 +++ compaq-fixed.asl Wed Dec 4 08:26:58 2002 @@ -63,7 +63,7 @@ Name(C003, 0xfffffffd) Mutex(C004, 0) Device(C005) { - Name(_HID, "*PNP0A03") + Name(_HID, "PNP0A03") Name(_ADR, 0x0) OperationRegion(C006, PCI_Config, 0x5a, 0x6) Field(C006, AnyAcc, NoLock, Preserve) { @@ -467,7 +467,7 @@ } Scope(\_SB_) { Device(C057) { - Name(_HID, "*PNP0C0E") + Name(_HID, "PNP0C0E") Name(_PRW, Package(0x2) { 0xb, 0x4, @@ -487,7 +487,7 @@ } Scope(\_SB_.C005.C013) { Device(C059) { - Name(_HID, "*PNP0A06") + Name(_HID, "PNP0A06") OperationRegion(C05A, SystemIO, 0xe0, 0x2) Field(C05A, ByteAcc, NoLock, Preserve) { C05B, 8, @@ -597,9 +597,11 @@ Store(Arg0, C05C) Store(Arg1, C05B) Store(Arg2, C05C) + Store(C05C, Local0) ^C093() Release(\_GL_) Release(^C089) + Return(Local0) } Method(C096) { Store(0x2, C086) @@ -625,8 +627,10 @@ Store(Arg0, C082) Store(Arg1, C081) Store(Arg2, C082) + Store(C082, Local0) ^C097() Release(^C08A) + Return(Local0) } Method(C09A, 2) { If(LEqual(Arg0, 0x0)) { @@ -994,7 +998,7 @@ } Scope(\_SB_) { Device(C0BF) { - Name(_HID, "*PNP0C02") + Name(_HID, "PNP0C02") Name(_UID, 0x0) Name(C0C0, Package(0x10) { }) @@ -1207,7 +1211,7 @@ } } Device(C0D8) { - Name(_HID, "*PNP0C01") + Name(_HID, "PNP0C01") Method(_CRS) { Name(C0D7, Buffer(0x26) {0x86, 0x9, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x0, 0x86, 0x9, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x1, 0x0, 0x86, 0x9, 0x0, 0x1, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x79, 0x0 }) CreateDWordField(C0D7, 0x20, C00E) @@ -1218,14 +1222,14 @@ } Scope(\_SB_.C005) { Device(C0DA) { - Name(_HID, "*PNP0C02") + Name(_HID, "PNP0C02") Name(_UID, 0x1) Name(_CRS, Buffer(0x32) {0x47, 0x1, 0xd0, 0x4, 0xd0, 0x4, 0x1, 0x2, 0x47, 0x1, 0x0, 0x8, 0x0, 0x8, 0x1, 0x80, 0x47, 0x1, 0x0, 0x40, 0x0, 0x40, 0x1, 0x10, 0x47, 0x1, 0x0, 0x50, 0x0, 0x50, 0x1, 0x64, 0x47, 0x1, 0x4, 0x60, 0x4, 0x60, 0x1, 0x2, 0x47, 0x1, 0x0, 0xf0, 0x0, 0xf0, 0x1, 0xd0, 0x79, 0x0 }) } } Scope(\_SB_.C005.C013) { Device(C0DB) { - Name(_HID, "*PNP0C02") + Name(_HID, "PNP0C02") Name(_UID, 0x2) Method(_CRS) { Name(C0D7, Buffer(0x62) {0x47, 0x1, 0x10, 0x0, 0x10, 0x0, 0x1, 0x10, 0x47, 0x1, 0x24, 0x0, 0x24, 0x0, 0x1, 0x1a, 0x47, 0x1, 0x50, 0x0, 0x50, 0x0, 0x1, 0x4, 0x47, 0x1, 0x63, 0x0, 0x63, 0x0, 0x1, 0x1, 0x47, 0x1, 0x65, 0x0, 0x65, 0x0, 0x1, 0x1, 0x47, 0x1, 0x67, 0x0, 0x67, 0x0, 0x1, 0x1, 0x47, 0x1, 0x74, 0x0, 0x74, 0x0, 0x1, 0x4, 0x47, 0x1, 0x90, 0x0, 0x90, 0x0, 0x1, 0x2, 0x47, 0x1, 0x92, 0x0, 0x92, 0x0, 0x1, 0x1, 0x47, 0x1, 0x93, 0x0, 0x93, 0x0, 0x1, 0xd, 0x47, 0x1, 0xa4, 0x0, 0xa4, 0x0, 0x1, 0x1a, 0x47, 0x1, 0xe0, 0x0, 0xe0, 0x0, 0x1, 0x4, 0x79, 0x0 }) @@ -1233,35 +1237,35 @@ } } Device(C0DC) { - Name(_HID, "*PNP0C04") + Name(_HID, "PNP0C04") Name(_CRS, Buffer(0xd) {0x47, 0x1, 0xf0, 0x0, 0xf0, 0x0, 0x1, 0x10, 0x22, 0x0, 0x20, 0x79, 0x0 }) } Device(C0DD) { - Name(_HID, "*PNP0000") + Name(_HID, "PNP0000") Name(_CRS, Buffer(0x15) {0x47, 0x1, 0x20, 0x0, 0x20, 0x0, 0x1, 0x2, 0x47, 0x1, 0xa0, 0x0, 0xa0, 0x0, 0x1, 0x2, 0x22, 0x4, 0x0, 0x79, 0x0 }) } Device(C0DE) { - Name(_HID, "*PNP0100") + Name(_HID, "PNP0100") Name(_CRS, Buffer(0xd) {0x47, 0x1, 0x40, 0x0, 0x40, 0x0, 0x1, 0x4, 0x22, 0x1, 0x0, 0x79, 0x0 }) } Device(C0DF) { - Name(_HID, "*PNP0200") + Name(_HID, "PNP0200") Name(_CRS, Buffer(0x1d) {0x47, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x47, 0x1, 0x80, 0x0, 0x80, 0x0, 0x1, 0x10, 0x47, 0x1, 0xc0, 0x0, 0xc0, 0x0, 0x1, 0x20, 0x2a, 0x10, 0x2, 0x79, 0x0 }) } Device(C0E0) { - Name(_HID, "*PNP0800") + Name(_HID, "PNP0800") Name(_CRS, Buffer(0xa) {0x47, 0x1, 0x61, 0x0, 0x61, 0x0, 0x1, 0x1, 0x79, 0x0 }) } Device(C0E1) { - Name(_HID, "*PNP0B00") + Name(_HID, "PNP0B00") Name(_CRS, Buffer(0x15) {0x47, 0x1, 0x70, 0x0, 0x70, 0x0, 0x1, 0x2, 0x47, 0x1, 0x72, 0x0, 0x72, 0x0, 0x1, 0x2, 0x22, 0x0, 0x1, 0x79, 0x0 }) } Device(C0E2) { - Name(_HID, "*PNP0303") + Name(_HID, "PNP0303") Name(_CRS, Buffer(0x15) {0x47, 0x1, 0x60, 0x0, 0x60, 0x0, 0x1, 0x1, 0x47, 0x1, 0x64, 0x0, 0x64, 0x0, 0x1, 0x1, 0x22, 0x2, 0x0, 0x79, 0x0 }) } Device(C0E3) { - Name(_HID, "*PNP0F13") + Name(_HID, "PNP0F13") Name(_CID, 0x0e0fd041) Name(C0E4, 0x1) PowerResource(C0E5, 0, 0) { @@ -1721,7 +1725,7 @@ } } Device(C10D) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x1) Method(_STA) { Return(C10C(0x1)) @@ -1746,7 +1750,7 @@ } } Device(C10E) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x2) Method(_STA) { Return(C10C(0x2)) @@ -1771,7 +1775,7 @@ } } Device(C10F) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x3) Name(_EJD, "_SB.C005.C0FD") Method(_INI) { @@ -1797,7 +1801,7 @@ } } Device(C110) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x4) Name(_EJD, "_SB.C005.C0FD") Method(_INI) { @@ -1823,7 +1827,7 @@ } } Device(C111) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x5) Name(_EJD, "_SB.C005.C0BA") Method(_INI) { @@ -1849,7 +1853,7 @@ } } Device(C112) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x6) Name(_EJD, "_SB.C005.C0FC") Method(_INI) { @@ -1875,7 +1879,7 @@ } } Device(C113) { - Name(_HID, "*PNP0C0A") + Name(_HID, "PNP0C0A") Name(_UID, 0x7) Name(_EJD, "_SB.C005.C0FC") Method(_INI) { @@ -1925,7 +1929,7 @@ } Scope(\_SB_.C005.C013.C059) { Device(C119) { - Name(_HID, "*PNP0501") + Name(_HID, "PNP0501") Name(_CID, 0x0005d041) Name(_DDN, "COM1") Name(_EJD, "_SB.C005.C0FD") @@ -2019,7 +2023,7 @@ } Scope(\_SB_.C005.C013.C059) { Device(C128) { - Name(_HID, "*PNP0700") + Name(_HID, "PNP0700") Device(C129) { Name(_ADR, 0x0) Name(_RMV, 0x1) @@ -2341,7 +2345,7 @@ } Scope(\_SB_.C005.C013.C059) { Device(C13A) { - Name(_HID, "*SMCF010") + Name(_HID, "SMCF010") Name(_CID, 0x1105d041) Name(_EJD, "_SB.C005.C0FD") Method(_INI) { @@ -2454,7 +2458,7 @@ } Scope(\_SB_.C005.C013.C059) { Device(C13E) { - Name(_HID, "*PNP0401") + Name(_HID, "PNP0401") Name(_EJD, "_SB.C005.C0FD") Method(_INI) { Store(\_SB_.C0F9(), _EJD) @@ -3183,7 +3187,7 @@ } } Device(\_SB_.C187) { - Name(_HID, "*PNP0C0F") + Name(_HID, "PNP0C0F") Name(_UID, 0x60) Name(_PRS, Buffer(0x6) {0x23, 0x0, 0x8, 0x18, 0x79, 0x0 }) Method(_STA) { @@ -3243,7 +3247,7 @@ } } Device(\_SB_.C18D) { - Name(_HID, "*PNP0C0F") + Name(_HID, "PNP0C0F") Name(_UID, 0x61) Name(_PRS, Buffer(0x6) {0x23, 0x0, 0x8, 0x18, 0x79, 0x0 }) Method(_STA) { @@ -3290,7 +3294,7 @@ } } Device(\_SB_.C18E) { - Name(_HID, "*PNP0C0F") + Name(_HID, "PNP0C0F") Name(_UID, 0x62) Name(_PRS, Buffer(0x6) {0x23, 0x0, 0x8, 0x18, 0x79, 0x0 }) Method(_STA) { @@ -3350,7 +3354,7 @@ } } Device(\_SB_.C18F) { - Name(_HID, "*PNP0C0F") + Name(_HID, "PNP0C0F") Name(_UID, 0x63) Name(_PRS, Buffer(0x6) {0x23, 0x0, 0x8, 0x18, 0x79, 0x0 }) Method(_STA) { @@ -3854,7 +3858,7 @@ \_SB_.C005.C013.C059.C0AB(0x20, Local0, 0x0, 0x0) } } - Name(_HID, "*PNP0C0B") + Name(_HID, "PNP0C0B") Name(_UID, 0x0) Name(_PR0, Package(0x1) { C1A4, @@ -3896,7 +3900,7 @@ \_SB_.C005.C013.C059.C0AB(0x20, Local0, 0x0, 0x0) } } - Name(_HID, "*PNP0C0B") + Name(_HID, "PNP0C0B") Name(_UID, 0x1) Name(_PR0, Package(0x1) { C1A6, @@ -3934,7 +3938,7 @@ \_SB_.C005.C013.C059.C0AB(0x20, 0x0, 0x0, 0x0) } } - Name(_HID, "*PNP0C0B") + Name(_HID, "PNP0C0B") Name(_UID, 0x2) Name(_PR0, Package(0x1) { C1A8, @@ -4525,7 +4529,7 @@ } Scope(\_SB_) { Device(C1AE) { - Name(_HID, "*PNP0C0D") + Name(_HID, "PNP0C0D") Method(_LID) { Acquire(\_GL_, 0xffff) Store(\_SB_.C005.C013.C059.C06A, Local0)