Fixed DSDT table for Compaq Presario 2100 notebooks under Linux

Update -- I've been told that Linux Slackware 9.1 works right-out-of-the-box on an (unspecified) Compaq Presario 2100 by selecting the ACPI kernel. The DSDT table given has been obtained by decompiling the original Compaq table using Intel's ASL tools, modifying it and recompiling it. Therefore it is probably copyright Compaq or something. However this was the only way to get ACPI support for my laptop under Linux. Hence, this reverse-engineering is legitimate, and probably legal under the "reverse-engineering permitted for interoperability reasons" clause. Plus, this file will not be of any use to someone who doesn't own a Presario 2100 laptop. It is not possible to distribute it as a patch, since it's not possible to boot Linux with ACPI to dump the original table. I hope Hewlett-Packard / Compaq will not object to distribution of this table. Well, if they fix their code and make it available for download to Linux users, I can remove it.

Introduction

Compaq Presario 2100s invariably hang under Linux with ACPI enabled, under both 2.4.21 and 2.5.69 kernels, with the latest ACPI patches applied.

The problems seems to come from the _INI method of the AGPB device, which calls the HPSS method of the ISA device with arguments 0x0f and 0x00, causing the laptop to hang.

I've modified the HPSS method to not issue the I/O operations when called with these arguments, returning zero. I hope this will not cause any problems. My laptop since works fine, the brightness control works, battery reporting works, everyting seems to work. I've also fixed some undefined return values so that Intel's optimizing assembler doesn't complain.

I guess Compaq used Microsoft's AML assembler ; well it seems that Intel's open-source assembler does a better job, for it gave some warnings, and the resulting code is smaller.

You can get the modified DSL source code here ; to compile it you need to use Intel's iasl ASL compiler which can be downloaded for free from developer.intel.com.

Note that it doesn't compile under Debian 3.0r1 ; there seems to be some incompatibility with Bison due to some CPP issues. Here is a patch for Intel's acpica-unix-20030619.tar.gz.

If you trust me and don't want to recompile it for yourself, here's the fixed DSDT table.

Update: Alejandro VARGAS HERNANDEZ who has a 2100US reported that his laptop has a different DSDT table, and therefore my fix doesn't work with it. He has kindly sent his modified DSDT table.

Of course I take no responsibility in any way for anything bad that might happen to you because of this patch.

Installation

You need to patch your Linux kernel so it can override Compaq's broken DSDT table. I use Markus Gaugusch's patch which allows you to put the DSDT table in your initrd file ; this way you can update your DSDT without recompiling your kernel. You just need to run lilo.