]> xenbits.xen.org Git - xenclient/xen.git/commitdiff
Base thermal zone implementation.
authorKamala Narasimhan <kamala.narasimhan@citrix.com>
Tue, 24 Mar 2009 21:09:46 +0000 (17:09 -0400)
committerKamala Narasimhan <kamala.narasimhan@citrix.com>
Tue, 24 Mar 2009 21:09:46 +0000 (17:09 -0400)
Very simple at this point with potential to extend in future.

tools/firmware/hvmloader/acpi/ssdt_pm.asl
tools/firmware/hvmloader/acpi/ssdt_pm.h
tools/xenpmd/xenpmd.c

index 38714c87e52314c13a862ec1c2af71230ba549ac..6bea415879622f9a90bb7267eb93eb05d193e438 100644 (file)
@@ -95,6 +95,14 @@ DefinitionBlock ("SSDT_PM.aml", "SSDT", 2, "Xen", "HVM", 0)
             P88,  8
         }
 
+        /*OperationRegion for thermal zone */
+        OperationRegion (PRT4, SystemIO, 0x90, 0x04)
+        Field (PRT4, WordAcc, NoLock, Preserve)
+        {
+            P90,  16,
+            P92,  16
+        }
+
         /* OperationRegion for Power Button */
         OperationRegion (PBOP, SystemIO, 0x200, 0x01)
         Field (PBOP, ByteAcc, NoLock, WriteAsZeros)
@@ -529,6 +537,24 @@ DefinitionBlock ("SSDT_PM.aml", "SSDT", 2, "Xen", "HVM", 0)
         }
     }
 
+    Scope (\_TZ)
+    {
+        ThermalZone (THM)
+        {
+            Method (_CRT, 0, NotSerialized)
+            {
+                Store(\_SB.P92, Local0)
+                Return (Local0)
+            }
+
+            Method (_TMP, 0, NotSerialized)
+            {
+                Store(\_SB.P90, Local0)
+                Return (Local0)
+            }
+        }
+    }
+
     /*  Wire GPE events to notify power state
      *  changes like ac power to battery use etc.
      */
index 0820ca13b83d9e47509773f04ce00d5025c7d765..cfea4633519fab2291112c48f7252ba1af9dc21d 100644 (file)
@@ -5,18 +5,18 @@
  * Copyright (C) 2000 - 2006 Intel Corporation
  * Supports ACPI Specification Revision 3.0a
  * 
