# ACPI question - can I overcome Windows-only support? *SOLVED

## jetblack

Updates:

12/25/2003

Partial success! Button and thermal zone info in /proc/acpi! See new post:

01/07/2004

Yes I can (at least in 2.4.23)! See here

************************************************************************

Original post follows:

************************************************************************

So, I bought a laptop not long ago. It's a Gateway 200x (back off - I love it  :Wink: ). It's working pretty well with gentoo (wireless via linuxant, ATAPI cd burning, touchpad suport, DRI, etc), and I'll put together a little doc about that soon, but there is one disappointing glitch that I'd like to try to work out first. No surprise, the ACPI support is shoddy. Apparently they don't supply an ECDT table in the BIOS (note that I am not exactly sure what I am talking about here), so they overcome this through windows drivers so that they can claim full ACPI support under XP. My question is, is there anything that I can do about this to get ACPI support in linux? I do seem to have support for the processor states and the fan, but that's about it. I'd love button, thermal and battery support, but I'm not exactly sure if there's anything I can do about that shy of sending emails to gateway support. Any ACPI gurus around who can get me headed in the right direction? In the meantime, I'll be toddling off to read up on ACPI a bit more.

[EDIT]I should mention that I have nothing against writing some code, though my C expertise oscillates between "rusty" and "nonexistent".[/EDIT]

[RETURN OF THE EDIT]I do have a bunch of books, though  :Wink: [/ROTE]Last edited by jetblack on Wed Jan 07, 2004 6:59 pm; edited 4 times in total

----------

## Helena

Can't solve your problem but I'm interested.. Just out of curiosity: are you using a 2.4 or 2.6 kernel? My laptop works OK with 2.6 (full ACPI support AFAIK). Does

```
dmesg
```

give any clues?

----------

## jetblack

Thanks, Helena. I've tried the following kernels:

```
2.4.20-gentoo

2.4.22-gentoo

2.4.23

2.6.0-beta10

2.6.0-beta10-mm

2.6.0-beta11

2.6.0

2.6.0-gentoo
```

Under ACPI support, I have enabled these options:

```
[*] ACPI Support

[*]   Sleep States

[*]   AC Adapter

[*]   Battery

[*]   Button

[*]   Fan

[*]   Processor

[*]     Thermal Zone

```

I have tried them both built in and as modules.

I do indeed have some error messages in dmesg. I should have mentioned them. Here is the output of dmesg | grep ACPI:

```
 BIOS-e820: 000000001f6e0000 - 000000001f6ec000 (ACPI data)

 BIOS-e820: 000000001f6ec000 - 000000001f700000 (ACPI NVS)

ACPI: RSDP (v000 PTLTD                                     ) @ 0x000f7c90

ACPI: RSDT (v001 PTLTD  Montara  0x06040000  LTP 0x00000000) @ 0x1f6e7d39

ACPI: FADT (v001 INTEL  MONTARA  0x06040000 PTL  0x00000050) @ 0x1f6ebed2

ACPI: BOOT (v001 PTLTD  $SBFTBL$ 0x06040000  LTP 0x00000001) @ 0x1f6ebfd8

ACPI: SSDT (v001 INTEL  CPU0CST  0x00000001 INTL 0x20020725) @ 0x1f6e8182

ACPI: SSDT (v001  INTEL  EISTRef 0x00002000 INTL 0x02012044) @ 0x1f6e7d6d

ACPI: DSDT (v001 INTEL  MONTARAG 0x06040000 MSFT 0x0100000e) @ 0x00000000

ACPI: Subsystem revision 20031002

ACPI: IRQ 9 was Edge Triggered, setting to Level Triggerd

ACPI: Interpreter enabled

ACPI: Using PIC for interrupt routing

    ACPI-1120: *** Error: Method execution failed [\_SB_.ADP1._STA] (Node c156fbe0), AE_AML_NO_RETURN_VALUE

    ACPI-1120: *** Error: Method execution failed [\_SB_.BAT1._STA] (Node c156fae0), AE_AML_NO_RETURN_VALUE

ACPI: PCI Root Bridge [PCI0] (00:00)

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT]

ACPI: PCI Interrupt Link [LNKA] (IRQs *10)

ACPI: PCI Interrupt Link [LNKB] (IRQs *10)

ACPI: PCI Interrupt Link [LNKC] (IRQs *11)

ACPI: PCI Interrupt Link [LNKD] (IRQs *11)

ACPI: PCI Interrupt Link [LNKE] (IRQs *5)

ACPI: PCI Interrupt Link [LNKF] (IRQs 5)

ACPI: PCI Interrupt Link [LNKG] (IRQs 10)

ACPI: PCI Interrupt Link [LNKH] (IRQs *10)

ACPI: Embedded Controller [H_EC] (gpe 28)

    ACPI-0345: *** Error: Handler for [EmbeddedControl] returned AE_BAD_PARAMETER

    ACPI-1120: *** Error: Method execution failed [\_SB_.PCI0.LPCB.H_EC._REG] (Node c156a340), AE_BAD_PARAMETER

ACPI: Power Resource [PFAN] (on)

ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 10

ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 11

ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11

ACPI: PCI Interrupt Link [LNKH] enabled at IRQ 10

ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 10

ACPI: PCI Interrupt Link [LNKE] enabled at IRQ 5

PCI: Using ACPI for IRQ routing

ACPI: Power Button (FF) [PWRF]

ACPI: Lid Switch [LID0]

ACPI: Sleep Button (CM) [SLPB]

ACPI: Fan [FAN0] (on)

ACPI: Processor [CPU0] (supports C1 C2 C3, 8 throttling states)

    ACPI-0345: *** Error: Handler for [EmbeddedControl] returned AE_BAD_PARAMETER

    ACPI-1120: *** Error: Method execution failed [\_TZ_.THRM._TMP] (Node c156fea0), AE_BAD_PARAMETER

ACPI: (supports S0 S3 S4 S5)
```

It looks like the Adapter and Battery modules are throwing AE_AML_NO_RETURN_VALUE, and the EmbeddedControl (is that something to do with the buttons?) and Thermal Zone modules are throwing AE_BAD_PARAMETER. That makes sense, since I don't have Battery, Buttton, Adapter or Thermal Zone support.

I have read a bit about ACPI on this laptop, and have been led to believe that it's a hardware issue, but it would be nice to find out more definitively, and possibly get around it  :Smile: 

Thanks for your interest and time.

----------

## jetblack

Someone has already posted this to bugzilla.kernel.org. It appears that the solution is indeed to supply an ECDT table manually. So, the question becomes how exactly I go about doing that. Guess I'll scour some mailing lists  :Smile: 

----------

## hulk2nd

I'm also very interested in that

greets,

hulk

----------

## jetblack

I'll just keep posting back here as I learn things, if that doesn't bother anyone.

So, the ECDT is the Embedded Controller Description Table (hence the EmbeddedController errors above). I found this document which references this patch, which seems to allow you to fake an ECDT table by adding a line like this to lilo.conf:

```
append="ecdt fake=0x66:0x62:0x10:-1:\\ SB.PCI0.LPCB.EC0"
```

I imagine that the corresponding grub.conf line would be:

```
"ecdt=fake:0x66,0x62,0x10,-1,\\ SB.PCI0.LPCB.EC0"
```

but that may be wrong (corrections welcome).

The doc is for a Toshiba Tecra, so I don't know if those values are valid for other machines. I wouldn't be surprised to find that they are unique for each model of laptop. I'll fire off an email to the acpi-devel mailing list sometime tomorrow (have to hurry out the door now) to see if they can get me pointed in the right direction for reproducing this sort of fix on the 200x. This solution isn't particularly elegant, but at least it suggests that one can supply an ECDT table through some sort of kernel patchery. If it can be made to work, perhaps we could compile a list of faked ECDT tables for various broken BIOSes.

----------

## hulk2nd

wow, this sounds REALLY interesting! would be nice if you could  keep this thread up to date!

greets,

hulk

----------

## jetblack

Thanks, hulk. I'll do my best. It would be nice if we could get this working  :Smile: 

So, I found some more info. There is an ACPI info website here:

http://www.acpi.info/. They have a link to an ACPI toolkit, which includes, promisingly, a listing for  *Quote:*   

> * Intel ACPI Component Architecture ASL Optimizing Compiler and ASL Disassembler (C-Language Source, Windows and Linux binaries)

 

If I understand correctly, ACPI tables are compiled to ACPI Machine Language (AML), and the source is written in (can you guess?) ACPI Source Language. I think that's how it works, anyway.

Now, I'm dual-booting on this machine, so does this mean that I could grab the relevant windows aml and disassemble it to get the asl for the ECDT? Are ECDTs handled this way? Would that even be a useful exercise? It appears that the DSDT (Differentiated System Description Table) is handled this way. I'm not really sure what the differences are between ECDT and DSDT. But now I really have to run, so I'll check up on that later. Sorry for the stream-of-consciousness turn that the thread is taking  :Smile: 

----------

## hulk2nd

i'm not really into it but it seems the ecdt is more important than dsdt. you must have ecdt working to get dsdt working. maybe i'm completely wrong. but how to know if the ecdt or the dsdt is broken or maybe both of them?

the links the one guy posted on the debian groups sounds interesting, i'm gonna read them.

http://www.cpqlinux.com/acpi-howto.html and http://acpi.sourceforge.net/wiki/index.php/HowToOverrideTable

----------

## hulk2nd

hei there again, i've found a fixed dsdt for a gateway notebook. of course it is not for your model (that would be to simple, wouldn't it? :Wink:  ) but maybe this one works for you. it can be found here.

http://acpi.sourceforge.net/dsdt/tables/

to bad, there is no one for any vaio notebook so i can not try it for myself. but im nearly sure that a fixed dsdt for any vaio notebook would work fine on mine too, cause they all have exactly the same problem!

now you have to choices; either to create a ramdisk to load the fixed dsdt instead of the broken one or to implement the working one into your kernel. the howtos on how to to this can also be found somewhere on that sourceforge page.

you also should consider to browse the acpi mailing lists on sourceforge.net, where i also have found several interesting informations.

greets,

hulk

----------

## jetblack

Thanks, hulk. I've actually been going through that very mailinglist for about the last hour  :Smile: 

It looks like they have some good information on providing an ECDT as well, so I think I'd like to try that first, since that appears to be the root of my problem. 

[EDIT]Don't use acpidmp - use iasl instead. Corrected the post.

If you want to inspect your DSDT, use the iasl compiler NOTE - Please do not use acpidmp

```
cat /proc/acpi/dsdt > dsdt.dat

./iasl -d dsdt.dat

```

That will give you a nice human-readable DSDT, from which it appears that you can get the proper ECDT to provide to the DSDT. 

For example, I believe that this is the relevant section of my DSDT:

```
000027f5:       Device H_EC (\_SB_.PCI0.LPCB.H_EC)

000027fd:         Name _HID (\_SB_.PCI0.LPCB.H_EC._HID)

00002802:           PNP0c09 (0x090cd041)

00002807:         Name _UID (\_SB_.PCI0.LPCB.H_EC._UID)

0000280c:           0x01

0000280e:         Method _CRS (\_SB_.PCI0.LPCB.H_EC._CRS)

00002814:           ArgCount 0; NotSerialized

00002815:           Name BFFR (\_SB_.PCI0.LPCB.H_EC._CRS.BFFR)

0000281a:             Buffer

0000281c:               0x12

0000281e:               ByteList <0x47 0x01 0x62 0x00 0x62 0x00 0x00 0x01

0000281e:                        0x47 0x01 0x66 0x00 0x66 0x00 0x00 0x01

0000281e:                        0x79 0x00>

0000281e:               Interpreted as PnP Resource Descriptor:

0000281e:               I/O Ports: 16 bit address decoding,

0000281e:               minbase 0x62, maxbase 0x62, align 0x0, count 0x1

0000281e:               I/O Ports: 16 bit address decoding,

0000281e:               minbase 0x66, maxbase 0x66, align 0x0, count 0x1

0000281e:               Bad checksum 0x9b, should be 0

0000281e:

00002830:           Return

00002831:             BFFR (00002815)

00002835:         OpRegion ECR_ (\_SB_.PCI0.LPCB.H_EC.ECR_)

0000283b:           EmbeddedControl

0000283c:           0x00

0000283e:           0xff

00002840:         Field

00002844:           ECR_ (00002835)

00002848:           AccessType: DWordAcc; LockRule: Lock; UpdateRule: Preserve

00002849:           ReservedField

0000284c:           NamedField B1EX

00002851:           NamedField B2EX

00002856:           NamedField ACEX

0000285b:           ReservedField

0000285d:           NamedField SWBE

00002862:           NamedField DCBE

00002867:           ReservedField

00002869:           ReservedField

0000286b:           NamedField LIDS

00002870:           ReservedField

00002872:           NamedField B1ST

00002877:           NamedField B2ST

0000287c:           ReservedField

0000287f:           NamedField B1RR

00002884:           NamedField B1PV

00002889:           NamedField B2RR

0000288e:           NamedField B2PV

00002893:           NamedField B1AF

00002898:           NamedField B1VL

0000289d:           NamedField B2AF

000028a2:           NamedField B2VL

000028a7:           NamedField CTMP

000028ac:           ReservedField

000028af:           NamedField B1TI

000028b4:           NamedField B1SE

000028b9:           NamedField B1CR

000028be:           NamedField B1TM

000028c3:           NamedField B2TI

000028c8:           NamedField B2SE

000028cd:           NamedField B2CR

000028d2:           NamedField B2TM

000028d7:         Method _REG (\_SB_.PCI0.LPCB.H_EC._REG)

000028dd:           ArgCount 2; NotSerialized

000028de:           If

000028e0:             LAnd

000028e1:               LEqual

000028e2:                 Arg0

000028e3:                 0x03

000028e5:               LEqual

000028e6:                 Arg1

000028e7:                 0x01

000028e9:             Store

000028ea:               0x01

000028ec:               ECON (0000024e)

000028f0:             Store

000028f1:               \_SB_.PCI0.LPCB.H_EC.ACEX (00002856)

00002908:               \PWRS (00000160)

0000290d:         Name _GPE (\_SB_.PCI0.LPCB.H_EC._GPE)

00002912:           0x1c

00002914:         Method _GLK (\_SB_.PCI0.LPCB.H_EC._GLK)

0000291a:           ArgCount 1; NotSerialized

0000291b:           Return

0000291c:             OneOp

```

