From 4450a0859dd46b9828225e42a8e3ddc072100c0f Mon Sep 17 00:00:00 2001 From: Kamala Narasimhan Date: Tue, 24 Mar 2009 17:09:46 -0400 Subject: [PATCH] Base thermal zone implementation. Very simple at this point with potential to extend in future. --- tools/firmware/hvmloader/acpi/ssdt_pm.asl | 26 ++ tools/firmware/hvmloader/acpi/ssdt_pm.h | 455 +++++++++++----------- tools/xenpmd/xenpmd.c | 218 +++++++++-- 3 files changed, 442 insertions(+), 257 deletions(-) diff --git a/tools/firmware/hvmloader/acpi/ssdt_pm.asl b/tools/firmware/hvmloader/acpi/ssdt_pm.asl index 38714c8..6bea415 100644 --- a/tools/firmware/hvmloader/acpi/ssdt_pm.asl +++ b/tools/firmware/hvmloader/acpi/ssdt_pm.asl @@ -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. */ diff --git a/tools/firmware/hvmloader/acpi/ssdt_pm.h b/tools/firmware/hvmloader/acpi/ssdt_pm.h index 0820ca1..cfea463 100644 --- a/tools/firmware/hvmloader/acpi/ssdt_pm.h +++ b/tools/firmware/hvmloader/acpi/ssdt_pm.h @@ -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, }; diff --git a/tools/xenpmd/xenpmd.c b/tools/xenpmd/xenpmd.c index 1edf4b5..373baad 100644 --- a/tools/xenpmd/xenpmd.c +++ b/tools/xenpmd/xenpmd.c @@ -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; -- 2.39.5