- * Compilation of "ssdt_pm.asl" - Wed Feb 18 11:34:39 2009
+ * Compilation of "ssdt_pm.asl" - Tue Mar 24 16:59:23 2009
  * 
  * C source code output
  *
  */
 unsigned char AmlCode_PM[] =
 {
-    0x53,0x53,0x44,0x54,0xA4,0x07,0x00,0x00,  /* 00000000    "SSDT...." */
-    0x02,0x2D,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    ".-Xen..." */
+    0x53,0x53,0x44,0x54,0xF9,0x07,0x00,0x00,  /* 00000000    "SSDT...." */
+    0x02,0xDF,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    "..Xen..." */
     0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "HVM....." */
     0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
-    0x09,0x11,0x06,0x20,0x10,0x43,0x73,0x5C,  /* 00000020    "... .Cs\" */
+    0x09,0x11,0x06,0x20,0x10,0x40,0x75,0x5C,  /* 00000020    "... .@u\" */
     0x5F,0x53,0x42,0x5F,0x5B,0x80,0x44,0x42,  /* 00000028    "_SB_[.DB" */
     0x47,0x41,0x01,0x0B,0x40,0xB0,0x01,0x5B,  /* 00000030    "GA..@..[" */
     0x81,0x0B,0x44,0x42,0x47,0x41,0x01,0x44,  /* 00000038    "..DBGA.D" */
@@ -39,222 +39,233 @@ unsigned char AmlCode_PM[] =
     0x5B,0x80,0x50,0x52,0x54,0x33,0x01,0x0A,  /* 000000C0    "[.PRT3.." */
     0x88,0x01,0x5B,0x81,0x0B,0x50,0x52,0x54,  /* 000000C8    "..[..PRT" */
     0x33,0x01,0x50,0x38,0x38,0x5F,0x08,0x5B,  /* 000000D0    "3.P88_.[" */
-    0x80,0x50,0x42,0x4F,0x50,0x01,0x0B,0x00,  /* 000000D8    ".PBOP..." */
-    0x02,0x01,0x5B,0x81,0x10,0x50,0x42,0x4F,  /* 000000E0    "..[..PBO" */
-    0x50,0x41,0x53,0x4C,0x50,0x5F,0x01,0x57,  /* 000000E8    "PASLP_.W" */
-    0x41,0x4B,0x5F,0x01,0x5B,0x01,0x53,0x59,  /* 000000F0    "AK_.[.SY" */
-    0x4E,0x43,0x01,0x08,0x42,0x55,0x46,0x30,  /* 000000F8    "NC..BUF0" */
-    0x11,0x04,0x0B,0x00,0x01,0x08,0x42,0x55,  /* 00000100    "......BU" */
-    0x46,0x31,0x11,0x03,0x0A,0x08,0x8B,0x42,  /* 00000108    "F1.....B" */
-    0x55,0x46,0x31,0x00,0x42,0x55,0x46,0x41,  /* 00000110    "UF1.BUFA" */
-    0x8B,0x42,0x55,0x46,0x31,0x0A,0x04,0x42,  /* 00000118    ".BUF1..B" */
-    0x55,0x46,0x42,0x14,0x14,0x41,0x43,0x51,  /* 00000120    "UFB..ACQ" */
-    0x52,0x00,0x5B,0x23,0x53,0x59,0x4E,0x43,  /* 00000128    "R.[#SYNC" */
-    0xFF,0xFF,0x70,0x00,0x42,0x55,0x46,0x41,  /* 00000130    "..p.BUFA" */
-    0x14,0x31,0x49,0x4E,0x49,0x54,0x01,0x70,  /* 00000138    ".1INIT.p" */
-    0x42,0x55,0x46,0x41,0x60,0x75,0x60,0xA0,  /* 00000140    "BUFA`u`." */
-    0x22,0x92,0x94,0x60,0x87,0x42,0x55,0x46,  /* 00000148    ""..`.BUF" */
-    0x30,0x8C,0x42,0x55,0x46,0x30,0x42,0x55,  /* 00000150    "0.BUF0BU" */
-    0x46,0x41,0x54,0x4D,0x50,0x31,0x70,0x68,  /* 00000158    "FATMP1ph" */
-    0x54,0x4D,0x50,0x31,0x70,0x60,0x42,0x55,  /* 00000160    "TMP1p`BU" */
-    0x46,0x41,0x14,0x48,0x07,0x57,0x50,0x52,  /* 00000168    "FA.H.WPR" */
-    0x54,0x02,0x70,0x69,0x5C,0x2E,0x5F,0x53,  /* 00000170    "T.pi\._S" */
-    0x42,0x5F,0x50,0x38,0x36,0x5F,0x70,0x68,  /* 00000178    "B_P86_ph" */
-    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,0x42,  /* 00000180    "\._SB_PB" */
-    0x32,0x5F,0x70,0x68,0x5C,0x2E,0x5F,0x53,  /* 00000188    "2_ph\._S" */
-    0x42,0x5F,0x44,0x42,0x47,0x32,0x70,0x69,  /* 00000190    "B_DBG2pi" */
-    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x44,0x42,  /* 00000198    "\._SB_DB" */
-    0x47,0x34,0x70,0x5C,0x2E,0x5F,0x53,0x42,  /* 000001A0    "G4p\._SB" */
-    0x5F,0x50,0x42,0x32,0x5F,0x60,0xA2,0x11,  /* 000001A8    "_PB2_`.." */
-    0x92,0x93,0x60,0x00,0x70,0x5C,0x2E,0x5F,  /* 000001B0    "..`.p\._" */
-    0x53,0x42,0x5F,0x50,0x42,0x32,0x5F,0x60,  /* 000001B8    "SB_PB2_`" */
-    0x70,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 000001C0    "p\._SB_P" */
-    0x38,0x36,0x5F,0x61,0x70,0x61,0x5C,0x2E,  /* 000001C8    "86_apa\." */
-    0x5F,0x53,0x42,0x5F,0x44,0x42,0x47,0x33,  /* 000001D0    "_SB_DBG3" */
-    0xA4,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 000001D8    ".\._SB_P" */
-    0x38,0x36,0x5F,0x14,0x1D,0x48,0x4C,0x50,  /* 000001E0    "86_..HLP" */
-    0x31,0x02,0xA0,0x16,0x95,0x69,0x87,0x68,  /* 000001E8    "1....i.h" */
-    0x8C,0x68,0x69,0x54,0x4D,0x50,0x31,0x57,  /* 000001F0    ".hiTMP1W" */
-    0x50,0x52,0x54,0x0A,0x7C,0x54,0x4D,0x50,  /* 000001F8    "PRT.|TMP" */
-    0x31,0x14,0x23,0x48,0x4C,0x50,0x32,0x00,  /* 00000200    "1.#HLP2." */
-    0x57,0x50,0x52,0x54,0x0A,0x7B,0x00,0x70,  /* 00000208    "WPRT.{.p" */
-    0x00,0x60,0xA2,0x12,0x95,0x60,0x42,0x55,  /* 00000210    ".`...`BU" */
-    0x46,0x41,0x48,0x4C,0x50,0x31,0x42,0x55,  /* 00000218    "FAHLP1BU" */
-    0x46,0x30,0x60,0x75,0x60,0x14,0x1F,0x48,  /* 00000220    "F0`u`..H" */
-    0x4C,0x50,0x33,0x02,0xA0,0x18,0x95,0x69,  /* 00000228    "LP3....i" */
-    0x87,0x68,0x8C,0x68,0x69,0x54,0x4D,0x50,  /* 00000230    ".h.hiTMP" */
-    0x31,0x70,0x57,0x50,0x52,0x54,0x0A,0x7D,  /* 00000238    "1pWPRT.}" */
-    0x00,0x54,0x4D,0x50,0x31,0x14,0x23,0x48,  /* 00000240    ".TMP1.#H" */
-    0x4C,0x50,0x34,0x00,0x70,0x00,0x60,0xA2,  /* 00000248    "LP4.p.`." */
-    0x19,0x95,0x60,0x42,0x55,0x46,0x42,0x72,  /* 00000250    "..`BUFBr" */
-    0x42,0x55,0x46,0x41,0x60,0x61,0x48,0x4C,  /* 00000258    "BUFA`aHL" */
-    0x50,0x33,0x42,0x55,0x46,0x30,0x61,0x75,  /* 00000260    "P3BUF0au" */
-    0x60,0x14,0x42,0x04,0x48,0x4C,0x50,0x35,  /* 00000268    "`.B.HLP5" */
-    0x00,0x48,0x4C,0x50,0x32,0x70,0x57,0x50,  /* 00000270    ".HLP2pWP" */
-    0x52,0x54,0x0A,0x79,0x00,0x42,0x55,0x46,  /* 00000278    "RT.y.BUF" */
-    0x42,0x72,0x42,0x55,0x46,0x41,0x42,0x55,  /* 00000280    "BrBUFABU" */
-    0x46,0x42,0x60,0xA0,0x1C,0x95,0x87,0x42,  /* 00000288    "FB`....B" */
-    0x55,0x46,0x30,0x60,0x70,0x87,0x42,0x55,  /* 00000290    "UF0`p.BU" */
-    0x46,0x30,0x60,0x74,0x60,0x42,0x55,0x46,  /* 00000298    "F0`t`BUF" */
-    0x41,0x60,0x70,0x60,0x42,0x55,0x46,0x42,  /* 000002A0    "A`p`BUFB" */
-    0x48,0x4C,0x50,0x34,0x14,0x32,0x48,0x4C,  /* 000002A8    "HLP4.2HL" */
-    0x50,0x36,0x00,0x70,0x42,0x55,0x46,0x41,  /* 000002B0    "P6.pBUFA" */
-    0x60,0x75,0x60,0xA0,0x21,0x92,0x94,0x60,  /* 000002B8    "`u`.!..`" */
-    0x87,0x42,0x55,0x46,0x30,0x8C,0x42,0x55,  /* 000002C0    ".BUF0.BU" */
-    0x46,0x30,0x42,0x55,0x46,0x41,0x54,0x4D,  /* 000002C8    "F0BUFATM" */
-    0x50,0x31,0x70,0x60,0x42,0x55,0x46,0x41,  /* 000002D0    "P1p`BUFA" */
-    0xA4,0x54,0x4D,0x50,0x31,0xA4,0x00,0x14,  /* 000002D8    ".TMP1..." */
-    0x35,0x48,0x4C,0x50,0x37,0x00,0x70,0x42,  /* 000002E0    "5HLP7.pB" */
-    0x55,0x46,0x41,0x60,0x72,0x60,0x0A,0x04,  /* 000002E8    "UFA`r`.." */
-    0x60,0xA0,0x21,0x92,0x94,0x60,0x87,0x42,  /* 000002F0    "`.!..`.B" */
-    0x55,0x46,0x30,0x8A,0x42,0x55,0x46,0x30,  /* 000002F8    "UF0.BUF0" */
-    0x42,0x55,0x46,0x41,0x53,0x58,0x32,0x32,  /* 00000300    "BUFASX22" */
-    0x70,0x60,0x42,0x55,0x46,0x41,0xA4,0x53,  /* 00000308    "p`BUFA.S" */
-    0x58,0x32,0x32,0xA4,0x00,0x14,0x1C,0x48,  /* 00000310    "X22....H" */
-    0x4C,0x50,0x38,0x02,0xA0,0x15,0x95,0x69,  /* 00000318    "LP8....i" */
-    0x87,0x68,0x8C,0x68,0x69,0x54,0x4D,0x50,  /* 00000320    ".h.hiTMP" */
-    0x31,0x70,0x48,0x4C,0x50,0x36,0x54,0x4D,  /* 00000328    "1pHLP6TM" */
-    0x50,0x31,0x14,0x16,0x48,0x4C,0x50,0x39,  /* 00000330    "P1..HLP9" */
-    0x02,0x70,0x00,0x60,0xA2,0x0C,0x95,0x60,  /* 00000338    ".p.`...`" */
-    0x69,0x48,0x4C,0x50,0x38,0x68,0x60,0x75,  /* 00000340    "iHLP8h`u" */
-    0x60,0x14,0x22,0x48,0x4C,0x50,0x41,0x00,  /* 00000348    "`."HLPA." */
-    0x70,0x48,0x4C,0x50,0x36,0x60,0x08,0x54,  /* 00000350    "pHLP6`.T" */
-    0x4D,0x50,0x5F,0x11,0x02,0x60,0x48,0x4C,  /* 00000358    "MP_..`HL" */
-    0x50,0x39,0x54,0x4D,0x50,0x5F,0x60,0xA4,  /* 00000360    "P9TMP_`." */
-    0x54,0x4D,0x50,0x5F,0x14,0x0C,0x52,0x45,  /* 00000368    "TMP_..RE" */
-    0x4C,0x5F,0x00,0x5B,0x27,0x53,0x59,0x4E,  /* 00000370    "L_.['SYN" */
-    0x43,0x14,0x41,0x05,0x45,0x30,0x5F,0x5F,  /* 00000378    "C.A.E0__" */
-    0x00,0xA0,0x24,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000380    "..$\._SB" */
-    0x5F,0x53,0x4C,0x50,0x5F,0x70,0x01,0x5C,  /* 00000388    "_SLP_p.\" */
-    0x2E,0x5F,0x53,0x42,0x5F,0x53,0x4C,0x50,  /* 00000390    "._SB_SLP" */
-    0x5F,0x86,0x5C,0x2E,0x5F,0x53,0x42,0x5F,  /* 00000398    "_.\._SB_" */
-    0x53,0x4C,0x50,0x42,0x0A,0x80,0xA0,0x24,  /* 000003A0    "SLPB...$" */
-    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x57,0x41,  /* 000003A8    "\._SB_WA" */
-    0x4B,0x5F,0x70,0x01,0x5C,0x2E,0x5F,0x53,  /* 000003B0    "K_p.\._S" */
-    0x42,0x5F,0x57,0x41,0x4B,0x5F,0x86,0x5C,  /* 000003B8    "B_WAK_.\" */
-    0x2E,0x5F,0x53,0x42,0x5F,0x53,0x4C,0x50,  /* 000003C0    "._SB_SLP" */
-    0x42,0x0A,0x02,0x14,0x41,0x05,0x45,0x31,  /* 000003C8    "B...A.E1" */
-    0x5F,0x5F,0x00,0xA0,0x24,0x5C,0x2E,0x5F,  /* 000003D0    "__..$\._" */
-    0x53,0x42,0x5F,0x53,0x4C,0x50,0x5F,0x70,  /* 000003D8    "SB_SLP_p" */
-    0x01,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x53,  /* 000003E0    ".\._SB_S" */
-    0x4C,0x50,0x5F,0x86,0x5C,0x2E,0x5F,0x53,  /* 000003E8    "LP_.\._S" */
-    0x42,0x5F,0x50,0x42,0x54,0x4E,0x0A,0x80,  /* 000003F0    "B_PBTN.." */
-    0xA0,0x24,0x5C,0x2E,0x5F,0x53,0x42,0x5F,  /* 000003F8    ".$\._SB_" */
-    0x57,0x41,0x4B,0x5F,0x70,0x01,0x5C,0x2E,  /* 00000400    "WAK_p.\." */
-    0x5F,0x53,0x42,0x5F,0x57,0x41,0x4B,0x5F,  /* 00000408    "_SB_WAK_" */
-    0x86,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000410    ".\._SB_P" */
-    0x42,0x54,0x4E,0x0A,0x02,0x14,0x13,0x45,  /* 00000418    "BTN....E" */
-    0x31,0x43,0x5F,0x00,0x86,0x5C,0x2E,0x5F,  /* 00000420    "1C_..\._" */
-    0x53,0x42,0x5F,0x41,0x43,0x5F,0x5F,0x0A,  /* 00000428    "SB_AC__." */
-    0x80,0x14,0x13,0x45,0x31,0x37,0x5F,0x00,  /* 00000430    "...E17_." */
-    0x86,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x4C,  /* 00000438    ".\._SB_L" */
-    0x49,0x44,0x5F,0x0A,0x80,0x5B,0x82,0x48,  /* 00000440    "ID_..[.H" */
-    0x05,0x4C,0x49,0x44,0x5F,0x08,0x5F,0x48,  /* 00000448    ".LID_._H" */
-    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0D,0x14,  /* 00000450    "ID.A...." */
-    0x1D,0x5F,0x4C,0x49,0x44,0x00,0x70,0x5C,  /* 00000458    "._LID.p\" */
-    0x2E,0x5F,0x53,0x42,0x5F,0x50,0x38,0x38,  /* 00000460    "._SB_P88" */
-    0x5F,0x60,0xA0,0x08,0x7B,0x60,0x0A,0x04,  /* 00000468    "_`..{`.." */
-    0x00,0xA4,0x01,0xA4,0x00,0x08,0x5F,0x50,  /* 00000470    "......_P" */
-    0x52,0x57,0x12,0x06,0x02,0x0A,0x17,0x0A,  /* 00000478    "RW......" */
-    0x03,0x14,0x1D,0x5F,0x50,0x53,0x57,0x01,  /* 00000480    "..._PSW." */
-    0x70,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000488    "p\._SB_P" */
-    0x38,0x38,0x5F,0x60,0xA0,0x08,0x7B,0x60,  /* 00000490    "88_`..{`" */
-    0x0A,0x04,0x00,0xA4,0x01,0xA4,0x00,0x5B,  /* 00000498    ".......[" */
-    0x82,0x1A,0x50,0x42,0x54,0x4E,0x08,0x5F,  /* 000004A0    "..PBTN._" */
-    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0C,  /* 000004A8    "HID.A..." */
-    0x08,0x5F,0x50,0x52,0x57,0x12,0x05,0x02,  /* 000004B0    "._PRW..." */
-    0x01,0x0A,0x04,0x5B,0x82,0x1A,0x53,0x4C,  /* 000004B8    "...[..SL" */
-    0x50,0x42,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 000004C0    "PB._HID." */
-    0x41,0xD0,0x0C,0x0E,0x08,0x5F,0x50,0x52,  /* 000004C8    "A...._PR" */
-    0x57,0x12,0x05,0x02,0x01,0x0A,0x04,0x5B,  /* 000004D0    "W......[" */
-    0x82,0x41,0x05,0x41,0x43,0x5F,0x5F,0x08,  /* 000004D8    ".A.AC__." */
-    0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50,  /* 000004E0    "_HID.ACP" */
-    0x49,0x30,0x30,0x30,0x33,0x00,0x08,0x5F,  /* 000004E8    "I0003.._" */
-    0x50,0x43,0x4C,0x12,0x0F,0x03,0x5C,0x5F,  /* 000004F0    "PCL...\_" */
-    0x53,0x42,0x5F,0x42,0x41,0x54,0x30,0x42,  /* 000004F8    "SB_BAT0B" */
-    0x41,0x54,0x31,0x14,0x1C,0x5F,0x50,0x53,  /* 00000500    "AT1.._PS" */
-    0x52,0x00,0x70,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000508    "R.p\._SB" */
-    0x5F,0x50,0x38,0x38,0x5F,0x60,0xA0,0x07,  /* 00000510    "_P88_`.." */
-    0x7B,0x60,0x01,0x00,0xA4,0x01,0xA4,0x00,  /* 00000518    "{`......" */
-    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000520    ".._STA.." */
-    0x0A,0x0F,0x08,0x42,0x49,0x46,0x50,0x12,  /* 00000528    "...BIFP." */
-    0x02,0x0D,0x14,0x49,0x0C,0x42,0x49,0x46,  /* 00000530    "...I.BIF" */
-    0x5F,0x01,0x41,0x43,0x51,0x52,0x49,0x4E,  /* 00000538    "_.ACQRIN" */
-    0x49,0x54,0x01,0x49,0x4E,0x49,0x54,0x68,  /* 00000540    "IT.INITh" */
-    0x48,0x4C,0x50,0x35,0x70,0x48,0x4C,0x50,  /* 00000548    "HLP5pHLP" */
-    0x37,0x88,0x42,0x49,0x46,0x50,0x00,0x00,  /* 00000550    "7.BIFP.." */
-    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 00000558    "pHLP7.BI" */
-    0x46,0x50,0x01,0x00,0x70,0x48,0x4C,0x50,  /* 00000560    "FP..pHLP" */
-    0x37,0x88,0x42,0x49,0x46,0x50,0x0A,0x02,  /* 00000568    "7.BIFP.." */
-    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 00000570    ".pHLP7.B" */
-    0x49,0x46,0x50,0x0A,0x03,0x00,0x70,0x48,  /* 00000578    "IFP...pH" */
-    0x4C,0x50,0x37,0x88,0x42,0x49,0x46,0x50,  /* 00000580    "LP7.BIFP" */
-    0x0A,0x04,0x00,0x70,0x48,0x4C,0x50,0x37,  /* 00000588    "...pHLP7" */
-    0x88,0x42,0x49,0x46,0x50,0x0A,0x05,0x00,  /* 00000590    ".BIFP..." */
-    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 00000598    "pHLP7.BI" */
-    0x46,0x50,0x0A,0x06,0x00,0x70,0x48,0x4C,  /* 000005A0    "FP...pHL" */
-    0x50,0x37,0x88,0x42,0x49,0x46,0x50,0x0A,  /* 000005A8    "P7.BIFP." */
-    0x07,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 000005B0    "..pHLP7." */
-    0x42,0x49,0x46,0x50,0x0A,0x08,0x00,0x70,  /* 000005B8    "BIFP...p" */
-    0x48,0x4C,0x50,0x41,0x88,0x42,0x49,0x46,  /* 000005C0    "HLPA.BIF" */
-    0x50,0x0A,0x09,0x00,0x70,0x48,0x4C,0x50,  /* 000005C8    "P...pHLP" */
-    0x41,0x88,0x42,0x49,0x46,0x50,0x0A,0x0A,  /* 000005D0    "A.BIFP.." */
-    0x00,0x70,0x48,0x4C,0x50,0x41,0x88,0x42,  /* 000005D8    ".pHLPA.B" */
-    0x49,0x46,0x50,0x0A,0x0B,0x00,0x70,0x48,  /* 000005E0    "IFP...pH" */
-    0x4C,0x50,0x41,0x88,0x42,0x49,0x46,0x50,  /* 000005E8    "LPA.BIFP" */
-    0x0A,0x0C,0x00,0x52,0x45,0x4C,0x5F,0xA4,  /* 000005F0    "...REL_." */
-    0x42,0x49,0x46,0x50,0x5B,0x82,0x41,0x0B,  /* 000005F8    "BIFP[.A." */
-    0x42,0x41,0x54,0x30,0x08,0x5F,0x48,0x49,  /* 00000600    "BAT0._HI" */
-    0x44,0x0C,0x41,0xD0,0x0C,0x0A,0x08,0x5F,  /* 00000608    "D.A...._" */
-    0x55,0x49,0x44,0x01,0x08,0x5F,0x50,0x43,  /* 00000610    "UID.._PC" */
-    0x4C,0x12,0x07,0x01,0x5C,0x5F,0x53,0x42,  /* 00000618    "L...\_SB" */
-    0x5F,0x14,0x1F,0x5F,0x53,0x54,0x41,0x00,  /* 00000620    "_.._STA." */
-    0x70,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000628    "p\._SB_P" */
-    0x38,0x38,0x5F,0x60,0xA0,0x09,0x7B,0x60,  /* 00000630    "88_`..{`" */
-    0x0A,0x02,0x00,0xA4,0x0A,0x1F,0xA4,0x0A,  /* 00000638    "........" */
-    0x0F,0x14,0x0F,0x5F,0x42,0x49,0x46,0x00,  /* 00000640    "..._BIF." */
-    0x70,0x42,0x49,0x46,0x5F,0x01,0x60,0xA4,  /* 00000648    "pBIF_.`." */
-    0x60,0x14,0x4D,0x05,0x5F,0x42,0x53,0x54,  /* 00000650    "`.M._BST" */
-    0x00,0x41,0x43,0x51,0x52,0x49,0x4E,0x49,  /* 00000658    ".ACQRINI" */
-    0x54,0x0A,0x02,0x49,0x4E,0x49,0x54,0x01,  /* 00000660    "T..INIT." */
-    0x48,0x4C,0x50,0x35,0x08,0x42,0x53,0x54,  /* 00000668    "HLP5.BST" */
-    0x30,0x12,0x02,0x04,0x70,0x48,0x4C,0x50,  /* 00000670    "0...pHLP" */
-    0x37,0x88,0x42,0x53,0x54,0x30,0x00,0x00,  /* 00000678    "7.BST0.." */
-    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x53,  /* 00000680    "pHLP7.BS" */
-    0x54,0x30,0x01,0x00,0x70,0x48,0x4C,0x50,  /* 00000688    "T0..pHLP" */
-    0x37,0x88,0x42,0x53,0x54,0x30,0x0A,0x02,  /* 00000690    "7.BST0.." */
-    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 00000698    ".pHLP7.B" */
-    0x53,0x54,0x30,0x0A,0x03,0x00,0x52,0x45,  /* 000006A0    "ST0...RE" */
-    0x4C,0x5F,0xA4,0x42,0x53,0x54,0x30,0x5B,  /* 000006A8    "L_.BST0[" */
-    0x82,0x47,0x0A,0x42,0x41,0x54,0x31,0x08,  /* 000006B0    ".G.BAT1." */
-    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,  /* 000006B8    "_HID.A.." */
-    0x0A,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,  /* 000006C0    ".._UID.." */
-    0x08,0x5F,0x50,0x43,0x4C,0x12,0x07,0x01,  /* 000006C8    "._PCL..." */
-    0x5C,0x5F,0x53,0x42,0x5F,0x14,0x09,0x5F,  /* 000006D0    "\_SB_.._" */
-    0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x14,  /* 000006D8    "STA....." */
-    0x19,0x5F,0x42,0x49,0x46,0x00,0x70,0x5C,  /* 000006E0    "._BIF.p\" */
-    0x2E,0x5F,0x53,0x42,0x5F,0x50,0x42,0x32,  /* 000006E8    "._SB_PB2" */
-    0x5F,0x60,0xA4,0x42,0x49,0x46,0x5F,0x0A,  /* 000006F0    "_`.BIF_." */
-    0x02,0x14,0x4E,0x05,0x5F,0x42,0x53,0x54,  /* 000006F8    "..N._BST" */
-    0x00,0x41,0x43,0x51,0x52,0x49,0x4E,0x49,  /* 00000700    ".ACQRINI" */
-    0x54,0x0A,0x02,0x49,0x4E,0x49,0x54,0x0A,  /* 00000708    "T..INIT." */
-    0x02,0x48,0x4C,0x50,0x35,0x08,0x42,0x53,  /* 00000710    ".HLP5.BS" */
-    0x54,0x31,0x12,0x02,0x04,0x70,0x48,0x4C,  /* 00000718    "T1...pHL" */
-    0x50,0x37,0x88,0x42,0x53,0x54,0x31,0x00,  /* 00000720    "P7.BST1." */
-    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 00000728    ".pHLP7.B" */
-    0x53,0x54,0x31,0x01,0x00,0x70,0x48,0x4C,  /* 00000730    "ST1..pHL" */
-    0x50,0x37,0x88,0x42,0x53,0x54,0x31,0x0A,  /* 00000738    "P7.BST1." */
-    0x02,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000740    "..pHLP7." */
-    0x42,0x53,0x54,0x31,0x0A,0x03,0x00,0x52,  /* 00000748    "BST1...R" */
-    0x45,0x4C,0x5F,0xA4,0x42,0x53,0x54,0x31,  /* 00000750    "EL_.BST1" */
-    0x10,0x4B,0x04,0x5C,0x5F,0x47,0x50,0x45,  /* 00000758    ".K.\_GPE" */
-    0x14,0x10,0x5F,0x4C,0x30,0x30,0x00,0x5C,  /* 00000760    ".._L00.\" */
-    0x2E,0x5F,0x53,0x42,0x5F,0x45,0x30,0x5F,  /* 00000768    "._SB_E0_" */
-    0x5F,0x14,0x10,0x5F,0x4C,0x30,0x31,0x00,  /* 00000770    "_.._L01." */
-    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x45,0x31,  /* 00000778    "\._SB_E1" */
-    0x5F,0x5F,0x14,0x10,0x5F,0x4C,0x31,0x43,  /* 00000780    "__.._L1C" */
-    0x00,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x45,  /* 00000788    ".\._SB_E" */
-    0x31,0x43,0x5F,0x14,0x10,0x5F,0x4C,0x31,  /* 00000790    "1C_.._L1" */
-    0x37,0x00,0x5C,0x2E,0x5F,0x53,0x42,0x5F,  /* 00000798    "7.\._SB_" */
-    0x45,0x31,0x37,0x5F,
+    0x80,0x50,0x52,0x54,0x34,0x01,0x0A,0x90,  /* 000000D8    ".PRT4..." */
+    0x0A,0x04,0x5B,0x81,0x10,0x50,0x52,0x54,  /* 000000E0    "..[..PRT" */
+    0x34,0x02,0x50,0x39,0x30,0x5F,0x10,0x50,  /* 000000E8    "4.P90_.P" */
+    0x39,0x32,0x5F,0x10,0x5B,0x80,0x50,0x42,  /* 000000F0    "92_.[.PB" */
+    0x4F,0x50,0x01,0x0B,0x00,0x02,0x01,0x5B,  /* 000000F8    "OP.....[" */
+    0x81,0x10,0x50,0x42,0x4F,0x50,0x41,0x53,  /* 00000100    "..PBOPAS" */
+    0x4C,0x50,0x5F,0x01,0x57,0x41,0x4B,0x5F,  /* 00000108    "LP_.WAK_" */
+    0x01,0x5B,0x01,0x53,0x59,0x4E,0x43,0x01,  /* 00000110    ".[.SYNC." */
+    0x08,0x42,0x55,0x46,0x30,0x11,0x04,0x0B,  /* 00000118    ".BUF0..." */
+    0x00,0x01,0x08,0x42,0x55,0x46,0x31,0x11,  /* 00000120    "...BUF1." */
+    0x03,0x0A,0x08,0x8B,0x42,0x55,0x46,0x31,  /* 00000128    "....BUF1" */
+    0x00,0x42,0x55,0x46,0x41,0x8B,0x42,0x55,  /* 00000130    ".BUFA.BU" */
+    0x46,0x31,0x0A,0x04,0x42,0x55,0x46,0x42,  /* 00000138    "F1..BUFB" */
+    0x14,0x14,0x41,0x43,0x51,0x52,0x00,0x5B,  /* 00000140    "..ACQR.[" */
+    0x23,0x53,0x59,0x4E,0x43,0xFF,0xFF,0x70,  /* 00000148    "#SYNC..p" */
+    0x00,0x42,0x55,0x46,0x41,0x14,0x31,0x49,  /* 00000150    ".BUFA.1I" */
+    0x4E,0x49,0x54,0x01,0x70,0x42,0x55,0x46,  /* 00000158    "NIT.pBUF" */
+    0x41,0x60,0x75,0x60,0xA0,0x22,0x92,0x94,  /* 00000160    "A`u`.".." */
+    0x60,0x87,0x42,0x55,0x46,0x30,0x8C,0x42,  /* 00000168    "`.BUF0.B" */
+    0x55,0x46,0x30,0x42,0x55,0x46,0x41,0x54,  /* 00000170    "UF0BUFAT" */
+    0x4D,0x50,0x31,0x70,0x68,0x54,0x4D,0x50,  /* 00000178    "MP1phTMP" */
+    0x31,0x70,0x60,0x42,0x55,0x46,0x41,0x14,  /* 00000180    "1p`BUFA." */
+    0x48,0x07,0x57,0x50,0x52,0x54,0x02,0x70,  /* 00000188    "H.WPRT.p" */
+    0x69,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000190    "i\._SB_P" */
+    0x38,0x36,0x5F,0x70,0x68,0x5C,0x2E,0x5F,  /* 00000198    "86_ph\._" */
+    0x53,0x42,0x5F,0x50,0x42,0x32,0x5F,0x70,  /* 000001A0    "SB_PB2_p" */
+    0x68,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x44,  /* 000001A8    "h\._SB_D" */
+    0x42,0x47,0x32,0x70,0x69,0x5C,0x2E,0x5F,  /* 000001B0    "BG2pi\._" */
+    0x53,0x42,0x5F,0x44,0x42,0x47,0x34,0x70,  /* 000001B8    "SB_DBG4p" */
+    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,0x42,  /* 000001C0    "\._SB_PB" */
+    0x32,0x5F,0x60,0xA2,0x11,0x92,0x93,0x60,  /* 000001C8    "2_`....`" */
+    0x00,0x70,0x5C,0x2E,0x5F,0x53,0x42,0x5F,  /* 000001D0    ".p\._SB_" */
+    0x50,0x42,0x32,0x5F,0x60,0x70,0x5C,0x2E,  /* 000001D8    "PB2_`p\." */
+    0x5F,0x53,0x42,0x5F,0x50,0x38,0x36,0x5F,  /* 000001E0    "_SB_P86_" */
+    0x61,0x70,0x61,0x5C,0x2E,0x5F,0x53,0x42,  /* 000001E8    "apa\._SB" */
+    0x5F,0x44,0x42,0x47,0x33,0xA4,0x5C,0x2E,  /* 000001F0    "_DBG3.\." */
+    0x5F,0x53,0x42,0x5F,0x50,0x38,0x36,0x5F,  /* 000001F8    "_SB_P86_" */
+    0x14,0x1D,0x48,0x4C,0x50,0x31,0x02,0xA0,  /* 00000200    "..HLP1.." */
+    0x16,0x95,0x69,0x87,0x68,0x8C,0x68,0x69,  /* 00000208    "..i.h.hi" */
+    0x54,0x4D,0x50,0x31,0x57,0x50,0x52,0x54,  /* 00000210    "TMP1WPRT" */
+    0x0A,0x7C,0x54,0x4D,0x50,0x31,0x14,0x23,  /* 00000218    ".|TMP1.#" */
+    0x48,0x4C,0x50,0x32,0x00,0x57,0x50,0x52,  /* 00000220    "HLP2.WPR" */
+    0x54,0x0A,0x7B,0x00,0x70,0x00,0x60,0xA2,  /* 00000228    "T.{.p.`." */
+    0x12,0x95,0x60,0x42,0x55,0x46,0x41,0x48,  /* 00000230    "..`BUFAH" */
+    0x4C,0x50,0x31,0x42,0x55,0x46,0x30,0x60,  /* 00000238    "LP1BUF0`" */
+    0x75,0x60,0x14,0x1F,0x48,0x4C,0x50,0x33,  /* 00000240    "u`..HLP3" */
+    0x02,0xA0,0x18,0x95,0x69,0x87,0x68,0x8C,  /* 00000248    "....i.h." */
+    0x68,0x69,0x54,0x4D,0x50,0x31,0x70,0x57,  /* 00000250    "hiTMP1pW" */
+    0x50,0x52,0x54,0x0A,0x7D,0x00,0x54,0x4D,  /* 00000258    "PRT.}.TM" */
+    0x50,0x31,0x14,0x23,0x48,0x4C,0x50,0x34,  /* 00000260    "P1.#HLP4" */
+    0x00,0x70,0x00,0x60,0xA2,0x19,0x95,0x60,  /* 00000268    ".p.`...`" */
+    0x42,0x55,0x46,0x42,0x72,0x42,0x55,0x46,  /* 00000270    "BUFBrBUF" */
+    0x41,0x60,0x61,0x48,0x4C,0x50,0x33,0x42,  /* 00000278    "A`aHLP3B" */
+    0x55,0x46,0x30,0x61,0x75,0x60,0x14,0x42,  /* 00000280    "UF0au`.B" */
+    0x04,0x48,0x4C,0x50,0x35,0x00,0x48,0x4C,  /* 00000288    ".HLP5.HL" */
+    0x50,0x32,0x70,0x57,0x50,0x52,0x54,0x0A,  /* 00000290    "P2pWPRT." */
+    0x79,0x00,0x42,0x55,0x46,0x42,0x72,0x42,  /* 00000298    "y.BUFBrB" */
+    0x55,0x46,0x41,0x42,0x55,0x46,0x42,0x60,  /* 000002A0    "UFABUFB`" */
+    0xA0,0x1C,0x95,0x87,0x42,0x55,0x46,0x30,  /* 000002A8    "....BUF0" */
+    0x60,0x70,0x87,0x42,0x55,0x46,0x30,0x60,  /* 000002B0    "`p.BUF0`" */
+    0x74,0x60,0x42,0x55,0x46,0x41,0x60,0x70,  /* 000002B8    "t`BUFA`p" */
+    0x60,0x42,0x55,0x46,0x42,0x48,0x4C,0x50,  /* 000002C0    "`BUFBHLP" */
+    0x34,0x14,0x32,0x48,0x4C,0x50,0x36,0x00,  /* 000002C8    "4.2HLP6." */
+    0x70,0x42,0x55,0x46,0x41,0x60,0x75,0x60,  /* 000002D0    "pBUFA`u`" */
+    0xA0,0x21,0x92,0x94,0x60,0x87,0x42,0x55,  /* 000002D8    ".!..`.BU" */
+    0x46,0x30,0x8C,0x42,0x55,0x46,0x30,0x42,  /* 000002E0    "F0.BUF0B" */
+    0x55,0x46,0x41,0x54,0x4D,0x50,0x31,0x70,  /* 000002E8    "UFATMP1p" */
+    0x60,0x42,0x55,0x46,0x41,0xA4,0x54,0x4D,  /* 000002F0    "`BUFA.TM" */
+    0x50,0x31,0xA4,0x00,0x14,0x35,0x48,0x4C,  /* 000002F8    "P1...5HL" */
+    0x50,0x37,0x00,0x70,0x42,0x55,0x46,0x41,  /* 00000300    "P7.pBUFA" */
+    0x60,0x72,0x60,0x0A,0x04,0x60,0xA0,0x21,  /* 00000308    "`r`..`.!" */
+    0x92,0x94,0x60,0x87,0x42,0x55,0x46,0x30,  /* 00000310    "..`.BUF0" */
+    0x8A,0x42,0x55,0x46,0x30,0x42,0x55,0x46,  /* 00000318    ".BUF0BUF" */
+    0x41,0x53,0x58,0x32,0x32,0x70,0x60,0x42,  /* 00000320    "ASX22p`B" */
+    0x55,0x46,0x41,0xA4,0x53,0x58,0x32,0x32,  /* 00000328    "UFA.SX22" */
+    0xA4,0x00,0x14,0x1C,0x48,0x4C,0x50,0x38,  /* 00000330    "....HLP8" */
+    0x02,0xA0,0x15,0x95,0x69,0x87,0x68,0x8C,  /* 00000338    "....i.h." */
+    0x68,0x69,0x54,0x4D,0x50,0x31,0x70,0x48,  /* 00000340    "hiTMP1pH" */
+    0x4C,0x50,0x36,0x54,0x4D,0x50,0x31,0x14,  /* 00000348    "LP6TMP1." */
+    0x16,0x48,0x4C,0x50,0x39,0x02,0x70,0x00,  /* 00000350    ".HLP9.p." */
+    0x60,0xA2,0x0C,0x95,0x60,0x69,0x48,0x4C,  /* 00000358    "`...`iHL" */
+    0x50,0x38,0x68,0x60,0x75,0x60,0x14,0x22,  /* 00000360    "P8h`u`."" */
+    0x48,0x4C,0x50,0x41,0x00,0x70,0x48,0x4C,  /* 00000368    "HLPA.pHL" */
+    0x50,0x36,0x60,0x08,0x54,0x4D,0x50,0x5F,  /* 00000370    "P6`.TMP_" */
+    0x11,0x02,0x60,0x48,0x4C,0x50,0x39,0x54,  /* 00000378    "..`HLP9T" */
+    0x4D,0x50,0x5F,0x60,0xA4,0x54,0x4D,0x50,  /* 00000380    "MP_`.TMP" */
+    0x5F,0x14,0x0C,0x52,0x45,0x4C,0x5F,0x00,  /* 00000388    "_..REL_." */
+    0x5B,0x27,0x53,0x59,0x4E,0x43,0x14,0x41,  /* 00000390    "['SYNC.A" */
+    0x05,0x45,0x30,0x5F,0x5F,0x00,0xA0,0x24,  /* 00000398    ".E0__..$" */
+    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x53,0x4C,  /* 000003A0    "\._SB_SL" */
+    0x50,0x5F,0x70,0x01,0x5C,0x2E,0x5F,0x53,  /* 000003A8    "P_p.\._S" */
+    0x42,0x5F,0x53,0x4C,0x50,0x5F,0x86,0x5C,  /* 000003B0    "B_SLP_.\" */
+    0x2E,0x5F,0x53,0x42,0x5F,0x53,0x4C,0x50,  /* 000003B8    "._SB_SLP" */
+    0x42,0x0A,0x80,0xA0,0x24,0x5C,0x2E,0x5F,  /* 000003C0    "B...$\._" */
+    0x53,0x42,0x5F,0x57,0x41,0x4B,0x5F,0x70,  /* 000003C8    "SB_WAK_p" */
+    0x01,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x57,  /* 000003D0    ".\._SB_W" */
+    0x41,0x4B,0x5F,0x86,0x5C,0x2E,0x5F,0x53,  /* 000003D8    "AK_.\._S" */
+    0x42,0x5F,0x53,0x4C,0x50,0x42,0x0A,0x02,  /* 000003E0    "B_SLPB.." */
+    0x14,0x41,0x05,0x45,0x31,0x5F,0x5F,0x00,  /* 000003E8    ".A.E1__." */
+    0xA0,0x24,0x5C,0x2E,0x5F,0x53,0x42,0x5F,  /* 000003F0    ".$\._SB_" */
+    0x53,0x4C,0x50,0x5F,0x70,0x01,0x5C,0x2E,  /* 000003F8    "SLP_p.\." */
+    0x5F,0x53,0x42,0x5F,0x53,0x4C,0x50,0x5F,  /* 00000400    "_SB_SLP_" */
+    0x86,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000408    ".\._SB_P" */
+    0x42,0x54,0x4E,0x0A,0x80,0xA0,0x24,0x5C,  /* 00000410    "BTN...$\" */
+    0x2E,0x5F,0x53,0x42,0x5F,0x57,0x41,0x4B,  /* 00000418    "._SB_WAK" */
+    0x5F,0x70,0x01,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000420    "_p.\._SB" */
+    0x5F,0x57,0x41,0x4B,0x5F,0x86,0x5C,0x2E,  /* 00000428    "_WAK_.\." */
+    0x5F,0x53,0x42,0x5F,0x50,0x42,0x54,0x4E,  /* 00000430    "_SB_PBTN" */
+    0x0A,0x02,0x14,0x13,0x45,0x31,0x43,0x5F,  /* 00000438    "....E1C_" */
+    0x00,0x86,0x5C,0x2E,0x5F,0x53,0x42,0x5F,  /* 00000440    "..\._SB_" */
+    0x41,0x43,0x5F,0x5F,0x0A,0x80,0x14,0x13,  /* 00000448    "AC__...." */
+    0x45,0x31,0x37,0x5F,0x00,0x86,0x5C,0x2E,  /* 00000450    "E17_..\." */
+    0x5F,0x53,0x42,0x5F,0x4C,0x49,0x44,0x5F,  /* 00000458    "_SB_LID_" */
+    0x0A,0x80,0x5B,0x82,0x48,0x05,0x4C,0x49,  /* 00000460    "..[.H.LI" */
+    0x44,0x5F,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000468    "D_._HID." */
+    0x41,0xD0,0x0C,0x0D,0x14,0x1D,0x5F,0x4C,  /* 00000470    "A....._L" */
+    0x49,0x44,0x00,0x70,0x5C,0x2E,0x5F,0x53,  /* 00000478    "ID.p\._S" */
+    0x42,0x5F,0x50,0x38,0x38,0x5F,0x60,0xA0,  /* 00000480    "B_P88_`." */
+    0x08,0x7B,0x60,0x0A,0x04,0x00,0xA4,0x01,  /* 00000488    ".{`....." */
+    0xA4,0x00,0x08,0x5F,0x50,0x52,0x57,0x12,  /* 00000490    "..._PRW." */
+    0x06,0x02,0x0A,0x17,0x0A,0x03,0x14,0x1D,  /* 00000498    "........" */
+    0x5F,0x50,0x53,0x57,0x01,0x70,0x5C,0x2E,  /* 000004A0    "_PSW.p\." */
+    0x5F,0x53,0x42,0x5F,0x50,0x38,0x38,0x5F,  /* 000004A8    "_SB_P88_" */
+    0x60,0xA0,0x08,0x7B,0x60,0x0A,0x04,0x00,  /* 000004B0    "`..{`..." */
+    0xA4,0x01,0xA4,0x00,0x5B,0x82,0x1A,0x50,  /* 000004B8    "....[..P" */
+    0x42,0x54,0x4E,0x08,0x5F,0x48,0x49,0x44,  /* 000004C0    "BTN._HID" */
+    0x0C,0x41,0xD0,0x0C,0x0C,0x08,0x5F,0x50,  /* 000004C8    ".A...._P" */
+    0x52,0x57,0x12,0x05,0x02,0x01,0x0A,0x04,  /* 000004D0    "RW......" */
+    0x5B,0x82,0x1A,0x53,0x4C,0x50,0x42,0x08,  /* 000004D8    "[..SLPB." */
+    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,  /* 000004E0    "_HID.A.." */
+    0x0E,0x08,0x5F,0x50,0x52,0x57,0x12,0x05,  /* 000004E8    ".._PRW.." */
+    0x02,0x01,0x0A,0x04,0x5B,0x82,0x41,0x05,  /* 000004F0    "....[.A." */
+    0x41,0x43,0x5F,0x5F,0x08,0x5F,0x48,0x49,  /* 000004F8    "AC__._HI" */
+    0x44,0x0D,0x41,0x43,0x50,0x49,0x30,0x30,  /* 00000500    "D.ACPI00" */
+    0x30,0x33,0x00,0x08,0x5F,0x50,0x43,0x4C,  /* 00000508    "03.._PCL" */
+    0x12,0x0F,0x03,0x5C,0x5F,0x53,0x42,0x5F,  /* 00000510    "...\_SB_" */
+    0x42,0x41,0x54,0x30,0x42,0x41,0x54,0x31,  /* 00000518    "BAT0BAT1" */
+    0x14,0x1C,0x5F,0x50,0x53,0x52,0x00,0x70,  /* 00000520    ".._PSR.p" */
+    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,0x38,  /* 00000528    "\._SB_P8" */
+    0x38,0x5F,0x60,0xA0,0x07,0x7B,0x60,0x01,  /* 00000530    "8_`..{`." */
+    0x00,0xA4,0x01,0xA4,0x00,0x14,0x09,0x5F,  /* 00000538    "......._" */
+    0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,  /* 00000540    "STA....." */
+    0x42,0x49,0x46,0x50,0x12,0x02,0x0D,0x14,  /* 00000548    "BIFP...." */
+    0x49,0x0C,0x42,0x49,0x46,0x5F,0x01,0x41,  /* 00000550    "I.BIF_.A" */
+    0x43,0x51,0x52,0x49,0x4E,0x49,0x54,0x01,  /* 00000558    "CQRINIT." */
+    0x49,0x4E,0x49,0x54,0x68,0x48,0x4C,0x50,  /* 00000560    "INIThHLP" */
+    0x35,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 00000568    "5pHLP7.B" */
+    0x49,0x46,0x50,0x00,0x00,0x70,0x48,0x4C,  /* 00000570    "IFP..pHL" */
+    0x50,0x37,0x88,0x42,0x49,0x46,0x50,0x01,  /* 00000578    "P7.BIFP." */
+    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 00000580    ".pHLP7.B" */
+    0x49,0x46,0x50,0x0A,0x02,0x00,0x70,0x48,  /* 00000588    "IFP...pH" */
+    0x4C,0x50,0x37,0x88,0x42,0x49,0x46,0x50,  /* 00000590    "LP7.BIFP" */
+    0x0A,0x03,0x00,0x70,0x48,0x4C,0x50,0x37,  /* 00000598    "...pHLP7" */
+    0x88,0x42,0x49,0x46,0x50,0x0A,0x04,0x00,  /* 000005A0    ".BIFP..." */
+    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 000005A8    "pHLP7.BI" */
+    0x46,0x50,0x0A,0x05,0x00,0x70,0x48,0x4C,  /* 000005B0    "FP...pHL" */
+    0x50,0x37,0x88,0x42,0x49,0x46,0x50,0x0A,  /* 000005B8    "P7.BIFP." */
+    0x06,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 000005C0    "..pHLP7." */
+    0x42,0x49,0x46,0x50,0x0A,0x07,0x00,0x70,  /* 000005C8    "BIFP...p" */
+    0x48,0x4C,0x50,0x37,0x88,0x42,0x49,0x46,  /* 000005D0    "HLP7.BIF" */
+    0x50,0x0A,0x08,0x00,0x70,0x48,0x4C,0x50,  /* 000005D8    "P...pHLP" */
+    0x41,0x88,0x42,0x49,0x46,0x50,0x0A,0x09,  /* 000005E0    "A.BIFP.." */
+    0x00,0x70,0x48,0x4C,0x50,0x41,0x88,0x42,  /* 000005E8    ".pHLPA.B" */
+    0x49,0x46,0x50,0x0A,0x0A,0x00,0x70,0x48,  /* 000005F0    "IFP...pH" */
+    0x4C,0x50,0x41,0x88,0x42,0x49,0x46,0x50,  /* 000005F8    "LPA.BIFP" */
+    0x0A,0x0B,0x00,0x70,0x48,0x4C,0x50,0x41,  /* 00000600    "...pHLPA" */
+    0x88,0x42,0x49,0x46,0x50,0x0A,0x0C,0x00,  /* 00000608    ".BIFP..." */
+    0x52,0x45,0x4C,0x5F,0xA4,0x42,0x49,0x46,  /* 00000610    "REL_.BIF" */
+    0x50,0x5B,0x82,0x41,0x0B,0x42,0x41,0x54,  /* 00000618    "P[.A.BAT" */
+    0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000620    "0._HID.A" */
+    0xD0,0x0C,0x0A,0x08,0x5F,0x55,0x49,0x44,  /* 00000628    "...._UID" */
+    0x01,0x08,0x5F,0x50,0x43,0x4C,0x12,0x07,  /* 00000630    ".._PCL.." */
+    0x01,0x5C,0x5F,0x53,0x42,0x5F,0x14,0x1F,  /* 00000638    ".\_SB_.." */
+    0x5F,0x53,0x54,0x41,0x00,0x70,0x5C,0x2E,  /* 00000640    "_STA.p\." */
+    0x5F,0x53,0x42,0x5F,0x50,0x38,0x38,0x5F,  /* 00000648    "_SB_P88_" */
+    0x60,0xA0,0x09,0x7B,0x60,0x0A,0x02,0x00,  /* 00000650    "`..{`..." */
+    0xA4,0x0A,0x1F,0xA4,0x0A,0x0F,0x14,0x0F,  /* 00000658    "........" */
+    0x5F,0x42,0x49,0x46,0x00,0x70,0x42,0x49,  /* 00000660    "_BIF.pBI" */
+    0x46,0x5F,0x01,0x60,0xA4,0x60,0x14,0x4D,  /* 00000668    "F_.`.`.M" */
+    0x05,0x5F,0x42,0x53,0x54,0x00,0x41,0x43,  /* 00000670    "._BST.AC" */
+    0x51,0x52,0x49,0x4E,0x49,0x54,0x0A,0x02,  /* 00000678    "QRINIT.." */
+    0x49,0x4E,0x49,0x54,0x01,0x48,0x4C,0x50,  /* 00000680    "INIT.HLP" */
+    0x35,0x08,0x42,0x53,0x54,0x30,0x12,0x02,  /* 00000688    "5.BST0.." */
+    0x04,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 00000690    ".pHLP7.B" */
+    0x53,0x54,0x30,0x00,0x00,0x70,0x48,0x4C,  /* 00000698    "ST0..pHL" */
+    0x50,0x37,0x88,0x42,0x53,0x54,0x30,0x01,  /* 000006A0    "P7.BST0." */
+    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 000006A8    ".pHLP7.B" */
+    0x53,0x54,0x30,0x0A,0x02,0x00,0x70,0x48,  /* 000006B0    "ST0...pH" */
+    0x4C,0x50,0x37,0x88,0x42,0x53,0x54,0x30,  /* 000006B8    "LP7.BST0" */
+    0x0A,0x03,0x00,0x52,0x45,0x4C,0x5F,0xA4,  /* 000006C0    "...REL_." */
+    0x42,0x53,0x54,0x30,0x5B,0x82,0x47,0x0A,  /* 000006C8    "BST0[.G." */
+    0x42,0x41,0x54,0x31,0x08,0x5F,0x48,0x49,  /* 000006D0    "BAT1._HI" */
+    0x44,0x0C,0x41,0xD0,0x0C,0x0A,0x08,0x5F,  /* 000006D8    "D.A...._" */
+    0x55,0x49,0x44,0x0A,0x02,0x08,0x5F,0x50,  /* 000006E0    "UID..._P" */
+    0x43,0x4C,0x12,0x07,0x01,0x5C,0x5F,0x53,  /* 000006E8    "CL...\_S" */
+    0x42,0x5F,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 000006F0    "B_.._STA" */
+    0x00,0xA4,0x0A,0x0F,0x14,0x19,0x5F,0x42,  /* 000006F8    "......_B" */
+    0x49,0x46,0x00,0x70,0x5C,0x2E,0x5F,0x53,  /* 00000700    "IF.p\._S" */
+    0x42,0x5F,0x50,0x42,0x32,0x5F,0x60,0xA4,  /* 00000708    "B_PB2_`." */
+    0x42,0x49,0x46,0x5F,0x0A,0x02,0x14,0x4E,  /* 00000710    "BIF_...N" */
+    0x05,0x5F,0x42,0x53,0x54,0x00,0x41,0x43,  /* 00000718    "._BST.AC" */
+    0x51,0x52,0x49,0x4E,0x49,0x54,0x0A,0x02,  /* 00000720    "QRINIT.." */
+    0x49,0x4E,0x49,0x54,0x0A,0x02,0x48,0x4C,  /* 00000728    "INIT..HL" */
+    0x50,0x35,0x08,0x42,0x53,0x54,0x31,0x12,  /* 00000730    "P5.BST1." */
+    0x02,0x04,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000738    "..pHLP7." */
+    0x42,0x53,0x54,0x31,0x00,0x00,0x70,0x48,  /* 00000740    "BST1..pH" */
+    0x4C,0x50,0x37,0x88,0x42,0x53,0x54,0x31,  /* 00000748    "LP7.BST1" */
+    0x01,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000750    "..pHLP7." */
+    0x42,0x53,0x54,0x31,0x0A,0x02,0x00,0x70,  /* 00000758    "BST1...p" */
+    0x48,0x4C,0x50,0x37,0x88,0x42,0x53,0x54,  /* 00000760    "HLP7.BST" */
+    0x31,0x0A,0x03,0x00,0x52,0x45,0x4C,0x5F,  /* 00000768    "1...REL_" */
+    0xA4,0x42,0x53,0x54,0x31,0x10,0x37,0x5C,  /* 00000770    ".BST1.7\" */
+    0x5F,0x54,0x5A,0x5F,0x5B,0x85,0x2F,0x54,  /* 00000778    "_TZ_[./T" */
+    0x48,0x4D,0x5F,0x14,0x14,0x5F,0x43,0x52,  /* 00000780    "HM_.._CR" */
+    0x54,0x00,0x70,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000788    "T.p\._SB" */
+    0x5F,0x50,0x39,0x32,0x5F,0x60,0xA4,0x60,  /* 00000790    "_P92_`.`" */
+    0x14,0x14,0x5F,0x54,0x4D,0x50,0x00,0x70,  /* 00000798    ".._TMP.p" */
+    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,0x39,  /* 000007A0    "\._SB_P9" */
+    0x30,0x5F,0x60,0xA4,0x60,0x10,0x4B,0x04,  /* 000007A8    "0_`.`.K." */
+    0x5C,0x5F,0x47,0x50,0x45,0x14,0x10,0x5F,  /* 000007B0    "\_GPE.._" */
+    0x4C,0x30,0x30,0x00,0x5C,0x2E,0x5F,0x53,  /* 000007B8    "L00.\._S" */
+    0x42,0x5F,0x45,0x30,0x5F,0x5F,0x14,0x10,  /* 000007C0    "B_E0__.." */
+    0x5F,0x4C,0x30,0x31,0x00,0x5C,0x2E,0x5F,  /* 000007C8    "_L01.\._" */
+    0x53,0x42,0x5F,0x45,0x31,0x5F,0x5F,0x14,  /* 000007D0    "SB_E1__." */
+    0x10,0x5F,0x4C,0x31,0x43,0x00,0x5C,0x2E,  /* 000007D8    "._L1C.\." */
+    0x5F,0x53,0x42,0x5F,0x45,0x31,0x43,0x5F,  /* 000007E0    "_SB_E1C_" */
+    0x14,0x10,0x5F,0x4C,0x31,0x37,0x00,0x5C,  /* 000007E8    ".._L17.\" */
+    0x2E,0x5F,0x53,0x42,0x5F,0x45,0x31,0x37,  /* 000007F0    "._SB_E17" */
+    0x5F,
 };