That describes the(H_EC) EmbeddedContoller, as I understand it. Apparently, you can find yours by searching the output for PNP0c09. Now, to figure out what the heck to do with all that. I think you're right, though. I could alternately fix the DSDT. I think I'd like to try this first though.

Oh, if you go ahead and use pmtools, I'll warn you that it gave me an error before make completed, but it had compiled acpidmp, acpitbl and acpidisasm, which were all that I cared about. So, you should be able to disregard that if it happens to you.Last edited by jetblack on Sun Jan 11, 2004 4:58 pm; edited 1 time in total

----------

## jetblack

Ah, it's a bit clearer now. This thread actually doubles back onto the patch I posted earlier to allow you to set the ECDT parameters as a boot option. The acpidmp tool allows you to find the correct values to pass along that line, since they are indeed different for different laptop models. So, the only thing left to do now is to figure out which values in the disassembled table correspond to the different options passed along that line. how hard could that be?  :Wink: 

----------

## jetblack

OK, one last update this evening. It looks like the values that are passed along the boot parameter as the fake ECDT table are as follows:

ecdt_fake=<command port>:<data_port>:<gpe_bit>:<uid>:<full path to EC>.

It seems that, in my case, the values are:

command port: 0x66

data port: 0x62

gpe_bit: 0x1c

uid: 0x01

path to EC: \_SB_.PCIO.LPCB.H_EC

I got those values from this post and the associated follow-ups.

I'm not exactly sure how they determine the command port and the data port. However, I notice that in the DSDT excerpt I posted above, you can see the following lines in the Method _CRS definition:

```
0000281e:               I/O Ports: 16 bit address decoding,

0000281e:               minbase 0x62, maxbase 0x62, align 0x0, count 0x1

0000281e:               I/O Ports: 16 bit address decoding,

0000281e:               minbase 0x66, maxbase 0x66, align 0x0, count 0x1
```

My command and data ports appear to be 0x66 and 0x62, respectively, so perhaps those lines define them.

The GPE bit is defined towards the bottom of that block:

```
0000290d:         Name _GPE (\_SB_.PCI0.LPCB.H_EC._GPE)

00002912:           0x1c 
```

The UID is back towards the top:

```
00002807:         Name _UID (\_SB_.PCI0.LPCB.H_EC._UID)

0000280c:           0x01 
```

And finally, the path to the Controller is at the beginning of the specification:

```
000027f5:       Device H_EC (\_SB_.PCI0.LPCB.H_EC)
```

Apparently the second slash before the path to the controller is required in lilo, probably an escape character. So, I think for grub I will want to pass along something like this:

```
ecdt_fake=0x66:0x62:0x1c:0x01:\\_SB_.PCIO.LPCB.H_EC
```

The patch is for the 2.4.23 kernel, so I'll try grabbing those sources again and applying it, and see if I can get some of this worked out. Not sure if it will work in 2.6 as-is. Also, I noticed that my DSDT table seems to be significantly different from the ones they were posting on the mailing list. I wonder if that is because I'm running 2.6?

----------

## hulk2nd

 *jetblack wrote:*   

> Also, I noticed that my DSDT table seems to be significantly different from the ones they were posting on the mailing list. I wonder if that is because I'm running 2.6?

 this could be one possibility. but maybe they also have other bios versions than you?

----------

## jetblack

I think you're right  :Smile:  I checked it with 2.4.23, and there was no change to the table. I got the patch applied successfully, but no luck actually passing the table. I'll see if the acpi-devel list can shed some light on what I'm doing wrong. I'm hopeful that it's just a subtle difference between the lilo and grub syntaxes.

----------

## jetblack

Sick of me yet?   :Razz: 

Here's this afternoon's progress:

It looks like grub.conf does not require the double-slash when specifying the path to the embedded controller device. I removed one of them, and now dmesg seems to indicate that it is at least attempting to fake the ECDT table, and it seems to recognize the embedded controller. However, it throws me a couple more of those AE_BAD_PARAMETER errors and then gives up on the fake table. So, it's a little better, but not there yet.

I have posted a few files (grub.conf, dmesg,  DSDT,  /proc/acpi/embeddedcontroller/H_EC/info and the kernel patch) to this page. I also have a couple emails in to the mailing list, so perhaps someone there (or here?) can help me figure out what I'm doing wrong.

----------

## hulk2nd

so have you figured out, what is the difference between dsdt and ecdt and how to determine which one is broken or even if both of theme are?

greets,

hulk

----------

## jetblack

Well, roughly, it seems like the ECDT is a table that is used solely for configuing the EmbeddedController. Apparently, the ACPI code needs some information about the Embedded Controller before it parses the bits of the DSDT that relate to it, otherwise you run into trouble. If the BIOS doesn't provide one, then the drivers don't know what to do when they get to that point. So, you can provide a fake one to fix the problem. So, if you see EmbeddedController errors on dmesg, I think that you can assume that there is a problem with the ECDT.

