[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] hvm: Battery Management virtual firmware and toolstack changes



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1223978895 -3600
# Node ID 551c3480beee8a3a29b5bf23cadbf8d953f75566
# Parent  8d993552673a98cbe26ed0df05499659c852b8d4
hvm: Battery Management virtual firmware and toolstack changes

Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>
---
 tools/examples/xmexample.hvm              |    8 
 tools/firmware/hvmloader/acpi/Makefile    |    6 
 tools/firmware/hvmloader/acpi/build.c     |   13 
 tools/firmware/hvmloader/acpi/ssdt_pm.asl |  423 ++++++++++++++++++++++++++++++
 tools/firmware/hvmloader/acpi/ssdt_pm.h   |  202 ++++++++++++++
 tools/python/xen/xend/XendConfig.py       |    1 
 tools/python/xen/xend/image.py            |    8 
 tools/python/xen/xm/create.py             |    2 
 8 files changed, 659 insertions(+), 4 deletions(-)

diff -r 8d993552673a -r 551c3480beee tools/examples/xmexample.hvm
--- a/tools/examples/xmexample.hvm      Tue Oct 14 10:45:29 2008 +0100
+++ b/tools/examples/xmexample.hvm      Tue Oct 14 11:08:15 2008 +0100
@@ -52,6 +52,14 @@ name = "ExampleHVMDomain"
 # Enable/disable HVM APIC mode, default=1 (enabled)
 # Note that this option is ignored if vcpus > 1
 #apic=1
+
+# Enable/disable extended power management support within HVM guest, i.e., 
beyond
+# S3, S4, S5 within guest like exposing battery meter.
+# 0 (default option, extended power management support disabled)
+# 1 (pass-through mode; uses pass-through as needed; efficient but limited in 
scope)
+# 2 (non pass-through mode; extended scope, likely to work on all applicable 
environment
+#    but comparitively less efficient than pass-through mode)
+# xen_extended_power_mgmt=0
 
 # List of which CPUS this domain is allowed to use, default Xen picks
 #cpus = ""         # leave to Xen to pick
diff -r 8d993552673a -r 551c3480beee tools/firmware/hvmloader/acpi/Makefile
--- a/tools/firmware/hvmloader/acpi/Makefile    Tue Oct 14 10:45:29 2008 +0100
+++ b/tools/firmware/hvmloader/acpi/Makefile    Tue Oct 14 11:08:15 2008 +0100
@@ -30,10 +30,10 @@ vpath iasl $(PATH)
 vpath iasl $(PATH)
 all: acpi.a
 
-ssdt_tpm.h: ssdt_tpm.asl
+ssdt_pm.h ssdt_tpm.h: %.h: %.asl
        $(MAKE) iasl
-       iasl -tc ssdt_tpm.asl
-       mv ssdt_tpm.hex ssdt_tpm.h
+       iasl -tc $<
+       mv $*.hex $@
        rm -f *.aml
 
 dsdt.c: dsdt.asl
diff -r 8d993552673a -r 551c3480beee tools/firmware/hvmloader/acpi/build.c
--- a/tools/firmware/hvmloader/acpi/build.c     Tue Oct 14 10:45:29 2008 +0100
+++ b/tools/firmware/hvmloader/acpi/build.c     Tue Oct 14 11:08:15 2008 +0100
@@ -18,6 +18,7 @@
 
 #include "acpi2_0.h"
 #include "ssdt_tpm.h"
+#include "ssdt_pm.h"
 #include "../config.h"
 #include "../util.h"
 