index 1edf4b5fd7c51ea03eb13ef363af60e913b0c67b..373baad2d1528e79c2c0b89cf5d7b64277bb95cc 100644 (file)
@@ -92,13 +92,17 @@ extern void monitor_acpi_events(void);
 extern void acpi_events_cleanup(void);
 
 #ifdef RUN_IN_SIMULATE_MODE
-    #define BATTERY_DIR_PATH "/tmp/battery"
-    #define BATTERY_INFO_FILE_PATH "/tmp/battery/%s/info" 
-    #define BATTERY_STATE_FILE_PATH "/tmp/battery/%s/state"
+    #define BATTERY_DIR_PATH            "/tmp/battery"
+    #define BATTERY_INFO_FILE_PATH      "/tmp/battery/%s/info" 
+    #define BATTERY_STATE_FILE_PATH     "/tmp/battery/%s/state"
+    #define THERMAL_TRIP_POINTS_FILE    "/tmp/thermal_zone/%s/trip_points"
+    #define THERMAL_TEMPERATURE_FILE    "/tmp/thermal_zone/%s/temperature"
 #else
-    #define BATTERY_DIR_PATH "/proc/acpi/battery"
-    #define BATTERY_INFO_FILE_PATH "/proc/acpi/battery/%s/info"
-    #define BATTERY_STATE_FILE_PATH "/proc/acpi/battery/%s/state"
+    #define BATTERY_DIR_PATH            "/proc/acpi/battery"
+    #define BATTERY_INFO_FILE_PATH      "/proc/acpi/battery/%s/info"
+    #define BATTERY_STATE_FILE_PATH     "/proc/acpi/battery/%s/state"
+    #define THERMAL_TRIP_POINTS_FILE    "/proc/acpi/thermal_zone/%s/trip_points"
+    #define THERMAL_TEMPERATURE_FILE    "/proc/acpi/thermal_zone/%s/temperature"
 #endif
 
 FILE *get_next_battery_file(DIR *battery_dir, 
@@ -447,44 +451,188 @@ void write_battery_status_to_xenstore(struct battery_status *status)
     xs_write(xs, XBT_NULL, "/pm/bst", val, 35);
 }
 