The ECDT is optional (though I don't know exactly what that means, since almost nothing seems to work without it), and it sounds like you can solve ECDT problems either by providing a fake one or by modifying the DSDT not to look for it. According to the acpi-devel mailing list, it's easier and a bit safer to provide a fake ECDT (no ASL required), so if that approach works, then that's the way to go.

However, it could be that both are broken. At this point, it seems like the best way to determine that  is to fix the ECDT, then see if you get more errors, but I'm not sure about that. If you aren't getting any errors from the Embedded Controller, though, my guess would be that it's a DSDT problem.

If I hear back from anyone I'll ask for a more definitive answer, and I just downloaded the spec to see if I can make any sense of it. If I can give a clearer answer later, I will.

----------

## jetblack

Ok, I have a better (though by no means complete) understanding of this now after a little time with the ACPI Specification. Here's my Cliff's Notes version of the relationship between the DSDT and  the ECDT:

ACPI uses tables to describe system configuration. These tables describe the available devices and the power management features that they support. The main table is called the Root System Description Table (RSDT).  The RSDT references the other system description tables that ACPI uses. In particular, the RSDT points to the Fixed ACPI Description Table (FADT). The FADT describes static system information that is relevant to power management.

The FADT, in turn, always refers to the Differentiated System Description Table (DSDT). The role of the DSDT is to provide power management information to the OS that goes beyond the static information provided by the FADT. It contains a Definition Block that provides a hierarchical description of the system's hardware and the power management capabilities of that hardware. The hierarchical structure is necessary so that the OS can power down devices in the proper order. Apparently, APM did not provide this level of detail. The OS loads the Definition Block from the DSDT at boot time to determine this information.

One of the devices described by the DSDT is the Embedded Controller. For reasons that are still unknown to me, it is necessary for the OS to know some details about the Embedded Controller before this information is actually evaluated from the DSDT. So, as of ACPI 2.0, ACPI supports an optional Embedded Controller Boot Resources Table (ECDT). Interesting acronym creation methodology there  :Smile: . The purpose of the ECDT is to provide this basic Embedded Controller namespace information to the OS on boot.

The Embedded Controller is used for Smart Battery management (which handles both battery and AC adapter events). It also appears to be used for Thermal Zone management, though I haven't yet found that in the spec. I'm just going from my dmesg errors on that one. If your system does not provide an ECDT, then you will receive errors on initialization of the Embedded Controller, specifically (at least in my case) from the _REG method. So, if you see an error like this in dmesg:

```
ACPI: Embedded Controller [H_EC] (gpe 28)

evregion-0348: *** Error: Handler for [EmbeddedControl] returned AE_BAD_PARAMETER

 dswexec-0435 [30] ds_exec_end_op        : [Store]: Could not resolve operands, AE_BAD_PARAMETER

 psparse-1120: *** Error: Method execution failed [\_SB_.PCI0.LPCB.H_EC._REG] (Node df5e7ae8), AE_BAD_PARAMETER
```

Then the culprit is likely the ECDT (or, more precisely, the lack of an ECDT). \_SB_.PCI0.LPCB.H_EC._REG is the name of the initialization function for my ECDT, I believe.

In this case, you will also probably get errors later on from those devices which are managed by the Embedded Controller. In my case, those are the battery, AC Adapter and thermal zones. You can tell whether the Embedded Controller is the culprit by the presence of [EmbeddedControl] errors at the root of the errors thrown by these initialization functions. For instance (again from my dmesg output).

```
evregion-0348: *** Error: Handler for [EmbeddedControl] returned AE_BAD_PARAMETER

 dswexec-0435 [45] ds_exec_end_op        : [Store]: Could not resolve operands, AE_BAD_PARAMETER

 psparse-1120: *** Error: Method execution failed [\_SB_.ADP1._PSR] (Node df5f40c8), AE_BAD_PARAMETER

 acpi_ac-0083 [36] acpi_ac_get_state     : Error reading AC Adapter state

evregion-0348: *** Error: Handler for [EmbeddedControl] returned AE_BAD_PARAMETER

 dswexec-0435 [46] ds_exec_end_op        : [LEqual]: Could not resolve operands, AE_BAD_PARAMETER

dswstate-0273 [48] ds_result_pop_from_bot: No result objects! State=df5fbc28

 dsutils-0525 [48] ds_create_operand     : Missing or null operand, AE_AML_NO_RETURN_VALUE

 psparse-1120: *** Error: Method execution failed [\_SB_.BAT1._STA] (Node df5f4848), AE_AML_NO_RETURN_VALUE

evregion-0348: *** Error: Handler for [EmbeddedControl] returned AE_BAD_PARAMETER

 dswexec-0435 [46] ds_exec_end_op        : [Store]: Could not resolve operands, AE_BAD_PARAMETER

 psparse-1120: *** Error: Method execution failed [\_TZ_.THRM._TMP] (Node df5f6f68), AE_BAD_PARAMETER
```

ADP1 [\_SB_.ADP1._PSR] is the adapter, BAT1 [\_SB_.BAT1._STA] is the battery, and THRM [\_TZ_.THRM._TMP] is the thermal zone manager. Note the AE_BAD_PARAMETER errors thrown by [EmbeddedControl] before each of these errors. That's the hint that the ECDT is at fault. If your Embedded Controller initializes ok, and isn't giving you errors, then your issue is most likely in the DSDT.

The one thing that I am not yet sure of is whether it is possible to have a proper ECDT, but still have a DSDT that is buggy enough to cause [EmbeddedControl] errors. I'm beginning to think that that may be possible, because I have now found two methods of providing an ECDT, neither of which works for me. The first is the patch I referenced earlier. The second is a different patch, provided here:

http://bugzilla.kernel.org/show_bug.cgi?id=1690

This patch seems to defer (or recall) The Embedded Controller initialization until after the necessary information has been provided by the DSDT. However, neither patch has worked for me, so either my problem is slightly different (which is possible, because my error is thrown by _REG, not _INI), or my DSDT is screwy enough that a proper ECDT doesn't help. I've got another email in that asks that question. They seem to be addressed overnight from where I am, so I imagine that if I hear anything, it won't be until at least tomorrow. I'll let you know what I find out.

So, as of now, I've got a couple ECDT workarounds, but they don't seem to help. Not sure whether the problem is with me or with the DSDT at this point.

Hope that helped clarify it a bit more.

[edited because I apparently forgot how to spell "hierarchical"]

----------

## jetblack

Woohoo! Partial Christmas sucess!

After a little more inspection, it turns out that my issue is actually a bug in the acpi code, and not an ECDT problem. Luming Yu, who has been unbelievably responsive and helpful, has submitted a bug at bugzilla. You can see it here:

http://bugzilla.kernel.org/show_bug.cgi?id=1744

I'll be following this up here, but the quick update is that the EC code was throwing an AE_BAD_PARAMETER error where it could have been throwing a warning. The patch changes the behavior, and just going to a warning for my machine has given me button and thermal zone support. I am still getting errors from the ac adapter and battery, but 2 out of 4 isn't bad! Not a bad Christmas gift  :Smile: 

Further details are available at the bugzilla link. I'm not sure if this will help anyone else, or if this is just specific to my machine. I hope it is useful to someone. Perhaps it is at least a general Gateway issue.

----------

## jetblack

Back with a little more info that I hope will be helpful if you want to see if you are having the same ACPI problem that I am having. Here is the email that I received from Luming in reference to the latest patch.

 *Luming Yu wrote:*   

> After a few investigation on your problem, that patch doesn't apply.
> 
> From your DSDT,  ECDT seems to be  unnecessary to your box.
> 
> >Unfortunately, I'm still getting the same sorts of messages on boot. 
> ...

 

It looks like the current ACPI code only supports 8-bit width access. If you look at my DSDT, you will see the following in the EC region definition:

```
00002844:           ECR_ (00002835)

00002848:           AccessType: DWordAcc; LockRule: Lock; UpdateRule: Preserve
```

Apparently the DWordAcc access type is not currently supported. If you have this in your DSDT and are having problems, then I think the patch from the previous post could help. It at least got me past some EC errors. It has worked for me on 2.4.23 and 2.6.0 kernels, at least for the buttons and thermal zones (I am getting temperature reports now - woohoo!).

----------

## jo_vermeulen

 *jetblack wrote:*   

> Woohoo! Partial Christmas sucess!
> 
> After a little more inspection, it turns out that my issue is actually a bug in the acpi code, and not an ECDT problem. Luming Yu, who has been unbelievably responsive and helpful, has submitted a bug at bugzilla. You can see it here:
> 
> http://bugzilla.kernel.org/show_bug.cgi?id=1744
> ...

 

Hi my laptop is an Acer Aspire 1400 LC. I can see my battery status, but no thermal zone information...

This is what dmesg gives me:

```

BIOS-e820: 000000000fef0000 - 000000000feff000 (ACPI data)

BIOS-e820: 000000000feff000 - 000000000ff00000 (ACPI NVS)

ACPI: have wakeup address 0xc0001000

ACPI: RSDP (v000 TOSCPL                                    ) @ 0x000f6d20

ACPI: RSDT (v001 TOSCPL   RSDT   0x06040000  LTP 0x00000000) @ 0x0fefad1c

ACPI: FADT (v001 TOSCPL BR10     0x06040000 PTL  0x00000001) @ 0x0fefef64

ACPI: BOOT (v001 TOSCPL $SBFTBL$ 0x06040000  LTP 0x00000001) @ 0x0fefefd8

ACPI: DSDT (v001 COMPAL BR10     0x06040000 MSFT 0x0100000d) @ 0x00000000

ACPI: Subsystem revision 20031002

 tbxface-0117 [03] acpi_load_tables      : ACPI Tables successfully acquired

ACPI Namespace successfully loaded at root c044209c

ACPI: IRQ9 SCI: Edge set to Level Trigger.

evxfevnt-0093 [04] acpi_enable           : Transition to ACPI mode successful

ACPI: Interpreter enabled

ACPI: Using PIC for interrupt routing

ACPI: System [ACPI] (supports S0 S3 S4 S5)

ACPI: PCI Root Bridge [PCI0] (00:00)

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGP_._PRT]

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.SLOT._PRT]

[ACPI Debug] Buffer: Length 06

ACPI: PCI Interrupt Link [LNKA] (IRQs *5)

ACPI: PCI Interrupt Link [LNKB] (IRQs *11)

ACPI: PCI Interrupt Link [LNKC] (IRQs 11)

ACPI: PCI Interrupt Link [LNKD] (IRQs *5)

[ACPI Debug] Buffer: Length 06

ACPI: PCI Interrupt Link [LNKE] (IRQs *11)

[ACPI Debug] Buffer: Length 06

ACPI: PCI Interrupt Link [LNKH] (IRQs 5)

ACPI: Embedded Controller [EC0] (gpe 28)

ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 5

ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 11

[ACPI Debug] Buffer: Length 06

[ACPI Debug] Buffer: Length 06

ACPI: PCI Interrupt Link [LNKH] enabled at IRQ 11

[ACPI Debug] Buffer: Length 06

[ACPI Debug] Buffer: Length 06

ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 5

[ACPI Debug] Buffer: Length 06

[ACPI Debug] Buffer: Length 06

ACPI: PCI Interrupt Link [LNKE] enabled at IRQ 11

PCI: Using ACPI for IRQ routing

ACPI: AC Adapter [ACAD] (on-line)

ACPI: Battery Slot [BAT1] (battery present)

ACPI: Power Button (FF) [PWRF]

ACPI: Lid Switch [LID]

ACPI: Processor [CPU0] (supports C1 C2)

[ACPI Debug] String: =====QUERY_38=====

[ACPI Debug] String: =====QUERY_37=====

```

The "fan", "thermal_zone", "power_resource" directories in /proc/acpi/ are empty.

Any idea what I could do about it?

I'm using vanilla-2.4.23.

What is the actual function of the button? I have a "button" directory in /proc/acpi/ but it only contains an info file in a couple of subdirectories (/proc/acpi/button/BUT0/.../info).

Thanks in advance!

----------

## jo_vermeulen

 *jo_vermeulen wrote:*   

> 
> 
> What is the actual function of the button? I have a "button" directory in /proc/acpi/ but it only contains an info file in a couple of subdirectories (/proc/acpi/button/BUT0/.../info).
> 
> 

 

Sorry I was wrong here.. In the /proc/acpi/button/ directory there are two directories:

* lid

* power

In lid and power, there are LID and PWRF subdirectories respectively. In the PWRF directory, there's an "info" file which states:

type:                    Power Button (FF)

In the LID directory there are two files:

* info

* state

info contains:

type:                    Lid Switch

state contains:

state:      open

What does this mean?

Kind regards,

----------

## jetblack

 *jo_vermeulen wrote:*   

> Hi my laptop is an Acer Aspire 1400 LC. I can see my battery status, but no thermal zone information...
> 
> The "fan", "thermal_zone", "power_resource" directories in /proc/acpi/ are empty.
> 
> Any idea what I could do about it?
> ...

 

Hm. It doesn't look like you are getting any messages at all about thermal zones and fans (power_resource should contain info about the power fan). Perhaps they aren't specified in your DSDT? Could you attach that? I briefly explain how to do that in this post.

Just to warn you, I'm not an ACPI developer or anything, but I'll be happy to try to help.  :Smile: 

 *jo_vermeulen wrote:*   

> What is the actual function of the button? I have a "button" directory in /proc/acpi/ but it only contains an info file in a couple of subdirectories (/proc/acpi/button/BUT0/.../info).

 

The "button" directory contains information on the state of various buttons on the system. You could intercept events from these buttons (with acpid, for instance), and have your system perform actions in response. So, for example, if you closed the lid on your laptop (the lid is treated as a button), then the state should change to "closed". You could have acpid send your machine into a sleep state in response to that event, and then have it wake up again when the state changes back to "open".  (Though, unfortunately, mine seems to stay stuck on "closed". I'm not running acpid yet, though, so perhaps I need to do that.)

There is a thread here where folks have been providing scripts to handle ACPI events.

Also, I noticed last night that having the button functionality has given me access to the function keys on my machine, which I didn't have before. So, I can control the screen brightnes from the keyboard, for instance. I still have to play a bit more to see how I can intercept some of the other button events, but that was a nice develpoment  :Smile: 

----------

## jo_vermeulen

[quote="jetblack"] *jo_vermeulen wrote:*   

> Hi my laptop is an Acer Aspire 1400 LC. I can see my battery status, but no thermal zone information...
> 
> The "fan", "thermal_zone", "power_resource" directories in /proc/acpi/ are empty.
> 
> Any idea what I could do about it?
> ...

 

Hm. It doesn't look like you are getting any messages at all about thermal zones and fans (power_resource should contain info about the power fan). 

Perhaps they aren't specified in your DSDT? Could you attach that? 

[\quote]

Here it is:

[code:1:f499608568]

00000000: Name HKYF (\HKYF)

00000005:   0x00

00000007: Scope _PR_ (\_PR_)

0000000e:   Processor CPU0 (\_PR_.CPU0)

00000015:     0x00

00000016:     0x00001010

0000001a:     0x06

0000001b: Name _S0_ (\_S0_)

00000020:   Package

00000022:     0x02

00000023:     0x00

00000025:     0x00

00000027: Name _S3_ (\_S3_)

0000002c:   Package

0000002e:     0x02

0000002f:     0x05

00000031:     0x05

00000033: Name _S4_ (\_S4_)

00000038:   Package

0000003a:     0x02

0000003b:     0x06

0000003d:     0x06

0000003f: Name _S5_ (\_S5_)

00000044:   Package

00000046:     0x02

00000047:     0x07

00000049:     0x07

0000004b: Name ECDY (\ECDY)

00000050:   0x05

00000052: Name Z000 (\Z000)

00000057:   0x01

00000059: Name Z001 (\Z001)

0000005e:   0x00

00000060: Method _PTS (\_PTS)

00000066:   ArgCount 1; NotSerialized

00000067:   If

00000069:     LEqual

0000006a:       Arg0

0000006b:       0x03

0000006d:     Store

0000006e:       \_SB_.PCI0.LPC0.LPOL (00001432)

00000081:       Z000 (00000052)

00000085:   If

00000087:     LEqual

00000088:       Arg0

00000089:       0x04

0000008b:     <NULL>

0000009e:     0x0e

000000a0: Method _WAK (\_WAK)

000000a7:   ArgCount 1; NotSerialized

000000a8:   If

000000ab:     LEqual

000000ac:       Arg0

000000ad:       0x04

000000af:     Notify

000000b0:       \_SB_.PWBN (000002a0)

000000ba:       0x02

000000bc:     <NULL>

000000cf:     0x0f

000000d1:     Store

000000d2:       0x02

000000d4:       Z001 (00000059)

000000d8:     If

000000da:       LEqual

000000db:         \_SB_.PCI0.OSTP (00000384)

000000ea:         0x01

000000ec:       Store

000000ed:         0x00

000000ef:         \_SB_.PCI0.LPC0.LV28 (0000141e)

00000102:       Store

00000103:         0x00

00000105:         Z001 (00000059)

00000109:   If

0000010c:     LEqual

0000010d:       Arg0

0000010e:       0x03

00000110:     Store

00000111:       <NULL>

00000128:       0x35

0000012a:     Local0

0000012b:     <NULL>

00000142:     0x35

00000144:     0x00

00000146:     And

00000147:       Local0

00000148:       0x04

0000014a:       Local0

0000014b:     If

0000014d:       LNotEqual

0000014f:         Local0

00000150:         0x04

00000152:       Notify

00000153:         \_SB_.PWBN (000002a0)

0000015d:         0x02

0000015f:   <NULL>

00000172:   0x92

00000174: Scope _GPE (\_GPE)

0000017b:   Method _L03 (\_GPE._L03)

00000181:     ArgCount 0; NotSerialized

00000182:     Notify

00000183:       \_SB_.PCI0.USB1 (00004075)

00000192:       0x02

00000194:   Method _L04 (\_GPE._L04)

0000019a:     ArgCount 0; NotSerialized

0000019b:     Notify

0000019c:       \_SB_.PCI0.USB2 (000040e3)

000001ab:       0x02

000001ad:   Method _L05 (\_GPE._L05)

000001b3:     ArgCount 0; NotSerialized

000001b4:     Notify

000001b5:       \_SB_.PCI0.AC97 (000041a7)

000001c4:       0x02

000001c6:   Method _L08 (\_GPE._L08)

000001cc:     ArgCount 0; NotSerialized

000001cd:     Notify

000001ce:       \_SB_.PWBN (000002a0)

000001d8:       0x02

000001da:   Method _L0B (\_GPE._L0B)

000001e0:     ArgCount 0; NotSerialized

000001e1:     Notify

000001e2:       \_SB_.PCI0.SLOT (00000b8e)

000001f1:       0x02

000001f3:   Method _L1C (\_GPE._L1C)

000001f9:     ArgCount 0; NotSerialized

000001fa:   Method _L1D (\_GPE._L1D)

00000201:     ArgCount 0; NotSerialized

00000202:     If

00000204:       LEqual

00000205:         \_SB_.PCI0.LPC0.LPOL (00001432)

00000218:         0x01

0000021a:       If

0000021c:         LEqual

0000021d:           Z000 (00000052)

00000221:           0x01

00000223:         <NULL>

00000236:         0x72

00000238:     Not

00000239:       \_SB_.PCI0.LPC0.LPOL (00001432)

0000024c:       \_SB_.PCI0.LPC0.LPOL (00001432)

0000025f:     Notify

00000260:       \_SB_.LID_ (00000274)

0000026a:       0x80

0000026c: Scope _SB_ (\_SB_)

00000274:   Device LID_ (\_SB_.LID_)

0000027b:     Name _HID (\_SB_.LID_._HID)

00000280:       PNP0c0d (0x0d0cd041)

00000285:     Method _LID (\_SB_.LID_._LID)

0000028b:       ArgCount 0; NotSerialized

0000028c:       Return

0000028d:         \_SB_.PCI0.LPC0.LPOL (00001432)

000002a0:   Device PWBN (\_SB_.PWBN)

000002a7:     Name _HID (\_SB_.PWBN._HID)

000002ac:       PNP0c0c (0x0c0cd041)

000002b1:     Name _PRW (\_SB_.PWBN._PRW)

000002b6:       Package

000002b8:         0x02

000002b9:         0x08

000002bb:         0x04

000002bd:   Device PCI0 (\_SB_.PCI0)

000002c6:     Name _HID (\_SB_.PCI0._HID)

000002cb:       PNP0a03 (0x030ad041)

000002d0:     Name _BBN (\_SB_.PCI0._BBN)

000002d5:       0x00

000002d7:     Name _ADR (\_SB_.PCI0._ADR)

000002dc:       0x00

000002de:     Method MIN_ (\_SB_.PCI0.MIN_)

000002e4:       ArgCount 2; NotSerialized

000002e5:       If

000002e7:         LLess

000002e8:           Arg0

000002e9:           Arg1

000002ea:         Return

000002eb:           Arg0

000002ec:       Else

000002ee:         Return

000002ef:           Arg1

000002f0:     Method SLEN (\_SB_.PCI0.SLEN)

000002f6:       ArgCount 1; NotSerialized

000002f7:       Return

000002f8:         SizeOf

000002f9:           Arg0

000002fa:     Method S2BF (\_SB_.PCI0.S2BF)

00000300:       ArgCount 1; Serialized

00000301:       Add

00000302:         <NULL>

00000306:         Arg0

00000307:         OneOp

00000308:       Local0

00000309:       Name BUFF (\_SB_.PCI0.S2BF.BUFF)

0000030e:         Buffer

00000310:           Local0

00000311:       Store

00000312:         Arg0

00000313:         BUFF (00000309)

00000317:       Return

00000318:         BUFF (00000309)

0000031c:     Method SCMP (\_SB_.PCI0.SCMP)

00000323:       ArgCount 2; NotSerialized

00000324:       Store

00000325:         <NULL>

00000329:         Arg0

0000032a:       Local0

0000032b:       Store

0000032c:         <NULL>

00000330:         Arg1

00000331:       Local1

00000332:       Store

00000333:         ZeroOp

00000334:         Local4

00000335:       Store

00000336:         <NULL>

0000033a:         Arg0

0000033b:       Local5

0000033c:       Store

0000033d:         <NULL>

00000341:         Arg1

00000342:       Local6

00000343:       Store

00000344:         <NULL>

00000348:         Local5

00000349:       Local6

0000034a:       Local7

0000034b:       While

0000034d:         LLess

0000034e:           Local4

0000034f:           Local7

00000350:         Store

00000351:           DerefOf

00000352:             Index

00000353:               Local0

00000354:               Local4

00000355:               <NULL>

00000356:           Local2

00000357:         Store

00000358:           DerefOf

00000359:             Index

0000035a:               Local1

0000035b:               Local4

0000035c:               <NULL>

0000035d:           Local3

0000035e:         If

00000360:           LGreater

00000361:             Local2

00000362:             Local3

00000363:           Return

00000364:             OneOp

00000365:         Else

00000367:           If

00000369:             LLess

0000036a:               Local2

0000036b:               Local3

0000036c:             Return

0000036d:               OnesOp

0000036e:         Increment

0000036f:           Local4

00000370:       If

00000372:         LLess

00000373:           Local4

00000374:           Local5

00000375:         Return

00000376:           OneOp

00000377:       Else

00000379:         If

0000037b:           LLess

0000037c:             Local4

0000037d:             Local6

0000037e:           Return

0000037f:             OnesOp

00000380:         Else

00000382:           Return

00000383:             ZeroOp

00000384:     Name OSTP (\_SB_.PCI0.OSTP)

00000389:       0x00

0000038b:     Method _INI (\_SB_.PCI0._INI)

00000392:       ArgCount 0; NotSerialized

00000393:       If

00000395:         CondRefOf

00000397:           _OSI

0000039b:           Local0

0000039c:         If

0000039e:           \_OSI

000003a3:           "Windows 2001"

000003b1:           Store

000003b2:             0x03

000003b4:             OSTP (00000384)

000003b8:       Else

000003bb:         If

000003bd:           LEqual

000003be:             <NULL>

000003c2:             \_OS_

000003c7:           "Microsoft Windows NT"

000003dd:           ZeroOp

000003de:           Store

000003df:             0x01

000003e1:             OSTP (00000384)

000003e5:         If

000003e7:           LEqual

000003e8:             <NULL>

000003ec:             \_OS_

000003f1:           "Microsoft Windows"

00000404:           ZeroOp

00000405:           Store

00000406:             0x00

00000408:             OSTP (00000384)

0000040c:           Store

0000040d:             0x00

0000040f:             ECDY (0000004b)

00000413:         If

00000415:           LEqual

00000416:             <NULL>

0000041a:             \_OS_

0000041f:           "Microsoft WindowsME: Millennium Edition"

00000448:           ZeroOp

00000449:           Store

0000044a:             0x02

0000044c:             OSTP (00000384)

00000450:     OpRegion HBUS (\_SB_.PCI0.HBUS)

00000456:       PCI_Config

00000457:       0x40

00000459:       0xc0

0000045b:     Field

0000045f:       HBUS (00000450)

00000463:       AccessType: DWordAcc; LockRule: NoLock; UpdateRule: Preserve

00000464:       ReservedField

00000467:       NamedField DRB0

0000046c:       NamedField DRB1

00000471:       NamedField DRB2

00000476:       NamedField DRB3

0000047b:       NamedField DRB4

00000480:       NamedField DRB5

00000485:       NamedField DRB6

0000048a:       NamedField DRB7

0000048f:       ReservedField

00000492:       ReservedField

00000494:       NamedField PM0H

00000499:       ReservedField

0000049b:       NamedField PM1L

000004a0:       ReservedField

000004a2:       NamedField PM1H

000004a7:       ReservedField

000004a9:       NamedField PM2L

000004ae:       ReservedField

000004b0:       NamedField PM2H

000004b5:       ReservedField

000004b7:       NamedField PM3L

000004bc:       ReservedField

000004be:       NamedField PM3H

000004c3:       ReservedField

000004c5:       NamedField PM4L

000004ca:       ReservedField

000004cc:       NamedField PM4H

000004d1:       ReservedField

000004d3:       NamedField PM5L

000004d8:       ReservedField

000004da:       NamedField PM5H

000004df:       ReservedField

000004e1:       NamedField PM6L

000004e6:       ReservedField

000004e8:       NamedField PM6H

000004ed:       ReservedField

000004ef:       NamedField FDHC

000004f4:     Name BUF0 (\_SB_.PCI0.BUF0)

000004f9:       Buffer

000004fc:         0x0201

000004ff:         ByteList <0x88 0x0e 0x00 0x02 0x0c 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0xff 0x00 0x00 0x00 0x00 0x01 

000004ff:         	      0x00 0x87 0x18 0x00 0x01 0x0c 0x03 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xf7 

000004ff:         	      0x0c 0x00 0x00 0x00 0x00 0x00 0x00 0xf8 

000004ff:         	      0x0c 0x00 0x00 0x00 0x47 0x01 0xf8 0x0c 

000004ff:         	      0xf8 0x0c 0x01 0x08 0x87 0x18 0x00 0x01 

000004ff:         	      0x0c 0x03 0x00 0x00 0x00 0x00 0x00 0x0d 

000004ff:         	      0x00 0x00 0xff 0xff 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0xf3 0x00 0x00 0x00 0x87 

000004ff:         	      0x18 0x00 0x00 0x0c 0x03 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x0a 0x00 0xff 0xff 0x0b 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 

000004ff:         	      0x00 0x00 0x87 0x18 0x00 0x00 0x0c 0x03 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x0c 0x00 

000004ff:         	      0xff 0x3f 0x0c 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x40 0x00 0x00 0x00 0x87 0x18 0x00 

000004ff:         	      0x00 0x0c 0x03 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x40 0x0c 0x00 0xff 0x7f 0x0c 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x40 0x00 0x00 0x00 

000004ff:         	      0x87 0x18 0x00 0x00 0x0c 0x03 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x80 0x0c 0x00 0xff 0xbf 

000004ff:         	      0x0c 0x00 0x00 0x00 0x00 0x00 0x00 0x40 

000004ff:         	      0x00 0x00 0x00 0x87 0x18 0x00 0x00 0x0c 

000004ff:         	      0x03 0x00 0x00 0x00 0x00 0x00 0xc0 0x0c 

000004ff:         	      0x00 0xff 0xff 0x0c 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x40 0x00 0x00 0x00 0x87 0x18 

000004ff:         	      0x00 0x00 0x0c 0x03 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x0d 0x00 0xff 0x3f 0x0d 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x40 0x00 0x00 

000004ff:         	      0x00 0x87 0x18 0x00 0x00 0x0c 0x03 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x40 0x0d 0x00 0xff 

000004ff:         	      0x7f 0x0d 0x00 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x40 0x00 0x00 0x00 0x87 0x18 0x00 0x00 

000004ff:         	      0x0c 0x03 0x00 0x00 0x00 0x00 0x00 0x80 

000004ff:         	      0x0d 0x00 0xff 0xbf 0x0d 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x40 0x00 0x00 0x00 0x87 

000004ff:         	      0x18 0x00 0x00 0x0c 0x03 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0xc0 0x0d 0x00 0xff 0xff 0x0d 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x40 0x00 

000004ff:         	      0x00 0x00 0x87 0x18 0x00 0x00 0x0c 0x03 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x0e 0x00 

000004ff:         	      0xff 0x3f 0x0e 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x40 0x00 0x00 0x00 0x87 0x18 0x00 

000004ff:         	      0x00 0x0c 0x03 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x40 0x0e 0x00 0xff 0x7f 0x0e 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x40 0x00 0x00 0x00 

000004ff:         	      0x87 0x18 0x00 0x00 0x0c 0x03 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x80 0x0e 0x00 0xff 0xbf 

000004ff:         	      0x0e 0x00 0x00 0x00 0x00 0x00 0x00 0x40 

000004ff:         	      0x00 0x00 0x00 0x87 0x18 0x00 0x00 0x0c 

000004ff:         	      0x03 0x00 0x00 0x00 0x00 0x00 0xc0 0x0e 

000004ff:         	      0x00 0xff 0xff 0x0e 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x40 0x00 0x00 0x00 0x87 0x18 

000004ff:         	      0x00 0x00 0x0c 0x03 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x0f 0x00 0xff 0xff 0x0f 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 

000004ff:         	      0x00 0x87 0x18 0x00 0x00 0x0c 0x03 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xff 

000004ff:         	      0xff 0xbf 0xfe 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x87 0x18 0x00 0x00 

000004ff:         	      0x0c 0x03 0x00 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 

000004ff:         	      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x79 

000004ff:         	      0x00>

00000700:     Method _CRS (\_SB_.PCI0._CRS)

00000707:       ArgCount 0; Serialized

00000708:       If

0000070a:         PM1L (0000049b)

0000070e:         CreateDWordField

0000070f:           BUF0 (000004f4)

00000713:           0x80

00000715:           C0LN

00000719:         Store

0000071a:           ZeroOp

0000071b:           C0LN

0000071f:       If

00000721:         LEqual

00000722:           PM1L (0000049b)

00000726:           0x01

00000728:         CreateBitField

00000729:           BUF0 (000004f4)

0000072d:           0x0378

00000730:           C0RW

00000734:         Store

00000735:           ZeroOp

00000736:           C0RW

0000073a:       If

0000073c:         PM1H (000004a2)

00000740:         CreateDWordField

00000741:           BUF0 (000004f4)

00000745:           0x9b

00000747:           C4LN

0000074b:         Store

0000074c:           ZeroOp

0000074d:           C4LN

00000751:       If

00000753:         LEqual

00000754:           PM1H (000004a2)

00000758:           0x01

0000075a:         CreateBitField

0000075b:           BUF0 (000004f4)

0000075f:           0x0450

00000762:           C4RW

00000766:         Store

00000767:           ZeroOp

00000768:           C4RW

0000076c:       If

0000076e:         PM2L (000004a9)

00000772:         CreateDWordField

00000773:           BUF0 (000004f4)

00000777:           0xb6

00000779:           C8LN

0000077d:         Store

0000077e:           ZeroOp

0000077f:           C8LN

00000783:       If

00000785:         LEqual

00000786:           PM2L (000004a9)

0000078a:           0x01

0000078c:         CreateBitField

0000078d:           BUF0 (000004f4)

00000791:           0x0528

00000794:           C8RW

00000798:         Store

00000799:           ZeroOp

0000079a:           C8RW

0000079e:       If

000007a0:         PM2H (000004b0)

000007a4:         CreateDWordField

000007a5:           BUF0 (000004f4)

000007a9:           0xd1

000007ab:           CCLN

000007af:         Store

000007b0:           ZeroOp

000007b1:           CCLN

000007b5:       If

000007b7:         LEqual

000007b8:           PM2H (000004b0)

000007bc:           0x01

000007be:         CreateBitField

000007bf:           BUF0 (000004f4)

000007c3:           0x0600

000007c6:           CCRW

000007ca:         Store

000007cb:           ZeroOp

000007cc:           CCRW

000007d0:       If

000007d2:         PM3L (000004b7)

000007d6:         CreateDWordField

000007d7:           BUF0 (000004f4)

000007db:           0xec

000007dd:           D0LN

000007e1:         Store

000007e2:           ZeroOp

000007e3:           D0LN

000007e7:       If

000007e9:         LEqual

000007ea:           PM3L (000004b7)

000007ee:           0x01

000007f0:         CreateBitField

000007f1:           BUF0 (000004f4)

000007f5:           0x06d8

000007f8:           D0RW

000007fc:         Store

000007fd:           ZeroOp

000007fe:           D0RW

00000802:       If

00000804:         PM3H (000004be)

00000808:         CreateDWordField

00000809:           BUF0 (000004f4)

0000080d:           0x0107

00000810:           D4LN

00000814:         Store

00000815:           ZeroOp

00000816:           D4LN

0000081a:       If

0000081c:         LEqual

0000081d:           PM3H (000004be)

00000821:           0x01

00000823:         CreateBitField

00000824:           BUF0 (000004f4)

00000828:           0x07b0

0000082b:           D4RW

0000082f:         Store

00000830:           ZeroOp

00000831:           D4RW

00000835:       If

00000837:         PM4L (000004c5)

0000083b:         CreateDWordField

0000083c:           BUF0 (000004f4)

00000840:           0x0122

00000843:           D8LN

00000847:         Store

00000848:           ZeroOp

00000849:           D8LN

0000084d:       If

0000084f:         LEqual

00000850:           PM4L (000004c5)

00000854:           0x01

00000856:         CreateBitField

00000857:           BUF0 (000004f4)

0000085b:           0x0888

0000085e:           D8RW

00000862:         Store

00000863:           ZeroOp

00000864:           D8RW

00000868:       If

0000086a:         PM4H (000004cc)

0000086e:         CreateDWordField

0000086f:           BUF0 (000004f4)

00000873:           0x013d

00000876:           DCLN

0000087a:         Store

0000087b:           ZeroOp

0000087c:           DCLN

00000880:       If

00000882:         LEqual

00000883:           PM4H (000004cc)

00000887:           0x01

00000889:         CreateBitField

0000088a:           BUF0 (000004f4)

0000088e:           0x0960

00000891:           DCRW

00000895:         Store

00000896:           ZeroOp

00000897:           DCRW

0000089b:       If

0000089d:         PM5L (000004d3)

000008a1:         CreateDWordField

000008a2:           BUF0 (000004f4)

000008a6:           0x0158

000008a9:           E0LN

000008ad:         Store

000008ae:           ZeroOp

000008af:           E0LN

000008b3:       If

000008b5:         LEqual

000008b6:           PM5L (000004d3)

000008ba:           0x01

000008bc:         CreateBitField

000008bd:           BUF0 (000004f4)

000008c1:           0x0a38

000008c4:           E0RW

000008c8:         Store

000008c9:           ZeroOp

000008ca:           E0RW

000008ce:       If

000008d0:         PM5H (000004da)

000008d4:         CreateDWordField

000008d5:           BUF0 (000004f4)

000008d9:           0x0173

000008dc:           E4LN

000008e0:         Store

000008e1:           ZeroOp

000008e2:           E4LN

000008e6:       If

000008e8:         LEqual

000008e9:           PM5H (000004da)

000008ed:           0x01

000008ef:         CreateBitField

000008f0:           BUF0 (000004f4)

000008f4:           0x0b10

000008f7:           E4RW

000008fb:         Store

000008fc:           ZeroOp

000008fd:           E4RW

00000901:       If

00000903:         PM6L (000004e1)

00000907:         CreateDWordField

00000908:           BUF0 (000004f4)

0000090c:           0x018e

0000090f:           E8LN

00000913:         Store

00000914:           ZeroOp

00000915:           E8LN

00000919:       If

0000091b:         LEqual

0000091c:           PM6L (000004e1)

00000920:           0x01

00000922:         CreateBitField

00000923:           BUF0 (000004f4)

00000927:           0x0be8

0000092a:           E8RW

0000092e:         Store

0000092f:           ZeroOp

00000930:           E8RW

00000934:       If

00000936:         PM6H (000004e8)

0000093a:         CreateDWordField

0000093b:           BUF0 (000004f4)

0000093f:           0x01a9

00000942:           ECLN

00000946:         Store

00000947:           ZeroOp

00000948:           ECLN

0000094c:       If

0000094e:         LEqual

0000094f:           PM6H (000004e8)

00000953:           0x01

00000955:         CreateBitField

00000956:           BUF0 (000004f4)

0000095a:           0x0cc0

0000095d:           ECRW

00000961:         Store

00000962:           ZeroOp

00000963:           ECRW

00000967:       If

00000969:         PM0H (00000494)

0000096d:         CreateDWordField

0000096e:           BUF0 (000004f4)

00000972:           0x01c4

00000975:           F0LN

00000979:         Store

0000097a:           ZeroOp

0000097b:           F0LN

0000097f:       If

00000981:         LEqual

00000982:           PM0H (00000494)

00000986:           0x01

00000988:         CreateBitField

00000989:           BUF0 (000004f4)

0000098d:           0x0d98

00000990:           F0RW

00000994:         Store

00000995:           ZeroOp

00000996:           F0RW

0000099a:       CreateDWordField

0000099b:         BUF0 (000004f4)

0000099f:         0x01d3

000009a2:         M1MN

000009a6:       CreateDWordField

000009a7:         BUF0 (000004f4)

000009ab:         0x01d7

000009ae:         M1MX

000009b2:       CreateDWordField

000009b3:         BUF0 (000004f4)

000009b7:         0x01df

000009ba:         M1LN

000009be:       Multiply

000009bf:         0x02000000

000009c4:         DRB7 (0000048a)

000009c8:         M1MN

000009cc:       Add

000009cd:         Subtract

000009ce:           M1MX

000009d2:           M1MN

000009d6:           <NULL>

000009d7:         0x01

000009d9:         M1LN

000009dd:       ShiftRight

000009de:         And

000009df:           \_SB_.PCI0.LPC0.MTSE (00000cce)

000009f2:           0x00038000

000009f7:           <NULL>

000009f8:         0x0f

000009fa:         Local0

000009fb:       If

000009fe:         And

000009ff:           Local0

00000a00:           0x04

00000a02:           <NULL>

00000a03:         CreateDWordField

00000a04:           BUF0 (000004f4)

00000a08:           0x01ee

00000a0b:           M2MN

00000a0f:         CreateDWordField

00000a10:           BUF0 (000004f4)

00000a14:           0x01f2

00000a17:           M2MX

00000a1b:         CreateDWordField

00000a1c:           BUF0 (000004f4)

00000a20:           0x01fa

00000a23:           M2LN

00000a27:         Store

00000a28:           0xfed00000

00000a2d:           M2MN

00000a31:         Store

00000a32:           0xfed003ff

00000a37:           M2MX

00000a3b:         Store

00000a3c:           0x0400

00000a3f:           M2LN

00000a43:         If

00000a45:           LEqual

00000a46:             Local0

00000a47:             0x05

00000a49:           Store

00000a4a:             0xfed01000

00000a4f:             M2MN

00000a53:           Store

00000a54:             0xfed013ff

00000a59:             M2MX

00000a5d:         If

00000a5f:           LEqual

00000a60:             Local0

00000a61:             0x06

00000a63:           Store

00000a64:             0xfed02000

00000a69:             M2MN

00000a6d:           Store

00000a6e:             0xfed023ff

00000a73:             M2MX

00000a77:         If

00000a79:           LEqual

00000a7a:             Local0

00000a7b:             0x07

00000a7d:           Store

00000a7e:             0xfed03000

00000a83:             M2MN

00000a87:           Store

00000a88:             0xfed033ff

00000a8d:             M2MX

00000a91:       Return

00000a92:         BUF0 (000004f4)

00000a96:     Method _S1D (\_SB_.PCI0._S1D)

00000a9c:       ArgCount 0; NotSerialized

00000a9d:       Return

00000a9e:         0x02

00000aa0:     Method _S3D (\_SB_.PCI0._S3D)

00000aa6:       ArgCount 0; NotSerialized

00000aa7:       Return

00000aa8:         0x02

00000aaa:     Method _S4D (\_SB_.PCI0._S4D)

00000ab0:       ArgCount 0; NotSerialized

00000ab1:       Return

00000ab2:         0x02

00000ab4:     Name _PRT (\_SB_.PCI0._PRT)

00000ab9:       Package

00000abc:         0x05

00000abd:         Package

00000abf:           0x04

00000ac0:           0x0001ffff

00000ac5:           0x00

00000ac7:           \_SB_.PCI0.LPC0.LNKA (00000f72)

00000ada:           0x00

00000adc:         Package

00000ade:           0x04

00000adf:           0x001fffff

00000ae4:           0x00

00000ae6:           \_SB_.PCI0.LPC0.LNKA (00000f72)

00000af9:           0x00

00000afb:         Package

00000afd:           0x04

00000afe:           0x001fffff

00000b03:           0x01

00000b05:           \_SB_.PCI0.LPC0.LNKB (00001029)

00000b18:           0x00

00000b1a:         Package

00000b1c:           0x04

00000b1d:           0x001fffff

00000b22:           0x02

00000b24:           \_SB_.PCI0.LPC0.LNKH (000012e4)

00000b37:           0x00

00000b39:         Package

00000b3b:           0x04

00000b3c:           0x001fffff

00000b41:           0x03

00000b43:           \_SB_.PCI0.LPC0.LNKD (00001181)

00000b56:           0x00

00000b58:     Device AGP_ (\_SB_.PCI0.AGP_)

00000b5f:       Name _ADR (\_SB_.PCI0.AGP_._ADR)

00000b64:         0x00010000

00000b69:       Name _PRT (\_SB_.PCI0.AGP_._PRT)

00000b6e:         Package

00000b70:           0x01

00000b71:           Package

00000b73:             0x04

00000b74:             0xffff

00000b77:             0x00

00000b79:             \_SB_.PCI0.LPC0.LNKA (00000f72)

00000b8c:             0x00

00000b8e:     Device SLOT (\_SB_.PCI0.SLOT)

00000b96:       Name _ADR (\_SB_.PCI0.SLOT._ADR)

00000b9b:         0x001e0000

00000ba0:       Name _PRT (\_SB_.PCI0.SLOT._PRT)

00000ba5:         Package

00000ba8:           0x05

00000ba9:           Package

00000bab:             0x04

00000bac:             0xffff

00000baf:             0x00

00000bb1:             \_SB_.PCI0.LPC0.LNKA (00000f72)

00000bc4:             0x00

00000bc6:           Package

00000bc8:             0x04

00000bc9:             0xffff

00000bcc:             0x01

00000bce:             \_SB_.PCI0.LPC0.LNKB (00001029)

00000be1:             0x00

00000be3:           Package

00000be5:             0x04

00000be6:             0x0008ffff

00000beb:             0x00

00000bed:             \_SB_.PCI0.LPC0.LNKE (0000122d)

00000c00:             0x00

00000c02:           Package

00000c04:             0x04

00000c05:             0x000bffff

00000c0a:             0x00

00000c0c:             \_SB_.PCI0.LPC0.LNKD (00001181)

00000c1f:             0x00

00000c21:           Package

00000c23:             0x04

00000c24:             0x000bffff

00000c29:             0x01

00000c2b:             \_SB_.PCI0.LPC0.LNKA (00000f72)

00000c3e:             0x00

00000c40:       Device CB1_ (\_SB_.PCI0.SLOT.CB1_)

00000c47:         Name _ADR (\_SB_.PCI0.SLOT.CB1_._ADR)

00000c4c:           0x00

00000c4e:         Method _STA (\_SB_.PCI0.SLOT.CB1_._STA)

00000c54:           ArgCount 0; NotSerialized

00000c55:           Return

00000c56:             0x0f

00000c58:       Device CB2_ (\_SB_.PCI0.SLOT.CB2_)

00000c5f:         Name _ADR (\_SB_.PCI0.SLOT.CB2_._ADR)

00000c64:           0x01

00000c66:         Method _STA (\_SB_.PCI0.SLOT.CB2_._STA)

00000c6c:           ArgCount 0; NotSerialized

00000c6d:           Return

00000c6e:             0x0f

00000c70:       Device RTLN (\_SB_.PCI0.SLOT.RTLN)

00000c77:         Name _ADR (\_SB_.PCI0.SLOT.RTLN._ADR)

00000c7c:           0x00080000

00000c81:         Name _PRW (\_SB_.PCI0.SLOT.RTLN._PRW)

00000c86:           Package

00000c88:             0x02

00000c89:             0x0b

00000c8b:             0x03

00000c8d:     Device LPC0 (\_SB_.PCI0.LPC0)

00000c96:       Method DECD (\_SB_.PCI0.LPC0.DECD)

00000c9c:         ArgCount 4; Serialized

00000c9d:         Store

00000c9e:           Arg0

00000c9f:           Debug

00000ca1:       Name _ADR (\_SB_.PCI0.LPC0._ADR)

00000ca6:         0x001f0000

00000cab:       OpRegion REGS (\_SB_.PCI0.LPC0.REGS)

00000cb1:         PCI_Config

00000cb2:         0x40

00000cb4:         0xc0

00000cb6:       Field

00000cb9:         REGS (00000cab)

00000cbd:         AccessType: DWordAcc; LockRule: Lock; UpdateRule: Preserve

00000cbe:         NamedField PMBA

00000cc3:         ReservedField

00000cc6:         NamedField GPBA

00000ccb:         ReservedField

00000cce:         NamedField MTSE

00000cd3:         ReservedField

00000cd6:         ReservedField

00000cd8:         NamedField FUND

00000cdd:       Device MBRD (\_SB_.PCI0.LPC0.MBRD)

00000ce5:         Name _HID (\_SB_.PCI0.LPC0.MBRD._HID)

00000cea:           PNP0c02 (0x020cd041)

00000cef:         Name _UID (\_SB_.PCI0.LPC0.MBRD._UID)

00000cf4:           0x1f

00000cf6:         Name RSRC (\_SB_.PCI0.LPC0.MBRD.RSRC)

00000cfb:           Buffer

00000cfe:             0xba

00000d00:             ByteList <0x47 0x01 0x00 0xfe 0x00 0xfe 0x01 0x02 

00000d00:             	      0x47 0x01 0x10 0x00 0x10 0x00 0x01 0x10 

00000d00:             	      0x47 0x01 0x24 0x00 0x24 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x28 0x00 0x28 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x2c 0x00 0x2c 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x30 0x00 0x30 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x34 0x00 0x34 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x38 0x00 0x38 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x3c 0x00 0x3c 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x50 0x00 0x50 0x00 0x01 0x04 

00000d00:             	      0x47 0x01 0x72 0x00 0x72 0x00 0x01 0x06 

00000d00:             	      0x47 0x01 0x80 0x00 0x80 0x00 0x01 0x01 

00000d00:             	      0x47 0x01 0x90 0x00 0x90 0x00 0x01 0x10 

00000d00:             	      0x47 0x01 0xa4 0x00 0xa4 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0xa8 0x00 0xa8 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0xac 0x00 0xac 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0xb0 0x00 0xb0 0x00 0x01 0x06 

00000d00:             	      0x47 0x01 0xb8 0x00 0xb8 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0xbc 0x00 0xbc 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0x00 0x10 0x00 0x10 0x01 0x80 

00000d00:             	      0x47 0x01 0x80 0x11 0x80 0x11 0x01 0x40 

00000d00:             	      0x47 0x01 0x2e 0x00 0x2e 0x00 0x01 0x02 

00000d00:             	      0x47 0x01 0xd0 0x04 0xd0 0x04 0x01 0x02 

00000d00:             	      0x79 0x00>

00000d00:             Interpreted as PnP Resource Descriptor:

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xfe00, maxbase 0xfe00, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x10, maxbase 0x10, align 0x1, count 0x10

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x24, maxbase 0x24, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x28, maxbase 0x28, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x2c, maxbase 0x2c, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x30, maxbase 0x30, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x34, maxbase 0x34, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x38, maxbase 0x38, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x3c, maxbase 0x3c, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x50, maxbase 0x50, align 0x1, count 0x4

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x72, maxbase 0x72, align 0x1, count 0x6

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x80, maxbase 0x80, align 0x1, count 0x1

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x90, maxbase 0x90, align 0x1, count 0x10

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xa4, maxbase 0xa4, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xa8, maxbase 0xa8, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xac, maxbase 0xac, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xb0, maxbase 0xb0, align 0x1, count 0x6

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xb8, maxbase 0xb8, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0xbc, maxbase 0xbc, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x1000, maxbase 0x1000, align 0x1, count 0x80

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x1180, maxbase 0x1180, align 0x1, count 0x40

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x2e, maxbase 0x2e, align 0x1, count 0x2

00000d00:             I/O Ports: 16 bit address decoding,

00000d00:             minbase 0x4d0, maxbase 0x4d0, align 0x1, count 0x2

00000d00:             Bad checksum 0xf5, should be 0

00000d00:             

00000dba:         Method _CRS (\_SB_.PCI0.LPC0.MBRD._CRS)

00000dc1:           ArgCount 0; NotSerialized

00000dc2:           CreateWordField

00000dc3:             RSRC (00000cf6)

00000dc7:             0x9a

00000dc9:             PMMN

00000dcd:           CreateWordField

00000dce:             RSRC (00000cf6)

00000dd2:             0x9c

00000dd4:             PMMX

00000dd8:           And

00000dd9:             ^^PMBA (00000cbe)

00000ddf:             0xff80

00000de2:             PMMN

00000de6:           Store

00000de7:             PMMN

00000deb:             PMMX

00000def:           CreateWordField

00000df0:             RSRC (00000cf6)

00000df4:             0xa2

00000df6:             GPMN

00000dfa:           CreateWordField

00000dfb:             RSRC (00000cf6)

00000dff:             0xa4

00000e01:             GPMX

00000e05:           And

00000e06:             ^^GPBA (00000cc6)

00000e0c:             0xff80

00000e0f:             GPMN

00000e13:           Store

00000e14:             GPMN

00000e18:             GPMX

00000e1c:           Return

00000e1d:             RSRC (00000cf6)

00000e21:       Device DMAC (\_SB_.PCI0.LPC0.DMAC)

00000e28:         Name _HID (\_SB_.PCI0.LPC0.DMAC._HID)

00000e2d:           PNP0200 (0x0002d041)

00000e32:         Name _CRS (\_SB_.PCI0.LPC0.DMAC._CRS)

00000e37:           Buffer

00000e39:             0x1d

00000e3b:             ByteList <0x47 0x01 0x00 0x00 0x00 0x00 0x01 0x10 

00000e3b:             	      0x47 0x01 0x81 0x00 0x81 0x00 0x01 0x0f 

00000e3b:             	      0x47 0x01 0xc0 0x00 0xc0 0x00 0x01 0x20 

00000e3b:             	      0x2a 0x10 0x02 0x79 0x00>

00000e3b:             Interpreted as PnP Resource Descriptor:

00000e3b:             I/O Ports: 16 bit address decoding,

00000e3b:             minbase 0x0, maxbase 0x0, align 0x1, count 0x10

00000e3b:             I/O Ports: 16 bit address decoding,

00000e3b:             minbase 0x81, maxbase 0x81, align 0x1, count 0xf

00000e3b:             I/O Ports: 16 bit address decoding,

00000e3b:             minbase 0xc0, maxbase 0xc0, align 0x1, count 0x20

00000e3b:             DMA mask: 00100000

00000e3b:             DMA channel speed: compatibility mode; transfer type: 16-bit

00000e3b:             Bad checksum 0x51, should be 0

00000e3b:             

00000e58:       Device MATH (\_SB_.PCI0.LPC0.MATH)

00000e5f:         Name _HID (\_SB_.PCI0.LPC0.MATH._HID)

00000e64:           PNP0c04 (0x040cd041)

00000e69:         Name _CRS (\_SB_.PCI0.LPC0.MATH._CRS)

00000e6e:           Buffer

00000e70:             0x0e

00000e72:             ByteList <0x47 0x01 0xf0 0x00 0xf0 0x00 0x01 0x0f 

00000e72:             	      0x23 0x00 0x20 0x01 0x79 0x00>

00000e72:             Interpreted as PnP Resource Descriptor:

00000e72:             I/O Ports: 16 bit address decoding,

00000e72:             minbase 0xf0, maxbase 0xf0, align 0x1, count 0xf

00000e72:             IRQ mask: 0100000000000000

00000e72:             Info: high true edge sensitive

00000e72:             Bad checksum 0xf5, should be 0

00000e72:             

00000e80:       Device PIC_ (\_SB_.PCI0.LPC0.PIC_)

00000e87:         Name _HID (\_SB_.PCI0.LPC0.PIC_._HID)

00000e8c:           PNP0000 (0x0000d041)

00000e8f:         Name _CRS (\_SB_.PCI0.LPC0.PIC_._CRS)

00000e94:           Buffer

00000e96:             0x16

00000e98:             ByteList <0x47 0x01 0x20 0x00 0x20 0x00 0x01 0x02 

00000e98:             	      0x47 0x01 0xa0 0x00 0xa0 0x00 0x01 0x02 

00000e98:             	      0x23 0x04 0x00 0x01 0x79 0x00>

00000e98:             Interpreted as PnP Resource Descriptor:

00000e98:             I/O Ports: 16 bit address decoding,

00000e98:             minbase 0x20, maxbase 0x20, align 0x1, count 0x2

00000e98:             I/O Ports: 16 bit address decoding,

00000e98:             minbase 0xa0, maxbase 0xa0, align 0x1, count 0x2

00000e98:             IRQ mask: 0000000000001000

00000e98:             Info: high true edge sensitive

00000e98:             Bad checksum 0xb7, should be 0

00000e98:             

00000eae:       Device RTC_ (\_SB_.PCI0.LPC0.RTC_)

00000eb5:         Name _HID (\_SB_.PCI0.LPC0.RTC_._HID)

00000eba:           PNP0b00 (0x000bd041)

00000ebf:         Name _CRS (\_SB_.PCI0.LPC0.RTC_._CRS)

00000ec4:           Buffer

00000ec6:             0x0e

00000ec8:             ByteList <0x47 0x01 0x70 0x00 0x70 0x00 0x01 0x02 

00000ec8:             	      0x23 0x00 0x01 0x01 0x79 0x00>

00000ec8:             Interpreted as PnP Resource Descriptor:

00000ec8:             I/O Ports: 16 bit address decoding,

00000ec8:             minbase 0x70, maxbase 0x70, align 0x1, count 0x2

00000ec8:             IRQ mask: 0000001000000000

00000ec8:             Info: high true edge sensitive

00000ec8:             Bad checksum 0xc9, should be 0

00000ec8:             

00000ed6:       Device SPKR (\_SB_.PCI0.LPC0.SPKR)

00000edd:         Name _HID (\_SB_.PCI0.LPC0.SPKR._HID)

00000ee2:           PNP0800 (0x0008d041)

00000ee7:         Name _CRS (\_SB_.PCI0.LPC0.SPKR._CRS)

00000eec:           Buffer

00000eee:             0x0a

00000ef0:             ByteList <0x47 0x01 0x61 0x00 0x61 0x00 0x01 0x01 

00000ef0:             	      0x79 0x00>

00000ef0:             Interpreted as PnP Resource Descriptor:

00000ef0:             I/O Ports: 16 bit address decoding,

00000ef0:             minbase 0x61, maxbase 0x61, align 0x1, count 0x1

00000ef0:             Bad checksum 0x85, should be 0

00000ef0:             

00000efa:       Device TIME (\_SB_.PCI0.LPC0.TIME)

00000f01:         Name _HID (\_SB_.PCI0.LPC0.TIME._HID)

00000f06:           PNP0100 (0x0001d041)

00000f0b:         Name _CRS (\_SB_.PCI0.LPC0.TIME._CRS)

00000f10:           Buffer

00000f12:             0x0e

00000f14:             ByteList <0x47 0x01 0x40 0x00 0x40 0x00 0x01 0x04 

00000f14:             	      0x23 0x01 0x00 0x01 0x79 0x00>

00000f14:             Interpreted as PnP Resource Descriptor:

00000f14:             I/O Ports: 16 bit address decoding,

00000f14:             minbase 0x40, maxbase 0x40, align 0x1, count 0x4

00000f14:             IRQ mask: 0000000000000010

00000f14:             Info: high true edge sensitive

00000f14:             Bad checksum 0x6b, should be 0

00000f14:             

00000f22:       Device KBC0 (\_SB_.PCI0.LPC0.KBC0)

00000f29:         Name _HID (\_SB_.PCI0.LPC0.KBC0._HID)

00000f2e:           PNP0303 (0x0303d041)

00000f33:         Name _CRS (\_SB_.PCI0.LPC0.KBC0._CRS)

00000f38:           Buffer

00000f3a:             0x16

00000f3c:             ByteList <0x47 0x01 0x60 0x00 0x60 0x00 0x01 0x01 

00000f3c:             	      0x47 0x01 0x64 0x00 0x64 0x00 0x01 0x01 

00000f3c:             	      0x23 0x02 0x00 0x01 0x79 0x00>

00000f3c:             Interpreted as PnP Resource Descriptor:

00000f3c:             I/O Ports: 16 bit address decoding,

00000f3c:             minbase 0x60, maxbase 0x60, align 0x1, count 0x1

00000f3c:             I/O Ports: 16 bit address decoding,

00000f3c:             minbase 0x64, maxbase 0x64, align 0x1, count 0x1

00000f3c:             IRQ mask: 0000000000000100

00000f3c:             Info: high true edge sensitive

00000f3c:             Bad checksum 0xbb, should be 0

00000f3c:             

00000f52:       Device MSE0 (\_SB_.PCI0.LPC0.MSE0)

00000f59:         Name _HID (\_SB_.PCI0.LPC0.MSE0._HID)

00000f5e:           PNP0f13 (0x130fd041)

00000f63:         Name _CRS (\_SB_.PCI0.LPC0.MSE0._CRS)

00000f68:           Buffer

00000f6a:             0x06

00000f6c:             ByteList <0x23 0x00 0x10 0x01 0x79 0x00>

00000f6c:             Interpreted as PnP Resource Descriptor:

00000f6c:             IRQ mask: 0010000000000000

00000f6c:             Info: high true edge sensitive

00000f6c:             Bad checksum 0xad, should be 0

00000f6c:             

00000f72:       Device LNKA (\_SB_.PCI0.LPC0.LNKA)

00000f7a:         Name _HID (\_SB_.PCI0.LPC0.LNKA._HID)

00000f7f:           PNP0c0f (0x0f0cd041)

00000f84:         Name _UID (\_SB_.PCI0.LPC0.LNKA._UID)

00000f89:           0x01

00000f8b:         Name _PRS (\_SB_.PCI0.LPC0.LNKA._PRS)

00000f90:           Buffer

00000f92:             0x06

00000f94:             ByteList <0x23 0x20 0x00 0x18 0x79 0x00>

00000f94:             Interpreted as PnP Resource Descriptor:

00000f94:             IRQ mask: 0000000001000000

00000f94:             Info: shareable, low true level sensitive

00000f94:             Bad checksum 0xd4, should be 0

00000f94:             

00000f9a:         Name RSRC (\_SB_.PCI0.LPC0.LNKA.RSRC)

00000f9f:           Buffer

00000fa1:             0x06

00000fa3:             ByteList <0x23 0x00 0x00 0x18 0x79 0x00>

00000fa3:             Interpreted as PnP Resource Descriptor:

00000fa3:             IRQ mask: 0000000000000000

00000fa3:             Info: shareable, low true level sensitive

00000fa3:             Bad checksum 0xb4, should be 0

00000fa3:             

00000fa9:         Method _DIS (\_SB_.PCI0.LPC0.LNKA._DIS)

00000faf:           ArgCount 0; NotSerialized

00000fb0:           Or

00000fb1:             PIRA (000013b1)

00000fb5:             0x80

00000fb7:             PIRA (000013b1)

00000fbb:         Method _CRS (\_SB_.PCI0.LPC0.LNKA._CRS)

00000fc1:           ArgCount 0; NotSerialized

00000fc2:           CreateWordField

00000fc3:             RSRC (00000f9a)

00000fc7:             0x01

00000fc9:             IRQ0

00000fcd:           And

00000fce:             PIRA (000013b1)

00000fd2:             0x0f

00000fd4:             Local0

00000fd5:           ShiftLeft

00000fd6:             0x01

00000fd8:             Local0

00000fd9:             IRQ0

00000fdd:           Store

00000fde:             RSRC (00000f9a)

00000fe2:             Debug

00000fe4:           Return

00000fe5:             RSRC (00000f9a)

00000fe9:         Method _SRS (\_SB_.PCI0.LPC0.LNKA._SRS)

00000fef:           ArgCount 1; NotSerialized

00000ff0:           Store

00000ff1:             Arg0

00000ff2:             Debug

00000ff4:           CreateWordField

00000ff5:             Arg0

00000ff6:             0x01

00000ff8:             IRQ0

00000ffc:           FindSetRightBit

00000ffd:             IRQ0

00001001:             Local0

00001002:           Decrement

00001003:             Local0

00001004:           Or

00001005:             Local0

00001006:             And

00001007:               PIRA (000013b1)

0000100b:               0x70

0000100d:               <NULL>

0000100e:             PIRA (000013b1)

00001012:         Method _STA (\_SB_.PCI0.LPC0.LNKA._STA)

00001018:           ArgCount 0; NotSerialized

00001019:           If

0000101b:             And

0000101c:               PIRA (000013b1)

00001020:               0x80

00001022:               <NULL>

00001023:             Return

00001024:               0x09

00001026:           Return

00001027:             0x0b

00001029:       Device LNKB (\_SB_.PCI0.LPC0.LNKB)

00001031:         Name _HID (\_SB_.PCI0.LPC0.LNKB._HID)

00001036:           PNP0c0f (0x0f0cd041)

0000103b:         Name _UID (\_SB_.PCI0.LPC0.LNKB._UID)

00001040:           0x02

00001042:         Name _PRS (\_SB_.PCI0.LPC0.LNKB._PRS)

00001047:           Buffer

00001049:             0x06

0000104b:             ByteList <0x23 0x00 0x08 0x18 0x79 0x00>

0000104b:             Interpreted as PnP Resource Descriptor:

0000104b:             IRQ mask: 0001000000000000

0000104b:             Info: shareable, low true level sensitive

0000104b:             Bad checksum 0xbc, should be 0

0000104b:             

00001051:         Name RSRC (\_SB_.PCI0.LPC0.LNKB.RSRC)

00001056:           Buffer

00001058:             0x06

0000105a:             ByteList <0x23 0x00 0x00 0x18 0x79 0x00>

0000105a:             Interpreted as PnP Resource Descriptor:

0000105a:             IRQ mask: 0000000000000000

0000105a:             Info: shareable, low true level sensitive

0000105a:             Bad checksum 0xb4, should be 0

0000105a:             

00001060:         Method _DIS (\_SB_.PCI0.LPC0.LNKB._DIS)

00001066:           ArgCount 0; NotSerialized

00001067:           Or

00001068:             PIRB (000013b6)

0000106c:             0x80

0000106e:             PIRB (000013b6)

00001072:         Method _CRS (\_SB_.PCI0.LPC0.LNKB._CRS)

00001078:           ArgCount 0; NotSerialized

00001079:           CreateWordField

0000107a:             RSRC (00001051)

0000107e:             0x01

00001080:             IRQ0

00001084:           And

00001085:             PIRB (000013b6)

00001089:             0x0f

0000108b:             Local0

0000108c:           ShiftLeft

0000108d:             0x01

0000108f:             Local0

00001090:             IRQ0

00001094:           Return

00001095:             RSRC (00001051)

00001099:         Method _SRS (\_SB_.PCI0.LPC0.LNKB._SRS)

0000109f:           ArgCount 1; NotSerialized

000010a0:           CreateWordField

000010a1:             Arg0

000010a2:             0x01

000010a4:             IRQ0

000010a8:           FindSetRightBit

000010a9:             IRQ0

000010ad:             Local0

000010ae:           Decrement

000010af:             Local0

000010b0:           Or

000010b1:             Local0

000010b2:             And

000010b3:               PIRB (000013b6)

000010b7:               0x70

000010b9:               <NULL>

000010ba:             PIRB (000013b6)

000010be:         Method _STA (\_SB_.PCI0.LPC0.LNKB._STA)

000010c4:           ArgCount 0; NotSerialized

000010c5:           If

000010c7:             And

000010c8:               PIRB (000013b6)

000010cc:               0x80

000010ce:               <NULL>

000010cf:             Return

000010d0:               0x09

000010d2:           Return

000010d3:             0x0b

000010d5:       Device LNKC (\_SB_.PCI0.LPC0.LNKC)

000010dd:         Name _HID (\_SB_.PCI0.LPC0.LNKC._HID)

000010e2:           PNP0c0f (0x0f0cd041)

000010e7:         Name _UID (\_SB_.PCI0.LPC0.LNKC._UID)

000010ec:           0x03

000010ee:         Name _PRS (\_SB_.PCI0.LPC0.LNKC._PRS)

000010f3:           Buffer

000010f5:             0x06

000010f7:             ByteList <0x23 0x00 0x08 0x18 0x79 0x00>

000010f7:             Interpreted as PnP Resource Descriptor:

000010f7:             IRQ mask: 0001000000000000

000010f7:             Info: shareable, low true level sensitive

000010f7:             Bad checksum 0xbc, should be 0

000010f7:             

000010fd:         Name RSRC (\_SB_.PCI0.LPC0.LNKC.RSRC)

00001102:           Buffer

00001104:             0x06

00001106:             ByteList <0x23 0x00 0x00 0x18 0x79 0x00>

00001106:             Interpreted as PnP Resource Descriptor:

00001106:             IRQ mask: 0000000000000000

00001106:             Info: shareable, low true level sensitive

00001106:             Bad checksum 0xb4, should be 0

00001106:             

0000110c:         Method _DIS (\_SB_.PCI0.LPC0.LNKC._DIS)

00001112:           ArgCount 0; NotSerialized

00001113:           Or

00001114:             PIRC (000013bb)

00001118:             0x80

0000111a:             PIRC (000013bb)

0000111e:         Method _CRS (\_SB_.PCI0.LPC0.LNKC._CRS)

00001124:           ArgCount 0; NotSerialized

00001125:           CreateWordField

00001126:             RSRC (000010fd)

0000112a:             0x01

0000112c:             IRQ0

00001130:           And

00001131:             PIRC (000013bb)

00001135:             0x0f

00001137:             Local0

00001138:           ShiftLeft

00001139:             0x01

0000113b:             Local0

0000113c:             IRQ0

00001140:           Return

00001141:             RSRC (000010fd)

00001145:         Method _SRS (\_SB_.PCI0.LPC0.LNKC._SRS)

0000114b:           ArgCount 1; NotSerialized

0000114c:           CreateWordField

0000114d:             Arg0

0000114e:             0x01

00001150:             IRQ0

00001154:           FindSetRightBit

00001155:             IRQ0

00001159:             Local0

0000115a:           Decrement

0000115b:             Local0

0000115c:           Or

0000115d:             Local0

0000115e:             And

0000115f:               PIRC (000013bb)

00001163:               0x70

00001165:               <NULL>

00001166:             PIRC (000013bb)

0000116a:         Method _STA (\_SB_.PCI0.LPC0.LNKC._STA)

00001170:           ArgCount 0; NotSerialized

00001171:           If

00001173:             And

00001174:               PIRC (000013bb)

00001178:               0x80

0000117a:               <NULL>

0000117b:             Return

0000117c:               0x09

0000117e:           Return

0000117f:             0x0b

00001181:       Device LNKD (\_SB_.PCI0.LPC0.LNKD)

00001189:         Name _HID (\_SB_.PCI0.LPC0.LNKD._HID)

0000118e:           PNP0c0f (0x0f0cd041)

00001193:         Name _UID (\_SB_.PCI0.LPC0.LNKD._UID)

00001198:           0x04

0000119a:         Name _PRS (\_SB_.PCI0.LPC0.LNKD._PRS)

0000119f:           Buffer

000011a1:             0x06

000011a3:             ByteList <0x23 0x20 0x00 0x18 0x79 0x00>

000011a3:             Interpreted as PnP Resource Descriptor:

000011a3:             IRQ mask: 0000000001000000

000011a3:             Info: shareable, low true level sensitive

000011a3:             Bad checksum 0xd4, should be 0

000011a3:             

000011a9:         Name RSRC (\_SB_.PCI0.LPC0.LNKD.RSRC)

000011ae:           Buffer

000011b0:             0x06

000011b2:             ByteList <0x23 0x00 0x00 0x18 0x79 0x00>

000011b2:             Interpreted as PnP Resource Descriptor:

000011b2:             IRQ mask: 0000000000000000

000011b2:             Info: shareable, low true level sensitive

000011b2:             Bad checksum 0xb4, should be 0

000011b2:             

000011b8:         Method _DIS (\_SB_.PCI0.LPC0.LNKD._DIS)

000011be:           ArgCount 0; NotSerialized

000011bf:           Or

000011c0:             PIRD (000013c0)

000011c4:             0x80

000011c6:             PIRD (000013c0)

000011ca:         Method _CRS (\_SB_.PCI0.LPC0.LNKD._CRS)

000011d0:           ArgCount 0; NotSerialized

000011d1:           CreateWordField

000011d2:             RSRC (000011a9)

000011d6:             0x01

000011d8:             IRQ0

000011dc:           And

000011dd:             PIRD (000013c0)

000011e1:             0x0f

000011e3:             Local0

000011e4:           ShiftLeft

000011e5:             0x01

000011e7:             Local0

000011e8:             IRQ0

000011ec:           Return

000011ed:             RSRC (000011a9)

000011f1:         Method _SRS (\_SB_.PCI0.LPC0.LNKD._SRS)

000011f7:           ArgCount 1; NotSerialized

000011f8:           CreateWordField

000011f9:             Arg0

000011fa:             0x01

000011fc:             IRQ0

00001200:           FindSetRightBit

00001201:             IRQ0

00001205:             Local0

00001206:           Decrement

00001207:             Local0

00001208:           Or

00001209:             Local0

0000120a:             And

0000120b:               PIRD (000013c0)

0000120f:               0x70

00001211:               <NULL>

00001212:             PIRD (000013c0)

00001216:         Method _STA (\_SB_.PCI0.LPC0.LNKD._STA)

0000121c:           ArgCount 0; NotSerialized

0000121d:           If

0000121f:             And

00001220:               PIRD (000013c0)

00001224:               0x80

00001226:               <NULL>

00001227:             Return

00001228:               0x09

0000122a:           Return

0000122b:             0x0b

0000122d:       Device LNKE (\_SB_.PCI0.LPC0.LNKE)

00001235:         Name _HID (\_SB_.PCI0.LPC0.LNKE._HID)

0000123a:           PNP0c0f (0x0f0cd041)

0000123f:         Name _UID (\_SB_.PCI0.LPC0.LNKE._UID)

00001244:           0x05

00001246:         Name _PRS (\_SB_.PCI0.LPC0.LNKE._PRS)

0000124b:           Buffer

0000124d:             0x06

0000124f:             ByteList <0x23 0x00 0x08 0x18 0x79 0x00>

0000124f:             Interpreted as PnP Resource Descriptor:

0000124f:             IRQ mask: 0001000000000000

0000124f:             Info: shareable, low true level sensitive

0000124f:             Bad checksum 0xbc, should be 0

0000124f:             

00001255:         Name RSRC (\_SB_.PCI0.LPC0.LNKE.RSRC)

0000125a:           Buffer

0000125c:             0x06

0000125e:             ByteList <0x23 0x00 0x00 0x18 0x79 0x00>

0000125e:             Interpreted as PnP Resource Descriptor:

0000125e:             IRQ mask: 0000000000000000

0000125e:             Info: shareable, low true level sensitive

0000125e:             Bad checksum 0xb4, should be 0

0000125e:             

00001264:         Method _DIS (\_SB_.PCI0.LPC0.LNKE._DIS)

0000126a:           ArgCount 0; NotSerialized

0000126b:           Or

0000126c:             PIRE (000013db)

00001270:             0x80

00001272:             PIRE (000013db)

00001276:         Method _CRS (\_SB_.PCI0.LPC0.LNKE._CRS)

0000127c:           ArgCount 0; NotSe

----------

## jetblack

Wow, that's a long post  :Smile:  Could you possibly make a link to the file instead? If you don't have anywhere to put it, I'd be happy to post it somewhere.

I just have a minute to glance at it (off to the vet), but a quick search for "THRM" didn't turn anything up in your DSDT, so that may be the problem. Also, there seem to be a bunch of checks for whether the OS is some version of Windows (search it on WIndows, you'll see them). I'm not sure how I feel about that. For reference, you can compare against my DSDT here.

----------

## jo_vermeulen

 *jetblack wrote:*   

> Wow, that's a long post  Could you possibly make a link to the file instead? If you don't have anywhere to put it, I'd be happy to post it somewhere.
> 
> I just have a minute to glance at it (off to the vet), but a quick search for "THRM" didn't turn anything up in your DSDT, so that may be the problem. Also, there seem to be a bunch of checks for whether the OS is some version of Windows (search it on WIndows, you'll see them). I'm not sure how I feel about that. For reference, you can compare against my DSDT here.

 

