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.
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
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:
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:
«Oldest ‹Older 201 – 323 of 323Hello i have a dv9920ed, 64-bit windows 7 with the 30CB motherboard Intel CPU & Nvidia 8600m gs GPU
but i can't get it to work with the codes provided, what am i doing wrong?
To "Hello i have a dv9920ed...", Without details of what issues your having there isn't much I can suggest. The code I posted for LuÃs worked for him when he pasted it into his existing code. What isn't working? Are your Power Options System Cooling policies set to Active and not Passive?
My code is that I put 6 posts ago.
bjohnson, my temperatures seems OK, but after 2 days, I just don't remember if the fan makes the same noise as today. As long as the stay that way, is OK.
Core1 and Core2 after a work day, at idle shows around 35ºC
Hello again.
Now I'm looking to pach my wife's HP6356 with AMD X2 64 processor. Board is a Quanta 30B8, 2 GB Ram and bios F.43.
This laptop was dead for 1 year, and after do a reflow on mine, I did the same on this one and guess what? Working like a charm...
My code for fans is:
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)
}
}
}
}
Luis, You didn't post the operating system. This code looks like XP code I've seen before. You will have to test if there is a possible solution. I would start with a simple test. Change both Active and Passive returned values to see if either gives you the result that you are 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, ), )) // 0x5a = 90 Degrees
and
Return(Add(0xaac, Multiply(0x5a, 0xa, ), ))
If this test increases the fan speed then you should be able to make a reporting a higher false temperature patch work in Active mode or even a content Passive mode with the fan running at a constant speed, the higher the temp value reported the faster the fan speed.
There are posts to Giorgio23 above with 2 sets of patches that you can try. 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.
bjohnson, OS is Win 7 64-bits. Just change this lines on the DV6000 AMD?
Thanks
Sorry again, but on the original there is no reference to 0x5a.
I don't need to do changes here:
Name(TPAS, 0x58)
Name(TPC_, 0x5f)
Name(TPTM, 0x4b)
ThermalZone(THRM)
Thanks again
Luis, Yes just as I mentioned about. All this test code does is report a false temperature of 90 Degrees. You need to run your test by changing the Active and Passive cooling option. then see if the responds of the fan is constantly running faster. These settings are in the Power Options System Cooling policies.
Ok. I'll try it and give same feedback.
bjohnson, I think that the patch on my DV9790EP after all didn't work... I did the test changing the option from Active to Passive and vice-versa and the fan stay always with the same noise...
Can you help me?
Thanks
Luis, There is another post by Geoffzie above that has the same BIOS F.43 and he was not able to get a patch to work. I think he opt'ed to hardwire the fan. You should search other web site for a possible solution.
Hi all
Can anyone help me with an How to do it - for non programming speaking people
I have a HP DV9500(9655ea)with Quanta 30DA, AMD Turion 64x2
the CPU is fine, the max temp is about 58*C, but the GPU is like a hot plate - normal temp(just internet browsing)is more than 60*C, when watching a film goes to more that 80*C.
I have changed the thermal paste with Artic Silver and added a cooper plate
I have got to:
1. Start a DOS Command Prompt and change the directory to where you copied the programs from the site.
cd C:\ACPI
2. Run equus.exe to extract the DSDT and create an AML file. Enter the following:
subkey path = HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\HP____\30BD____\06040000
key name = 00000000
3. Create a backup of the AML file.
Copy dsdt.aml dsdtorig.aml
******AND I am lost here******
4. Decompile the AML to an ASL text file.
asl /u dsdt.aml
I put the command in CMD but it gives me that asl is not a recognised command
thanks in advance
cosmin, I am concerned that this may be to adventurous for you. You can easily brick your computer if you don't know what you’re doing. These instructions are only for my type of computer that have a Quanta 30BD Motherboard and not an AMD CPU. Others have been able to understand enough to be able to do this themselves for different computers.
For starters, your subkey path is likely not going to be the same as mine. The error "asl is not a recognized command" means the ASL program you should have downloaded into the C:\ACPI directory is not there. If you want to do this you need to know something about programming your own DSDT code. Even then, the way your computer operates may not understand the method of reporting a false temperature that this patch uses to control the fan speed. Have a look at you code to see if it matches with code that others have posted and got to work. Also check other web sources for you specific model.
Hi bjohnson
I do understand the logic behind it. It's just a file with all the registry setup and I have to change the thresholds of the fan speed, I have adapted anyway because my dsdt.aml file was in a slightly different location.
I've made the folder C:\ACPI and I have in it: ASL app; dsdt.aml and a copy of the dsdt file
CMD -is started as admin
changed the directory to ACPI (cd c:\acpi)
and when I put the command asl /u dsdt.aml I get:
asl: unknown swtch "u"
asl: invalid command line options **** what is the problem ???
On command asl/? I get:
nologo - suppress logo banner
Fo= - override the AML file with the name in the DefinitionBlock.
Fa= - Generate .ASM file with the name
Fl= - Generate .LST file with the name
Fn= - Generate NameSpace Dump file with the name
The changes that I will do it on my computer It will be my responsability..:))
Thanks
cosmin, I thinnk you have a different program then I am using. This is what my ASL help says.
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
Usage:
asl /?
asl [/nologo] /d
asl [/nologo] /u [/Fa=] [/Fl=] [/Fn=]
asl [/nologo] /tab= [/c] [/Fa=] [/Fl=] [/Fn=]
asl [/nologo] [/Fo=] [/Fa=] [/Fl=] [/Fn=]
asl [/nologo] [/loadtable [-v] [-d]]
? - Print this help message.
nologo - Supress logo banner.
Fo= - Override the AML file name in the DefinitionBlock.
Fa= - Generate .ASM file with the name .
Fl= - Generate .LST file with the name .
Fn= - Generate NameSpace Dump file with the name .
d - Dump the binary file in text form.
u - Unassemble AML file to an .ASL file (default)
or a .LST file.
tab= - Unassemble ASL table to an .ASL file (default)
or a .LST file.
Dump non ASL table to an .TXT file.
If is '*', all tables are dump to ACPI.TXT.
can also be the physical address of the table.
c - Create binary files from tables.
loadtable [-v] [-d]
- overload existing table with one in the given AML file.
<-d> - delete overridden tables
<-v> - Verbose
founded the problem...my Microsoft ACPI was an older version 2.0. Now I've upgraded it and I have the .asl file. Just need to find the right stuff...
mine looks a bit different - I have Win 7 x64
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)
}
}
}
cosmin, the only method you need to change is Method(_TMP, 0x0, Serialized). You should test your computer to see if a "False Temperature" patch will work by just changing the code lines below to see if the fan speed increases in "Active Cooling" mode. If the doesn't change, then you may have to use the hardware method.
Change the line in the Method(_TMP, 0x0, Serialized) method
From
Return(Add(0xaac, Multiply(Local0, 0xa, ), )) //Active temp
To
Return(Add(0xaac, Multiply(0x5a, 0xa, ), )) // 0x5a = 90 Degrees
----------------------------------------------
If this test does work then try this code. This is a patch others have used for your computer but not reported if it worked. Please report your findings.
----------------------------------------------
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, ), ))
}
}
----------------------------------------------
hi bjohnson...thanks for all your help:)
question: at point 8 in your initial tutorial you have:
8. Compile the ASL file to an ASL file.
>asl dsdt.ASL
are you sure that is the right command because it doesn't do anything...shouldn't be a command that changes the .asl file back in an .aml file ????????
thanks for your time
cosmin, That command
>asl dsdt.ASL
should compile the ASL file to an AML file. If an AML file already exists then rename it and try again. Then load the AML file with the next command and boot.
Make sure you have the instructions to restore your original DSDT file written down in case there is a problem.
sorry I didn't had time to change the DSDT...but finally I've give it a try
I moved the .aml file in a different location so I don't have the same .aml file twice just the .asl file and..the problem is
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:
894: Name(_WDG, Buffer(0x50)
^***
dsdt.ASL(894): warning: not a valid reserved NameSeg
2488: Method(_WED, 0x1, NotSerialized)
^***
dsdt.ASL(2488): warning: not a valid reserved NameSeg
5155: Method(_BQC, 0x0, NotSerialized)
^***
dsdt.ASL(5155): warning: not a valid reserved NameSeg
5461: Method(_BQC, 0x0, NotSerialized)
^***
dsdt.ASL(5461): warning: not a valid reserved NameSeg
6859: Zero
^***
dsdt.ASL(6859): error: unexpected ASL term type
C:\ACPI>
================================
and I don't have a new .AML file
cosmin, the error message says line 6859 has a zero and has a problem. Look at line 6859 for why its not compiling. Are you sure you are technically skilled to be doing this. You may get to the point of loading the AML and on reboot, you find your computer is not rebooting. Do you know what to do in that situation? I think you should backup your computer just in case.
Hi
I used your method to repair a DV9000 found in a trash one year ago. I've added copper shim + bios update and everything works fine.
gpu temp is around 50° on ubuntu 12.04
thanks a lot from france :-)
hello bjohnson can this acpi dsdt patch work on f.16 bios version because i dont want to update bios because ive seen that the laptop screen wont work when updated bios
To "hello bjohnson..." Sorry but I wouldn't be able to say for sure. I only know this patch will work if the 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 (64 bit is un-tested. You can check my DSDT code to yours to see how they compare and experiment yourself.
i have a hp dv9000 with the motherboard 30BD and i think your bios is the same as mine
hey im the hello bjohnson guy i have a hp dv9000 intel based and i think my acpi dsdt table is the same as yours
To "hello bjohnson..." As I said, you will have to experiment yourself to see if it works, just as I did. Maybe it it will. To use my DSDT you have to make sure my original DSDT file matches exactly or you will have to modify you DSDT which is more difficult because you realy have to know what your doing and may have to correct issues like the bug I talk about.
so bjohnson here are the differences from your code and mine
External (PDC1)
External (PDC0)
External (CFGD) mine doesnt have this but your does
Name(DSA1, 0x0)
Name(DSA2, 0x0)
Name(TADJ, 0x1A) // 26C Temp Adjustment
again you have this but i not
Store(DSA1, Debug)
Store(DSA2, Debug)
you have this and i not
Method(_Q8E, 0x0, NotSerialized)
{
Store("!!! CPU Throttling. !!!", Debug)
TRAP(0x1e)
}
Method(_Q8F, 0x0, NotSerialized)
{
Store("!!! Restore CPU Throttling to default setting. !!!", Debug)
TRAP(0x1f)
}you have this and i not
and thats all
To "so bjohnson..." I said to compare my ORIGINAL DSDT file. Your comparing with my DSDT code patch. From the little differences you say there is it looks like you could patch your code with my patch using the Method(_TMP, 0x0, Serialized) section. Make sure you backup you computer. If you make a mistake your computer may not run or may run so slow it is difficult to repair.
no i will just copy your patched code to my dsdt.asl file i dont want to risk anything
ITS ME THE (HELLO BJOHNSON)GUY DO YOU THINK IF I JUST COPY YOUR CODE INTO MY DSDT.ASL FILE THAT IT WILL THEN WORK OR DO I NEED
TO MODIFY MY OWN CODE
hi bjohnson did you think of making a app that patches the acpi dsdt table for hp dv2000-dv6000-dv9000 you just select your motherboard and bios version and then you press a button and the it patches it
No you have to use your code because it is different. Like I said, it looks like you could patch your code with my patch using the Method(_TMP, 0x0, Serialized) section and the other bits. Compare my original to the patch and you will see the areas I changed.
And no, I never thought about developing an app that patches the acpi dsdt table. It would be very difficult to determine with code the complex differences between every model and version of those computers.
hi bjohnson i succesfully patched the acpi dsdt table i just copied you code to my dsdt.asl file and what should i type in so that i have 32c temp adjustment and not 26c
To "hi bjohnson...” congratulations. Another saved computer. The full DSDT code uses 26C but the patch code above it uses 32C (Name(TADJ, 0x20) // 32C Temp Adjustment).
In order for you to do this yourself in the future, go to a decimal to hex converter web site and enter the temperature you want in decimal, then use the hex number in the code.
hi bjohnson its me again i wanted to tell you that i found no difference in temperature and i heard someone sying that lowering temperature will only delay the gpu death
and that only rebaling will only fix the problem tottaly
To "hi bjohnson...” by your comment "I found no difference in temperature" that you mean there was no difference between the 26C and 32C code values then the only thing you should notice is that the fan starts running faster at a lower or higher temperature. If you mean you are not seeing your CPU1/CPU2 temperatures decrease because the fan is not running faster than the patch didn't work after all.
As for "lowering temperature will only delay the gpu death", it has been over 2 years since I reflowed my GPU and implemented my patch and the temperature results that I reported above has not changed. I do have spacers under my computer to provide better airflow which may also attribute to its success.
Hi its me again the hi bjohnson guy
1.the patch worked but it doesnt lower gpu temperatures
just holds the gpu at a temperature lets say 58c for longer time and then the temperature increases
2.did you think of getting a small usb fan and put it on the graphic card to cool it and i thought of adding a off-on switch that turns the usb(fan) on and of or if it is posible to digitaly turn the usb off-on
3.Did you find some connectors for fans on the gpu when you done the fixes
To "Hi bjohnson..." So do you hear the speed of the fan increasing and decreasing as the CPU0 and CPU1 temperature goes up and down? If so then it is working properly. How high does the GPU Temperature go? To answer your questions.
1. As I mention above my GPU can climb to 60C and that’s when I have a 1 inch spacer underneath to improve airflow.
2. I thought about getting a USB cooling pad but the spacer underneath seem to take care of the need. Also I didn't like the noise of the cooling pads and they don't line up under the existing fan to push air in.
3. You cannot connect the existing fan to a 5v power source because it is a module frequency fan.
Hi, its me the anonymous with "hello bjohnson"
1. At idle when im browsing the internet the GPU is at 58c and when playing Crysis it goes up to 72c and when playing Spiderman Shattered Dimensions its at 77c.
2. I thought to make a little hole where the graphic card is and add a little 5v fan and connect it to usb you can search on google for hp dv9000 extra GPU cooling fan mod the max temp was 51c and idle something about 40c in the video.
3. and I thought connecting the little fan to usb and making little holes like the factory holes.
To anonymous,
Adding a fan sounds like a good alternative. If your electronic minded, you can open the computer and use the 5 volts that is supplied to the internal fan. You could also add a variable voltage potentiometer to vary the fan speed.
Your temperature my not get as low as mine because I also added heat sync compound under the GPU and CPU and removed tape blocking the air vents and other things. It all adds up.
But bjohnson, wouldnt the cpu die because it overheats because i use the 5 volt of the internal fan for the extra fan so the fan wont spin to cool cpu
and do our GPUs have the plugs for fans and what is your graphic card.
Anonymous, My GPU is NVIDIA GeForce Go 7600. I think you should forget about using the internal 5 volts. You have to know what your doing or you may brick your computer. I think you should try a cooling pad first before cutting holes in your computer case.
hello bjohnson do you know which temperaures should i expect if i do all the things in this tutorial
and could i connect a extra gpu fan to the internal fans connector if i connect the internal fan to usb because usb is 5volts
hi bjohnson did you had the idea to lower graphic card voltage via nibitor somewhere i heard it lowers temps by 10c but its risky could you make a blog how to lower voltage
Hi Bjohnson I am erhan I have got a compaq f500 which had the usual problem that i have reflowd and been readingyour blog since last night and the link that you gave for other website. My code is
like this: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)
{
Which bit will i change to get my fan running. As the fan doesnt kick in till 70c on gpu...
To "Hi Bjohnson" It the TMP method. I don't see the rest of the code and I'm not sure I can help because its not the same computer. See if another site that supports that computer exists.
Hi bjohnson i reflowed my hp dv9294ea last night and taken off the plastic blocking the airflow just i havent done the wood thing so will it survive.and i patched the acpi dsdt and beforce playing crysis it goes to 73c now just to the mid 60s.so will it survive
To "Hi bjohnson i reflowed" Congratulation! My dv9000 computer continues to survive just fine and so I don't see why your computer won't. It depends on how well the re-flow went. I had to re-flow my computer a second time because I didn't get it hot enough the first time. The wood thing isn't that important because there are so many airflow leaks around the fan chassis that this makes little difference. The one area that I would go back and improve would be a better fan blade and fan housing that contain the airflow from leaking. That would push more air through the heat sinks and make things much cooler then they are now. To compensate for this short coming I have my computer raised up on spacers about 1 inch to allow better airflow under the computer chassis.
Its me the i reflowed guy im a gamer and i play lots of gpu hungry games like crysis,crysis 2,The walking dead and so on and when i played crysis about one hour the gpu went to 74c and now just to 64c in cool rooms and 69c max in warm rooms and its idling at about 51-50-49c in cool rooms and then 54-56c in warm rooms so im pretty scared that the gpu will remove itself from the motherboard again i think that it was dead because the crysis 74c and i use a cooling pad just 500rpm and the cooler is raised from the desk about 1.5inch.So can i play games on it or not.
To "Its me", I play Battlefield 2142 and on a warm day may reach 64c but usually stayed near 60c. The other games may be more graphic intense so the high temperatures may be justified but I agree that temperatures reaching 70c over a long time is concerning. If you are concerned I would try a better cooling pad that has the fan mounted in the back left corner so it blows straight up into the existing computer fan to increase airflow. Even build a tight seal between the cooling pad and bottom of the computer that would help force air through the heat sinks. Unfortunately the airflow leakage of the computer fan housing is still going to allow air to go other places. If we could find a better fan assembly like the IBM Lenovo computers that can push large volume of air through the heat sink than that would fix the heart of the problem.One other thing would be to increase the TADJ Temp Adjustment or slow the clock on the CPU and GPU processors. Not something a gamer likes to think about but it would have a positive affect on lowing the temperatures.
hi Bjohnson just wanted to ask has the geforce go 7600 got fan connectors where we plug in the fans for the graphic card
To "hi Bjohnson just", no fan connection. The NVIDIA BGA assembly is what you see in the picture in section "2. Burned Out NVIDIA Graphic Chip" and there is no fan connector. On my mobo there is a separate heat sink that sits on top of the graphic chip. Unfortunately, the fan speed is controlled by the 2 CPU chip temperatures and not the GPU chip temperature.
hi bjohnson i will be reballing my laptop soon and it died again ive done everything from your blog max temp was 64c and idle 49-52-53c why did it die again.
so will it work if i reball it(the graphic chip)
To "hi bjohnson i will", 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 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.
HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\HP____\30CB____\06040000
Hi Johnson, very thanks you for this support guide, i am from
italy , so sorry my bad english :) i have same problems on my
dv9695el.
I reflow my gpu 3 time, i am looking for speed up the fan with
software metod. my file is different than yours.. if u can check
is this one, http://www.2shared.com/file/jAWsG4Lh/dsdt.html
help me to change it thanksss!!!
Dak, The download file is hosted on a site I am not familiar and requires some exe program to run which I prefer not to do, sorry. Can you find a storage location that will allow unmanaged downloads.
Make sure you can find the section of code like Scope(\_TZ_) and ThermalZone(THR1) that I talk about. If that’s not there than this code will not work as it and will require new development which you will have to figure out by making your own test code and trying it. Make sure you read this article carefully and that your computer has all the requirements. What firmware version are you running, is your computer a Quanta 30BD Motherboard with the Intel CPU. These all important.
I have mentioned that this is a dangerous undertaking and should not be attempted if you are not able to understand the code that is required. People have got into trouble and bricked their computers because they did not have the technical skill to do this. I know, because I have bricked my own computer and had to restore from an image backup. Without an image backup I would recommend doing the hardware method or a cooling pad.
thanks, i modded heatsinks with copper shims and i fixed airflows like your suggestion. My 9770el uses latest hp bios (F.5A) and i'm satisfied with this fan speed algo.
btw, i'm running Win8 Pro N 64bit.
bjohnson i am happy too see that u still reading this post.
My pc is a dv9695el, 2 days ago i reflowed again the gpu, now seems to be a bit better with temperature.
i was on windows 7 with last graphic driver downloaded from nvidia. Now i placed windows vista home premium with the original gpu driver downloaded from hp.
bios version : F.5A
motherboard: 30CB
my tz code appear Scope(_TZ_) and not (\_TZ_)
my code also have the (DTSE)
i up the code for you on an other host:
download this one:
http://netload.in/datei0pag5L0tY1/DSDT.ASL.htm
help me to change this!!!
thanks you so much
Dak, It looks like I already provided code for this DSDT.ASL for a guy called LuÃs. If you search the comments you will find it has he same code as "If(DTSE)". He said it worked for him. I see that there was also the difference you mentioned that you have Scope(_TZ_) and not (\_TZ_). I corrected that in the post below. Make sure you have an image backup you can restore just in case. Here is what I sent him.
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.
Dak, I almost forgot. Search for the following code
If(_OSI("Windows 2006"))
{
Store(0x7d6, OSYS)
}
and add this below it to indicate Windows 7 is supported.
If(_OSI("Windows 2009"))
{
Store(0x7d9, OSYS)
}
Good luck!
bjohnson thanks, and sorry for this question, can u please download my code, edit it and reup for me? I am very confused when i go to edit with notepad, especially for the space in every line before the code...
i don't want do it wrong..
if is not a problem do that for me u make me very happy !!! :) thanks so much again and sorry for boring you
i almost forgot
in this line:
Name(DS01, 0x0)
Name(DS02, 0x0)
Name(DSA1, 0x0)
Name(DSA2, 0x0)
i have (DS01, zero)
not 0x0 dunno if there are difference!
I give u my skype contact if u want contact me directly : K_Dakkino
ty
Dak, The 0x00 code means the same as Zero.
As much as I wish too, I cannot provide you with complete source code because your code it different from mine and I am not able to test it.
If you don't have the technical skill to even copy and paste this code into the correct location then I strongly suggest you not attempt this on your own. Remember, even with my technical skill, I have bricked my computer because of a code mistake. Fortunately, a typo mistake is usually found by the compiler. That why I had a IMAGE backup (not a data backup) to recover from.
Its also not that hard. All you have to do is find the top code with the following
Scope(_TZ_)
{
and the bottom code with the following
Method(_HOT, 0x0, Serialized)
{
Then past over it (replace it) with the code I provided.
Also, if this works and you find that the fan speed is running more than you like, then you can change the 32C Temp Adjustment down. Here is what I use.
Name(TADJ, 0x1A) // 26C Temp Adjustment
Hi there, thanks a lot for the fix. i have a question my laptop is dv6000 (hp6296ae) motherboard 30BC bios F.2E
i made your fix run flawlessly on windows 7 (32 bit) but lately i upgraded to windows 8 pro 64 bit (clean install with format) as expected laptop fan fell into silence and temps start skyrocket. i tried the fix again but this time it didn't have any effect.
i checked the both dsdt tables they are same nothing changed but the fix had no effect what am i doing wrong?
i have read some succesfull fixes done in 64 bit environment. what is wrong?
thanks a lot, i can share my files if you want
efendisiz,
This may be a setup in the windows 8. Make sure you have Active Cooling enabled in the Power Options.
Check out section "3.4.2.3 DSDT Patch" that talks about searching for the Device(PCI0) section and add Windows 7 support. You may need to add windows 8 support to the DSDT. You could try the following for instance but I don't know what is correct so experiment.
If(\_OSI("Windows 2012"))
{
Store(0x7DC, OSYS)
}
I'm not aware of a working Windows 7 64 bit version but I know a few have tried. But they may have had the AMD CPU which is completly different. Frankly, if the DSDT code is identical then I don't see why it shouldn't work especially if you had it working on a 32 bit OS and all else being the same. Let me know if you have any success.
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(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 // 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
}
}
}
i have an other idea also what happens if i keep the original dsdt table and only mess with the
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
part lovering all the values say 40 degrees eg. my warning level will be 40 passive level will be 35 critical will be 60. can it work?
Everything works fine, big thanks !!
efendisiz,
I read the values set for those temperature levels are the trigger points for events. For instance when the Critical level is reached it causes the computer to shutdown. I would be very careful adjusting these temperature levels. Did you add the support code I sent for your Windows 8 OS? I how you get this working. I think I may eventually want to update to Windows 8 myself.
kkkonrad,
Glad to here you got it working. Can you let the rest of us know what your computer is and the OS your running. The more details the better. Thanks
Hi bj,
Yeah i did add the win8 support code and active cooling is activated through power options nothing seems to work. I decided to leave it as it is, in fact i have hard modded my laptop last year before i bumped into your fix on the net.
what i did was i added copper shims instead of hp's messy thermal pads both to cpu and gpu and quality thermal grease. also i drilled 77 (2mm radius) holes on the casing intersecting the gpu area. The reason why i am uncomfortable is i invested a lot on that crappy notebook (ram ssd ect) and i don't want it die on me again (it died once thankfully in the guarantee period)so if you find a fix for win8 64 bit share with us thanks a lot
hi bj,
i think i have found something; this code is directly from F.2E bios ACPI table (opened up with bios editor) can you check it out. thanks
Scope(\_TZ) {
Name(TPC,0x78)
Name(TP85,0x6E)
Name(TPTM,0x4B)
Name(TPAS,0x5C)
Name(TA85,0x50)
Name(DS01,0x00)
Name(DS02,0x00)
ThermalZone(THR1) {
Method(_TMP,0,NotSerialized) {
If(ECON /* \ECON */) {
Store(DTS1 /* \DTS1 */,DS01)
Store(DS01 /* \_TZ.DS01 */,\_SB.PCI0.LPCB.EC0.ECT1)
Store(DTS2 /* \DTS2 */,DS02)
Store(DS02 /* \_TZ.DS02 */,\_SB.PCI0.LPCB.EC0.ECT2)
Store("Current temp is: ",Debug)
Store(DS01 /* \_TZ.DS01 */,Debug)
If(LGreater(DS01 /* \_TZ.DS01 */,DS02 /* \_TZ.DS02 */)) {
Store(\_SB.PCI0.LPCB.EC0.ECT1,\_SB.PCI0.LPCB.EC0.RG5B)
Return(Add(0x0AAC,Multiply(DS01 /* \_TZ.DS01 */,0x0A)))
} Else {
Store(\_SB.PCI0.LPCB.EC0.ECT2,\_SB.PCI0.LPCB.EC0.RG5B)
Return(Add(0x0AAC,Multiply(DS02 /* \_TZ.DS02 */,0x0A)))
}
} Else {
Return(Add(0x0AAC,Multiply(TPTM /* \_TZ.TPTM */,0x0A)))
}
}
Method(_CRT,0,NotSerialized) {
If(LEqual(\_SB.TJ85,0x00)) {
Return(Add(0x0AAC,Multiply(TPC /* \_TZ.TPC */,0x0A)))
} Else {
Return(Add(0x0AAC,Multiply(TP85 /* \_TZ.TP85 */,0x0A)))
}
}
Method(_PSL,0,NotSerialized) {
If(MPEN /* \MPEN */) {
Return(Package(0x02){
\_PR.CPU0,
\_PR.CPU1
})
}
Return(Package(0x01){
\_PR.CPU0
})
}
Method(_PSV,0,NotSerialized) {
If(LEqual(\_SB.TJ85,0x00)) {
Return(Add(0x0AAC,Multiply(TPAS /* \_TZ.TPAS */,0x0A)))
} Else {
Return(Add(0x0AAC,Multiply(TA85 /* \_TZ.TA85 */,0x0A)))
}
}
Method(_TC1,0,NotSerialized) {
Return(0x02)
}
Method(_TC2,0,NotSerialized) {
Return(0x03)
}
Method(_TSP,0,NotSerialized) {
Return(0x32)
}
}
}
efendisiz,
What am I checking for? It looks identical to my original code except for a few letters in the names. Here is what my patch would look like with your names. Check it over if you intend on using it to make sure I didn't miss anything up. I take no responsibility for its use. Use it at your your risk. As I always say be save and do an image backup before proceeding. Let me know how it goes.
Scope(\_TZ) {
Name(TPC,0x78)
Name(TP85,0x6E)
Name(TPTM,0x4B)
Name(TPAS,0x5C)
Name(TA85,0x50)
Name(DS01,0x00)
Name(DS02,0x00)
Name(DSA1,0x00)
Name(DSA2,0x00)
Name(TADJ,0x20) // 32C Temp Adjustment
ThermalZone(THR1) {
Method(_TMP,0,NotSerialized) {
If(ECON /* \ECON */) {
// 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(0x0AAC,Multiply(TPTM /* \_TZ.TPTM */,0x0A)))
}
}
Method(_CRT,0,NotSerialized) {
If(LEqual(\_SB.TJ85,0x00)) {
Return(Add(0x0AAC,Multiply(TPC /* \_TZ.TPC */,0x0A)))
} Else {
Return(Add(0x0AAC,Multiply(TP85 /* \_TZ.TP85 */,0x0A)))
}
}
Method(_PSL,0,NotSerialized) {
If(MPEN /* \MPEN */) {
Return(Package(0x02){
\_PR.CPU0,
\_PR.CPU1
})
}
Return(Package(0x01){
\_PR.CPU0
})
}
Method(_PSV,0,NotSerialized) {
If(LEqual(\_SB.TJ85,0x00)) {
Return(Add(0x0AAC,Multiply(TPAS /* \_TZ.TPAS */,0x0A)))
} Else {
Return(Add(0x0AAC,Multiply(TA85 /* \_TZ.TA85 */,0x0A)))
}
}
Method(_TC1,0,NotSerialized) {
Return(0x02)
}
Method(_TC2,0,NotSerialized) {
Return(0x03)
}
Method(_TSP,0,NotSerialized) {
Return(0x32)
}
}
}
Hi Bj,
Ä° think i found the issue about windows 8. It is not about 32 or 64 bit problem the problem is windows 8 is simply not giving permission to override DSDT. After loading the patched tables and reboot, i want to check it again and when i dumped the dsdt again i saw it was in it's original state. So for windows 8 overriding dsdt table is a dead end it won't work. There is only one option left, to open the bios file with phoneix bios editor, dump the acpi table and edit it build the bios again and flash the bios. i tried that but can't compile the modified table because of errors. If you can make it on your laptop not only it will be a os independent fix, but it will be awesome. Thanks four your answers.
efendisiz,
What kind of compile errors are you getting? Maybe we can fix them.
i get something like this;
292: If(And(CFGD /* **** can't find object in namespace */(0x01000000Zer
o,),,)) {
^**
*
temp.asl(292): error: expecting Symbol
efendisiz,
It would help to have the original lines of the failing code to better understand the error message. This may be an issue with incompatibility between the de-compiler and the compiler. I talk a little about using a different de-compiler/compiler or even a different version. You should test the original de-compiled code and re-compile it to make sure the de-compiled isn't causing a problem. One of the things I talk about in my blog is the Microsoft’s ASL Decompile Bug in section 3.4.2.2.
Hi it's me Again the hello bjohnson guy if you remember
i wanted to try a higher temperature
adjustment than 32c would it be safe to set it to 34,36 or 40
or any other adjustment
Please Reply
To "Hi it's me Again", I don't think it is a problem as long as you are not pushing your DV9000 by running an intense game or watching HD content using the HDMI connector. The later is what blow out my laptop.
That depends what you mean with "intense"
Minecraft is the only game i play now
and it pushes my Gpu to 65c or 68c
and Cpu to 40c or 50c even with its Block Models.
So do you describe Minecraft as "Intenese"
To "Hi it's me Again", each computer is unique so it is hard to know how your computer will behave. You should do a short test to see the effect of running your game. Run HWMonitor, then play your game watch the max CPU and GPU temperatures to see if it is getting to hot. I draw the line at 72C for my computer. I have read that others think 75C and higher is safe. The most important thing is make sure you have done everything possible to minimize the heat, including increasing the space under the computer so air can flow freely when the fan is running fast. That one thing can make a difference of several degrees to keep your computer cool.
So Should i set the adjustment to 34c,35c,36
And do you remember when you thought to modify the Bios to work in conjuction with some Gpu Temperature monitoring software so that the Fan Changes Speeds according to The Gpu Temperature and not The Cpu temperature.Do you thnk it would be possible?
I'm not really sure what you want to accomplish but I assume you want the fan speed to not trigger as early so it will not run as fast causing the overall CPU and GPU temperatures to go higher. If this is the case then you have to decrease the TADJ adjustment amount not increase it. As I mentioned in my article, my patch changes 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 thereby causing the fan to react sooner as the CPU temperature rises. I later changed the TADJ value down to 26C (0x 1A) so it did not run the fan so much. If this is what you want to accomplish then I would suggest you do the same thing by replacing the 32C Temp Adjustment with the following line.
Name(TADJ, 0x1a) // 26C Temp Adjustment
If I understand your other question, as I mention in my article, there is no way to directly adjust the GPU reported temperature, only the CPU. Hope this helps.
So I guess there is no way to patch the DSDT under Windows 8 or 8.1. I tried the method under Windows 8.1 Pro final version, but to no avail. Is modifying the BIOS's ACPI the only way? How to do this? I'd rather use a patched BIOS to avoid applying patch at every Windows reinstallation.
I assume there is no way to override DSDT in Windows 8 or 8.1. So I guess, we have to flash a patched BIOS with the corresponding DSDT patch. Has anyone been able to do this? I really don't wanna brick my dv9000 laptop. Thanks!
Andrew,
You are in territory I am unfamiliar and I am not sure how to advise you. It was hard enough installing Windows 7 in a HP DV9000. What computer model and BIOS version are you trying this on?
bjohnson
Hard enough installing Winodws 7 on this machine? I don't understand what are you trying to say. I've used your fix 3 years ago and my notebook is working fine since that day! I am thanking you again for this brilliant fix!
My notebook is a dv9340ea, with Quanta 30BD and F.2E BIOS. Installing Windows 7 on it was pretty easy, there is a very good guide on the HP forums. The patch you provided works like a charm as well. But, now I want to migrate to Windows 8.1, as there is a very good LITE version of it recently released on piratebay (I am a LITE Windows power user). I tried applying the same patch, but it doesn't work, so I guess a prepatched BIOS update will do the job. I read that DSDT patching does not work under Windows 8.1. So there are two questions: 1) Is it possible to enable DSDT patching under Windows 8.1? 2) How should I patch de DSDT in F.2E BIOS in order to update the original BIOS to the patched BIOS? Also I have found this: http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/d2663c42-70ec-4caf-a26c-441c2088578d/windows-8-dsdt-overriding?forum=wdk (last post), but I can't test this as I'm afraid my chip will overheat until I make the test. Thanks again!
I forgot I have extended my cooler's wires that corresponds to the temperature sensor, so they are easily accessible under my RAM cover (they are insulated and hidden under the RAM memories). I made this as a precaution measure, because some modified Windows versions might contain the nVIDIA drivers integrated. So, when the first start tests the graphics performance, my GPu would overheat as the DSDT patch is applied after the installation finishes.
Now, if I disconnect them, I get fan running at full speed, so this way I can test the DSDT overriding command and patch as well. Also, I am going to make a backup partition of C drive with Acronis to be able to restore the existing Windows 7 installation if I can't fix the DSDT in Windows 8.1.
Andrew,
Under section 3.4.2.1 DSTS Patch Instructions you will find the registry location of where the DSDT table exists. HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\
Since the asl /loadtable dsdt.aml command no longer works there may be a work around by exporting that registry data, then loading a HEX conversion of the dsdt.aml data by importing that using the updated reg file. See if anyone else has tried this.
Andrew,
I hope you are run the Windows 8 32 bit version. The DSDT patch doesn't work on the 64 bit version.
Also, I meant to ask if you de-compiled the Windows 8 DSDT and compared it to the original Windows 7 DSDT to see what is different. You should post the temperature code section and Ill have a look at it.
Thanks for your replies! But, the patch is working under Windows 7 x64 (I am currently typing on it), so I guess it would also work on a x64 version of Windows 8.1. But, I plan switching back to 32-bit when I will install Windows 8.1, as I really don't need 64-bit support and it eats up HDD space and memory for no reason.
I will try this in the near future, as now I don't have enough time to play with all these. But, I will let you know of what I succeded or not. First, I will try the DSDT overriding solution posted on the forum I've linked. Then, I will try to compare the Windows 8 dsdt.asl with the working Windows 7 dsdt.asl patch to see if there is something different and make the needed modifications. Finally, I will try to export the DSDT registry, convert HEX to ASCII and try to find a solution to do this without data loss, apply the patch and try to import the patched registry. One of these must work, but if not, I guess I'll have to stick with Windows 7 until I find a way to modify the BIOS's integrated DSDT.
Anyway, I'm really happy the patch is still preventing my dv9000 to overheat since the day I've first applied it. I remember, by that time, that I was looking to forward to buy another laptop, but I just couldn't find a cheap one with all the multimedia features that this dv9000 has. Maybe it's pretty outdated when speaking about performance nowadays, but I just don't need anything more powerful than this. Also, bu that time, I wanted to upgrade to a HDX 18t (yes, the huge 18.4" screen with Quad Core and nVIDIA 9600GT... and that beautiful backlighted keyboard and BASS-TREBLE touch controls). But, I've read that model had the same issues: overheating, fried GPU and overheating-caused issues (such as left hinge breaking and screen cover crack).
Cheers!
By the way, when I've tested the command months ago on a Windows 8.1 final version, the "asl /loadtable dsdt.aml" command gived no errors and it displayed "Table overloading succeeded". But, when I rebooted, the cooler still stayed silent and the temperature of motherboard was still 22C.
Andrew,
Until now I didn't know for sure if the patch worked on a Windows 7 64bit system. Your the first person to confirm this for me. I'll update the blog to reflect this. Thanks.
This is great research you are doing for those that wish to go to Windows 8.
I would be interested in seeing the original Windows 8 de-compiled dsdt code for the Scope(\_TZ_) method that contains the ThermalZone() section. Would you mind posting it? I don't know if it make a difference but did you do an upgrade or a fresh install of Windows 8?
As I promised, I've installed a fresh copy of Windows 8.1 32-bit (never getting back to 64-bit because too much HDD space and RAM used for nothing I really need). I've tried extracting the original ACPI from Windows 8.1, I decompiled it and I compared it with the Windows 7 one. It's the same! No modifications at all!
So now I tried once again to load the modified dsdt.aml I previously and successfully used in Windows 7 32 and 64-bit. Response: Table overloading succeeded. Rebooted but no luck, Temp1 still under 30C. Then, I opened Command Prompt (ELEVATED - AS ADMINISTRATOR!!!). But the command from that topic I linked in my previous post didn't work either.
So, I removed the key written within {} and just typed: "bcdedit /set testsigning on", hit ENTER and it successfully worked. Then typed "bcdedit", hit ENTER to check if really "testsigning" was "on"... And IT WAS!
Now, I ran the "asl /loadtable dsdt.aml" with the patched dsdt.aml and "Table overloading succeeded" appeared in cmd. Then rebooted and... voila: Temp1 = 48C in IDLE. I must say that I tested all these with sensor wire disconnected and fan at full speed. But when I saw the Temp1 = 48C after reboot, I simply connected the wire back and the cooler was running smooth at an IDLE low speed as it was back in WIndows 7 and as it should be.
So, in order to override DSDT, you need to enable testsignin by entering "bcdedit /set testsigning on" in a Command Prompt (CMD). Don't forget to open CMD with RUN AS ADMINISTRATOR! Then, normally apply the patch with the original method you provided!
I also tried to set "testsigning" back to "off". But after reboot, DSDT will revert back to original settings, therefore you MUST keep testsigning on.
Regarding to Windows 8.1, I hate the Metro UI, but I will use Stardock Start8 fot the original Start Menu and avoiding that tablet-friendly (BUT NOT PC FRIENDLY) UI. Now I'm testing this LITE version to see if it fits my needs and get accomodated to Windows 8.1. If I really don't like it, I will restore my Windows 7 backup...
Cheers!
So I guess the problem was not the DSDT code changes (they don't exist), but the fact that Windows 8 & Windows 8.1 doesn't allow overriding DSDT from the start. You must change this behaviour using the command I provided. But this is not possible due to me, credits go to the user who wrote the last post in this topic: http://social.msdn.microsoft.com/Forums/ro-RO/d2663c42-70ec-4caf-a26c-441c2088578d/windows-8-dsdt-overriding?forum=wdk
Andrew,
This is awesome work and a great benefit to the HP DV9000 community.
There may be something you still need to add to the DSDT which may explain why you need to use the "bcdedit /set testsigning on" command to make it work but I don't know for sure. There is a section of code that identifies the Windows version and saves it. Check out section "3.4.2.3 DSDT Patch" that talks about searching for the Device(PCI0) section and add both Windows 7 and Windows 8 support. You could try the following for Windows 8 support but I don't know for sure if this is correct, so experiment.
If(\_OSI("Windows 2012"))
{
Store(0x7DC, OSYS)
}
I will add a section to this blog that outlines your finding and points them to your comments. Let me know about any followup you do.
Thanks again Andrew for sharing.
After over 3 years of no problems, my video screen got black again and stayed black upon restart, with a grey spot on top-right corner. But, this issue started in the last 5 days, because I got random lines and artefacts on the screen at random moments. So, my GPU's BGA broke again, but there was no overheating at all, as I was running patch. I guess reflowing works for an undetermined period of time. This can be days, weeks, month or years. Today, I got it reflowed again at a local shop for $10, but not using heat gun or pen torch. They used a professional temperature monitored oven and I think this is way better than home-made methods. I hope it won't break again... As I'm really sick of disassembly as I've done this way too many times because several components got damaged. I've replaced my power jack because it got loose, I've got my two flexband cables replaced, oiled the cooler twice, cleaned the dust 3-4 times, reflowed 3-4 times, modifying according to your blog and extending cooling sensor cables, left hinge cracked, LCD cover broke 2 times (last time I've strengthen the screw mounts with melted plastic and poxiline), replaced palmrest twice because of paint erasing (now I've got it foiled up with transparent autoadhesive foil). Even most of the screws got damaged because of many times of disassembly-reassembly procedures. This laptop gave me pretty much headaches since 2008, but I really don't want to buy another laptop too soon...
I've tested the 2009 or 2012 string, but to no extend. Only the testsigning on works. This also brings a "Test mode" watermark on the low-right corner, but I can live with it. Now I'm testing Windows 8.1 Luxury by khatmau_sr. It's very good looking, fast, light and very well optimized for older machines. There are Norton Ghost backup files of it uploaded. You simply need the bootcd of Norton Ghost 2003 and restore the preinstalled backup to your C: drive. And when you reboot, you've got yourself preinstalled Windows with additional preinstalled software. You don't have to do much after this. I also loved khatmau_sr's Windows 7 Luxury, but I wanted a lite version of Windows 8.1.
Andrew,
I had to smile hearing about all the nightmares your HP computer gave you. It sounds so familiar! $10 sound like a bargain. I had to re-flow my GPU's BGA twice myself to really burn it in so it lasted.
I even had to replace the Dual CCFL Backlights to the display (See article on How To Replace the Dual CCFL Backlights on an HP DV9000 17" LCD Laptop). Glad your on the road to recovery. Thanks again for the great research.
Because it is needed to enable testsigning in order to apply the DSDT Patch under Windows 8.1, an annoying watermark on the desktop's right-corner appears: "Test Mode Windows 8.1 Build 9600". I have tried removing it, until I found the right way to do it using an application. Here it is: My WCP Watermark Editor - http://download1us.softpedia.com/dl/cc5152d95eb9c8e600e52655b0491bf1/530b91b6/100210191/software/tweak/My_WCP_Watermark_Editor.exe . Just hit remove watermark information and reboot.
Also, I'm having some issues with dv9000 drivers for Windows 8.1. laptopvideo2go.com didn't release a modified inf for the latest Windows 8.1 drivers, so I have installed my older Windows 7 driver for the Go 7600. Newer Intel drivers for Rapid Storage SATA, WLAN and LAN do not contain the drivers for older discontinued products such as the Intel ICH7M SATA Controller, Intel PRO/1000 PL Ethernet and Intel Pro/Wireless 3945ABG. And again, I had to install my older Windows 7 drivers. The same is for Conexant HD Audio. Bluetooth drivers from HP for Windows Vista/7 do not work under Windows 8.1. But the integrated drivers from Windows 8.1 seems to be enough for Mobile Phone to PC file transfer. I highly recommend to install the latest Synaptics Touchpad drivers from their website, as I've encountered scroll issues with older drivers. I am still testing the Windows 8.1 workaround with dv9000, as it seems that older Windows 7 drivers are not the best option, but hopefully in the future there will be better drivers. I guess some of the issues are related to the fact that Fast Shutdown is not truly supported with older Windows 7 drivers.
Another thing, bjohnshon, is that I remembered my GPU failed recently when I switched to the 26C patch version from the 32C one. My GPU temps were about the same, but CPU usage is not as high as under Windows 7 and this way the Temp1 stays cooler than under Windows 7. Therefore, very often the cooler stays very slow (as slow as with no patch applied) in IDLE and GPU is more likely to overheat. Now, I don't know if this was a pure coincidence, but I'm afraid to go back to the 26C version of the patch. Sometimes the cooler spins fast even if there is barely any CPU usage or it continues to spin fast for a while after a high CPU usage period ends. This is kind of weird. I will make more testing.
HP Pavilion dv9000 (dv9340)
I reflowed the Motherboard @220C for 10 min (gas mark 7?) and the display started working drilled holes in the bottom of the case Arctic silvered the chips/heatsinks and removed the little plastic covering the GPU vent. It was still too hot @60 to 65C when not doing much.
THEN I FOUND YOUR THREAD!
I followed your code instructions and had no additional problems (only the ones you described/solved) crossed my fingers and rebooted and DahDah!! Now when playing an HD video and driving the CPUs at 100% the video card is only at 53C.. I need worry no more
Many Thanks
I can not find the equus.exe anywhere online. Do you have a link to it that you could share?
HP DV9033cl running Windows 7 with the 30BD 66.42 system board running F.2E bios version.
I am looking for the equus.exe program from a safe source. The links I have found seem to be broken.
Mike,
I sent you the equus.exe file in a zip. Good luck with your ACPI project.
Burt, I did not get the email. Any lead on a location to look for? I just noticed the comments start at the beginning and continue to a second page. I'll review the second page for any other links. Thanks, Mike
Mike,
I did some searching and found what may be an alternative extractor to using Equus.exe. The site is has an artical called "XP_DSDT – eXtract & Patch DSDT v0.4" (https://tonycr.wordpress.com/xp_dsdt/).
It uses a program called XP_DSDT.exe which works in Windows 7. I have downloaded it and run it with out any problems but have not tested it. Give this a try and let me know if it works. If you still need the Equus.exe program then we will need to make arrangements for me to get your email to send it to you.
Mike,
I also found this alternative extract tool at "How to read ACPI table in Windows" (http://linuxnewbies-technotes.blogspot.com/2013/03/how-to-read-acpi-table-in-windows.html).
The tool are located at https://www.acpica.org/.
I have not tested this so make sure to compare my decompiled code with yours to make sure they look reasonably the same.
Hey Burt! I gave up having Windows 8.1/10 on this laptop, not because of incompatibilities, just because of poor font rendering in Windows 8.1/10, same with Office 2013 (caused by grayscale antialiasing instead of subpixel method used in Windows 7/Office 2010). Laptop is alive and kicking since I used you patch 4 years ago. The video chip gets broken once in a while (1-2 years) so it needs a reflow. As I couldn't find a pen torch where I live and I'm sick of paying $20 for each reflow at the laptop service. Yesterday, my screen went black and didn't get back again, so I knew I had to repair it again. I was so angry that I've risked my board and "cooked" it in the kitchen oven. I preheated the oven at 200C for 5-10 minutes, I wrapped the mainboard in aluminium foil leaving a gap only where the GPU is. Then I seated the board with the GPU chip upward on 2-3 platforms made of aluminium foil in the oven's tray, closed the door and turned off the gas/fire. I let the board there for 5-10 minutes, then got it out and let to cooldown for another 5-10 minutes. Then mounted back in and... IT WORKED. Now I know how to save my ass all by myself until I will have enough money to buy a new laptop, as this is ANCIENT... The only remaining problem is I have to buy a new power flexband cable, as the sound in the speakers is not working everytime I listen to music and power LED blinks from time to time. There are some newer white flexband cables which are far better than black stock ones and I'm getting one for $2 here in my country from a laptop service and store. I already changed the media buttons cable with one of these 4 years ago and it doesn't have a problem at all after messing up with it during the many repairs. Hope my old grandfather dv9000 will still last... I wish you a HAPPY NEW YEAR!!!
Andrew,
Good hearing from you. I was so surprised that baking the board really worked without causing other issues. Your recipe must have just the right magic to make it work.
I have not had to reflow my assembly since the second time I did it. I found that if you do the following that you should not have to ever reflow your assembly again.
1. heat the assembly long enough to completely flow the solder
2. have the patch temperature set to 26C
3. use a 1/4" spacer under the back feet of the laptop to improve airflow under
Hope you also have a great New Year.
Hello again!
My dv9340ea is still alive and kicking. Didn't need any "rebaking" so far, since last time I commented here. I'm still not giving it up, even if it's pretty damn old. I recently upgraded my primary HDD with a 64GB SSD ($25) and there is pretty much speed improvement. I might also get an ExpressCard USB 3.0 adapter for my 2TB External HDD now I have on USB 2.0, but I don't know what speeds would I get.
Also, I forgot to say that I've changed my Intel 3945ABG Wireless card with an Intel 4965AGN ($2.5), in order to use 5GHz with my Dual-Band Router to achieve 100Mbps real speed over wireless (my ISP delivers real 100Mbps). My computer got locked because the BIOS whitelist didn't contain this card, so I needed to flash the unlocked BIOS (which also had SLIC 2.1 so I could easily activate Windows with any activator).
All the best from Romania!
Andrew,
Good hearing from you and knowing that your HP DV9340EA computer is still working. I'm still using my HP DV9000T CTO as well.
Thank you for mentioning that you successfully replaced your Wireless card with the Intel 4965AGN card. I read awhile back that others had attempted this but had mixed results. It would be nice to read details about your experience. If you do write one then please reply back with the link to your article.
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
Sorry to hear that, but I've reflowed 5 times myself since last report here. I'm planning to get something more reliable and powerful, but my budget doesn't look well, so I'll have to stick to this ancient machine.
About previous post (needing to flash patched BIOS for other WiFi card to work): You can find all the details by searching on Google for: "HP DV6000_DV9000_Compaq_V6000_INTEL_sp48121_30BBF2E_SLP_SLIC21_no_whitelist".
Sadly my motherboard died after rebaking, doesn't power up anymore. I couldnt find a rrplacement board so it will go to the cemetery. I am moving to a dv8 which i found at about $250,I just can't quit these gorgeous pavilions. The owner said it had no issues or repairs and this model didn't have nvidia issues. Even if it's an old config, it will suit me fine, the i7 it has isn't very bad and the gt230m video card is pretty ok. Upgrading from dv9000 to this is like heaven for me. The18.4 screen is what i've really looked for. Wish me luck.
Hello, can you share equus.exe ?
Cant find it, every link is dead or about hyundai.
Many thanks.
Joseph S, Thank you for posting the Equus.exe file.
I have confirmed that the Equus.exe file is the same copy as mine and matches the SHA2256 hash.
I'm surprised anyone is still running an HP dv9000 laptop.
I'm still using my second hand dv8 which I bought in 2017. It never failed, so I didn't need tot reflow anything. Luckily this one had no overheating issues, luckily because this model also has the overheating/reflowing video chip issue. The only issues were:
1) 1 bent pin from HDMI connector, I bought it so, try to bend it back, but it broke. So I had to take a piece of the metal housing apart in order to reach the core of the connector, I glued a new pin in place from an UTP female connector and soldered it at the bottom of the connector. Works since then without issues.
2) 1 broken plastic core of an USB connector. Got another one and glued it in to the place. Works since then without issues.
3) flat band cables from touch multimedia section and power button needed replacement, got them online from dissasembly of another device.
4) 1 of the speakers failed, so I got another speakers section from disassembly of another device.
5) A fixing part of the speakers cover was broken, so I had to glue another piece of plastic to hold it in place.
6) The CMOS battery holder was broken, so I had to glue another piece of plastic to hold the battery in place. It gave better results than using adhesive tape to hold the battery in place.
7) Keyboard was originally in French. I first managed to fit my dv9000 English keyboard in it by bending the flat band cable (the same layout) to fit the connector and stuck it in place using double adhesive tape. But after a while it failed as some of the keys didn't work anymore, so I found an new original dv8 English keyboard which wroks since without issues.
8) I opened the laptop directly after buying it to deep clean it and apply thermal paste on all heatsinks. Never needed a deep cleanup since then.
It is not my main laptop, but I use it when I need to do for example sorting tasks at which the big screen and the extremely comfortable keyboard and touchpad use make things faster to complete. The main laptop is an Acer Spin 5 15,4" touchscreen device with i7 8th gen and dedicated video, but although it was an expensive device it doesn't give that feeling of premium that the dv9000/dv8 still does. The complicated but succesful process of having Windows 7 on this device is worth in another post mentioning. The main idea is that the device is UEFI Class 3, so no CSM, therefore you need to use some emulator (vgashim) to get standard vga running to boot it or by slipstreaming the intergrated video driver, which you need to sign it using a custom certificate (and also slipstream the certificate using remote registry editor), because there is no official driver for integrated intel video cards starting from 8th gen, therefore you need to modify a 7th gen driver, which removes the officialy signed flag. But it's simply worth it, because Win10/11 is simplu trash.
Andrew, you are a brute for punishment!
Post a Comment