-int wait_for_and_update_battery_status_request(void)
+void update_battery_status(void)
 {
     DIR *dir;
-    int ret = 0;
-    unsigned int count;
     struct battery_status status;
 
-    while ( true )
-    {
-        /* KN:@TODO - It is rather inefficient to not cache the file handle.
-         *  Switch to caching file handle. 
-         */
-        dir = opendir(BATTERY_DIR_PATH);
-        if ( !dir )
-            return 0;
+    /* KN:@TODO - It is rather inefficient to not cache the file handle.
+     *  Switch to caching file handle. 
+     */
+    dir = opendir(BATTERY_DIR_PATH);
+    if ( !dir )
+        return;
 
-        while ( get_next_battery_info_or_status(dir, BST, (void *)&status) ) 
-        {
+    while ( get_next_battery_info_or_status(dir, BST, (void *)&status) ) 
+    {
 #ifdef RUN_STANDALONE
-            print_battery_status(&status);
+        print_battery_status(&status);
 #endif
-            if ( status.present == YES ) 
-            {
-                write_battery_status_to_xenstore(&status);
-                ret = 1;
-                /* rethink this; though I have never seen, there might be
-                 * systems out there with more than one battery device 
-                 * present
-                 */
-                break;
-            }
+        if ( status.present == YES ) 
+        {
+            write_battery_status_to_xenstore(&status);
+            /* rethink this; though I have never seen, there might be
+             * systems out there with more than one battery device 
+             * present
+             */
+            break;
         }
-        closedir(dir);
-        xs_watch(xs, "/pm/events", "refreshbatterystatus");
-        xs_read_watch(xs, &count); 
     }
 
-    return ret;
+    closedir(dir);
+    return;
+}
+
+int open_thermal_files(char *subdir, FILE **trip_points_file, FILE **temp_file)
+{
+    char trip_points_file_name[64];
+    char temperature_file_name[64];
+
+    snprintf(trip_points_file_name, 64, THERMAL_TRIP_POINTS_FILE, subdir);
+    snprintf(temperature_file_name, 64, THERMAL_TEMPERATURE_FILE, subdir);
+
+    *trip_points_file = fopen(trip_points_file_name, "r");
+    *temp_file = fopen(temperature_file_name, "r");
+
+    if ( *trip_points_file == NULL || *temp_file == NULL )
+    {
+        if ( *trip_points_file )
+        {
+            fclose(*trip_points_file);
+            *trip_points_file = NULL;
+        }
+
+        if ( *temp_file )
+        {
+            fclose(*temp_file);
+            *temp_file = NULL;
+        }
+        return 0;
+    }
+     
+    return 1;
+}
+
+/* Note:  Below is the simplest approach based on studying the 
+ * different thermal zones exposed by the OEMs at this point.
+ * In specific Dell E6*00, Lenovo T400, HP 6930p was taken into
+ * consideration before arriving at which thermal zone to expose
+ * to the guest.  But, if we choose to expand our thermal zone
+ * implementation to be closer to the underlying firmware, we
+ * should revisit the below.
+ */
+void get_thermal_files(FILE **trip_points_file, FILE **temp_file)
+{
+    if ( open_thermal_files("/THM", trip_points_file, temp_file) )
+        return;
+
+    if ( open_thermal_files("/CPUZ", trip_points_file, temp_file) )
+        return;
+
+    if ( open_thermal_files("/THM1", trip_points_file, temp_file) )
+        return;
+
+    open_thermal_files("/THM0", trip_points_file, temp_file);
+}
+
+/* @TODO: KN: There is similar code in one other place.
+ * consolidate it to one place.
+ */
+int get_attribute_value(char *line_info, char *attribute_name)
+{
+    char attrib_name[64];
+    char attrib_value[64];
+    char *delimiter;
+    unsigned long length;
+
+    length = strlen(line_info);
+    delimiter = (char *) strchr( line_info, ':');
+    if ( (!delimiter) || (delimiter == line_info) ||
+         (delimiter == line_info + length) )
+        return 0;
+
+    strncpy(attrib_name, line_info, delimiter-line_info);
+    if ( !strstr(attrib_name, attribute_name) )
+        return 0;
+
+    while ( *(delimiter+1) == ' ' )
+    {
+        delimiter++;
+        if ( delimiter+1 == line_info + length)
+            return 0;
+    }
+
+    strncpy(attrib_value, delimiter+1,
+            (unsigned long)line_info + length -(unsigned long)delimiter);
+    return strtoull(attrib_value, NULL, 10);
+}
+
+int get_thermalzone_value(FILE *file, char *attribute_name)
+{
+    char line_info[256];
+    int attribute_value;
+
+    memset(line_info, 0, 256);
+    while ( fgets(line_info, 1024, file) != NULL )
+    {
+        attribute_value = get_attribute_value(line_info, attribute_name);
+        if ( attribute_value > 0 )
+            return attribute_value;
+        memset(line_info, 0, 256);
+    }
+
+    return 0;
+}
+
+void update_thermal_info(void)
+{
+    char buffer[32];
+    int current_temp, critical_trip_point;
+    FILE *trip_points_file = NULL, *temp_file = NULL;
+
+    get_thermal_files(&trip_points_file, &temp_file);
+    if ( trip_points_file == NULL || temp_file == NULL )
+        return; 
+
+    current_temp = get_thermalzone_value(temp_file, "temperature");
+    critical_trip_point = get_thermalzone_value(trip_points_file, "critical");
+
+    fclose(trip_points_file);
+    fclose(temp_file);
+
+    if ( current_temp <= 0 || critical_trip_point <= 0 )
+        return;
+
+    snprintf(buffer, 32, "%d", current_temp);
+    xs_write(xs, XBT_NULL, "/pm/current_temperature", buffer, strlen(buffer));
+
+    snprintf(buffer, 32, "%d", critical_trip_point);
+    xs_write(xs, XBT_NULL, "/pm/critical_temperature", buffer, strlen(buffer));    
+}
+
+void wait_for_and_update_power_mgmt_info(void)
+{
+    char **buffer;
+    unsigned int count;
+
+    update_battery_status();
+    update_thermal_info();
+
+    xs_watch(xs, "/pm/events", "refreshbatterystatus");
+    xs_watch(xs, "/pm/events", "refreshthermalinfo");
+
+    while ( true )
+    {
+        buffer = xs_read_watch(xs, &count);
+        if ( buffer == NULL )
+            continue;
+        if (!strcmp(buffer[XS_WATCH_TOKEN], "refreshbatterystatus")) {
+            update_battery_status(); 
+        } else if (!strcmp(buffer[XS_WATCH_TOKEN], "refreshthermalinfo")) {
+            update_thermal_info();
+        }
+        free(buffer);
+    }
 }
 
 #ifndef RUN_STANDALONE
@@ -538,7 +686,7 @@ static void *worker_thread_routine(void *arg)
         return 0;
     }
 
-    wait_for_and_update_battery_status_request();
+    wait_for_and_update_power_mgmt_info();
     acpi_events_cleanup();
     xs_daemon_close(xs);
     return 0;