Ok, I put it on my homepage.

I already feared it to be Windows only...  :Sad: 

Damn "Designed for Windows XP" logo... Anything I can do about it?

Thanks again!

----------

## jetblack

I'm not sure exactly what you can do about it. I am staring at that same logo, but I do slowly seem to be getting support (still scratching my head over all of those Windows references in your DSDT).

I still haven't found anything in you DSDT that corresponds to the thermal functions in mine (search on "Scope _TZ_" in my DSDT if you'd like to see my thermal zone section), so perhaps you are just dealing with a buggy/incomplete DSDT. They have been fixing these over at acpi.sourceforge.net, so that may be a good place to look. Or, you could submit a bug to bugzilla.kernel.org. They've been very responsive for me.

I have found this patch for the 2.6 kernels that appears to provide support for omnibooks (including the ACER Aspire series, you can search on "Aspire" in the patch). It looks like it has functions for thermal support and such, so it may be worth giving it a shot.

I'll let you know if I come across anything else.

----------

## jo_vermeulen

 *jetblack wrote:*   

> I'm not sure exactly what you can do about it. I am staring at that same logo, but I do slowly seem to be getting support (still scratching my head over all of those Windows references in your DSDT).
> 
> I still haven't found anything in you DSDT that corresponds to the thermal functions in mine (search on "Scope _TZ_" in my DSDT if you'd like to see my thermal zone section), so perhaps you are just dealing with a buggy/incomplete DSDT. They have been fixing these over at acpi.sourceforge.net, so that may be a good place to look. Or, you could submit a bug to bugzilla.kernel.org. They've been very responsive for me.
> 
> I have found this patch for the 2.6 kernels that appears to provide support for omnibooks (including the ACER Aspire series, you can search on "Aspire" in the patch). It looks like it has functions for thermal support and such, so it may be worth giving it a shot.
> ...

 