@@ -66,6 +67,11 @@ static int hpet_exists(unsigned long hpe
 {
     uint32_t hpet_id = *(uint32_t *)hpet_base;
     return ((hpet_id >> 16) == 0x8086);
+}
+
+static uint8_t battery_port_exists(void)
+{
+    return (inb(0x88) == 0x1F);
 }
 
 static int construct_bios_info_table(uint8_t *buf)
@@ -208,6 +214,13 @@ static int construct_secondary_tables(ui
         hpet = (struct acpi_20_hpet *)&buf[offset];
         offset += construct_hpet(hpet);
         table_ptrs[nr_tables++] = (unsigned long)hpet;
+    }
+
+    if ( battery_port_exists() ) 
+    {
+        table_ptrs[nr_tables++] = (unsigned long)&buf[offset];
+        memcpy(&buf[offset], AmlCode_PM, sizeof(AmlCode_PM));
+        offset += align16(sizeof(AmlCode_PM));
     }
 
     /* TPM TCPA and SSDT. */
diff -r 8d993552673a -r 551c3480beee tools/firmware/hvmloader/acpi/ssdt_pm.asl
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/acpi/ssdt_pm.asl Tue Oct 14 11:08:15 2008 +0100
@@ -0,0 +1,423 @@
+/*
+ * ssdt_pm.asl
+ *
+ * Copyright (c) 2008  Kamala Narasimhan
+ * Copyright (c) 2008  Citrix Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ * SSDT for extended power management within HVM guest. Power management beyond
+ * S3, S4, S5 is handled by this vACPI layer.  
+ *
+ * Battery Management Implementation -
+ * Xen vACPI layer exposes battery information to guest using CMBattery
+ * interface. This virtual firmware CMBattery implementation is very similar to
+ * the actual firmware CMBattery implementation.  In fact, a good part of the
+ * below is heavily borrowed from the underlying firmware to support
+ * pass-through and non-pass-through battery management approaches using the
+ * same CMBattery interface implementation. When pass-through approach is used,
+ * the battery ports are directly mapped using xc_domain_ioport_mapping thus
+ * not relying on qemu battery port handling to intercept port reads/writes to
+ * feed relevant battery information to the guest.
+ *
+ * Following are the battery ports read/written to in order to implement
+ * battery support:
+ * Battery command port - 0xb2
+ * Batter data port     - 0x86
+ * Battery commands (written to port 0xb2) -
+ * 0x7b - Battery operation init
+ * 0x7c - Type of battery operation
+ * 0x79 - Get battery data length
+ * 0x7d - Get battery data
+ *
+ * Also the following ports are used for debugging/logging:
+ * 0xB040, 0xB044, 0xB046, 0xB048 
+ */
+
+DefinitionBlock ("SSDT_PM.aml", "SSDT", 2, "Xen", "HVM", 0)
+{
+    Scope (\_SB)
+    {
+        OperationRegion (DBGA, SystemIO, 0xB040, 0x01)
+        Field (DBGA, ByteAcc, NoLock, Preserve)
+        {
+            DBG1,   8,
+        }
+
+        OperationRegion (DBGB, SystemIO, 0xB044, 0x01)
+        Field (DBGB, ByteAcc, NoLock, Preserve)
+        {
+            DBG2,   8,
+        }
+
+        OperationRegion (DBGC, SystemIO, 0xB046, 0x01)
+        Field (DBGC, ByteAcc, NoLock, Preserve)
+        {
+            DBG3,   8,
+        }
+
+        OperationRegion (DBGD, SystemIO, 0xB048, 0x01)
+        Field (DBGD, ByteAcc, NoLock, Preserve)
+        {
+            DBG4,   8,
+        }
+
+        OperationRegion (PRT1, SystemIO, 0xB2, 0x02)
+        Field (PRT1, ByteAcc, NoLock, Preserve)
+        {
+            PB2,   8,
+            PB2A,   8
+        }
+
+        OperationRegion (PRT2, SystemIO, 0x86, 0x01)
+        Field (PRT2, ByteAcc, NoLock, Preserve)
+        {
+            P86,   8
+        }
+
+        OperationRegion (PRT3, SystemIO, 0x88, 0x01)
+        Field (PRT3, ByteAcc, NoLock, Preserve)
+        {
+            P88,  8
+        }
+
+
+        Mutex (SYNC, 0x01)
+        Name (BUF0, Buffer (0x0100) {})
+        Name (BUF1, Buffer (0x08) {})
+        CreateWordField (BUF1, 0x00, BUFA)
+        CreateWordField (BUF1, 0x04, BUFB)
+        Method (ACQR, 0, NotSerialized)
+        {
+            Acquire (SYNC, 0xFFFF)
+            Store (0x00, BUFA)
+        }
+
+        /*
+         * Initialize relevant buffer to indicate what type of
+         * information is being queried and by what object (e.g.
+         * by battery device 0 or 1).
+         */
+        Method (INIT, 1, NotSerialized)
+        {
+            Store (BUFA, Local0)
+            Increment (Local0)
+            If (LLessEqual (Local0, SizeOf (BUF0)))
+            {
+                CreateByteField (BUF0, BUFA, TMP1)
+                Store (Arg0, TMP1)
+                Store (Local0, BUFA)
+            }
+        }
+
+        /*
+         * Write to battery port 0xb2 indicating the type of information
+         * to request, initialize battery data port 0x86 and then return 
+         * value provided through data port 0x86.
+         */
+        Method (WPRT, 2, NotSerialized)
+        {
+            Store (Arg1, \_SB.P86)
+            Store (Arg0, \_SB.PB2)
+            Store (Arg0, \_SB.DBG2)
+            Store (Arg1, \_SB.DBG4)
+            Store (\_SB.PB2, Local0)
+            While (LNotEqual (Local0, 0x00))
+            {
+                Store (\_SB.PB2, Local0)
+            }
+
+            Store (\_SB.P86, Local1)
+            Store (Local1, \_SB.DBG3)
+            Return (\_SB.P86)
+        }
+
+        /*
+         * Helper method 1 to write to battery command and data port. 
+         * 0x7c written to port 0xb2 indicating battery info type command.
+         * Value 1 or 2 written to port 0x86.  1 for BIF (batterry info) and 2 
+         * for BST (battery status).
+         */
+        Method (HLP1, 2, NotSerialized)
+        {
+            If (LLess (Arg1, SizeOf (Arg0)))
+            {
+                CreateByteField (Arg0, Arg1, TMP1)
+                WPRT (0x7C, TMP1)
+            }
+        }
+
+        /*
+         * Helper method 2.  Value 0x7b written to battery command port 0xb2
+         * indicating battery info initialization request.  First thing written
+         * to battery port before querying for further information pertaining
+         * to the battery.
+         */
+        Method (HLP2, 0, NotSerialized)
+        {
+            WPRT (0x7B, 0x00)
+            Store (0x00, Local0)
+            While (LLess (Local0, BUFA))
+            {
+                HLP1 (BUF0, Local0)
+                Increment (Local0)
+            }
+        }
+
+        /*
+         * Helper method 3. 0x7d written to battery command port 0xb2
+         * indicating request of battery data returned through battery data
+         * port 0x86.
+         */
+        Method (HLP3, 2, NotSerialized)
+        {
+            If (LLess (Arg1, SizeOf (Arg0)))
+            {
+                CreateByteField (Arg0, Arg1, TMP1)
+                Store (WPRT (0x7D, 0x00), TMP1)
+            }
+        }
+
+        /*
+         * Helper method 4 to indirectly get battery data and store it in a
+         * local buffer.
+         */
+        Method (HLP4, 0, NotSerialized)
+        {
+            Store (0x00, Local0)
+            While (LLess (Local0, BUFB))
+            {
+                Add (BUFA, Local0, Local1)
+                HLP3 (BUF0, Local1)
+                Increment (Local0)
+            }
+        }
+
+        /*
+         * Helper method 5 to indirectly initialize battery port and get
+         * battery data. Also get battery data length by writing 0x79 to
+         * battery command port and receiving battery data length in port 0x86.
+         */
+        Method (HLP5, 0, NotSerialized)
+        {
+            HLP2 ()
+            Store (WPRT (0x79, 0x00), BUFB)
+            Add (BUFA, BUFB, Local0)
+            If (LLess (SizeOf (BUF0), Local0))
+            {
+                Store (SizeOf (BUF0), Local0)
+                Subtract (Local0, BUFA, Local0)
+                Store (Local0, BUFB)
+            }
+
+            HLP4 ()
+        }
+
+        /* Helper method for local buffer housekeeping... */
+        Method (HLP6, 0, NotSerialized)
+        {
+            Store (BUFA, Local0)
+            Increment (Local0)
+            If (LLessEqual (Local0, SizeOf (BUF0)))
+            {
+                CreateByteField (BUF0, BUFA, TMP1)
+                Store (Local0, BUFA)
+                Return (TMP1)
+            }
+
+            Return (0x00)
+        }
+
+        /* Helper methods to help store battery data retrieved through
+         * battery data port 0x86. */
+
+        Method (HLP7, 0, NotSerialized)
+        {
+            Store (BUFA, Local0)
+            Add (Local0, 0x04, Local0)
+            If (LLessEqual (Local0, SizeOf (BUF0)))
+            {
+                CreateDWordField (BUF0, BUFA, SX22)
+                Store (Local0, BUFA)
+                Return (SX22)
+            }
+
+            Return (0x00)
+        }
+
+        Method (HLP8, 2, NotSerialized)
+        {
+            If (LLess (Arg1, SizeOf (Arg0)))
+            {
+                CreateByteField (Arg0, Arg1, TMP1)
+                Store (HLP6 (), TMP1)
+            }
+        }
+
+        Method (HLP9, 2, NotSerialized)
+        {
+            Store (0x00, Local0)
+            While (LLess (Local0, Arg1))
+            {
+                HLP8 (Arg0, Local0)
+                Increment (Local0)
+            }
+        }
+
+        Method (HLPA, 0, NotSerialized)
+        {
+            Store (HLP6 (), Local0)
+            Name (TMP, Buffer (Local0) {})
+            HLP9 (TMP, Local0)
+            Return (TMP)
+        }
+
+        Method (REL, 0, NotSerialized)
+        {
+            Release (SYNC)
+        }
+
+        /* Future patches will extend AC object to better account for
+         * AC to DC transition and more. */
+        Device (AC)
+        {
+            Name (_HID, "ACPI0003")
+            Name (_PCL, Package (0x03)
+            {
+                \_SB,
+                BAT0,
+                BAT1 
+            })
+            Method (_PSR, 0, NotSerialized)
+            {
+                Return (0x0)
+            }
+
+            Method (_STA, 0, NotSerialized)
+            {
+                Return (0x0F)
+            }
+        }
+
+        /* Main battery information helper method. */
+        Name (BIFP, Package (0x0D) {})
+        Method (BIF, 1, NotSerialized)
+        {
+            ACQR ()
+            INIT (0x01)
+            INIT (Arg0)
+            HLP5 ()
+            Store (HLP7 (), Index (BIFP, 0x00))
+            Store (HLP7 (), Index (BIFP, 0x01))
+            Store (HLP7 (), Index (BIFP, 0x02))
+            Store (HLP7 (), Index (BIFP, 0x03))
+            Store (HLP7 (), Index (BIFP, 0x04))
+            Store (HLP7 (), Index (BIFP, 0x05))
+            Store (HLP7 (), Index (BIFP, 0x06))
+            Store (HLP7 (), Index (BIFP, 0x07))
+            Store (HLP7 (), Index (BIFP, 0x08))
+            Store (HLPA (), Index (BIFP, 0x09))
+            Store (HLPA (), Index (BIFP, 0x0A))
+            Store (HLPA (), Index (BIFP, 0x0B))
+            Store (HLPA (), Index (BIFP, 0x0C))
+            REL ()
+            Return (BIFP)
+        }
+
+        /* Battery object 0 - Always exposed as present. */
+        Device (BAT0)
+        {
+            Name (_HID, EisaId ("PNP0C0A"))
+            Name (_UID, 0x01)
+            Name (_PCL, Package (0x01)
+            {
+                \_SB
+            })
+
+            /* Always returns 0x1f indicating battery present. */
+            Method (_STA, 0, NotSerialized)
+            {
+                Store (\_SB.P88, Local0)
+                Return ( Local0 )
+            }
+
+            /* Battery generic info: design capacity, voltage, model # etc. */
+            Method (_BIF, 0, NotSerialized)
+            {
+                //Store (1, \_SB.DBG1)
+                Store(BIF ( 0x01 ), Local0)
+                //Store (2, \_SB.DBG1)
+                Return( Local0 )
+            }
+
+            /* Battery status including battery charging/discharging rate. */
+            Method (_BST, 0, NotSerialized)
+            {
+                Store (1, \_SB.DBG1)
+                ACQR ()
+                INIT (0x02)
+                INIT (0x01)
+                HLP5 ()
+                Name (BST0, Package (0x04) {})
+                Store (HLP7 (), Index (BST0, 0x00))
+                Store (HLP7 (), Index (BST0, 0x01))
+                Store (HLP7 (), Index (BST0, 0x02))
+                Store (HLP7 (), Index (BST0, 0x03))
+                REL ()
+                Store (2, \_SB.DBG1)
+                Return (BST0)
+            }
+        }
+
+        /* Battery object 1 - Always exposed as not present. */
+        Device (BAT1)
+        {
+            Name (_HID, EisaId ("PNP0C0A"))
+            Name (_UID, 0x02)
+            Name (_PCL, Package (0x01)
+            {
+                \_SB
+            })
+            Method (_STA, 0, NotSerialized)
+            {
+                Return (0x0F)
+            }
+
+            Method (_BIF, 0, NotSerialized)
+            {
+                Store (\_SB.PB2, Local0)
+                Return (BIF (0x02))
+            }
+
+            Method (_BST, 0, NotSerialized)
+            {
+                ACQR ()
+                INIT (0x02)
+                INIT (0x02)
+                HLP5 ()
+                Name (BST1, Package (0x04) {})
+                Store (HLP7 (), Index (BST1, 0x00))
+                Store (HLP7 (), Index (BST1, 0x01))
+                Store (HLP7 (), Index (BST1, 0x02))
+                Store (HLP7 (), Index (BST1, 0x03))
+                REL ()
+                Return (BST1)
+            }
+        }
+    }
+}
+
diff -r 8d993552673a -r 551c3480beee tools/firmware/hvmloader/acpi/ssdt_pm.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/acpi/ssdt_pm.h   Tue Oct 14 11:08:15 2008 +0100
@@ -0,0 +1,202 @@
+/*
+ * 
+ * Intel ACPI Component Architecture
+ * ASL Optimizing Compiler version 20061109 [May 18 2007]
+ * Copyright (C) 2000 - 2006 Intel Corporation
+ * Supports ACPI Specification Revision 3.0a
+ * 
+ * Compilation of "ssdt_pm.asl" - Sun Oct 12 23:57:51 2008
+ * 
+ * C source code output
+ *
+ */
+unsigned char AmlCode_PM[] =
+{
+    0x53,0x53,0x44,0x54,0xD6,0x05,0x00,0x00,  /* 00000000    "SSDT...." */
+    0x02,0xD9,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,0x41,0x5B,0x5C,  /* 00000020    "... .A[\" */
+    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" */
+    0x42,0x47,0x31,0x08,0x5B,0x80,0x44,0x42,  /* 00000040    "BG1.[.DB" */
+    0x47,0x42,0x01,0x0B,0x44,0xB0,0x01,0x5B,  /* 00000048    "GB..D..[" */
+    0x81,0x0B,0x44,0x42,0x47,0x42,0x01,0x44,  /* 00000050    "..DBGB.D" */
+    0x42,0x47,0x32,0x08,0x5B,0x80,0x44,0x42,  /* 00000058    "BG2.[.DB" */
+    0x47,0x43,0x01,0x0B,0x46,0xB0,0x01,0x5B,  /* 00000060    "GC..F..[" */
+    0x81,0x0B,0x44,0x42,0x47,0x43,0x01,0x44,  /* 00000068    "..DBGC.D" */
+    0x42,0x47,0x33,0x08,0x5B,0x80,0x44,0x42,  /* 00000070    "BG3.[.DB" */
+    0x47,0x44,0x01,0x0B,0x48,0xB0,0x01,0x5B,  /* 00000078    "GD..H..[" */
+    0x81,0x0B,0x44,0x42,0x47,0x44,0x01,0x44,  /* 00000080    "..DBGD.D" */
+    0x42,0x47,0x34,0x08,0x5B,0x80,0x50,0x52,  /* 00000088    "BG4.[.PR" */
+    0x54,0x31,0x01,0x0A,0xB2,0x0A,0x02,0x5B,  /* 00000090    "T1.....[" */
+    0x81,0x10,0x50,0x52,0x54,0x31,0x01,0x50,  /* 00000098    "..PRT1.P" */
+    0x42,0x32,0x5F,0x08,0x50,0x42,0x32,0x41,  /* 000000A0    "B2_.PB2A" */
+    0x08,0x5B,0x80,0x50,0x52,0x54,0x32,0x01,  /* 000000A8    ".[.PRT2." */
+    0x0A,0x86,0x01,0x5B,0x81,0x0B,0x50,0x52,  /* 000000B0    "...[..PR" */
+    0x54,0x32,0x01,0x50,0x38,0x36,0x5F,0x08,  /* 000000B8    "T2.P86_." */
+    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_.[" */
+    0x01,0x53,0x59,0x4E,0x43,0x01,0x08,0x42,  /* 000000D8    ".SYNC..B" */
+    0x55,0x46,0x30,0x11,0x04,0x0B,0x00,0x01,  /* 000000E0    "UF0....." */
+    0x08,0x42,0x55,0x46,0x31,0x11,0x03,0x0A,  /* 000000E8    ".BUF1..." */
+    0x08,0x8B,0x42,0x55,0x46,0x31,0x00,0x42,  /* 000000F0    "..BUF1.B" */
+    0x55,0x46,0x41,0x8B,0x42,0x55,0x46,0x31,  /* 000000F8    "UFA.BUF1" */
+    0x0A,0x04,0x42,0x55,0x46,0x42,0x14,0x14,  /* 00000100    "..BUFB.." */
+    0x41,0x43,0x51,0x52,0x00,0x5B,0x23,0x53,  /* 00000108    "ACQR.[#S" */
+    0x59,0x4E,0x43,0xFF,0xFF,0x70,0x00,0x42,  /* 00000110    "YNC..p.B" */
+    0x55,0x46,0x41,0x14,0x31,0x49,0x4E,0x49,  /* 00000118    "UFA.1INI" */
+    0x54,0x01,0x70,0x42,0x55,0x46,0x41,0x60,  /* 00000120    "T.pBUFA`" */
+    0x75,0x60,0xA0,0x22,0x92,0x94,0x60,0x87,  /* 00000128    "u`."..`." */
+    0x42,0x55,0x46,0x30,0x8C,0x42,0x55,0x46,  /* 00000130    "BUF0.BUF" */
+    0x30,0x42,0x55,0x46,0x41,0x54,0x4D,0x50,  /* 00000138    "0BUFATMP" */
+    0x31,0x70,0x68,0x54,0x4D,0x50,0x31,0x70,  /* 00000140    "1phTMP1p" */
+    0x60,0x42,0x55,0x46,0x41,0x14,0x48,0x07,  /* 00000148    "`BUFA.H." */
+    0x57,0x50,0x52,0x54,0x02,0x70,0x69,0x5C,  /* 00000150    "WPRT.pi\" */
+    0x2E,0x5F,0x53,0x42,0x5F,0x50,0x38,0x36,  /* 00000158    "._SB_P86" */
+    0x5F,0x70,0x68,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000160    "_ph\._SB" */
+    0x5F,0x50,0x42,0x32,0x5F,0x70,0x68,0x5C,  /* 00000168    "_PB2_ph\" */
+    0x2E,0x5F,0x53,0x42,0x5F,0x44,0x42,0x47,  /* 00000170    "._SB_DBG" */
+    0x32,0x70,0x69,0x5C,0x2E,0x5F,0x53,0x42,  /* 00000178    "2pi\._SB" */
+    0x5F,0x44,0x42,0x47,0x34,0x70,0x5C,0x2E,  /* 00000180    "_DBG4p\." */
+    0x5F,0x53,0x42,0x5F,0x50,0x42,0x32,0x5F,  /* 00000188    "_SB_PB2_" */
+    0x60,0xA2,0x11,0x92,0x93,0x60,0x00,0x70,  /* 00000190    "`....`.p" */
+    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,0x42,  /* 00000198    "\._SB_PB" */
+    0x32,0x5F,0x60,0x70,0x5C,0x2E,0x5F,0x53,  /* 000001A0    "2_`p\._S" */
+    0x42,0x5F,0x50,0x38,0x36,0x5F,0x61,0x70,  /* 000001A8    "B_P86_ap" */
+    0x61,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x44,  /* 000001B0    "a\._SB_D" */
+    0x42,0x47,0x33,0xA4,0x5C,0x2E,0x5F,0x53,  /* 000001B8    "BG3.\._S" */
+    0x42,0x5F,0x50,0x38,0x36,0x5F,0x14,0x1D,  /* 000001C0    "B_P86_.." */
+    0x48,0x4C,0x50,0x31,0x02,0xA0,0x16,0x95,  /* 000001C8    "HLP1...." */
+    0x69,0x87,0x68,0x8C,0x68,0x69,0x54,0x4D,  /* 000001D0    "i.h.hiTM" */
+    0x50,0x31,0x57,0x50,0x52,0x54,0x0A,0x7C,  /* 000001D8    "P1WPRT.|" */
+    0x54,0x4D,0x50,0x31,0x14,0x23,0x48,0x4C,  /* 000001E0    "TMP1.#HL" */
+    0x50,0x32,0x00,0x57,0x50,0x52,0x54,0x0A,  /* 000001E8    "P2.WPRT." */
+    0x7B,0x00,0x70,0x00,0x60,0xA2,0x12,0x95,  /* 000001F0    "{.p.`..." */
+    0x60,0x42,0x55,0x46,0x41,0x48,0x4C,0x50,  /* 000001F8    "`BUFAHLP" */
+    0x31,0x42,0x55,0x46,0x30,0x60,0x75,0x60,  /* 00000200    "1BUF0`u`" */
+    0x14,0x1F,0x48,0x4C,0x50,0x33,0x02,0xA0,  /* 00000208    "..HLP3.." */
+    0x18,0x95,0x69,0x87,0x68,0x8C,0x68,0x69,  /* 00000210    "..i.h.hi" */
+    0x54,0x4D,0x50,0x31,0x70,0x57,0x50,0x52,  /* 00000218    "TMP1pWPR" */
+    0x54,0x0A,0x7D,0x00,0x54,0x4D,0x50,0x31,  /* 00000220    "T.}.TMP1" */
+    0x14,0x23,0x48,0x4C,0x50,0x34,0x00,0x70,  /* 00000228    ".#HLP4.p" */
+    0x00,0x60,0xA2,0x19,0x95,0x60,0x42,0x55,  /* 00000230    ".`...`BU" */
+    0x46,0x42,0x72,0x42,0x55,0x46,0x41,0x60,  /* 00000238    "FBrBUFA`" */
+    0x61,0x48,0x4C,0x50,0x33,0x42,0x55,0x46,  /* 00000240    "aHLP3BUF" */
+    0x30,0x61,0x75,0x60,0x14,0x42,0x04,0x48,  /* 00000248    "0au`.B.H" */
+    0x4C,0x50,0x35,0x00,0x48,0x4C,0x50,0x32,  /* 00000250    "LP5.HLP2" */
+    0x70,0x57,0x50,0x52,0x54,0x0A,0x79,0x00,  /* 00000258    "pWPRT.y." */
+    0x42,0x55,0x46,0x42,0x72,0x42,0x55,0x46,  /* 00000260    "BUFBrBUF" */
+    0x41,0x42,0x55,0x46,0x42,0x60,0xA0,0x1C,  /* 00000268    "ABUFB`.." */
+    0x95,0x87,0x42,0x55,0x46,0x30,0x60,0x70,  /* 00000270    "..BUF0`p" */
+    0x87,0x42,0x55,0x46,0x30,0x60,0x74,0x60,  /* 00000278    ".BUF0`t`" */
+    0x42,0x55,0x46,0x41,0x60,0x70,0x60,0x42,  /* 00000280    "BUFA`p`B" */
+    0x55,0x46,0x42,0x48,0x4C,0x50,0x34,0x14,  /* 00000288    "UFBHLP4." */
+    0x32,0x48,0x4C,0x50,0x36,0x00,0x70,0x42,  /* 00000290    "2HLP6.pB" */
+    0x55,0x46,0x41,0x60,0x75,0x60,0xA0,0x21,  /* 00000298    "UFA`u`.!" */
+    0x92,0x94,0x60,0x87,0x42,0x55,0x46,0x30,  /* 000002A0    "..`.BUF0" */
+    0x8C,0x42,0x55,0x46,0x30,0x42,0x55,0x46,  /* 000002A8    ".BUF0BUF" */
+    0x41,0x54,0x4D,0x50,0x31,0x70,0x60,0x42,  /* 000002B0    "ATMP1p`B" */
+    0x55,0x46,0x41,0xA4,0x54,0x4D,0x50,0x31,  /* 000002B8    "UFA.TMP1" */
+    0xA4,0x00,0x14,0x35,0x48,0x4C,0x50,0x37,  /* 000002C0    "...5HLP7" */
+    0x00,0x70,0x42,0x55,0x46,0x41,0x60,0x72,  /* 000002C8    ".pBUFA`r" */
+    0x60,0x0A,0x04,0x60,0xA0,0x21,0x92,0x94,  /* 000002D0    "`..`.!.." */
+    0x60,0x87,0x42,0x55,0x46,0x30,0x8A,0x42,  /* 000002D8    "`.BUF0.B" */
+    0x55,0x46,0x30,0x42,0x55,0x46,0x41,0x53,  /* 000002E0    "UF0BUFAS" */
+    0x58,0x32,0x32,0x70,0x60,0x42,0x55,0x46,  /* 000002E8    "X22p`BUF" */
+    0x41,0xA4,0x53,0x58,0x32,0x32,0xA4,0x00,  /* 000002F0    "A.SX22.." */
+    0x14,0x1C,0x48,0x4C,0x50,0x38,0x02,0xA0,  /* 000002F8    "..HLP8.." */
+    0x15,0x95,0x69,0x87,0x68,0x8C,0x68,0x69,  /* 00000300    "..i.h.hi" */
+    0x54,0x4D,0x50,0x31,0x70,0x48,0x4C,0x50,  /* 00000308    "TMP1pHLP" */
+    0x36,0x54,0x4D,0x50,0x31,0x14,0x16,0x48,  /* 00000310    "6TMP1..H" */
+    0x4C,0x50,0x39,0x02,0x70,0x00,0x60,0xA2,  /* 00000318    "LP9.p.`." */
+    0x0C,0x95,0x60,0x69,0x48,0x4C,0x50,0x38,  /* 00000320    "..`iHLP8" */
+    0x68,0x60,0x75,0x60,0x14,0x22,0x48,0x4C,  /* 00000328    "h`u`."HL" */
+    0x50,0x41,0x00,0x70,0x48,0x4C,0x50,0x36,  /* 00000330    "PA.pHLP6" */
+    0x60,0x08,0x54,0x4D,0x50,0x5F,0x11,0x02,  /* 00000338    "`.TMP_.." */
+    0x60,0x48,0x4C,0x50,0x39,0x54,0x4D,0x50,  /* 00000340    "`HLP9TMP" */
+    0x5F,0x60,0xA4,0x54,0x4D,0x50,0x5F,0x14,  /* 00000348    "_`.TMP_." */
+    0x0C,0x52,0x45,0x4C,0x5F,0x00,0x5B,0x27,  /* 00000350    ".REL_.['" */
+    0x53,0x59,0x4E,0x43,0x5B,0x82,0x3C,0x41,  /* 00000358    "SYNC[.<A" */
+    0x43,0x5F,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00000360    "C__._HID" */
+    0x0D,0x41,0x43,0x50,0x49,0x30,0x30,0x30,  /* 00000368    ".ACPI000" */
+    0x33,0x00,0x08,0x5F,0x50,0x43,0x4C,0x12,  /* 00000370    "3.._PCL." */
+    0x0F,0x03,0x5C,0x5F,0x53,0x42,0x5F,0x42,  /* 00000378    "..\_SB_B" */
+    0x41,0x54,0x30,0x42,0x41,0x54,0x31,0x14,  /* 00000380    "AT0BAT1." */
+    0x08,0x5F,0x50,0x53,0x52,0x00,0xA4,0x00,  /* 00000388    "._PSR..." */
+    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000390    ".._STA.." */
+    0x0A,0x0F,0x08,0x42,0x49,0x46,0x50,0x12,  /* 00000398    "...BIFP." */
+    0x02,0x0D,0x14,0x49,0x0C,0x42,0x49,0x46,  /* 000003A0    "...I.BIF" */
+    0x5F,0x01,0x41,0x43,0x51,0x52,0x49,0x4E,  /* 000003A8    "_.ACQRIN" */
+    0x49,0x54,0x01,0x49,0x4E,0x49,0x54,0x68,  /* 000003B0    "IT.INITh" */
+    0x48,0x4C,0x50,0x35,0x70,0x48,0x4C,0x50,  /* 000003B8    "HLP5pHLP" */
+    0x37,0x88,0x42,0x49,0x46,0x50,0x00,0x00,  /* 000003C0    "7.BIFP.." */
+    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 000003C8    "pHLP7.BI" */
+    0x46,0x50,0x01,0x00,0x70,0x48,0x4C,0x50,  /* 000003D0    "FP..pHLP" */
+    0x37,0x88,0x42,0x49,0x46,0x50,0x0A,0x02,  /* 000003D8    "7.BIFP.." */
+    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 000003E0    ".pHLP7.B" */
+    0x49,0x46,0x50,0x0A,0x03,0x00,0x70,0x48,  /* 000003E8    "IFP...pH" */
+    0x4C,0x50,0x37,0x88,0x42,0x49,0x46,0x50,  /* 000003F0    "LP7.BIFP" */
+    0x0A,0x04,0x00,0x70,0x48,0x4C,0x50,0x37,  /* 000003F8    "...pHLP7" */
+    0x88,0x42,0x49,0x46,0x50,0x0A,0x05,0x00,  /* 00000400    ".BIFP..." */
+    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x49,  /* 00000408    "pHLP7.BI" */
+    0x46,0x50,0x0A,0x06,0x00,0x70,0x48,0x4C,  /* 00000410    "FP...pHL" */
+    0x50,0x37,0x88,0x42,0x49,0x46,0x50,0x0A,  /* 00000418    "P7.BIFP." */
+    0x07,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000420    "..pHLP7." */
+    0x42,0x49,0x46,0x50,0x0A,0x08,0x00,0x70,  /* 00000428    "BIFP...p" */
+    0x48,0x4C,0x50,0x41,0x88,0x42,0x49,0x46,  /* 00000430    "HLPA.BIF" */
+    0x50,0x0A,0x09,0x00,0x70,0x48,0x4C,0x50,  /* 00000438    "P...pHLP" */
+    0x41,0x88,0x42,0x49,0x46,0x50,0x0A,0x0A,  /* 00000440    "A.BIFP.." */
+    0x00,0x70,0x48,0x4C,0x50,0x41,0x88,0x42,  /* 00000448    ".pHLPA.B" */
+    0x49,0x46,0x50,0x0A,0x0B,0x00,0x70,0x48,  /* 00000450    "IFP...pH" */
+    0x4C,0x50,0x41,0x88,0x42,0x49,0x46,0x50,  /* 00000458    "LPA.BIFP" */
+    0x0A,0x0C,0x00,0x52,0x45,0x4C,0x5F,0xA4,  /* 00000460    "...REL_." */
+    0x42,0x49,0x46,0x50,0x5B,0x82,0x4F,0x0B,  /* 00000468    "BIFP[.O." */
+    0x42,0x41,0x54,0x30,0x08,0x5F,0x48,0x49,  /* 00000470    "BAT0._HI" */
+    0x44,0x0C,0x41,0xD0,0x0C,0x0A,0x08,0x5F,  /* 00000478    "D.A...._" */
+    0x55,0x49,0x44,0x01,0x08,0x5F,0x50,0x43,  /* 00000480    "UID.._PC" */
+    0x4C,0x12,0x07,0x01,0x5C,0x5F,0x53,0x42,  /* 00000488    "L...\_SB" */
+    0x5F,0x14,0x14,0x5F,0x53,0x54,0x41,0x00,  /* 00000490    "_.._STA." */
+    0x70,0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x50,  /* 00000498    "p\._SB_P" */
+    0x38,0x38,0x5F,0x60,0xA4,0x60,0x14,0x0F,  /* 000004A0    "88_`.`.." */
+    0x5F,0x42,0x49,0x46,0x00,0x70,0x42,0x49,  /* 000004A8    "_BIF.pBI" */
+    0x46,0x5F,0x01,0x60,0xA4,0x60,0x14,0x46,  /* 000004B0    "F_.`.`.F" */
+    0x07,0x5F,0x42,0x53,0x54,0x00,0x70,0x01,  /* 000004B8    "._BST.p." */
+    0x5C,0x2E,0x5F,0x53,0x42,0x5F,0x44,0x42,  /* 000004C0    "\._SB_DB" */
+    0x47,0x31,0x41,0x43,0x51,0x52,0x49,0x4E,  /* 000004C8    "G1ACQRIN" */
+    0x49,0x54,0x0A,0x02,0x49,0x4E,0x49,0x54,  /* 000004D0    "IT..INIT" */
+    0x01,0x48,0x4C,0x50,0x35,0x08,0x42,0x53,  /* 000004D8    ".HLP5.BS" */
+    0x54,0x30,0x12,0x02,0x04,0x70,0x48,0x4C,  /* 000004E0    "T0...pHL" */
+    0x50,0x37,0x88,0x42,0x53,0x54,0x30,0x00,  /* 000004E8    "P7.BST0." */
+    0x00,0x70,0x48,0x4C,0x50,0x37,0x88,0x42,  /* 000004F0    ".pHLP7.B" */
+    0x53,0x54,0x30,0x01,0x00,0x70,0x48,0x4C,  /* 000004F8    "ST0..pHL" */
+    0x50,0x37,0x88,0x42,0x53,0x54,0x30,0x0A,  /* 00000500    "P7.BST0." */
+    0x02,0x00,0x70,0x48,0x4C,0x50,0x37,0x88,  /* 00000508    "..pHLP7." */
+    0x42,0x53,0x54,0x30,0x0A,0x03,0x00,0x52,  /* 00000510    "BST0...R" */
+    0x45,0x4C,0x5F,0x70,0x0A,0x02,0x5C,0x2E,  /* 00000518    "EL_p..\." */
+    0x5F,0x53,0x42,0x5F,0x44,0x42,0x47,0x31,  /* 00000520    "_SB_DBG1" */
+    0xA4,0x42,0x53,0x54,0x30,0x5B,0x82,0x47,  /* 00000528    ".BST0[.G" */
+    0x0A,0x42,0x41,0x54,0x31,0x08,0x5F,0x48,  /* 00000530    ".BAT1._H" */
+    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0A,0x08,  /* 00000538    "ID.A...." */
+    0x5F,0x55,0x49,0x44,0x0A,0x02,0x08,0x5F,  /* 00000540    "_UID..._" */
+    0x50,0x43,0x4C,0x12,0x07,0x01,0x5C,0x5F,  /* 00000548    "PCL...\_" */
+    0x53,0x42,0x5F,0x14,0x09,0x5F,0x53,0x54,  /* 00000550    "SB_.._ST" */
+    0x41,0x00,0xA4,0x0A,0x0F,0x14,0x19,0x5F,  /* 00000558    "A......_" */
+    0x42,0x49,0x46,0x00,0x70,0x5C,0x2E,0x5F,  /* 00000560    "BIF.p\._" */
+    0x53,0x42,0x5F,0x50,0x42,0x32,0x5F,0x60,  /* 00000568    "SB_PB2_`" */
+    0xA4,0x42,0x49,0x46,0x5F,0x0A,0x02,0x14,  /* 00000570    ".BIF_..." */
+    0x4E,0x05,0x5F,0x42,0x53,0x54,0x00,0x41,  /* 00000578    "N._BST.A" */
+    0x43,0x51,0x52,0x49,0x4E,0x49,0x54,0x0A,  /* 00000580    "CQRINIT." */
+    0x02,0x49,0x4E,0x49,0x54,0x0A,0x02,0x48,  /* 00000588    ".INIT..H" */
+    0x4C,0x50,0x35,0x08,0x42,0x53,0x54,0x31,  /* 00000590    "LP5.BST1" */
+    0x12,0x02,0x04,0x70,0x48,0x4C,0x50,0x37,  /* 00000598    "...pHLP7" */
+    0x88,0x42,0x53,0x54,0x31,0x00,0x00,0x70,  /* 000005A0    ".BST1..p" */
+    0x48,0x4C,0x50,0x37,0x88,0x42,0x53,0x54,  /* 000005A8    "HLP7.BST" */
+    0x31,0x01,0x00,0x70,0x48,0x4C,0x50,0x37,  /* 000005B0    "1..pHLP7" */
+    0x88,0x42,0x53,0x54,0x31,0x0A,0x02,0x00,  /* 000005B8    ".BST1..." */
+    0x70,0x48,0x4C,0x50,0x37,0x88,0x42,0x53,  /* 000005C0    "pHLP7.BS" */
+    0x54,0x31,0x0A,0x03,0x00,0x52,0x45,0x4C,  /* 000005C8    "T1...REL" */
+    0x5F,0xA4,0x42,0x53,0x54,0x31,
+};
diff -r 8d993552673a -r 551c3480beee tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py       Tue Oct 14 10:45:29 2008 +0100
+++ b/tools/python/xen/xend/XendConfig.py       Tue Oct 14 11:08:15 2008 +0100
@@ -163,6 +163,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
     'vhpt': int,
     'guest_os_type': str,
     'hap': int,
+    'xen_extended_power_mgmt': int,
 }
 
 # Xen API console 'other_config' keys.
diff -r 8d993552673a -r 551c3480beee tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Tue Oct 14 10:45:29 2008 +0100
+++ b/tools/python/xen/xend/image.py    Tue Oct 14 11:08:15 2008 +0100
@@ -249,6 +249,14 @@ class ImageHandler:
     # xm config file
     def parseDeviceModelArgs(self, vmConfig):
         ret = ["-domain-name", str(self.vm.info['name_label'])]
+
+        xen_extended_power_mgmt = int(vmConfig['platform'].get(
+            'xen_extended_power_mgmt', 0))
+        if xen_extended_power_mgmt != 0:
+             xstransact.Store("/local/domain/0/device-model/%i"
+                              % self.vm.getDomid(),
+                              ('xen_extended_power_mgmt',
+                               xen_extended_power_mgmt))
 
         # Find RFB console device, and if it exists, make QEMU enable
         # the VNC console.
diff -r 8d993552673a -r 551c3480beee tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Tue Oct 14 10:45:29 2008 +0100
+++ b/tools/python/xen/xm/create.py     Tue Oct 14 11:08:15 2008 +0100
@@ -862,7 +862,7 @@ def configure_hvm(config_image, vals):
              'sdl', 'display', 'xauthority', 'rtc_timeoffset', 'monitor',
              'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci', 'hpet',
              'guest_os_type', 'hap', 'opengl', 'cpuid', 'cpuid_check',
-             'viridian' ]
+             'viridian', 'xen_extended_power_mgmt' ]
 
     for a in args:
         if a in vals.__dict__ and vals.__dict__[a] is not None:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.