Pages

Friday, July 2, 2010

How I Fixed My Overheating HP DV9000 Computer


NOTE: This article provides several hardware and software suggestions that others have found useful in an effort to increase airflow and reduce heat of their HP DV9000 computers. The ACPI DSDT patch has been found to work on both Windows 7 and Windows 8 for both 32 bit and 64 bit versions. Make sure to have an image backup of your system before attempting this patch in case you brick your computer. Use these suggestions at your own risk.

I have an HP Pavilion DV9000T CTO Notebook PC (EZ379AV) with the Intel processor (not AMD) on a Quanta 30BD Motherboard (very similar to DV6000). This DV9000T model was one of the earliest models that had 3 separate BGA (Ball Grid Array) chip assemblies mounted to 2 heatsinks (1. Intel CPU and Northbridge, 2. NVIDIA GPU). It came with Windows XP but I have updated to Windows 7 32 bit.
This was my dream laptop 3 years ago and for $2000, it should have been. Unfortunately there have been some overheating problems that could easily have been avoided. The computer GPU temperature was well over 70C which is the maximum it should reach. The following is a summary of what I discovered and how I fixed my HP DV9000 computer to the dream machine I always new it could be.

1. Separated Display Panel
2. Burned Out NVIDIA Graphic Chip
3. Poor Air Flow
3.1 Restricted Air Flow Through The NVIDIA Heatsink Air Vent
3.2 Restricted Air Flow Through The Bottom Cover Air Vents
3.3 Interior Components Exposed To Heatsink Exhaust 3.4 Increase Fan Speed
3.4.1 Hardware Solution: Remove 2 wires from the fan connector
3.4.2 Software Solution: Patching the DSDT
3.4.2.1 DSTS Patch Instructions
3.4.2.2 Microsoft’s ASL decompile bug
3.4.2.3 DSDT Windows Support Patch



History
The first problem occurred after about 2 years. The left side of the display case near the hinge was coming apart causing the plastic panels to separate. Shortly after that I noticed that the fan began to run more often at higher speeds. Normally the fan was very quiet and I hardly noticed it was running at all. Eventually the fan seemed to run fast all the time until one day the graphics display overheated and blinked out, displaying rows of black and white bans across the screen. Also worth noting, I installed Windows 7 Ultimate with out much difficulty (Helpful site "Windows 7 Upgrade Guide for dv6000/dv9000 models") and update the BIOS version to F.2D becasue I read some where it had a fix for the fan speed but it does not!


1. Separating Display Panel


Discovery:
The separating plastic display panel was caused by cracked and broken plastic screw mounts on the left side of the display lid that holds the screen hinges in place. Have a look at How to replace broken left hinge in HP Pavilion dv9000 for detailed photos. I was also concerned to find the screw mounts where the screen hinge attaches to the main body of the computer were directly connected (screwed in) to the heatsink. This made me wonder what role the heat may have played in all this. In all my web googling I never read about the right side of the display lid having broken plastic screw mounts.

Solution:
I replaced the display lid for about $90 from HP. Compared to the old display lid, the new lid looked as though additional support was added around the screw mounts.

2. Burned Out NVIDIA Graphic Chip


Discovery:
If you do a little web googling you will find many discussions on what causes the HP DV9000 graphic display to go out. In my case, I discovered that the VGA monitor was still working. This indicted the NVIDIA chip had over heated and unsoldered from the BGA assembly causing the graphic display to stop working.

Solution:
I reflowed the solder on the NVIDIA BGA assembly using a $8 pen torch. I concentrated the flame directly on the BGA assembly with the tip of the torch about 1 inch away from surface. I moved the torch around the outer edges of the NVIDIA chip taking about 4 seconds per cycle for a total of about 1 minute. I then let it cool for about 10 minutes before taking the aluminum foil off. I also noticed that the heatsink had foil attached under the chip so I scratch it off and added Arctic Silver heatsink compound. This is a picture of the aluminum flow and aluminum pop can I used to protect the motherboard components.
I should mention I had to reflow the  NVIDIA BGA assembly twice. The first time, my computer worked for about a month until it over heated when I plugged the HDMI into my LED Panel TV. I didn't have the ACPI DSDT patch (See below) back then so it likely would have helped but it may not have prevented this from happening because I think the reflow was not done correctly the first time. I held the torch to far away, circled it to quickly and for too short a time.
Just so you know, I was a hardware technician for 12 years, so even though I had never done this before I had some confidence of knowing I could do this, especially after watching this great video by mixcatcom HP DV9000 blank screen fix! Video problem BGA rework.

3. Poor Air Flow


I think that the lack of good air flow is the biggest and most common problem that laptops experience. If the air flow is restricted, no matter how fast the fan runs, the fan will not be effective.

The simplest thing you can do is to increase circulation space under the laptop by using a laptop cooling stand or cooling pad that has a fan attached. I use a homemade laptop stand that is nothing more than 2 wood planks, about 1/2 inch high, laid under the top and bottom feet of the laptop. This can lower the temperature of my laptop by an additional 4C to 6C when I play games but the fan also has to run at an adequate speed.

Below, I discuss several ways that I have improved the airflow of my computer and increased the speed of the fan when the CPU temperature increases. (Note, even though it is the CPU and not the GPU temprature that is monitored the GPU temparture remains in check with the CPU because they both work in unison aspecially at higher perfomance demands.)

3.1 Restricted Air Flow Through The NVIDIA Heatsink Air Vent


Discovery:
Below is a picture of the fan air intake vent and 2 heatsink exhaust air vents. The top air vent is for hot air exhaust from the NVIDIA chip heatsink and the right air vent for the hot air exhaust from the CPU and Northbridge chips heatsink.

The air vent for the NVIDIA chip heatsink looks to be about 70% blocked by a plastic connector molding when compared to the picture below it. The air vent opening to the right, which is not blocked, is considerably larger.

Solution:
To improve the air flow for the NVIDIA air vent I cut out the extra plastic on the connector molding that was blocking the air flow.


3.2 Restricted Air Flow Through The Bottom Cover Air Vents


Discovery:
Below, you can see 2 bottom cover air vents that are restricted by plastic tape that has tiny pin like holes.


Solution:
The picture below shows the 2 bottom cover air vents with the restricted plastic tape removed.


3.3 Interior Components Exposed To Heatsink Exhaust


Discovery:
I noticed the motherboard components were exposed to hot air exhaust coming from the NVIDIA heatsink leaking through a cavity opening between the heatsink and the outer casing.

Solution:
Below is a picture of a wood plug I made to block the cavity opening between the heatsink and the outer casing.

3.4 Increase Fan Speed


As I mentioned above, the fan normally was very quiet and was hardly noticable when it was running. At the time, I thought it was great that the computer didn't need the fan running any faster then it did. I notice the surface under my left hand was hotter then other areas but I thought that must be normal. Unfortunatly I found out fan did need to run faster if it was going to last longer then it had for me.

Discovery:
The fan normally doesn't run fast enough to keep the NVIDIA chip from overheat to temperatures above 75C. Unlike the DV9000 AMD BIOS fix which runs the fan at full speed, the DV9000 Intel BIOS (versions F.29, F.2D and F.2E) has no fan fix. Now that the NVIDIA chip has been reflowed and my computer has good air flow, its time to permanently resolve the fan speed issue by getting the fan speed to react sooner to rising temperatures.

3.4.1 Hardware Solution: Remove 2 wires from the fan connector


I first tried a hardware fix to run the fan at full speed. I did this by disconnecting the white and yellow fan wires as shown in the picture below.
I found that running the fan at full speed was a bit load so I put a 2 ohm resistor in series with the red wire which took off the edge of the sound. But after a few months I was searching for a better way to automatically adjust the fan speed.

3.4.2 Software Solution: Patching the DSDT


The best way to control the fan speed is to get the BIOS ACPI software to respond sooner to increasing temperatures. This process is handled by the DSDT (Differentiated System Description Table). After I decompiled the DSDT into readable code, I discovered the temperature trigger levels that control the incremental stages of the fan speed were not controlled in the DSDT. Therefore, the only way to get the fan to increase speed at lower temperatures is to have the ThermalZone report a higher false temperature causing the fan to trigger sooner. One unfortunate thing I found was that the DSDT only monitors the CPU temperatures and not the GPU. I am still looking for a way to monitor and report the GPU temperatures.

I found a helpful site called How to Reduce Fan Noise on HP Notebooks: Patching the DSDT table that guided me through the process.

Note: This code patch only works when the Power Options System Cooling policies are set to Active (not Passive). Look in the Windows 7 Control Panel for "Microsoft IT Customized Peak Plan (Laptop) Change Panel Settings /Change Advanced Power Settings/Processor Power Management/System Cooling Policy" and set the options to Active.

WARNING: Before attempting this patch, you should make a image backup of your OS system in case something goes wrong with your patch.

3.4.2.1 DSTS Patch Instructions


I have provided a brief summery of instructions below but please go to the site above for detailed instructions on what to look for if you are patching a different computer. If your motherboard is a Quanta 30BB, 30BC or 30BD with the BIOS versions of either F.29, F.2D or F.2E and you are running Windows 7 32 bit or 64 bit (64 bit confirmed working for dv9340ea computer by Andrew) then you may use my code patch below with the understanding that you use it at your own risk.

You will need to find and download the file equus.exe (11KB) and the file Microsoft ASL Compiler that are used for this patch operation. I used both versions (3.0.1 and 4.0) of the Microsoft ASL Compiler and found no difference (both have the compile error I mention below). I used the equus.exe program but I read that it does not work with Windows XP so you may need to use the iasl.exe program to extract the DSDT table from the registry (raw binary). If you google for "DSDT iasl.exe" you will find several other sites for doing this.

------------------------------------------------------------------------------------------
1. Install the Microsoft ASL Compiler program and copy the asl.exe file from the install directory to C:\ACPI. (Create the C:\ACPI if necessary)

2. Copy the equus.exe file to C:\ACPI

3. Start a DOS Command Prompt using "Run as Administrator" and change the directory to where you copied the programs.
>cd C:\ACPI

4. Use the equus.exe program to extract the DSDT and create an AML file. You will need 2 things, the subkey path and the key name.
The subkey path is the directory where your DSDT table is loaded in the registry.
The key name is the actual key we are looking for where the fan speed information is loaded. The key is located within the subkey. It is a REG_BINARY and usually named "00000000".

Note: If your MOBO is not a Quanta 30BD then you will need to find the correct subkey path and key name in the registry. It should be located under the directory HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\.

a. Run the equus.exe program to extract the DSDT and create an AML file.
>equus.exe
b. Enter the following:
    subkey path = HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\HP____\30BD____\06040000
    key name = 00000000

5. Create a backup of the AML file.
>Copy dsdt.aml dsdtorig.aml

6. Decompile the AML to an ASL text file. A new file named DSDT.ASL should be created in C:\ACPI folder.
>asl /u dsdt.aml

7. Edit the DSDT.ASL file. Reference the sections below for my code example and issues that you need to know. Search for the code that controls the fan speed. For my code I searched for ThermalZone. This code section controls the CPU temperature. My code does not have code to control the GPU. Enter the code patch to the _TMP method to report a higher temperature. You will need a hex converter to convert decimal numbers to hexadecimal. Example: 100 decimal is 64 hex. Change the fanspeed as desired using the hexadecimal converter. Also make sure not to exceed the Warning Level temperature which you can see exists in my code.
>Save the dsdt.ASL file.

8. Compile the ASL file to an ASL file.
>asl dsdt.ASL

Note: You will get some warning messages. You can ignore any warning messages like
"warning: not a valid reserved NameSeg".
Other warning messages most likely do not matter either but search the internet to see how others have handle them if you have problems.
If you get an "dsdt.ASL(2712): error: expecting ASL/User Term" then refer below to the Microsoft’s ASL decompile bug.

9. If you are loading this patch on a Windows 7 OS then you can skip to step 9.2.
If you are loading this patch on a Windows 8 OR Windows 8.1 OS then there are other issues to consider like drivers and a Watermark on the desktop's right-corner display. (See Andrew Comments on Windows 8.1 issues)
There is also an extra 9.1 step that you will need to run in order to overwrite the DSDT. (See Andrew Comments on how to load the AML file into the DSDT)

9.1 Start a DOS Command prompt with RUN AS ADMINISTRATOR. Entering the following command.
>bcdedit /set testsigning on

9.2 Load the AML file into the DSDT.
>asl /loadtable dsdt.aml

10. Reboot
------------------------------------------------------------------------------------------

If you want to recover back to your original DSDT, just type this at the command prompt:
>cd C:\ACPI
>asl /loadtable dsdtorig.aml

Warning, I have had coding issues that caused my computer to run so slow it took 10 minutes to boot and it was very difficult to type in the commands to restore my original code... SO BE VERY CAREFULL.
------------------------------------------------------------------------------------------

3.4.2.2 Microsoft’s ASL Decompile Bug


The Microsoft’s ASL decompile has a bug that causes an error like this on line 2712.

2712: "33DB4D5B-1FF7-401C-9657-7441C03DD766"
dsdt.ASL(2712): error: expecting ASL/User Term

To fix this I changed the code from this:
------------------------------------------------------------------------------------------
If (LEqual (Arg0, Z012))
{
  "33DB4D5B-1FF7-401C-9657-7441C03DD766"
------------------------------------------------------------------------------------------
To this:
------------------------------------------------------------------------------------------
If (LEqual (Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766")))
{
------------------------------------------------------------------------------------------

3.4.2.3 DSDT Windows Support Patch


After decompiling the DSDT, search for the Device(PCI0) section and add Windows 7 support with the following:

If(\_OSI("Windows 2009"))
{
    Store(0x7d9, OSYS)
}

If you also need Windows 8 support then you can try this code but it has not been confirmed yet as the correct numbers for Windows 8.

If(\_OSI("Windows 2012"))
{
    Store(0x7dc, OSYS)
}

Next, search for the ThermalZone(THR1) section that controls the CPU temperature. I patch the Method(_TMP, 0x0, NotSerialized) routine to add the TADJ 32C (0x20) temperature to the current CPU temperature so that the reported temperature level is increased by that amount causing the fan to react sooner as the CPU temperature rises. I later changed the TADJ value down to 26C (0x 1A) on my computer so it did not run the fan so much.

Here is the DSDT patch I coded.

Code:
//Code to report a false CPU temperature. Use this code at your own risk
Scope(\_TZ_)
{
    Name(TPC_, 0x78) //120C Critical level
    Name(TP85, 0x6e) //110C Critical level
    Name(TPTM, 0x4b) //75C Passive level
    Name(TPAS, 0x5c) //92C Warning level
    Name(TA85, 0x50) //80C Warning level
    Name(DS01, 0x0)
    Name(DS02, 0x0)
    Name(DSA1, 0x0)
    Name(DSA2, 0x0)
    Name(TADJ, 0x20) // 32C Temp Adjustment
    ThermalZone(THR1)
    {
        Method(_TMP, 0x0, NotSerialized) // Current temp
        {
            If(ECON) // Embedded Controller Active Cooling Enabled
            {
                //Adjust CPU0 to increase fan speed
                Store(DTS1, DS01)
                // If less than Critical level
                If(LLess(DS01, TP85))
                {
                    Store(Add(DS01,TADJ), DSA1)
                    If(LGreater(DSA1, TP85))
                    {
                        Store(TP85, DSA1) //Never adjust higher than TP85
                    }
                }
                Else
                {
                    Store(DS01, DSA1)
                }
                Store(DSA1, \_SB_.PCI0.LPCB.EC0_.ECT1)
                //---------------------------------
                //Adjust CPU1 to increase fan speed
                Store(DTS2, DS02)
                // If less than Critical level
                If(LLess(DS01, TP85))
                {
                    Store(Add(DS02,TADJ), DSA2)
                    If(LGreater(DSA2, TP85))
                    {
                        Store(TP85, DSA2) //Never adjust higher than TP85
                    }
                }
                Else
                {
                    Store(DS02, DSA2)
                }
                Store(DSA2, \_SB_.PCI0.LPCB.EC0_.ECT2)
                //---------------------------------
                //Use highest CPU temprature
                Store("Current temp is: ", Debug)
                //If CPU0 greater then CPU1
                If(LGreater(DSA1, DSA2))
                {
                    Store(DSA1, Debug)
                    Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
                    Return(Add(0xaac, Multiply(DSA1, 0xa)))
                }
                Else
                {
                    Store(DSA2, Debug)
                    Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
                    Return(Add(0xaac, Multiply(DSA2, 0xa)))
                }
            }
            Else // Passive Cooling Enabled
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa)))
            }
        }
        Method(_CRT, 0x0, NotSerialized) // Critical level
        {
            If(LEqual(\_SB_.TJ85, 0x0))
            {
                Return(Add(0xaac, Multiply(TPC_, 0xa)))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TP85, 0xa)))
            }
        }
        Method(_PSL, 0x0, NotSerialized) //list of passive cooling device objects
        {
            If(MPEN)
            {
                Return(Package(0x2)
                {
                    \_PR_.CPU0,
                    \_PR_.CPU1
                })
            }
            Return(Package(0x1)
            {
                \_PR_.CPU0
            })
        }
        Method(_PSV, 0x0, NotSerialized) // Warning level
        {
            If(LEqual(\_SB_.TJ85, 0x0))
            {
                Return(Add(0xaac, Multiply(TPAS, 0xa)))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TA85, 0xa)))
            }
        }
        Method(_TC1, 0x0, NotSerialized) // Passive cooling constant
        {
            Return(0x2)
        }
        Method(_TC2, 0x0, NotSerialized) // Passive cooling constant
        {
            Return(0x3)
        }
        Method(_TSP, 0x0, NotSerialized) // Passive cooling sample period
        {
            Return(0x32) // 5 sec
        }
    }
}

Here is the original code for comparison.

Code:
//Original code
Scope(\_TZ_)
{
    Name(TPC_, 0x78)
    Name(TP85, 0x6e)
    Name(TPTM, 0x4b)
    Name(TPAS, 0x5c)
    Name(TA85, 0x50)
    Name(DS01, 0x0)
    Name(DS02, 0x0)
    ThermalZone(THR1)
    {
        Method(_TMP, 0x0, NotSerialized)
        {
            If(ECON)
            {
                Store(DTS1, DS01)
                Store(DS01, \_SB_.PCI0.LPCB.EC0_.ECT1)
                Store(DTS2, DS02)
                Store(DS02, \_SB_.PCI0.LPCB.EC0_.ECT2)
                Store("Current temp is: ", Debug)
                Store(DS01, Debug)
                If(LGreater(DS01, DS02))
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
                    Return(Add(0xaac, Multiply(DS01, 0xa, ), ))
                }
                Else
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
                    Return(Add(0xaac, Multiply(DS02, 0xa, ), ))
                }
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_CRT, 0x0, NotSerialized)
        {
            If(LEqual(\_SB_.TJ85, 0x0))
            {
                Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
            }
        }
        Method(_PSL, 0x0, NotSerialized)
        {
            If(MPEN)
            {
                Return(Package(0x2)
                {
                    \_PR_.CPU0,
                    \_PR_.CPU1
                })
            }
            Return(Package(0x1)
            {
                \_PR_.CPU0
            })
        }
        Method(_PSV, 0x0, NotSerialized)
        {
            If(LEqual(\_SB_.TJ85, 0x0))
            {
                Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TA85, 0xa, ), ))
            }
        }
        Method(_TC1, 0x0, NotSerialized)
        {
            Return(0x2)
        }
        Method(_TC2, 0x0, NotSerialized)
        {
            Return(0x3)
        }
        Method(_TSP, 0x0, NotSerialized)
        {
            Return(0x32)
        }
    }
}

Here is my DSDT.ASL file.
(Note: Only for motherboard that are Quanta 30BB, 30BC or 30BD with the BIOS versions of either F.29, F.2D or F.2E)

Code:
// CreatorID=MSFT   CreatorRev=1.0.14
// FileLength=30109 FileChkSum=0x30

DefinitionBlock("dsdt.aml", "DSDT", 0x01, "HP    ", "30BD    ", 0x06040000)
{
    External (PDC1)
    External (PDC0)
    External (CFGD)

    OperationRegion(PRT0, SystemIO, 0x80, 0x4)
    Field(PRT0, DWordAcc, Lock, Preserve)
    {
        P80H, 32
    }
    OperationRegion(S_IO, SystemIO, 0x6b0, 0x11)
    Field(S_IO, ByteAcc, NoLock, Preserve)
    {
        PMS0, 8,
        PME0, 8,
        PMS1, 8,
        PMS2, 8,
        PMS3, 8,
        PME1, 8,
        PME2, 8,
        PME3, 8,
        SMS1, 8,
        SMS2, 8,
        SME1, 8,
        SME2, 8,
        RT10, 1,
        RT11, 1,
        , 1,
        RT13, 1,
        , 12,
        RT30, 1,
        RT31, 1,
        RT32, 1,
        RT33, 1,
        RT34, 1,
        RT35, 1,
        RT36, 1,
        RT37, 1,
        , 8,
        DLPC, 1,
        CK33, 1,
        CK14, 1
    }
    OperationRegion(IO_T, SystemIO, 0x800, 0x10)
    Field(IO_T, ByteAcc, NoLock, Preserve)
    {
        Offset(0x8),
        TRP0, 8
    }
    OperationRegion(PMIO, SystemIO, 0x1000, 0x80)
    Field(PMIO, ByteAcc, NoLock, Preserve)
    {
        Offset(0x30),
        GSMI, 1,
        , 3,
        SLPE, 1,
        Offset(0x42),
        , 1,
        GPEC, 1
    }
    OperationRegion(GPIO, SystemIO, 0x1180, 0x3c)
    Field(GPIO, ByteAcc, NoLock, Preserve)
    {
        GU00, 8,
        GU01, 8,
        GU02, 8,
        GU03, 8,
        GIO0, 8,
        GIO1, 8,
        GIO2, 8,
        GIO3, 8,
        , 32,
        GL00, 8,
        , 4,
        GP12, 1,
        , 3,
        GL02, 8,
        , 1,
        GP25, 1,
        GP26, 1,
        , 5,
        Offset(0x18),
        GB00, 8,
        GB01, 8,
        GB02, 8,
        GB03, 8,
        Offset(0x2c),
        GIV0, 8,
        GIV1, 8,
        GIV2, 8,
        GIV3, 8,
        GU04, 8,
        GU05, 8,
        GU06, 8,
        GU07, 8,
        GIO4, 8,
        GIO5, 8,
        GIO6, 8,
        GIO7, 8,
        , 7,
        GP39, 1,
        GL05, 8,
        GL06, 8,
        GL07, 8
    }
    OperationRegion(GNVS, SystemMemory, 0x7fe84dbc, 0x100)
    Field(GNVS, AnyAcc, Lock, Preserve)
    {
        OSYS, 16,
        SMIF, 8,
        PRM0, 8,
        PRM1, 8,
        SCIF, 8,
        PRM2, 8,
        PRM3, 8,
        LCKF, 8,
        PRM4, 8,
        PRM5, 8,
        P80D, 32,
        LIDS, 8,
        PWRS, 8,
        DBGS, 8,
        LINX, 8,
        , 8,
        ACTT, 8,
        PSVT, 8,
        TC1V, 8,
        TC2V, 8,
        TSPV, 8,
        CRTT, 8,
        DTSE, 8,
        DTS1, 8,
        DTS2, 8,
        , 8,
        BNUM, 8,
        BCAP, 8,
        B1SC, 8,
        B2SC, 8,
        B0SS, 8,
        B1SS, 8,
        B2SS, 8,
        , 24,
        APIC, 8,
        MPEN, 8,
        , 8,
        PPCM, 8,
        PCP0, 8,
        PCP1, 8,
        , 32,
        NATP, 8,
        CMAP, 8,
        CMBP, 8,
        LPTP, 8,
        FDCP, 8,
        CMCP, 8,
        CIRP, 8,
        , 24,
        IGDS, 8,
        TLST, 8,
        CADL, 8,
        PADL, 8,
        CSTE, 16,
        NSTE, 16,
        SSTE, 16,
        NDID, 8,
        DID1, 32,
        DID2, 32,
        DID3, 32,
        DID4, 32,
        DID5, 32,
        Offset(0x67),
        BLCS, 8,
        BRTL, 8,
        ALSE, 8,
        ALAF, 8,
        LLOW, 8,
        LHIH, 8,
        , 8,
        EMAE, 8,
        EMAP, 16,
        EMAL, 16,
        , 8,
        MEFE, 8,
        , 24,
        TPMP, 8,
        TPME, 8,
        Offset(0x82),
        GTF0, 56,
        GTF2, 56,
        IDEM, 8,
        Offset(0xb4),
        WMIA, 8,
        WMIO, 8,
        ACPS, 8,
        HPBD, 8,
        IVIM, 8,
        EXTM, 8,
        Z000, 8,
        Z001, 8,
        Z002, 8,
        Z003, 8,
        Z004, 8,
        Z005, 8,
        Z006, 8,
        Z007, 8,
        Z008, 8,
        Z009, 8,
        Z00A, 8,
        EXCM, 8,
        Z00B, 8
    }
    OperationRegion(RCRB, SystemMemory, 0xfed1c000, 0x4000)
    Field(RCRB, DWordAcc, Lock, Preserve)
    {
        Offset(0x1000),
        Offset(0x3000),
        Offset(0x3404),
        HPAS, 2,
        , 5,
        HPAE, 1,
        Offset(0x3418),
        , 1,
        PATD, 1,
        SATD, 1,
        SMBD, 1,
        HDAD, 1,
        A97D, 1,
        , 10,
        RP1D, 1,
        RP2D, 1,
        RP3D, 1,
        RP4D, 1,
        RP5D, 1,
        RP6D, 1
    }
    Mutex(MUTX, 0x0)
    Name(_S0_, Package(0x3)
    {
        0x0,
        0x0,
        0x0
    })
    Name(_S3_, Package(0x3)
    {
        0x5,
        0x5,
        0x0
    })
    Name(_S4_, Package(0x3)
    {
        0x6,
        0x6,
        0x0
    })
    Name(_S5_, Package(0x3)
    {
        0x7,
        0x7,
        0x0
    })
    Scope(\_PR_)
    {
        Processor(CPU0, 0x0, 0x1010, 0x6)
        {
        }
        Processor(CPU1, 0x1, 0x1010, 0x6)
        {
        }
    }
    Name(\DSEN, 0x1)
    Name(\ECON, 0x0)
    Name(\GPIC, 0x0)
    Name(\CTYP, 0x0)
    Name(\L01C, 0x0)
    Name(\VFN0, 0x0)
    Method(\_PIC, 0x1, NotSerialized)
    {
        Store(Arg0, GPIC)
    }
    Name(SAV0, 0x0)
    Name(SAV1, 0x0)
    Name(SAV2, 0x0)
    Method(_PTS, 0x1, NotSerialized)
    {
        Store(0x0, P80D)
        P8XH(0x0, Arg0)
        Store(0x0, SLPE)
        Store(GP25, SAV0)
        Store(GP26, SAV1)
        Store(\_SB_.PCI0.LPCB.EC0_.WBSS, SAV2)
        If(LEqual(Arg0, 0x3))
        {
            TRAP(0x50)
            If(LEqual(OSYS, 0x7d6))
            {
                Store(0x0, GP25)
            }
            Store(0x1, SLPE)
            Store(0x53, P80H)
        }
        If(LEqual(Arg0, 0x4))
        {
            Store(0x1, SLPE)
            Store(0x54, P80H)
        }
        If(LEqual(Arg0, 0x5))
        {
            If(GSMI)
            {
                Store(0x1, SLPE)
            }
            Else
            {
                Store(0x0, SLPE)
            }
        }
    }
    Method(_WAK, 0x1, NotSerialized)
    {
        P8XH(0x0, 0xab)
        If(LOr(LEqual(Arg0, 0x3), LEqual(Arg0, 0x4)))
        {
            If(And(CFGD, 0x1000000))
            {
                If(LAnd(And(CFGD, 0xf0), LEqual(OSYS, 0x7d1)))
                {
                    TRAP(0x3d)
                }
            }
        }
        If(LEqual(RP2D, 0x0))
        {
            Notify(\_SB_.PCI0.RP02, 0x0)
        }
        If(LEqual(Arg0, 0x3))
        {
            TRAP(0x46)
        }
        If(LEqual(Arg0, 0x4))
        {
            Store(0x4, P80H)
            If(DTSE)
            {
                TRAP(0x47)
            }
            Notify(\_TZ_.THR1, 0x80)
            TRAP(0x1d)
        }
        If(LEqual(OSYS, 0x7d2))
        {
            If(And(CFGD, 0x1))
            {
                If(LGreater(\_PR_.CPU0._PPC, 0x0))
                {
                    Subtract(\_PR_.CPU0._PPC, 0x1, \_PR_.CPU0._PPC)
                    PNOT()
                    Add(\_PR_.CPU0._PPC, 0x1, \_PR_.CPU0._PPC)
                    PNOT()
                }
                Else
                {
                    Add(\_PR_.CPU0._PPC, 0x1, \_PR_.CPU0._PPC)
                    PNOT()
                    Subtract(\_PR_.CPU0._PPC, 0x1, \_PR_.CPU0._PPC)
                    PNOT()
                }
            }
        }
        If(LNot(LEqual(\_SB_.PCI0.LPCB.EC0_.WBSS, SAV2)))
        {
            Store(0x1, \_SB_.PCI0.LPCB.EC0_.WBDS)
            Store(0x96, \_SB_.PCI0.LPCB.EC0_.DLYT)
        }
        Else
        {
            Store(SAV0, GP25)
            Store(SAV1, GP26)
        }
        Store(\_SB_.PCI0.LPCB.EC0_.QBBB, Local0)
        If(LEqual(Local0, 0x4))
        {
            Notify(\_SB_.QBTN, 0x2)
        }
        If(LEqual(Local0, 0x5))
        {
            Notify(\_SB_.DBTN, 0x2)
        }
        If(LEqual(Local0, 0x3))
        {
            Notify(\_SB_.MBTN, 0x2)
        }
        If(LEqual(Local0, 0x10))
        {
            Notify(\_SB_.EBTN, 0x2)
        }
        If(LEqual(Local0, 0x6))
        {
            Notify(\_SB_.PBTN, 0x2)
        }
        If(LEqual(Local0, 0x12))
        {
            Notify(\_SB_.VBTN, 0x2)
        }
        If(LEqual(Local0, 0x11))
        {
            Notify(\_SB_.TBTN, 0x2)
        }
        P8XH(0x1, 0xcd)
        Return(Package(0x2)
        {
            0x0,
            0x0
        })
    }
    Scope(\_GPE)
    {
        Method(_L01, 0x0, NotSerialized)
        {
            Add(L01C, 0x1, L01C)
            P8XH(0x0, 0x1)
            P8XH(0x1, L01C)
            Sleep(0x64)
            If(LAnd(LEqual(RP2D, 0x0), \_SB_.PCI0.RP02.HPCS))
            {
                If(\_SB_.PCI0.RP02.PDC2)
                {
                    Store(0x1, \_SB_.PCI0.RP02.PDC2)
                    Store(0x1, \_SB_.PCI0.RP02.HPCS)
                    Notify(\_SB_.PCI0.RP02, 0x0)
                }
                Else
                {
                    Store(0x1, \_SB_.PCI0.RP02.HPCS)
                }
            }
        }
        Method(_L02, 0x0, NotSerialized)
        {
            Store(0x0, GPEC)
            Notify(\_TZ_.THR1, 0x80)
        }
        Method(_L07, 0x0, NotSerialized)
        {
            Store(0x20, \_SB_.PCI0.SBUS.HSTS)
        }
        Method(_L09, 0x0, NotSerialized)
        {
            If(\_SB_.PCI0.RP02.PSP2)
            {
                Store(0x1, \_SB_.PCI0.RP02.PSP2)
                Store(0x1, \_SB_.PCI0.RP02.PMCS)
                Notify(\_SB_.PCI0.RP02, 0x2)
            }
            If(\_SB_.PCI0.RP03.PSP3)
            {
                Store(0x1, \_SB_.PCI0.RP03.PSP3)
                Store(0x1, \_SB_.PCI0.RP03.PMCS)
                Notify(\_SB_.PCI0.RP03, 0x2)
            }
        }
        Method(_L0B, 0x0, NotSerialized)
        {
            Notify(\_SB_.PCI0.PCIB, 0x2)
            Notify(\_SB_.SLPB, 0x2)
        }
        Method(_L19, 0x0, NotSerialized)
        {
            Notify(\_SB_.SLPB, 0x2)
        }
    }
    Method(VTOB, 0x1, NotSerialized)
    {
        Store(0x1, Local0)
        ShiftLeft(Local0, Arg0, Local0)
        Return(Local0)
    }
    Method(BTOV, 0x1, NotSerialized)
    {
        ShiftRight(Arg0, 0x1, Local0)
        Store(0x0, Local1)
        While(Local0)
        {
            Increment(Local1)
            ShiftRight(Local0, 0x1, Local0)
        }
        Return(Local1)
    }
    Method(MKWD, 0x2, NotSerialized)
    {
        If(And(Arg1, 0x80))
        {
            Store(0xffff0000, Local0)
        }
        Else
        {
            Store(Zero, Local0)
        }
        Or(Local0, Arg0, Local0)
        Or(Local0, ShiftLeft(Arg1, 0x8), Local0)
        Return(Local0)
    }
    Method(POSW, 0x1, NotSerialized)
    {
        If(And(Arg0, 0x8000))
        {
            If(LEqual(Arg0, 0xffff))
            {
                Return(0xffffffff)
            }
            Else
            {
                Not(Arg0, Local0)
                Increment(Local0)
                And(Local0, 0xffff, Local0)
                Return(Local0)
            }
        }
        Else
        {
            Return(Arg0)
        }
    }
    Method(GBFE, 0x3, NotSerialized)
    {
        CreateByteField(Arg0, Arg1, TIDX)
        Store(TIDX, Arg2)
    }
    Method(PBFE, 0x3, NotSerialized)
    {
        CreateByteField(Arg0, Arg1, TIDX)
        Store(Arg2, TIDX)
    }
    Method(ITOS, 0x1, NotSerialized)
    {
        Store(Buffer(0x9)
        {
    0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
        }, Local0)
        Store(Buffer(0x11)
        {
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42,
    0x43, 0x44, 0x45, 0x46, 0x00
        }, Local7)
        Store(0x8, Local1)
        Store(0x0, Local2)
        Store(0x0, Local3)
        While(Local1)
        {
            Decrement(Local1)
            And(ShiftRight(Arg0, ShiftLeft(Local1, 0x2)), 0xf, Local4)
            If(Local4)
            {
                Store(Ones, Local3)
            }
            If(Local3)
            {
                GBFE(Local7, Local4, RefOf(Local5))
                PBFE(Local0, Local2, Local5)
                Increment(Local2)
            }
        }
        Return(Local0)
    }
    Method(GETB, 0x3, Serialized)
    {
        Multiply(Arg0, 0x8, Local0)
        Multiply(Arg1, 0x8, Local1)
        CreateField(Arg2, Local0, Local1, TBF3)
        Return(TBF3)
    }
    Method(HKDS, 0x1, Serialized)
    {
        If(LEqual(0x0, DSEN))
        {
            Store(Arg0, SMIF)
            Store(0x0, TRP0)
            If(LOr(LNot(LEqual(CADL, PADL)), LEqual(NSTE, 0x1)))
            {
                Store(CADL, PADL)
                If(LOr(LGreater(OSYS, 0x7d0), LLess(OSYS, 0x7d6)))
                {
                    Notify(\_SB_.PCI0, 0x0)
                }
                Else
                {
                    Notify(\_SB_.PCI0.GFX0, 0x0)
                }
                Sleep(0x2ee)
            }
            Notify(\_SB_.PCI0.GFX0, 0x80)
        }
        If(LEqual(0x1, DSEN))
        {
            If(LEqual(TRAP(Increment(Arg0)), 0x0))
            {
                Notify(\_SB_.PCI0.GFX0, 0x81)
            }
        }
    }
    Method(P8XH, 0x2, Serialized)
    {
        If(LEqual(Arg0, 0x0))
        {
            Store(Or(And(P80D, 0xffffff00), Arg1), P80D)
        }
        If(LEqual(Arg0, 0x1))
        {
            Store(Or(And(P80D, 0xffff00ff), ShiftLeft(Arg1, 0x8)), P80D)
        }
        If(LEqual(Arg0, 0x2))
        {
            Store(Or(And(P80D, 0xff00ffff), ShiftLeft(Arg1, 0x10)), P80D)
        }
        If(LEqual(Arg0, 0x3))
        {
            Store(Or(And(P80D, 0xffffff), ShiftLeft(Arg1, 0x18)), P80D)
        }
        Store(P80D, P80H)
    }
    Method(PNOT, 0x0, Serialized)
    {
        If(MPEN)
        {
            If(And(PDC0, 0x8))
            {
                Notify(\_PR_.CPU0, 0x80)
                If(And(PDC0, 0x10))
                {
                    Sleep(0x64)
                    Notify(\_PR_.CPU0, 0x81)
                }
            }
            If(And(PDC1, 0x8))
            {
                Notify(\_PR_.CPU1, 0x80)
                If(And(PDC1, 0x10))
                {
                    Sleep(0x64)
                    Notify(\_PR_.CPU1, 0x81)
                }
            }
        }
        Else
        {
            Notify(\_PR_.CPU0, 0x80)
            Sleep(0x64)
            Notify(\_PR_.CPU0, 0x81)
        }
    }
    Method(TRAP, 0x1, Serialized)
    {
        Store(Arg0, SMIF)
        Store(0x0, TRP0)
        Return(SMIF)
    }
    Method(GETP, 0x1, Serialized)
    {
        If(LEqual(And(Arg0, 0x9), 0x0))
        {
            Return(0xffffffff)
        }
        If(LEqual(And(Arg0, 0x9), 0x8))
        {
            Return(0x384)
        }
        ShiftRight(And(Arg0, 0x300), 0x8, Local0)
        ShiftRight(And(Arg0, 0x3000), 0xc, Local1)
        Return(Multiply(0x1e, Subtract(0x9, Add(Local0, Local1))))
    }
    Method(GDMA, 0x5, Serialized)
    {
        If(Arg0)
        {
            If(LAnd(Arg1, Arg4))
            {
                Return(0x14)
            }
            If(LAnd(Arg2, Arg4))
            {
                Return(Multiply(Subtract(0x4, Arg3), 0xf))
            }
            Return(Multiply(Subtract(0x4, Arg3), 0x1e))
        }
        Return(0xffffffff)
    }
    Method(GETT, 0x1, Serialized)
    {
        Return(Multiply(0x1e, Subtract(0x9, Add(And(ShiftRight(Arg0, 0x2), 0x3), And(Arg0, 0x3)))))
    }
    Method(GETF, 0x3, Serialized)
    {
        Name(TMPF, 0x0)
        If(Arg0)
        {
            Or(TMPF, 0x1, TMPF)
        }
        If(And(Arg2, 0x2))
        {
            Or(TMPF, 0x2, TMPF)
        }
        If(Arg1)
        {
            Or(TMPF, 0x4, TMPF)
        }
        If(And(Arg2, 0x20))
        {
            Or(TMPF, 0x8, TMPF)
        }
        If(And(Arg2, 0x4000))
        {
            Or(TMPF, 0x10, TMPF)
        }
        Return(TMPF)
    }
    Method(SETP, 0x3, Serialized)
    {
        If(LGreater(Arg0, 0xf0))
        {
            Return(0x8)
        }
        Else
        {
            If(And(Arg1, 0x2))
            {
                If(LAnd(LNot(LGreater(Arg0, 0x78)), And(Arg2, 0x2)))
                {
                    Return(0x2301)
                }
                If(LAnd(LNot(LGreater(Arg0, 0xb4)), And(Arg2, 0x1)))
                {
                    Return(0x2101)
                }
            }
            Return(0x1001)
        }
    }
    Method(SDMA, 0x1, Serialized)
    {
        If(LNot(LGreater(Arg0, 0x14)))
        {
            Return(0x1)
        }
        If(LNot(LGreater(Arg0, 0x1e)))
        {
            Return(0x2)
        }
        If(LNot(LGreater(Arg0, 0x2d)))
        {
            Return(0x1)
        }
        If(LNot(LGreater(Arg0, 0x3c)))
        {
            Return(0x2)
        }
        If(LNot(LGreater(Arg0, 0x5a)))
        {
            Return(0x1)
        }
        Return(0x0)
    }
    Method(SETT, 0x3, Serialized)
    {
        If(And(Arg1, 0x2))
        {
            If(LAnd(LNot(LGreater(Arg0, 0x78)), And(Arg2, 0x2)))
            {
                Return(0xb)
            }
            If(LAnd(LNot(LGreater(Arg0, 0xb4)), And(Arg2, 0x1)))
            {
                Return(0x9)
            }
        }
        Return(0x4)
    }
    Scope(\_TZ_)
    {
        Name(TPC_, 0x78) //120C Critical level
        Name(TP85, 0x6e) //110C Critical level
        Name(TPTM, 0x4b) //75C Passive level
        Name(TPAS, 0x5c) //92C Warning level
        Name(TA85, 0x50) //80C Warning level
        Name(DS01, 0x0)
        Name(DS02, 0x0)
        Name(DSA1, 0x0)
        Name(DSA2, 0x0)
        Name(TADJ, 0x1A) // 26C Temp Adjustment
        ThermalZone(THR1)
        {
            Method(_TMP, 0x0, NotSerialized) // Current temp
            {
                If(ECON) // Embedded Controller Active Cooling Enabled
                {
                    //Adjust CPU0 to increase fan speed
                    Store(DTS1, DS01)
                    // If less than Critical level
                    If(LLess(DS01, TP85))
                    {
                        Store(Add(DS01,TADJ), DSA1)
                        If(LGreater(DSA1, TP85))
                        {
                            Store(TP85, DSA1) //Never adjust higher than TP85
                        }
                    }
                    Else
                    {
                        Store(DS01, DSA1)
                    }
                    Store(DSA1, \_SB_.PCI0.LPCB.EC0_.ECT1)
                    //---------------------------------
                    //Adjust CPU1 to increase fan speed
                    Store(DTS2, DS02)
                    // If less than Critical level
                    If(LLess(DS01, TP85))
                    {
                        Store(Add(DS02,TADJ), DSA2)
                        If(LGreater(DSA2, TP85))
                        {
                            Store(TP85, DSA2) //Never adjust higher than TP85
                        }
                    }
                    Else
                    {
                        Store(DS02, DSA2)
                    }
                    Store(DSA2, \_SB_.PCI0.LPCB.EC0_.ECT2)
                    //---------------------------------
                    //Use highest CPU temprature
                    Store("Current temp is: ", Debug)
                    //If CPU0 greater then CPU1
                    If(LGreater(DSA1, DSA2))
                    {
                        Store(DSA1, Debug)
                        Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DSA1, 0xa)))
                    }
                    Else
                    {
                        Store(DSA2, Debug)
                        Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DSA2, 0xa)))
                    }
                }
                Else // Passive Cooling Enabled
                {
                    Return(Add(0xaac, Multiply(TPTM, 0xa)))
                }
            }
            Method(_CRT, 0x0, NotSerialized) // Critical level
            {
                If(LEqual(\_SB_.TJ85, 0x0))
                {
                    Return(Add(0xaac, Multiply(TPC_, 0xa)))
                }
                Else
                {
                    Return(Add(0xaac, Multiply(TP85, 0xa)))
                }
            }
            Method(_PSL, 0x0, NotSerialized) //list of passive cooling device objects
            {
                If(MPEN)
                {
                    Return(Package(0x2)
                    {
                        \_PR_.CPU0,
                        \_PR_.CPU1
                    })
                }
                Return(Package(0x1)
                {
                    \_PR_.CPU0
                })
            }
            Method(_PSV, 0x0, NotSerialized) // Warning level
            {
                If(LEqual(\_SB_.TJ85, 0x0))
                {
                    Return(Add(0xaac, Multiply(TPAS, 0xa)))
                }
                Else
                {
                    Return(Add(0xaac, Multiply(TA85, 0xa)))
                }
            }
            Method(_TC1, 0x0, NotSerialized) // Passive cooling constant
            {
                Return(0x2)
            }
            Method(_TC2, 0x0, NotSerialized) // Passive cooling constant
            {
                Return(0x3)
            }
            Method(_TSP, 0x0, NotSerialized) // Passive cooling sample period
            {
                Return(0x32) // 5 sec
            }
        }
    }
    Scope(\_SB_)
    {
        Name(WIRE, 0x0)
        Device(MCFG)
        {
            Name(_HID, 0x20cd041)
            Name(_CRS, Buffer(0x1c)
            {
    0x87, 0x17, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xe0, 0xff, 0xff, 0xff, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x10, 0x79, 0x00
            })
        }
        Device(QBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x1)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x4))
                {
                    Notify(\_SB_.QBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x01
                })
            }
        }
        Device(DBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x2)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x5))
                {
                    Notify(\_SB_.DBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x02
                })
            }
        }
        Device(MBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x3)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x3))
                {
                    Notify(\_SB_.MBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x03
                })
            }
        }
        Device(EBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x4)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x10))
                {
                    Notify(\_SB_.EBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x04
                })
            }
        }
        Device(PBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x6)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x6))
                {
                    Notify(\_SB_.PBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x06
                })
            }
        }
        Device(VBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x7)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x12))
                {
                    Notify(\_SB_.VBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x07
                })
            }
        }
        Device(TBTN)
        {
            Name(_HID, 0x320cd041)
            Name(_UID, 0x8)
            Method(_STA, 0x0, NotSerialized)
            {
                If(LEqual(OSYS, 0x7d6))
                {
                    Return(0xf)
                }
                Else
                {
                    Return(0x0)
                }
            }
            Method(GHID, 0x0, NotSerialized)
            {
                If(LEqual(IVIM, 0x11))
                {
                    Notify(\_SB_.TBTN, 0x2)
                }
                Return(Buffer(0x1)
                {
    0x08
                })
            }
        }
        Device(PWRB)
        {
            Name(_HID, 0xc0cd041)
        }
        Device(SLPB)
        {
            Name(_HID, 0xe0cd041)
        }
        Device(ACAD)
        {
            Name(_HID, "ACPI0003")
            Name(_PCL, Package(0x1)
            {
                \_SB_
            })
            Name(ACWT, 0x0)
            Method(_PSR, 0x0, NotSerialized)
            {
                Store(\_SB_.ACST, ACWT)
                If(ECON)
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.SW2S, \_SB_.ACST)
                    Store(\_SB_.ACST, ACPS)
                }
                Else
                {
                    Store(0x1, \_SB_.ACST)
                    Store(\_SB_.ACST, ACPS)
                }
                If(LNot(LEqual(ACWT, \_SB_.ACST)))
                {
                    TRAP(0x16)
                    Sleep(0x32)
                }
                Return(\_SB_.ACST)
            }
        }
        Method(VTOB, 0x1, NotSerialized)
        {
            Store(0x1, Local0)
            ShiftLeft(Local0, Arg0, Local0)
            Return(Local0)
        }
        Method(BTOV, 0x1, NotSerialized)
        {
            ShiftRight(Arg0, 0x1, Local0)
            Store(0x0, Local1)
            While(Local0)
            {
                Increment(Local1)
                ShiftRight(Local0, 0x1, Local0)
            }
            Return(Local1)
        }
        Method(MKWD, 0x2, NotSerialized)
        {
            If(And(Arg1, 0x80))
            {
                Store(0xffff0000, Local0)
            }
            Else
            {
                Store(Zero, Local0)
            }
            Or(Local0, Arg0, Local0)
            Or(Local0, ShiftLeft(Arg1, 0x8), Local0)
            Return(Local0)
        }
        Method(POSW, 0x1, NotSerialized)
        {
            If(And(Arg0, 0x8000))
            {
                If(LEqual(Arg0, 0xffff))
                {
                    Return(0xffffffff)
                }
                Else
                {
                    Not(Arg0, Local0)
                    Increment(Local0)
                    And(Local0, 0xffff, Local0)
                    Return(Local0)
                }
            }
            Else
            {
                Return(Arg0)
            }
        }
        Method(GBFE, 0x3, NotSerialized)
        {
            CreateByteField(Arg0, Arg1, TIDX)
            Store(TIDX, Arg2)
        }
        Method(PBFE, 0x3, NotSerialized)
        {
            CreateByteField(Arg0, Arg1, TIDX)
            Store(Arg2, TIDX)
        }
        Method(ITOS, 0x1, NotSerialized)
        {
            Store(Buffer(0x5)
            {
    0x20, 0x20, 0x20, 0x20, 0x20
            }, Local0)
            Store(Buffer(0x11)
            {
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42,
    0x43, 0x44, 0x45, 0x46, 0x00
            }, Local7)
            Store(0x5, Local1)
            Store(0x0, Local2)
            Store(0x0, Local3)
            While(Local1)
            {
                Decrement(Local1)
                And(ShiftRight(Arg0, ShiftLeft(Local1, 0x2)), 0xf, Local4)
                GBFE(Local7, Local4, RefOf(Local5))
                PBFE(Local0, Local2, Local5)
                Increment(Local2)
            }
            Return(Local0)
        }
        Device(BAT0)
        {
            Name(_HID, 0xa0cd041)
            Name(_PCL, Package(0x1)
            {
                \_SB_
            })
            Name(PBIF, Package(0xd)
            {
                0x1,
                0xffffffff,
                0xffffffff,
                0x1,
                0xffffffff,
                0xfa,
                0x96,
                0xa,
                0x19,
                "BAT1",
                " ",
                " ",
                " "
            })
            Name(PBST, Package(0x4)
            {
                0x0,
                0xffffffff,
                0xffffffff,
                0x2710
            })
            Name(BAST, 0x0)
            Name(B1ST, 0xf)
            Name(B1WT, 0x0)
            Method(_STA, 0x0, NotSerialized)
            {
                If(ECON)
                {
                    If(\_SB_.PCI0.LPCB.EC0_.MBTS)
                    {
                        Store(0x1f, B1ST)
                        Store(\_SB_.PCI0.LPCB.EC0_.BA1C, BCAP)
                    }
                    Else
                    {
                        Store(0xf, B1ST)
                        Store(0xff, BCAP)
                    }
                }
                Else
                {
                    Store(0xf, B1ST)
                }
                Return(B1ST)
            }
            Method(_BIF, 0x0, NotSerialized)
            {
                If(ECON)
                {
                    If(\_SB_.PCI0.LPCB.EC0_.MBTS)
                    {
                        UPBI()
                    }
                    Else
                    {
                        IVBI()
                    }
                }
                Else
                {
                    IVBI()
                }
                Return(PBIF)
            }
            Method(_BST, 0x0, NotSerialized)
            {
                If(ECON)
                {
                    If(\_SB_.PCI0.LPCB.EC0_.MBTS)
                    {
                        UPBS()
                    }
                    Else
                    {
                        IVBS()
                    }
                }
                Else
                {
                    IVBS()
                }
                Return(PBST)
            }
            Method(UPBI, 0x0, NotSerialized)
            {
                If(LNot(\_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x10, RefOf(Local5))))
                {
                    If(LAnd(Local5, LNot(And(Local5, 0x8000))))
                    {
                        ShiftRight(Local5, 0x5, Local5)
                        ShiftLeft(Local5, 0x5, Local5)
                        Store(Local5, Index(PBIF, 0x2))
                        Divide(Local5, 0x64, , Local2)
                        Add(Local2, 0x1, Local2)
                        Multiply(Local2, 0x5, Local4)
                        Add(Local4, 0x2, Index(PBIF, 0x5))
                        Multiply(Local2, 0x3, Local4)
                        Add(Local4, 0x2, Index(PBIF, 0x6))
                    }
                }
                If(\_SB_.PCI0.LPCB.EC0_.MBNH)
                {
                    Store(0x2328, Index(PBIF, 0x1))
                    Store(0x1c20, Index(PBIF, 0x4))
                    Store("OANI$", Index(PBIF, 0x9))
                    Store("NiMH", Index(PBIF, 0xb))
                }
                Else
                {
                    Store(0x1770, Index(PBIF, 0x1))
                    Store(0x39d0, Index(PBIF, 0x4))
                    Sleep(0x32)
                    Store("LION", Index(PBIF, 0xb))
                }
                Store("Primary", Index(PBIF, 0x9))
                UPUM()
                Store(0x1, Index(PBIF, 0x0))
            }
            Method(UPUM, 0x0, NotSerialized)
            {
                Store(Buffer(0xa)
                {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                }, Local0)
                Store(Buffer(0x5)
                {
    0x36, 0x35, 0x35, 0x33, 0x35
                }, Local6)
                Store(Buffer(0x5)
                {
    0x31, 0x32, 0x33, 0x32, 0x31
                }, Local7)
                Store("Hewlett-Packard", Index(PBIF, 0xc))
            }
            Method(UPBS, 0x0, NotSerialized)
            {
                Store(\_SB_.PCI0.LPCB.EC0_.MBRM, Local5)
                If(LNot(And(Local5, 0x8000)))
                {
                    ShiftRight(Local5, 0x5, Local5)
                    ShiftLeft(Local5, 0x5, Local5)
                    If(LNot(LEqual(Local5, DerefOf(Index(PBST, 0x2)))))
                    {
                        Store(Local5, Index(PBST, 0x2))
                    }
                }
                Store(\_SB_.PCI0.LPCB.EC0_.MBCV, Index(PBST, 0x3))
                Store(\_SB_.PCI0.LPCB.EC0_.MBST, Index(PBST, 0x0))
                Store(\_SB_.PCI0.LPCB.EC0_.BA1C, BCAP)
            }
            Method(IVBI, 0x0, NotSerialized)
            {
                Store(0xffffffff, Index(PBIF, 0x1))
                Store(0xffffffff, Index(PBIF, 0x2))
                Store(0xffffffff, Index(PBIF, 0x4))
                Store("Bad", Index(PBIF, 0x9))
                Store("      ", Index(PBIF, 0xa))
                Store("Bad", Index(PBIF, 0xb))
                Store("Bad", Index(PBIF, 0xc))
            }
            Method(IVBS, 0x0, NotSerialized)
            {
                Store(0x0, Index(PBST, 0x0))
                Store(0xffffffff, Index(PBST, 0x1))
                Store(0xffffffff, Index(PBST, 0x2))
                Store(0x2710, Index(PBST, 0x3))
                Store(0xff, BCAP)
            }
        }
        OperationRegion(EXCO, SystemIO, 0x72, 0x2)
        Field(EXCO, ByteAcc, NoLock, Preserve)
        {
            INDX, 8,
            DATA, 8
        }
        IndexField(INDX, DATA, ByteAcc, NoLock, Preserve)
        {
            Offset(0x30),
            BTWL, 2,
            BTLS, 1,
            BWLS, 1,
            WWLS, 1,
            , 3,
            WLSU, 1,
            BTSU, 1,
            , 2,
            ACST, 1,
            PAID, 1,
            CHPD, 2,
            Offset(0x67),
            , 2,
            PFID, 3,
            TJ85, 1,
            , 2,
            CMPE, 8,
            , 1,
            PTPE, 2
        }
        Device(LID_)
        {
            Name(_HID, 0xd0cd041)
            Name(LSTS, 0x0)
            Method(_LID, 0x0, NotSerialized)
            {
                If(ECON)
                {
                    If(\_SB_.PCI0.LPCB.EC0_.LIDS)
                    {
                        Store(Zero, LSTS)
                    }
                    Else
                    {
                        Store(One, LSTS)
                    }
                }
                Else
                {
                    Store(One, LSTS)
                }
                Return(LSTS)
            }
        }
        Device(WMID)
        {
            Name(Z00C, Package(0xe)
            {
                0x4,
                0x4,
                0x4,
                0x0,
                0x4,
                0x4,
                0x0,
                0x0,
                0x4,
                0x4,
                0xc,
                0x0,
                0x0,
                0x0
            })
            Method(Z00D, 0x2, NotSerialized)
            {
                CreateDWordField(Arg1, 0x0, Z00E)
                CreateDWordField(Arg1, 0x4, Z00F)
                CreateDWordField(Arg1, 0x8, Z00G)
                CreateDWordField(Arg1, 0xc, Z00H)
                If(LEqual(Arg0, 0x1))
                {
                    Store(0x0, Local0)
                }
                If(LEqual(Arg0, 0x2))
                {
                    Store(0x4, Local0)
                }
                If(LEqual(Arg0, 0x3))
                {
                    Store(0x80, Local0)
                }
                If(LEqual(Arg0, 0x4))
                {
                    Store(0x400, Local0)
                }
                If(LEqual(Arg0, 0x5))
                {
                    Store(0x1000, Local0)
                }
                Store(Buffer(Add(0x8, Local0))
                {
                }, Local1)
                CreateDWordField(Local1, 0x0, Z00I)
                CreateDWordField(Local1, 0x4, Z00J)
                Store(0x4c494146, Z00I)
                Store(0x2, Z00J)
                If(LEqual(Z00E, 0x55434553))
                {
                    Store(0x3, Z00J)
                    BreakPoint
                    If(LEqual(Z00F, 0x1))
                    {
                        Store(0x4, Z00J)
                        If(LEqual(Z00G, 0x5))
                        {
                            Store(^Z00K(), Local2)
                            Store(0x0, Z00J)
                        }
                        If(LEqual(Z00G, 0xe))
                        {
                            Store(^Z00L(), Local2)
                            Store(0x0, Z00J)
                        }
                        If(LEqual(Z00G, 0x7))
                        {
                            If(Z00H)
                            {
                                Store(DerefOf(Index(Arg1, 0x10)), Local3)
                                Store(^Z00M(Local3), Local2)
                                Store(0x0, Z00J)
                            }
                            Else
                            {
                                Store(0x5, Z00J)
                            }
                        }
                        If(LEqual(Z00G, 0x1))
                        {
                            Store(^Z00N(), Local2)
                            Store(0x0, Z00J)
                        }
                        If(LEqual(Z00G, 0x8))
                        {
                            Store(^Z00O(), Local2)
                            Store(0x0, Z00J)
                        }
                        If(LEqual(Z00G, 0x9))
                        {
                            Store(^Z00P(), Local2)
                            Store(0x0, Z00J)
                        }
                        If(LEqual(Z00G, 0xa))
                        {
                            Store(^Z00Q(), Local2)
                            Store(0x0, Z00J)
                        }
                        If(LEqual(Z00G, 0xc))
                        {
                            Store(^Z00R(), Local2)
                            Store(0x0, Z00J)
                        }
                    }
                    If(LEqual(Z00F, 0x2))
                    {
                        Store(0x4, Z00J)
                        If(LAnd(LGreater(Z00G, 0x0), LNot(LGreater(Z00G, 0xc))))
                        {
                            If(LLess(Z00H, DerefOf(Index(Z00C, Subtract(Z00G, 0x1)))))
                            {
                                Store(0x5, Z00J)
                            }
                            Else
                            {
                                CreateDWordField(Arg1, 0x10, Z00S)
                                If(LEqual(Z00G, 0x5))
                                {
                                    Store(^Z00T(Z00S), Local2)
                                    Store(0x0, Z00J)
                                }
                                If(LEqual(Z00G, 0x1))
                                {
                                    Store(^Z00U(Z00S), Local2)
                                    Store(0x0, Z00J)
                                }
                                If(LEqual(Z00G, 0x9))
                                {
                                    Store(^Z00V(Z00S), Local2)
                                    Store(0x0, Z00J)
                                }
                                If(LEqual(Z00G, 0xa))
                                {
                                    Store(^Z00W(Z00S), Local2)
                                    Store(0x0, Z00J)
                                }
                            }
                        }
                    }
                }
                If(LEqual(Z00J, 0x0))
                {
                    Store(DerefOf(Index(Local2, 0x0)), Z00J)
                    If(LEqual(Z00J, 0x0))
                    {
                        If(LNot(LGreater(DerefOf(Index(Local2, 0x1)), Local0)))
                        {
                            Store(0x0, Local0)
                            While(LLess(Local0, DerefOf(Index(Local2, 0x1))))
                            {
                                Store(DerefOf(Index(DerefOf(Index(Local2, 0x2)), Local0)), Index(Local1, Add(Local0, 0x8)))
                                Increment(Local0)
                            }
                            Store(0x53534150, Z00I)
                        }
                        Else
                        {
                            Store(0x5, Z00J)
                        }
                    }
                }
                Return(Local1)
            }
            Name(_HID, "PNP0C14")
            Name(_UID, 0x0)
            Name(Z00X, 0x0)
            Name(Z00Y, 0x0)
            Name(BUFF, Buffer(0x4)
            {
    0x00, 0x00, 0x00, 0x00
            })
            CreateByteField(BUFF, 0x0, OB0_)
            CreateByteField(BUFF, 0x1, OB1_)
            CreateByteField(BUFF, 0x2, OB2_)
            CreateByteField(BUFF, 0x3, OB3_)
            Name(_WDG, Buffer(0x50)
            {
    0x34, 0xf0, 0xb7, 0x5f, 0x63, 0x2c, 0xe9, 0x45, 0xbe, 0x91, 0x3d, 0x44,
    0xe2, 0xc7, 0x07, 0xe4, 0x41, 0x44, 0x01, 0x02, 0x79, 0x42, 0xf2, 0x95,
    0x7b, 0x4d, 0x34, 0x43, 0x93, 0x87, 0xac, 0xcd, 0xc6, 0x7e, 0xf6, 0x1c,
    0x80, 0x00, 0x01, 0x08, 0x21, 0x12, 0x90, 0x05, 0x66, 0xd5, 0xd1, 0x11,
    0xb2, 0xf0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0x41, 0x45, 0x01, 0x00,
    0xd4, 0x2b, 0x99, 0xd0, 0x7c, 0xa4, 0xfe, 0x4e, 0xb0, 0x72, 0x32, 0x4a,
    0xec, 0x92, 0x29, 0x6c, 0x42, 0x43, 0x01, 0x00
            })
            Method(WQBC, 0x1, NotSerialized)
            {
                Store("HP WMI WQBC)", Debug)
                TRAP(0x17)
                Store(WMIA, Local0)
                If(ECON)
                {
                    If(LEqual(\_SB_.PCI0.LPCB.EC0_.LIDS, 0x1))
                    {
                        And(Local0, 0xfe, Local0)
                    }
                }
                Return(Local0)
            }
            Method(WMAD, 0x3, NotSerialized)
            {
                Return(Z00D(Arg1, Arg2))
            }
            Method(Z00K, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0x5 (BIOS Read)", Debug)
                Store(0x1, \_SB_.WIRE)
                And(\_SB_.BTWL, 0x3, Local0)
                Or(Local0, 0x20, OB0_)
                Store(\_SB_.WWLS, Local1)
                ShiftLeft(Local1, 0x1, Local1)
                Store(\_SB_.BWLS, Local2)
                ShiftLeft(Local2, 0x1, Local2)
                Store(\_SB_.BTLS, Local3)
                ShiftLeft(Local3, 0x3, Local3)
                Or(Local1, Local3, Local1)
                Or(Local2, Local3, Local2)
                If(GP26)
                {
                    If(LNot(\_SB_.WWLS))
                    {
                        Store(0x0, GP26)
                    }
                    If(LNot(\_SB_.BTLS))
                    {
                        Store(0x0, GP26)
                    }
                }
                If(GP25)
                {
                    If(LNot(\_SB_.BWLS))
                    {
                        Store(0x0, GP25)
                    }
                    If(LNot(\_SB_.BTLS))
                    {
                        Store(0x0, GP25)
                    }
                }
                Or(GP26, Local1, Local1)
                Or(GP25, Local2, Local2)
                Store(0x0, OB2_)
                Store(0x0, OB1_)
                If(\_SB_.WLSU)
                {
                    Or(Local1, 0x4, Local1)
                }
                If(\_SB_.BTSU)
                {
                    Or(Local2, 0x4, Local2)
                }
                If(GP26)
                {
                    Or(Local1, 0x10, Local1)
                }
                Else
                {
                    And(Local1, 0xef, Local1)
                }
                If(And(\_SB_.BTWL, 0x1))
                {
                    Store(Local1, OB1_)
                }
                If(And(\_SB_.BTWL, 0x2))
                {
                    Store(Local2, OB2_)
                }
                Store(0x0, OB3_)
                Store(Package(0x3)
                {
                    0x0,
                    0x4,
                    Buffer(0x4)
                    {
    0x01, 0x02, 0x03, 0x04
                    }
                }, Local0)
                Store(OB0_, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                Store(OB1_, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                Store(OB2_, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                Store(OB3_, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                Return(Local0)
            }
            Method(Z00T, 0x1, NotSerialized)
            {
                Store("HP WMI Command 0x5 (BIOS Write)", Debug)
                If(And(\_SB_.BTWL, 0x3))
                {
                    If(And(Arg0, 0x800))
                    {
                        If(And(Arg0, 0x8))
                        {
                            Store(0x1, \_SB_.WWLS)
                            Store(0x1, \_SB_.BWLS)
                            If(\_SB_.WLSU)
                            {
                                If(\_SB_.BTLS)
                                {
                                    Store(0x1, GP26)
                                }
                            }
                            Else
                            {
                                Store(0x0, GP26)
                            }
                            If(\_SB_.BTSU)
                            {
                                If(\_SB_.BTLS)
                                {
                                    Store(0x1, GP25)
                                }
                            }
                            Else
                            {
                                Store(0x0, GP25)
                            }
                        }
                        Else
                        {
                            Store(0x0, \_SB_.WWLS)
                            Store(0x0, GP26)
                            Store(0x0, \_SB_.BWLS)
                            Store(0x0, GP25)
                        }
                    }
                    If(And(Arg0, 0x100))
                    {
                        If(And(Arg0, 0x1))
                        {
                            Store(0x1, \_SB_.WWLS)
                            If(\_SB_.WLSU)
                            {
                                If(\_SB_.BTLS)
                                {
                                    Store(0x1, GP26)
                                }
                            }
                            Else
                            {
                                Store(0x0, GP26)
                            }
                        }
                        Else
                        {
                            Store(0x0, \_SB_.WWLS)
                            Store(0x0, GP26)
                        }
                    }
                    If(And(Arg0, 0x200))
                    {
                        If(And(Arg0, 0x2))
                        {
                            Store(0x1, \_SB_.BWLS)
                            If(\_SB_.BTSU)
                            {
                                If(\_SB_.BTLS)
                                {
                                    Store(0x1, GP25)
                                }
                            }
                            Else
                            {
                                Store(0x0, GP25)
                            }
                        }
                        Else
                        {
                            Store(0x0, \_SB_.BWLS)
                            Store(0x0, GP25)
                        }
                    }
                    Return(Package(0x2)
                    {
                        0x0,
                        0x0
                    })
                }
                Else
                {
                    Return(Package(0x2)
                    {
                        0xd,
                        0x0
                    })
                }
            }
            Method(Z00L, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0xE (BIOS Read)", Debug)
                Store(0x0, Local0)
                Store(Buffer(0xa)
                {
    0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                }, Local2)
                TRAP(0x1a)
                If(LNot(LEqual(Z000, 0xff)))
                {
                    Store(Z000, Index(Local2, 0x2))
                    Store(Z001, Index(Local2, 0x3))
                    Store(Z002, Index(Local2, 0x4))
                    Store(Z003, Index(Local2, 0x5))
                    Store(Z004, Index(Local2, 0x6))
                    Store(Z005, Index(Local2, 0x7))
                    Store(Z006, Index(Local2, 0x8))
                    Store(Z007, Index(Local2, 0x9))
                    Store(Local2, Local1)
                    Add(Local0, 0xa, Local0)
                }
                Store(Package(0x3)
                {
                }, Local2)
                Store(0x0, Index(Local2, 0x0))
                Store(Local0, Index(Local2, 0x1))
                Store(Local1, Index(Local2, 0x2))
                Return(Local2)
            }
            Method(Z00M, 0x1, NotSerialized)
            {
                Store("HP WMI Command 0x7 (BIOS Read)", Debug)
                Acquire(\_SB_.PCI0.LPCB.EC0_.MUT0, 0xffff)
                If(LNot(ECON))
                {
                    Store(Package(0x2)
                    {
                        0xd,
                        0x0
                    }, Local0)
                    Sleep(0x96)
                    Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                    Return(Local0)
                }
                If(Arg0)
                {
                    Store(Package(0x2)
                    {
                        0x6,
                        0x0
                    }, Local0)
                    Sleep(0x96)
                    Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                    Return(Local0)
                }
                If(LNot(\_SB_.PCI0.LPCB.EC0_.MBTS))
                {
                    Store(Package(0x2)
                    {
                        0x6,
                        0x0
                    }, Local0)
                    Sleep(0x96)
                    Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                    Return(Local0)
                }
                Store(Package(0x3)
                {
                    0x0,
                    0x80,
                    Buffer(0x80)
                    {
                    }
                }, Local0)
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x18, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x10, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0xf, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x5))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x4))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0xc, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x7))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x6))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x17, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x9))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x8))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x8, RefOf(Local1))
                Subtract(Local1, 0xaaa, Local1)
                Divide(Local1, 0xa, Local2, Local1)
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0xb))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0xa))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x9, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0xd))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0xc))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0xa, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0xf))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0xe))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x19, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x11))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x10))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x16, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x13))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x12))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x3f, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x15))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x14))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x3e, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x17))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x16))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x3d, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x19))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x18))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x3c, RefOf(Local1))
                Divide(Local1, 0x100, Local2, Index(DerefOf(Index(Local0, 0x2)), 0x1b))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x1a))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x1c, RefOf(Local1))
                Store(ITOS(ToBCD(Local1)), Local3)
                Store(0x1c, Local2)
                Store(0x0, Local4)
                Store(SizeOf(Local3), Local1)
                While(Local1)
                {
                    GBFE(Local3, Local4, RefOf(Local5))
                    PBFE(DerefOf(Index(Local0, 0x2)), Local2, Local5)
                    Decrement(Local1)
                    Increment(Local2)
                    Increment(Local4)
                }
                Store(0x20, Index(DerefOf(Index(Local0, 0x2)), Local2))
                Increment(Local2)
                \_SB_.PCI0.LPCB.EC0_.SMRD(0x9, 0x16, 0x1b, RefOf(Local1))
                And(Local1, 0x1f, Local7)
                Store(ITOS(ToBCD(Local7)), Local6)
                And(Local1, 0x1e0, Local7)
                ShiftRight(Local7, 0x5, Local7)
                Store(ITOS(ToBCD(Local7)), Local5)
                ShiftRight(Local1, 0x9, Local7)
                Add(Local7, 0x7bc, Local7)
                Store(ITOS(ToBCD(Local7)), Local4)
                Store(0x2, Local1)
                Store(0x3, Local7)
                While(Local1)
                {
                    GBFE(Local5, Local7, RefOf(Local3))
                    PBFE(DerefOf(Index(Local0, 0x2)), Local2, Local3)
                    Decrement(Local1)
                    Increment(Local2)
                    Increment(Local7)
                }
                Store("/", Index(DerefOf(Index(Local0, 0x2)), Local2))
                Increment(Local2)
                Store(0x2, Local1)
                Store(0x3, Local7)
                While(Local1)
                {
                    GBFE(Local6, Local7, RefOf(Local3))
                    PBFE(DerefOf(Index(Local0, 0x2)), Local2, Local3)
                    Decrement(Local1)
                    Increment(Local2)
                    Increment(Local7)
                }
                Store("/", Index(DerefOf(Index(Local0, 0x2)), Local2))
                Increment(Local2)
                Store(0x4, Local1)
                Store(0x1, Local7)
                While(Local1)
                {
                    GBFE(Local4, Local7, RefOf(Local3))
                    PBFE(DerefOf(Index(Local0, 0x2)), Local2, Local3)
                    Decrement(Local1)
                    Increment(Local2)
                    Increment(Local7)
                }
                Store(0x0, Index(DerefOf(Index(Local0, 0x2)), Local2))
                \_SB_.PCI0.LPCB.EC0_.SMRD(0xb, 0x16, 0x20, RefOf(Local1))
                Store(SizeOf(Local1), Local3)
                Store(0x2c, Local2)
                Store(0x0, Local4)
                While(Local3)
                {
                    GBFE(Local1, Local4, RefOf(Local5))
                    PBFE(DerefOf(Index(Local0, 0x2)), Local2, Local5)
                    Decrement(Local3)
                    Increment(Local2)
                    Increment(Local4)
                }
                Store(0x0, Index(DerefOf(Index(Local0, 0x2)), Local2))
                Sleep(0x96)
                Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                Return(Local0)
            }
            Method(Z00N, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0x1 (BIOS Read)", Debug)
                Store(WQBC(0x0), OB0_)
                Or(OB0_, 0x1, OB0_)
                Store(0x0, OB1_)
                Store(0x0, OB2_)
                Store(0x0, OB3_)
                Store(Package(0x3)
                {
                    0x0,
                    0x4,
                    Buffer(0x4)
                    {
    0x01, 0x02, 0x03, 0x04
                    }
                }, Local0)
                Store(OB0_, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                Store(OB1_, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                Store(OB2_, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                Store(OB3_, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                Return(Local0)
            }
            Method(Z00U, 0x1, NotSerialized)
            {
                Store("HP WMI Command 0x1 (BIOS Write)", Debug)
                And(Arg0, 0x7, Local0)
                If(LNot(LGreater(\_SB_.PFID, 0x1)))
                {
                    If(LEqual(\_SB_.PCI0.GFX0.SWIT, 0x0))
                    {
                        Store(0x18, SMIF)
                        Store(0x0, TRP0)
                        Store(WMIO, Local1)
                        If(LEqual(Local0, Local1))
                        {
                            Return(Package(0x2)
                            {
                                0x0,
                                0x0
                            })
                        }
                        Else
                        {
                            Store(0x0, NSTE)
                            If(LEqual(Local0, 0x1))
                            {
                                Store("LCD", Debug)
                                Or(0x808, NSTE, NSTE)
                            }
                            If(LEqual(Local0, 0x2))
                            {
                                Store("CRT", Debug)
                                Or(0x101, NSTE, NSTE)
                            }
                            If(LEqual(Local0, 0x3))
                            {
                                Store("Both", Debug)
                                Or(0x909, NSTE, NSTE)
                            }
                            If(LEqual(Local0, 0x4))
                            {
                                Store("TV", Debug)
                                Or(0x202, NSTE, NSTE)
                            }
                            If(LEqual(Local0, 0x5))
                            {
                                Store("TV+LCD", Debug)
                                Or(0xa0a, NSTE, NSTE)
                            }
                            If(LEqual(Local0, 0x6))
                            {
                                Store("TV+CRT", Debug)
                                Or(0x303, NSTE, NSTE)
                            }
                            If(LEqual(Local0, 0x7))
                            {
                                Store("TV+CRT+LCD", Debug)
                                Or(0xb0b, NSTE, NSTE)
                            }
                            Store(CADL, PADL)
                            If(LNot(LLess(OSYS, 0x7d1)))
                            {
                                Notify(\_SB_.PCI0, 0x0)
                            }
                            Else
                            {
                                Notify(\_SB_.PCI0.GFX0, 0x0)
                            }
                            Sleep(0x2ee)
                            Notify(\_SB_.PCI0.GFX0, 0x80)
                            Return(Package(0x2)
                            {
                                0x0,
                                0x0
                            })
                        }
                    }
                    Else
                    {
                        Return(Package(0x2)
                        {
                            0x0,
                            0x0
                        })
                    }
                }
                Else
                {
                    TRAP(0x1b)
                    Store(Z008, Local1)
                    If(LEqual(Local0, Local1))
                    {
                        Return(Package(0x2)
                        {
                            0x0,
                            0x0
                        })
                    }
                    Else
                    {
                        If(LEqual(Local0, 0x1))
                        {
                            Store("LCD", Debug)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LEqual(Local0, 0x2))
                        {
                            Store("CRT", Debug)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LEqual(Local0, 0x3))
                        {
                            Store("Both", Debug)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LEqual(Local0, 0x4))
                        {
                            Store("TV", Debug)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LEqual(Local0, 0x5))
                        {
                            Store("LCD+TV", Debug)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LEqual(Local0, 0x6))
                        {
                            Store("CRT+TV", Debug)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LEqual(Local0, 0x7))
                        {
                            Store("LCD+CRT+TV", Debug)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.LCDA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.CRTA)
                            Store(0x1, \_SB_.PCI0.PEGP.VGA_.TV0A)
                            Store(0x0, \_SB_.PCI0.PEGP.VGA_.HDTV)
                        }
                        If(LNot(LLess(OSYS, 0x7d1)))
                        {
                            Notify(\_SB_.PCI0, 0x0)
                        }
                        Else
                        {
                            Notify(\_SB_.PCI0.PEGP.VGA_, 0x0)
                        }
                        Sleep(0x2ee)
                        Notify(\_SB_.PCI0.PEGP.VGA_, 0x80)
                        Return(Package(0x2)
                        {
                            0x0,
                            0x0
                        })
                    }
                }
            }
            Method(Z00O, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0x8 (BIOS Read)", Debug)
                Store(Package(0x3)
                {
                    0x0,
                    0x80,
                    Buffer(0x80)
                    {
    0x31, 0x01, 0x9b, 0x01, 0xff, 0x01, 0x63, 0x02, 0xae, 0x01, 0x64, 0x02,
    0x9d, 0x01, 0xb6, 0x01, 0xb7, 0x01, 0x65, 0x02, 0x66, 0x02, 0x67, 0x02,
    0x68, 0x02, 0xff, 0xff, 0xe4, 0x20, 0xe6, 0x20, 0x42, 0x21, 0x70, 0x21,
    0x00, 0x00
                    }
                }, Local0)
                Return(Local0)
            }
            Method(Z00P, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0x9 (BIOS Read)", Debug)
                Acquire(\_SB_.PCI0.LPCB.EC0_.MUT0, 0xffff)
                Store(Package(0x3)
                {
                    0x0,
                    0x4,
                    Buffer(0x4)
                    {
                    }
                }, Local0)
                Store(\_SB_.PCI0.LPCB.EC0_.Z00Z(), Index(DerefOf(Index(Local0, 0x2)), 0x0))
                Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                Return(Local0)
            }
            Method(Z00V, 0x1, NotSerialized)
            {
                Store("HP WMI Command 0x9 (BIOS Write)", Debug)
                Acquire(\_SB_.PCI0.LPCB.EC0_.MUT0, 0xffff)
                \_SB_.PCI0.LPCB.EC0_.Z010(Arg0)
                Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                Return(Package(0x2)
                {
                    0x0,
                    0x0
                })
            }
            Method(Z011, 0x0, NotSerialized)
            {
                Acquire(\_SB_.PCI0.LPCB.EC0_.MUT0, 0xffff)
                Store(Package(0x3)
                {
                    0x0,
                    0x4,
                    Buffer(0x4)
                    {
                    }
                }, Local0)
                If(ECON)
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.QBHK, Local1)
                }
                Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                If(LEqual(Local1, 0xd))
                {
                    Store("Fn+ESC Pressed", Debug)
                    Store(0x31, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x1))
                {
                    Store("Fn+F1 Pressed", Debug)
                    Store(0x9b, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x4))
                {
                    TRAP(0x19)
                    If(LEqual(EXTM, 0x0))
                    {
                        If(LEqual(EXCM, 0x0))
                        {
                            Store("Fn+F4 Pressed", Debug)
                            If(LNot(LGreater(\_SB_.PFID, 0x1)))
                            {
                                If(IGDS)
                                {
                                    Store(0x1, TLST)
                                    HKDS(0xa)
                                    \_SB_.PCI0.LPCB.EC0_.BPOL(0x3)
                                    Store(0x0, Local3)
                                    Store(0x0, Local4)
                                    Store(0x0, Local5)
                                    Store(0xae, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                                    Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                                    ShiftLeft(And(NSTE, 0x1), 0x1, Local3)
                                    ShiftLeft(And(NSTE, 0x2), 0x1, Local4)
                                    ShiftRight(And(NSTE, 0x8), 0x3, Local5)
                                    Or(Local3, Local4, Local3)
                                    Or(Local3, Local5, Local3)
                                    Store(Local3, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                                    ShiftLeft(And(CSTE, 0x1), 0x1, Local3)
                                    ShiftLeft(And(CSTE, 0x2), 0x1, Local4)
                                    ShiftRight(And(CSTE, 0x8), 0x3, Local5)
                                    Or(Local3, Local4, Local3)
                                    Or(Local3, Local5, Local3)
                                    Store(Local3, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                                }
                            }
                            Else
                            {
                                TRAP(0x1b)
                                Store(Z00A, Local3)
                                Store(And(Local3, 0x1), \_SB_.PCI0.PEGP.VGA_.LCDA)
                                Store(ShiftRight(And(Local3, 0x2), 0x1), \_SB_.PCI0.PEGP.VGA_.CRTA)
                                Store(ShiftRight(And(Local3, 0x4), 0x2), \_SB_.PCI0.PEGP.VGA_.TV0A)
                                Store(ShiftRight(And(Local3, 0x8), 0x3), \_SB_.PCI0.PEGP.VGA_.HDTV)
                                Notify(\_SB_.PCI0.PEGP.VGA_, 0x80)
                                Store(0xae, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                                Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                                Store(Z00A, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                                Store(Z008, Local5)
                                Store(Local5, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                            }
                        }
                    }
                }
                If(LEqual(Local1, 0x6))
                {
                    Store("Fn+F6 Pressed", Debug)
                    Store(0x9d, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x7))
                {
                    Store("Fn+F7 Pressed", Debug)
                    If(LEqual(OSYS, 0x7d6))
                    {
                        If(IGDS)
                        {
                            Notify(\_SB_.PCI0.GFX0.DD04, 0x87)
                        }
                        Else
                        {
                            Notify(\_SB_.PCI0.PEGP.VGA_.LCD_, 0x87)
                        }
                    }
                    Else
                    {
                        Store(0x15, SMIF)
                        Store(0x0, TRP0)
                    }
                    Sleep(0x32)
                    Store(0xb6, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x8))
                {
                    Store("Fn+F8 Pressed", Debug)
                    If(LEqual(OSYS, 0x7d6))
                    {
                        If(IGDS)
                        {
                            Notify(\_SB_.PCI0.GFX0.DD04, 0x86)
                        }
                        Else
                        {
                            Notify(\_SB_.PCI0.PEGP.VGA_.LCD_, 0x86)
                        }
                    }
                    Else
                    {
                        Store(0x14, SMIF)
                        Store(0x0, TRP0)
                    }
                    Sleep(0x32)
                    Store(0xb7, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x1, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                Return(Local0)
            }
            Method(Z00Q, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0xA (BIOS Read)", Debug)
                Return(Z011())
            }
            Method(Z00W, 0x1, NotSerialized)
            {
                Store("HP WMI Command 0xA (BIOS Write)", Debug)
                And(Arg0, 0xff, Local1)
                And(Arg0, 0xff00, Local3)
                ShiftRight(Local3, 0x8, Local2)
                Store(Package(0x3)
                {
                    0x0,
                    0x4,
                    Buffer(0x4)
                    {
                    }
                }, Local0)
                Store(Local1, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                Store(Local2, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                If(LEqual(Arg0, 0x1ae))
                {
                    If(LNot(LGreater(\_SB_.PFID, 0x1)))
                    {
                        Store(0x1, TLST)
                        HKDS(0xa)
                        ShiftLeft(And(NSTE, 0x1), 0x1, Local3)
                        ShiftLeft(And(NSTE, 0x2), 0x1, Local4)
                        ShiftRight(And(NSTE, 0x8), 0x3, Local5)
                        Or(Local3, Local4, Local3)
                        Or(Local3, Local5, Local3)
                        Store(Local3, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                        ShiftLeft(And(CSTE, 0x1), 0x1, Local3)
                        ShiftLeft(And(CSTE, 0x2), 0x1, Local4)
                        ShiftRight(And(CSTE, 0x8), 0x3, Local5)
                        Or(Local3, Local4, Local3)
                        Or(Local3, Local5, Local3)
                        Store(Local3, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                    }
                    Else
                    {
                        TRAP(0x1b)
                        Store(Z00A, Local3)
                        Store(And(Local3, 0x1), \_SB_.PCI0.PEGP.VGA_.LCDA)
                        Store(ShiftRight(And(Local3, 0x2), 0x1), \_SB_.PCI0.PEGP.VGA_.CRTA)
                        Store(ShiftRight(And(Local3, 0x4), 0x2), \_SB_.PCI0.PEGP.VGA_.TV0A)
                        Store(ShiftRight(And(Local3, 0x8), 0x3), \_SB_.PCI0.PEGP.VGA_.HDTV)
                        Notify(\_SB_.PCI0.PEGP.VGA_, 0x80)
                        Store(Z00A, Index(DerefOf(Index(Local0, 0x2)), 0x2))
                        Store(Z008, Index(DerefOf(Index(Local0, 0x2)), 0x3))
                    }
                }
                Return(Local0)
            }
            Method(Z00R, 0x0, NotSerialized)
            {
                Store("HP WMI Command 0xC (BIOS Read)", Debug)
                Acquire(\_SB_.PCI0.LPCB.EC0_.MUT0, 0xffff)
                Store(Package(0x3)
                {
                    0x0,
                    0x4,
                    Buffer(0x4)
                    {
                    }
                }, Local0)
                If(ECON)
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.QBBB, Local1)
                    Store(0x0, \_SB_.PCI0.LPCB.EC0_.QBBB)
                }
                If(LEqual(Local1, 0x3))
                {
                    Store(0xe4, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x20, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x4))
                {
                    Store(0x42, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x21, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x5))
                {
                    Store(0xe6, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x20, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                If(LEqual(Local1, 0x10))
                {
                    Store(0x70, Index(DerefOf(Index(Local0, 0x2)), 0x0))
                    Store(0x21, Index(DerefOf(Index(Local0, 0x2)), 0x1))
                }
                Release(\_SB_.PCI0.LPCB.EC0_.MUT0)
                Return(Local0)
            }
            Method(_WED, 0x1, NotSerialized)
            {
                Concatenate(Z00X, Z00Y, Local0)
                Return(Local0)
            }
            Name(WQAE, Buffer(0x8a9)
            {
    0x46, 0x4f, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x00, 0x99, 0x08, 0x00, 0x00,
    0x8a, 0x3a, 0x00, 0x00, 0x44, 0x53, 0x00, 0x01, 0x1a, 0x7d, 0xda, 0x54,
    0x98, 0x4b, 0x9c, 0x00, 0x01, 0x06, 0x18, 0x42, 0x10, 0x13, 0x10, 0x22,
    0x21, 0x04, 0x12, 0x01, 0xa1, 0xc8, 0x2c, 0x0c, 0x86, 0x10, 0x38, 0x2e,
    0x84, 0x1c, 0x40, 0x88, 0x59, 0x50, 0x08, 0x21, 0x10, 0xea, 0x4f, 0x20,
    0xbf, 0x02, 0x10, 0x3a, 0x14, 0x20, 0x53, 0x80, 0x41, 0x01, 0x4e, 0x11,
    0x44, 0xd0, 0xab, 0x00, 0x9b, 0x02, 0x4c, 0x0a, 0xb0, 0x28, 0x40, 0xbb,
    0x00, 0xcb, 0x02, 0x74, 0x0b, 0x90, 0x0e, 0x4b, 0x44, 0x82, 0xa3, 0xc4,
    0x80, 0xa3, 0x74, 0x62, 0x0b, 0x37, 0x6c, 0xf0, 0x42, 0x51, 0x34, 0x83,
    0x28, 0x09, 0x2a, 0x17, 0xe0, 0x1b, 0x41, 0xe0, 0xe5, 0x0a, 0x90, 0x3c,
    0x01, 0x69, 0x16, 0x60, 0x58, 0x80, 0x75, 0x01, 0xb2, 0x87, 0x40, 0xa5,
    0x0e, 0x01, 0x25, 0x67, 0x08, 0xa8, 0x01, 0xb4, 0x3a, 0x01, 0xe1, 0x57,
    0x3a, 0x25, 0x24, 0x41, 0x38, 0x63, 0x15, 0x8f, 0xaf, 0x59, 0x34, 0x3d,
    0x27, 0x39, 0xc7, 0x90, 0xe3, 0x71, 0xa1, 0x07, 0xc1, 0x05, 0x78, 0x18,
    0x06, 0x1d, 0xb2, 0x22, 0x6b, 0x80, 0xc1, 0x58, 0x18, 0x0b, 0x75, 0x31,
    0x6a, 0xd4, 0x48, 0xd9, 0x80, 0x0c, 0x51, 0x12, 0x1c, 0x6a, 0xd4, 0x96,
    0x28, 0xc0, 0xfc, 0x38, 0x34, 0xbb, 0xb6, 0xc7, 0x42, 0x20, 0x99, 0xb4,
    0xa1, 0xa0, 0xa4, 0x40, 0x68, 0x6c, 0x67, 0xea, 0x19, 0x45, 0x3c, 0x52,
    0xc3, 0x24, 0xf0, 0x28, 0x22, 0x1b, 0x8d, 0x43, 0x63, 0x87, 0xe1, 0x61,
    0x06, 0x3b, 0x88, 0xc3, 0x38, 0xe6, 0xc8, 0x09, 0x3c, 0xa1, 0x23, 0x3d,
    0xf2, 0xc2, 0xe6, 0x29, 0xd4, 0x18, 0xcd, 0x41, 0x11, 0xb8, 0xd0, 0x18,
    0x19, 0x10, 0xf2, 0x3c, 0x7e, 0x8d, 0xc4, 0x04, 0x76, 0x2f, 0xc0, 0x1a,
    0xa6, 0x60, 0x1b, 0x9b, 0x98, 0xfe, 0xff, 0x10, 0x47, 0x1e, 0xa3, 0xad,
    0xb9, 0x0b, 0x29, 0x4c, 0x8c, 0x28, 0xc1, 0xe2, 0x55, 0x3c, 0x0d, 0xa1,
    0x3c, 0x29, 0x84, 0x8a, 0x54, 0x19, 0x8a, 0x86, 0x1e, 0xa5, 0x42, 0x01,
    0xce, 0xe6, 0x21, 0xdc, 0x1a, 0x41, 0x85, 0x10, 0x2b, 0x52, 0xac, 0xf6,
    0x07, 0x41, 0x42, 0x2e, 0x5b, 0xc7, 0x07, 0x47, 0x1a, 0x0d, 0xea, 0x50,
    0xe0, 0xb1, 0x7b, 0xdc, 0xcf, 0x02, 0x3e, 0x08, 0x9c, 0x5b, 0x90, 0xa3,
    0x3b, 0x8b, 0x47, 0x85, 0x83, 0xf6, 0xf0, 0xd8, 0x6d, 0xc0, 0x67, 0x08,
    0x9f, 0x02, 0xf0, 0xae, 0x01, 0x35, 0xfd, 0x83, 0x67, 0x82, 0xe0, 0x50,
    0x43, 0xf4, 0xa8, 0xc3, 0x9d, 0xc0, 0x21, 0x32, 0x40, 0x4f, 0xea, 0xb8,
    0xb1, 0x83, 0x3b, 0x99, 0x83, 0x7e, 0x6f, 0x68, 0xf6, 0xc6, 0x40, 0x08,
    0x8e, 0xc7, 0x97, 0x05, 0x36, 0xe1, 0x04, 0x96, 0x3f, 0x08, 0xd4, 0xc8,
    0x0c, 0xed, 0x51, 0x9e, 0x56, 0xcc, 0x90, 0xcf, 0x0c, 0x26, 0xb0, 0x58,
    0x08, 0x29, 0x80, 0xd0, 0x78, 0xc0, 0x7f, 0x03, 0x78, 0xc0, 0xf0, 0xcd,
    0xc0, 0xf3, 0x35, 0xc1, 0xb0, 0x10, 0x32, 0xb2, 0x0a, 0x8f, 0x87, 0x8e,
    0xc2, 0xd7, 0x83, 0xc3, 0x39, 0xad, 0x78, 0x26, 0x18, 0x0e, 0x42, 0x27,
    0x09, 0x8b, 0x1a, 0x36, 0x3d, 0x39, 0xf0, 0x43, 0x03, 0xbb, 0x19, 0x9c,
    0xc1, 0x23, 0x80, 0x47, 0x72, 0x42, 0xfe, 0x98, 0x78, 0x60, 0xf0, 0x01,
    0xf1, 0xde, 0xa7, 0x4c, 0x46, 0x70, 0xa6, 0x06, 0xf4, 0x71, 0xc0, 0xff,
    0xff, 0xa1, 0xf0, 0x21, 0x7a, 0x7c, 0xa7, 0x7c, 0xbc, 0x96, 0x00, 0x21,
    0x59, 0xe3, 0x84, 0x7e, 0x87, 0xf0, 0xf1, 0xc3, 0x47, 0x16, 0x47, 0x84,
    0x90, 0x93, 0x53, 0x00, 0x1a, 0xf8, 0x74, 0xcf, 0x2e, 0xc2, 0xe9, 0x7a,
    0x52, 0x0e, 0x34, 0x0c, 0x3a, 0x4e, 0x70, 0x9c, 0x07, 0xc0, 0x31, 0x4e,
    0xf8, 0xe7, 0x02, 0xf8, 0x03, 0xe4, 0xa7, 0x8c, 0x57, 0x8c, 0x04, 0x8e,
    0x39, 0x42, 0xf4, 0xb9, 0xc6, 0x23, 0xc4, 0xc2, 0x3f, 0x55, 0x14, 0x3e,
    0x10, 0x32, 0x46, 0x70, 0x01, 0x7a, 0x8c, 0xc0, 0x37, 0xe0, 0x18, 0xd1,
    0x47, 0x09, 0xae, 0xfe, 0xa0, 0x41, 0x07, 0x88, 0xfb, 0xff, 0x0f, 0x10,
    0x3e, 0xa8, 0x07, 0x08, 0x7c, 0xa3, 0x1f, 0x3d, 0xd0, 0xe3, 0xb2, 0xe8,
    0xf3, 0x80, 0x8c, 0x9f, 0x68, 0x34, 0x2f, 0x7e, 0x3a, 0xe0, 0x87, 0x0f,
    0xf0, 0x80, 0x7a, 0x48, 0x38, 0x50, 0xcc, 0xb4, 0x39, 0xe8, 0xb3, 0xcb,
    0xa1, 0x63, 0x87, 0x0b, 0xfe, 0x13, 0x08, 0xb8, 0xe4, 0x1d, 0xc2, 0x40,
    0x31, 0x62, 0xfc, 0x39, 0xc8, 0xa7, 0x30, 0xf0, 0xff, 0xff, 0x4f, 0x61,
    0xb8, 0x11, 0xf0, 0x20, 0xaf, 0x05, 0x9f, 0xb6, 0xa8, 0x74, 0x18, 0xd4,
    0x81, 0x0b, 0x30, 0x09, 0x1a, 0xe1, 0x59, 0xa2, 0x36, 0x08, 0x01, 0xbf,
    0x4d, 0xbc, 0x6d, 0xf9, 0x16, 0x10, 0xe7, 0xc8, 0x7b, 0x3b, 0x70, 0x11,
    0x8c, 0x08, 0xa7, 0x1d, 0xca, 0x63, 0x88, 0x18, 0x23, 0xca, 0xe3, 0x96,
    0x51, 0xde, 0xb6, 0x5e, 0x00, 0xe2, 0x9d, 0xe5, 0xf3, 0x96, 0x31, 0x82,
    0x47, 0x7e, 0xe0, 0x62, 0x62, 0xdf, 0x13, 0xfa, 0xb9, 0xf9, 0xc0, 0x05,
    0x38, 0xfb, 0xff, 0x1f, 0xb8, 0x00, 0x0e, 0x05, 0x3d, 0x0c, 0xa1, 0x87,
    0xe1, 0xa9, 0x9c, 0xcb, 0x13, 0xe5, 0xa9, 0x44, 0x8c, 0x1a, 0x26, 0xea,
    0x33, 0x94, 0x2f, 0x1a, 0x3e, 0x10, 0x81, 0xef, 0xcc, 0x05, 0xfc, 0xfe,
    0xff, 0x07, 0x22, 0x38, 0x02, 0xcf, 0x34, 0xa0, 0xf4, 0x39, 0x03, 0x81,
    0x9c, 0x8a, 0x0f, 0x35, 0xc0, 0x48, 0xf4, 0xab, 0xc1, 0x27, 0x1a, 0x2a,
    0x13, 0x06, 0x75, 0xa8, 0x01, 0x4c, 0x5e, 0x61, 0x9e, 0x46, 0xcf, 0xf9,
    0x59, 0xc6, 0xa7, 0x1a, 0x1f, 0x4a, 0x8d, 0x63, 0x88, 0x97, 0x99, 0x87,
    0x1a, 0x1f, 0x0b, 0x5e, 0x49, 0x7d, 0xa8, 0x31, 0x54, 0x9c, 0x87, 0x1a,
    0x9f, 0x48, 0x03, 0x45, 0x7d, 0xb3, 0x79, 0xb6, 0x31, 0x7a, 0x7c, 0xdf,
    0x50, 0x0d, 0xf1, 0x50, 0xc3, 0x84, 0xbd, 0x23, 0xf4, 0xc1, 0xf5, 0xa1,
    0x06, 0x1c, 0xff, 0xff, 0x43, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0xa1, 0x06,
    0x70, 0x74, 0x34, 0x80, 0x73, 0x64, 0xc4, 0x1d, 0x0d, 0xc0, 0x75, 0x28,
    0x05, 0x0e, 0x47, 0x03, 0xe0, 0x71, 0x14, 0x02, 0xf3, 0x85, 0xc6, 0x47,
    0x21, 0x60, 0xf1, 0xff, 0x3f, 0x0a, 0xe1, 0x64, 0x9f, 0x83, 0x50, 0x42,
    0x8f, 0x42, 0x80, 0x54, 0xc8, 0xa7, 0x88, 0x67, 0x1f, 0x5f, 0x7e, 0x1e,
    0x08, 0x22, 0xbc, 0xe6, 0xfb, 0x14, 0xe4, 0x43, 0xbe, 0x8f, 0x42, 0x0c,
    0xc6, 0x50, 0xbe, 0x06, 0xf9, 0x28, 0xc4, 0xa0, 0x5e, 0x83, 0x7c, 0xdf,
    0x37, 0xc8, 0x91, 0x18, 0xfb, 0x99, 0xc0, 0x47, 0x21, 0x26, 0xed, 0x28,
    0x04, 0x28, 0xfc, 0xff, 0x1f, 0x85, 0x00, 0xfe, 0xff, 0xff, 0x8f, 0x42,
    0x80, 0xb3, 0x00, 0x47, 0x03, 0xd0, 0x4d, 0xeb, 0x51, 0x08, 0xbc, 0x77,
    0x96, 0xd3, 0x3e, 0x01, 0x9f, 0x85, 0x00, 0xb3, 0xff, 0xff, 0xb3, 0x10,
    0x30, 0x3b, 0x0a, 0x45, 0x3d, 0xe8, 0x57, 0xa1, 0x27, 0x80, 0x17, 0x80,
    0x18, 0x61, 0xde, 0x81, 0x5e, 0x32, 0xd9, 0x5d, 0xdc, 0x38, 0x4f, 0x2e,
    0xa7, 0x6d, 0x94, 0x97, 0x20, 0x1f, 0x28, 0x9e, 0x85, 0x0c, 0xf5, 0x2e,
    0x14, 0xf4, 0x8d, 0xdc, 0xa3, 0x8c, 0x19, 0x3f, 0xc4, 0xf3, 0x90, 0x21,
    0x9e, 0x85, 0x00, 0x76, 0xfd, 0xff, 0xcf, 0x42, 0x00, 0xff, 0xff, 0xff,
    0x47, 0x03, 0xf8, 0x2f, 0x00, 0x9f, 0x85, 0x80, 0xe7, 0x09, 0xe0, 0x41,
    0xdb, 0x67, 0x21, 0x80, 0x33, 0x87, 0xcb, 0xf3, 0x0f, 0x7a, 0x60, 0xef,
    0x11, 0x9e, 0xf5, 0x71, 0xbf, 0x5e, 0x7a, 0xe0, 0x0f, 0x05, 0xcf, 0x42,
    0x0c, 0xeb, 0x98, 0x7c, 0x16, 0x62, 0x10, 0x2f, 0x9a, 0x86, 0x78, 0xe1,
    0xf4, 0x61, 0xc0, 0xff, 0x7f, 0xbc, 0xc0, 0xaf, 0x9c, 0x06, 0x0a, 0x12,
    0xe8, 0x59, 0x08, 0x60, 0xfc, 0xff, 0xff, 0x2c, 0x04, 0x90, 0x71, 0x8d,
    0x3a, 0x0b, 0x01, 0xcb, 0x63, 0x0c, 0x3b, 0xad, 0x24, 0xf8, 0xff, 0x3f,
    0x0b, 0x01, 0x9f, 0x5c, 0x46, 0x0e, 0x42, 0x98, 0x88, 0x6f, 0x05, 0x1f,
    0x33, 0x01, 0xa5, 0xe7, 0xa0, 0x17, 0x77, 0x63, 0x04, 0x7e, 0x91, 0x78,
    0xcc, 0x64, 0x47, 0x4d, 0xc3, 0x3c, 0x0b, 0x19, 0xef, 0x30, 0xce, 0xe0,
    0x09, 0xde, 0x93, 0x7f, 0x16, 0x62, 0x60, 0xc7, 0x18, 0xec, 0x51, 0xc8,
    0xa0, 0x06, 0x8f, 0x1d, 0x22, 0x4c, 0xa0, 0x67, 0x21, 0x16, 0x6a, 0xdc,
    0x3a, 0x7f, 0xf8, 0x2c, 0x04, 0xbc, 0xff, 0xff, 0x67, 0x21, 0xc0, 0xd3,
    0x61, 0xc3, 0x67, 0x0d, 0xf0, 0x0c, 0xdf, 0xa3, 0x3a, 0x87, 0xc7, 0x63,
    0xe0, 0x92, 0x55, 0xc7, 0x09, 0x83, 0xe5, 0x5e, 0xa7, 0x6c, 0x9c, 0x61,
    0xe8, 0x20, 0xac, 0x0e, 0x48, 0xc3, 0xc1, 0xdc, 0x43, 0x0e, 0xe2, 0x7c,
    0xd8, 0x40, 0xad, 0x08, 0x4e, 0xc7, 0x24, 0x0f, 0xda, 0x5a, 0x28, 0xa4,
    0x80, 0x46, 0x03, 0x32, 0xbc, 0x33, 0x9f, 0x96, 0x28, 0x88, 0x01, 0x7d,
    0x02, 0xb2, 0x8d, 0x73, 0x00, 0x6a, 0x2f, 0x9a, 0x02, 0x39, 0xda, 0x60,
    0xf4, 0x5f, 0x16, 0xe8, 0x6c, 0x7c, 0x0d, 0xe0, 0x1a, 0x20, 0x74, 0x30,
    0x30, 0xb4, 0xd5, 0xdc, 0x62, 0x50, 0x60, 0xc6, 0x7f, 0x70, 0x31, 0x81,
    0x8f, 0x2e, 0xf8, 0xb3, 0x00, 0xee, 0xff, 0x3f, 0x5c, 0x8f, 0xf6, 0x5d,
    0xa0, 0xea, 0xc9, 0xea, 0x8a, 0x60, 0x75, 0x97, 0x17, 0x08, 0x33, 0x32,
    0x41, 0x7d, 0x07, 0x02, 0x50, 0x00, 0xf9, 0x0e, 0xe0, 0xa3, 0xd3, 0x73,
    0x00, 0x9b, 0x48, 0x88, 0x30, 0xd1, 0x8c, 0x8e, 0x98, 0x30, 0x2a, 0xfa,
    0x84, 0x29, 0x88, 0x27, 0xec, 0x58, 0x13, 0x46, 0xcf, 0xc4, 0x77, 0x1b,
    0x36, 0x62, 0x4c, 0x88, 0xdb, 0x06, 0xb4, 0x09, 0x06, 0xf5, 0x3d, 0x08,
    0xd6, 0x90, 0xf9, 0x58, 0x7c, 0x67, 0xc0, 0x4d, 0x19, 0x8c, 0x73, 0x62,
    0xd7, 0x04, 0x0b, 0x9c, 0x33, 0xc8, 0xe1, 0x31, 0xd7, 0x2f, 0x7e, 0x5b,
    0xf2, 0xe8, 0xf8, 0x41, 0xc1, 0x37, 0x1c, 0x86, 0xfd, 0x30, 0xe6, 0x19,
    0xbd, 0x8a, 0xf9, 0xe6, 0x86, 0x81, 0xf5, 0x78, 0x39, 0xac, 0xd1, 0xc2,
    0x1e, 0xda, 0xab, 0x87, 0xcf, 0x2d, 0x3e, 0x4f, 0x18, 0x23, 0xac, 0x2f,
    0x2c, 0xe0, 0x00, 0xfc, 0xff, 0xbf, 0x5a, 0xc1, 0xbe, 0x6b, 0x80, 0xe7,
    0x26, 0xe4, 0xbb, 0x06, 0xc0, 0xda, 0xff, 0xff, 0x5d, 0x03, 0xfe, 0x35,
    0xc1, 0x77, 0x0d, 0xe0, 0x3d, 0x74, 0xdf, 0x35, 0x80, 0x6b, 0xf6, 0xbb,
    0x06, 0xea, 0x18, 0x60, 0x85, 0x77, 0x0d, 0x68, 0xb7, 0xb4, 0x57, 0xb4,
    0x87, 0x2a, 0x6b, 0xba, 0x6c, 0xa0, 0xd4, 0x5c, 0x36, 0x00, 0x6d, 0xff,
    0xff, 0xcb, 0x06, 0xb0, 0x91, 0x32, 0x61, 0x54, 0xf8, 0x09, 0x53, 0x10,
    0x4f, 0xd8, 0xc1, 0x2e, 0x1b, 0xa0, 0x88, 0x71, 0xd9, 0x00, 0xfd, 0xd8,
    0x5e, 0x36, 0x80, 0xc1, 0x3d, 0x81, 0xdf, 0x36, 0x80, 0x37, 0xa4, 0x6f,
    0x1b, 0xc0, 0xf4, 0xff, 0x0f, 0x31, 0xff, 0x6d, 0x03, 0xc5, 0x61, 0x95,
    0xb7, 0x0d, 0x88, 0x87, 0x77, 0x46, 0x60, 0x55, 0xd7, 0x0d, 0x94, 0x9e,
    0xeb, 0x06, 0x40, 0x02, 0x31, 0x13, 0x46, 0xc5, 0x9f, 0x30, 0x05, 0xf1,
    0x84, 0x1d, 0xed, 0xba, 0x01, 0x8a, 0x20, 0xd7, 0x0d, 0xd0, 0xcf, 0xeb,
    0x94, 0xc1, 0xfa, 0xff, 0xbf, 0x6e, 0x60, 0x2f, 0x0a, 0x98, 0xfb, 0x06,
    0xf0, 0x86, 0xe5, 0xf7, 0x0d, 0xc0, 0xc7, 0xe5, 0x1b, 0x73, 0xdf, 0x00,
    0x6c, 0xfe, 0xff, 0xef, 0x1b, 0x00, 0x13, 0x2e, 0x0a, 0xb8, 0xfb, 0x06,
    0xf0, 0xbe, 0x48, 0xfb, 0xbe, 0x01, 0x5c, 0x83, 0x49, 0xf8, 0xff, 0xdf,
    0xf5, 0xe8, 0x0b, 0x40, 0x51, 0x60, 0x50, 0x43, 0xf2, 0x99, 0x00, 0x3f,
    0xba, 0x83, 0x3b, 0xa6, 0xe0, 0x4c, 0x12, 0x1c, 0x6a, 0xe0, 0xbe, 0x02,
    0x3c, 0xcd, 0x9f, 0xd6, 0x7b, 0xbd, 0xe7, 0xf1, 0x24, 0x10, 0x92, 0x1d,
    0x61, 0x7c, 0x6c, 0x43, 0x9c, 0x0c, 0xc8, 0x41, 0xdc, 0x47, 0xf7, 0x88,
    0xef, 0xe1, 0x86, 0x49, 0xe0, 0x21, 0x33, 0x34, 0x0e, 0x8d, 0x1d, 0x86,
    0xef, 0x02, 0xc1, 0x0e, 0xe2, 0x30, 0xce, 0xd7, 0x04, 0x9e, 0xd0, 0x83,
    0xc0, 0x7b, 0xf9, 0xa3, 0x41, 0xf1, 0x77, 0x03, 0x4a, 0x60, 0xb8, 0xd0,
    0x98, 0x91, 0xfa, 0x6c, 0xff, 0x8e, 0x70, 0x24, 0x26, 0xb0, 0x7b, 0x48,
    0x59, 0x13, 0xa0, 0xf1, 0x96, 0x43, 0x20, 0x7a, 0xc3, 0x91, 0x2d, 0x14,
    0xcd, 0x2d, 0xca, 0xfb, 0x42, 0x14, 0x3b, 0x43, 0x10, 0x46, 0x94, 0x60,
    0x41, 0x9e, 0xd6, 0x62, 0x45, 0x79, 0x66, 0x37, 0x42, 0xc4, 0x10, 0xaf,
    0x0c, 0x81, 0x5e, 0x12, 0xc2, 0x07, 0x79, 0xec, 0x89, 0xd3, 0xfe, 0x20,
    0x88, 0xf8, 0x17, 0x82, 0x3c, 0x80, 0x28, 0xd2, 0x68, 0x50, 0xe7, 0x06,
    0x8f, 0xdd, 0x87, 0x10, 0x5f, 0xfe, 0x7d, 0xb8, 0xf7, 0xe8, 0x0e, 0xee,
    0x45, 0xfe, 0xa0, 0x3d, 0x3c, 0x76, 0xc2, 0xf0, 0x41, 0x03, 0x8e, 0x6b,
    0x40, 0x4d, 0xff, 0x19, 0x01, 0x2c, 0x97, 0x7f, 0xf8, 0xe3, 0xf1, 0x3d,
    0xc1, 0xf3, 0x39, 0xe1, 0x04, 0x96, 0x3f, 0x08, 0xd4, 0x71, 0x84, 0xcf,
    0xf3, 0x85, 0xc3, 0x90, 0xcf, 0x02, 0x87, 0xc5, 0xc4, 0x0a, 0xf8, 0xff,
    0x9f, 0x4c, 0xd8, 0x78, 0xc0, 0x7f, 0x0f, 0x79, 0xfd, 0xf7, 0xcd, 0xc0,
    0xf3, 0x35, 0xc1, 0x88, 0x10, 0x72, 0x32, 0x1e, 0x34, 0xe8, 0xd9, 0xf8,
    0x80, 0xe1, 0xeb, 0x09, 0x3b, 0x77, 0x70, 0x51, 0xe7, 0x0e, 0xd4, 0xd1,
    0xc1, 0xa7, 0x06, 0x76, 0xb3, 0xc1, 0x1c, 0xb7, 0xf9, 0x59, 0x03, 0xfc,
    0x23, 0x84, 0x7f, 0x7b, 0xf0, 0xbc, 0x7c, 0x65, 0x78, 0x75, 0x48, 0xe0,
    0x90, 0x23, 0x44, 0x8f, 0xcb, 0x23, 0xc4, 0x9c, 0x6f, 0x30, 0x43, 0x04,
    0xd7, 0x59, 0x00, 0x1c, 0x43, 0x04, 0x3e, 0x67, 0x4c, 0x9f, 0x71, 0x60,
    0xfe, 0xff, 0xcf, 0x38, 0xec, 0xd2, 0xc3, 0x07, 0x6a, 0x78, 0x13, 0xf8,
    0xfe, 0x8c, 0x3b, 0xd2, 0x18, 0x9c, 0x1f, 0x33, 0x1e, 0x76, 0x18, 0xf8,
    0xfb, 0x8e, 0x67, 0x70, 0x34, 0x3e, 0xa0, 0x18, 0x21, 0xf8, 0x73, 0xc9,
    0x73, 0x8a, 0x35, 0x0f, 0x52, 0x33, 0x7a, 0x67, 0x38, 0x04, 0x76, 0xb3,
    0xc2, 0x1d, 0x38, 0x3c, 0x04, 0x3e, 0x80, 0x56, 0x27, 0x47, 0x4e, 0x3f,
    0xa7, 0x84, 0x1b, 0x3e, 0xbf, 0x0a, 0x60, 0x0e, 0x41, 0x38, 0x85, 0x36,
    0x7d, 0x6a, 0x34, 0x6a, 0xd5, 0xa0, 0x4c, 0x8d, 0x32, 0x0d, 0x6a, 0xf5,
    0xa9, 0xd4, 0x98, 0xb1, 0x0b, 0x8b, 0x03, 0xbe, 0x02, 0x74, 0x1c, 0xb0,
    0x3c, 0x0a, 0x1d, 0xc1, 0xc8, 0x9b, 0x40, 0x20, 0x0e, 0x0b, 0x42, 0x23,
    0xbd, 0x71, 0x04, 0x62, 0xc9, 0xef, 0x2f, 0x81, 0x58, 0xee, 0x03, 0x45,
    0x20, 0x0e, 0x68, 0x02, 0x9c, 0xaa, 0x00, 0xa7, 0xaf, 0x01, 0x81, 0x38,
    0x32, 0x08, 0x15, 0xfa, 0x35, 0x13, 0x88, 0x63, 0x82, 0xd0, 0x50, 0x3e,
    0x40, 0x98, 0xf4, 0x17, 0x80, 0x00, 0x89, 0x11, 0x10, 0x16, 0xee, 0xe5,
    0x20, 0x10, 0x4b, 0x7b, 0x2d, 0x08, 0xc4, 0x42, 0xac, 0x80, 0xb0, 0xb8,
    0x20, 0x34, 0x9c, 0x16, 0x10, 0x26, 0xc9, 0x0c, 0x08, 0x0b, 0x04, 0x42,
    0xe5, 0x3f, 0xd3, 0x04, 0x62, 0x91, 0x6e, 0x00, 0xe9, 0xba, 0x05, 0xe2,
    0x20, 0x7a, 0x40, 0x98, 0x0c, 0x3f, 0x20, 0x2c, 0x34, 0x08, 0x8d, 0xf6,
    0x6c, 0x10, 0x20, 0x31, 0x04, 0xc2, 0xe2, 0x3b, 0x02, 0x61, 0xe2, 0xdf,
    0x44, 0x02, 0x71, 0x4a, 0x4b, 0x10, 0x37, 0xa5, 0x01, 0x06, 0x11, 0x90,
    0x93, 0x6a, 0x02, 0x62, 0xb9, 0x41, 0x34, 0x24, 0xf2, 0xb0, 0x10, 0x90,
    0x93, 0x82, 0x68, 0xc0, 0xc4, 0x14, 0x90, 0xff, 0xff, 0x43, 0x13, 0x88,
    0x80, 0x9c, 0xca, 0x15, 0x10, 0x8b, 0x08, 0x22, 0x20, 0x27, 0x7b, 0x52,
    0x09, 0xc8, 0x39, 0x41, 0x74, 0x04, 0x20, 0xba, 0x80, 0x58, 0x3e, 0x10,
    0x01, 0x39, 0x96, 0x2f, 0x20, 0x16, 0x12, 0x44, 0x40, 0x4e, 0xf4, 0xf3,
    0x09, 0x44, 0xe2, 0x81, 0x68, 0x10, 0xe4, 0x3f, 0x21, 0x20, 0x67, 0x04,
    0x11, 0x10, 0x79, 0x12, 0x05, 0x21, 0x9a, 0x3e, 0x62, 0x02, 0x71, 0x6a,
    0x10, 0x9a, 0xec, 0x27, 0x14, 0x84, 0xfc, 0xff, 0x01
            })
        }
        Device(PCI0)
        {
            Method(_INI, 0x0, NotSerialized)
            {
                If(DTSE)
                {
                    TRAP(0x47)
                }
                Store(0x7d0, OSYS)
                If(CondRefOf(_OSI, Local0))
                {
                    If(\_OSI("Linux"))
                    {
                        Store(0x1, LINX)
                    }
                    If(\_OSI("Windows 2001"))
                    {
                        Store(0x7d1, OSYS)
                    }
                    If(\_OSI("Windows 2001 SP1"))
                    {
                        Store(0x7d1, OSYS)
                    }
                    If(\_OSI("Windows 2001 SP2"))
                    {
                        Store(0x7d2, OSYS)
                    }
                    If(\_OSI("Windows 2006"))
                    {
                        Store(0x7d6, OSYS)
                    }
                    If(\_OSI("Windows 2009"))
                    {
                        Store(0x7d9, OSYS)
                    }
                }
                If(LAnd(MPEN, LEqual(OSYS, 0x7d1)))
                {
                    TRAP(0x3d)
                }
                TRAP(0x32)
            }
            Name(SUPP, 0x0)
            Name(CTRL, 0x0)
            Method(_OSC, 0x4, NotSerialized)
            {
                If (LEqual (Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766")))
                {
                    CreateDWordField(Arg3, 0x0, CDW1)
                    CreateDWordField(Arg3, 0x4, CDW2)
                    CreateDWordField(Arg3, 0x8, CDW3)
                    Store(CDW2, SUPP)
                    Store(CDW3, CTRL)
                    If(LNot(LEqual(And(SUPP, 0x16), 0x16)))
                    {
                        And(CTRL, 0x1e)
                    }
                    And(CTRL, 0x1d, CTRL)
                    If(Not(And(CDW1, 0x1)))
                    {
                        If(And(CTRL, 0x1))
                        {
                            Store(0x0, \_SB_.PCI0.RP02.HPCE)
                            Store(0x1, \_SB_.PCI0.RP02.HPCS)
                        }
                        If(And(CTRL, 0x4))
                        {
                            Store(0x0, \_SB_.PCI0.RP02.PMCE)
                            Store(0x1, \_SB_.PCI0.RP02.PMCS)
                        }
                    }
                    If(LNot(LEqual(Arg1, One)))
                    {
                        Or(CDW1, 0x8, CDW1)
                    }
                    If(LNot(LEqual(CDW3, CTRL)))
                    {
                        Or(CDW1, 0x10, CDW1)
                    }
                    Store(CTRL, CDW3)
                    Return(Arg3)
                }
                Else
                {
                    Or(CDW1, 0x4, CDW1)
                    Return(Arg3)
                }
            }
            Name(_HID, 0x80ad041)
            Name(_CID, 0x30ad041)
            Name(_ADR, 0x0)
            Name(_BBN, 0x0)
            OperationRegion(HBUS, PCI_Config, 0x40, 0xc0)
            Field(HBUS, DWordAcc, NoLock, Preserve)
            {
                Offset(0x50),
                , 4,
                PM0H, 2,
                , 2,
                PM1L, 2,
                , 2,
                PM1H, 2,
                , 2,
                PM2L, 2,
                , 2,
                PM2H, 2,
                , 2,
                PM3L, 2,
                , 2,
                PM3H, 2,
                , 2,
                PM4L, 2,
                , 2,
                PM4H, 2,
                , 2,
                PM5L, 2,
                , 2,
                PM5H, 2,
                , 2,
                PM6L, 2,
                , 2,
                PM6H, 2,
                , 2,
                , 7,
                HENA, 1,
                , 32,
                , 3,
                TOUD, 5
            }
            Name(BUF0, Buffer(0x1ee)
            {
    0x88, 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
    0x00, 0x00, 0x00, 0x01, 0x87, 0x17, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x0c, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00, 0x47, 0x01, 0xf8, 0x0c, 0xf8, 0x0c,
    0x01, 0x08, 0x87, 0x17, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xf3, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xff, 0x3f, 0x0c, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
    0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0c, 0x00, 0xff, 0x7f,
    0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
    0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x00,
    0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
    0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
    0x0c, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
    0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x0d, 0x00, 0xff, 0x3f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0xff, 0x7f, 0x0d, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x00, 0xff, 0xbf, 0x0d, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
    0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0d, 0x00, 0xff, 0xff,
    0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
    0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
    0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
    0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
    0x0e, 0x00, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
    0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x80, 0x0e, 0x00, 0xff, 0xbf, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
    0x00, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xff, 0xff, 0x0f, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x87, 0x17, 0x00, 0x00,
    0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
    0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x17,
    0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xfe,
    0xff, 0x4f, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x79, 0x00
            })
            Method(_CRS, 0x0, Serialized)
            {
                If(PM1L)
                {
                    CreateDWordField(BUF0, 0x7c, C0LN)
                    Store(Zero, C0LN)
                }
                If(LEqual(PM1L, 0x1))
                {
                    CreateBitField(BUF0, 0x358, C0RW)
                    Store(Zero, C0RW)
                }
                If(PM1H)
                {
                    CreateDWordField(BUF0, 0x96, C4LN)
                    Store(Zero, C4LN)
                }
                If(LEqual(PM1H, 0x1))
                {
                    CreateBitField(BUF0, 0x428, C4RW)
                    Store(Zero, C4RW)
                }
                If(PM2L)
                {
                    CreateDWordField(BUF0, 0xb0, C8LN)
                    Store(Zero, C8LN)
                }
                If(LEqual(PM2L, 0x1))
                {
                    CreateBitField(BUF0, 0x4f8, C8RW)
                    Store(Zero, C8RW)
                }
                If(PM2H)
                {
                    CreateDWordField(BUF0, 0xca, CCLN)
                    Store(Zero, CCLN)
                }
                If(LEqual(PM2H, 0x1))
                {
                    CreateBitField(BUF0, 0x5c8, CCRW)
                    Store(Zero, CCRW)
                }
                If(PM3L)
                {
                    CreateDWordField(BUF0, 0xe4, D0LN)
                    Store(Zero, D0LN)
                }
                If(LEqual(PM3L, 0x1))
                {
                    CreateBitField(BUF0, 0x698, D0RW)
                    Store(Zero, D0RW)
                }
                If(PM3H)
                {
                    CreateDWordField(BUF0, 0xfe, D4LN)
                    Store(Zero, D4LN)
                }
                If(LEqual(PM3H, 0x1))
                {
                    CreateBitField(BUF0, 0x768, D4RW)
                    Store(Zero, D4RW)
                }
                If(PM4L)
                {
                    CreateDWordField(BUF0, 0x118, D8LN)
                    Store(Zero, D8LN)
                }
                If(LEqual(PM4L, 0x1))
                {
                    CreateBitField(BUF0, 0x838, D8RW)
                    Store(Zero, D8RW)
                }
                If(PM4H)
                {
                    CreateDWordField(BUF0, 0x132, DCLN)
                    Store(Zero, DCLN)
                }
                If(LEqual(PM4H, 0x1))
                {
                    CreateBitField(BUF0, 0x908, DCRW)
                    Store(Zero, DCRW)
                }
                If(PM5L)
                {
                    CreateDWordField(BUF0, 0x14c, E0LN)
                    Store(Zero, E0LN)
                }
                If(LEqual(PM5L, 0x1))
                {
                    CreateBitField(BUF0, 0x9d8, E0RW)
                    Store(Zero, E0RW)
                }
                If(PM5H)
                {
                    CreateDWordField(BUF0, 0x166, E4LN)
                    Store(Zero, E4LN)
                }
                If(LEqual(PM5H, 0x1))
                {
                    CreateBitField(BUF0, 0xaa8, E4RW)
                    Store(Zero, E4RW)
                }
                If(PM6L)
                {
                    CreateDWordField(BUF0, 0x180, E8LN)
                    Store(Zero, E8LN)
                }
                If(LEqual(PM6L, 0x1))
                {
                    CreateBitField(BUF0, 0xb78, E8RW)
                    Store(Zero, E8RW)
                }
                If(PM6H)
                {
                    CreateDWordField(BUF0, 0x19a, ECLN)
                    Store(Zero, ECLN)
                }
                If(LEqual(PM6H, 0x1))
                {
                    CreateBitField(BUF0, 0xc48, ECRW)
                    Store(Zero, ECRW)
                }
                If(PM0H)
                {
                    CreateDWordField(BUF0, 0x1b4, F0LN)
                    Store(Zero, F0LN)
                }
                If(LEqual(PM0H, 0x1))
                {
                    CreateBitField(BUF0, 0xd18, F0RW)
                    Store(Zero, F0RW)
                }
                If(TPMP)
                {
                    CreateDWordField(BUF0, 0x1e8, TPML)
                    Store(0x5000, TPML)
                }
                CreateDWordField(BUF0, 0x1c2, M1MN)
                CreateDWordField(BUF0, 0x1c6, M1MX)
                CreateDWordField(BUF0, 0x1ce, M1LN)
                ShiftLeft(TOUD, 0x1b, M1MN)
                Add(Subtract(M1MX, M1MN), 0x1, M1LN)
                Return(BUF0)
            }
            Method(_PRT, 0x0, NotSerialized)
            {
                If(GPIC)
                {
                    Return(Package(0x11)
                    {
                        Package(0x4)
                        {
                            0x1ffff,
                            0x0,
                            0x0,
                            0x10
                        },
                        Package(0x4)
                        {
                            0x2ffff,
                            0x0,
                            0x0,
                            0x10
                        },
                        Package(0x4)
                        {
                            0x7ffff,
                            0x0,
                            0x0,
                            0x10
                        },
                        Package(0x4)
                        {
                            0x1bffff,
                            0x0,
                            0x0,
                            0x16
                        },
                        Package(0x4)
                        {
                            0x1cffff,
                            0x0,
                            0x0,
                            0x11
                        },
                        Package(0x4)
                        {
                            0x1cffff,
                            0x1,
                            0x0,
                            0x10
                        },
                        Package(0x4)
                        {
                            0x1cffff,
                            0x2,
                            0x0,
                            0x12
                        },
                        Package(0x4)
                        {
                            0x1cffff,
                            0x3,
                            0x0,
                            0x13
                        },
                        Package(0x4)
                        {
                            0x1dffff,
                            0x0,
                            0x0,
                            0x17
                        },
                        Package(0x4)
                        {
                            0x1dffff,
                            0x1,
                            0x0,
                            0x13
                        },
                        Package(0x4)
                        {
                            0x1dffff,
                            0x2,
                            0x0,
                            0x12
                        },
                        Package(0x4)
                        {
                            0x1dffff,
                            0x3,
                            0x0,
                            0x10
                        },
                        Package(0x4)
                        {
                            0x1effff,
                            0x0,
                            0x0,
                            0x16
                        },
                        Package(0x4)
                        {
                            0x1effff,
                            0x1,
                            0x0,
                            0x14
                        },
                        Package(0x4)
                        {
                            0x1fffff,
                            0x0,
                            0x0,
                            0x12
                        },
                        Package(0x4)
                        {
                            0x1fffff,
                            0x1,
                            0x0,
                            0x13
                        },
                        Package(0x4)
                        {
                            0x1fffff,
                            0x3,
                            0x0,
                            0x10
                        }
                    })
                }
            }
            Device(PDRC)
            {
                Name(_HID, 0x20cd041)
                Name(_UID, 0x1)
                Name(BUF0, Buffer(0x62)
                {
    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x10,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x40, 0xd1, 0xfe, 0x00, 0x40, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x80, 0xd1, 0xfe, 0x00, 0x10, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x90, 0xd1, 0xfe, 0x00, 0x10, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0xc0, 0xd1, 0xfe, 0x00, 0x40, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0xd2, 0xfe, 0x00, 0x00, 0x02, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0xd4, 0xfe, 0x00, 0x50, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x50, 0xd4, 0xfe, 0x00, 0xb0, 0x04, 0x00,
    0x79, 0x00
                })
                Name(BUF1, Buffer(0x56)
                {
    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x10,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x40, 0xd1, 0xfe, 0x00, 0x40, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x80, 0xd1, 0xfe, 0x00, 0x10, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x90, 0xd1, 0xfe, 0x00, 0x10, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0xc0, 0xd1, 0xfe, 0x00, 0x40, 0x00, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0xd2, 0xfe, 0x00, 0x00, 0x02, 0x00,
    0x86, 0x09, 0x00, 0x01, 0x00, 0x50, 0xd4, 0xfe, 0x00, 0xb0, 0x04, 0x00,
    0x79, 0x00
                })
                Method(_CRS, 0x0, Serialized)
                {
                    If(LNot(TPMP))
                    {
                        Return(BUF0)
                    }
                    Return(BUF1)
                }
            }
            Name(BCL1, Package(0xd)
            {
                0x5f,
                0x2b,
                0x14,
                0x18,
                0x1c,
                0x20,
                0x25,
                0x2b,
                0x32,
                0x3b,
                0x45,
                0x51,
                0x5f
            })
            Name(BCL2, Package(0xd)
            {
                0x64,
                0x2e,
                0x14,
                0x19,
                0x1f,
                0x24,
                0x29,
                0x2e,
                0x34,
                0x3d,
                0x48,
                0x55,
                0x64
            })
            Method(SBCM, 0x1, NotSerialized)
            {
                Store(Arg0, \_SB_.PCI0.LPCB.EC0_.BRTL)
                Store(Arg0, Z00B)
                TRAP(0x1c)
            }
            Device(PEGP)
            {
                Name(_ADR, 0x10000)
                Method(_PRT, 0x0, NotSerialized)
                {
                    If(GPIC)
                    {
                        Return(Package(0x4)
                        {
                            Package(0x4)
                            {
                                0xffff,
                                0x0,
                                0x0,
                                0x10
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x1,
                                0x0,
                                0x11
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x2,
                                0x0,
                                0x12
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x3,
                                0x0,
                                0x13
                            }
                        })
                    }
                }
                Device(VGA_)
                {
                    Name(_ADR, 0x0)
                    Name(SWIT, 0x1)
                    Name(CRTA, 0x1)
                    Name(LCDA, 0x1)
                    Name(TV0A, 0x1)
                    Name(HDTV, 0x1)
                    Method(_STA, 0x0, NotSerialized)
                    {
                        Return(0xf)
                    }
                    Name(_PSC, 0x0)
                    Method(_PS0, 0x0, NotSerialized)
                    {
                        Store(0x0, _PSC)
                    }
                    Method(_PS3, 0x0, NotSerialized)
                    {
                        Store(0x3, _PSC)
                    }
                    Method(_DOS, 0x1, NotSerialized)
                    {
                        Store(And(Arg0, 0x3), SWIT)
                    }
                    Method(_DOD, 0x0, NotSerialized)
                    {
                        Return(Package(0x4)
                        {
                            0x10100,
                            0x10118,
                            0x10200,
                            0x10121
                        })
                    }
                    Device(CRT_)
                    {
                        Name(_ADR, 0x100)
                        Method(_DCS, 0x0, NotSerialized)
                        {
                            If(CRTA)
                            {
                                Return(0x1f)
                            }
                            Else
                            {
                                Return(0x1d)
                            }
                        }
                        Method(_DGS, 0x0, NotSerialized)
                        {
                            If(CRTA)
                            {
                                Return(0x1)
                            }
                            Else
                            {
                                Return(0x0)
                            }
                        }
                        Method(_DSS, 0x1, NotSerialized)
                        {
                        }
                    }
                    Device(TV0_)
                    {
                        Name(_ADR, 0x200)
                        Method(_DCS, 0x0, NotSerialized)
                        {
                            If(TV0A)
                            {
                                Return(0x1f)
                            }
                            Else
                            {
                                Return(0x1d)
                            }
                        }
                        Method(_DGS, 0x0, NotSerialized)
                        {
                            If(TV0A)
                            {
                                Return(0x1)
                            }
                            Else
                            {
                                Return(0x0)
                            }
                        }
                        Method(_DSS, 0x1, NotSerialized)
                        {
                        }
                    }
                    Device(LCD_)
                    {
                        Name(_ADR, 0x118)
                        Method(_DCS, 0x0, NotSerialized)
                        {
                            If(LCDA)
                            {
                                Return(0x1f)
                            }
                            Else
                            {
                                Return(0x1d)
                            }
                        }
                        Method(_DGS, 0x0, NotSerialized)
                        {
                            If(LCDA)
                            {
                                Return(0x1)
                            }
                            Else
                            {
                                Return(0x0)
                            }
                        }
                        Method(_DSS, 0x1, NotSerialized)
                        {
                        }
                        Method(_BCL, 0x0, NotSerialized)
                        {
                            If(LEqual(\_SB_.PTPE, 0x1))
                            {
                                Return(\_SB_.PCI0.BCL1)
                            }
                            Else
                            {
                                Return(\_SB_.PCI0.BCL2)
                            }
                        }
                        Method(_BCM, 0x1, NotSerialized)
                        {
                            \_SB_.PCI0.SBCM(Arg0)
                        }
                        Method(_BQC, 0x0, NotSerialized)
                        {
                            Return(\_SB_.PCI0.LPCB.EC0_.BRTL)
                        }
                    }
                    Device(HDMI)
                    {
                        Name(_ADR, 0x121)
                        Method(_DCS, 0x0, NotSerialized)
                        {
                            If(HDTV)
                            {
                                Return(0x1f)
                            }
                            Else
                            {
                                Return(0x1d)
                            }
                        }
                        Method(_DGS, 0x0, NotSerialized)
                        {
                            If(HDTV)
                            {
                                Return(0x1)
                            }
                            Else
                            {
                                Return(0x0)
                            }
                        }
                        Method(_DSS, 0x1, NotSerialized)
                        {
                        }
                    }
                }
            }
            Device(GFX0)
            {
                Name(_ADR, 0x20000)
                Name(SWIT, 0x1)
                Method(_DOS, 0x1, NotSerialized)
                {
                    Store(Arg0, SWIT)
                    Store(And(Arg0, 0x3), DSEN)
                }
                Method(_DOD, 0x0, NotSerialized)
                {
                    If(LEqual(NDID, 0x1))
                    {
                        Name(TMP1, Package(0x1)
                        {
                            0xffffffff
                        })
                        Store(Or(0x10000, DID1), Index(TMP1, 0x0))
                        Return(TMP1)
                    }
                    If(LEqual(NDID, 0x2))
                    {
                        Name(TMP2, Package(0x2)
                        {
                            0xffffffff,
                            0xffffffff
                        })
                        Store(Or(0x10000, DID1), Index(TMP2, 0x0))
                        Store(Or(0x10000, DID2), Index(TMP2, 0x1))
                        Return(TMP2)
                    }
                    If(LEqual(NDID, 0x3))
                    {
                        Name(TMP3, Package(0x3)
                        {
                            0xffffffff,
                            0xffffffff,
                            0xffffffff
                        })
                        Store(Or(0x10000, DID1), Index(TMP3, 0x0))
                        Store(Or(0x10000, DID2), Index(TMP3, 0x1))
                        Store(Or(0x10000, DID3), Index(TMP3, 0x2))
                        Return(TMP3)
                    }
                    If(LEqual(NDID, 0x4))
                    {
                        Name(TMP4, Package(0x4)
                        {
                            0xffffffff,
                            0xffffffff,
                            0xffffffff,
                            0xffffffff
                        })
                        Store(Or(0x10000, DID1), Index(TMP4, 0x0))
                        Store(Or(0x10000, DID2), Index(TMP4, 0x1))
                        Store(Or(0x10000, DID3), Index(TMP4, 0x2))
                        Store(Or(0x10000, DID4), Index(TMP4, 0x3))
                        Return(TMP4)
                    }
                    Name(TMP5, Package(0x5)
                    {
                        0xffffffff,
                        0xffffffff,
                        0xffffffff,
                        0xffffffff,
                        0xffffffff
                    })
                    Store(Or(0x10000, DID1), Index(TMP5, 0x0))
                    Store(Or(0x10000, DID2), Index(TMP5, 0x1))
                    Store(Or(0x10000, DID3), Index(TMP5, 0x2))
                    Store(Or(0x10000, DID4), Index(TMP5, 0x3))
                    Store(Or(0x10000, DID5), Index(TMP5, 0x4))
                    Return(TMP5)
                }
                Device(DD01)
                {
                    Method(_ADR, 0x0, Serialized)
                    {
                        Return(And(0xffff, DID1))
                    }
                    Method(_DCS, 0x0, NotSerialized)
                    {
                        TRAP(0x1)
                        If(And(CSTE, 0x1))
                        {
                            Return(0x1f)
                        }
                        Return(0x1d)
                    }
                    Method(_DGS, 0x0, NotSerialized)
                    {
                        If(And(NSTE, 0x1))
                        {
                            Return(0x1)
                        }
                        Return(0x0)
                    }
                    Method(_DSS, 0x1, NotSerialized)
                    {
                        If(LEqual(And(Arg0, 0xc0000000), 0xc0000000))
                        {
                            Store(NSTE, CSTE)
                        }
                    }
                }
                Device(DD02)
                {
                    Method(_ADR, 0x0, Serialized)
                    {
                        Return(And(0xffff, DID2))
                    }
                    Method(_DCS, 0x0, NotSerialized)
                    {
                        TRAP(0x1)
                        If(And(CSTE, 0x2))
                        {
                            Return(0x1f)
                        }
                        Return(0x1d)
                    }
                    Method(_DGS, 0x0, NotSerialized)
                    {
                        If(And(NSTE, 0x2))
                        {
                            Return(0x1)
                        }
                        Return(0x0)
                    }
                    Method(_DSS, 0x1, NotSerialized)
                    {
                        If(LEqual(And(Arg0, 0xc0000000), 0xc0000000))
                        {
                            Store(NSTE, CSTE)
                        }
                    }
                }
                Device(DD03)
                {
                    Method(_ADR, 0x0, Serialized)
                    {
                        Return(And(0xffff, DID3))
                    }
                    Method(_DCS, 0x0, NotSerialized)
                    {
                        TRAP(0x1)
                        If(And(CSTE, 0x4))
                        {
                            Return(0x1f)
                        }
                        Return(0x1d)
                    }
                    Method(_DGS, 0x0, NotSerialized)
                    {
                        If(And(NSTE, 0x4))
                        {
                            Return(0x1)
                        }
                        Return(0x0)
                    }
                    Method(_DSS, 0x1, NotSerialized)
                    {
                        If(LEqual(And(Arg0, 0xc0000000), 0xc0000000))
                        {
                            Store(NSTE, CSTE)
                        }
                    }
                }
                Device(DD04)
                {
                    Method(_ADR, 0x0, Serialized)
                    {
                        Return(And(0xffff, DID4))
                    }
                    Method(_DCS, 0x0, NotSerialized)
                    {
                        TRAP(0x1)
                        If(And(CSTE, 0x8))
                        {
                            Return(0x1f)
                        }
                        Return(0x1d)
                    }
                    Method(_DGS, 0x0, NotSerialized)
                    {
                        If(And(NSTE, 0x8))
                        {
                            Return(0x1)
                        }
                        Return(0x0)
                    }
                    Method(_DSS, 0x1, NotSerialized)
                    {
                        If(LEqual(And(Arg0, 0xc0000000), 0xc0000000))
                        {
                            Store(NSTE, CSTE)
                        }
                    }
                    Method(_BCL, 0x0, NotSerialized)
                    {
                        If(LEqual(\_SB_.PTPE, 0x1))
                        {
                            Return(\_SB_.PCI0.BCL1)
                        }
                        Else
                        {
                            Return(\_SB_.PCI0.BCL2)
                        }
                    }
                    Method(_BCM, 0x1, NotSerialized)
                    {
                        \_SB_.PCI0.SBCM(Arg0)
                    }
                    Method(_BQC, 0x0, NotSerialized)
                    {
                        Return(\_SB_.PCI0.LPCB.EC0_.BRTL)
                    }
                }
                Device(DD05)
                {
                    Method(_ADR, 0x0, Serialized)
                    {
                        Return(And(0xffff, DID5))
                    }
                    Method(_DCS, 0x0, NotSerialized)
                    {
                        TRAP(0x1)
                        If(And(CSTE, 0x10))
                        {
                            Return(0x1f)
                        }
                        Return(0x1d)
                    }
                    Method(_DGS, 0x0, NotSerialized)
                    {
                        If(And(NSTE, 0x10))
                        {
                            Return(0x1)
                        }
                        Return(0x0)
                    }
                    Method(_DSS, 0x1, NotSerialized)
                    {
                        If(LEqual(And(Arg0, 0xc0000000), 0xc0000000))
                        {
                            Store(NSTE, CSTE)
                        }
                    }
                }
            }
            Device(HDEF)
            {
                Name(_ADR, 0x1b0000)
            }
            Device(RP01)
            {
                Name(_ADR, 0x1c0000)
                OperationRegion(P1CS, PCI_Config, 0x40, 0x100)
                Field(P1CS, AnyAcc, NoLock, WriteAsZeros)
                {
                    Offset(0x1a),
                    ABP1, 1,
                    , 2,
                    PDC1, 1,
                    , 2,
                    PDS1, 1,
                    Offset(0x20),
                    , 16,
                    PSP1, 1,
                    Offset(0x9c),
                    , 30,
                    HPCS, 1,
                    PMCS, 1
                }
                Device(PXS1)
                {
                    Name(_ADR, 0x0)
                }
                Method(_PRT, 0x0, NotSerialized)
                {
                    If(\GPIC)
                    {
                        Return(Package(0x4)
                        {
                            Package(0x4)
                            {
                                0xffff,
                                0x0,
                                0x0,
                                0x10
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x1,
                                0x0,
                                0x11
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x2,
                                0x0,
                                0x12
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x3,
                                0x0,
                                0x13
                            }
                        })
                    }
                }
            }
            Device(RP02)
            {
                Name(_ADR, 0x1c0001)
                Name(_HPP, Package(0x4)
                {
                    0x10,
                    0x40,
                    0x1,
                    0x0
                })
                OperationRegion(P2CS, PCI_Config, 0x40, 0x100)
                Field(P2CS, AnyAcc, NoLock, WriteAsZeros)
                {
                    Offset(0x1a),
                    ABP2, 1,
                    , 2,
                    PDC2, 1,
                    , 2,
                    PDS2, 1,
                    Offset(0x20),
                    , 16,
                    PSP2, 1,
                    Offset(0x98),
                    , 30,
                    HPCE, 1,
                    PMCE, 1,
                    , 30,
                    HPCS, 1,
                    PMCS, 1
                }
                Device(PXS2)
                {
                    Name(_ADR, 0x0)
                    Method(_RMV, 0x0, NotSerialized)
                    {
                        Return(0x1)
                    }
                    Method(_STA, 0x0, NotSerialized)
                    {
                        If(\_SB_.PCI0.RP02.PDS2)
                        {
                            Return(0xf)
                        }
                        Else
                        {
                            Return(0x0)
                        }
                    }
                }
                Name(_PRW, Package(0x2)
                {
                    0x9,
                    0x3
                })
                Method(_PRT, 0x0, NotSerialized)
                {
                    If(\GPIC)
                    {
                        Return(Package(0x4)
                        {
                            Package(0x4)
                            {
                                0xffff,
                                0x0,
                                0x0,
                                0x11
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x1,
                                0x0,
                                0x12
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x2,
                                0x0,
                                0x13
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x3,
                                0x0,
                                0x10
                            }
                        })
                    }
                }
            }
            Device(RP03)
            {
                Name(_ADR, 0x1c0002)
                OperationRegion(P3CS, PCI_Config, 0x40, 0x100)
                Field(P3CS, AnyAcc, NoLock, WriteAsZeros)
                {
                    Offset(0x1a),
                    ABP3, 1,
                    , 2,
                    PDC3, 1,
                    , 2,
                    PDS3, 1,
                    Offset(0x20),
                    , 16,
                    PSP3, 1,
                    Offset(0x9c),
                    , 30,
                    HPCS, 1,
                    PMCS, 1
                }
                Device(PXS3)
                {
                    Name(_ADR, 0x0)
                    Name(_PRW, Package(0x2)
                    {
                        0x9,
                        0x4
                    })
                    Method(_STA, 0x0, NotSerialized)
                    {
                        If(\_SB_.PCI0.RP03.PDS3)
                        {
                            Return(0xf)
                        }
                        Else
                        {
                            Return(0x0)
                        }
                    }
                }
                Method(_PRT, 0x0, NotSerialized)
                {
                    If(\GPIC)
                    {
                        Return(Package(0x4)
                        {
                            Package(0x4)
                            {
                                0xffff,
                                0x0,
                                0x0,
                                0x12
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x1,
                                0x0,
                                0x13
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x2,
                                0x0,
                                0x10
                            },
                            Package(0x4)
                            {
                                0xffff,
                                0x3,
                                0x0,
                                0x11
                            }
                        })
                    }
                }
            }
            Device(USB1)
            {
                Name(_ADR, 0x1d0000)
                OperationRegion(U1CS, PCI_Config, 0xc4, 0x4)
                Field(U1CS, DWordAcc, NoLock, Preserve)
                {
                    U1EN, 2
                }
                Method(_S3D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
                Method(_S4D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
            }
            Device(USB2)
            {
                Name(_ADR, 0x1d0001)
                OperationRegion(U2CS, PCI_Config, 0xc4, 0x4)
                Field(U2CS, DWordAcc, NoLock, Preserve)
                {
                    U2EN, 2
                }
                Method(_S3D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
                Method(_S4D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
            }
            Device(USB3)
            {
                Name(_ADR, 0x1d0002)
                OperationRegion(U2CS, PCI_Config, 0xc4, 0x4)
                Field(U2CS, DWordAcc, NoLock, Preserve)
                {
                    U3EN, 2
                }
                Method(_S3D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
                Method(_S4D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
            }
            Device(USB4)
            {
                Name(_ADR, 0x1d0003)
                Device(HUB4)
                {
                    Name(_ADR, 0x0)
                    Device(EXPC)
                    {
                        Name(_ADR, 0x1)
                    }
                    Device(NEXP)
                    {
                        Name(_ADR, 0x2)
                        Name(_EJD, "_SB.PCI0.RP02.PXS2")
                    }
                }
                OperationRegion(U4CS, PCI_Config, 0xc4, 0x4)
                Field(U4CS, DWordAcc, NoLock, Preserve)
                {
                    U4EN, 2
                }
                Method(_S3D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
                Method(_S4D, 0x0, NotSerialized)
                {
                    Return(0x2)
                }
            }
            Device(USB7)
            {
                Name(_ADR, 0x1d0007)
            }
            Device(PCIB)
            {
                Name(_ADR, 0x1e0000)
                Device(LANC)
                {
                    Name(_ADR, 0x80000)
                    Name(_PRW, Package(0x2)
                    {
                        0xb,
                        0x4
                    })
                }
                Device(CARD)
                {
                    Name(_ADR, 0x90000)
                }
                Method(_PRT, 0x0, NotSerialized)
                {
                    If(GPIC)
                    {
                        Return(Package(0x6)
                        {
                            Package(0x4)
                            {
                                0x8ffff,
                                0x0,
                                0x0,
                                0x14
                            },
                            Package(0x4)
                            {
                                0x5ffff,
                                0x0,
                                0x0,
                                0x10
                            },
                            Package(0x4)
                            {
                                0x5ffff,
                                0x1,
                                0x0,
                                0x11
                            },
                            Package(0x4)
                            {
                                0x5ffff,
                                0x2,
                                0x0,
                                0x11
                            },
                            Package(0x4)
                            {
                                0x5ffff,
                                0x3,
                                0x0,
                                0x11
                            },
                            Package(0x4)
                            {
                                0x5ffff,
                                0x4,
                                0x0,
                                0x11
                            }
                        })
                    }
                }
            }
            Device(LPCB)
            {
                Name(_ADR, 0x1f0000)
                OperationRegion(LPC0, PCI_Config, 0x40, 0xc0)
                Field(LPC0, AnyAcc, NoLock, Preserve)
                {
                    Offset(0x20),
                    PARC, 8,
                    PBRC, 8,
                    PCRC, 8,
                    PDRC, 8,
                    , 32,
                    PERC, 8,
                    PFRC, 8,
                    PGRC, 8,
                    PHRC, 8,
                    Offset(0x40),
                    IOD0, 8,
                    IOD1, 8
                }
                Name(IPRA, Buffer(0x6)
                {
    0x23, 0x00, 0x08, 0x18, 0x79, 0x00
                })
                Name(IPRB, Buffer(0x6)
                {
    0x23, 0x08, 0x00, 0x18, 0x79, 0x00
                })
                Name(IPRC, Buffer(0x6)
                {
    0x23, 0x08, 0x00, 0x18, 0x79, 0x00
                })
                Name(IPRD, Buffer(0x6)
                {
    0x23, 0x10, 0x00, 0x18, 0x79, 0x00
                })
                Name(IPRE, Buffer(0x6)
                {
    0x23, 0x00, 0x04, 0x18, 0x79, 0x00
                })
                Name(IPRF, Buffer(0x6)
                {
    0x23, 0x00, 0x08, 0x18, 0x79, 0x00
                })
                Name(IPRG, Buffer(0x6)
                {
    0x23, 0x20, 0x00, 0x18, 0x79, 0x00
                })
                Name(IPRH, Buffer(0x6)
                {
    0x23, 0x80, 0x00, 0x18, 0x79, 0x00
                })
                Device(LNKA)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x1)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PARC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRA)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLA, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLA, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PARC, 0xf), IRQ0)
                        Return(RTLA)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PARC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PARC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKB)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x2)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PBRC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRB)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLB, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLB, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PBRC, 0xf), IRQ0)
                        Return(RTLB)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PBRC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PBRC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKC)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x3)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PCRC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRC)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLC, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLC, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PCRC, 0xf), IRQ0)
                        Return(RTLC)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PCRC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PCRC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKD)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x4)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PDRC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRD)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLD, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLD, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PDRC, 0xf), IRQ0)
                        Return(RTLD)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PDRC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PDRC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKE)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x5)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PERC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRE)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLE, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLE, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PERC, 0xf), IRQ0)
                        Return(RTLE)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PERC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PERC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKF)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x6)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PFRC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRF)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLF, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLF, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PFRC, 0xf), IRQ0)
                        Return(RTLF)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PFRC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PFRC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKG)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x7)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PGRC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRG)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLG, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLG, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PGRC, 0xf), IRQ0)
                        Return(RTLG)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PGRC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PGRC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(LNKH)
                {
                    Name(_HID, 0xf0cd041)
                    Name(_UID, 0x8)
                    Method(_DIS, 0x0, Serialized)
                    {
                        Store(0x80, PHRC)
                    }
                    Method(_PRS, 0x0, NotSerialized)
                    {
                        Return(IPRH)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        Name(RTLH, Buffer(0x6)
                        {
    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                        })
                        CreateWordField(RTLH, 0x1, IRQ0)
                        Store(Zero, IRQ0)
                        ShiftLeft(0x1, And(PHRC, 0xf), IRQ0)
                        Return(RTLH)
                    }
                    Method(_SRS, 0x1, Serialized)
                    {
                        CreateWordField(Arg0, 0x1, IRQ0)
                        FindSetRightBit(IRQ0, Local0)
                        Decrement(Local0)
                        Store(Local0, PHRC)
                    }
                    Method(_STA, 0x0, Serialized)
                    {
                        If(And(PHRC, 0x80))
                        {
                            Return(0x9)
                        }
                        Else
                        {
                            Return(0xb)
                        }
                    }
                }
                Device(EC0_)
                {
                    Name(_HID, 0x90cd041)
                    Name(_UID, 0x1)
                    Method(_CRS, 0x0, NotSerialized)
                    {
                        Name(BFFR, Buffer(0x12)
                        {
    0x47, 0x01, 0x62, 0x00, 0x62, 0x00, 0x00, 0x01, 0x47, 0x01, 0x66, 0x00,
    0x66, 0x00, 0x00, 0x01, 0x79, 0x00
                        })
                        Return(BFFR)
                    }
                    OperationRegion(ERAM, EmbeddedControl, 0x0, 0xff)
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        SMPR, 8,
                        SMST, 8,
                        SMAD, 8,
                        SMCM, 8,
                        SMD0, 256,
                        BCNT, 8,
                        Offset(0x40),
                        SW2S, 1,
                        Offset(0x4e),
                        LIDE, 1,
                        , 31,
                        LIDS, 1,
                        WBSS, 1,
                        Offset(0x59),
                        ECT1, 8,
                        ECT2, 8,
                        RG5B, 8,
                        Offset(0x82),
                        MBST, 8,
                        , 16,
                        MBRM, 16,
                        MBCV, 16,
                        Offset(0xa0),
                        QBHK, 8,
                        , 8,
                        QBBB, 8,
                        , 8,
                        MBTS, 1,
                        MBTF, 1,
                        , 6,
                        MBTC, 1,
                        , 2,
                        MBNH, 1,
                        , 4,
                        BA1C, 8,
                        Offset(0xcf),
                        DLYC, 8,
                        EBPL, 1,
                        Offset(0xd6),
                        DBPL, 8,
                        , 32,
                        PSKB, 1,
                        PSTP, 1,
                        PSBA, 1,
                        , 29,
                        ECBW, 1,
                        , 7,
                        DLYT, 8,
                        , 8,
                        BRTL, 8,
                        , 24,
                        SFHK, 8
                    }
                    Name(BATO, 0x0)
                    Name(BATN, 0x0)
                    Name(BATF, 0xc0)
                    Name(WBDS, 0x0)
                    Method(_REG, 0x2, NotSerialized)
                    {
                        If(LAnd(LEqual(Arg0, 0x3), LEqual(Arg1, 0x1)))
                        {
                            Store(0x1, ECON)
                        }
                    }
                    Method(BPOL, 0x1, NotSerialized)
                    {
                        Store(Arg0, DBPL)
                        Store(0x1, EBPL)
                    }
                    Method(BPOM, 0x0, NotSerialized)
                    {
                        Store(0x0, DBPL)
                        Store(0x0, EBPL)
                    }
                    Name(_GPE, 0x17)
                    Method(_Q09, 0x0, NotSerialized)
                    {
                        If(LNot(LLess(OSYS, 0x7d1)))
                        {
                            BPOM()
                            Notify(\_SB_.BAT0, 0x80)
                            Notify(\_SB_.ACAD, 0x80)
                        }
                        If(LEqual(OSYS, 0x7d0))
                        {
                            Notify(\_SB_.BAT0, 0x80)
                            Notify(\_SB_.BAT0, 0x0)
                            Notify(\_SB_.ACAD, 0x0)
                        }
                        If(WBDS)
                        {
                            If(WBSS)
                            {
                                Store(0x1, GP26)
                                Store(0x1, GP25)
                                Store(0x1, \_SB_.BTLS)
                            }
                            Else
                            {
                                Store(0x0, GP26)
                                Store(0x0, GP25)
                                Store(0x0, \_SB_.BTLS)
                            }
                            Store(0x5, \_SB_.WMID.Z00X)
                            Store(0x0, \_SB_.WMID.Z00Y)
                            Notify(\_SB_.WMID, 0x80)
                            Store(0x0, WBDS)
                        }
                    }
                    Method(_Q20, 0x0, NotSerialized)
                    {
                        GBAS()
                        If(And(0x40, BATF))
                        {
                            Notify(\_SB_.BAT0, 0x81)
                        }
                        If(And(0x2, BATF))
                        {
                            Notify(\_PR_.CPU0, 0x80)
                            Notify(\_SB_.ACAD, 0x80)
                        }
                        Notify(\_SB_.BAT0, 0x80)
                        BPOL(0x5)
                    }
                    Method(GBAS, 0x0, NotSerialized)
                    {
                        Store(0x0, BATF)
                        Store(MBTS, Local0)
                        Store(SW2S, Local1)
                        ShiftLeft(Local0, 0x6, Local0)
                        ShiftLeft(Local1, 0x1, Local1)
                        If(LNot(LEqual(And(BATO, 0x40), Local0)))
                        {
                            Or(BATF, 0x40, BATF)
                        }
                        If(LNot(LEqual(And(BATO, 0x2), Local1)))
                        {
                            Or(BATF, 0x2, BATF)
                        }
                        Store(BATF, BATO)
                    }
                    Method(_Q80, 0x0, NotSerialized)
                    {
                        Store("_Q80 : Temperature Up", Debug)
                        Notify(\_TZ_.THR1, 0x80)
                    }
                    Method(_Q81, 0x0, NotSerialized)
                    {
                        Store("_Q81 : Temperature Down", Debug)
                        Notify(\_TZ_.THR1, 0x80)
                    }
                    Name(SUDK, 0x0)
                    Method(_Q8A, 0x0, NotSerialized)
                    {
                        If(LIDE)
                        {
                            Store("_Q8A : LID Switch Event", Debug)
                            Store(0x1, LIDE)
                            Notify(\_SB_.LID_, 0x80)
                        }
                    }
                    Mutex(VGMX, 0x0)
                    Method(_Q0D, 0x0, NotSerialized)
                    {
                        Store("_Q0D : Switch Display (Fn+F4)", Debug)
                        TRAP(0x19)
                        If(LEqual(EXTM, 0x0))
                        {
                            If(LNot(LGreater(\_SB_.PFID, 0x1)))
                            {
                                If(LEqual(EXCM, 0x0))
                                {
                                    If(IGDS)
                                    {
                                        Store(0x1, TLST)
                                        HKDS(0xa)
                                        BPOL(0x3)
                                    }
                                }
                            }
                            Else
                            {
                                TRAP(0x1b)
                                Store(Z00A, Local0)
                                Store(And(Local0, 0x1), \_SB_.PCI0.PEGP.VGA_.LCDA)
                                Store(ShiftRight(And(Local0, 0x2), 0x1), \_SB_.PCI0.PEGP.VGA_.CRTA)
                                Store(ShiftRight(And(Local0, 0x4), 0x2), \_SB_.PCI0.PEGP.VGA_.TV0A)
                                Store(ShiftRight(And(Local0, 0x8), 0x3), \_SB_.PCI0.PEGP.VGA_.HDTV)
                                Notify(\_SB_.PCI0.PEGP.VGA_, 0x80)
                            }
                        }
                    }
                    Method(_Q0E, 0x0, NotSerialized)
                    {
                        Notify(\_SB_.SLPB, 0x80)
                    }
                    Method(_Q11, 0x0, NotSerialized)
                    {
                        If(LEqual(OSYS, 0x7d6))
                        {
                            If(IGDS)
                            {
                                Notify(\_SB_.PCI0.GFX0.DD04, 0x86)
                            }
                            Else
                            {
                                Notify(\_SB_.PCI0.PEGP.VGA_.LCD_, 0x86)
                            }
                        }
                        Else
                        {
                            Store(0x14, SMIF)
                            Store(0x0, TRP0)
                        }
                        Sleep(0x32)
                    }
                    Method(_Q10, 0x0, NotSerialized)
                    {
                        If(LEqual(OSYS, 0x7d6))
                        {
                            If(IGDS)
                            {
                                Notify(\_SB_.PCI0.GFX0.DD04, 0x87)
                            }
                            Else
                            {
                                Notify(\_SB_.PCI0.PEGP.VGA_.LCD_, 0x87)
                            }
                        }
                        Else
                        {
                            Store(0x15, SMIF)
                            Store(0x0, TRP0)
                        }
                        Sleep(0x32)
                    }
                    Method(_Q15, 0x0, NotSerialized)
                    {
                        Store("!!! Wireless Button pressed !!!", Debug)
                        If(\_SB_.PCI0.LPCB.EC0_.WBSS)
                        {
                            Store(0x0, BTLS)
                        }
                        Else
                        {
                            Store(0x1, BTLS)
                        }
                        If(LOr(\_SB_.BTSU, \_SB_.WLSU))
                        {
                            If(\_SB_.BTLS)
                            {
                                Store(0x0, \_SB_.BTLS)
                                Store(0x0, GP25)
                                Store(0x0, GP26)
                            }
                            Else
                            {
                                Store(0x1, \_SB_.BTLS)
                                If(\_SB_.WLSU)
                                {
                                    If(\_SB_.WIRE)
                                    {
                                        If(\_SB_.WWLS)
                                        {
                                            Store(0x1, GP26)
                                        }
                                    }
                                    Else
                                    {
                                        Store(0x1, GP26)
                                    }
                                }
                                If(\_SB_.BTSU)
                                {
                                    If(\_SB_.WIRE)
                                    {
                                        If(\_SB_.BWLS)
                                        {
                                            Store(0x1, GP25)
                                        }
                                    }
                                    Else
                                    {
                                        Store(0x1, GP25)
                                    }
                                }
                            }
                        }
                        Else
                        {
                            Store(0x0, \_SB_.BTLS)
                            Store(0x0, GP25)
                            Store(0x0, GP26)
                        }
                        Store(0x5, \_SB_.WMID.Z00X)
                        Store(0x0, \_SB_.WMID.Z00Y)
                        Notify(\_SB_.WMID, 0x80)
                    }
                    Method(_Q16, 0x0, NotSerialized)
                    {
                        Store("!!! DVD/Music Button pressed !!!", Debug)
                        If(LEqual(OSYS, 0x7d6))
                        {
                            If(ECON)
                            {
                                Store(\_SB_.PCI0.LPCB.EC0_.QBBB, Local0)
                                If(LEqual(Local0, 0x4))
                                {
                                    Notify(\_SB_.QBTN, 0x80)
                                }
                                If(LEqual(Local0, 0x5))
                                {
                                    Notify(\_SB_.DBTN, 0x80)
                                }
                                If(LEqual(Local0, 0x3))
                                {
                                    Notify(\_SB_.MBTN, 0x80)
                                }
                                If(LEqual(Local0, 0x10))
                                {
                                    Notify(\_SB_.EBTN, 0x80)
                                }
                                If(LEqual(Local0, 0x6))
                                {
                                    Notify(\_SB_.PBTN, 0x80)
                                }
                                If(LEqual(Local0, 0x12))
                                {
                                    Notify(\_SB_.VBTN, 0x80)
                                }
                                If(LEqual(Local0, 0x11))
                                {
                                    Notify(\_SB_.TBTN, 0x80)
                                }
                            }
                        }
                        Else
                        {
                            Store(0x4, \_SB_.WMID.Z00X)
                            Store(0x0, \_SB_.WMID.Z00Y)
                            Notify(\_SB_.WMID, 0x80)
                        }
                    }
                    Method(_Q8E, 0x0, NotSerialized)
                    {
                        Store("!!! CPU Throttling. !!!", Debug)
                        TRAP(0x1e)
                    }
                    Method(_Q8F, 0x0, NotSerialized)
                    {
                        Store("!!! Restore CPU Throttling to default setting. !!!", Debug)
                        TRAP(0x1f)
                    }
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        , 32,
                        SMW0, 16
                    }
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        , 32,
                        SMB0, 8
                    }
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        , 32,
                        FLD0, 64
                    }
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        , 32,
                        FLD1, 128
                    }
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        , 32,
                        FLD2, 192
                    }
                    Field(ERAM, ByteAcc, NoLock, Preserve)
                    {
                        , 32,
                        FLD3, 256
                    }
                    Mutex(MUT0, 0x0)
                    Method(SMRD, 0x4, NotSerialized)
                    {
                        If(LNot(ECON))
                        {
                            Return(0xff)
                        }
                        If(LNot(LEqual(Arg0, 0x7)))
                        {
                            If(LNot(LEqual(Arg0, 0x9)))
                            {
                                If(LNot(LEqual(Arg0, 0xb)))
                                {
                                    Return(0x19)
                                }
                            }
                        }
                        Acquire(MUT0, 0xffff)
                        Store(0x4, Local0)
                        While(LGreater(Local0, 0x1))
                        {
                            And(SMST, 0x40, SMST)
                            Store(Arg2, SMCM)
                            Store(Arg1, SMAD)
                            Store(Arg0, SMPR)
                            Store(0x0, Local3)
                            While(LNot(And(SMST, 0xbf, Local1)))
                            {
                                Sleep(0x2)
                                Increment(Local3)
                                If(LEqual(Local3, 0x32))
                                {
                                    And(SMST, 0x40, SMST)
                                    Store(Arg2, SMCM)
                                    Store(Arg1, SMAD)
                                    Store(Arg0, SMPR)
                                    Store(0x0, Local3)
                                }
                            }
                            If(LEqual(Local1, 0x80))
                            {
                                Store(0x0, Local0)
                            }
                            Else
                            {
                                Decrement(Local0)
                            }
                        }
                        If(Local0)
                        {
                            Store(And(Local1, 0x1f), Local0)
                        }
                        Else
                        {
                            If(LEqual(Arg0, 0x7))
                            {
                                Store(SMB0, Arg3)
                            }
                            If(LEqual(Arg0, 0x9))
                            {
                                Store(SMW0, Arg3)
                            }
                            If(LEqual(Arg0, 0xb))
                            {
                                Store(BCNT, Local3)
                                ShiftRight(0x100, 0x3, Local2)
                                If(LGreater(Local3, Local2))
                                {
                                    Store(Local2, Local3)
                                }
                                If(LLess(Local3, 0x9))
                                {
                                    Store(FLD0, Local2)
                                }
                                Else
                                {
                                    If(LLess(Local3, 0x11))
                                    {
                                        Store(FLD1, Local2)
                                    }
                                    Else
                                    {
                                        If(LLess(Local3, 0x19))
                                        {
                                            Store(FLD2, Local2)
                                        }
                                        Else
                                        {
                                            Store(FLD3, Local2)
                                        }
                                    }
                                }
                                Increment(Local3)
                                Store(Buffer(Local3)
                                {
                                }, Local4)
                                Decrement(Local3)
                                Store(Zero, Local5)
                                While(LGreater(Local3, Local5))
                                {
                                    GBFE(Local2, Local5, RefOf(Local6))
                                    PBFE(Local4, Local5, Local6)
                                    Increment(Local5)
                                }
                                PBFE(Local4, Local5, 0x0)
                                Store(Local4, Arg3)
                            }
                        }
                        Release(MUT0)
                        Return(Local0)
                    }
                    Method(SMWR, 0x4, NotSerialized)
                    {
                        If(LNot(ECON))
                        {
                            Return(0xff)
                        }
                        If(LNot(LEqual(Arg0, 0x6)))
                        {
                            If(LNot(LEqual(Arg0, 0x8)))
                            {
                                If(LNot(LEqual(Arg0, 0xa)))
                                {
                                    Return(0x19)
                                }
                            }
                        }
                        Acquire(MUT0, 0xffff)
                        Store(0x4, Local0)
                        While(LGreater(Local0, 0x1))
                        {
                            If(LEqual(Arg0, 0x6))
                            {
                                Store(Arg3, SMB0)
                            }
                            If(LEqual(Arg0, 0x8))
                            {
                                Store(Arg3, SMW0)
                            }
                            If(LEqual(Arg0, 0xa))
                            {
                                Store(Arg3, SMD0)
                            }
                            And(SMST, 0x40, SMST)
                            Store(Arg2, SMCM)
                            Store(Arg1, SMAD)
                            Store(Arg0, SMPR)
                            Store(0x0, Local3)
                            While(LNot(And(SMST, 0xbf, Local1)))
                            {
                                Sleep(0x2)
                                Increment(Local3)
                                If(LEqual(Local3, 0x32))
                                {
                                    And(SMST, 0x40, SMST)
                                    Store(Arg2, SMCM)
                                    Store(Arg1, SMAD)
                                    Store(Arg0, SMPR)
                                    Store(0x0, Local3)
                                }
                            }
                            If(LEqual(Local1, 0x80))
                            {
                                Store(0x0, Local0)
                            }
                            Else
                            {
                                Decrement(Local0)
                            }
                        }
                        If(Local0)
                        {
                            Store(And(Local1, 0x1f), Local0)
                        }
                        Release(MUT0)
                        Return(Local0)
                    }
                    Method(Z00Z, 0x0, Serialized)
                    {
                        If(ECON)
                        {
                            Store(SFHK, Local0)
                        }
                        Return(Local0)
                    }
                    Method(Z010, 0x1, Serialized)
                    {
                        If(ECON)
                        {
                            Store(Arg0, SFHK)
                        }
                    }
                }
                Device(DMAC)
                {
                    Name(_HID, 0x2d041)
                    Name(_CRS, Buffer(0x25)
                    {
    0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x47, 0x01, 0x81, 0x00,
    0x81, 0x00, 0x01, 0x11, 0x47, 0x01, 0x93, 0x00, 0x93, 0x00, 0x01, 0x0d,
    0x47, 0x01, 0xc0, 0x00, 0xc0, 0x00, 0x01, 0x20, 0x2a, 0x10, 0x01, 0x79,
    0x00
                    })
                }
                Device(HPET)
                {
                    Name(_HID, 0x301d041)
                    Name(_CID, 0x10cd041)
                    Name(BUF0, Buffer(0xe)
                    {
    0x86, 0x09, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xfe, 0x00, 0x04, 0x00, 0x00,
    0x79, 0x00
                    })
                    Method(_STA, 0x0, NotSerialized)
                    {
                        If(LNot(LLess(OSYS, 0x7d1)))
                        {
                            If(HPAE)
                            {
                                Return(0xf)
                            }
                        }
                        Else
                        {
                            If(HPAE)
                            {
                                Return(0xb)
                            }
                        }
                        Return(0x0)
                    }
                    Method(_CRS, 0x0, Serialized)
                    {
                        If(HPAE)
                        {
                            CreateDWordField(BUF0, 0x4, HPT0)
                            If(LEqual(HPAS, 0x1))
                            {
                                Store(0xfed01000, HPT0)
                            }
                            If(LEqual(HPAS, 0x2))
                            {
                                Store(0xfed02000, HPT0)
                            }
                            If(LEqual(HPAS, 0x3))
                            {
                                Store(0xfed03000, HPT0)
                            }
                        }
                        Return(BUF0)
                    }
                }
                Device(IPIC)
                {
                    Name(_HID, 0xd041)
                    Name(_CRS, Buffer(0x8d)
                    {
    0x47, 0x01, 0x20, 0x00, 0x20, 0x00, 0x01, 0x02, 0x47, 0x01, 0x24, 0x00,
    0x24, 0x00, 0x01, 0x02, 0x47, 0x01, 0x28, 0x00, 0x28, 0x00, 0x01, 0x02,
    0x47, 0x01, 0x2c, 0x00, 0x2c, 0x00, 0x01, 0x02, 0x47, 0x01, 0x30, 0x00,
    0x30, 0x00, 0x01, 0x02, 0x47, 0x01, 0x34, 0x00, 0x34, 0x00, 0x01, 0x02,
    0x47, 0x01, 0x38, 0x00, 0x38, 0x00, 0x01, 0x02, 0x47, 0x01, 0x3c, 0x00,
    0x3c, 0x00, 0x01, 0x02, 0x47, 0x01, 0xa0, 0x00, 0xa0, 0x00, 0x01, 0x02,
    0x47, 0x01, 0xa4, 0x00, 0xa4, 0x00, 0x01, 0x02, 0x47, 0x01, 0xa8, 0x00,
    0xa8, 0x00, 0x01, 0x02, 0x47, 0x01, 0xac, 0x00, 0xac, 0x00, 0x01, 0x02,
    0x47, 0x01, 0xb0, 0x00, 0xb0, 0x00, 0x01, 0x02, 0x47, 0x01, 0xb4, 0x00,
    0xb4, 0x00, 0x01, 0x02, 0x47, 0x01, 0xb8, 0x00, 0xb8, 0x00, 0x01, 0x02,
    0x47, 0x01, 0xbc, 0x00, 0xbc, 0x00, 0x01, 0x02, 0x47, 0x01, 0xd0, 0x04,
    0xd0, 0x04, 0x01, 0x02, 0x22, 0x04, 0x00, 0x79, 0x00
                    })
                }
                Device(MATH)
                {
                    Name(_HID, 0x40cd041)
                    Name(_CRS, Buffer(0xd)
                    {
    0x47, 0x01, 0xf0, 0x00, 0xf0, 0x00, 0x01, 0x01, 0x22, 0x00, 0x20, 0x79,
    0x00
                    })
                }
                Device(LDRC)
                {
                    Name(_HID, 0x20cd041)
                    Name(_UID, 0x2)
                    Name(_CRS, Buffer(0x7a)
                    {
    0x47, 0x01, 0x2e, 0x00, 0x2e, 0x00, 0x01, 0x02, 0x47, 0x01, 0x61, 0x00,
    0x61, 0x00, 0x01, 0x01, 0x47, 0x01, 0x63, 0x00, 0x63, 0x00, 0x01, 0x01,
    0x47, 0x01, 0x65, 0x00, 0x65, 0x00, 0x01, 0x01, 0x47, 0x01, 0x67, 0x00,
    0x67, 0x00, 0x01, 0x01, 0x47, 0x01, 0x70, 0x00, 0x70, 0x00, 0x01, 0x01,
    0x47, 0x01, 0x80, 0x00, 0x80, 0x00, 0x01, 0x01, 0x47, 0x01, 0x92, 0x00,
    0x92, 0x00, 0x01, 0x01, 0x47, 0x01, 0xb2, 0x00, 0xb2, 0x00, 0x01, 0x02,
    0x47, 0x01, 0x80, 0x03, 0x80, 0x03, 0x01, 0x04, 0x47, 0x01, 0x80, 0x06,
    0x80, 0x06, 0x01, 0x20, 0x47, 0x01, 0x00, 0x08, 0x00, 0x08, 0x01, 0x10,
    0x47, 0x01, 0x00, 0x10, 0x00, 0x10, 0x01, 0x80, 0x47, 0x01, 0x80, 0x11,
    0x80, 0x11, 0x01, 0x40, 0x47, 0x01, 0x40, 0x16, 0x40, 0x16, 0x01, 0x10,
    0x79, 0x00
                    })
                }
                Device(CDRC)
                {
                    Name(_HID, 0x20cd041)
                    Name(_UID, 0x3)
                    Name(BUF0, Buffer(0xa)
                    {
    0x47, 0x01, 0xb0, 0x06, 0xb0, 0x06, 0x01, 0x40, 0x79, 0x00
                    })
                    Name(BUF1, Buffer(0xa)
                    {
    0x47, 0x01, 0xb0, 0x06, 0xb0, 0x06, 0x01, 0x50, 0x79, 0x00
                    })
                    Name(BUF2, Buffer(0x12)
                    {
    0x47, 0x01, 0xa0, 0x06, 0xa0, 0x06, 0x01, 0x10, 0x47, 0x01, 0xb0, 0x06,
    0xb0, 0x06, 0x01, 0x40, 0x79, 0x00
                    })
                    Name(BUF3, Buffer(0x12)
                    {
    0x47, 0x01, 0xa0, 0x06, 0xa0, 0x06, 0x01, 0x10, 0x47, 0x01, 0xb0, 0x06,
    0xb0, 0x06, 0x01, 0x50, 0x79, 0x00
                    })
                    Method(_CRS, 0x0, Serialized)
                    {
                        If(EMAE)
                        {
                            If(CIRP)
                            {
                                Return(BUF0)
                            }
                            Return(BUF1)
                        }
                        Else
                        {
                            If(CIRP)
                            {
                                Return(BUF2)
                            }
                            Return(BUF3)
                        }
                    }
                }
                Device(RTC_)
                {
                    Name(_HID, 0xbd041)
                    Name(_CRS, Buffer(0xd)
                    {
    0x47, 0x01, 0x70, 0x00, 0x70, 0x00, 0x01, 0x08, 0x22, 0x00, 0x01, 0x79,
    0x00
                    })
                }
                Device(TIMR)
                {
                    Name(_HID, 0x1d041)
                    Name(_CRS, Buffer(0x15)
                    {
    0x47, 0x01, 0x40, 0x00, 0x40, 0x00, 0x01, 0x04, 0x47, 0x01, 0x50, 0x00,
    0x50, 0x00, 0x10, 0x04, 0x22, 0x01, 0x00, 0x79, 0x00
                    })
                }
                Device(QLBD)
                {
                    Name(_HID, "HPQ0006")
                    Method(_STA, 0x0, NotSerialized)
                    {
                        Return(0xf)
                    }
                }
                Device(PS2K)
                {
                    Name(_HID, 0x303d041)
                    Name(_CRS, Buffer(0x16)
                    {
    0x47, 0x01, 0x60, 0x00, 0x60, 0x00, 0x01, 0x01, 0x47, 0x01, 0x64, 0x00,
    0x64, 0x00, 0x01, 0x01, 0x23, 0x02, 0x00, 0x01, 0x79, 0x00
                    })
                    Name(_PRW, Package(0x2)
                    {
                        0x19,
                        0x3
                    })
                    Method(_PSW, 0x1, NotSerialized)
                    {
                        If(ECON)
                        {
                            Store(Arg0, \_SB_.PCI0.LPCB.EC0_.PSKB)
                        }
                    }
                }
                Device(PS2M)
                {
                    Method(_HID, 0x0, NotSerialized)
                    {
                        If(HPBD)
                        {
                            Return("*SYN012C")
                        }
                        Else
                        {
                            Return("*SYN012B")
                        }
                    }
                    Name(_CID, Package(0x3)
                    {
                        0x12e4f,
                        0x2002e4f,
                        0x130fd041
                    })
                    Name(_CRS, Buffer(0x6)
                    {
    0x23, 0x00, 0x10, 0x01, 0x79, 0x00
                    })
                    Name(_PRW, Package(0x2)
                    {
                        0x19,
                        0x3
                    })
                    Method(_PSW, 0x1, NotSerialized)
                    {
                        If(ECON)
                        {
                            Store(Arg0, \_SB_.PCI0.LPCB.EC0_.PSTP)
                        }
                    }
                }
            }
            Device(PATA)
            {
                Name(_ADR, 0x1f0001)
                OperationRegion(PACS, PCI_Config, 0x40, 0xc0)
                Field(PACS, DWordAcc, NoLock, Preserve)
                {
                    PRIT, 16,
                    , 16,
                    PSIT, 4,
                    , 28,
                    SYNC, 4,
                    , 12,
                    SDT0, 2,
                    , 2,
                    SDT1, 2,
                    Offset(0x14),
                    ICR0, 4,
                    ICR1, 4,
                    ICR2, 4,
                    ICR3, 4,
                    ICR4, 4,
                    ICR5, 4
                }
                Device(PRID)
                {
                    Name(_ADR, 0x0)
                    Method(_GTM, 0x0, NotSerialized)
                    {
                        Name(PBUF, Buffer(0x14)
                        {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                        })
                        CreateDWordField(PBUF, 0x0, PIO0)
                        CreateDWordField(PBUF, 0x4, DMA0)
                        CreateDWordField(PBUF, 0x8, PIO1)
                        CreateDWordField(PBUF, 0xc, DMA1)
                        CreateDWordField(PBUF, 0x10, FLAG)
                        Store(GETP(PRIT), PIO0)
                        Store(GDMA(And(SYNC, 0x1), And(ICR3, 0x1), And(ICR0, 0x1), SDT0, And(ICR1, 0x1)), DMA0)
                        If(LEqual(DMA0, 0xffffffff))
                        {
                            Store(PIO0, DMA0)
                        }
                        If(And(PRIT, 0x4000))
                        {
                            If(LEqual(And(PRIT, 0x90), 0x80))
                            {
                                Store(0x384, PIO1)
                            }
                            Else
                            {
                                Store(GETT(PSIT), PIO1)
                            }
                        }
                        Else
                        {
                            Store(0xffffffff, PIO1)
                        }
                        Store(GDMA(And(SYNC, 0x2), And(ICR3, 0x2), And(ICR0, 0x2), SDT1, And(ICR1, 0x2)), DMA1)
                        If(LEqual(DMA1, 0xffffffff))
                        {
                            Store(PIO1, DMA1)
                        }
                        Store(GETF(And(SYNC, 0x1), And(SYNC, 0x2), PRIT), FLAG)
                        If(And(LEqual(PIO0, 0xffffffff), LEqual(DMA0, 0xffffffff)))
                        {
                            Store(0x78, PIO0)
                            Store(0x14, DMA0)
                            Store(0x3, FLAG)
                        }
                        Return(PBUF)
                    }
                    Method(_STM, 0x3, NotSerialized)
                    {
                        CreateDWordField(Arg0, 0x0, PIO0)
                        CreateDWordField(Arg0, 0x4, DMA0)
                        CreateDWordField(Arg0, 0x8, PIO1)
                        CreateDWordField(Arg0, 0xc, DMA1)
                        CreateDWordField(Arg0, 0x10, FLAG)
                        If(LEqual(SizeOf(Arg1), 0x200))
                        {
                            And(PRIT, 0xc0f0, PRIT)
                            And(SYNC, 0x2, SYNC)
                            Store(0x0, SDT0)
                            And(ICR0, 0x2, ICR0)
                            And(ICR1, 0x2, ICR1)
                            And(ICR3, 0x2, ICR3)
                            And(ICR5, 0x2, ICR5)
                            CreateWordField(Arg1, 0x62, W490)
                            CreateWordField(Arg1, 0x6a, W530)
                            CreateWordField(Arg1, 0x7e, W630)
                            CreateWordField(Arg1, 0x80, W640)
                            CreateWordField(Arg1, 0xb0, W880)
                            CreateWordField(Arg1, 0xba, W930)
                            Or(PRIT, 0x8000, PRIT)
                            If(LAnd(And(FLAG, 0x2), And(W490, 0x800)))
                            {
                                Or(PRIT, 0x2, PRIT)
                            }
                            Or(PRIT, SETP(PIO0, W530, W640), PRIT)
                            If(And(FLAG, 0x1))
                            {
                                Or(SYNC, 0x1, SYNC)
                                Store(SDMA(DMA0), SDT0)
                                If(LLess(DMA0, 0x1e))
                                {
                                    Or(ICR3, 0x1, ICR3)
                                }
                                If(LLess(DMA0, 0x3c))
                                {
                                    Or(ICR0, 0x1, ICR0)
                                }
                                If(And(W930, 0x2000))
                                {
                                    Or(ICR1, 0x1, ICR1)
                                }
                            }
                        }
                        If(LEqual(SizeOf(Arg2), 0x200))
                        {
                            And(PRIT, 0xbf0f, PRIT)
                            Store(0x0, PSIT)
                            And(SYNC, 0x1, SYNC)
                            Store(0x0, SDT1)
                            And(ICR0, 0x1, ICR0)
                            And(ICR1, 0x1, ICR1)
                            And(ICR3, 0x1, ICR3)
                            And(ICR5, 0x1, ICR5)
                            CreateWordField(Arg2, 0x62, W491)
                            CreateWordField(Arg2, 0x6a, W531)
                            CreateWordField(Arg2, 0x7e, W631)
                            CreateWordField(Arg2, 0x80, W641)
                            CreateWordField(Arg2, 0xb0, W881)
                            CreateWordField(Arg2, 0xba, W931)
                            Or(PRIT, 0x8040, PRIT)
                            If(LAnd(And(FLAG, 0x8), And(W491, 0x800)))
                            {
                                Or(PRIT, 0x20, PRIT)
                            }
                            If(And(FLAG, 0x10))
                            {
                                Or(PRIT, 0x4000, PRIT)
                                If(LGreater(PIO1, 0xf0))
                                {
                                    Or(PRIT, 0x80, PRIT)
                                }
                                Else
                                {
                                    Or(PRIT, 0x10, PRIT)
                                    Store(SETT(PIO1, W531, W641), PSIT)
                                }
                            }
                            If(And(FLAG, 0x4))
                            {
                                Or(SYNC, 0x2, SYNC)
                                Store(SDMA(DMA1), SDT1)
                                If(LLess(DMA1, 0x1e))
                                {
                                    Or(ICR3, 0x2, ICR3)
                                }
                                If(LLess(DMA1, 0x3c))
                                {
                                    Or(ICR0, 0x2, ICR0)
                                }
                                If(And(W931, 0x2000))
                                {
                                    Or(ICR1, 0x2, ICR1)
                                }
                            }
                        }
                    }
                    Device(P_D0)
                    {
                        Name(_ADR, 0x0)
                        Method(_GTF, 0x0, NotSerialized)
                        {
                            Name(PIB0, Buffer(0xe)
                            {
    0x03, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xef, 0x03, 0x00, 0x00, 0x00, 0x00,
    0xa0, 0xef
                            })
                            CreateByteField(PIB0, 0x1, PMD0)
                            CreateByteField(PIB0, 0x8, DMD0)
                            If(And(PRIT, 0x2))
                            {
                                If(LEqual(And(PRIT, 0x9), 0x8))
                                {
                                    Store(0x8, PMD0)
                                }
                                Else
                                {
                                    Store(0xa, PMD0)
                                    ShiftRight(And(PRIT, 0x300), 0x8, Local0)
                                    ShiftRight(And(PRIT, 0x3000), 0xc, Local1)
                                    Add(Local0, Local1, Local2)
                                    If(LEqual(0x3, Local2))
                                    {
                                        Store(0xb, PMD0)
                                    }
                                    If(LEqual(0x5, Local2))
                                    {
                                        Store(0xc, PMD0)
                                    }
                                }
                            }
                            Else
                            {
                                Store(0x1, PMD0)
                            }
                            If(And(SYNC, 0x1))
                            {
                                Store(Or(SDT0, 0x40), DMD0)
                                If(And(ICR1, 0x1))
                                {
                                    If(And(ICR0, 0x1))
                                    {
                                        Add(DMD0, 0x2, DMD0)
                                    }
                                    If(And(ICR3, 0x1))
                                    {
                                        Store(0x45, DMD0)
                                    }
                                }
                            }
                            Else
                            {
                                Or(Subtract(And(PMD0, 0x7), 0x2), 0x20, DMD0)
                            }
                            Return(PIB0)
                        }
                    }
                    Device(P_D1)
                    {
                        Name(_ADR, 0x1)
                        Method(_GTF, 0x0, NotSerialized)
                        {
                            Name(PIB1, Buffer(0xe)
                            {
    0x03, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xef, 0x03, 0x00, 0x00, 0x00, 0x00,
    0xb0, 0xef
                            })
                            CreateByteField(PIB1, 0x1, PMD1)
                            CreateByteField(PIB1, 0x8, DMD1)
                            If(And(PRIT, 0x20))
                            {
                                If(LEqual(And(PRIT, 0x90), 0x80))
                                {
                                    Store(0x8, PMD1)
                                }
                                Else
                                {
                                    Add(And(PSIT, 0x3), ShiftRight(And(PSIT, 0xc), 0x2), Local0)
                                    If(LEqual(0x5, Local0))
                                    {
                                        Store(0xc, PMD1)
                                    }
                                    Else
                                    {
                                        If(LEqual(0x3, Local0))
                                        {
                                            Store(0xb, PMD1)
                                        }
                                        Else
                                        {
                                            Store(0xa, PMD1)
                                        }
                                    }
                                }
                            }
                            Else
                            {
                                Store(0x1, PMD1)
                            }
                            If(And(SYNC, 0x2))
                            {
                                Store(Or(SDT1, 0x40), DMD1)
                                If(And(ICR1, 0x2))
                                {
                                    If(And(ICR0, 0x2))
                                    {
                                        Add(DMD1, 0x2, DMD1)
                                    }
                                    If(And(ICR3, 0x2))
                                    {
                                        Store(0x45, DMD1)
                                    }
                                }
                            }
                            Else
                            {
                                Or(Subtract(And(PMD1, 0x7), 0x2), 0x20, DMD1)
                            }
                            Return(PIB1)
                        }
                    }
                }
            }
            Device(SATA)
            {
                Name(_ADR, 0x1f0002)
                OperationRegion(SACS, PCI_Config, 0x40, 0xc0)
                Field(SACS, DWordAcc, NoLock, Preserve)
                {
                    PRIT, 16,
                    SECT, 16,
                    PSIT, 4,
                    SSIT, 4,
                    , 24,
                    SYNC, 4,
                    , 12,
                    SDT0, 2,
                    , 2,
                    SDT1, 2,
                    , 2,
                    SDT2, 2,
                    , 2,
                    SDT3, 2,
                    Offset(0x14),
                    ICR0, 4,
                    ICR1, 4,
                    ICR2, 4,
                    ICR3, 4,
                    ICR4, 4,
                    ICR5, 4,
                    Offset(0x50),
                    MAPV, 2
                }
            }
            Device(SBUS)
            {
                Name(_ADR, 0x1f0003)
                OperationRegion(SMBP, PCI_Config, 0x40, 0xc0)
                Field(SMBP, DWordAcc, NoLock, Preserve)
                {
                    , 2,
                    I2CE, 1
                }
                OperationRegion(SMBI, SystemIO, 0x18e0, 0x10)
                Field(SMBI, ByteAcc, NoLock, Preserve)
                {
                    HSTS, 8,
                    , 8,
                    HCON, 8,
                    HCOM, 8,
                    TXSA, 8,
                    DAT0, 8,
                    DAT1, 8,
                    HBDR, 8,
                    PECR, 8,
                    RXSA, 8,
                    SDAT, 16
                }
                Method(SSXB, 0x2, Serialized)
                {
                    If(STRT())
                    {
                        Return(0x0)
                    }
                    Store(0x0, I2CE)
                    Store(0xbf, HSTS)
                    Store(Arg0, TXSA)
                    Store(Arg1, HCOM)
                    Store(0x48, HCON)
                    If(COMP())
                    {
                        Or(HSTS, 0xff, HSTS)
                        Return(0x1)
                    }
                    Return(0x0)
                }
                Method(SRXB, 0x1, Serialized)
                {
                    If(STRT())
                    {
                        Return(0xffff)
                    }
                    Store(0x0, I2CE)
                    Store(0xbf, HSTS)
                    Store(Or(Arg0, 0x1), TXSA)
                    Store(0x44, HCON)
                    If(COMP())
                    {
                        Or(HSTS, 0xff, HSTS)
                        Return(DAT0)
                    }
                    Return(0xffff)
                }
                Method(SWRB, 0x3, Serialized)
                {
                    If(STRT())
                    {
                        Return(0x0)
                    }
                    Store(0x0, I2CE)
                    Store(0xbf, HSTS)
                    Store(Arg0, TXSA)
                    Store(Arg1, HCOM)
                    Store(Arg2, DAT0)
                    Store(0x48, HCON)
                    If(COMP())
                    {
                        Or(HSTS, 0xff, HSTS)
                        Return(0x1)
                    }
                    Return(0x0)
                }
                Method(SRDB, 0x2, Serialized)
                {
                    If(STRT())
                    {
                        Return(0xffff)
                    }
                    Store(0x0, I2CE)
                    Store(0xbf, HSTS)
                    Store(Or(Arg0, 0x1), TXSA)
                    Store(Arg1, HCOM)
                    Store(0x48, HCON)
                    If(COMP())
                    {
                        Or(HSTS, 0xff, HSTS)
                        Return(DAT0)
                    }
                    Return(0xffff)
                }
                Method(SBLW, 0x4, Serialized)
                {
                    If(STRT())
                    {
                        Return(0x0)
                    }
                    Store(Arg3, I2CE)
                    Store(0xbf, HSTS)
                    Store(Arg0, TXSA)
                    Store(Arg1, HCOM)
                    Store(SizeOf(Arg2), DAT0)
                    Store(0x0, Local1)
                    Store(DerefOf(Index(Arg2, 0x0)), HBDR)
                    Store(0x54, HCON)
                    While(LGreater(SizeOf(Arg2), Local1))
                    {
                        Store(0xfa0, Local0)
                        While(LAnd(LNot(And(HSTS, 0x80)), Local0))
                        {
                            Decrement(Local0)
                            Stall(0x32)
                        }
                        If(LNot(Local0))
                        {
                            KILL()
                            Return(0x0)
                        }
                        Store(0x80, HSTS)
                        Increment(Local1)
                        If(LGreater(SizeOf(Arg2), Local1))
                        {
                            Store(DerefOf(Index(Arg2, Local1)), HBDR)
                        }
                    }
                    If(COMP())
                    {
                        Or(HSTS, 0xff, HSTS)
                        Return(0x1)
                    }
                    Return(0x0)
                }
                Method(SBLR, 0x3, Serialized)
                {
                    Name(TBUF, Buffer(0x100)
                    {
                    })
                    If(STRT())
                    {
                        Return(0x0)
                    }
                    Store(Arg2, I2CE)
                    Store(0xbf, HSTS)
                    Store(Or(Arg0, 0x1), TXSA)
                    Store(Arg1, HCOM)
                    Store(0x54, HCON)
                    Store(0xfa0, Local0)
                    While(LAnd(LNot(And(HSTS, 0x80)), Local0))
                    {
                        Decrement(Local0)
                        Stall(0x32)
                    }
                    If(LNot(Local0))
                    {
                        KILL()
                        Return(0x0)
                    }
                    Store(DAT0, Index(TBUF, 0x0))
                    Store(0x80, HSTS)
                    Store(0x1, Local1)
                    While(LLess(Local1, DerefOf(Index(TBUF, 0x0))))
                    {
                        Store(0xfa0, Local0)
                        While(LAnd(LNot(And(HSTS, 0x80)), Local0))
                        {
                            Decrement(Local0)
                            Stall(0x32)
                        }
                        If(LNot(Local0))
                        {
                            KILL()
                            Return(0x0)
                        }
                        Store(HBDR, Index(TBUF, Local1))
                        Store(0x80, HSTS)
                        Increment(Local1)
                    }
                    If(COMP())
                    {
                        Or(HSTS, 0xff, HSTS)
                        Return(TBUF)
                    }
                    Return(0x0)
                }
                Method(STRT, 0x0, Serialized)
                {
                    Store(0xc8, Local0)
                    While(Local0)
                    {
                        If(And(HSTS, 0x40))
                        {
                            Decrement(Local0)
                            Sleep(0x1)
                            If(LEqual(Local0, 0x0))
                            {
                                Return(0x1)
                            }
                        }
                        Else
                        {
                            Store(0x0, Local0)
                        }
                    }
                    Store(0xfa0, Local0)
                    While(Local0)
                    {
                        If(And(HSTS, 0x1))
                        {
                            Decrement(Local0)
                            Stall(0x32)
                            If(LEqual(Local0, 0x0))
                            {
                                KILL()
                            }
                        }
                        Else
                        {
                            Return(0x0)
                        }
                    }
                    Return(0x1)
                }
                Method(COMP, 0x0, Serialized)
                {
                    Store(0xfa0, Local0)
                    While(Local0)
                    {
                        If(And(HSTS, 0x2))
                        {
                            Return(0x1)
                        }
                        Else
                        {
                            Decrement(Local0)
                            Stall(0x32)
                            If(LEqual(Local0, 0x0))
                            {
                                KILL()
                            }
                        }
                    }
                    Return(0x0)
                }
                Method(KILL, 0x0, Serialized)
                {
                    Or(HCON, 0x2, HCON)
                    Or(HSTS, 0xff, HSTS)
                }
            }
        }
    }
}

Final Thoughts

So after all this work, here are the temperature levels from startup and after playing Battlefield 2142 for about an hour. The hottest it gets now is 60C and most of the time it runs at around 52C. Notice the THR1 Value level is 26C above the CPU levels (as I stated above, I changed the original Temp Adjustment from 32C down to 26C). Here is where you can get HWMonitor. Also checkout NHC (Notebook hardware control).


One thing I'd like to mention is that, even after all these improvements and with the fan running at high speed, the amount of air flowing out of the vents is not what I would expect compared to other laptops I have used. I think this is due to a poorly designed fan housing that allows air leakage around the fan blades thereby making it less effective. I am still researching for ways to increase the air flow by either replacing the fan blades or the fan assembly with one that is more effective. Please let me know if you have had any experience doing this.

I hope you find this information helpful. If you need some assistance, please leave a detailed comment and I will try to address your requests.


Disassembly Reference Sites:
Maintenance and Service Guide for HP Pavilion dv9000 and dv9200 Notebook PC
How to disassemble HP Pavilion dv6500, dv6600, dv6700, dv6800 notebooks
Disassembled HP DV9000 Laptop

Disassembly Videos:
HP Pavilion dv9000 real time disassembly (dv6000, dv2000, tx1000 black screen of death)
Mainboard disassembly (Hewlett Packard DV9000 Laptop) 7083


Update 11/23/2016

Sadly, my HP DV9000 graphic card failed today. These mods gave my laptop an addition 6 1/2 more years of life so I cannot complain. I'm surprised it lasted this long. In my opinion, the design of the fan didn't perform well to provide adequate airflow, even with the ACPI DSDT patch to increase the fan speed. I could reflow the solder on the NVIDIA BGA again but I have to admit I was already looking for a better 64 Bit laptop because this HP DV9000 32 Bit laptop was not keeping up with the newer software demands. 
All the best,
bjohnson

323 comments:

1 – 200 of 323   Newer›   Newest»
Anonymous said...

awesome tutorial.. Thanks pal. Quick question.. should I technically see in CPUID a false temperature of +32 degrees with this mod? I've been looking for this type of mod forever!! I'm glad someone is smart enough to figure something out! SAVE THE DV9000's!! lol

Anonymous said...

not sure if this is an issue or not but when I try to compile the patch (or even just compiling the original again) it appears that the file AML file is not being updated (modified on date) Is this normal?

bjohnson said...

Yes, CPUID Hardware Monitor shows the false temperature for the ACPI THR1 section. The Core#0 and Core#1 show the correct temperature.

bjohnson said...

No, the dsdt.aml should show the current complied date. I had this experience the first time I re-compiled the original dsdt.asl because there was an Error 4094 mixed in with the warning messages that had to be resolved. See the 3.4.2.3 Microsoft’s ASL decompile bug section at the bottom of the article.

Unknown said...

What version of the ASL compiler are you using? Even when I decompile and recompile the original dsdt, I receive the following. Any thoughts?

C:\ACPI>asl dsdt.ASL
Microsoft ACPI Source Language Assembler Version 4.0.0NT [Aug 28 2009, 18:36:36]

Copyright (c) 1996,2009 Microsoft Corporation
Compliant with the ACPI 4.0 Specification

dsdt.ASL:

1599: Name(_WDG, Buffer(0x50)
^***
dsdt.ASL(1599): warning: not a valid reserved NameSeg

2474: Method(_WED, 0x1, NotSerialized)
^***
dsdt.ASL(2474): warning: not a valid reserved NameSeg

2712: "33DB4D5B-1FF7-401C-9657-7441C03DD766"
^***
dsdt.ASL(2712): error: expecting ASL/User Term

C:\ACPI>

bjohnson said...

I use ASL 4.0 but 3.0.1 works also. I mentioned this error in section "3.4.2.3 Microsoft’s ASL Decompile Bug" and provided a fix.

Anonymous said...

Hi, I followed the instructions for the DSDT patch very closely. However for some reason, my CPUID hardware monitor, instead of thinking the ACPI is 32C hotter, says that it is exactly 32C all the time. Please tell me if you have any idea why this is. Thanks.

Andrew said...

Hey there !

Had problems with my dv9000 too. I have same QUANTA 30BD Mainboard. First, I tried the hardware solve for cooling (taking off those wires from cooler and added 2 Ohm resistor to reduce the cooler speed). But the fan speed it still annoying.

Now I have just tried the ACPI fix (my fan is still on full speed using hardware fix). Everything went fine. Now NORTHBRIDGE (ACPI) TEMPERATURE is 54C in IDLE and 60-70C on HIGH USAGE. Is it correct ? Does this fix also work outside Windows or still works after reinstalling Windows or I need to reapply it ?
When ACPI is 54C, how fast is the cooler running ? What about 60-70C ? I guess there must be 2 steps: low but enough speed to cool video (for 54C ACPI) and high but enough to maintain video temp under 60C (for 60-70C ACPI).

Please, I need your confirmation in order to strip down my laptop again, place back the 2 wires of fan speed and remove the resistor. Thanks in advance !

Here is my email: bucovina_bloodhand@hotmail.com

Anonymous said...

Hi, I followed your instructions for the DSDT patch but for some reason after doing it my temperature reads as exactly 32C rather than 32C higher, any idea what's happening?

Anonymous said...

wow..very smart way..nice finding bjohnson:)

in my case...i've hp pavilion tx1000 with common problem of overhating...i've been modded the heatsink with a piece of cooper but still have to reflowed my gpu over then 10 times until now:))
about the fan..it starting to speeding just when the GPU temps reach 73C (by speedfan) and turn to slower down (still spinning at very lower speed)) at 68C. the CPU was variated around 65C - 55C corresponding with GPU temps

my TX1000 dsdt is a little bt different with yours...here is mine:


Scope(\_TZ_)
{
Name(TPAS, 0x64)
Name(TPA0, 0x52)
Name(TPA1, 0x5a)
Name(TPA2, 0x5c)
Name(TPC_, 0x5f)
Name(TPTM, 0x2d)
ThermalZone(THRM)
{
Method(_CRT, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
Method(_SCP, 0x1, Serialized)
{
Store(0x0, CTYP)
}
Method(_TMP, 0x0, Serialized)
{
If(ECON)
{
Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
Store(\_SB_.PCI0.EC0_.RTMP, Local0)
Release(\_SB_.PCI0.EC0_.MUT0)
Store("Current temp is: ", Debug)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_PSL, 0x0, Serialized)
{
If(\_SB_.DUAL)
{
Return(Package(0x2)
{
\_PR_.CPU0,
\_PR_.CPU1
})
}
Else
{
Return(Package(0x1)
{
\_PR_.CPU0
})
}
}
Method(_PSV, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
}
Method(_TC1, 0x0, Serialized)
{
Return(0x2)
}
Method(_TC2, 0x0, Serialized)
{
Return(0x3)
}
Method(_TSP, 0x0, Serialized)
{
Return(0x64)
}
Method(Z016, 0x1, NotSerialized)
{
If(LNot(LLess(Arg0, TPA1)))
{
If(LNot(LLess(Arg0, TPA2)))
{
Store(\_SB_.PSTN, THR0)
\_SB_.Z015()
}
Else
{
If(LEqual(\_SB_.PSTN, 0x1))
{
Store(\_SB_.PSTN, THR0)
\_SB_.Z015()
}
Else
{
Subtract(\_SB_.PSTN, 0x1, THR0)
\_SB_.Z015()
}
}
}
Else
{
If(LNot(LGreater(Arg0, TPA0)))
{
Store(0x0, THR0)
\_SB_.Z015()
}
}
}
}
}

(continue..)

-deqiu-

Anonymous said...

Method(Z015, 0x0, NotSerialized)
{
If(LNot(LEqual(\_SB_.CPUF, 0x5a)))
{
Store(0x0, Local0)
Store(0x0, Local1)
Or(Local1, LNot(LEqual(THR1, THR0)), Local1)
Or(Local1, LNot(LEqual(PST1, PST0)), Local1)
Or(Local1, LNot(LEqual(Q8C1, Q8C0)), Local1)
Or(Local1, LNot(LEqual(Q8E1, Q8E0)), Local1)
Or(Local1, LNot(LEqual(Q881, Q880)), Local1)
If(LNot(LEqual(Local1, 0x0)))
{
Store(0x0, Local1)
Or(Local1, LNot(LEqual(THR0, 0x0)), Local1)
Or(Local1, LNot(LEqual(PST0, 0x0)), Local1)
Or(Local1, LNot(LEqual(Q8C0, 0x0)), Local1)
Or(Local1, LNot(LEqual(Q8E0, 0x0)), Local1)
Or(Local1, LNot(LEqual(Q880, 0x0)), Local1)
If(LEqual(Local1, 0x0))
{
Store(0x0, NOWP)
If(LEqual(\_SB_.AMDP, 0x0))
{
If(LEqual(B800, 0x1))
{
Store(\_SB_.PSTN, NOWP)
}
Else
{
Store(0x0, NOWP)
}
}
Store(NOWP, \_PR_.CPU0._PPC)
If(LEqual(\_SB_.DUAL, 0x1))
{
Store(0x0, \_PR_.CPU1._PPC)
Notify(\_PR_.CPU0, 0x80)
Notify(\_PR_.CPU1, 0x80)
}
Else
{
Notify(\_PR_.CPU0, 0x80)
}
}
Else
{
Store(0x0, NOWP)
If(LGreater(PST0, NOWP))
{
Store(PST0, NOWP)
}
If(LGreater(THR0, NOWP))
{
Store(THR0, NOWP)
}
If(LGreater(Q880, NOWP))
{
Store(Q880, NOWP)
}
If(LEqual(ECON, 0x1))
{
Store(\_SB_.PCI0.EC0_.ACIN, Local0)
}
If(LEqual(Local0, 0x0))
{
If(LGreater(Q8C0, NOWP))
{
Store(Q8C0, NOWP)
}
If(LGreater(Q8E0, NOWP))
{
Store(Q8E0, NOWP)
}
}


(continue...)

-deqiu-

deqiu said...

If(LEqual(\_SB_.AMDP, 0x0))
{
If(LEqual(B800, 0x1))
{
Store(\_SB_.PSTN, NOWP)
}
}
Store(NOWP, \_PR_.CPU0._PPC)
If(LEqual(\_SB_.DUAL, 0x1))
{
Store(NOWP, \_PR_.CPU1._PPC)
Notify(\_PR_.CPU0, 0x80)
Notify(\_PR_.CPU1, 0x80)
}
Else
{
Notify(\_PR_.CPU0, 0x80)
}
}
Store(Q8C0, Q8C1)
Store(Q8E0, Q8E1)
Store(PST0, PST1)
Store(THR0, THR1)
Store(Q880, Q881)
}
}
}
}

sory for very long post..:)

so..if u dont mind...please assist me which part should i change to get ride the fan
i think many many tx1000 users would be thanked to you

thanks very much

-deqiu-

Anonymous said...

"Name(TPTM, 0x4b) //75C Passive level"

So if I were to lower this, would it turn on the fan at lower temps?

Unknown said...

i would like to know if i can use this mod on my laptop also i have a bios version F58A, its a dv9890ed european model, it makes me crazy now it runs to fast mostly...thanks in advance

Anonymous said...

i would like to know if i can use this mod on my laptop also i have a bios version F58A, its a dv9890ed european model, it makes me crazy now it runs to fast mostly...thanks in advance

Anonymous said...

Great job with the mods and tanks for the high-res pictures, too! While having the mobo out for reflow, I'd like to replace the old TL-50 with a Tyler TL-60 processor, who also runs on 31W TDP but offers 1MB L2-Cache in total. In order to have the system recognize it, I guess I'll have to flash the latest BIOS which is F.42 from 2009. Why is your BIOS-mod only working with these "old" versions?

bjohnson said...

Sorry for the delay in answering your comments but I just notice I had a typo in my email notification address so I did not notice the comments that had been left on my blog.

bjohnson said...

To Anonymous with "says that it is exactly 32C all the time". Check to see if you have the Power Options set to anything other than Maximum. Your system may be using Passive and not Active Cooling. Passive Cooling strives to run the fan at a constant (fixed) lower speed and cools the CPU by throttling down the CPU performance. This could explain the constant 32C but how is the performance with intense processing or playing a game? There is nothing I can find in the code that would cause any adverse issues with either the Active or Passive code.

bjohnson said...

To Andrew, I’m sure you already know this but all 4 wires must be connected for the ACPI code to control the fan speed. You also need to reapply the patch if you reinstall Windows 7. With 2 ohms, my temperatures stayed under 68C while playing games so your 60-70C range is about right. With the ACPI patch, the upper temperature range is about the same as with the 2 wire 2 ohm method but the fan is quieter overall and at idle the fan is completely silent (for the most part) which is the reason I prefer the ACPI patch over the 2 wire 2 ohm method.

bjohnson said...

To Anonymous with "Name(TPTM, 0x4b) //75C Passive level. So if I were to lower this, would it turn on the fan at lower temps? ", I have not looked into changing the Passive temperature for the TPTM level. First, I should explain two things about how the fan controller works.
1. The incremental temperature levels or steps that cause the incremental change in fan speed are set at a fixed temperature range from the BIOS code and cannot be easily adjusted to my knowledge. That’s why my patch increase the ACPI reported CPU temperature by 32C so that the fan controller thinks the CPU is hotter than it really is thereby increasing the fan speed.
2. Keep in mind that Passive cooling works completely different from Active cooling in that it strives to run the fan at a constant (fixed) lower speed and cools the CPU by throttling down the CPU performance. I’m not sure if it also throttles down the GPU performance.
To answer your question, lowering the TPTM temperature level would likely slow down the fan speed and also throttle up the CPU performance causing more heat. I would not suggest doing this because it is likely that the TPTM temperature level is selected to work in balance with the Power Option Manager and may be harmful if changed.

bjohnson said...

To Anonymous with "I would like to know if I can use this mod … DV9890 F.58A". It's not likely because the ACPI code is very specific to the motherboard type and features, right down to the version number. It also likely you motherboard uses the AMD chip set and my system uses the Intel chips set so are completely different in the way they handle the fan controller. The only way to know is to extract the ACPI of you computer and compare it to the "original code" I provided to see if the ThermalZone code is similar.

bjohnson said...

To Anonymous with "Why is your BIOS-mod only working with these "old" versions?". It likely won’t work because your system is completely different than mine. Your motherboard uses an AMD chip and my DV9000 uses an Intel chip. The ACPI code is very specific to the motherboard type and features, right down to the version number. You can always extract the ACPI code of your computer and compare it with the "original code" I provided to see if the ThermalZone code is similar.
Maybe I should have mentioned in this article that there are 2 different DV9000 / DV6000 motherboards, one uses an Intel CPU chip and the other uses an AMD CPU chip. The ACPI patch I provide is only for the Intel mobos BIOS versions F.29, F.2D and F.2E that I have tested. Also, as I understand and I may be wrong, the AMD mobos combines the NVIDIA and Northbridge circuits together into a single chip and has the AMD CPU and NVIDIA GPU chips on a single heat sink. The DV9000 / DV6000 with the Intel CPU chip has a separate NVIDIA and Northbridge chip set and has the Intel CPU and Northbridge chips on one heat sink and the NVIDIA GPU on another. I have read that these AMD mobos are the ones that others have suggest using a copper shim for the NVIDIA chip to replace the thermal pad. This is not needed for Intel mobos because the Northbridge chip that uses the thermal pad has never blown out to my knowledge.

Anonymous said...

hello BJohnson:)

Im the Anonymous with "wow..very smart way",

thanks for ur fast respond after the first one, i'll try it and post the result here ...i hope this can be a solution among tx1000 users....thanks so much:)

-deqiu-

bjohnson said...

To Anonymous with "wow..very smart way", Try the modified code below. I have no way of testing this code, so use it at your own risk. I only modified the _TMP Method and moved that code to the top so don’t overwrite any other methods. I didn't include the latter half of the code because it did not change.
You may want to check if a program like SpeedFan can adjust the Fan Controller. The other code I see makes me think it may support this. Let me know if this code needs tweaking.

Scope(\_TZ_)
{
    Name(TPAS, 0x64)
    Name(TPA0, 0x52)
    Name(TPA1, 0x5a)
    Name(TPA2, 0x5c)
    Name(TPC_, 0x5f)
    Name(TPTM, 0x2d)
    Name(TADJ, 0x20) // 32C Temp Adjustment
    Name(DSA1, 0x0)
    ThermalZone(THRM)
    {
        Method(_TMP, 0x0, Serialized)
        {
            If(ECON) // Embedded Controller Active Cooling Enabled
            {
                Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
                Store(\_SB_.PCI0.EC0_.RTMP, Local0)
                Release(\_SB_.PCI0.EC0_.MUT0)
                // If Temp Less than Critical level
                If(LLess(Local0, TPAS))
                {
                    Store(Add(Local0,TADJ), DSA1) // Adjust Temp
                    // If Adjust Temp Greater than Critical level
                    If(LGreater(DSA1, TPAS))
                    {
                        Store(TPAS, DSA1) //Never adjust higher than TPAS
                    }
                }
                // If Temp Greater or Egual to Critical level
                Else
                {
                    Store(Local0, DSA1)
                }
                Store("Current temp is: ", Debug)
                Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_CRT, 0x0, Serialized)
        {
            Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
        }
        Method(_SCP, 0x1, Serialized)
        {
            Store(0x0, CTYP)
        }
        Method(_PSL, 0x0, Serialized)
        {
            If(\_SB_.DUAL)
            {
                Return(Package(0x2)
                {
                    \_PR_.CPU0,
                    \_PR_.CPU1
                })
            }
            Else
            {
                Return(Package(0x1)
                {
                    \_PR_.CPU0
                })
            }
        }
        Method(_PSV, 0x0, Serialized)
        {
            Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
        }
        Method(_TC1, 0x0, Serialized)
        {
            Return(0x2)
        }
        Method(_TC2, 0x0, Serialized)
        {
            Return(0x3)
        }
        Method(_TSP, 0x0, Serialized)
        {
            Return(0x64)
        }

Anonymous said...

thanks bjohnson:)

i want to try it as soon as possible...because now i've to revive the gpu again...reflow an reflow it again and again...:(

after my tx alive again i'll try it..

i hope it is not too late to get ride the fan...

and maybe if the patch that you made for me work with my tx..i'll try to share it on my local forum in indonesia... with ur permission:)

big thanks from me indonesian

-deqiu-

Anonymous said...

hello again Bjohnson:)

i think there is a good progress here...

at last i've revive my gpu again...and my tx alive again now...
and after that my first touch to the laptop is patched the dsdt with ur script..

and this is what i get:

-temp core still read my cpu at 55C (little bit cool than usualy 60C

-NHC (Notebook hardware control) read my cpu at 80C (with orig dsdt NHC read it not far from core temp read..around 60C), so i think the script you provide to me was work:)
and i think the fan is little bit faster than usual from the beginning...but still not fast enough as when it kicking at GPU = 73C

-the gpu was stable at 65-67C...but it still need time to prove that it is work...because i think the GPU temp will grow up when i run a heavy program (for now i do not open such program yet)

so...corresponding with what NHC read...is the patch working?

or is there any other way to see that the patch was work?

i think i'll do more finding about the fan spinning

thanks a lot bjohnson..i hope this is a solution for common tx problem

sorry for my poor english:)

-deqiu-
(Anonymous with "wow..very smart way:))

bjohnson said...

Deqiu, I just noticed I made a minor mistake. I should have used the TPC_ Critical temperature level and not TPAS temperature level. So just replace TPAS with TPC_ in the _TMP Method only. I also included the fix below in case someone else try’s to use this un-tested patch so use at your own risk.
You can use my patch on your blog but please refer to my site for reference.
If you download a program called "Notebook Hardware Control", you can see the names of the temperature level. Just look under ACPI tab and select “Show ACPI temperature details”. Also be careful to not enable "Notebook Hardware Control" for windows startup under the Setting tab in “Show Advanced NHC Settings”. I also like a program call “HWMonitor” to record the max and min temperatures. Let me know how it goes.

Scope(\_TZ_)
{
    Name(TPAS, 0x64)
    Name(TPA0, 0x52)
    Name(TPA1, 0x5a)
    Name(TPA2, 0x5c)
    Name(TPC_, 0x5f)
    Name(TPTM, 0x2d)
    Name(TADJ, 0x20) // 32C Temp Adjustment
    Name(DSA1, 0x0)
    ThermalZone(THRM)
    {
        Method(_TMP, 0x0, Serialized)
        {
            If(ECON) // Embedded Controller Active Cooling Enabled
            {
                Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
                Store(\_SB_.PCI0.EC0_.RTMP, Local0)
                Release(\_SB_.PCI0.EC0_.MUT0)
                // If Temp Less than Critical level
                If(LLess(Local0, TPC_))
                {
                    Store(Add(Local0,TADJ), DSA1) // Adjust Temp
                    // If Adjust Temp Greater than Critical level
                    If(LGreater(DSA1, TPC_))
                    {
                        Store(TPC_, DSA1) //Never adjust higher than TPC_
                    }
                }
                // If Temp Greater or Egual to Critical level
                Else
                {
                    Store(Local0, DSA1)
                }
                Store("Current temp is: ", Debug)
                Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_CRT, 0x0, Serialized)
        {
            Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
        }
        Method(_SCP, 0x1, Serialized)
        {
            Store(0x0, CTYP)
        }
        Method(_PSL, 0x0, Serialized)
        {
            If(\_SB_.DUAL)
            {
                Return(Package(0x2)
                {
                    \_PR_.CPU0,
                    \_PR_.CPU1
                })
            }
            Else
            {
                Return(Package(0x1)
                {
                    \_PR_.CPU0
                })
            }
        }
        Method(_PSV, 0x0, Serialized)
        {
            Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
        }
        Method(_TC1, 0x0, Serialized)
        {
            Return(0x2)
        }
        Method(_TC2, 0x0, Serialized)
        {
            Return(0x3)
        }
        Method(_TSP, 0x0, Serialized)
        {
            Return(0x64)
        }

bjohnson said...

Deqiu, it is hard for me to judge if the fan is running at a faster speed and is also running more often. You should run the HWMoniter program before and after your patch to report more accurate results. If you want the fan to run faster than just increase the TADJ temperature level to a value you are happy with.
I should mention that after me NVIDIA chip overheated and I reflowed the BGA assembly, my video experience was never exactly the same. I can still play games but I can no longer attach my computer to my TV with the HDMI connection because it overheats again in about 5 minutes even with the fan running faster. I think the only way to fully restore your system is to replace the NVIDIA chip or the motherboard. Also, I think the fan in these computers are vary inefficient and do not have as much airflow as several of my other laptops. This is the next area I wish to improve.

Anonymous said...

burt thank you for your guide.
can we control fan speed to make it spin faster in idle state (+10%/20%)? i think more speed in idle will cool more and the noise will not be very bad.
you remove plastic mold from nvidia heatsink but that you force the air to move slower. did you test it with plastic mold and without?
thanks

Anonymous said...

hello BJ, after this few days i think my opinion about fan speed on my earlir post is not quiet right, i recognize that the script didnt effect the fan because the fan just kicking at full speed at gpu 73C(like usual with orig dsdt) an lowering at 67C..so my guess is the script not touching the origin/root of fan controlling yet..although the script was succesfull on overiding NHC on reading the temp of cpu. i've try to change the _TADJ but it doesnt effect the fan speed, all i know that only at gpu 73C the fan start speeding

FYI..this is the detail of THRM that NHC read:
Actual temperature : _TMP = temp right now
Critical Temperature : _CRT = 95C
passive Cooling Temperature : _PSV = 100C
thermal constant for passive cooling 1 : _TC1 = 2
thermal constant for passive cooling 2 : _TC2 = 3
thremal sampling period for passive cooling : _TSP = 10 second

until now i still try to find what value to be change to overide the fan speed in dsdt..i hope there is a way to do that with ur guidance..

thanks BJ

regard

-deqiu-

bjohnson said...

To Anonymous with "can we control fan speed". I think the fan speed temperature step level at idle is set in the BIOS along with all the other temperature step levels. I don’t know of a way to directly change them. I have tried modifying the Critical and Warning temperature levels in the ACPI code and it made no change to the fan speed. I would be very interested to know how the temperature step levels get set. This is the reason that the ACPI reported CPU temperature in the _TMP method is increased by 32C so that the fan controller thinks the CPU is hotter than it really is thereby increasing the fan speed. I would rather monitor the GPU temperature to effect the fan speed but the existing ACPI code don’t seem to monitor the GPU temperature. Keep in mind, All my ACPI code changes are intended to effect the Active cooling settings. Maybe changing the TPTM Passive level or the Passive cooling constants would have the affect you are looking for. But be very careful and make small incremental changes or your may have problems re-booting you system.
You are correct. Removing the plastic on the second heat sink that cools the GPU does slow the overall airflow but by increasing the fan speed it has the desired effect of cooling the GPU more than before. Maybe closing the CPU airflow exhaust would be an added benefit and something I think I’ll try. Also, I am looking into replacing the fan with a more inefficient one to increase the airflow.

bjohnson said...

Deqiu, Are you saying _TMP = CPU0 temperature level. It should be 32C higher. If not, than you may be using Passive cooling. Make very sure your cooling Power Options are set to Maximum for Active cooling.

Anonymous said...

hello again BJ..i hope u dont mind if i call u BJ:)
yup, exactly..the NHC read the cpu temp around 32C higher than the CoreTemp (i use CoreTemp for alterantif to monitoring the cpu temperature), that's mean ur script was work...but i dont know why CoreTemp still read the cpu temp at real value (??)..

so far what i get in my case after playing the script is (IMO)..that cpu temperature doesnt affect the fan speed, but more closely affect the power coresponding to the throtle of cpu.
whatever value we add to the cpu temps seem not affect the fan speed
i think the main key for speeding the fan is the gpu temps at 73C (in my case) but we know in ACPI (dsdt.aml) there is nothing that seem to be responsible for handle the value...

i hope im wrong and this is not a dead end for tx1000 user:(

thanks

regards

-deqiu-

Anonymous said...

ohh..BJohnson, btw how to set my Cooling Power Options to Maximum for Active Cooling?

:)

regards

-deqiu-

bjohnson said...

deqiu, You didn't indicate what OS your running. I made a comment above about how Win7 sets Active Cooling; Look in the Control Panel for "Microsoft IT Customized Peak Plan (Laptop) Change Panel Settings /Change Advanced Power Settings /Processor Power Management /System Cooling Policy" and set the options to Active.
There may be an issue that the Local0 variable is not set correctly. You can see my patch sets this later to the changed value. Sorry, my mistake.
Try this:

Scope(\_TZ_)
{
    Name(TPAS, 0x64)
    Name(TPA0, 0x52)
    Name(TPA1, 0x5a)
    Name(TPA2, 0x5c)
    Name(TPC_, 0x5f)
    Name(TPTM, 0x2d)
    Name(TADJ, 0x20) // 32C Temp Adjustment
    Name(DSA1, 0x0)
    Name(DS01, 0x0)
    ThermalZone(THRM)
    {
        Method(_TMP, 0x0, Serialized)
        {
            If(ECON) // Embedded Controller Active Cooling Enabled
            {
                Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
                Store(\_SB_.PCI0.EC0_.RTMP, DS01)
                Release(\_SB_.PCI0.EC0_.MUT0)
                // If Temp Less than Critical level
                If(LLess(DS01, TPC_))
                {
                    Store(Add(DS01,TADJ), DSA1) // Adjust Temp
                    // If Adjust Temp Greater than Critical level
                    If(LGreater(DSA1, TPC_))
                    {
                        Store(TPC_, DSA1) //Never adjust higher than TPC_
                    }
                }
                // If Temp Greater or Equal to Critical level
                Else
                {
                    Store(DS01, DSA1)
                }
                Store(DSA1, Local0)
                Store("Current temp is: ", Debug)
                Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }

Also, Is the code you provided the original code. If you Google for "Acquire Mute" there are discussions about setting Mute = 0xffff to work around the compile warning messages. I would not do that since it is only a cosmetic fix.

Anonymous said...

BJ do not apologize, instead I should be grateful that you have helped me so far:)

I forgot to say that I am using win Xp sp 3, it seems there is no arrangement for it, and about your new code I'll post the results soon ..

really thank

regards,

-deqiu-

Anonymous said...

I didn't do the software patch but I updated my BIOS and I use a laptop cooler ($6 at local flea) I was able to reset my charging circuit so now I can recharge my battery. I thought I had wasted $85 on a new battery. Cleaned out my fans and air path. My HDD seems to run a little hot still. My next project is upgrading the HDD to a SATA2 500GB.
I really don't want to add the down speed shunt.

Anyway thanks for this article it really helped.

steve said...

Thanks for you help/write up. I got a dead DV9000 cheap & got it going again. I then did the following steps: added a copper shim to the gpu, modded the case and altered the fan control. It seems much better now. It has even survived some online gaming sessions! whilst having a second monitor connected with GPU-Z running. During gaming its only 2-3 degrees c hotter than it used to idle, before the mods.

bjohnson said...

Update from September 5, 2010 11:12 PM.
I commented that "... after me NVIDIA chip overheated and I reflowed the BGA assembly, my video experience was never exactly the same".
That was my experience after the first reflow. I have had ample time to test my second reflow of the BGA assembly which seems to have restored my computer back to what it used to be. The difference was the first time I only took about 30 seconds to reflow the BGA assembly. The second time I heated the BGA assembly for a full minute. The HDMI connection is now working fine and the temperatures on the GPU ranges between 50C-60C.
Also, I noticed the amount of air flowing out of the vents at higher speeds is not very good and not what I would expect compared to other laptops I have used. I think it would be worthwhile to see if a way can be found to increase the air flow by either improved fan blades or reengineering the existing fan to be more efficient. Has anyone ever tried something like this?

Hoosier said...

Bjohnson: I was wondering if you had used a flux during your reflow process? I've found that petroleum based flux tends to remove more oxidation on the BGA pads. Though the failure/return/rework rates are varying averaging 50% so I've started tracking reflow times. And flux also helps draw some heat off the GPU during the reflow. And the water based flux tends to 'boil' too soon to de-oxidize the pads.

bjohnson said...

Mayo, I never tried using flux. I used only a pen flame torch straight to the top of the BGA assembly.

Anonymous said...

after all...overide ACPI was not quiet successfull as what i want..because it still get hot n dead for me..so for me it is hopeless i think:(

but there is an option to not pushing hard gpu work by disabling directdraw accelerator off the system..(from dxdiag), the setting works great for me as im just using win xp...as im upgrading the processor from TK-53(1.7Ghz) to TL-60(2.0Ghz) my system working on its best endurance (1 month without no trouble..and still counting)..i hope no more sudden death, with undervolting the heat when idle is around 46C(cpu) and 68C(gpu).

about mayo's post...same like BJ..i used only lighter/torch stright to the top of BGA assembly for my last reviving work..never trying using flux (bcause i dont know what it is:))

-deqiu-

bjohnson said...

deqiu, I'm sorry to hear that increasing the fan speed did not work for your computer. As I mentioned above, after I reflowed my NVIDIA GPU a second time for a longer period of time, my computer is like new again.
Do you have the DV9000 with the Intel or AMD processor and does it have 3 separate BGA assemblies mounted to 2 heat sinks (NVIDIA GPU on its own heat sink) or 2 separate BGA assemblies mounted to 1 heat sink? My computer has the 3 separate BGA assemblies which may explain why my GPU never gets warmer than 60C, no matter what I’m running. I would be interested in knowing what other preventive measures you took to lower the computer temperatures.

Anonymous said...

BJ, i have a TX1000series with AMD processor and nVidia GPU, not the DV9000series like what you have.
tx1000 only have one mounted heatsink with three BGA (CPU,GPU, and 1 that idont know what it is) on it...so the heat from one BGA is affect the other BGA temps.so it is complicated for me to get control the heat, basicly i just want to strict thee GPU temps to not go above 70C.
until now what i can do to push down the GPU temps (and CPU temps too):
1. clean the heatsink and fan from dust (must do)
2. put some cooper plate to fill the gap beetwen (must do)
3. put a good thermalpaste instead of its original thermaltape (must do)
4. Ajust the ACPI like in this article (sound not too effective for me)
5. Disabling directdraw accelerator to give some room for GPU to breath (but you've to sacrifice some gpu feature)
5. undervolt the CPU to lower CPU temps (very effective IMO)
6. make an extra hole for air intake beyond the fan...still in proccess:)
7. torching GPU chip with some lighter/pen torch if i get a dead end blank screen:)

for now im on <50C(CPU) <70C(GPU) when i write this post...and stay alive for 1 month with no trouble (i hope never again)

still finding other better sollution...

-deqiu-

Anonymous said...

Yes, it looks like this saves another dv9000.
Thanks.

Unknown said...

My friends. i have got pavillion dv6 1210ee artist edition. amd turionx2 zm85 atiradeon4650 and f.18 winflash bios for amd chipsets. i cant find the codes which must be changes. at my dsts.

Name(BCLT, Package(0xd)
{
0x64,
0x32,
Zero,
0xa,
0x14,
0x1e,
.
.
.
Name(LCBR, Package(0xb)
{
0x13,
0x18,
0x1d,
.
.
.
Name(LEBR, Package(0xb)
{
0x6,
0x9,
0xc,
0x10,
0x14,
.
.
.

And about thermal codes i have found this.

}
Scope(_TZ_)
{
Name(TPC_, 0x64)
Name(TPTM, 0x4b)
Name(TPAS, 0x5f)
ThermalZone(THRM)
{
Method(_TMP, 0x0, NotSerialized)
{
If(ECON)
{
Store(\_SB_.PCI0.LPC0.EC0_.RTMP, Local0)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_HOT, 0x0, Serialized)
{
If(LEqual(TPOS, 0x40))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
.
.

i dont know how to incease fan speed. :/ need help

bjohnson said...

Semih, I have no way to test this so use this code at your own risk.
If the fan speed is to high you can lower the TADJ value.
// Code to report a false CPU temperature.
Scope(_TZ_)
{
    Name(TPC_, 0x64) // 100C Critical level
    Name(TPTM, 0x4b) // 75C Passive level
    Name(TPAS, 0x5f) // 95C Warning level
    Name(DS01, 0x0) // Temporary Storage
    Name(DSA1, 0x0) // Adjustment Temp to Return
    Name(TADJ, 0x20) // 32C Temp Adjustment (0x1A=26C)
    ThermalZone(THRM)
    {
        Method(_TMP, 0x0, NotSerialized) // Current temp
        {
            If(ECON) // Embedded Controller Active Cooling Enabled
            {
                Store(\_SB_.PCI0.LPC0.EC0_.RTMP, DS01)
                // If temp less than Critical level
                If(LLess(DS01, TPC_))
                {
                    Store(Add(DS01,TADJ), DSA1) // Add temp adjustment
                    If(LGreater(DSA1, TPC_))
                    {
                        Store(TPC_, DSA1) // Never adjust higher than TPC_
                    }
                }
                Else
                {
                    Store(DS01, DSA1)
                }
                Store(\_SB_.PCI0.LPC0.EC0_.RTMP, Local0) // Store original temp to Local0
                Return(Add(0xaac, Multiply(DSA1, 0xa, ), )) // Return adjusted temp
            }
            Else // Passive Cooling Enabled
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_HOT, 0x0, Serialized)
        {
            If(LEqual(TPOS, 0x40))
            {
                Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
            }
        }
    }
}

Unknown said...

john. thanks for your reply. i tried that.But not works well. when i started to playing a game(black ops) i decided my laptop gets too slow. its freezing in menu. and after from these its going to sleep. laptop take it self to sleep (about60-70C @core temp). i installed my backup aml at safemod command promp.. can you offer a different codes. i want to share one of my experience.

These are stock codes of my dsdt

}
Scope(_TZ_)
{
Name(TPC_, 0x64)
Name(TPTM, 0x4b)
Name(TPAS, 0x5f)
ThermalZone(THRM)

I make the changes from old messages and make these codes like that

}
Scope(_TZ_)
{
Name(TPC_, 0x5f)
Name(TPTM, 0x2d)
Name(TPAS, 0x64)
ThermalZone(THRM)

i think these codes make little bit change of fan speeds. i decided much fan speed @ 82C at coretemp.. but i dont know. if you understand these change. can we make it better? :) thank you so much.

bjohnson said...

Semih,
Try this for a test with your original code. TPAS should be less than TPTM.
Name(TPC_, 0x5f) // 95C Critical level
Name(TPTM, 0x32) // 50C Passive level
Name(TPAS, 0x2d) // 45C Warning level

As a test try adding 32C to your original code.
Store(Add(\_SB_.PCI0.LPC0.EC0_.RTMP,0x20), Local0)

If that works, then try replacing my code with this to see what happens.
Store(DSA1, Local0) // Store adjusted temp to Local0


Don't forget that this code patch only works when the Power Options System Cooling policies are set to Active and not Passive. In Windows 7, Look in the Control Panel for "Microsoft IT Customized Peak Plan (Laptop) Change Panel Settings /Change Advanced Power Settings/Processor Power Management/System Cooling Policy" and set the options to Active.

Unknown said...

Thanks for your help

when i touch to my dsdt. my pc getting out of itself. i ve tried everything like as full code changing or minimal code changing.in all changes my laptop processor and fan working too slow. games are freezing and in a 5 minutes its going to hibernate.I dont know about 'FAN ALWAYS ON' option @ bios.but it was always on enable when i'm trying these codes.. anyway i ve stopped to try. hp dont let pro users to configurate their notebook. hp for amateurs. they must be give us service bios or something like that.. whatever. thanks for all your messages johnson.

Anonymous said...

Hello! I have HP DV9625ew notebook with intel cpu. 0x64 is present few times in dsdt.asl. I found the most similar part to yours:

Name(BCL1, Package(0xd)
{
0x5f,
0x2b,
0x14,
0x18,
0x1c,
0x20,
0x25,
0x2b,
0x32,
0x3b,
0x45,
0x51,
0x5f
})
Name(BCL2, Package(0xd)
{
0x64,
0x2e,
0x14,
0x19,
0x1f,
0x24,
0x29,
0x2e,
0x34,
0x3d,
0x48,
0x55,
0x64
})
It might be this?What should I modify? My bios version is F59. I know that they changed the algorithm in newer bioses and fan never stops. Because CPU is too cold, fan spins slowly and GPU have tendency to overheat.HELP

bjohnson said...

Anonymous said "Hello!" – I’m sorry but I am not familiar with the BCL1/BCL2 code or what it does. I modify the ThermalZone code to control the fan speed by reporting a false temperature so the fan control code thinks the CPU is hotter than it really is and increases the fan speed as a result.

Anonymous said...

Sorry!My bad. I hadn't read it precisely. Here is my dsdt.ASL file http://rapidshare.com/files/438588335/dsdt.ASL Could you look at it? File is similar to yours but not exactly the same. Thanks for answer in advance.

bjohnson said...

Anonymous said... Sorry!
Your code is nearly identical, except for the "If(DTSE)" conditional. You should have tried pasting my patch code over your code to see if it works. If the fan runs to much you can adjust the TADJ value down 6C to 10C degrees.

Scope(\_TZ_)
{
    Name(TPC_, 0x78) //120C Critical level
    Name(TP85, 0x6e) //110C Critical level
    Name(TPTM, 0x4b) //75C Passive level
    Name(TPAS, 0x5c) //92C Warning level
    Name(TA85, 0x50) //80C Warning level
    Name(DS01, 0x0)
    Name(DS02, 0x0)
    Name(DSA1, 0x0)
    Name(DSA2, 0x0)
    Name(TADJ, 0x20) // 32C Temp Adjustment
    ThermalZone(THR1)
    {
        Method(_TMP, 0x0, NotSerialized) // Current temp
        {
            If(ECON) // Embedded Controller Active Cooling Enabled
            {
                If(DTSE)
                {
                    //Adjust CPU0 to increase fan speed
                    Store(DTS1, DS01)
                    // If less than Critical level
                    If(LLess(DS01, TP85))
                    {
                        Store(Add(DS01,TADJ), DSA1)
                        If(LGreater(DSA1, TP85))
                        {
                            Store(TP85, DSA1) //Never adjust higher than TP85
                        }
                    }
                    Else
                    {
                        Store(DS01, DSA1)
                    }
                    Store(DSA1, \_SB_.PCI0.LPCB.EC0_.ECT1)
                    //---------------------------------
                    //Adjust CPU1 to increase fan speed
                    Store(DTS2, DS02)
                    // If less than Critical level
                    If(LLess(DS01, TP85))
                    {
                        Store(Add(DS02,TADJ), DSA2)
                        If(LGreater(DSA2, TP85))
                        {
                            Store(TP85, DSA2) //Never adjust higher than TP85
                        }
                    }
                    Else
                    {
                        Store(DS02, DSA2)
                    }
                    Store(DSA2, \_SB_.PCI0.LPCB.EC0_.ECT2)
                    //---------------------------------
                    //Use highest CPU temprature
                    Store("Current temp is: ", Debug)
                    //If CPU0 greater then CPU1
                    If(LGreater(DSA1, DSA2))
                    {
                        Store(DSA1, Debug)
                        Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
                    }
                    Else
                    {
                        Store(DSA2, Debug)
                        Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DSA2, 0xa, ), ))
                    }
                }
                Else
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.RTMP, Local0)
                    Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
                }
            }
            Else // Passive Cooling Enabled
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_HOT, 0x0, Serialized)
...

bsdfree said...

Hi bjohnson, thanks so much for helping everyone out over here. I got a new HP Envy 15 a little while ago and now when I try to actually use it to play HD Videos, video games, etc., it overheats on me, while barely spinning up the fan. I think this is basically the same problem you had so I opened up my DSDT file and modified my _TMP function like you did. Originally, my function looked like this:

Method (_TMP, 0, NotSerialized)
{
If (ECON)
{
Store (\_SB.PCI0.LPCB.EC0.RTMP, Local0)
If (LEqual (CTYP, Zero))
{
OTHD (Local0)
}

If (LGreaterEqual (Local0, 0x61))
{
Store (CMSR (0x72), Local1)
Or (Local0, One, Local1)
CMSW (0x72, Local1)
}

Return (Add (0x0AAC, Multiply (Local0, 0x0A)))
}
Else
{
If (LEqual (CTYP, Zero))
{
OTHD (TPTM)
}

Return (Add (0x0AAC, Multiply (TPTM, 0x0A)))
}
}

which as you can tell is a little different from yours, but has the same basic idea. I tried putting the following code after the 'Store' to Local0 to adjust the temperature:


//BEGIN CHANGE
If (LLess(Local0, TP85))
{
Store(Add(Local0, TADJ), Local0)
If (LGreater(Local0, TP85))
{
Store(TP85,Local0)
}
}
//END CHANGE

Unfortunately the results weren't what I expected. When I open up HWMonitor, I can see that the Laptop Temperature (TZ01 for me) is about 30+ degrees higher than the core temperatures (which means the patch had an effect), but the fan speed doesn't respond to this. To prove this, I noticed that my TZ01 temperature was at 83, which is my TJ85 value, at idle. When I put a load on (ran Prime95), I saw the core temperatures shoot up, but the TZ01 temperature stay the same, since it was hitting the TJ85 barrier. All the while, the fan speed increased significantly. This makes me think that the fan speed on this model isn't affected by the return value of the _TMP function, but of the individual cores. However I can't find anywhere in the DSDT file that the individual core temperatures are accessed. Is my reasoning right? If so, how should I find out what function does affect fan speed? I can send you my full DSDT file if it will help.

It's kind of ridiculous that we have to do HP's job just to get our computers working, but thanks a bunch for your help!

-bsdfree

bjohnson said...

bsdfree, It's hard to derive any conclusion from the code you provided without all the Scope(\_TZ_) code. I appreciate not pasting a whole bush of code to my blog but the little pit of code at the top would be of some help.
Make sure you are running in "Active Cooling" mode.
If you look carefully at my code you will see that I do not adjust the Local0 variable (in my code this variable is \_SB_.PCI0.LPCB.EC0_.ECT1). Instead, leave Local0 unchanged and create a new DSA1 variable and adjust it.
As a test using the original code, try replacing the return instruction with this to see if it increase the fan speed. It returns a constant 92C temperature.

Return (Add (0x0AAC, Multiply (0x5c, 0x0A)))

If this code does increase the fan speed then you know you’re on the right track. If it doesn't, then I won’t have much experience to help. Also make sure the BIOS doesn’t have something that may already allow you to set the actual temperature trigger levels. I have notice that some BIOS manufactures are starting to catch the hint and are making these adjustment available. Let me know how you do.

bsdfree said...

Thanks for the reply. Here's the beginning of my _TZ code:


Scope (_TZ)
{
Name (TP85, 0x53) //Never used in dsdt
Name (TPTM, 0x4A) //Used in _TMP
Name (TPAS, 0x87) //Used in _PSV
Name (TPPP, 0x42) //Used in _PSV
Name (AS00, 0x5F) //Used in _PSV
Name (TADJ, 0x20) //Temperature Adjustment
Name (OT01, Buffer (0x03) //Temperatures at Which the frequency is throttled
{
0x55, 0x52, 0x4B
})
Name (OT02, Buffer (0x03) //Temperatures at Which the frequency is throttled
{
0x5F, 0x5D, 0x4E
})
ThermalZone (TZ01)
{
Method (_HOT, 0, Serialized)
{
.
.
.

I followed your suggestion and returned constant 92C (0x5c) instead of Local0. I also fixed the passive return

temperature to 93C (0x5d) so that I could be certain which mode it was in. When I restarted, I saw the 92C in

HWMonitor, and this value did not change when I put load on the CPU. However, I did notice the fan speed start to

pick up when the cores got to 60C. This definitely seems to indicate that the fan speed is influenced by something

other than the _TMP method, but the question is what. Unfortately the Insyde BIOS menu is as unhelpful as ever

(almost no configuration options). I could disassemble it - I've read some posts that suggest it has a lot of

hidden configuration options, but that is another can of worms I'd like to avoid if I can.

There are a couple of methods in _TZ I don't understand, which I've pasted below. Do you think any of them is relevant?

//Fan Read SPeed? This one I understand somewhat (gets the upper bound on fan rotation period)
Method (FRSP, 0, NotSerialized)
{
Store (Zero, Local2)
If (ECON)
{
Store (\_SB.PCI0.LPCB.EC0.RPM1, Local0)
Store (\_SB.PCI0.LPCB.EC0.RPM2, Local1)
ShiftLeft (Local1, 0x08, Local1)
Or (Local0, Local1, Local0)
If (LNotEqual (Local0, Zero))
{
Divide (0x00075300, Local0, Local0, Local2)
}
}

Return (Local2)
}

//Fan Set SPeed? I don't understand how it works considering SFAN is only ever 0 or 2
Method (FSSP, 1, NotSerialized)
{
If (ECON)
{
If (LNotEqual (Arg0, Zero))
{
Store (Zero, \_SB.PCI0.LPCB.EC0.SFAN)
}
Else
{
Store (0x02, \_SB.PCI0.LPCB.EC0.SFAN)
}
}
}

//No idea what this one does
Method (_SCP, 1, Serialized)
{
If (LGreater (OSYS, 0x07D6)) //If OS is "Windows 2006"
{
Store (Arg0, CTYP)
Store (Arg0, \_SB.PCI0.LPCB.EC0.TRPM)
}
Else
{
Store (Zero, CTYP)
Store (Zero, \_SB.PCI0.LPCB.EC0.TRPM)
}
}

Other than this I'm basically stuck. Thanks for any help.

-bsdfree

bjohnson said...

bsdfree, I wish I could be of more help but I suspect from looking at this code that you solution will be something very different from mine.
I did a few searches and it seems there are others looking for similar help. I found a site that may have the ACPI code your computer is using.
http://pastebin.com/QH55wX1S
Searches I used:
HP Envy-15 OR DV6 ThermalZone
HP Envy-15 OR DV6 ACPI hot OR heat fan -noise
Don't give up your search. Solving my fan issues has completely restored my HP DV9000 to better than original condition and removed all fears of it ever overheating again.
If you find a solution please post it here for others to find.

Anonymous said...

Unfortunately it didn't work. After pasting your code and replacing file temp had risen by 3C and HWMonitor showed the same temp. It was many errors in DOS window after compiling. Or I pasted it wrong or this code does not fit to my BIOS.

dv9625ew owner

bjohnson said...

dv9625ew owner, I would be very surprised if that code didn’t work. If it is not showing a different temperature than either the power options are set to Passive Cooling or there is a mistake in the code. I will try to get time tomorrow to recode the file you posted and upload it to http://rapidshare.com. I’m sure there is a solution for this ACPI version.

Anonymous said...

I used the removing 2 wires to make my DV6000 run the fan at 100%, I can deal with it. GPU 54C AMD 42C/43C

Lee said...

@bjohnson,

I repaired my dv9000 once beore with a reflow and it lasted about 2 months. Since then its been sitting in my shed for nearly a year. I too have the 30BD Intel board and was p*ssed with HP for not releasing a bios update like they did for the AMD boards.
Iv've dusted it off now, stripped it down and reflowed, Ive removed the plastic near the vents as you have shown in your pictures.
Im going to have a go at patching DSDT, and see how long it lasts.

Any other recommendations ?
Did you find out how to monitor GPU temps.

Thanks for your hard work and posting the information,

Cheers :)

bjohnson said...

Lee, as I mention above, I also had to reflow my GPU BGA a second time because I didn't do it right or long enough the first time. To monitor the temp I use HWMonitor. Also, I have changed my TADJ value by lowering it 6 degrees to 0x1A (26C) because it made little difference to the temp and kept the fan from running so hard. The one thing I would suggest is to create more space under the laptop for better airflow. This makes a big difference in the temp and in how hard the fan has to work. My GPU temp never gets over 60C and is normally about 52C.

Lee said...

Hi, I tried the DSDT patch as you described, and followed your info to the letter.
When using asl to recreate the .ASL file after patching I get several pages of errors.
Couldn't see the difference in gpu temp, HWMonitor states the GPU is idle at 60-64C with both the patched and unpached DSDT file.
Is there any chance you could email me the file you are using (I have the same board and bios rev.)

btw, are you using any shims or cooling mods to get your temps that low?

Many Thanks, Lee

bjohnson said...

Lee, if you getting compile errors please include the error messages but ignore the warning messages. What ASL compiler are you using? If it’s Microsoft then did you read section 3.4.2.3 Microsoft’s ASL Decompile Bug.
I added my file in the “Here is my DSDT file” section above. Once you get it to compile make sure your computer is using Active Cooling and not Passive, see above.

Lee said...

Big thanks !!!
Your DSDT patch seems to be working nicely.
It's been a week since I reflowed, modded the chassis and applied your fix and all seems well.
I'd almost forgot about this laptop until I stumbled upon your blog. Now I'ts got a new lease of life.
Much appreciated.

Anonymous said...

i can't get a dsdt file???? help?

dandas said...

Thank you for your many solutions but is there anyway you can help with my coding? I have dv9260nr (motherboard: Quanta 30BD, BIOS F.2E). I having issue with compiling error(s). Can I have your email? My code looks actually like yours (original code) so I mostly copied and replace the thermal portion/code/logic. I got the error that you displayed but at a different line along with other errors?

dandas said...

Error that I'm getting:

dsdt.ASL:

1633: Name(_WDG, Buffer(0x50)
^***
dsdt.ASL(1633): warning: not a valid reserved NameSeg

2508: Method(_WED, 0x1, NotSerialized)
^***
dsdt.ASL(2508): warning: not a valid reserved NameSeg

2746: "33DB4D5B-1FF7-401C-9657-7441C03DD766"
^***
dsdt.ASL(2746): error: expecting ASL/User Term

dandas said...

I worked the code to the "T" even tried the fix for the compiler error that you had but even got more problems. Do you mind taking a look at my could? I would appreciate it greatly. Contact is spicypills at gmail.

dandas said...

Nevermind about my earlier post(s). I misspelled the directory because it looks like ACP(lower case L) and then I got caught up with warnings (before decompiler error correction) and lots of warnings after decompiler error correction. It works great! TY so much!!!!!!!!!!!!!!!!

bjohnson said...

To Anonymous (i can't get a dsdt file???? help?), I included my dsdt file under the "Here is my DSDT.ASL file." section so without more details I'm not sure how to help you.

bjohnson said...

To dandas,
Glad you got things working.
I have found that it is not enough to just increase the fan speed if you want your computer to last a long time. I think it is also important to increase circulation space under the laptop by using a laptop cooling stand. I have my laptop placed on top of 2 wood planks that are about half inch high which lowers the temperature an additional 4C to 6C.

Let me know if you have any other questions.

Anonymous said...

Hi! Bjohnson, thank you for page about fixing of DV9000!
I tried from the beginning: "P=cVVF - power equation for video card. Dropping to F=0 and voltage control is possible only after 9 and quadro cards" (TB-04051-001_v01_PowerMizer8.pdf).
I found "Undervolt 8600M GS from 1.32 to 0.89"
(_http://forums.laptopvideo2go.com/topic/25273-undervolt-8600m-gs-from-132-to-089/page__p__122087__hl__%2Bundervolt+%2Bgpu__fromsearch__1#entry122087)
and "GeForce Go 7600 backed up the BIOS, and how to read it?"
(_http://www.mvktech.net/component/option,com_joomlaboard/Itemid,34/func,view/id,47081/catid,13/).
But NiBiTor led notebook to freezing or white screen. May be it is because of half-cooked GF7600 during last reflowing process. Did you try such approach?

bjohnson said...

Anonymous, I have not looked into using NiBiTor to read the "GeForce Go 7600" BIOS and lower the voltage or even see if there is a way to get it to report the GPU temperature so it could be monitored like the CPU. Then it could be read by the ACPI which would be a nice addition and would allow fan speed adjustments off of the GPU temperature.

Anonymous said...

Thank you for fast replay. Your idea about monitoring the GPU temperature like the CPU is brilliant. Following second link you can find such BIOS (think you saw)for exploration. Alas it's ASUS BIOS.

Anonymous said...

"Here is the procedure to successfully extract the video BIOS from the laptop." said person with HP GeForce Go 7600 256MB (Mobile) Edition. (_http://www.mvktech.net/component/option,com_joomlaboard/Itemid,/func,view/catid,13/id,49308/#49308). I'll try it later.

Trink-Bar said...

Hi bjohnson, I have a hdx16 and it's getting quite hot. The fan is just starting when the cpu is already quite hot. So mybe you could take a quick look into my asdt file:

Scope(_TZ_)
{
Name(CTYP, Zero)
Name(PSVP, 0x3a)
Name(TP85, 0x53)
Name(TPTM, 0x4a)
Name(TPAS, 0x64)
Name(QPAS, 0x5c)
Name(AS85, 0x50)
Name(TA85, 0x4d)
Name(OT01, Buffer(0x3)
{
0x64, 0x5c, 0x5a
})
Name(OT02, Buffer(0x3)
{
0x55, 0x50, 0x4b
})
ThermalZone(TZ01)
{
Method(_HOT, 0x0, Serialized)
{
If(LNot(LLess(OSYS, 0x7d6)))
{
If(LEqual(\_SB_.PCI0.LPC_.EC0_.QUAD, One))
{
Return(0xe94)
}
Else
{
If(LEqual(TJMX, 0x64))
{
Return(0xec6)
}
}
If(LEqual(TJMX, 0x55))
{
Return(0xe30)
}
}
}
Method(_CRT, 0x0, Serialized)
{
If(LLess(OSYS, 0x7d6))
{
If(LEqual(\_SB_.PCI0.LPC_.EC0_.QUAD, One))
{
Return(0xe94)
}
Else
{
If(LEqual(TJMX, 0x64))
{
Return(0xec6)
}
}
If(LEqual(TJMX, 0x55))
{
Return(0xe30)
}
}
}
Method(_TMP, 0x0, NotSerialized)
{
If(ECOK)
{
Store(\_SB_.PCI0.LPC_.EC0_.RTMP, Local0)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_PSL, 0x0, NotSerialized)
{
If(CMPE)
{
Return(Package(0x2)
{
\_PR_.CPU0,

Thanks a lot

bjohnson said...

Trink-Bar, It is difficult not having all the code to analyze. I think ECOK is the same as ECON (Embedded Controller Active Cooling Enabled).

Don't forget that this code patch may only work when the Power Options System Cooling policies are set to Active and not Passive.

Use this code at your own risk. It has not been tested. Make sure you know how to restore the original before attempting to use this. You may need to try other things to make it work of it is possible. Let me know if you have success. Good Luck.

Scope(_TZ_)
{
    Name(CTYP, Zero)
    Name(PSVP, 0x3a)
    Name(TP85, 0x53)
    Name(TPTM, 0x4a)
    Name(TPAS, 0x64)
    Name(QPAS, 0x5c)
    Name(AS85, 0x50)
    Name(TA85, 0x4d)
    Name(TADJ, 0x1A) // 26C Temp Adjustment
    Name(DS01, Zero)
    Name(DSA1, Zero)
    Name(OT01, Buffer(0x3)
    {
        0x64, 0x5c, 0x5a
    })
    Name(OT02, Buffer(0x3)
    {
        0x55, 0x50, 0x4b
    })
    ThermalZone(TZ01)
    {
        Method(_TMP, 0x0, NotSerialized)
        {
            If(ECOK)
            {
                //Adjust CPU0 to increase fan speed
                Store(\_SB_.PCI0.LPC_.EC0_.RTMP, DS01)
                // If less than Critical level
                If(LLess(DS01, TP85))
                {
                    // Adjust the temp
                    Store(Add(DS01,TADJ), DSA1)
                    If(LGreater(DSA1, TP85))
                    {
                        //Never adjust higher than TP85
                        Store(TP85, DSA1)
                    }
                }
                Else
                {
                    Store(DS01, DSA1)
                }
                Store(DSA1, Local0)
                Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }

    }
}

Giorgio23 said...

hi there bjohnson i came across your blog with this excellent info and was wondering if you could help me out with my dv6000 problem. i wish to increase the cpu temp same way you did but do not know how to edit the tmp method properly. here is my code; if you could help me out it would be greatly appreciated :)
ThermalZone(THRM)
{
Method(_CRT, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
Method(_SCP, 0x1, Serialized)
{
Store(0x0, CTYP)
}
Method(_TMP, 0x0, Serialized)
{
If(ECON)
{
Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
Store(\_SB_.PCI0.EC0_.RTMP, Local0)
Release(\_SB_.PCI0.EC0_.MUT0)
Store("Current temp is: ", Debug)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_PSL, 0x0, Serialized)
{
Return(Package(0x1)
{
\_PR_.CPU0
})
}
Method(_PSV, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
}
Method(_TC1, 0x0, Serialized)
{
Return(0x2)
}
Method(_TC2, 0x0, Serialized)
{
Return(0x3)
}
Method(_TSP, 0x0, Serialized)
{
Return(0x64)
}
}
}
}

bjohnson said...

Giorgio23, You did not include the static temperature levels like TP85 so I will have to just assume that TP85 exists. If not you will need to send all of them to me.
I added 3 static variables and modified only the _TMP Method the rest of your code has no change.
Don't forget that this code patch may only work when the Power Options System Cooling policies are set to Active and not Passive.
Use this code at your own risk. This code has not been tested and may not work the first time. Make sure you know how to restore the original code before attempting to use this. Let me know if you have success. Good Luck.

Name(TADJ, 0x1A) // 26C Temp Adjustment
Name(DS01, Zero)
Name(DSA1, Zero)
ThermalZone(THRM)
{
    Method(_TMP, 0x0, Serialized)
    {
        If(ECON)
        {
            //Adjust CPU0 to increase fan speed
            Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
            Store(\_SB_.PCI0.EC0_.RTMP, DS01)
            Release(\_SB_.PCI0.EC0_.MUT0)
            // If less than Critical level
            If(LLess(DS01, TP85))
            {
                // Adjust the temp
                Store(Add(DS01,TADJ), DSA1)
                If(LGreater(DSA1, TP85))
                {
                    //Never adjust higher than TP85
                    Store(TP85, DSA1)
                }
            }
            Else
            {
                Store(DS01, DSA1)
            }
            Store("Current temp is: ", Debug)
            Store(DSA1, Debug)
            Store(DSA1, Local0)
            Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
        }
        Else
        {
            Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
        }
    }

Giorgio23 said...

hey bjohnson thanks for the quick response! unfortunately i made an error i see and didnt include the static temperature levels; i looked again at my code and realised that i do not have tp85. this is the code right from the beginning; including the static temps.
Scope(\_TZ_)
{
Name(TPAS, 0x58)
Name(TPC_, 0x5f)
Name(TPTM, 0x4b)
ThermalZone(THRM)
{
Method(_CRT, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
Method(_SCP, 0x1, Serialized)
{
Store(0x0, CTYP)
}
Method(_TMP, 0x0, Serialized)
{
If(ECON)
{
Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
Store(\_SB_.PCI0.EC0_.RTMP, Local0)
Release(\_SB_.PCI0.EC0_.MUT0)
Store("Current temp is: ", Debug)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_PSL, 0x0, Serialized)
{
Return(Package(0x1)
{
\_PR_.CPU0
})
}
Method(_PSV, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
}
Method(_TC1, 0x0, Serialized)
{
Return(0x2)
}
Method(_TC2, 0x0, Serialized)
{
Return(0x3)
}
Method(_TSP, 0x0, Serialized)
{
Return(0x64)
}
}
}
}
once again, i have a hp pavilion dv6000. thanks so much for your help ! :)

Giorgio23 said...

any luck my friend? :) damn laptop keeps overhheating

bjohnson said...

Giorgio23, The TP85 is the same as your TPC_ so replace TP85 with TPC_.
Name(TPC_, 0x5f) //95C Our Critical level
Name(TP85, 0x6e) //110C My Critical level
This code you sent looks slightly different from earlier versions I have seen. Its goods that your computers "Critical level" temperature is set lower then it is on the DV9000. That means the code is designed to run the DV6000 computer at a lower overall temperature. The 26C Temp Adjustment (TADJ) I use to increase the reported temperature may cause your fan to run more than it needs to because your 95C Critical level is so much lower than mine.
I suggest that you do a test run first by compiling the original DSDT table and loading it. As I explain in this article you can have problems even with doing just that. Let us know how you get on.

Giorgio23 said...

replaced the original code you sent me with TPC_ instead of the TP85, compiled and loaded it. computer is running normally but the fan speed didn't change :/ as well, in hwmonitor it shows a difference of 23 degrees celsius between the THRM and the core #0 temperature under the "max" column. is that good/ did it work? because the fan seems to be going at the same speed. any insight my friend?

bjohnson said...

Giorgio23, There may be an issue that the Local0 variable is not set correctly and may need to stay set to the real temperature. Try a test by resetting back to your original code and just change the last line to report 0x0fb.

Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
Store(\_SB_.PCI0.EC0_.RTMP, Local0)
Release(\_SB_.PCI0.EC0_.MUT0)
Store("Current temp is: ", Debug)
Return(Add(0xaac, Multiply(0x5b, 0xa, ), ))

Make sure that the Power Options System Cooling policies are set to Active and not Passive. I talk about this in the article. Also what happens when you set Power Options System Cooling policies to Passive?

Giorgio23 said...

i changed back to my original code with the new local0 variable, and when the computer boots up and loads into the desktop, the fan is running at the speed i want and the gpu/cpu temps are ideal. but after 10-15 min the fan speed drops back to the way it was orginally before modifying the dsdt table. any insight my friend? :) thanks so much for your help

bjohnson said...

Giorgio23, That is good news. I am not sure what is causing the fan to slow down but I am not surprised. There can be fan hardware logic or even BIOS code that affects the fan directly. I fixed the patch code to not adjust the Local0 value so it should work now. I should have remembered that the Local0 value should not be adjusted. It’s something I ran into before and forgot.
----------------------------------------------
Scope(\_TZ_)
{
    Name(TPC_, 0x5f) // 95C
    Name(TPAS, 0x58) // 88C
    Name(TPTM, 0x4b) // 75C
    Name(TADJ, 0x1A) // 26C Temp Adjustment
    Name(DS01, Zero)
    Name(DSA1, Zero)
    ThermalZone(THRM)
    {
        Method(_TMP, 0x0, Serialized)
        {
            If(ECON)
            {
                //Adjust CPU0 to increase fan speed
                Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
                Store(\_SB_.PCI0.EC0_.RTMP, Local0)
                Release(\_SB_.PCI0.EC0_.MUT0)
                Store(Local0, DS01)
                // If less than Critical level
                If(LLess(DS01, TPC_))
                {
                    // Adjust the temp
                    Store(Add(DS01,TADJ), DSA1)
                    If(LGreater(DSA1, TPC_))
                    {
                        //Never adjust higher than TPC_
                        Store(TPC_, DSA1)
                    }
                }
                Else
                {
                    Store(DS01, DSA1)
                }
                Store("Current temp is: ", Debug)
                //Store(DSA1, Debug)
                Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
----------------------------------------------

If the fan still slows down after 15 minutes then you can try a different test by setting the Power Options System Cooling policies to Passive and make changes to the TPTM value like the following. The fan should run faster as you increate the value.
Name(TPTM, 0x55) // 85C

Anonymous said...

hi cant you help me with my problem this is my original dsdt fan starts on 52c and stop on 45c its not good my fan spin all time how i change it to start fan on 56c and stop on 50c sory my english is very bad cant you help me please.
Name(TPC_, 0x64)
Name(TPTM, 0x4b)
Name(TPAS, 0x5f)
Name(PSVT, 0x41)
Name(PSVM, Zero)
Name(DHOT, 0x5a)
Name(HOTF, Zero)
ThermalZone(THRM)
{
Method(_TMP, 0x0, NotSerialized)
{
If(ECON)
{
Store(\_SB_.PCI0.LPC0.EC0_.RTMP, Local0)
If(LNot(LLess(Local0, TPC_)))
{
Store(One, HOTF)
}
Else
{
If(LLess(Local0, DHOT))
{
Store(Zero, HOTF)
}
}
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_HOT, 0x0, Serialized)
{
If(LEqual(TPOS, 0x40))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
}
Method(_CRT, 0x0, Serialized)
{
If(LNot(LEqual(TPOS, 0x40)))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
}
Method(_PSL, 0x0, NotSerialized)
{
If(MPST)
{
Return(Package(0x2)
{
\_PR_.C000,
\_PR_.C001
})
}
Else
{
Return(Package(0x1)
{
\_PR_.C000
})
}
}
Method(_PSV, 0x0, NotSerialized)
{
If(LAnd(LEqual(PSVM, One), LEqual(OSTB, 0x42)))
{
Return(Add(0xaac, Multiply(PSVT, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
}
}
Method(_SCP, 0x1, Serialized)
{
If(LAnd(LEqual(ECON, One), LEqual(OSTB, 0x42)))
{
Store(Arg0, PSVM)
Store(PSVM, \_SB_.PCI0.LPC0.EC0_.TAPM)
}
}
Method(_TC1, 0x0, NotSerialized)
{
Return(0x2)
}
Method(_TC2, 0x0, NotSerialized)
{
Return(0x3)
}
Method(_TSP, 0x0, NotSerialized)
{
Return(0x1e)
}
Name(REGN, "Processor Thermal Zone")
Name(FMAX, 0x1388)
Name(FMIN, 0x960)
Method(FRSP, 0x0, NotSerialized)
{
Store(Zero, Local2)
If(ECON)
{
Store(\_SB_.PCI0.LPC0.EC0_.RPM1, Local0)
Store(\_SB_.PCI0.LPC0.EC0_.RPM2, Local1)
ShiftLeft(Local1, 0x8, Local1)
Or(Local0, Local1, Local0)
If(LNot(LEqual(Local0, Zero)))
{
Divide(0x75300, Local0, , Local2)
}
}
Return(Local2)
}
Method(FSSP, 0x1, NotSerialized)
{
If(ECON)
{

bjohnson said...

Anonymous, What is the make and model of this computer?
I think you are asking me if there is a way delay the fan from running so soon. Of course this is not something I recommend. This site is dedicated to increasing the fan speed for better cooling to increase the life span of the computer. You are lucky that your design is working as it should to keep the computer cool. If noise in the way of a clicking sound is the real issue than there may be a problem with the fan signal generator that is making it noisier than usual. I would recommend contacting your manufacture to see if there is a patch. Many computers like the later models of the DV9000 have had this issue. You should read about the horror stories the many of us have had with overheating computers.

That said, you can still apply the same principal of reporting a temperature that is less then what it actually is and thereby preventing the fan from turning on as soon. I warn you, dropping the temperature sensing levels by just a little will guaranteed a shorter life span of your computer.

All you have to do is sub 5 degrees from the reported temperature like this:

Replace this line in Method(_TMP, 0x0, NotSerialized)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
With this
Return(Add(0xaac, Multiply(Sub(Local0,0x5), 0xa, ), )) // Sub 5 degrees

Don't forget that this code patch may only work when the Power Options System Cooling policies are set to Active and not Passive.
Use this code at your own risk. It has not been tested. Make sure you know how to restore the original code before attempting to use this patch.

Anonymous said...

hi thx for answer i have hp pavilion dv6 2015sw runing on win 7 x64 in my computer runing temp is 46-48c when is 45 my fan stops ,and when is 52 fan starts , generally its hard to make 45c and fan runing and runing;)better for me is when temp is litle greater, like 48-52 fan spin greetings

Anonymous said...

this path is not work for me ;( its the same, fan stop on 45 degrees i want is to stop on 48 or 49 degrees and starts on 54 or 53 degrees please help me

bjohnson said...

Anonymous, try increasing Sub(Local0,0x5) to Sub(Local0,0x10) to see if this will even work. I have nothing else that will do this. Are you sure your Power Options are set to Active?

Anonymous said...

yes i work always on active thx anyway this is not hexydecimal ?

bjohnson said...

Anonymous, yes, it is hex. 0x10 hex = 16 decimal, or use 0xa = 10.

Anonymous said...

hi i know why this dont work in cmd show Table overloading succeeded and it dont change;\ i check in RW everything and it still the original table i try with compiler 4.0 and 3.0.1 this below is in my window cmd
C:\acpi>asl dsdt.asl
Microsoft ACPI Source Language Assembler Version 3.0.1NT [Aug 29 2006, 14:17:49]
Copyright (c) 1996,2006 Microsoft Corporation
Compliant with the ACPI 3.0a Specification
dsdt.asl:
2511: Method(_BQC, 0x0, NotSerialized)
^***
dsdt.asl(2511): warning: not a valid reserved NameSeg
2809: Method(_BQC, 0x0, NotSerialized)
^***
dsdt.asl(2809): warning: not a valid reserved NameSeg
3812: Name(_UPC, Package(0x4)
^***
dsdt.asl(3812): warning: not a valid reserved NameSeg
3819: Name(_PLD, Buffer(0x10)
^***
dsdt.asl(3819): warning: not a valid reserved NameSeg
3862: Name(_UPC, Package(0x4)
^***
dsdt.asl(3862): warning: not a valid reserved NameSeg
3869: Name(_PLD, Buffer(0x10)
^***
dsdt.asl(3869): warning: not a valid reserved NameSeg
3909: Name(_UPC, Package(0x4)
^***
dsdt.asl(3909): warning: not a valid reserved NameSeg
3916: Name(_PLD, Buffer(0x10)
^***
dsdt.asl(3916): warning: not a valid reserved NameSeg
3925: Name(_UPC, Package(0x4)
^***
dsdt.asl(3925): warning: not a valid reserved NameSeg
3932: Name(_PLD, Buffer(0x10)
^***
dsdt.asl(3932): warning: not a valid reserved NameSeg
3957: Name(_UPC, Package(0x4)
^***
dsdt.asl(3957): warning: not a valid reserved NameSeg
3964: Name(_PLD, Buffer(0x10)
^***
dsdt.asl(3964): warning: not a valid reserved NameSeg
6814: Name(_WDG, Buffer(0x50)
^***
dsdt.asl(6814): warning: not a valid reserved NameSeg
8209: Method(_WED, 0x1, NotSerialized)

Anonymous said...

^***
dsdt.asl(8209): warning: not a valid reserved NameSeg
dsdt.asl(4714): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4714): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4720): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4724): warning: \_PR_.C001._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4732): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4732): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4736): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(4740): warning: \_PR_.C001._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(5008): warning: \_PR_.C000._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(5012): warning: \_PR_.C001._PPC may not exist or may not be accessible
scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(8560): warning: SUB may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
asl(dsdt.aml): Image Size=41034, Image Checksum=0xe2
C:\acpi>asl /loadtable dsdt.aml
Table overloading succeeded

bjohnson said...

Anonymous, You only need to worry if you get an "error" messages. You can ignore any warning messages like "warning: not a valid reserved NameSeg" or "warning: \_PR_.C000._PPC may not exist or may not be accessible scope". Other warning messages may not matter either but search the internet to see how others have handle them.
I have no experience for what you are doing. My advice is restore the original code because the added cooling is a good thing.

Anonymous said...

for anyone useing DV6700 or DV6885SE with BIOS F.58 F.56 compatible U should use the modified code, I tested it on DV6885SE with T8100 and it works, the only difference between code below and orignal code provided by OP is that u have to place the code into the if statment of DTSE otherwise the TRH temp will stay at value u specified (in my case it was 26C) with modifed code the TRH does increase by value u specify.
Scope(_TZ_)
{
Name(TPC_, 0x78) //120C Critical level
Name(TP85, 0x6e) //110C Critical level
Name(TPTM, 0x4b) //75C Passive level
Name(TPAS, 0x5c) //92C Warning level
Name(TA85, 0x50) //80C Warning level
Name(DS01, 0x0)
Name(DS02, 0x0)
Name(DSA1, 0x0)
Name(DSA2, 0x0)
Name(TADJ, 0x1a) // 32C Temp Adjustment
ThermalZone(THR1)
{
Method(_TMP, 0x0, NotSerialized)
{
If(ECON)
{
If(DTSE)
{
//Adjust CPU0 to increase fan speed
Store(DTS1, DS01)
// If less than Critical level
If(LLess(DS01, TP85))
{
Store(Add(DS01,TADJ), DSA1)
If(LGreater(DSA1, TP85))
{
Store(TP85, DSA1) //Never adjust higher than TP85
}
}
Else
{
Store(DS01, DSA1)
}
Store(DSA1, \_SB_.PCI0.LPCB.EC0_.ECT1)
//---------------------------------
//Adjust CPU1 to increase fan speed
Store(DTS2, DS02)
// If less than Critical level
If(LLess(DS01, TP85))
{
Store(Add(DS02,TADJ), DSA2)
If(LGreater(DSA2, TP85))
{
Store(TP85, DSA2) //Never adjust higher than TP85
}
}
Else
{
Store(DS02, DSA2)
}
Store(DSA2, \_SB_.PCI0.LPCB.EC0_.ECT2)
//---------------------------------
//Use highest CPU temprature
Store("Current temp is: ", Debug)
//If CPU0 greater then CPU1
If(LGreater(DSA1, DSA2))
{
Store(DSA1, Debug)
Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
Return(Add(0xaac, Multiply(DSA1, 0xa)))
}

Else
{
Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
Return(Add(0xaac, Multiply(DS02, 0xa, ), ))
}
}
Else
{
Store(\_SB_.PCI0.LPCB.EC0_.RTMP, Local0)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_HOT, 0x0, Serialized)
{
If(LEqual(OSYS, 0x7d6))
{
If(LEqual(\_SB_.TJ85, Zero))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
}
}
}

Anonymous said...

Another Note I should Add it seems that at CPU tempreture of 52-53C the fan hits goes 100% until it drops below 45C or so, I have changed the value to 28 which will hopefully trigger fan to hit 100% at 50C or so, with OCCT stress test after 10 min on high data set my CPU went from 40C to 56max (at about 5-6 min of the test) and then drooped back down to 51C. I also should note I am using Arctic silver 5 on my CPU and GPU as well copper shim mod on the northbridge chip set.

The DV 6885SE user.

bjohnson said...

Anonymous, I'm glad to here you got it working. Thanks for posting the information for DV6700 or DV6885SE with BIOS F.58 F.56 compatible.
I see a mistake on line 68 in your posted code. Under the "If CPU1 greater" comment below, the value DS02 should be DSA2.
Not this
Return(Add(0xaac, Multiply(DS02, 0xa, ), ))
Use this
Return(Add(0xaac, Multiply(DSA2, 0xa, ), ))

// Corrected code. Use this code at your own risk.
Scope(_TZ_)
{
    Name(TPC_, 0x78) //120C Critical level
    Name(TP85, 0x6e) //110C Critical level
    Name(TPTM, 0x4b) //75C Passive level
    Name(TPAS, 0x5c) //92C Warning level
    Name(TA85, 0x50) //80C Warning level
    Name(DS01, 0x0)
    Name(DS02, 0x0)
    Name(DSA1, 0x0)
    Name(DSA2, 0x0)
    Name(TADJ, 0x1a) // 26C Temp Adjustment
    ThermalZone(THR1)
    {
        Method(_TMP, 0x0, NotSerialized)
        {
            If(ECON)
            {
                If(DTSE)
                {
                    //Adjust CPU0 to increase fan speed
                    Store(DTS1, DS01)
                    // If less than Critical level
                    If(LLess(DS01, TP85))
                    {
                        Store(Add(DS01,TADJ), DSA1)
                        If(LGreater(DSA1, TP85))
                        {
                            Store(TP85, DSA1) //Never adjust higher than TP85
                        }
                    }
                    Else
                    {
                        Store(DS01, DSA1)
                    }
                    Store(DSA1, \_SB_.PCI0.LPCB.EC0_.ECT1)
                    //---------------------------------
                    //Adjust CPU1 to increase fan speed
                    Store(DTS2, DS02)
                    // If less than Critical level
                    If(LLess(DS01, TP85))
                    {
                        Store(Add(DS02,TADJ), DSA2)
                        If(LGreater(DSA2, TP85))
                        {
                            Store(TP85, DSA2) //Never adjust higher than TP85
                        }
                    }
                    Else
                    {
                        Store(DS02, DSA2)
                    }
                    Store(DSA2, \_SB_.PCI0.LPCB.EC0_.ECT2)
                    //---------------------------------
                    //Use highest CPU temprature
                    Store("Current temp is: ", Debug)
                    //If CPU0 greater
                    If(LGreater(DSA1, DSA2))
                    {
                        Store(DSA1, Debug)
                        Store(DSA1, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
                    }
                    //If CPU1 greater
                    Else
                    {
                        Store(DSA2, Debug)
                        Store(DSA2, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DSA2, 0xa, ), ))
                    }
                }
                Else
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.RTMP, Local0)
                    Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
                }
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_HOT, 0x0, Serialized)
        {
            If(LEqual(OSYS, 0x7d6))
            {
                If(LEqual(\_SB_.TJ85, Zero))
                {
                    Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
                }
                Else
                {
                    Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
                }
            }
        }
    }
}

pnnorton said...

I have a dv6140us and the exact same code as Giorgio23. I have tried the fixes you mention but I don't get any change except the temperature reported by fanspeed changes as you add to it. The only thing I want to check is that you talk alot about setting to an active power management or something. How do you do this. I'm running XP that was originally with the laptop and I see no options and no options in the bios either.

bjohnson said...

pnnorton, I don't have an XP system so I'm not able to help with that.
I would start with a simple test. Change both Active and Passive returned values to see if either gives you the result your looking for.
From
  Return(Add(0xaac, Multiply(Local0, 0xa, ), )) //Active
  and
  Return(Add(0xaac, Multiply(TPTM, 0xa, ), )) //Passive
To
  Return(Add(0xaac, Multiply(0x5a, 0xa, ), ))
  and
  Return(Add(0xaac, Multiply(0x5a, 0xa, ), ))
If that works then you should be able to make the patch work in Active mode or even Passive mode with the fan running at a constant speed, the higher the temp value reported the faster the fan speed.
There are 2 sets of code above to try that I gave to Giorgio23. The first one sets Local variable to the adjusted temp and the second sets Local to the actual temp. I think the second one is the one that works. Good luck.

pnnorton said...

I get no change. I even tried putting higher values in but that just gives me a blue screen. Can you think of any other way to fix this. All I want is the fan running at a constant fast speed.

bjohnson said...

pnnorton, First thing is to make sure Active Cooling is set because nothing is going to work without it. Here is a link I found that explains how to set Active Cooling in Windows XP. I hope its accurate.
http://www.ehow.com/how_6818695_speed-up-laptop-fan.html
If Active Cooling was not set then run the simple test again. If it doesn't work also try setting the "Local" variable to the same value. If neither test works or if Active Cooling was already set, then you may have to be satisfied with buying a cooling pad to help cool your computer. Also run HWMonitor so you can see if the THR1 temp is reporting the value that your set it to.

pnnorton said...

Thanks for your help but I have none of those options listed in that ehow. All my power options dialog allows is to set things like screen turning off. Whats more when I search windows xp power saver or something like that into google images all the screenshots looks the same as mine. I wonder if my computer is weird or the guy that wrote this ehow thought if it is like that on windows vista it will be like that on windows xp. I'm not terribly attached to this operating system and have backed it up regardless so I'm thinking now to give another operating system a try to see if it is any different.

pnnorton said...

Sigh, I tried a linux live dvd to see if it made it any better. I got white lines fading in. Sounds like I'm going to be opening it up again or throwing it away soon. In that case I'll remove the fan cables and do it the hardware way. As well I'll fix the heatsink properly. I mean I'm right in thinking that GPU around 70degrees while idling and getting up to 85degrees when stress tested is too high right?

bjohnson said...

pnnorton, Yes, a max temperature of 85C is too high but your computer may be saved if you can get the max temperature under 80C. For most DV9000 /DV6000 computers the optimal high temperature is 70C for a single heat sink computer and 60C for a dual heat sink computer like mine. I think the hardware fan speed fix (see above) is a temporary option but will give you time. It will also give you an idea of what to expect for a temperature range in case you ever get the DSDT solution to work. You may find that the temperature range is already higher than normal which means you eventually will have to fix it (reflow BGA, add arctic silver, copper shim, improve airflow) or junk it.
Start using HWMonitor (http://www.cpuid.com/softwares/hwmonitor.html) so you can track if the max temperature is continuing to climb.
Why not install a trial Windows 7 and patching the DSDT (send me the code). Most likely that will work since you know many of us have been able to upgrade their DV9000 / DV6000 computers to Windows 7 and patched the DSDT to get the fan speed to increase. Search the internet to see if anyone has done this for your computer.
It all comes down to how much you love your computer? I loved my enough that I didn’t want to part with it so it was worth permanently fixing it and not buying another laptop that may have overheating issues. I am so glad I didn’t give up.

pnnorton said...

Good advice I might try windows 7. I don't really love the computer as it was dead for about 3 years already when I read some stuff and fixed it on friday. I have already had a laptop in between my current one and this one. It will usually stay below 80 degrees only when I stress test it with furmark(??) or something it will get to 85 degrees. The white screen may of just been a linux thing. I remember it happening before but I also tried installing linux before.

AngeGor said...

I have found all of the above interesting. I am not very computer smart, so please bear with me. My dv 9000 is running Windows XP w/ an Intel chip nVidia GeForce GO 7600. I had some difficulty with it a couple of months ago; no video, and found a place to service it. They fixed it and installed a SpeedFan 4.42 program.
What I would like to know is at what temp ranges
should I be concerned to avoid future problems.
I use the machine primarily for gaming (Fallout 3,Fallout- New Vegas, Oblivion, Left 4 Dead, Guild Wars, Neverwinter). Normally (like now), the computer has the following:
GPU:47C
HD0:38C
HD1:31C
Temp1:32C
Core0:34C
Core1:34C
Core:47C
Ambient:0
When I play the games, the GPU and Core temps go up to the mid to upper 50s (52-57C). Should I be concerned? Also, since the repair I bought and use a cooling pad every time I run the computer.

bjohnson said...

AngeGor, your gaming temperature range of 52-57C is what you would expect of a normal DV9000. My temperature range is 3C higher, most likely because your using a cooling pad. For most DV9000 /DV6000 computers the maximum high temperature should stay below 70C for a single heat sink computer and 65C for a dual heat sink computer like mine. I rise my computer about a ½ inch to add space for better airflow which lowers the temperature several degrees when playing games. It’s crucial to increase the space under the computer when you’re playing games or it will overheat because the fan is not efficient enough to get the air to flow adequately.
Can you comment on how the fan is working.
Do your DV9000 computer have an Intel or AMD processor, and does it have one or two heat sinks?
Does the fan run fast when you play games? How are you controlling your fan speed? Is Speedfan controlling the fan speed? I was never able to get Speedfan or any other fan controller software to control the fan speed. For a temperature monitor I prefer HWMonitor.
Did the service shop make any improvements to your computer like air flow, copper shim, replace fan?
I’m not sure if Windows XP can work with the DSDT patch because others have not reported having any success. I know Windows 7 works with the DSDT patch.

Anonymous said...

Thank you very much for this perfect tutorial ! Very useful indeed !
I'm not eager to patch my Windows XP, but I will try the hardware fix and air flow improvements...

Some years ago, I found a very good video on the HP website (the american one at least) about how to "dismantle" my dv9051... There were videos about a large range of models ! Very well done...
But now I can't find them anymore, it seems the access is restricted to selected users !

Do you know if there a way to view those videos ?

Thank you !

bjohnson said...

Anonymous, I added a few disassembly reference sites and videos to the end of my article.

Anonymous said...

Thank you Burt !
The videos on the HP website were of course much much better done, and I really regret they're not available anymore for the public anymore ...
Those ones should be useful anyway !
Thanks a lot !

Anonymous said...

High Burt. Second time poster, was given another dead hp laptop, this time a dv9518tx. Quanta 30CB mainboard with intel t7300 processor. First thing was to reflow the GPU, once done I didn't have any copper around so I just put it back together with a fresh layer of artic silver compound. It then got a fresh windows vista install. Updated the bios to F.5A - dated 03/22/2010. At first it was running warm once loaded, no surprises there. Also the bios, I believe, was backing off the cpu to keep temperature under control. I had look at the dsdt & it was quite different to what I expected and had seen before on my other hp. I added your lines of modified script to my bios, not knowing if it was actually even going to work, not worrying about all the other different lines. Luckily for me it seemed to work straight up, the test session was blackops & second monitor connected with gpuz, coretemp & task manager running. Blackops ran easiliy with temps around 65-67 degrees celsius & no apparent backing off of the cpu, it was a good outcome. If you would like me to post up the modified F.5A bios let me know. Steve

bjohnson said...

Anonymous with "High Burt...", You could post the original code section starting with Scope(\_TZ_). I'd be interested in comparing it with the original DV9000 code.

Anonymous said...

Hopefully this comes through.

Original:
Scope(_TZ_)
{
    Name(TPC_, 0x78)
    Name(TP85, 0x6e)
    Name(TPTM, 0x4b)
    Name(TPAS, 0x5c)
    Name(TA85, 0x50)
    Name(DS01, Zero)
    Name(DS02, Zero)
    ThermalZone(THR1)
    {
        Method(_TMP, 0x0, NotSerialized)
        {
            If(ECON)
            {
                // If Digital Thermal Sensor Enabled
                If(DTSE)
                {
                    Store(DTS1, DS01)
                    Store(DS01, \_SB_.PCI0.LPCB.EC0_.ECT1)
                    Store(DTS2, DS02)
                    Store(DS02, \_SB_.PCI0.LPCB.EC0_.ECT2)
                    Store("Current temp is: ", Debug)
                    Store(DS01, Debug)
                    If(LGreater(DS01, DS02))
                    {
                        Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DS01, 0xa, ), ))
                    }
                    Else
                    {
                        Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
                        Return(Add(0xaac, Multiply(DS02, 0xa, ), ))
                    }
                }
                Else
                {
                    Store(\_SB_.PCI0.LPCB.EC0_.RTMP, Local0)
                    Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
                }
            }
            Else
            {
                Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
            }
        }
        Method(_HOT, 0x0, Serialized)
        {
            // If OS is less than or equal to Vista (Windows 6)
            If(LEqual(OSYS, 0x7d6))
            {
                If(LEqual(\_SB_.TJ85, Zero))
                {
                    Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
                }
                Else
                {
                    Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
                }
            }
        }
        Method(_CRT, 0x0, Serialized)
        {
            // If OS is less than Vista (Windows 6)
            If(LLess(OSYS, 0x7d6))
            {
                If(LEqual(\_SB_.TJ85, Zero))
                {
                    Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
                }
                Else
                {
                    Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
                }
            }
        }
        Method(_PSL, 0x0, NotSerialized)
        {
            If(MPEN)
            {
                Return(Package(0x2)
                {
                    \_PR_.CPU0,
                    \_PR_.CPU1
                })
            }
            Return(Package(0x1)
            {
                \_PR_.CPU0
            })
        }
        Method(_PSV, 0x0, NotSerialized)
        {
            If(LEqual(\_SB_.TJ85, Zero))
            {
                Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
            }
            Else
            {
                Return(Add(0xaac, Multiply(TA85, 0xa, ), ))
            }
        }
        Method(_TC1, 0x0, NotSerialized)
        {
            Return(0x2)
        }
        Method(_TC2, 0x0, NotSerialized)
        {
            Return(0x3)
        }
        Method(_TSP, 0x0, NotSerialized)
        {
            Return(0x1e)
        }
        Name(REGN, "Processor Thermal Zone")
        Name(FMAX, 0x1194)
        Name(FMIN, 0xbb8)
        Method(FRSP, 0x0, NotSerialized)
        {
            Store(Zero, Local2)
            Store(\_SB_.PCI0.LPCB.EC0_.RPM1, Local0)
            Store(\_SB_.PCI0.LPCB.EC0_.RPM2, Local1)
            ShiftLeft(Local1, 0x8, Local1)
            Or(Local0, Local1, Local0)
            Divide(0xf4240, Local0, , Local2)
            Return(Local2)
        }
        Method(FSSP, 0x1, NotSerialized)
        {
            Store(Arg0, \_SB_.PCI0.LPCB.EC0_.TFAN)
        }
    }
}

bjohnson said...

To Anonymous with "Hopefully this...",
Thank you for posting your DV9518tx code. I reposted your message so the code was more readable and added some comments.
My patch should work fine as long as you only replaced the code underneath the DTSE check.
The _TMP process code that controls the reported temperature is identical to the DV9000 but this code also has support for DTSE (Digital Thermal Sensor Enabled) and for “Windows 7” which is the OSYS check on 0x7d6 (Vista or Windows 6).
I think the OSYS checks for Vista and possibly the DTSE check is something I’ll add to my code to see if it makes a difference. I’ll post back if it's useful.

Dzaster said...

How can I identify my motherboard? I have a DV9500 CTO with the max performance hardware that was offered at that time from HP. Grey screen of death is upon me.

I currently have everything apart and will be looking to duplicate what you have compiled here--which is all pure awesomeness!!! I'm wanting to see if I can patch the BIOS as well, like you have.

Thanks

bjohnson said...

Dzaster, To find out the motherboard type I use the program called CPU-Z (cpuid.com). I search the web and there are DV9500 CTO using the Quanta 30CB with an Intel chipset. Good luck with fixing the hardware.

Anonymous said...

Hi Burt,
Thank you for this superb tutorial !
You say: "The air vent for the NVIDIA chip heatsink looks to be about 70% blocked by a plastic connector molding" and you removed it...
Ok, but what was the original reason for such a strange implementation ?
Can it be removed without doing any harm to other parts of the case/components... ?

bjohnson said...

To Anonymous with "Hi Burt...", From an engineering stand point, several things like the plastic connector molding, the plastic tape on the bottom cover air vents and lack of air flow due to inefficient fan blades and slow fan speed at high temperatures make no sense but there they are.
Possible reasons for such a strange implementation:
- I know that there is a single heat sink version of the DV9000 that uses an AMD processer that does not use that vent so it’s possible that it was an oversight.
- The plastic tape on the bottom cover air vents may look better but other than that I can’t justify it with any stretch of my imagination.
- The lack of air flow due to inefficient fan blades and slow fan speed at high temperatures allows the computer to be quieter which some users may appreciate.
I did remove the plastic connector molding at first but it didn't look good so I cut out the extra plastic and it lock into place just fine. It didn’t have any harm to the case or components that I could see.
The important thing is that it doesn’t matter why the reason, it only matters that there are effective and proven solutions to overcome the lack of understanding.
"Better engineering through persistence" - bjohnson

Marco said...

Thanks so much for this great tutorial!
So far I fixed one dv9313ea.
But.... I realy do need help with a 2nd one. It is exactly the same model (dv9313ea) and board (Quanta30BD). So I thought this must be easy.

After loading the patched dsdt table (same one I used on the other machine) with succes I restart the machine. After bios I see windows7 trying to startup (white letters: "Starting Windows..."). I do hear that the fan starts spinning a lot faster than usual so that does work, BUT I do NOT get to see the windows7 coloured icon and windows doesnt start up any further; the screen stays black after that!

so..the fan spins nicely but no windows. ;(

What can be wrong here?
I can restore the pc with F5 and F8 back to normal but of course that doesnt apply the dsdt patch. Tried it over and over but still same issue.

Hope to hear from you!

bjohnson said...

Marco, Several things can cause this but my own experiences would bet the dsdt code may not be the same or there is a coding typo.
Compare the dsdt file to the first dsdt you did to see if there are differences. You could also check it with my original dsdt code that is posted above.
Try using the dsdt file that worked in your other computer.
Check if either the Bios or Windows 7 service pack is different from the other computer.
Make sure you set the Bios to the default settings.
Make sure that Active cooling is set in the Power Options.
Let us know what the problem was so others can learn from your experience.

Marco said...

Finally found the problem and mistakes I made..
I made 2 mistakes/wrong assumptions people can learn from therefore I will share it here:

First try:
since I own a fully working reflowed dv9313ea with the applied DSDT patch I thought life was easy and I just went ahead and copied the AML file from that laptop (same model/same board/OS/BIOS version and Active policy set) onto the second one and loaded the table.
Result was as written above: system didnt start up windows and this made me kind of crazy. ;-p

Mistake & Solution:
the working laptop was 99,99% identical EXCEPT for the installed memory and that is easy to forget I guess.
This I found out after hours of comparing the two ASL files. I finally found a minor difference in one line:
working laptop:
OperationRegion(GNVS, SystemMemory, 0x7fe84dbc, 0x100)
2nd laptop:
OperationRegion(GNVS, SystemMemory, 0x3fe84dbc, 0x100)

So now I found it... redid the whole thing by building a new asl file on the new machine, applying the patch and Eureka@@!! ;-p

Second try and mistake:
another thing I did try yesterday was using the modified ASL file given on this webpage. Since my model and the one described here are same boards and bios I tried it.
This also didnt work because the laptops do differ at some point too.
This was shown when I compared my generated asl with the one I copied from this website. BJohnsons ASL had 3 extra lines in it which mine didnt have:
External (PDC1)
External (PDC0)
External (CFGD)

So... I hope someone can learn from my mistakes.....life is never as easy as it seems! ;-p

Marco said...

O yes, just for the record:
after applying this dsdt patch (using 32 degrees adjustvalue) the GPU temp sank from IDLE 57 degrees Celsius to 45~48 degrees on both machines. So 12 degrees of difference..a WHOLE lot!! Thanks again BJohnson! ;-p

Anonymous said...

Since Equus.exe doesn't run under XP, can someone provide the instructions to get this to work under XP using iasl.exe?

bjohnson said...

Anonymous, As I mention above, equus.exe program does not work with Windows XP so you may need to use the iasl.exe program to extract the DSDT table from the registry (raw binary). If you google for "DSDT iasl.exe" you will find several other sites for doing this.

Larry said...

I found this site and used it exaclty as instructed, it worked perfectly. Running a DV9200CTO Intel processor, was a Vista machine. I wiped it completely and installed XP Media Center, loaded all the drivers and such, running with STAT turned off. I thought maybe it was the xp that wouldn't run the fan (except slow) this has dropped my temps by 10-11C. Thanks much, Larry Oh and xp will run equus.exe you just have to get it on the C:\ACPI file and make sure it is the executable not the shortcut that xp likes to put in the file. Dig deeper into you computer and find the exe file.

Craigpv2d said...

Burt, I would like to hook up a mini slide switch to essentially disconnect the two fan wires you mentioned. I will mount it in the unused cover where the optional HDMI port would go. (HP DV9010US). My question is this; why did you disconnect both wires? Wouldn't disconnecting just the PWM wire suffice? Of the two, which one is which?

Craig
choaglund@wi.rr.com

bjohnson said...

Craigpv2d, Hooking up a mini slide switch was my first choice over a fixed resistor but I wasn’t able to find a 0-10 Ohm 0.5 watt linear mini slide switch potentiometer for a good price? The other problem was that you won't likely find one that is rated to go smoothly through the resistance range starting from 0 ohms.
I’ve forgotten much of my PWM fan research but I believe the Yellow wire is the Sense line and the Blue is the PWM control line. I tried removing one wire at a time for full on fan speed but that caused the fan to not run at all. Adding resistors to either wire won’t work either because the signal is modulated. I have also read about guys that have added circuit control modulation devices to vary the fan speed but that’s a lot of work and it is also hard to find a place to put it.
Let us know if you get this working and the place you got the mini slide switch potentiometer.

Craigpv2d said...

Burt,
What I had in mind was a simple DPDT (on-off-on) slide switch. One position would be stock, (both wires connected), one would be full speed, (Both wires open). I'm wondering what the current draw of the fan would be.

bjohnson said...

Craigpv2d, Below are some fan part numbers and specifications.

Fan/heat sink assemblies:
For Intel processors: 434678-001
For AMD processors: 438606-001

Fan Part Numbers:
KSB0605HB(-6L78), 7X30W2R, KDB05605HB(6C14)

Power Rating:
Voltage: 5V. Current: 0.40A.

I got to thinking you could do a software switch using a hotkey to change the Power Option between Active and passive cooling. Then change DSDT patch code for the "Passive level" below to a level that runs at full speed. I never tried this but it would be worth trying instead of doing all the hardware work.

Name(TPTM, 0x4b) //75C Passive level

Change 0x4b to:
0x5c //92C Warning level
or
0x6e //110C Critical level

Larry said...

Burt, here is an interesting problem I ran into. Like I said earlier on my dv9200cto runing xp media center, my exact same computer but with a higher processor T7100 and running windows 7, this will not load for me, same bios F.2E when I load I get
Error: Count not access the registry path: System\CurrentControlSet\Services\ACPI\Parameters\DSDT\HP____\30BD____\06940000
Ive tried it twice and even tried to load the dsdt/asl from the xp and nothing works, any idead?

bjohnson said...

Larry, Did you try running as Administrator?

Larry said...

Burt, You are amazing, sorry I've only been on windows 7 for a day. Figured it out but when logged in as administrator it would only let me into c:windows\system32 so I copied the ASCI file there and ran it and it worked. Thanks now 4 successful rewrites on dv9000's this one only went down 9`C but has a much faster processor probably more heat, thank you
PS it kicked out my intel pro1000 driver and my wireless driver but it recovered on its own.

Rubidze said...

Hello BJ! I went through this blog couple of times and tried few modifications. I have similar model DV6000 as Giorgio23 and very similar DSDT. I tried codes you suggested to him, but all I got was higher value for THRM temperature in CPUID Hardware Monitor. No effects on fan at all. If it helps, my Motherboard is 30D0, Bios version F.34. I got AMD Turion 64 X2 Processor, and GeForce 8400M GPU. Hope you can help me out on that one. Following is copy of my original _TZ Scope:
Scope(\_TZ_)
{
Name(TPAS, 0x58)
Name(TPC_, 0x5f)
Name(TPTM, 0x4b)
ThermalZone(THRM)
{
Method(_HOT, 0x0, Serialized)
{
Zero
If(LEqual(OSYS, 0x7d6))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
}
Method(_CRT, 0x0, Serialized)
{
Zero
If(LLess(OSYS, 0x7d6))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
}
Method(_SCP, 0x1, Serialized)
{
Store(0x0, CTYP)
}
Method(_TMP, 0x0, Serialized)
{
If(ECON)
{
Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
Store(\_SB_.PCI0.EC0_.RTMP, Local0)
Release(\_SB_.PCI0.EC0_.MUT0)
Store("Current temp is: ", Debug)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_PSL, 0x0, Serialized)
{
Return(Package(0x1)
{
\_PR_.CPU0
})
}
Method(_PSV, 0x0, Serialized)
{
Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
}
Method(_TC1, 0x0, Serialized)
{
Return(0x2)
}
Method(_TC2, 0x0, Serialized)
{
Return(0x3)
}
Method(_TSP, 0x0, Serialized)
{
Return(0x64)
}
Name(REGN, "Processor Thermal Zone")
Name(FMAX, 0x1194)
Name(FMIN, 0x7d0)
Method(FRSP, 0x0, NotSerialized)
{
Store(0x0, Local2)
Store(\_SB_.PCI0.EC0_.RPM1, Local0)
Store(\_SB_.PCI0.EC0_.RPM2, Local1)
ShiftLeft(Local1, 0x8, Local1)
Or(Local0, Local1, Local0)
Divide(0xf4240, Local0, , Local2)
Return(Local2)
}
Method(FSSP, 0x1, NotSerialized)
{
Store(Arg0, \_SB_.PCI0.EC0_.TFAN)
}
}
}

Rubidze said...

One more thing to add I noticed. In CPUID Hardware Monitor value of THRM goes up to 95 and then stops. Core temperatures are then about 70. But when giving more load to CPU, then Core temperatures rises and THRM value remains the same. While Core temepratures raised, I heard how fan started to blow little more. Could it be that In my case Bios regulates fans by Core temperatures, not THRM value? And why THRM value goes only up to 95?

bjohnson said...

Rubidze, What OS are you running?
My patch has only been tested with W7 with Intel CPU. I know others have had issues with XP and AMD CPU but I'm not sure if any got it working.
Are you adjusting the Local0 value or using the original?
Maybe the Method(FRSP) method is an additional place to work on.

Rubidze said...

I appreciate your quick reply and support on this! I'm under W7 32b. Haven't changed Local0 value. Don't even understand what it does. The code that gives me described situation (higher THRM value, no change on fan, 95 degree thing) is here:
Scope(\_TZ_)
{
Name(TPC_, 0x5f) // 95C
Name(TPAS, 0x58) // 88C
Name(TPTM, 0x4b) // 75C
Name(TADJ, 0x1A) // 26C Temp Adjustment
Name(DS01, Zero)
Name(DSA1, Zero)
ThermalZone(THRM)
{
Method(_TMP, 0x0, Serialized)
{
If(ECON)
{
//Adjust CPU0 to increase fan speed
Acquire(\_SB_.PCI0.EC0_.MUT0, 0xffff)
Store(\_SB_.PCI0.EC0_.RTMP, Local0)
Release(\_SB_.PCI0.EC0_.MUT0)
Store(Local0, DS01)
// If less than Critical level
If(LLess(DS01, TPC_))
{
// Adjust the temp
Store(Add(DS01,TADJ), DSA1)
If(LGreater(DSA1, TPC_))
{
//Never adjust higher than TPC_
Store(TPC_, DSA1)
}
}
Else
{
Store(DS01, DSA1)
}
Store("Current temp is: ", Debug)
//Store(DSA1, Debug)
Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
}
}

bjohnson said...

Rubidze, You are embarking on new territory so before you go deeper make sure you have an image backup of your computer in case you lock it up and are not able to get W7 running. I had to restore my system once because the patch locked W7 on startup. I also had W7 startup issues where it ran very slow but eventually was able to restore the original DSDT and not have to restore from my backup.
After that start testing with your original code and add the following patch to first check if you get the fan to speed up.
// At the top section add this
Name(TADJ, 0x20) // 30C Temp Adjustment

// In the Method(_TMP) method replace the Return function with this
Return(Add(0xaac, Multiply(Add(Local0,TADJ), 0xa, ), ))

This will add 30C to the temperature. If that doesn’t do than double the 0x20 value to 0x40. If that doesn’t work I’ll think of something else to try.
Once you find something that works I can add the remaining code to limit the temperature so it does not go above the critical level.

Rubidze said...

Hi again! I have a clean Windows, and no data so nothing to worry about. I tried to compile with suggested modifications, but no luck. I get:
dsdt.asl(6860): error: unexpected ASL term type
And on the line 6860 there is word: Zero. You can see this in my original code I posted yesterday. Then I tried to compile original aml file and got the same error. So it appears that asl doesn’t understand something from my original file. But then how did it decompile this? I’m totally lost now.

bjohnson said...

Rubidze, This can occur when the compiler is a different version than what was originally used. There are multiple version available so try a newer version.

Rubidze said...

Thanks for your support! I tried Compilers found from here: http://msdn.microsoft.com/en-us/windows/hardware/gg463220 and here: http://www.acpica.org/downloads/binary_tools.php . None of them work. When I manage to get an output aml file, then I still get errors and it is smaller than original aml file. So it seems that even with original code it leaves something out when compiling. Maybe HP included something “special” in their new F.34 bios? Would it be any help if I upload my whole original aml file to somewhere?

bjohnson said...

Rubidze, I would try removing the Zero statement to see if your original code compiles and works the same. I suspect it will work fine. I've read other blogs with similar issues. If you read the section 3.4.2.3 Microsoft’s ASL Decompile Bug in this article you will read about the issue I had with the de-compiler.

Rubidze said...

Hi! Removed Zero and then compiler gave only warnings. Tried suggested modifications. Then I loaded a table and result was higher THRM value in HW monitor, but no effect on fan. Then I gave some load to CPU and fan started to spin little faster as usual. And of course not giving enough air flow to cool CPU down. When CPU temperature goes even higher, fan start spinning faster, so I know it wasn’t at maximum on 80 degrees. Too bad, there is no program, that monitors HP fan speed. At least none, that I would know. Then I increased this value to 40 Which gives us 64 degrees more than actual. That resulted system to boot up and immediately go to standby. Probably because hi though being too hot. Restored Windows from last good configuration and got the previous 32 degree rise. I thought this information is somehow written to bios and controlled over there, but it appears, it is only modification to Windows. Meanwhile I found one more solution to fight HP DV6000 temperature problems. It’s not as good as speeding up the fan, but at least does something. I downloaded NVIDIA System Tools from http://www.nvidia.com/object/nvidia_system_tools_6.06.html and go an option to create system configuration profiles which will lower GPU clocks when it gets too hot and resume normal operation when it is cool enough.

bjohnson said...

Rubidze, Don't give up yet. I still think the FRSP method is the key. As mentioned above by bsdfree, the FRSP (Fan Read Speed) method gets the upper bound on the fan rotation period and FSSP (Fan Set Speed) method turns the fan on and off. The FMIN and FMAX methods specify the min and max fan speeds: 0x7d0 = 2000 and 0x1194 = 4500. Maybe if you increase and decrease the value returned by the FRSP method you may see positive results.
You will find others working on this if you search the web for DSDT FRSP FSSP.

jaspm2004 said...

hi there, i have a dv6000 and i want to patch the dsdt using your method, but i dont have this registry key: HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\HP____\30BD____\06040000

i only have: HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\NVIDIA\MCP67\06040000

under acpi\dsdt, what should i do? im usin win xp...

thx

bjohnson said...

jaspm2004, As mentioned above, my patch has only been test on Windows 7. If you search the web you may find other solutions for Xp.

This site (http://notebookequus.blogspot.com/2008/09/patching-dsdt-table.html) says:
"Found an alternate program to extract the DSDT tables here - http://tonycr.wordpress.com/xp_dsdt/. It says it's for 7 only, but it worked fine on XP. Just ignore the patch section, that's intended for Eee PC's I think."

If you get you patch working then please post you fix.

Anonymous said...

Burt,

Thank You for posting the detailed DSDT info here. I learned a lot,,as a first timer,at this. Unfortunatly,,I could not get the cooling fan to kick on as you were able to . After about 4 days,,of off and on,,,at it,,trying,, I had to give up. I will post my particular HP Pavilion info:

This is originally an HP Pavilion DV9700.
The mobo died,,in it,( This is a co-workers laptop).
He purchased a new mobo off of Ebay,that was suppose to be an dv9700 model.
After getting it back together it shows up in the BIOS as an dv9000.
it came with bios v.42. I updated bios to latest and final v.43.
This is the AMD based mobo BTW.
This mobo also will not accept the original wifi adapter,as well. I get the error ; 104-The wireless network adapter is not a supported adapter" and will not go any farther in post. that is another story though.

So,,I am able to get the TEMP1 to show up the increased 32C temp,,( after the dsdt patch you have provided),in both HWMonitor, and FanSpeed,,,,,but without the actual CPU0 temp showing increased,I am guessing the cooling fan will not kick on?
I also tried all the various revisions you have posted for others, appended to this how to,,and I can ONLY get TEMP1 to show the increased false temp,,and NEVER the actual CPU temp.

thanks again,
Barry

bjohnson said...

To Anonymous said "Burt, Thank You ...":
I don't have a DSDT solution for a DV9000 AMD mobo. Also, any solution is dependent on the OS your running. The DSDT for Windows 7 is different than for XP. I commented above that there is an HP DV9000 AMD BIOS version that runs the fan at full speed. There are other guys posting on the internet that are working on the DV9000 AMD mobo DSDT solution but I have not kept up on there progress. I can't suggest anything without seeing your DSDT code but as I mentioned above, if your code has a method called FSSP (Fan Set Speed) you should try making changes to that code as will. If you find anything positive that works please post back your results. Thanks

Anonymous said...

Hey just wanted to throw this out there if anyone else is having issues. Unfortunately, I have no idea what temp everything was running at prior to my fix, but I can say I've never seen it above 57 degrees Celsius since I did the following:

1) Used hole saw with drill to bore cleanly through chassis plastic.

http://i.imgur.com/XEIeR.jpg

2) Used a small window screen patch kit piece to cover hole from the inside to keep out as much as possible while allowing maximum air flow in/out. Used hot glue to hold to chassis.

http://i.imgur.com/tHl1R.jpg

3) Final result you can see where GPU sits right underneath screen. I use a laptop cooler with a fan that sits underneath this opening, pulling the hot air out.

http://i.imgur.com/FUjsg.jpg

Took probably 15 mins to do. Looking at some of the other temps listed, it looks like its working well. I wish I had gotten temp figures before the fix. This is a good laptop when it stays cool.

bjohnson said...

Anonymous said... "Hey just wanted to..."
Nice job. I have seen others do this as well and even added a small fan that draws air in in order to enhance airflow circulation with the built-in fan.

Pascual said...

can I use your patch on f.25 bios.? quanta 30bc. the dsdt of it seems almost the same as yours. WB asap

Pascual said...

nvm I updated the bios to F.29. hope it works though

bjohnson said...

Pasqual, I cannot say if this patch or something similar that others have tried will work for sure. It works for my DV9000 which has an Intel processor (not AMD) running Windows 7.

Anonymous said...

Hello guys:

I´m trying to reduce the fan noise on my DV9000, i dont have overheating problems, but i have noise problems.

I have read carefully this post and i think that someone can help me to mod the DSDT to reduce fan speed.

bjohnson said...

Anonymous said "Hello guys", I have read about noise issues like this on other sites but not for the DV9000 computer (model EZ379AV Quanta 30BD) that I have. This patch has only been tested on computers with the Intel processor (not AMD) that is running Windows 7.

Anonymous said...

So ,Ive been messing around with this and found out why Giorgio23 subroutine did not work. I have the same subroutine in my AMD/GeForce 6150 Dv6000 laptop. This subroutine is only invoked when you boot up or switch between passive/active power management profiles. The Dv9000 intel must have a pointer to rerun this routine. I think I can work around it by manipulating some variables in the Embedded Controller. I'll keep you posted. If you could look into your program and see how it returns to the subroutine, I it would be greatly appreciate....Mike

Anonymous said...

Benjamin Rossington here.

I literally just found your blog on this issue! This laptop of mine has had the MB replaced 3x, the hinge replaced 5x, the power plug on the machine replaced 5x, and the wifi adapter replaced 3x.

All that happened BEFORE it was given to me.

When I received the laptop, it wouldn't power on.

the first thing I did was remove the battery, take it all apart as far as a single screwdriver would get, blow it all out, and re-assemble.

It had run fine for the next 2 years.

I use this machine with XP MCE hooked up to an external LCD as a TV in my bedroom. the machine is typically on 12-16hrs a day, sitting on top of a metal wire shelf unit (originally intended to add a shelf in a pots and pans cabinet, holds laptop about 8inches off desk).

Last night, with the PC still on, while watching TV on it, the screen got a sudden blue tint to it. I jumped up, hit Fn+F4 to toggle internal screen. The internal screen looks fine.

So I thought the monitor was the culprit. Hooked up another PC to it, no color issues at all.

I've been aware of the heating issues since the day I got this laptop.

It has almost ALWAYS run hot... and to be honest, that's why it became 'just a TV'.


Some time this week I will take it all apart and try the fan wire trick... but I am nervous, as I would like to retain the ability to reconnect the wires at a later date (if possible). You pictures look like you literally cut the wires cleanly (can't tell right now, as my WIFI keeps cutting out from the heat... if I can get this colder, the WIFI gets stronger...???)

I am also thinking of cutting out the part(s) of the case that covers the fan... like, literally cutting it out entirely. I don't care if stuff can fly into this machine, it sits on that metal shelf I mentioned. Heck, I might even get some window screen and cover the hole(s) with that.

Has anyone thought of building a whole new case/chassis for this machine? At one point I had begun to build a plywood box for this one, but gave up when I realized the result would be +4x heavier.

I have also pondered the idea of hard-wiring more fans... or changing the internal fan to a bigger one... but I am nervous as all hell that I will fry the MB this way.


Now, the hinge is busted real real bad (screen wobbles back and forth) and I cannot close it (the hinge is in 3 or more pieces, held in place now by a couple feet of electrical tape).

Trying to move the hinge results in a slow slow sloooooow dimming of the screen. this has XP, so it isn't some power saving feature kicking in... it looks like the backlight gets LESS voltage at various hinge positions. To be honest, I can deal with that, as I almost exclusively use an external monitor.


I have also pondered just changing the color profile to compensate, but that won't keep it form getting worse.

Even when this machine is first powered on, the external screen has the blue tint. there appears to be no other issues (aside from the hinge and whatnot).

I believe the fan trick will help the heat, but no the blue tint.

I also can't seem to find the 'coin trick', but that might just be my finicky wifi card...

Just wanted to post! I'll update ya on what happens when I get to trying stuff...

bjohnson said...

Anonymous said "So ,Ive", I'm sorry but I'm not sure what you mean by "how it returns to the subroutine" but my full DSDT.ASL file is posted above is you want to have a look. The Windows 7 DV9000 computers call the _TMP methed when the Power Options "System Cooling Policy" is set to Active. If its set to Passive then it calls the other Passive cooling methods that are marked with comments in my code.

bjohnson said...

Benjamin, I pulled out the fan wire connector leads and then put heat shrink tubing around them to protect the exposed leads. That way you can reconnect them if you what to try the DSDT patch. Unfortunately the patch I provide is for Windows 7.

panosvo said...

Very nice tutorial, already had to change one motherboard and had to reflow the new one (oven 200C for 10 min), now I did the DSDT patch and its working very nice, the fan noise is not so annoying considering that my laptop will live longer. I have an intel chipset.

Anonymous said...

Hi, I have a dv6-1203ax which runs hot but the fan is slow. It doesnt get to full speed until the cpu is around 85C.
I tried this about a year ago but from a different set of instructions and ended up changing the screen brightness instead of fan speeds. Could you patch this for me?
There might be an extra closing brace at the end, its from the bottom of the file. http://pastebin.com/zTZgrQxx

bjohnson said...

Anonymous said "Hi, I have a dv6-1203ax", Your computer is similar to several that could not get a patch to work. I tried working with Semih (See above) and I think he gave up in frustration. All I can suggest is to try using some of the test code I gave him (see below) to see if you get a favorable response.

------------------------------------------
Try this for a test with your original code. TPAS should be less than TPTM.
Name(TPC_, 0x5f) // 95C Critical level
Name(TPTM, 0x32) // 50C Passive level
Name(TPAS, 0x2d) // 45C Warning level

As a test try adding 32C to your original code.
Store(Add(\_SB_.PCI0.LPC0.EC0_.RTMP,0x20), Local0)

If that works, then try replacing my code with this to see what happens.
Store(DSA1, Local0) // Store adjusted temp to Local0

Don't forget that this code patch only works when the Power Options System Cooling policies are set to Active and not Passive. In Windows 7, Look in the Control Panel for "Microsoft IT Customized Peak Plan (Laptop) Change Panel Settings /Change Advanced Power Settings/Processor Power Management/System Cooling Policy" and set the options to Active.
------------------------------------------
Hope this helps

Phil1011000 said...

I have a Quanta 30BD board with F.2E BIOS, and Vista x86. I tried the patch and nothing changed. I couldn't find an active/passive cooling option, but it should be on active whenever plugged in, right?

Anonymous said...

I have a Quanta 30BD board with F.2E BIOS running Vista x86. I tried the patch and nothing seemed to change, including temp readings from speedfan. I couldn't find an active/passive cooling option, but it should be on active whenever plugged in, right?

bjohnson said...

Phil1011000, Are you running Window 7 and is the an Intel processor? If not then this patch will not work for your computer. It is important to find the active cooling setting because its not always defaulted to active when your on AC power.

Phil1011000 said...

Its an Intel CPU, but its running Vista. So there is no way to increase fan speed other than the hardware method, or upgrade to Windows 7?

bjohnson said...

Phil1011000, Sorry but that the size of it. You may search the web for someone thats done a DSDT patch for Vista.

Geoffzie said...

Thank you for your work on this. But I agree that just fixing the video chip doesn't solve the problem ... you've got to reduce the heat buildup.

I had purchased an HP DV9000 with an AMD CPU and bad video chip from eBay ... the laptop would turn on, but no video, either on the LCD, or an external monitor.

I repaired the board by placing it in the oven at 450 F. for about 3 minutes ... I know the solder melting point is much lower than this, but I wanted to make sure the heat penetrated the joints, and I assumed that if the overheating damaged the GPU solder points ... there were possibly other MB components nearby that were loosened as well. I simply removed the black plastic tape, the battery, the CPU and other removable components ... I used no aluminum foil ... after 3 minutes, I turned off the oven and let it cool down with the oven door open ... MB fixed!

A couple of side notes ... I discovered HP made two different heatsinks for these models, and both use copper heat tubes ... but on mine, the GPU and CPU pads were aluminum. But while searching eBay, I noticed that there were HP heatsinks with COPPER pads for CPU and GPU rather than aluminum ... obviously, copper dissipates heat almost twice as good as aluminum! I purchased one for $8.00. (Make sure you're buying a COPPER one ... the first one I purchased their photo showed copper ... but it was aluminum when I received it).

And, rather than use a copper penny (they're not very flat, unless you file them down) ... I used a piece of 16GA. copper about 1" x 1.5" under the video chip. Most people simply use a piece of copper the same size as the factory non-metallic pad. But since this is acting like a radiator in a car ... the bigger it's surface area, the more it will dissipate heat away from the Video chip.

The second thing is, there IS a GPU heat sensor in the MB ... at least on the AMD models. I installed a free program called "CPUCool" ... and it senses CPU1 - CPU2 - GPU and HHD temperatures ... so there has to be a GPU sensor in there somewhere.

The end result: the CPU1 temperature at idle is 41 degrees C. ... and the GPU temperature at idle is 50 degrees C. These models are designed very poorly in that the GPU is located AFTER the CPU ... so CPU heat passes over the GPU ... hence the higher GPU temperature. All these numbers are WITHOUT modifying factory fan speeds ... that's my next step.

I'm looking at fan control programs now (since your fan mods were on an Intel board, I didn't figure they'd work for me), so my question to you is: you mention an AMD Bios fix that runs the fan at full speed ... I've updated my Bios to the latest version and I don't see this ... do you have a link to this?

Again, thanks for your work on this.

bjohnson said...

To Geoffzie, I read there was an DV9000/DV6000 AMD BIOS update (I think its version F.42) that allowed the fan to be controlled. I found a post that refers to this at
http://h30434.www3.hp.com/t5/Notebook-Operating-Systems-and/Looking-for-Fan-Speed-control-program-for-a-dv6000-series/td-p/268430
Even thought my cooling modifications continue to do a fairly good job at keeping my computer cool, I still think that the greatest gain in cooling my computer would be to replace the inefficient fan or the fan blade. There is very little airflow from the DV9000 as compared to the other computers. If anyone knows of a better fan or fan blade replacement then please post it here for the rest of use to benefit.

Geoffzie said...

bjohnson, I updated to the latest Bios F.43 (I had F.42)... so contrary to what that hp site says, the fan still doesn't run full speed.

I did however, try your trick of cutting the white and yellow wires to the fan (since I had a spare fan, I had nothing to lose)... and now the fan runs full speed, with the resulting temperatures at idle:

CPU = 37 degrees C. and GPU = 46 degrees C.

The fan solution may be a second fan. I purchased a 5v fan from eBay measuring 40mm x 40mm x 10mm high. I measured, and it will fit perfectly between the rear of the heatsink, and the number 1 hard drive bay ... I just have to cut a 1.5" hole in the bottom about 3" from the left end ... and the fan should be installed to draw cool air from under the laptop, and blow against the motherboard (this would be very near the Video chip).

The only thing I haven't figured out is, where to connect for the 5v ... although some have wired into the USB ports.

Haven't tried it yet ... but I have an extra base, so I'd like to see what difference it makes in temperature reductions ... since I already have some benchmark temperatures.

panosvo said...

When compiling I get a lot of errors, I tried it also with version 4, I have an HP Pavilion dv9000, Windows 7 64bit, with intel chipset, motherboard 30BD and firmware F2E, any help here:


dsdt.asl:

1633: Name(_WDG, Buffer(0x50)
^***
dsdt.asl(1633): warning: not a valid reserved NameSeg

2508: Method(_WED, 0x1, NotSerialized)
^***
dsdt.asl(2508): warning: not a valid reserved NameSeg

3398: Method(_BQC, 0x0, NotSerialized)
^***
dsdt.asl(3398): warning: not a valid reserved NameSeg

3646: Method(_BQC, 0x0, NotSerialized)
^***
dsdt.asl(3646): warning: not a valid reserved NameSeg
dsdt.asl(323): warning: CFGD may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(323): warning: CFGD may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(325): warning: CFGD may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(325): warning: CFGD may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(351): warning: CFGD may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(351): warning: CFGD may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(353): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(353): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(355): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(355): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(355): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(357): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.
dsdt.asl(357): warning: \_PR_.CPU0._PPC may not exist or may not be accessible s
cope.
Use the External compiler directive if this object is defined in a different tab
le.

dsdt.asl(624): warning: PDC0 may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab

dsdt.asl(633): warning: PDC1 may not exist or may not be accessible scope.
Use the External compiler directive if this object is defined in a different tab
le.

asl(dsdt.aml): Image Size=30292, Image Checksum=0x96

bjohnson said...

To panosvo, All of these are typical warnings that can be ignored.

panosvo said...

Yes but when i applied it, windows want boot, restart all the time, i had to do a system restore to fix it.

bjohnson said...

To panosvo, Since your system and versions are the same as mine you can try my DSDT.ASL file posted above. Also try using the other ACL version (3.0.1 and 4.0).

panosvo said...

I have tried your dsdt.asl , but after i flash it, windows want boot, I have to make a system restore to fix it.

bjohnson said...

To panosvo, My system is 32 bit which may be the issue. Can you make your DSDT.ASL publicly available? Or you can compare my DSDT.ASL with yours to see if there are differences.

panosvo said...

Here I give you links for of my asl files, original and patched.

https://www.dropbox.com/s/7mymwvawbgslgd7/dsdt%20original.ASL

https://www.dropbox.com/s/m03wa902ljwb1js/dsdt%20patched.ASL

bjohnson said...

To panosvo, I found the problem. Read the last section "3.4.2.3 Microsoft’s ASL Decompile Bug". Make that correction and it should work.
Your DV9000 DSDT code is slightly different than mine in other areas so that may explain why my code didn't work. For the record, what is your exact model number?

panosvo said...

I would like to say when i compile the patched dstdt I dont get an aml file. So i make the correction "3.4.2.3 Microsoft’s ASL Decompile Bug" and then after the compilation I get the warnings i posted on" panosvoMay 19, 2012 10:50 AM". After that an aml is generated, but applying it and then reboot= windows want boot laptop restarts all the time.

panosvo said...

When i try to compile my patched ASL, with the asl command there is no aml file created. So i make the correction with the "3.4.2.3 Microsoft’s ASL Decompile Bug" and an aml file is created but with the above mentioned many warnings. If i load this aml file then windows 7 want boot, and I have restarts...

my model number is HP pavilion dv9000
motherboard Manufacturer Quanta,
model 30BD 66.42
chipset i945PM , Rev.03
Southbridge 82801GHM, Rev. B0

Bios F.2E

bjohnson said...

To panosvo, I think this may be a 64 bit issue. Have you check the regestery location below to make sure your using the right key name.
HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\HP____
Also you may need a 64 bit version of equus.exe and the compler or there may be an option for 64 bit.

panosvo said...

The registry key is ok, but I cannot find or maybe there is no 64bit equus.exe

panosvo said...

I think i will do the white cable cut and 2 Ohm fix sometime, now in Greece is summer with room temp max 29 C (84 F) and the gpu temp is max 61 C (142 F)

Andew said...

Hey bjohnson. I want to let you know that my laptop still runs fine after 2 years from using your methods posted on your blog. Not even a problem, I played lots of GPU hungry games like Sims 3, Portal 2, Half Life 2, Counter Strike Source, Day Of Defeat Source. The highest temperature I achieved was 65C while doing ALT-TAB within Sims 3 (with all graph details set to maximum). Thanks again, your ideas saved dv6000 / dv9000 laptops from R.I.P. I published your solution on Softpedia Romanian Forum, maybe there are others from my country who need assistance ! Cheers and thumbs up !

Luís said...

Hello.
I'm looking at my dsdt code but is different from yours.
Can you help me? Here´s the code:
Scope(_TZ_)
{
Name(TPC_, 0x78)
Name(TP85, 0x6e)
Name(TPTM, 0x4b)
Name(TPAS, 0x5c)
Name(TA85, 0x50)
Name(DS01, Zero)
Name(DS02, Zero)
ThermalZone(THR1)
{
Method(_TMP, 0x0, NotSerialized)
{
If(ECON)
{
If(DTSE)
{
Store(DTS1, DS01)
Store(DS01, \_SB_.PCI0.LPCB.EC0_.ECT1)
Store(DTS2, DS02)
Store(DS02, \_SB_.PCI0.LPCB.EC0_.ECT2)
Store("Current temp is: ", Debug)
Store(DS01, Debug)
If(LGreater(DS01, DS02))
{
Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
Return(Add(0xaac, Multiply(DS01, 0xa, ), ))
}
Else
{
Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
Return(Add(0xaac, Multiply(DS02, 0xa, ), ))
}
}
Else
{
Store(\_SB_.PCI0.LPCB.EC0_.RTMP, Local0)
Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
}
}
Else
{
Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
}
}
Method(_HOT, 0x0, Serialized)
{
If(LEqual(OSYS, 0x7d6))
{
If(LEqual(\_SB_.TJ85, Zero))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
}
}
}
Method(_CRT, 0x0, Serialized)
{
If(LLess(OSYS, 0x7d6))
{
If(LEqual(\_SB_.TJ85, Zero))
{
Return(Add(0xaac, Multiply(TPC_, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TP85, 0xa, ), ))
}
}
}
Method(_PSL, 0x0, NotSerialized)
{
If(MPEN)
{
Return(Package(0x2)
{
\_PR_.CPU0,
\_PR_.CPU1
})
}

Luís said...

End of the code...
Return(Package(0x1)
{
\_PR_.CPU0
})
}
Method(_PSV, 0x0, NotSerialized)
{
If(LEqual(\_SB_.TJ85, Zero))
{
Return(Add(0xaac, Multiply(TPAS, 0xa, ), ))
}
Else
{
Return(Add(0xaac, Multiply(TA85, 0xa, ), ))
}
}
Method(_TC1, 0x0, NotSerialized)
{
Return(0x2)
}
Method(_TC2, 0x0, NotSerialized)
{
Return(0x3)
}
Method(_TSP, 0x0, NotSerialized)
{
Return(0x1e)
}
Name(REGN, "Processor Thermal Zone")
Name(FMAX, 0x1194)
Name(FMIN, 0xbb8)
Method(FRSP, 0x0, NotSerialized)
{
Store(Zero, Local2)
Store(\_SB_.PCI0.LPCB.EC0_.RPM1, Local0)
Store(\_SB_.PCI0.LPCB.EC0_.RPM2, Local1)
ShiftLeft(Local1, 0x8, Local1)
Or(Local0, Local1, Local0)
Divide(0xf4240, Local0, , Local2)
Return(Local2)
}
Method(FSSP, 0x1, NotSerialized)
{
Store(Arg0, \_SB_.PCI0.LPCB.EC0_.TFAN)
}
}
}

bjohnson said...

Luís, You need to provide details of your type of computer, the mother board and OS. Thanks

Luís said...

Thats right.. My bad!
It´s a HP DV9790EP, board is a Quanta 30CB, bios F.5A, processor Core2Duo T9300, 4GB RAM, Nvidia 8600GS.
I've done a reflowing because my nvidia gpu had the famous problem (in my case it doubles the image on the screen).
My idle temps are about 50ºC for GPU and 40ºC for THR1
Thanks

bjohnson said...

Luís, I think the code you posted looks like another bit of code above that I posted with the patch, except I noticed a mistake I made so I posted it again with the correction below. You can find the other post above if you search this page for "If(DTSE)". The mistake was the second occurence of the line
If(LLess(DS01, TP85))
It should be
If(LLess(DS02, TP85))
Good luck.

Scope(\_TZ_)
{
 Name(TPC_, 0x78) //120C Critical level
 Name(TP85, 0x6e) //110C Critical level
 Name(TPTM, 0x4b) //75C Passive level
 Name(TPAS, 0x5c) //92C Warning level
 Name(TA85, 0x50) //80C Warning level
 Name(DS01, 0x0)
 Name(DS02, 0x0)
 Name(DSA1, 0x0)
 Name(DSA2, 0x0)
 Name(TADJ, 0x20) // 32C Temp Adjustment
 ThermalZone(THR1)
 {
  Method(_TMP, 0x0, NotSerialized) // Current temp
  {
   If(ECON) // Embedded Controller Active Cooling Enabled
   {
    If(DTSE)
    {
     //Adjust CPU0 to increase fan speed
     Store(DTS1, DS01)
     // If less than Critical level
     If(LLess(DS01, TP85))
     {
      Store(Add(DS01,TADJ), DSA1)
      If(LGreater(DSA1, TP85))
      {
       Store(TP85, DSA1) //Never adjust higher than TP85
      }
     }
     Else
     {
      Store(DS01, DSA1)
     }
     Store(DSA1, \_SB_.PCI0.LPCB.EC0_.ECT1)
     //---------------------------------
     //Adjust CPU1 to increase fan speed
     Store(DTS2, DS02)
     // If less than Critical level
     If(LLess(DS02, TP85))
     {
      Store(Add(DS02,TADJ), DSA2)
      If(LGreater(DSA2, TP85))
      {
       Store(TP85, DSA2) //Never adjust higher than TP85
      }
     }
     Else
     {
      Store(DS02, DSA2)
     }
     Store(DSA2, \_SB_.PCI0.LPCB.EC0_.ECT2)
     //---------------------------------
     //Use highest CPU temprature
     Store("Current temp is: ", Debug)
     //If CPU0 greater then CPU1
     If(LGreater(DSA1, DSA2))
     {
      Store(DSA1, Debug)
      Store(\_SB_.PCI0.LPCB.EC0_.ECT1, \_SB_.PCI0.LPCB.EC0_.RG5B)
      Return(Add(0xaac, Multiply(DSA1, 0xa, ), ))
     }
     Else
     {
      Store(DSA2, Debug)
      Store(\_SB_.PCI0.LPCB.EC0_.ECT2, \_SB_.PCI0.LPCB.EC0_.RG5B)
      Return(Add(0xaac, Multiply(DSA2, 0xa, ), ))
     }
    }
    Else
    {
     Store(\_SB_.PCI0.LPCB.EC0_.RTMP, Local0)
     Return(Add(0xaac, Multiply(Local0, 0xa, ), ))
    }
   }
   Else // Passive Cooling Enabled
   {
    Return(Add(0xaac, Multiply(TPTM, 0xa, ), ))
   }
  }
  Method(_HOT, 0x0, Serialized)
  {
  // --- The remaining code from here is the same

Luís said...

Forgot again to said... OS is Windows 7 SP1 64 Bits

Luís said...

I'll try and give you feedback
Thanks

bjohnson said...

Luís, Just thought you should know that I suspect, from comments above, that there may be a problems with the patch on a 64 bit Windows 7 system. Also don't forget to read the above section "3.4.2.3 Microsoft’s ASL Decompile Bug".
Hope you get this working.

Luís said...

I didn't get the erro described above. Get another warnings. Just finished to load the table. Dumb question but do I need to reboot?
Thanks

bjohnson said...

Luís, Yes you have to reboot.

Luís said...

Just testing... Now I can ear the fan more than before, on idle i'm getting 46ºC for GPU and 34ºC for THR1. That's OK?
My core 0 and Core 1 temps shows about 22/27ºC. This is normal? My room is at 24ºC, but seems that on overall all the temps change more (flutuation) than before.

bjohnson said...

Luis, Congratulations, I think the patch is working correctly. It is nice to know that this works on a Windows 64 bit system as well. If you look above under "Final Thoughts" you can see my temperatures are close to yours. As I mentioned above on how this patch works, it controls the 2 core CPU temperatures by reporting a higher false temperature. When you run something like a game or stream a video, the fan should come on hard to control the temperatures of the 2 core CPU's which also cools the GPU. Thanks for reporting you results. This should encourage others to give this a try.

Anonymous said...

Luis could you paste a link to your code?

i have the same setup but cant get it to work

«Oldest ‹Older   1 – 200 of 323   Newer› Newest»