Thanks a lot, I really appreciate it!

Overheating would make sense because I rarely get the problem at home, but very often at school. At home, I usually work on my laptop in the basement, where it's cool, and the laptop doesn't overheat that soon.

The fan does work now and then though.

It's a pity all those laptops use Windows-only ACPI code...  :Sad: 

I haven't tried the 2.6 kernel yet, but I guess I have to to update in order to solve this problem. 

I hope to fix it soon. You sure helped me a lot today!

Kind regards,

----------

## zwimmy

I have the exact same laptop as Jo and the exact same problems.

BUT everything worked great and solid as a rock under Red Hat 9.0 .... what is so different about RH than?

----------

## jo_vermeulen

 *zwimmy wrote:*   

> I have the exact same laptop as Jo and the exact same problems.
> 
> BUT everything worked great and solid as a rock under Red Hat 9.0 .... what is so different about RH than?

 

Maybe the patched Redhat kernel has some ACPI updates to fix this problem?Would be nice to get those  :Sad: 

Kind regards,

----------

## jetblack

 *jo_vermeulen wrote:*   

>  *zwimmy wrote:*   I have the exact same laptop as Jo and the exact same problems.
> 
> BUT everything worked great and solid as a rock under Red Hat 9.0 .... what is so different about RH than? 
> 
> Maybe the patched Redhat kernel has some ACPI updates to fix this problem?Would be nice to get those 
> ...

 

*slaps self on head*

Gentoo does have a redhat-sources ebuild, so I guess you could emerge them and try it out...

----------

## jetblack

Well, I now have AC Adapter and battery information! Check the update at bugzilla for details:

http://bugzilla.kernel.org/show_bug.cgi?id=1744

It's not completely fixed yet - I'll post the full information when/if I get the battery capacity information. Thanks again to Luming!

----------

## jana

hi all...

I've got a Dell Latitude x200, which (as of 2002) was nearly identical to the Gateway 200x.  Jetblack, what year is your machine?  I wonder if Dell and Gateway use the same bioses...  Oh, and I love my little laptop, too!   :Very Happy: 

I've been running with APM, but I'm interested to try getting ACPI going.  Which kernel + patch do you recommend starting with?  It looks like the first patch was on a 2.6 kernel and then second was on 2.4.  I'm not sure from your last post which one you're running now.

As far as the redhat-sources idea, would it be useful to grep through those kernels for keywords in the patches Luming developed?  I've compiled my share of kernels, but I've never poked inside of one...  

Thanks, and happy new year!

 - j

----------

## jetblack

I got mine about 3 months ago, at the end of 2003. I'm not sure what the BIOS version is off the top of my head.

As far as the patches and all go, I'm currently doing most of my testing with the following configuration:

1. kernel 2.4.23

2. latest ACPI patch from acpi.sourceforge.net

3. Luming's bit width patch from bugzilla.kernel.org (converts bit witdh problems from errors to warnings)

4. Luming's Embedded Control initialization patch from bugzilla.kernel.org.This reattempts the Embedded Control initialization after it has been parsed from the DSDT.

I have also tried this with 2.6.0 and 2.6.0-mm1. Everything is okay up until the Embedded Control patch, which wouldn't apply to the 2.6 sources.

Let me know if that helps any. I'm digging around my DSDT to see if I can figure out why I'm not seeing all of my battery info yet. If I work it out (or if Luming beats me to the punch with another patch) I'll post back here.

As far as the redhat-sources go, I suppose that you could do that, but I doubt that they'd be in any of the more official branches yet (at least, not the patches that I've been using). They're at most a week old, they've only ever been used by me as far as I can tell, and the bug still isn't resolved at bugzilla. I imagine that they'd at least wait until the problem had a proper solution, or was determined to be insoluble.

----------

## jana

Well, this probably isn't surprising, but...  SUCCESS!  using the 2.4.23 kernel with patches.  You're right that this functionality doesn't appear to be in the newest redhat-sources, although that's based on grepping (and if Luming developed original code there's no reason to think that this would be a good way to find common functionality).

Anyway, I haven't had much time to play with things, but I definitely have battery, ac, button, and thermal events.  I'll post more when I've had more time to work with the system...

Great job, jetblack!     :Smile: 

 - j

----------

## jetblack

Glad to hear it, jana! When you get a chance, could you tell me if all of your battery information is reported correctly? As you may have seen in the comments in bug 1744, my battery isn't reporting all of its capacity info correctly quite yet. Still trying to work it out.

Glad those patches helped you!

----------

## jana

Hmmmn.

My BAT1/info file gives me "design capacity" and "last full capacity" numbers...  who knows if they're right, but it's reporting something.  In fact, the info file is full with the exception of the model and serial numbers.

The BAT1/state file gives me a "capacity state" (ok) and a value for the "remaining capacity."  This number correlates well with the numbers in the info file, so that's encouraging.  The only line that appears to be broken in the state file is the "charging state," which knows when it's discharging but lists as "unknown" when the ac adapter is plugged in.  I get both charge and discharge rates reported, though.

Other differences, based on that kernel bugzilla:  my lid button works, but power and sleep don't.  

And for what it's worth, I've also got duplicate directories in the embedded_controller path.

 - j

----------

## jetblack

Ok, thanks. I guess I've got some goofy issue with my battery then.

I'm pretty sure that the duplicate Embedded Control entry is just because of the reinitialization that the second patch does. It's probably not a big deal, but it is a little interesting.

I'm going to go ahead and update that bug with your results, since it may be that my battery issue is a different problem. We'll see what they think. It looks like some other folks are having a similar issue.

----------

## jana

Sounds good.  

One minor change from what I noted last night:  the battery now knows when it's charging.  I guess last night it was so close to full that it wasn't really pulling current, but this morning after the walk in to campus it's low enough to be actively pulling, so acpi knows what's going on.

 - j

----------

## Stu L Tissimus

Hmmm... Interesting topic. I never knew there was such a thing as drivers for ACPI... Well, since ACPI doesnt work for my lappy either, *mark*

P.S. Hi Jetblack! (...You do know me, right?)

----------

## jetblack

I love the smell of ACPI in the morning. Smells like.... VICTORY!

Yes! Finally, I have full ACPI support for the laptop (well - heh - except suspend  :Wink: ) . Here's the latest (WARNING - this is a long post):

The bit_width kernel patch, while it restored some things, was really more of a band-aid to allow the system to skip over a bug in the EmbeddedControl region of the DSDT. The correct solution was to fix the DSDT. Here's how I did that, in case anyone else runs across a similar problem.

First, you need the iasl compiler from intel. Try the binary first. If that doesn't work for you (it worked for me), you can grab the source and compile it:

Binary iasl compiler

source for ACPI CA build environment

Extract the tarball to a directory somewhere. You will have a file called iasl in the resulting directory. That's the compiler.

Once you have iasl, you'll need your dsdt. You can get this most easily by issuing the following command as root:

```
cat /proc/acpi/dsdt > dsdt.dat
```

This will create a file called dsdt.dat in the current directory that contains the compiled DSDT.

Next, you need to disassemble the DSDT. You can do that with iasl. It will give you a much more legible result than the disassembler I linked to previously.

To disassemble your DSDT, just do the following (for simplicity, I'm assuming that everything is in the same directory)

```
./iasl -d dsdt.dat
```

This will create a file called dsdt.dsl, which contains the disassembled DSDT.

Now, to find out if your DSDT has any errors, just recompile it as follows:

```
./iasl -tc dsdt.dsl
```

This will create two files, DSDT.aml and dsdt.hex. Eventually, we will be interested in the .hex file. But for now, the important thing is that it will also spit out any errors and warnings that it encountered while compiling. In my case, I get the following:

```
Intel ACPI Component Architecture

ASL Optimizing Compiler / AML Disassembler version 20030228 [Feb 28 2003]

Copyright (C) 2000 - 2003 Intel Corporation

Supports ACPI Specification Revision 2.0b

dsdt.dsl   163:     Method (_WAK, 1, NotSerialized)

Warning  2026 -                ^ Reserved method must return a value (_WAK)

dsdt.dsl  2626:                     Field (ECR, DWordAcc, Lock, Preserve)

Error    1048 -                              ^ Host Operation Region requires ByteAcc access

dsdt.dsl  2672:                     Method (_GLK, 1, NotSerialized)

Warning  2024 -                                ^ Reserved method has too many arguments ( _GLK requires 0)

ASL Input:  dsdt.dsl - 3759 lines, 123154 bytes, 1862 keywords

Compilation complete. 1 Errors, 2 Warnings, 0 Remarks, 390 Optimizations

```

Two warnings, one error. And - aha! The error is the DWordAcc bit in the EmbeddedControl region. That's the source of my problems. Politely, the compiler even told me what I had to do to fix it. All you have to do now is open dsdt.dsl in your favorite text editor and modify it. In my case, it told me that I need ByteAcc access (instead of the DWordACC access). So, I just changed line 2626 from this:

```
Field (ECR, DWordAcc, Lock, Preserve)
```

to this:

```
Field (ECR, ByteAcc, Lock, Preserve)
```

Ok, let's see what happens when we compile it now.

Once again, compile with iasl

```
./iasl -tc dsdt.dsl
```

And we get:

```
Intel ACPI Component Architecture

ASL Optimizing Compiler / AML Disassembler version 20030228 [Feb 28 2003]

Copyright (C) 2000 - 2003 Intel Corporation

Supports ACPI Specification Revision 2.0b

dsdt.dsl   163:     Method (_WAK, 1, NotSerialized)

Warning  2026 -                ^ Reserved method must return a value (_WAK)

dsdt.dsl  2672:                     Method (_GLK, 1, NotSerialized)

Warning  2024 -                                ^ Reserved method has too many arguments ( _GLK requires 0)

ASL Input:  dsdt.dsl - 3759 lines, 123153 bytes, 1862 keywords

AML Output: DSDT.aml - 14600 bytes 499 named objects 1363 executable opcodes

Compilation complete. 0 Errors, 2 Warnings, 0 Remarks, 390 Optimizations

```

Well, the warnings are still there, but that error is gone. That appeared to be the root of my problem, so I decided this was okay for now.

So, now we have a "fixed" DSDT. We need to convince the kernel to use it instead of the broken one. Fortunately, the ACPI developers have put together a patch that allows you to do this. Unfortunately, it doesn't compile with 2.4.23. So, I modified it slightly to do that. You can get the modified DSDT override patch for 2.4.23 here.

Grab that patch and apply it to your kernel. That will allow you to include a custom DSDT. The patch expects it to be at /usr/src/linux-2.4.23/include/acpi/dsdt_table.h (substitute whatever you use for you kernel source directory for /usr/src/linux-2.4.23). So, copy the dsdt.hex that was generated from the successful compile to /usr/src/linux-2.4.23/include/acpi/dsdt_table.h.

```
cp dsdt.hex /usr/src/linux-2.4.23/include/acpi/dsdt_table.h
```

Now, just recompile your kernel as usual, and the new kernel should use the fixed DSDT.

In my case, this got me past my bit width problems. So, I was bascially back where I was when I had applied the bit width patch. I had buttons, fans and thermal zones. I had no battery or ac adapter. However, I was better off, because my lid was now reporting its status correctly, which it wasn't before.

So, to try to get the battery and ac adapter info back, I reapplied Luming's EmbeddedControl patch (I still think that that is an ECDT problem). Voila! The battery and ac adapter showed up, and now they give me all of the capacity and charging/discharging information.

So, that's pretty much everything that wasn't working under 2.4.23. In summary, here's what I ended up doing:

1. Install vanilla 2.4.23 kernel sources

2. Apply latest acpi patch from acpi.sourceforge.net

3. Apply DSDT override patch from bugzilla

4. Apply EmbeddedContol initialization patch from bugzilla.kernel.org

5. Get iasl compiler from Intel.

6. Fix my DSDT as follows:

```
su to root

cat /proc/acpi/dsdt > dsdt.dat  (extract current compiled DSDT)

./iasl -d dsdt.dat   (disassemble DSDT)

./iasl -tc dsdt.dsl  (recompile DSDT - check for errors)

vi dsdt.dsl (fix errors in DSDT)

./iasl -tc dsdt.dsl (recompile DSDT with no errors - hopefully)

```

7. Copy the fixed DSDT to the kernel source tree

```
cp dsdt.hex /usr/src/linux-2.4.23/include/acpi/dsdt_table.h
```

8. Recompile kernel and reboot!

I hope that some of that is helpful to someone. I think the EmbeddedControl stuff may be relatively exclusive to this laptop (and jana's). If you have DSDT errors, they probably aren't exactly the same as mine, but you should at least be able to diagnose them in this manner.

Finally, don't forget the acpi-devel and acpi-bugzilla mailing lists, or bugzilla.kernel.org.

Thanks to Luming, Ducrot, and the other acpi developers!

If you'd like, you can follow the course of this bug at buzilla here.

Now, I just have to see if I can get it going in 2.6  :Wink: 

----------

