# HG changeset patch
# User Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
# Date 1211452971 -32400
# Node ID 74d0f17f3fa5245675aa8d3cdfc354e6702645f3
# Parent f04ce41dab843b275ccb6636290e51c591ac2a06
# Parent b259eebb0223e58eb9caf88f80b5aae1f12fc394
merge with xen-unstable.hg
---
tools/firmware/hvmloader/acpi/dsdt.asl | 12
tools/firmware/hvmloader/acpi/dsdt.c | 1024 +++++++++++++++---------------
tools/firmware/hvmloader/config.h | 3
tools/firmware/hvmloader/hvmloader.c | 103 +--
tools/firmware/hvmloader/smbios.c | 7
tools/firmware/rombios/rombios.c | 91 ++
tools/firmware/vgabios/clext.c | 54 +
tools/firmware/vgabios/vgatables.h | 1
tools/ioemu/hw/pc.c | 8
tools/ioemu/hw/piix4acpi.c | 11
tools/ioemu/hw/xenfb.c | 2
tools/ioemu/target-i386-dm/helper2.c | 4
tools/ioemu/vl.h | 1
tools/libxc/xc_cpuid_x86.c | 13
tools/libxc/xc_pm.c | 68 +
tools/libxc/xenctrl.h | 13
tools/python/xen/util/blkif.py | 2
tools/python/xen/xend/XendConfig.py | 9
tools/python/xen/xend/XendConstants.py | 5
tools/python/xen/xend/XendDomain.py | 7
tools/python/xen/xend/xenstore/xswatch.py | 4
tools/python/xen/xm/main.py | 2
xen/arch/ia64/xen/domain.c | 3
xen/arch/x86/Makefile | 1
xen/arch/x86/acpi/cpu_idle.c | 116 ++-
xen/arch/x86/acpi/pmstat.c | 25
xen/arch/x86/domain.c | 3
xen/arch/x86/domain_build.c | 57 -
xen/arch/x86/hpet.c | 291 ++++++++
xen/arch/x86/hvm/hpet.c | 5
xen/arch/x86/hvm/hvm.c | 137 +++-
xen/arch/x86/hvm/i8254.c | 30
xen/arch/x86/hvm/pmtimer.c | 6
xen/arch/x86/hvm/rtc.c | 6
xen/arch/x86/hvm/vioapic.c | 22
xen/arch/x86/hvm/vlapic.c | 105 ---
xen/arch/x86/hvm/vpic.c | 13
xen/arch/x86/mm/hap/p2m-ept.c | 172 +++--
xen/arch/x86/mm/p2m.c | 8
xen/arch/x86/time.c | 59 -
xen/arch/x86/x86_32/entry.S | 5
xen/arch/x86/x86_64/compat/entry.S | 5
xen/arch/x86/x86_64/entry.S | 5
xen/common/domain.c | 10
xen/common/domctl.c | 3
xen/common/timer.c | 8
xen/include/asm-x86/hpet.h | 20
xen/include/asm-x86/hvm/domain.h | 1
xen/include/asm-x86/hvm/hvm.h | 1
xen/include/asm-x86/hvm/vioapic.h | 1
xen/include/asm-x86/hvm/vpic.h | 1
xen/include/asm-x86/hvm/vpt.h | 6
xen/include/public/hvm/params.h | 5
xen/include/public/sysctl.h | 23
xen/include/xen/domain.h | 4
xen/include/xen/timer.h | 9
56 files changed, 1687 insertions(+), 923 deletions(-)
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/hvmloader/acpi/dsdt.asl
--- a/tools/firmware/hvmloader/acpi/dsdt.asl Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/hvmloader/acpi/dsdt.asl Thu May 22 19:42:51 2008 +0900
@@ -52,7 +52,17 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2,
* at HVM guest boot time. */
}
- /* S4 (STD) and S5 (power-off) type codes: must match piix4 emulation. */
+ /*
+ * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes:
+ * must match piix4 emulation.
+ */
+ Name (\_S3, Package (0x04)
+ {
+ 0x05, /* PM1a_CNT.SLP_TYP */
+ 0x05, /* PM1b_CNT.SLP_TYP */
+ 0x0, /* reserved */
+ 0x0 /* reserved */
+ })
Name (\_S4, Package (0x04)
{
0x06, /* PM1a_CNT.SLP_TYP */
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/hvmloader/acpi/dsdt.c
--- a/tools/firmware/hvmloader/acpi/dsdt.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/hvmloader/acpi/dsdt.c Thu May 22 19:42:51 2008 +0900
@@ -5,15 +5,15 @@
* Copyright (C) 2000 - 2006 Intel Corporation
* Supports ACPI Specification Revision 3.0a
*
- * Compilation of "dsdt.asl" - Tue Mar 25 10:53:38 2008
+ * Compilation of "dsdt.asl" - Tue May 20 14:34:40 2008
*
* C source code output
*
*/
unsigned char AmlCode[] =
{
- 0x44,0x53,0x44,0x54,0x24,0x11,0x00,0x00, /* 00000000 "DSDT$..." */
- 0x02,0x82,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */
+ 0x44,0x53,0x44,0x54,0x32,0x11,0x00,0x00, /* 00000000 "DSDT2..." */
+ 0x02,0xEC,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" */
0x07,0x07,0x06,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "... .PMB" */
@@ -48,518 +48,520 @@ unsigned char AmlCode[] =
0x00,0x5B,0x83,0x0B,0x50,0x52,0x30,0x44, /* 00000108 ".[..PR0D" */
0x0D,0x00,0x00,0x00,0x00,0x00,0x5B,0x83, /* 00000110 "......[." */
0x0B,0x50,0x52,0x30,0x45,0x0E,0x00,0x00, /* 00000118 ".PR0E..." */
- 0x00,0x00,0x00,0x08,0x5F,0x53,0x34,0x5F, /* 00000120 "...._S4_" */
- 0x12,0x08,0x04,0x0A,0x06,0x0A,0x06,0x00, /* 00000128 "........" */
- 0x00,0x08,0x5F,0x53,0x35,0x5F,0x12,0x08, /* 00000130 ".._S5_.." */
- 0x04,0x0A,0x07,0x0A,0x07,0x00,0x00,0x08, /* 00000138 "........" */
- 0x50,0x49,0x43,0x44,0x00,0x14,0x0C,0x5F, /* 00000140 "PICD..._" */
- 0x50,0x49,0x43,0x01,0x70,0x68,0x50,0x49, /* 00000148 "PIC.phPI" */
- 0x43,0x44,0x10,0x42,0xF1,0x5F,0x53,0x42, /* 00000150 "CD.B._SB" */
- 0x5F,0x5B,0x80,0x42,0x49,0x4F,0x53,0x00, /* 00000158 "_[.BIOS." */
- 0x0C,0x00,0xA0,0x0E,0x00,0x0A,0x10,0x5B, /* 00000160 ".......[" */
- 0x81,0x21,0x42,0x49,0x4F,0x53,0x01,0x55, /* 00000168 ".!BIOS.U" */
- 0x41,0x52,0x31,0x01,0x55,0x41,0x52,0x32, /* 00000170 "AR1.UAR2" */
- 0x01,0x48,0x50,0x45,0x54,0x01,0x00,0x1D, /* 00000178 ".HPET..." */
- 0x50,0x4D,0x49,0x4E,0x20,0x50,0x4C,0x45, /* 00000180 "PMIN PLE" */
- 0x4E,0x20,0x5B,0x82,0x49,0x04,0x4D,0x45, /* 00000188 "N [.I.ME" */
- 0x4D,0x30,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000190 "M0._HID." */
- 0x41,0xD0,0x0C,0x02,0x08,0x5F,0x43,0x52, /* 00000198 "A...._CR" */
- 0x53,0x11,0x33,0x0A,0x30,0x8A,0x2B,0x00, /* 000001A0 "S.3.0.+." */
- 0x00,0x0D,0x03,0x00,0x00,0x00,0x00,0x00, /* 000001A8 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B0 "........" */
- 0x00,0x00,0x00,0xFF,0xFF,0x09,0x00,0x00, /* 000001B8 "........" */
+ 0x00,0x00,0x00,0x08,0x5F,0x53,0x33,0x5F, /* 00000120 "...._S3_" */
+ 0x12,0x08,0x04,0x0A,0x05,0x0A,0x05,0x00, /* 00000128 "........" */
+ 0x00,0x08,0x5F,0x53,0x34,0x5F,0x12,0x08, /* 00000130 ".._S4_.." */
+ 0x04,0x0A,0x06,0x0A,0x06,0x00,0x00,0x08, /* 00000138 "........" */
+ 0x5F,0x53,0x35,0x5F,0x12,0x08,0x04,0x0A, /* 00000140 "_S5_...." */
+ 0x07,0x0A,0x07,0x00,0x00,0x08,0x50,0x49, /* 00000148 "......PI" */
+ 0x43,0x44,0x00,0x14,0x0C,0x5F,0x50,0x49, /* 00000150 "CD..._PI" */
+ 0x43,0x01,0x70,0x68,0x50,0x49,0x43,0x44, /* 00000158 "C.phPICD" */
+ 0x10,0x42,0xF1,0x5F,0x53,0x42,0x5F,0x5B, /* 00000160 ".B._SB_[" */
+ 0x80,0x42,0x49,0x4F,0x53,0x00,0x0C,0x00, /* 00000168 ".BIOS..." */
+ 0xA0,0x0E,0x00,0x0A,0x10,0x5B,0x81,0x21, /* 00000170 ".....[.!" */
+ 0x42,0x49,0x4F,0x53,0x01,0x55,0x41,0x52, /* 00000178 "BIOS.UAR" */
+ 0x31,0x01,0x55,0x41,0x52,0x32,0x01,0x48, /* 00000180 "1.UAR2.H" */
+ 0x50,0x45,0x54,0x01,0x00,0x1D,0x50,0x4D, /* 00000188 "PET...PM" */
+ 0x49,0x4E,0x20,0x50,0x4C,0x45,0x4E,0x20, /* 00000190 "IN PLEN " */
+ 0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D,0x30, /* 00000198 "[.I.MEM0" */
+ 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 000001A0 "._HID.A." */
+ 0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11, /* 000001A8 "..._CRS." */
+ 0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00,0x0D, /* 000001B0 "3.0.+..." */
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C0 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x00, /* 000001C8 "........" */
- 0x00,0x00,0x00,0x79,0x00,0x5B,0x82,0x4E, /* 000001D0 "...y.[.N" */
- 0xE8,0x50,0x43,0x49,0x30,0x08,0x5F,0x48, /* 000001D8 ".PCI0._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03,0x08, /* 000001E0 "ID.A...." */
- 0x5F,0x55,0x49,0x44,0x00,0x08,0x5F,0x41, /* 000001E8 "_UID.._A" */
- 0x44,0x52,0x00,0x08,0x5F,0x42,0x42,0x4E, /* 000001F0 "DR.._BBN" */
- 0x00,0x14,0x4E,0x0C,0x5F,0x43,0x52,0x53, /* 000001F8 "..N._CRS" */
- 0x00,0x08,0x50,0x52,0x54,0x30,0x11,0x42, /* 00000200 "..PRT0.B" */
- 0x07,0x0A,0x6E,0x88,0x0D,0x00,0x02,0x0E, /* 00000208 "..n....." */
- 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, /* 00000210 "........" */
- 0x00,0x00,0x01,0x47,0x01,0xF8,0x0C,0xF8, /* 00000218 "...G...." */
- 0x0C,0x01,0x08,0x88,0x0D,0x00,0x01,0x0C, /* 00000220 "........" */
- 0x03,0x00,0x00,0x00,0x00,0xF7,0x0C,0x00, /* 00000228 "........" */
- 0x00,0xF8,0x0C,0x88,0x0D,0x00,0x01,0x0C, /* 00000230 "........" */
- 0x03,0x00,0x00,0x00,0x0D,0xFF,0xFF,0x00, /* 00000238 "........" */
- 0x00,0x00,0xF3,0x87,0x17,0x00,0x00,0x0C, /* 00000240 "........" */
- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0A, /* 00000248 "........" */
- 0x00,0xFF,0xFF,0x0B,0x00,0x00,0x00,0x00, /* 00000250 "........" */
- 0x00,0x00,0x00,0x02,0x00,0x87,0x17,0x00, /* 00000258 "........" */
- 0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */
- 0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xF4,0x00, /* 00000268 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x79, /* 00000270 ".......y" */
- 0x00,0x8A,0x50,0x52,0x54,0x30,0x0A,0x5C, /* 00000278 "..PRT0.\" */
- 0x4D,0x4D,0x49,0x4E,0x8A,0x50,0x52,0x54, /* 00000280 "MMIN.PRT" */
- 0x30,0x0A,0x60,0x4D,0x4D,0x41,0x58,0x8A, /* 00000288 "0.`MMAX." */
- 0x50,0x52,0x54,0x30,0x0A,0x68,0x4D,0x4C, /* 00000290 "PRT0.hML" */
- 0x45,0x4E,0x70,0x50,0x4D,0x49,0x4E,0x4D, /* 00000298 "ENpPMINM" */
- 0x4D,0x49,0x4E,0x70,0x50,0x4C,0x45,0x4E, /* 000002A0 "MINpPLEN" */
- 0x4D,0x4C,0x45,0x4E,0x72,0x4D,0x4D,0x49, /* 000002A8 "MLENrMMI" */
- 0x4E,0x4D,0x4C,0x45,0x4E,0x4D,0x4D,0x41, /* 000002B0 "NMLENMMA" */
- 0x58,0x74,0x4D,0x4D,0x41,0x58,0x01,0x4D, /* 000002B8 "XtMMAX.M" */
- 0x4D,0x41,0x58,0xA4,0x50,0x52,0x54,0x30, /* 000002C0 "MAX.PRT0" */
- 0x08,0x42,0x55,0x46,0x41,0x11,0x09,0x0A, /* 000002C8 ".BUFA..." */
- 0x06,0x23,0x20,0x0C,0x18,0x79,0x00,0x08, /* 000002D0 ".# ..y.." */
- 0x42,0x55,0x46,0x42,0x11,0x09,0x0A,0x06, /* 000002D8 "BUFB...." */
- 0x23,0x00,0x00,0x18,0x79,0x00,0x8B,0x42, /* 000002E0 "#...y..B" */
- 0x55,0x46,0x42,0x01,0x49,0x52,0x51,0x56, /* 000002E8 "UFB.IRQV" */
- 0x5B,0x82,0x48,0x08,0x4C,0x4E,0x4B,0x41, /* 000002F0 "[.H.LNKA" */
- 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 000002F8 "._HID.A." */
- 0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x01, /* 00000300 "..._UID." */
- 0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B, /* 00000308 ".._STA.{" */
- 0x50,0x49,0x52,0x41,0x0A,0x80,0x60,0xA0, /* 00000310 "PIRA..`." */
- 0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09, /* 00000318 "..`....." */
- 0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F, /* 00000320 "......._" */
- 0x50,0x52,0x53,0x00,0xA4,0x42,0x55,0x46, /* 00000328 "PRS..BUF" */
- 0x41,0x14,0x11,0x5F,0x44,0x49,0x53,0x00, /* 00000330 "A.._DIS." */
- 0x7D,0x50,0x49,0x52,0x41,0x0A,0x80,0x50, /* 00000338 "}PIRA..P" */
- 0x49,0x52,0x41,0x14,0x1A,0x5F,0x43,0x52, /* 00000340 "IRA.._CR" */
- 0x53,0x00,0x7B,0x50,0x49,0x52,0x41,0x0A, /* 00000348 "S.{PIRA." */
- 0x0F,0x60,0x79,0x01,0x60,0x49,0x52,0x51, /* 00000350 ".`y.`IRQ" */
- 0x56,0xA4,0x42,0x55,0x46,0x42,0x14,0x1B, /* 00000358 "V.BUFB.." */
- 0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01, /* 00000360 "_SRS..h." */
- 0x49,0x52,0x51,0x31,0x82,0x49,0x52,0x51, /* 00000368 "IRQ1.IRQ" */
- 0x31,0x60,0x76,0x60,0x70,0x60,0x50,0x49, /* 00000370 "1`v`p`PI" */
- 0x52,0x41,0x5B,0x82,0x49,0x08,0x4C,0x4E, /* 00000378 "RA[.I.LN" */
- 0x4B,0x42,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000380 "KB._HID." */
- 0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49, /* 00000388 "A...._UI" */
- 0x44,0x0A,0x02,0x14,0x1C,0x5F,0x53,0x54, /* 00000390 "D...._ST" */
- 0x41,0x00,0x7B,0x50,0x49,0x52,0x42,0x0A, /* 00000398 "A.{PIRB." */
- 0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80, /* 000003A0 ".`...`.." */
- 0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B, /* 000003A8 "........" */
- 0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4, /* 000003B0 ".._PRS.." */
- 0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44, /* 000003B8 "BUFA.._D" */
- 0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x42, /* 000003C0 "IS.}PIRB" */
- 0x0A,0x80,0x50,0x49,0x52,0x42,0x14,0x1A, /* 000003C8 "..PIRB.." */
- 0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49, /* 000003D0 "_CRS.{PI" */
- 0x52,0x42,0x0A,0x0F,0x60,0x79,0x01,0x60, /* 000003D8 "RB..`y.`" */
- 0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46, /* 000003E0 "IRQV.BUF" */
- 0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01, /* 000003E8 "B.._SRS." */
- 0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82, /* 000003F0 ".h.IRQ1." */
- 0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70, /* 000003F8 "IRQ1`v`p" */
- 0x60,0x50,0x49,0x52,0x42,0x5B,0x82,0x49, /* 00000400 "`PIRB[.I" */
- 0x08,0x4C,0x4E,0x4B,0x43,0x08,0x5F,0x48, /* 00000408 ".LNKC._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08, /* 00000410 "ID.A...." */
- 0x5F,0x55,0x49,0x44,0x0A,0x03,0x14,0x1C, /* 00000418 "_UID...." */
- 0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49, /* 00000420 "_STA.{PI" */
- 0x52,0x43,0x0A,0x80,0x60,0xA0,0x08,0x93, /* 00000428 "RC..`..." */
- 0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04, /* 00000430 "`......." */
- 0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52, /* 00000438 "....._PR" */
- 0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14, /* 00000440 "S..BUFA." */
- 0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50, /* 00000448 "._DIS.}P" */
- 0x49,0x52,0x43,0x0A,0x80,0x50,0x49,0x52, /* 00000450 "IRC..PIR" */
- 0x43,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00, /* 00000458 "C.._CRS." */
- 0x7B,0x50,0x49,0x52,0x43,0x0A,0x0F,0x60, /* 00000460 "{PIRC..`" */
- 0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4, /* 00000468 "y.`IRQV." */
- 0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53, /* 00000470 "BUFB.._S" */
- 0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52, /* 00000478 "RS..h.IR" */
- 0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60, /* 00000480 "Q1.IRQ1`" */
- 0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x43, /* 00000488 "v`p`PIRC" */
- 0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,0x44, /* 00000490 "[.I.LNKD" */
- 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000498 "._HID.A." */
- 0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A, /* 000004A0 "..._UID." */
- 0x04,0x14,0x1C,0x5F,0x53,0x54,0x41,0x00, /* 000004A8 "..._STA." */
- 0x7B,0x50,0x49,0x52,0x44,0x0A,0x80,0x60, /* 000004B0 "{PIRD..`" */
- 0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A, /* 000004B8 "...`...." */
- 0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B, /* 000004C0 "........" */
- 0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,0x55, /* 000004C8 "_PRS..BU" */
- 0x46,0x41,0x14,0x11,0x5F,0x44,0x49,0x53, /* 000004D0 "FA.._DIS" */
- 0x00,0x7D,0x50,0x49,0x52,0x44,0x0A,0x80, /* 000004D8 ".}PIRD.." */
- 0x50,0x49,0x52,0x44,0x14,0x1A,0x5F,0x43, /* 000004E0 "PIRD.._C" */
- 0x52,0x53,0x00,0x7B,0x50,0x49,0x52,0x44, /* 000004E8 "RS.{PIRD" */
- 0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,0x52, /* 000004F0 "..`y.`IR" */
- 0x51,0x56,0xA4,0x42,0x55,0x46,0x42,0x14, /* 000004F8 "QV.BUFB." */
- 0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68, /* 00000500 "._SRS..h" */
- 0x01,0x49,0x52,0x51,0x31,0x82,0x49,0x52, /* 00000508 ".IRQ1.IR" */
- 0x51,0x31,0x60,0x76,0x60,0x70,0x60,0x50, /* 00000510 "Q1`v`p`P" */
- 0x49,0x52,0x44,0x5B,0x82,0x44,0x05,0x48, /* 00000518 "IRD[.D.H" */
- 0x50,0x45,0x54,0x08,0x5F,0x48,0x49,0x44, /* 00000520 "PET._HID" */
- 0x0C,0x41,0xD0,0x01,0x03,0x08,0x5F,0x55, /* 00000528 ".A...._U" */
- 0x49,0x44,0x00,0x14,0x18,0x5F,0x53,0x54, /* 00000530 "ID..._ST" */
- 0x41,0x00,0xA0,0x0C,0x93,0x5E,0x5E,0x5E, /* 00000538 "A....^^^" */
- 0x48,0x50,0x45,0x54,0x00,0xA4,0x00,0xA1, /* 00000540 "HPET...." */
- 0x04,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52, /* 00000548 "....._CR" */
- 0x53,0x11,0x1F,0x0A,0x1C,0x87,0x17,0x00, /* 00000550 "S......." */
- 0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000558 "........" */
- 0x00,0xD0,0xFE,0xFF,0x03,0xD0,0xFE,0x00, /* 00000560 "........" */
- 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x79, /* 00000568 ".......y" */
- 0x00,0x14,0x16,0x5F,0x50,0x52,0x54,0x00, /* 00000570 "..._PRT." */
- 0xA0,0x0A,0x50,0x49,0x43,0x44,0xA4,0x50, /* 00000578 "..PICD.P" */
- 0x52,0x54,0x41,0xA4,0x50,0x52,0x54,0x50, /* 00000580 "RTA.PRTP" */
- 0x08,0x50,0x52,0x54,0x50,0x12,0x49,0x36, /* 00000588 ".PRTP.I6" */
- 0x3C,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x01, /* 00000590 "<......." */
- 0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000598 "..LNKB.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x01, /* 000005A0 "........" */
- 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04, /* 000005A8 "LNKC...." */
- 0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x02,0x4C, /* 000005B0 ".......L" */
- 0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C, /* 000005B8 "NKD....." */
- 0xFF,0xFF,0x01,0x00,0x0A,0x03,0x4C,0x4E, /* 000005C0 "......LN" */
- 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000005C8 "KA......" */
- 0xFF,0x02,0x00,0x00,0x4C,0x4E,0x4B,0x43, /* 000005D0 "....LNKC" */
+ 0x00,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00, /* 000001C8 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D0 "........" */
+ 0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00, /* 000001D8 "........" */
+ 0x00,0x79,0x00,0x5B,0x82,0x4E,0xE8,0x50, /* 000001E0 ".y.[.N.P" */
+ 0x43,0x49,0x30,0x08,0x5F,0x48,0x49,0x44, /* 000001E8 "CI0._HID" */
+ 0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F,0x55, /* 000001F0 ".A...._U" */
+ 0x49,0x44,0x00,0x08,0x5F,0x41,0x44,0x52, /* 000001F8 "ID.._ADR" */
+ 0x00,0x08,0x5F,0x42,0x42,0x4E,0x00,0x14, /* 00000200 ".._BBN.." */
+ 0x4E,0x0C,0x5F,0x43,0x52,0x53,0x00,0x08, /* 00000208 "N._CRS.." */
+ 0x50,0x52,0x54,0x30,0x11,0x42,0x07,0x0A, /* 00000210 "PRT0.B.." */
+ 0x6E,0x88,0x0D,0x00,0x02,0x0E,0x00,0x00, /* 00000218 "n......." */
+ 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, /* 00000220 "........" */
+ 0x01,0x47,0x01,0xF8,0x0C,0xF8,0x0C,0x01, /* 00000228 ".G......" */
+ 0x08,0x88,0x0D,0x00,0x01,0x0C,0x03,0x00, /* 00000230 "........" */
+ 0x00,0x00,0x00,0xF7,0x0C,0x00,0x00,0xF8, /* 00000238 "........" */
+ 0x0C,0x88,0x0D,0x00,0x01,0x0C,0x03,0x00, /* 00000240 "........" */
+ 0x00,0x00,0x0D,0xFF,0xFF,0x00,0x00,0x00, /* 00000248 "........" */
+ 0xF3,0x87,0x17,0x00,0x00,0x0C,0x03,0x00, /* 00000250 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0xFF, /* 00000258 "........" */
+ 0xFF,0x0B,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */
+ 0x00,0x02,0x00,0x87,0x17,0x00,0x00,0x0C, /* 00000268 "........" */
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000270 "........" */
+ 0xF0,0xFF,0xFF,0xFF,0xF4,0x00,0x00,0x00, /* 00000278 "........" */
+ 0x00,0x00,0x00,0x00,0x05,0x79,0x00,0x8A, /* 00000280 ".....y.." */
+ 0x50,0x52,0x54,0x30,0x0A,0x5C,0x4D,0x4D, /* 00000288 "PRT0.\MM" */
+ 0x49,0x4E,0x8A,0x50,0x52,0x54,0x30,0x0A, /* 00000290 "IN.PRT0." */
+ 0x60,0x4D,0x4D,0x41,0x58,0x8A,0x50,0x52, /* 00000298 "`MMAX.PR" */
+ 0x54,0x30,0x0A,0x68,0x4D,0x4C,0x45,0x4E, /* 000002A0 "T0.hMLEN" */
+ 0x70,0x50,0x4D,0x49,0x4E,0x4D,0x4D,0x49, /* 000002A8 "pPMINMMI" */
+ 0x4E,0x70,0x50,0x4C,0x45,0x4E,0x4D,0x4C, /* 000002B0 "NpPLENML" */
+ 0x45,0x4E,0x72,0x4D,0x4D,0x49,0x4E,0x4D, /* 000002B8 "ENrMMINM" */
+ 0x4C,0x45,0x4E,0x4D,0x4D,0x41,0x58,0x74, /* 000002C0 "LENMMAXt" */
+ 0x4D,0x4D,0x41,0x58,0x01,0x4D,0x4D,0x41, /* 000002C8 "MMAX.MMA" */
+ 0x58,0xA4,0x50,0x52,0x54,0x30,0x08,0x42, /* 000002D0 "X.PRT0.B" */
+ 0x55,0x46,0x41,0x11,0x09,0x0A,0x06,0x23, /* 000002D8 "UFA....#" */
+ 0x20,0x0C,0x18,0x79,0x00,0x08,0x42,0x55, /* 000002E0 " ..y..BU" */
+ 0x46,0x42,0x11,0x09,0x0A,0x06,0x23,0x00, /* 000002E8 "FB....#." */
+ 0x00,0x18,0x79,0x00,0x8B,0x42,0x55,0x46, /* 000002F0 "..y..BUF" */
+ 0x42,0x01,0x49,0x52,0x51,0x56,0x5B,0x82, /* 000002F8 "B.IRQV[." */
+ 0x48,0x08,0x4C,0x4E,0x4B,0x41,0x08,0x5F, /* 00000300 "H.LNKA._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 00000308 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x01,0x14,0x1C, /* 00000310 "._UID..." */
+ 0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49, /* 00000318 "_STA.{PI" */
+ 0x52,0x41,0x0A,0x80,0x60,0xA0,0x08,0x93, /* 00000320 "RA..`..." */
+ 0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04, /* 00000328 "`......." */
+ 0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52, /* 00000330 "....._PR" */
+ 0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14, /* 00000338 "S..BUFA." */
+ 0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50, /* 00000340 "._DIS.}P" */
+ 0x49,0x52,0x41,0x0A,0x80,0x50,0x49,0x52, /* 00000348 "IRA..PIR" */
+ 0x41,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00, /* 00000350 "A.._CRS." */
+ 0x7B,0x50,0x49,0x52,0x41,0x0A,0x0F,0x60, /* 00000358 "{PIRA..`" */
+ 0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4, /* 00000360 "y.`IRQV." */
+ 0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53, /* 00000368 "BUFB.._S" */
+ 0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52, /* 00000370 "RS..h.IR" */
+ 0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60, /* 00000378 "Q1.IRQ1`" */
+ 0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x41, /* 00000380 "v`p`PIRA" */
+ 0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,0x42, /* 00000388 "[.I.LNKB" */
+ 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000390 "._HID.A." */
+ 0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A, /* 00000398 "..._UID." */
+ 0x02,0x14,0x1C,0x5F,0x53,0x54,0x41,0x00, /* 000003A0 "..._STA." */
+ 0x7B,0x50,0x49,0x52,0x42,0x0A,0x80,0x60, /* 000003A8 "{PIRB..`" */
+ 0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A, /* 000003B0 "...`...." */
+ 0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B, /* 000003B8 "........" */
+ 0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,0x55, /* 000003C0 "_PRS..BU" */
+ 0x46,0x41,0x14,0x11,0x5F,0x44,0x49,0x53, /* 000003C8 "FA.._DIS" */
+ 0x00,0x7D,0x50,0x49,0x52,0x42,0x0A,0x80, /* 000003D0 ".}PIRB.." */
+ 0x50,0x49,0x52,0x42,0x14,0x1A,0x5F,0x43, /* 000003D8 "PIRB.._C" */
+ 0x52,0x53,0x00,0x7B,0x50,0x49,0x52,0x42, /* 000003E0 "RS.{PIRB" */
+ 0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,0x52, /* 000003E8 "..`y.`IR" */
+ 0x51,0x56,0xA4,0x42,0x55,0x46,0x42,0x14, /* 000003F0 "QV.BUFB." */
+ 0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68, /* 000003F8 "._SRS..h" */
+ 0x01,0x49,0x52,0x51,0x31,0x82,0x49,0x52, /* 00000400 ".IRQ1.IR" */
+ 0x51,0x31,0x60,0x76,0x60,0x70,0x60,0x50, /* 00000408 "Q1`v`p`P" */
+ 0x49,0x52,0x42,0x5B,0x82,0x49,0x08,0x4C, /* 00000410 "IRB[.I.L" */
+ 0x4E,0x4B,0x43,0x08,0x5F,0x48,0x49,0x44, /* 00000418 "NKC._HID" */
+ 0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55, /* 00000420 ".A...._U" */
+ 0x49,0x44,0x0A,0x03,0x14,0x1C,0x5F,0x53, /* 00000428 "ID...._S" */
+ 0x54,0x41,0x00,0x7B,0x50,0x49,0x52,0x43, /* 00000430 "TA.{PIRC" */
+ 0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,0x0A, /* 00000438 "..`...`." */
+ 0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A, /* 00000440 "........" */
+ 0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,0x00, /* 00000448 "..._PRS." */
+ 0xA4,0x42,0x55,0x46,0x41,0x14,0x11,0x5F, /* 00000450 ".BUFA.._" */
+ 0x44,0x49,0x53,0x00,0x7D,0x50,0x49,0x52, /* 00000458 "DIS.}PIR" */
+ 0x43,0x0A,0x80,0x50,0x49,0x52,0x43,0x14, /* 00000460 "C..PIRC." */
+ 0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,0x50, /* 00000468 "._CRS.{P" */
+ 0x49,0x52,0x43,0x0A,0x0F,0x60,0x79,0x01, /* 00000470 "IRC..`y." */
+ 0x60,0x49,0x52,0x51,0x56,0xA4,0x42,0x55, /* 00000478 "`IRQV.BU" */
+ 0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,0x53, /* 00000480 "FB.._SRS" */
+ 0x01,0x8B,0x68,0x01,0x49,0x52,0x51,0x31, /* 00000488 "..h.IRQ1" */
+ 0x82,0x49,0x52,0x51,0x31,0x60,0x76,0x60, /* 00000490 ".IRQ1`v`" */
+ 0x70,0x60,0x50,0x49,0x52,0x43,0x5B,0x82, /* 00000498 "p`PIRC[." */
+ 0x49,0x08,0x4C,0x4E,0x4B,0x44,0x08,0x5F, /* 000004A0 "I.LNKD._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 000004A8 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x0A,0x04,0x14, /* 000004B0 "._UID..." */
+ 0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,0x50, /* 000004B8 "._STA.{P" */
+ 0x49,0x52,0x44,0x0A,0x80,0x60,0xA0,0x08, /* 000004C0 "IRD..`.." */
+ 0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1, /* 000004C8 ".`......" */
+ 0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50, /* 000004D0 "......_P" */
+ 0x52,0x53,0x00,0xA4,0x42,0x55,0x46,0x41, /* 000004D8 "RS..BUFA" */
+ 0x14,0x11,0x5F,0x44,0x49,0x53,0x00,0x7D, /* 000004E0 ".._DIS.}" */
+ 0x50,0x49,0x52,0x44,0x0A,0x80,0x50,0x49, /* 000004E8 "PIRD..PI" */
+ 0x52,0x44,0x14,0x1A,0x5F,0x43,0x52,0x53, /* 000004F0 "RD.._CRS" */
+ 0x00,0x7B,0x50,0x49,0x52,0x44,0x0A,0x0F, /* 000004F8 ".{PIRD.." */
+ 0x60,0x79,0x01,0x60,0x49,0x52,0x51,0x56, /* 00000500 "`y.`IRQV" */
+ 0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,0x5F, /* 00000508 ".BUFB.._" */
+ 0x53,0x52,0x53,0x01,0x8B,0x68,0x01,0x49, /* 00000510 "SRS..h.I" */
+ 0x52,0x51,0x31,0x82,0x49,0x52,0x51,0x31, /* 00000518 "RQ1.IRQ1" */
+ 0x60,0x76,0x60,0x70,0x60,0x50,0x49,0x52, /* 00000520 "`v`p`PIR" */
+ 0x44,0x5B,0x82,0x44,0x05,0x48,0x50,0x45, /* 00000528 "D[.D.HPE" */
+ 0x54,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000530 "T._HID.A" */
+ 0xD0,0x01,0x03,0x08,0x5F,0x55,0x49,0x44, /* 00000538 "...._UID" */
+ 0x00,0x14,0x18,0x5F,0x53,0x54,0x41,0x00, /* 00000540 "..._STA." */
+ 0xA0,0x0C,0x93,0x5E,0x5E,0x5E,0x48,0x50, /* 00000548 "...^^^HP" */
+ 0x45,0x54,0x00,0xA4,0x00,0xA1,0x04,0xA4, /* 00000550 "ET......" */
+ 0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000558 "..._CRS." */
+ 0x1F,0x0A,0x1C,0x87,0x17,0x00,0x00,0x0D, /* 00000560 "........" */
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xD0, /* 00000568 "........" */
+ 0xFE,0xFF,0x03,0xD0,0xFE,0x00,0x00,0x00, /* 00000570 "........" */
+ 0x00,0x00,0x04,0x00,0x00,0x79,0x00,0x14, /* 00000578 ".....y.." */
+ 0x16,0x5F,0x50,0x52,0x54,0x00,0xA0,0x0A, /* 00000580 "._PRT..." */
+ 0x50,0x49,0x43,0x44,0xA4,0x50,0x52,0x54, /* 00000588 "PICD.PRT" */
+ 0x41,0xA4,0x50,0x52,0x54,0x50,0x08,0x50, /* 00000590 "A.PRTP.P" */
+ 0x52,0x54,0x50,0x12,0x49,0x36,0x3C,0x12, /* 00000598 "RTP.I6<." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x00, /* 000005A0 "........" */
+ 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 000005A8 "LNKB...." */
+ 0x0C,0xFF,0xFF,0x01,0x00,0x01,0x4C,0x4E, /* 000005B0 "......LN" */
+ 0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 000005B8 "KC......" */
+ 0xFF,0x01,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 000005C0 ".....LNK" */
+ 0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 000005C8 "D......." */
+ 0x01,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41, /* 000005D0 "....LNKA" */
0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x02, /* 000005D8 "........" */
- 0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 000005E0 "..LNKD.." */
- 0x0E,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A, /* 000005E8 "........" */
- 0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E, /* 000005F0 ".LNKA..." */
- 0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x03, /* 000005F8 "........" */
- 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 00000600 "LNKB...." */
- 0x0C,0xFF,0xFF,0x03,0x00,0x00,0x4C,0x4E, /* 00000608 "......LN" */
- 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000610 "KD......" */
- 0xFF,0x03,0x00,0x01,0x4C,0x4E,0x4B,0x41, /* 00000618 "....LNKA" */
- 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03, /* 00000620 "........" */
- 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00, /* 00000628 "...LNKB." */
- 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00, /* 00000630 "........" */
- 0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 00000638 "..LNKC.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x00, /* 00000640 "........" */
- 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 00000648 "LNKA...." */
- 0x0C,0xFF,0xFF,0x04,0x00,0x01,0x4C,0x4E, /* 00000650 "......LN" */
- 0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000658 "KB......" */
- 0xFF,0x04,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000660 ".....LNK" */
- 0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000668 "C......." */
- 0x04,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44, /* 00000670 "....LNKD" */
- 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x05, /* 00000678 "........" */
- 0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000680 "..LNKB.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x01, /* 00000688 "........" */
- 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04, /* 00000690 "LNKC...." */
- 0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x02,0x4C, /* 00000698 ".......L" */
- 0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C, /* 000006A0 "NKD....." */
- 0xFF,0xFF,0x05,0x00,0x0A,0x03,0x4C,0x4E, /* 000006A8 "......LN" */
- 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000006B0 "KA......" */
- 0xFF,0x06,0x00,0x00,0x4C,0x4E,0x4B,0x43, /* 000006B8 "....LNKC" */
+ 0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000005E0 "..LNKC.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x01, /* 000005E8 "........" */
+ 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04, /* 000005F0 "LNKD...." */
+ 0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x02,0x4C, /* 000005F8 ".......L" */
+ 0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C, /* 00000600 "NKA....." */
+ 0xFF,0xFF,0x02,0x00,0x0A,0x03,0x4C,0x4E, /* 00000608 "......LN" */
+ 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000610 "KB......" */
+ 0xFF,0x03,0x00,0x00,0x4C,0x4E,0x4B,0x44, /* 00000618 "....LNKD" */
+ 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x03, /* 00000620 "........" */
+ 0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000628 "..LNKA.." */
+ 0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A, /* 00000630 "........" */
+ 0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E, /* 00000638 ".LNKB..." */
+ 0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x03, /* 00000640 "........" */
+ 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000648 "LNKC...." */
+ 0x0C,0xFF,0xFF,0x04,0x00,0x00,0x4C,0x4E, /* 00000650 "......LN" */
+ 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000658 "KA......" */
+ 0xFF,0x04,0x00,0x01,0x4C,0x4E,0x4B,0x42, /* 00000660 "....LNKB" */
+ 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x04, /* 00000668 "........" */
+ 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00, /* 00000670 "...LNKC." */
+ 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x04,0x00, /* 00000678 "........" */
+ 0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000680 "..LNKD.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x00, /* 00000688 "........" */
+ 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 00000690 "LNKB...." */
+ 0x0C,0xFF,0xFF,0x05,0x00,0x01,0x4C,0x4E, /* 00000698 "......LN" */
+ 0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 000006A0 "KC......" */
+ 0xFF,0x05,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 000006A8 ".....LNK" */
+ 0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 000006B0 "D......." */
+ 0x05,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41, /* 000006B8 "....LNKA" */
0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x06, /* 000006C0 "........" */
- 0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 000006C8 "..LNKD.." */
- 0x0E,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A, /* 000006D0 "........" */
- 0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E, /* 000006D8 ".LNKA..." */
- 0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x03, /* 000006E0 "........" */
- 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 000006E8 "LNKB...." */
- 0x0C,0xFF,0xFF,0x07,0x00,0x00,0x4C,0x4E, /* 000006F0 "......LN" */
- 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000006F8 "KD......" */
- 0xFF,0x07,0x00,0x01,0x4C,0x4E,0x4B,0x41, /* 00000700 "....LNKA" */
- 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x07, /* 00000708 "........" */
- 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00, /* 00000710 "...LNKB." */
- 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x07,0x00, /* 00000718 "........" */
- 0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 00000720 "..LNKC.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x00, /* 00000728 "........" */
- 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 00000730 "LNKA...." */
- 0x0C,0xFF,0xFF,0x08,0x00,0x01,0x4C,0x4E, /* 00000738 "......LN" */
- 0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000740 "KB......" */
- 0xFF,0x08,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000748 ".....LNK" */
- 0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000750 "C......." */
- 0x08,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44, /* 00000758 "....LNKD" */
- 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x09, /* 00000760 "........" */
- 0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000768 "..LNKB.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x09,0x00,0x01, /* 00000770 "........" */
- 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04, /* 00000778 "LNKC...." */
- 0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x02,0x4C, /* 00000780 ".......L" */
- 0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C, /* 00000788 "NKD....." */
- 0xFF,0xFF,0x09,0x00,0x0A,0x03,0x4C,0x4E, /* 00000790 "......LN" */
- 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000798 "KA......" */
- 0xFF,0x0A,0x00,0x00,0x4C,0x4E,0x4B,0x43, /* 000007A0 "....LNKC" */
+ 0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000006C8 "..LNKC.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x01, /* 000006D0 "........" */
+ 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04, /* 000006D8 "LNKD...." */
+ 0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x02,0x4C, /* 000006E0 ".......L" */
+ 0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C, /* 000006E8 "NKA....." */
+ 0xFF,0xFF,0x06,0x00,0x0A,0x03,0x4C,0x4E, /* 000006F0 "......LN" */
+ 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000006F8 "KB......" */
+ 0xFF,0x07,0x00,0x00,0x4C,0x4E,0x4B,0x44, /* 00000700 "....LNKD" */
+ 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x07, /* 00000708 "........" */
+ 0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000710 "..LNKA.." */
+ 0x0E,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A, /* 00000718 "........" */
+ 0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E, /* 00000720 ".LNKB..." */
+ 0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x03, /* 00000728 "........" */
+ 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000730 "LNKC...." */
+ 0x0C,0xFF,0xFF,0x08,0x00,0x00,0x4C,0x4E, /* 00000738 "......LN" */
+ 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000740 "KA......" */
+ 0xFF,0x08,0x00,0x01,0x4C,0x4E,0x4B,0x42, /* 00000748 "....LNKB" */
+ 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x08, /* 00000750 "........" */
+ 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00, /* 00000758 "...LNKC." */
+ 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x08,0x00, /* 00000760 "........" */
+ 0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000768 "..LNKD.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x09,0x00,0x00, /* 00000770 "........" */
+ 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 00000778 "LNKB...." */
+ 0x0C,0xFF,0xFF,0x09,0x00,0x01,0x4C,0x4E, /* 00000780 "......LN" */
+ 0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000788 "KC......" */
+ 0xFF,0x09,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000790 ".....LNK" */
+ 0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000798 "D......." */
+ 0x09,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41, /* 000007A0 "....LNKA" */
0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0A, /* 000007A8 "........" */
- 0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 000007B0 "..LNKD.." */
- 0x0E,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A, /* 000007B8 "........" */
- 0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E, /* 000007C0 ".LNKA..." */
- 0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x03, /* 000007C8 "........" */
- 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 000007D0 "LNKB...." */
- 0x0C,0xFF,0xFF,0x0B,0x00,0x00,0x4C,0x4E, /* 000007D8 "......LN" */
- 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000007E0 "KD......" */
- 0xFF,0x0B,0x00,0x01,0x4C,0x4E,0x4B,0x41, /* 000007E8 "....LNKA" */
- 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0B, /* 000007F0 "........" */
- 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00, /* 000007F8 "...LNKB." */
- 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0B,0x00, /* 00000800 "........" */
- 0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 00000808 "..LNKC.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x00, /* 00000810 "........" */
- 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 00000818 "LNKA...." */
- 0x0C,0xFF,0xFF,0x0C,0x00,0x01,0x4C,0x4E, /* 00000820 "......LN" */
- 0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000828 "KB......" */
- 0xFF,0x0C,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000830 ".....LNK" */
- 0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000838 "C......." */
- 0x0C,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44, /* 00000840 "....LNKD" */
- 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0D, /* 00000848 "........" */
- 0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000850 "..LNKB.." */
- 0x0D,0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x01, /* 00000858 "........" */
- 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04, /* 00000860 "LNKC...." */
- 0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x02,0x4C, /* 00000868 ".......L" */
- 0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C, /* 00000870 "NKD....." */
- 0xFF,0xFF,0x0D,0x00,0x0A,0x03,0x4C,0x4E, /* 00000878 "......LN" */
- 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000880 "KA......" */
- 0xFF,0x0E,0x00,0x00,0x4C,0x4E,0x4B,0x43, /* 00000888 "....LNKC" */
+ 0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000007B0 "..LNKC.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x01, /* 000007B8 "........" */
+ 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04, /* 000007C0 "LNKD...." */
+ 0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x02,0x4C, /* 000007C8 ".......L" */
+ 0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C, /* 000007D0 "NKA....." */
+ 0xFF,0xFF,0x0A,0x00,0x0A,0x03,0x4C,0x4E, /* 000007D8 "......LN" */
+ 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000007E0 "KB......" */
+ 0xFF,0x0B,0x00,0x00,0x4C,0x4E,0x4B,0x44, /* 000007E8 "....LNKD" */
+ 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0B, /* 000007F0 "........" */
+ 0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000007F8 "..LNKA.." */
+ 0x0E,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A, /* 00000800 "........" */
+ 0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E, /* 00000808 ".LNKB..." */
+ 0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x03, /* 00000810 "........" */
+ 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000818 "LNKC...." */
+ 0x0C,0xFF,0xFF,0x0C,0x00,0x00,0x4C,0x4E, /* 00000820 "......LN" */
+ 0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000828 "KA......" */
+ 0xFF,0x0C,0x00,0x01,0x4C,0x4E,0x4B,0x42, /* 00000830 "....LNKB" */
+ 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0C, /* 00000838 "........" */
+ 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00, /* 00000840 "...LNKC." */
+ 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0C,0x00, /* 00000848 "........" */
+ 0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000850 "..LNKD.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x00, /* 00000858 "........" */
+ 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 00000860 "LNKB...." */
+ 0x0C,0xFF,0xFF,0x0D,0x00,0x01,0x4C,0x4E, /* 00000868 "......LN" */
+ 0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000870 "KC......" */
+ 0xFF,0x0D,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000878 ".....LNK" */
+ 0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000880 "D......." */
+ 0x0D,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41, /* 00000888 "....LNKA" */
0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0E, /* 00000890 "........" */
- 0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000898 "..LNKD.." */
- 0x0E,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A, /* 000008A0 "........" */
- 0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E, /* 000008A8 ".LNKA..." */
- 0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x03, /* 000008B0 "........" */
- 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04, /* 000008B8 "LNKB...." */
- 0x0C,0xFF,0xFF,0x0F,0x00,0x00,0x4C,0x4E, /* 000008C0 "......LN" */
- 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000008C8 "KD......" */
- 0xFF,0x0F,0x00,0x01,0x4C,0x4E,0x4B,0x41, /* 000008D0 "....LNKA" */
- 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0F, /* 000008D8 "........" */
- 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00, /* 000008E0 "...LNKB." */
- 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0F,0x00, /* 000008E8 "........" */
- 0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x08, /* 000008F0 "..LNKC.." */
- 0x50,0x52,0x54,0x41,0x12,0x41,0x2F,0x3C, /* 000008F8 "PRTA.A/<" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x01,0x00, /* 00000900 "........" */
- 0x00,0x00,0x0A,0x14,0x12,0x0B,0x04,0x0C, /* 00000908 "........" */
- 0xFF,0xFF,0x01,0x00,0x01,0x00,0x0A,0x15, /* 00000910 "........" */
- 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x01,0x00, /* 00000918 "........" */
- 0x0A,0x02,0x00,0x0A,0x16,0x12,0x0C,0x04, /* 00000920 "........" */
- 0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x03,0x00, /* 00000928 "........" */
- 0x0A,0x17,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000930 "........" */
- 0x02,0x00,0x00,0x00,0x0A,0x18,0x12,0x0B, /* 00000938 "........" */
- 0x04,0x0C,0xFF,0xFF,0x02,0x00,0x01,0x00, /* 00000940 "........" */
- 0x0A,0x19,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000948 "........" */
- 0x02,0x00,0x0A,0x02,0x00,0x0A,0x1A,0x12, /* 00000950 "........" */
- 0x0C,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A, /* 00000958 "........" */
- 0x03,0x00,0x0A,0x1B,0x12,0x0B,0x04,0x0C, /* 00000960 "........" */
- 0xFF,0xFF,0x03,0x00,0x00,0x00,0x0A,0x1C, /* 00000968 "........" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x03,0x00, /* 00000970 "........" */
- 0x01,0x00,0x0A,0x1D,0x12,0x0C,0x04,0x0C, /* 00000978 "........" */
- 0xFF,0xFF,0x03,0x00,0x0A,0x02,0x00,0x0A, /* 00000980 "........" */
- 0x1E,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x03, /* 00000988 "........" */
- 0x00,0x0A,0x03,0x00,0x0A,0x1F,0x12,0x0B, /* 00000990 "........" */
- 0x04,0x0C,0xFF,0xFF,0x04,0x00,0x00,0x00, /* 00000998 "........" */
- 0x0A,0x20,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 000009A0 ". ......" */
- 0x04,0x00,0x01,0x00,0x0A,0x21,0x12,0x0C, /* 000009A8 ".....!.." */
- 0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x02, /* 000009B0 "........" */
- 0x00,0x0A,0x22,0x12,0x0C,0x04,0x0C,0xFF, /* 000009B8 ".."....." */
- 0xFF,0x04,0x00,0x0A,0x03,0x00,0x0A,0x23, /* 000009C0 ".......#" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x05,0x00, /* 000009C8 "........" */
- 0x00,0x00,0x0A,0x24,0x12,0x0B,0x04,0x0C, /* 000009D0 "...$...." */
- 0xFF,0xFF,0x05,0x00,0x01,0x00,0x0A,0x25, /* 000009D8 ".......%" */
- 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x05,0x00, /* 000009E0 "........" */
- 0x0A,0x02,0x00,0x0A,0x26,0x12,0x0C,0x04, /* 000009E8 "....&..." */
- 0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x03,0x00, /* 000009F0 "........" */
- 0x0A,0x27,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 000009F8 ".'......" */
- 0x06,0x00,0x00,0x00,0x0A,0x28,0x12,0x0B, /* 00000A00 ".....(.." */
- 0x04,0x0C,0xFF,0xFF,0x06,0x00,0x01,0x00, /* 00000A08 "........" */
- 0x0A,0x29,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000A10 ".)......" */
- 0x06,0x00,0x0A,0x02,0x00,0x0A,0x2A,0x12, /* 00000A18 "......*." */
- 0x0C,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A, /* 00000A20 "........" */
- 0x03,0x00,0x0A,0x2B,0x12,0x0B,0x04,0x0C, /* 00000A28 "...+...." */
- 0xFF,0xFF,0x07,0x00,0x00,0x00,0x0A,0x2C, /* 00000A30 ".......," */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x07,0x00, /* 00000A38 "........" */
- 0x01,0x00,0x0A,0x2D,0x12,0x0C,0x04,0x0C, /* 00000A40 "...-...." */
- 0xFF,0xFF,0x07,0x00,0x0A,0x02,0x00,0x0A, /* 00000A48 "........" */
- 0x2E,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x07, /* 00000A50 "........" */
- 0x00,0x0A,0x03,0x00,0x0A,0x2F,0x12,0x0B, /* 00000A58 "...../.." */
- 0x04,0x0C,0xFF,0xFF,0x08,0x00,0x00,0x00, /* 00000A60 "........" */
- 0x0A,0x11,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000A68 "........" */
- 0x08,0x00,0x01,0x00,0x0A,0x12,0x12,0x0C, /* 00000A70 "........" */
- 0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x02, /* 00000A78 "........" */
- 0x00,0x0A,0x13,0x12,0x0C,0x04,0x0C,0xFF, /* 00000A80 "........" */
- 0xFF,0x08,0x00,0x0A,0x03,0x00,0x0A,0x14, /* 00000A88 "........" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x09,0x00, /* 00000A90 "........" */
- 0x00,0x00,0x0A,0x15,0x12,0x0B,0x04,0x0C, /* 00000A98 "........" */
- 0xFF,0xFF,0x09,0x00,0x01,0x00,0x0A,0x16, /* 00000AA0 "........" */
- 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x09,0x00, /* 00000AA8 "........" */
- 0x0A,0x02,0x00,0x0A,0x17,0x12,0x0C,0x04, /* 00000AB0 "........" */
- 0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x03,0x00, /* 00000AB8 "........" */
- 0x0A,0x18,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000AC0 "........" */
- 0x0A,0x00,0x00,0x00,0x0A,0x19,0x12,0x0B, /* 00000AC8 "........" */
- 0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x01,0x00, /* 00000AD0 "........" */
- 0x0A,0x1A,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000AD8 "........" */
- 0x0A,0x00,0x0A,0x02,0x00,0x0A,0x1B,0x12, /* 00000AE0 "........" */
- 0x0C,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A, /* 00000AE8 "........" */
- 0x03,0x00,0x0A,0x1C,0x12,0x0B,0x04,0x0C, /* 00000AF0 "........" */
- 0xFF,0xFF,0x0B,0x00,0x00,0x00,0x0A,0x1D, /* 00000AF8 "........" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0B,0x00, /* 00000B00 "........" */
- 0x01,0x00,0x0A,0x1E,0x12,0x0C,0x04,0x0C, /* 00000B08 "........" */
- 0xFF,0xFF,0x0B,0x00,0x0A,0x02,0x00,0x0A, /* 00000B10 "........" */
- 0x1F,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0B, /* 00000B18 "........" */
- 0x00,0x0A,0x03,0x00,0x0A,0x20,0x12,0x0B, /* 00000B20 "..... .." */
- 0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x00,0x00, /* 00000B28 "........" */
- 0x0A,0x21,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000B30 ".!......" */
- 0x0C,0x00,0x01,0x00,0x0A,0x22,0x12,0x0C, /* 00000B38 ".....".." */
- 0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A,0x02, /* 00000B40 "........" */
- 0x00,0x0A,0x23,0x12,0x0C,0x04,0x0C,0xFF, /* 00000B48 "..#....." */
- 0xFF,0x0C,0x00,0x0A,0x03,0x00,0x0A,0x24, /* 00000B50 ".......$" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0D,0x00, /* 00000B58 "........" */
- 0x00,0x00,0x0A,0x25,0x12,0x0B,0x04,0x0C, /* 00000B60 "...%...." */
- 0xFF,0xFF,0x0D,0x00,0x01,0x00,0x0A,0x26, /* 00000B68 ".......&" */
- 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0D,0x00, /* 00000B70 "........" */
- 0x0A,0x02,0x00,0x0A,0x27,0x12,0x0C,0x04, /* 00000B78 "....'..." */
- 0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x03,0x00, /* 00000B80 "........" */
- 0x0A,0x28,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000B88 ".(......" */
- 0x0E,0x00,0x00,0x00,0x0A,0x29,0x12,0x0B, /* 00000B90 ".....).." */
- 0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x01,0x00, /* 00000B98 "........" */
- 0x0A,0x2A,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000BA0 ".*......" */
- 0x0E,0x00,0x0A,0x02,0x00,0x0A,0x2B,0x12, /* 00000BA8 "......+." */
- 0x0C,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A, /* 00000BB0 "........" */
- 0x03,0x00,0x0A,0x2C,0x12,0x0B,0x04,0x0C, /* 00000BB8 "...,...." */
- 0xFF,0xFF,0x0F,0x00,0x00,0x00,0x0A,0x2D, /* 00000BC0 ".......-" */
- 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0F,0x00, /* 00000BC8 "........" */
- 0x01,0x00,0x0A,0x2E,0x12,0x0C,0x04,0x0C, /* 00000BD0 "........" */
- 0xFF,0xFF,0x0F,0x00,0x0A,0x02,0x00,0x0A, /* 00000BD8 "........" */
- 0x2F,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0F, /* 00000BE0 "/......." */
- 0x00,0x0A,0x03,0x00,0x0A,0x10,0x5B,0x82, /* 00000BE8 "......[." */
- 0x46,0x37,0x49,0x53,0x41,0x5F,0x08,0x5F, /* 00000BF0 "F7ISA_._" */
- 0x41,0x44,0x52,0x0C,0x00,0x00,0x01,0x00, /* 00000BF8 "ADR....." */
- 0x5B,0x80,0x50,0x49,0x52,0x51,0x02,0x0A, /* 00000C00 "[.PIRQ.." */
- 0x60,0x0A,0x04,0x10,0x2E,0x5C,0x00,0x5B, /* 00000C08 "`....\.[" */
- 0x81,0x29,0x5C,0x2F,0x04,0x5F,0x53,0x42, /* 00000C10 ".)\/._SB" */
- 0x5F,0x50,0x43,0x49,0x30,0x49,0x53,0x41, /* 00000C18 "_PCI0ISA" */
- 0x5F,0x50,0x49,0x52,0x51,0x01,0x50,0x49, /* 00000C20 "_PIRQ.PI" */
- 0x52,0x41,0x08,0x50,0x49,0x52,0x42,0x08, /* 00000C28 "RA.PIRB." */
- 0x50,0x49,0x52,0x43,0x08,0x50,0x49,0x52, /* 00000C30 "PIRC.PIR" */
- 0x44,0x08,0x5B,0x82,0x46,0x0B,0x53,0x59, /* 00000C38 "D.[.F.SY" */
- 0x53,0x52,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000C40 "SR._HID." */
- 0x41,0xD0,0x0C,0x02,0x08,0x5F,0x55,0x49, /* 00000C48 "A...._UI" */
- 0x44,0x01,0x08,0x43,0x52,0x53,0x5F,0x11, /* 00000C50 "D..CRS_." */
- 0x4E,0x08,0x0A,0x8A,0x47,0x01,0x10,0x00, /* 00000C58 "N...G..." */
- 0x10,0x00,0x00,0x10,0x47,0x01,0x22,0x00, /* 00000C60 "....G."." */
- 0x22,0x00,0x00,0x0C,0x47,0x01,0x30,0x00, /* 00000C68 ""...G.0." */
- 0x30,0x00,0x00,0x10,0x47,0x01,0x44,0x00, /* 00000C70 "0...G.D." */
- 0x44,0x00,0x00,0x1C,0x47,0x01,0x62,0x00, /* 00000C78 "D...G.b." */
- 0x62,0x00,0x00,0x02,0x47,0x01,0x65,0x00, /* 00000C80 "b...G.e." */
- 0x65,0x00,0x00,0x0B,0x47,0x01,0x72,0x00, /* 00000C88 "e...G.r." */
- 0x72,0x00,0x00,0x0E,0x47,0x01,0x80,0x00, /* 00000C90 "r...G..." */
- 0x80,0x00,0x00,0x01,0x47,0x01,0x84,0x00, /* 00000C98 "....G..." */
- 0x84,0x00,0x00,0x03,0x47,0x01,0x88,0x00, /* 00000CA0 "....G..." */
- 0x88,0x00,0x00,0x01,0x47,0x01,0x8C,0x00, /* 00000CA8 "....G..." */
- 0x8C,0x00,0x00,0x03,0x47,0x01,0x90,0x00, /* 00000CB0 "....G..." */
- 0x90,0x00,0x00,0x10,0x47,0x01,0xA2,0x00, /* 00000CB8 "....G..." */
- 0xA2,0x00,0x00,0x1C,0x47,0x01,0xE0,0x00, /* 00000CC0 "....G..." */
- 0xE0,0x00,0x00,0x10,0x47,0x01,0xA0,0x08, /* 00000CC8 "....G..." */
- 0xA0,0x08,0x00,0x04,0x47,0x01,0xC0,0x0C, /* 00000CD0 "....G..." */
- 0xC0,0x0C,0x00,0x10,0x47,0x01,0xD0,0x04, /* 00000CD8 "....G..." */
- 0xD0,0x04,0x00,0x02,0x79,0x00,0x14,0x0B, /* 00000CE0 "....y..." */
- 0x5F,0x43,0x52,0x53,0x00,0xA4,0x43,0x52, /* 00000CE8 "_CRS..CR" */
- 0x53,0x5F,0x5B,0x82,0x2B,0x50,0x49,0x43, /* 00000CF0 "S_[.+PIC" */
- 0x5F,0x08,0x5F,0x48,0x49,0x44,0x0B,0x41, /* 00000CF8 "_._HID.A" */
- 0xD0,0x08,0x5F,0x43,0x52,0x53,0x11,0x18, /* 00000D00 ".._CRS.." */
- 0x0A,0x15,0x47,0x01,0x20,0x00,0x20,0x00, /* 00000D08 "..G. . ." */
- 0x01,0x02,0x47,0x01,0xA0,0x00,0xA0,0x00, /* 00000D10 "..G....." */
- 0x01,0x02,0x22,0x04,0x00,0x79,0x00,0x5B, /* 00000D18 ".."..y.[" */
- 0x82,0x47,0x05,0x44,0x4D,0x41,0x30,0x08, /* 00000D20 ".G.DMA0." */
- 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x02, /* 00000D28 "_HID.A.." */
- 0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x41, /* 00000D30 ".._CRS.A" */
- 0x04,0x0A,0x3D,0x2A,0x10,0x04,0x47,0x01, /* 00000D38 "..=*..G." */
- 0x00,0x00,0x00,0x00,0x00,0x10,0x47,0x01, /* 00000D40 "......G." */
- 0x81,0x00,0x81,0x00,0x00,0x03,0x47,0x01, /* 00000D48 "......G." */
- 0x87,0x00,0x87,0x00,0x00,0x01,0x47,0x01, /* 00000D50 "......G." */
- 0x89,0x00,0x89,0x00,0x00,0x03,0x47,0x01, /* 00000D58 "......G." */
- 0x8F,0x00,0x8F,0x00,0x00,0x01,0x47,0x01, /* 00000D60 "......G." */
- 0xC0,0x00,0xC0,0x00,0x00,0x20,0x47,0x01, /* 00000D68 "..... G." */
- 0x80,0x04,0x80,0x04,0x00,0x10,0x79,0x00, /* 00000D70 "......y." */
- 0x5B,0x82,0x25,0x54,0x4D,0x52,0x5F,0x08, /* 00000D78 "[.%TMR_." */
- 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x01, /* 00000D80 "_HID.A.." */
- 0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D88 ".._CRS.." */
- 0x0A,0x0D,0x47,0x01,0x40,0x00,0x40,0x00, /* 00000D90 "..G.@.@." */
- 0x00,0x04,0x22,0x01,0x00,0x79,0x00,0x5B, /* 00000D98 ".."..y.[" */
- 0x82,0x25,0x52,0x54,0x43,0x5F,0x08,0x5F, /* 00000DA0 ".%RTC_._" */
- 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0B,0x00, /* 00000DA8 "HID.A..." */
- 0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A, /* 00000DB0 "._CRS..." */
- 0x0D,0x47,0x01,0x70,0x00,0x70,0x00,0x00, /* 00000DB8 ".G.p.p.." */
- 0x02,0x22,0x00,0x01,0x79,0x00,0x5B,0x82, /* 00000DC0 "."..y.[." */
- 0x22,0x53,0x50,0x4B,0x52,0x08,0x5F,0x48, /* 00000DC8 ""SPKR._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x08,0x00,0x08, /* 00000DD0 "ID.A...." */
- 0x5F,0x43,0x52,0x53,0x11,0x0D,0x0A,0x0A, /* 00000DD8 "_CRS...." */
- 0x47,0x01,0x61,0x00,0x61,0x00,0x00,0x01, /* 00000DE0 "G.a.a..." */
- 0x79,0x00,0x5B,0x82,0x31,0x50,0x53,0x32, /* 00000DE8 "y.[.1PS2" */
- 0x4D,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000DF0 "M._HID.A" */
- 0xD0,0x0F,0x13,0x08,0x5F,0x43,0x49,0x44, /* 00000DF8 "...._CID" */
- 0x0C,0x41,0xD0,0x0F,0x13,0x14,0x09,0x5F, /* 00000E00 ".A....._" */
- 0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08, /* 00000E08 "STA....." */
- 0x5F,0x43,0x52,0x53,0x11,0x08,0x0A,0x05, /* 00000E10 "_CRS...." */
- 0x22,0x00,0x10,0x79,0x00,0x5B,0x82,0x42, /* 00000E18 ""..y.[.B" */
- 0x04,0x50,0x53,0x32,0x4B,0x08,0x5F,0x48, /* 00000E20 ".PS2K._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x03,0x03,0x08, /* 00000E28 "ID.A...." */
- 0x5F,0x43,0x49,0x44,0x0C,0x41,0xD0,0x03, /* 00000E30 "_CID.A.." */
- 0x0B,0x14,0x09,0x5F,0x53,0x54,0x41,0x00, /* 00000E38 "..._STA." */
- 0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53, /* 00000E40 "...._CRS" */
- 0x11,0x18,0x0A,0x15,0x47,0x01,0x60,0x00, /* 00000E48 "....G.`." */
- 0x60,0x00,0x00,0x01,0x47,0x01,0x64,0x00, /* 00000E50 "`...G.d." */
- 0x64,0x00,0x00,0x01,0x22,0x02,0x00,0x79, /* 00000E58 "d..."..y" */
- 0x00,0x5B,0x82,0x3A,0x46,0x44,0x43,0x30, /* 00000E60 ".[.:FDC0" */
- 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000E68 "._HID.A." */
- 0x07,0x00,0x14,0x09,0x5F,0x53,0x54,0x41, /* 00000E70 "...._STA" */
- 0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52, /* 00000E78 "....._CR" */
- 0x53,0x11,0x1B,0x0A,0x18,0x47,0x01,0xF0, /* 00000E80 "S....G.." */
- 0x03,0xF0,0x03,0x01,0x06,0x47,0x01,0xF7, /* 00000E88 ".....G.." */
- 0x03,0xF7,0x03,0x01,0x01,0x22,0x40,0x00, /* 00000E90 "....."@." */
- 0x2A,0x04,0x00,0x79,0x00,0x5B,0x82,0x46, /* 00000E98 "*..y.[.F" */
- 0x04,0x55,0x41,0x52,0x31,0x08,0x5F,0x48, /* 00000EA0 ".UAR1._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x05,0x01,0x08, /* 00000EA8 "ID.A...." */
- 0x5F,0x55,0x49,0x44,0x01,0x14,0x19,0x5F, /* 00000EB0 "_UID..._" */
- 0x53,0x54,0x41,0x00,0xA0,0x0D,0x93,0x5E, /* 00000EB8 "STA....^" */
- 0x5E,0x5E,0x5E,0x55,0x41,0x52,0x31,0x00, /* 00000EC0 "^^^UAR1." */
- 0xA4,0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x08, /* 00000EC8 "........" */
- 0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,0x0D, /* 00000ED0 "_CRS...." */
- 0x47,0x01,0xF8,0x03,0xF8,0x03,0x08,0x08, /* 00000ED8 "G......." */
- 0x22,0x10,0x00,0x79,0x00,0x5B,0x82,0x47, /* 00000EE0 ""..y.[.G" */
- 0x04,0x55,0x41,0x52,0x32,0x08,0x5F,0x48, /* 00000EE8 ".UAR2._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x05,0x01,0x08, /* 00000EF0 "ID.A...." */
- 0x5F,0x55,0x49,0x44,0x0A,0x02,0x14,0x19, /* 00000EF8 "_UID...." */
- 0x5F,0x53,0x54,0x41,0x00,0xA0,0x0D,0x93, /* 00000F00 "_STA...." */
- 0x5E,0x5E,0x5E,0x5E,0x55,0x41,0x52,0x32, /* 00000F08 "^^^^UAR2" */
- 0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A,0x0F, /* 00000F10 "........" */
- 0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A, /* 00000F18 "._CRS..." */
- 0x0D,0x47,0x01,0xF8,0x02,0xF8,0x02,0x08, /* 00000F20 ".G......" */
- 0x08,0x22,0x08,0x00,0x79,0x00,0x5B,0x82, /* 00000F28 "."..y.[." */
- 0x36,0x4C,0x54,0x50,0x31,0x08,0x5F,0x48, /* 00000F30 "6LTP1._H" */
- 0x49,0x44,0x0C,0x41,0xD0,0x04,0x00,0x08, /* 00000F38 "ID.A...." */
- 0x5F,0x55,0x49,0x44,0x0A,0x02,0x14,0x09, /* 00000F40 "_UID...." */
- 0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F, /* 00000F48 "_STA...." */
- 0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A, /* 00000F50 "._CRS..." */
- 0x0D,0x47,0x01,0x78,0x03,0x78,0x03,0x08, /* 00000F58 ".G.x.x.." */
- 0x08,0x22,0x80,0x00,0x79,0x00,0x5B,0x82, /* 00000F60 "."..y.[." */
- 0x4D,0x07,0x53,0x31,0x46,0x30,0x08,0x5F, /* 00000F68 "M.S1F0._" */
- 0x41,0x44,0x52,0x0C,0x00,0x00,0x06,0x00, /* 00000F70 "ADR....." */
- 0x08,0x5F,0x53,0x55,0x4E,0x01,0x14,0x13, /* 00000F78 "._SUN..." */
- 0x5F,0x50,0x53,0x30,0x00,0x70,0x0A,0x80, /* 00000F80 "_PS0.p.." */
- 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00000F88 "\._GPEDP" */
- 0x54,0x32,0x14,0x13,0x5F,0x50,0x53,0x33, /* 00000F90 "T2.._PS3" */
- 0x00,0x70,0x0A,0x83,0x5C,0x2E,0x5F,0x47, /* 00000F98 ".p..\._G" */
- 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x1F, /* 00000FA0 "PEDPT2.." */
- 0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,0x88, /* 00000FA8 "_EJ0.p.." */
- 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00000FB0 "\._GPEDP" */
- 0x54,0x32,0x70,0x01,0x5C,0x2E,0x5F,0x47, /* 00000FB8 "T2p.\._G" */
- 0x50,0x45,0x50,0x48,0x50,0x31,0x14,0x1E, /* 00000FC0 "PEPHP1.." */
- 0x5F,0x53,0x54,0x41,0x00,0x70,0x0A,0x89, /* 00000FC8 "_STA.p.." */
- 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00000FD0 "\._GPEDP" */
- 0x54,0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50, /* 00000FD8 "T2.\._GP" */
- 0x45,0x50,0x48,0x50,0x31,0x5B,0x82,0x4E, /* 00000FE0 "EPHP1[.N" */
- 0x07,0x53,0x32,0x46,0x30,0x08,0x5F,0x41, /* 00000FE8 ".S2F0._A" */
- 0x44,0x52,0x0C,0x00,0x00,0x07,0x00,0x08, /* 00000FF0 "DR......" */
- 0x5F,0x53,0x55,0x4E,0x0A,0x02,0x14,0x13, /* 00000FF8 "_SUN...." */
- 0x5F,0x50,0x53,0x30,0x00,0x70,0x0A,0x90, /* 00001000 "_PS0.p.." */
- 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001008 "\._GPEDP" */
- 0x54,0x32,0x14,0x13,0x5F,0x50,0x53,0x33, /* 00001010 "T2.._PS3" */
- 0x00,0x70,0x0A,0x93,0x5C,0x2E,0x5F,0x47, /* 00001018 ".p..\._G" */
- 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x1F, /* 00001020 "PEDPT2.." */
- 0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,0x98, /* 00001028 "_EJ0.p.." */
- 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001030 "\._GPEDP" */
- 0x54,0x32,0x70,0x01,0x5C,0x2E,0x5F,0x47, /* 00001038 "T2p.\._G" */
- 0x50,0x45,0x50,0x48,0x50,0x32,0x14,0x1E, /* 00001040 "PEPHP2.." */
- 0x5F,0x53,0x54,0x41,0x00,0x70,0x0A,0x99, /* 00001048 "_STA.p.." */
- 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001050 "\._GPEDP" */
- 0x54,0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50, /* 00001058 "T2.\._GP" */
- 0x45,0x50,0x48,0x50,0x32,0x10,0x4E,0x0B, /* 00001060 "EPHP2.N." */
- 0x5F,0x47,0x50,0x45,0x5B,0x80,0x50,0x48, /* 00001068 "_GPE[.PH" */
- 0x50,0x5F,0x01,0x0B,0xC0,0x10,0x0A,0x03, /* 00001070 "P_......" */
- 0x5B,0x81,0x15,0x50,0x48,0x50,0x5F,0x01, /* 00001078 "[..PHP_." */
- 0x50,0x53,0x54,0x41,0x08,0x50,0x48,0x50, /* 00001080 "PSTA.PHP" */
- 0x31,0x08,0x50,0x48,0x50,0x32,0x08,0x5B, /* 00001088 "1.PHP2.[" */
- 0x80,0x44,0x47,0x31,0x5F,0x01,0x0B,0x44, /* 00001090 ".DG1_..D" */
- 0xB0,0x0A,0x04,0x5B,0x81,0x10,0x44,0x47, /* 00001098 "...[..DG" */
- 0x31,0x5F,0x01,0x44,0x50,0x54,0x31,0x08, /* 000010A0 "1_.DPT1." */
- 0x44,0x50,0x54,0x32,0x08,0x14,0x46,0x07, /* 000010A8 "DPT2..F." */
- 0x5F,0x4C,0x30,0x33,0x00,0x08,0x53,0x4C, /* 000010B0 "_L03..SL" */
- 0x54,0x5F,0x00,0x08,0x45,0x56,0x54,0x5F, /* 000010B8 "T_..EVT_" */
- 0x00,0x70,0x50,0x53,0x54,0x41,0x61,0x7A, /* 000010C0 ".pPSTAaz" */
- 0x61,0x0A,0x04,0x53,0x4C,0x54,0x5F,0x7B, /* 000010C8 "a..SLT_{" */
- 0x61,0x0A,0x0F,0x45,0x56,0x54,0x5F,0x70, /* 000010D0 "a..EVT_p" */
- 0x53,0x4C,0x54,0x5F,0x44,0x50,0x54,0x31, /* 000010D8 "SLT_DPT1" */
- 0x70,0x45,0x56,0x54,0x5F,0x44,0x50,0x54, /* 000010E0 "pEVT_DPT" */
- 0x32,0xA0,0x1B,0x93,0x53,0x4C,0x54,0x5F, /* 000010E8 "2...SLT_" */
- 0x01,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000010F0 "..\/._SB" */
- 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x46, /* 000010F8 "_PCI0S1F" */
- 0x30,0x45,0x56,0x54,0x5F,0xA1,0x1E,0xA0, /* 00001100 "0EVT_..." */
- 0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A,0x02, /* 00001108 "..SLT_.." */
- 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 00001110 ".\/._SB_" */
- 0x50,0x43,0x49,0x30,0x53,0x32,0x46,0x30, /* 00001118 "PCI0S2F0" */
- 0x45,0x56,0x54,0x5F,
+ 0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 00000898 "..LNKC.." */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x01, /* 000008A0 "........" */
+ 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04, /* 000008A8 "LNKD...." */
+ 0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x02,0x4C, /* 000008B0 ".......L" */
+ 0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C, /* 000008B8 "NKA....." */
+ 0xFF,0xFF,0x0E,0x00,0x0A,0x03,0x4C,0x4E, /* 000008C0 "......LN" */
+ 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000008C8 "KB......" */
+ 0xFF,0x0F,0x00,0x00,0x4C,0x4E,0x4B,0x44, /* 000008D0 "....LNKD" */
+ 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0F, /* 000008D8 "........" */
+ 0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000008E0 "..LNKA.." */
+ 0x0E,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A, /* 000008E8 "........" */
+ 0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E, /* 000008F0 ".LNKB..." */
+ 0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x03, /* 000008F8 "........" */
+ 0x4C,0x4E,0x4B,0x43,0x00,0x08,0x50,0x52, /* 00000900 "LNKC..PR" */
+ 0x54,0x41,0x12,0x41,0x2F,0x3C,0x12,0x0B, /* 00000908 "TA.A/<.." */
+ 0x04,0x0C,0xFF,0xFF,0x01,0x00,0x00,0x00, /* 00000910 "........" */
+ 0x0A,0x14,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000918 "........" */
+ 0x01,0x00,0x01,0x00,0x0A,0x15,0x12,0x0C, /* 00000920 "........" */
+ 0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x02, /* 00000928 "........" */
+ 0x00,0x0A,0x16,0x12,0x0C,0x04,0x0C,0xFF, /* 00000930 "........" */
+ 0xFF,0x01,0x00,0x0A,0x03,0x00,0x0A,0x17, /* 00000938 "........" */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x02,0x00, /* 00000940 "........" */
+ 0x00,0x00,0x0A,0x18,0x12,0x0B,0x04,0x0C, /* 00000948 "........" */
+ 0xFF,0xFF,0x02,0x00,0x01,0x00,0x0A,0x19, /* 00000950 "........" */
+ 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x02,0x00, /* 00000958 "........" */
+ 0x0A,0x02,0x00,0x0A,0x1A,0x12,0x0C,0x04, /* 00000960 "........" */
+ 0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x03,0x00, /* 00000968 "........" */
+ 0x0A,0x1B,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000970 "........" */
+ 0x03,0x00,0x00,0x00,0x0A,0x1C,0x12,0x0B, /* 00000978 "........" */
+ 0x04,0x0C,0xFF,0xFF,0x03,0x00,0x01,0x00, /* 00000980 "........" */
+ 0x0A,0x1D,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000988 "........" */
+ 0x03,0x00,0x0A,0x02,0x00,0x0A,0x1E,0x12, /* 00000990 "........" */
+ 0x0C,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A, /* 00000998 "........" */
+ 0x03,0x00,0x0A,0x1F,0x12,0x0B,0x04,0x0C, /* 000009A0 "........" */
+ 0xFF,0xFF,0x04,0x00,0x00,0x00,0x0A,0x20, /* 000009A8 "....... " */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x04,0x00, /* 000009B0 "........" */
+ 0x01,0x00,0x0A,0x21,0x12,0x0C,0x04,0x0C, /* 000009B8 "...!...." */
+ 0xFF,0xFF,0x04,0x00,0x0A,0x02,0x00,0x0A, /* 000009C0 "........" */
+ 0x22,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x04, /* 000009C8 ""......." */
+ 0x00,0x0A,0x03,0x00,0x0A,0x23,0x12,0x0B, /* 000009D0 ".....#.." */
+ 0x04,0x0C,0xFF,0xFF,0x05,0x00,0x00,0x00, /* 000009D8 "........" */
+ 0x0A,0x24,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 000009E0 ".$......" */
+ 0x05,0x00,0x01,0x00,0x0A,0x25,0x12,0x0C, /* 000009E8 ".....%.." */
+ 0x04,0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x02, /* 000009F0 "........" */
+ 0x00,0x0A,0x26,0x12,0x0C,0x04,0x0C,0xFF, /* 000009F8 "..&....." */
+ 0xFF,0x05,0x00,0x0A,0x03,0x00,0x0A,0x27, /* 00000A00 ".......'" */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x06,0x00, /* 00000A08 "........" */
+ 0x00,0x00,0x0A,0x28,0x12,0x0B,0x04,0x0C, /* 00000A10 "...(...." */
+ 0xFF,0xFF,0x06,0x00,0x01,0x00,0x0A,0x29, /* 00000A18 ".......)" */
+ 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x06,0x00, /* 00000A20 "........" */
+ 0x0A,0x02,0x00,0x0A,0x2A,0x12,0x0C,0x04, /* 00000A28 "....*..." */
+ 0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x03,0x00, /* 00000A30 "........" */
+ 0x0A,0x2B,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000A38 ".+......" */
+ 0x07,0x00,0x00,0x00,0x0A,0x2C,0x12,0x0B, /* 00000A40 ".....,.." */
+ 0x04,0x0C,0xFF,0xFF,0x07,0x00,0x01,0x00, /* 00000A48 "........" */
+ 0x0A,0x2D,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000A50 ".-......" */
+ 0x07,0x00,0x0A,0x02,0x00,0x0A,0x2E,0x12, /* 00000A58 "........" */
+ 0x0C,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A, /* 00000A60 "........" */
+ 0x03,0x00,0x0A,0x2F,0x12,0x0B,0x04,0x0C, /* 00000A68 ".../...." */
+ 0xFF,0xFF,0x08,0x00,0x00,0x00,0x0A,0x11, /* 00000A70 "........" */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x08,0x00, /* 00000A78 "........" */
+ 0x01,0x00,0x0A,0x12,0x12,0x0C,0x04,0x0C, /* 00000A80 "........" */
+ 0xFF,0xFF,0x08,0x00,0x0A,0x02,0x00,0x0A, /* 00000A88 "........" */
+ 0x13,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x08, /* 00000A90 "........" */
+ 0x00,0x0A,0x03,0x00,0x0A,0x14,0x12,0x0B, /* 00000A98 "........" */
+ 0x04,0x0C,0xFF,0xFF,0x09,0x00,0x00,0x00, /* 00000AA0 "........" */
+ 0x0A,0x15,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000AA8 "........" */
+ 0x09,0x00,0x01,0x00,0x0A,0x16,0x12,0x0C, /* 00000AB0 "........" */
+ 0x04,0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x02, /* 00000AB8 "........" */
+ 0x00,0x0A,0x17,0x12,0x0C,0x04,0x0C,0xFF, /* 00000AC0 "........" */
+ 0xFF,0x09,0x00,0x0A,0x03,0x00,0x0A,0x18, /* 00000AC8 "........" */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0A,0x00, /* 00000AD0 "........" */
+ 0x00,0x00,0x0A,0x19,0x12,0x0B,0x04,0x0C, /* 00000AD8 "........" */
+ 0xFF,0xFF,0x0A,0x00,0x01,0x00,0x0A,0x1A, /* 00000AE0 "........" */
+ 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0A,0x00, /* 00000AE8 "........" */
+ 0x0A,0x02,0x00,0x0A,0x1B,0x12,0x0C,0x04, /* 00000AF0 "........" */
+ 0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x03,0x00, /* 00000AF8 "........" */
+ 0x0A,0x1C,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000B00 "........" */
+ 0x0B,0x00,0x00,0x00,0x0A,0x1D,0x12,0x0B, /* 00000B08 "........" */
+ 0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x01,0x00, /* 00000B10 "........" */
+ 0x0A,0x1E,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000B18 "........" */
+ 0x0B,0x00,0x0A,0x02,0x00,0x0A,0x1F,0x12, /* 00000B20 "........" */
+ 0x0C,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A, /* 00000B28 "........" */
+ 0x03,0x00,0x0A,0x20,0x12,0x0B,0x04,0x0C, /* 00000B30 "... ...." */
+ 0xFF,0xFF,0x0C,0x00,0x00,0x00,0x0A,0x21, /* 00000B38 ".......!" */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0C,0x00, /* 00000B40 "........" */
+ 0x01,0x00,0x0A,0x22,0x12,0x0C,0x04,0x0C, /* 00000B48 "..."...." */
+ 0xFF,0xFF,0x0C,0x00,0x0A,0x02,0x00,0x0A, /* 00000B50 "........" */
+ 0x23,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0C, /* 00000B58 "#......." */
+ 0x00,0x0A,0x03,0x00,0x0A,0x24,0x12,0x0B, /* 00000B60 ".....$.." */
+ 0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x00,0x00, /* 00000B68 "........" */
+ 0x0A,0x25,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000B70 ".%......" */
+ 0x0D,0x00,0x01,0x00,0x0A,0x26,0x12,0x0C, /* 00000B78 ".....&.." */
+ 0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x02, /* 00000B80 "........" */
+ 0x00,0x0A,0x27,0x12,0x0C,0x04,0x0C,0xFF, /* 00000B88 "..'....." */
+ 0xFF,0x0D,0x00,0x0A,0x03,0x00,0x0A,0x28, /* 00000B90 ".......(" */
+ 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0E,0x00, /* 00000B98 "........" */
+ 0x00,0x00,0x0A,0x29,0x12,0x0B,0x04,0x0C, /* 00000BA0 "...)...." */
+ 0xFF,0xFF,0x0E,0x00,0x01,0x00,0x0A,0x2A, /* 00000BA8 ".......*" */
+ 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0E,0x00, /* 00000BB0 "........" */
+ 0x0A,0x02,0x00,0x0A,0x2B,0x12,0x0C,0x04, /* 00000BB8 "....+..." */
+ 0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x03,0x00, /* 00000BC0 "........" */
+ 0x0A,0x2C,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000BC8 ".,......" */
+ 0x0F,0x00,0x00,0x00,0x0A,0x2D,0x12,0x0B, /* 00000BD0 ".....-.." */
+ 0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x01,0x00, /* 00000BD8 "........" */
+ 0x0A,0x2E,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000BE0 "........" */
+ 0x0F,0x00,0x0A,0x02,0x00,0x0A,0x2F,0x12, /* 00000BE8 "....../." */
+ 0x0C,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A, /* 00000BF0 "........" */
+ 0x03,0x00,0x0A,0x10,0x5B,0x82,0x46,0x37, /* 00000BF8 "....[.F7" */
+ 0x49,0x53,0x41,0x5F,0x08,0x5F,0x41,0x44, /* 00000C00 "ISA_._AD" */
+ 0x52,0x0C,0x00,0x00,0x01,0x00,0x5B,0x80, /* 00000C08 "R.....[." */
+ 0x50,0x49,0x52,0x51,0x02,0x0A,0x60,0x0A, /* 00000C10 "PIRQ..`." */
+ 0x04,0x10,0x2E,0x5C,0x00,0x5B,0x81,0x29, /* 00000C18 "...\.[.)" */
+ 0x5C,0x2F,0x04,0x5F,0x53,0x42,0x5F,0x50, /* 00000C20 "\/._SB_P" */
+ 0x43,0x49,0x30,0x49,0x53,0x41,0x5F,0x50, /* 00000C28 "CI0ISA_P" */
+ 0x49,0x52,0x51,0x01,0x50,0x49,0x52,0x41, /* 00000C30 "IRQ.PIRA" */
+ 0x08,0x50,0x49,0x52,0x42,0x08,0x50,0x49, /* 00000C38 ".PIRB.PI" */
+ 0x52,0x43,0x08,0x50,0x49,0x52,0x44,0x08, /* 00000C40 "RC.PIRD." */
+ 0x5B,0x82,0x46,0x0B,0x53,0x59,0x53,0x52, /* 00000C48 "[.F.SYSR" */
+ 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000C50 "._HID.A." */
+ 0x0C,0x02,0x08,0x5F,0x55,0x49,0x44,0x01, /* 00000C58 "..._UID." */
+ 0x08,0x43,0x52,0x53,0x5F,0x11,0x4E,0x08, /* 00000C60 ".CRS_.N." */
+ 0x0A,0x8A,0x47,0x01,0x10,0x00,0x10,0x00, /* 00000C68 "..G....." */
+ 0x00,0x10,0x47,0x01,0x22,0x00,0x22,0x00, /* 00000C70 "..G."."." */
+ 0x00,0x0C,0x47,0x01,0x30,0x00,0x30,0x00, /* 00000C78 "..G.0.0." */
+ 0x00,0x10,0x47,0x01,0x44,0x00,0x44,0x00, /* 00000C80 "..G.D.D." */
+ 0x00,0x1C,0x47,0x01,0x62,0x00,0x62,0x00, /* 00000C88 "..G.b.b." */
+ 0x00,0x02,0x47,0x01,0x65,0x00,0x65,0x00, /* 00000C90 "..G.e.e." */
+ 0x00,0x0B,0x47,0x01,0x72,0x00,0x72,0x00, /* 00000C98 "..G.r.r." */
+ 0x00,0x0E,0x47,0x01,0x80,0x00,0x80,0x00, /* 00000CA0 "..G....." */
+ 0x00,0x01,0x47,0x01,0x84,0x00,0x84,0x00, /* 00000CA8 "..G....." */
+ 0x00,0x03,0x47,0x01,0x88,0x00,0x88,0x00, /* 00000CB0 "..G....." */
+ 0x00,0x01,0x47,0x01,0x8C,0x00,0x8C,0x00, /* 00000CB8 "..G....." */
+ 0x00,0x03,0x47,0x01,0x90,0x00,0x90,0x00, /* 00000CC0 "..G....." */
+ 0x00,0x10,0x47,0x01,0xA2,0x00,0xA2,0x00, /* 00000CC8 "..G....." */
+ 0x00,0x1C,0x47,0x01,0xE0,0x00,0xE0,0x00, /* 00000CD0 "..G....." */
+ 0x00,0x10,0x47,0x01,0xA0,0x08,0xA0,0x08, /* 00000CD8 "..G....." */
+ 0x00,0x04,0x47,0x01,0xC0,0x0C,0xC0,0x0C, /* 00000CE0 "..G....." */
+ 0x00,0x10,0x47,0x01,0xD0,0x04,0xD0,0x04, /* 00000CE8 "..G....." */
+ 0x00,0x02,0x79,0x00,0x14,0x0B,0x5F,0x43, /* 00000CF0 "..y..._C" */
+ 0x52,0x53,0x00,0xA4,0x43,0x52,0x53,0x5F, /* 00000CF8 "RS..CRS_" */
+ 0x5B,0x82,0x2B,0x50,0x49,0x43,0x5F,0x08, /* 00000D00 "[.+PIC_." */
+ 0x5F,0x48,0x49,0x44,0x0B,0x41,0xD0,0x08, /* 00000D08 "_HID.A.." */
+ 0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15, /* 00000D10 "_CRS...." */
+ 0x47,0x01,0x20,0x00,0x20,0x00,0x01,0x02, /* 00000D18 "G. . ..." */
+ 0x47,0x01,0xA0,0x00,0xA0,0x00,0x01,0x02, /* 00000D20 "G......." */
+ 0x22,0x04,0x00,0x79,0x00,0x5B,0x82,0x47, /* 00000D28 ""..y.[.G" */
+ 0x05,0x44,0x4D,0x41,0x30,0x08,0x5F,0x48, /* 00000D30 ".DMA0._H" */
+ 0x49,0x44,0x0C,0x41,0xD0,0x02,0x00,0x08, /* 00000D38 "ID.A...." */
+ 0x5F,0x43,0x52,0x53,0x11,0x41,0x04,0x0A, /* 00000D40 "_CRS.A.." */
+ 0x3D,0x2A,0x10,0x04,0x47,0x01,0x00,0x00, /* 00000D48 "=*..G..." */
+ 0x00,0x00,0x00,0x10,0x47,0x01,0x81,0x00, /* 00000D50 "....G..." */
+ 0x81,0x00,0x00,0x03,0x47,0x01,0x87,0x00, /* 00000D58 "....G..." */
+ 0x87,0x00,0x00,0x01,0x47,0x01,0x89,0x00, /* 00000D60 "....G..." */
+ 0x89,0x00,0x00,0x03,0x47,0x01,0x8F,0x00, /* 00000D68 "....G..." */
+ 0x8F,0x00,0x00,0x01,0x47,0x01,0xC0,0x00, /* 00000D70 "....G..." */
+ 0xC0,0x00,0x00,0x20,0x47,0x01,0x80,0x04, /* 00000D78 "... G..." */
+ 0x80,0x04,0x00,0x10,0x79,0x00,0x5B,0x82, /* 00000D80 "....y.[." */
+ 0x25,0x54,0x4D,0x52,0x5F,0x08,0x5F,0x48, /* 00000D88 "%TMR_._H" */
+ 0x49,0x44,0x0C,0x41,0xD0,0x01,0x00,0x08, /* 00000D90 "ID.A...." */
+ 0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,0x0D, /* 00000D98 "_CRS...." */
+ 0x47,0x01,0x40,0x00,0x40,0x00,0x00,0x04, /* 00000DA0 "G.@.@..." */
+ 0x22,0x01,0x00,0x79,0x00,0x5B,0x82,0x25, /* 00000DA8 ""..y.[.%" */
+ 0x52,0x54,0x43,0x5F,0x08,0x5F,0x48,0x49, /* 00000DB0 "RTC_._HI" */
+ 0x44,0x0C,0x41,0xD0,0x0B,0x00,0x08,0x5F, /* 00000DB8 "D.A...._" */
+ 0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47, /* 00000DC0 "CRS....G" */
+ 0x01,0x70,0x00,0x70,0x00,0x00,0x02,0x22, /* 00000DC8 ".p.p..."" */
+ 0x00,0x01,0x79,0x00,0x5B,0x82,0x22,0x53, /* 00000DD0 "..y.[."S" */
+ 0x50,0x4B,0x52,0x08,0x5F,0x48,0x49,0x44, /* 00000DD8 "PKR._HID" */
+ 0x0C,0x41,0xD0,0x08,0x00,0x08,0x5F,0x43, /* 00000DE0 ".A...._C" */
+ 0x52,0x53,0x11,0x0D,0x0A,0x0A,0x47,0x01, /* 00000DE8 "RS....G." */
+ 0x61,0x00,0x61,0x00,0x00,0x01,0x79,0x00, /* 00000DF0 "a.a...y." */
+ 0x5B,0x82,0x31,0x50,0x53,0x32,0x4D,0x08, /* 00000DF8 "[.1PS2M." */
+ 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0F, /* 00000E00 "_HID.A.." */
+ 0x13,0x08,0x5F,0x43,0x49,0x44,0x0C,0x41, /* 00000E08 ".._CID.A" */
+ 0xD0,0x0F,0x13,0x14,0x09,0x5F,0x53,0x54, /* 00000E10 "....._ST" */
+ 0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43, /* 00000E18 "A....._C" */
+ 0x52,0x53,0x11,0x08,0x0A,0x05,0x22,0x00, /* 00000E20 "RS...."." */
+ 0x10,0x79,0x00,0x5B,0x82,0x42,0x04,0x50, /* 00000E28 ".y.[.B.P" */
+ 0x53,0x32,0x4B,0x08,0x5F,0x48,0x49,0x44, /* 00000E30 "S2K._HID" */
+ 0x0C,0x41,0xD0,0x03,0x03,0x08,0x5F,0x43, /* 00000E38 ".A...._C" */
+ 0x49,0x44,0x0C,0x41,0xD0,0x03,0x0B,0x14, /* 00000E40 "ID.A...." */
+ 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000E48 "._STA..." */
+ 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x18, /* 00000E50 ".._CRS.." */
+ 0x0A,0x15,0x47,0x01,0x60,0x00,0x60,0x00, /* 00000E58 "..G.`.`." */
+ 0x00,0x01,0x47,0x01,0x64,0x00,0x64,0x00, /* 00000E60 "..G.d.d." */
+ 0x00,0x01,0x22,0x02,0x00,0x79,0x00,0x5B, /* 00000E68 ".."..y.[" */
+ 0x82,0x3A,0x46,0x44,0x43,0x30,0x08,0x5F, /* 00000E70 ".:FDC0._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x07,0x00, /* 00000E78 "HID.A..." */
+ 0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4, /* 00000E80 ".._STA.." */
+ 0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000E88 "..._CRS." */
+ 0x1B,0x0A,0x18,0x47,0x01,0xF0,0x03,0xF0, /* 00000E90 "...G...." */
+ 0x03,0x01,0x06,0x47,0x01,0xF7,0x03,0xF7, /* 00000E98 "...G...." */
+ 0x03,0x01,0x01,0x22,0x40,0x00,0x2A,0x04, /* 00000EA0 "..."@.*." */
+ 0x00,0x79,0x00,0x5B,0x82,0x46,0x04,0x55, /* 00000EA8 ".y.[.F.U" */
+ 0x41,0x52,0x31,0x08,0x5F,0x48,0x49,0x44, /* 00000EB0 "AR1._HID" */
+ 0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,0x55, /* 00000EB8 ".A...._U" */
+ 0x49,0x44,0x01,0x14,0x19,0x5F,0x53,0x54, /* 00000EC0 "ID..._ST" */
+ 0x41,0x00,0xA0,0x0D,0x93,0x5E,0x5E,0x5E, /* 00000EC8 "A....^^^" */
+ 0x5E,0x55,0x41,0x52,0x31,0x00,0xA4,0x00, /* 00000ED0 "^UAR1..." */
+ 0xA1,0x04,0xA4,0x0A,0x0F,0x08,0x5F,0x43, /* 00000ED8 "......_C" */
+ 0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,0x01, /* 00000EE0 "RS....G." */
+ 0xF8,0x03,0xF8,0x03,0x08,0x08,0x22,0x10, /* 00000EE8 "......"." */
+ 0x00,0x79,0x00,0x5B,0x82,0x47,0x04,0x55, /* 00000EF0 ".y.[.G.U" */
+ 0x41,0x52,0x32,0x08,0x5F,0x48,0x49,0x44, /* 00000EF8 "AR2._HID" */
+ 0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,0x55, /* 00000F00 ".A...._U" */
+ 0x49,0x44,0x0A,0x02,0x14,0x19,0x5F,0x53, /* 00000F08 "ID...._S" */
+ 0x54,0x41,0x00,0xA0,0x0D,0x93,0x5E,0x5E, /* 00000F10 "TA....^^" */
+ 0x5E,0x5E,0x55,0x41,0x52,0x32,0x00,0xA4, /* 00000F18 "^^UAR2.." */
+ 0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x08,0x5F, /* 00000F20 "......._" */
+ 0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47, /* 00000F28 "CRS....G" */
+ 0x01,0xF8,0x02,0xF8,0x02,0x08,0x08,0x22, /* 00000F30 "......."" */
+ 0x08,0x00,0x79,0x00,0x5B,0x82,0x36,0x4C, /* 00000F38 "..y.[.6L" */
+ 0x54,0x50,0x31,0x08,0x5F,0x48,0x49,0x44, /* 00000F40 "TP1._HID" */
+ 0x0C,0x41,0xD0,0x04,0x00,0x08,0x5F,0x55, /* 00000F48 ".A...._U" */
+ 0x49,0x44,0x0A,0x02,0x14,0x09,0x5F,0x53, /* 00000F50 "ID...._S" */
+ 0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F, /* 00000F58 "TA....._" */
+ 0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47, /* 00000F60 "CRS....G" */
+ 0x01,0x78,0x03,0x78,0x03,0x08,0x08,0x22, /* 00000F68 ".x.x..."" */
+ 0x80,0x00,0x79,0x00,0x5B,0x82,0x4D,0x07, /* 00000F70 "..y.[.M." */
+ 0x53,0x31,0x46,0x30,0x08,0x5F,0x41,0x44, /* 00000F78 "S1F0._AD" */
+ 0x52,0x0C,0x00,0x00,0x06,0x00,0x08,0x5F, /* 00000F80 "R......_" */
+ 0x53,0x55,0x4E,0x01,0x14,0x13,0x5F,0x50, /* 00000F88 "SUN..._P" */
+ 0x53,0x30,0x00,0x70,0x0A,0x80,0x5C,0x2E, /* 00000F90 "S0.p..\." */
+ 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00000F98 "_GPEDPT2" */
+ 0x14,0x13,0x5F,0x50,0x53,0x33,0x00,0x70, /* 00000FA0 ".._PS3.p" */
+ 0x0A,0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00000FA8 "..\._GPE" */
+ 0x44,0x50,0x54,0x32,0x14,0x1F,0x5F,0x45, /* 00000FB0 "DPT2.._E" */
+ 0x4A,0x30,0x01,0x70,0x0A,0x88,0x5C,0x2E, /* 00000FB8 "J0.p..\." */
+ 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00000FC0 "_GPEDPT2" */
+ 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00000FC8 "p.\._GPE" */
+ 0x50,0x48,0x50,0x31,0x14,0x1E,0x5F,0x53, /* 00000FD0 "PHP1.._S" */
+ 0x54,0x41,0x00,0x70,0x0A,0x89,0x5C,0x2E, /* 00000FD8 "TA.p..\." */
+ 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00000FE0 "_GPEDPT2" */
+ 0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x50, /* 00000FE8 ".\._GPEP" */
+ 0x48,0x50,0x31,0x5B,0x82,0x4E,0x07,0x53, /* 00000FF0 "HP1[.N.S" */
+ 0x32,0x46,0x30,0x08,0x5F,0x41,0x44,0x52, /* 00000FF8 "2F0._ADR" */
+ 0x0C,0x00,0x00,0x07,0x00,0x08,0x5F,0x53, /* 00001000 "......_S" */
+ 0x55,0x4E,0x0A,0x02,0x14,0x13,0x5F,0x50, /* 00001008 "UN...._P" */
+ 0x53,0x30,0x00,0x70,0x0A,0x90,0x5C,0x2E, /* 00001010 "S0.p..\." */
+ 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001018 "_GPEDPT2" */
+ 0x14,0x13,0x5F,0x50,0x53,0x33,0x00,0x70, /* 00001020 ".._PS3.p" */
+ 0x0A,0x93,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001028 "..\._GPE" */
+ 0x44,0x50,0x54,0x32,0x14,0x1F,0x5F,0x45, /* 00001030 "DPT2.._E" */
+ 0x4A,0x30,0x01,0x70,0x0A,0x98,0x5C,0x2E, /* 00001038 "J0.p..\." */
+ 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001040 "_GPEDPT2" */
+ 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001048 "p.\._GPE" */
+ 0x50,0x48,0x50,0x32,0x14,0x1E,0x5F,0x53, /* 00001050 "PHP2.._S" */
+ 0x54,0x41,0x00,0x70,0x0A,0x99,0x5C,0x2E, /* 00001058 "TA.p..\." */
+ 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001060 "_GPEDPT2" */
+ 0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x50, /* 00001068 ".\._GPEP" */
+ 0x48,0x50,0x32,0x10,0x4E,0x0B,0x5F,0x47, /* 00001070 "HP2.N._G" */
+ 0x50,0x45,0x5B,0x80,0x50,0x48,0x50,0x5F, /* 00001078 "PE[.PHP_" */
+ 0x01,0x0B,0xC0,0x10,0x0A,0x03,0x5B,0x81, /* 00001080 "......[." */
+ 0x15,0x50,0x48,0x50,0x5F,0x01,0x50,0x53, /* 00001088 ".PHP_.PS" */
+ 0x54,0x41,0x08,0x50,0x48,0x50,0x31,0x08, /* 00001090 "TA.PHP1." */
+ 0x50,0x48,0x50,0x32,0x08,0x5B,0x80,0x44, /* 00001098 "PHP2.[.D" */
+ 0x47,0x31,0x5F,0x01,0x0B,0x44,0xB0,0x0A, /* 000010A0 "G1_..D.." */
+ 0x04,0x5B,0x81,0x10,0x44,0x47,0x31,0x5F, /* 000010A8 ".[..DG1_" */
+ 0x01,0x44,0x50,0x54,0x31,0x08,0x44,0x50, /* 000010B0 ".DPT1.DP" */
+ 0x54,0x32,0x08,0x14,0x46,0x07,0x5F,0x4C, /* 000010B8 "T2..F._L" */
+ 0x30,0x33,0x00,0x08,0x53,0x4C,0x54,0x5F, /* 000010C0 "03..SLT_" */
+ 0x00,0x08,0x45,0x56,0x54,0x5F,0x00,0x70, /* 000010C8 "..EVT_.p" */
+ 0x50,0x53,0x54,0x41,0x61,0x7A,0x61,0x0A, /* 000010D0 "PSTAaza." */
+ 0x04,0x53,0x4C,0x54,0x5F,0x7B,0x61,0x0A, /* 000010D8 ".SLT_{a." */
+ 0x0F,0x45,0x56,0x54,0x5F,0x70,0x53,0x4C, /* 000010E0 ".EVT_pSL" */
+ 0x54,0x5F,0x44,0x50,0x54,0x31,0x70,0x45, /* 000010E8 "T_DPT1pE" */
+ 0x56,0x54,0x5F,0x44,0x50,0x54,0x32,0xA0, /* 000010F0 "VT_DPT2." */
+ 0x1B,0x93,0x53,0x4C,0x54,0x5F,0x01,0x86, /* 000010F8 "..SLT_.." */
+ 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 00001100 "\/._SB_P" */
+ 0x43,0x49,0x30,0x53,0x31,0x46,0x30,0x45, /* 00001108 "CI0S1F0E" */
+ 0x56,0x54,0x5F,0xA1,0x1E,0xA0,0x1C,0x93, /* 00001110 "VT_....." */
+ 0x53,0x4C,0x54,0x5F,0x0A,0x02,0x86,0x5C, /* 00001118 "SLT_...\" */
+ 0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43, /* 00001120 "/._SB_PC" */
+ 0x49,0x30,0x53,0x32,0x46,0x30,0x45,0x56, /* 00001128 "I0S2F0EV" */
+ 0x54,0x5F,
};
int DsdtLen=sizeof(AmlCode);
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/hvmloader/config.h
--- a/tools/firmware/hvmloader/config.h Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/hvmloader/config.h Thu May 22 19:42:51 2008 +0900
@@ -23,11 +23,12 @@
/* Memory map. */
#define HYPERCALL_PHYSICAL_ADDRESS 0x00080000
#define VGABIOS_PHYSICAL_ADDRESS 0x000C0000
-#define ETHERBOOT_PHYSICAL_ADDRESS 0x000C8000
+#define ETHERBOOT_PHYSICAL_ADDRESS 0x000D0000
#define EXTBOOT_PHYSICAL_ADDRESS 0x000DF800
#define SMBIOS_PHYSICAL_ADDRESS 0x000E9000
#define SMBIOS_MAXIMUM_SIZE 0x00001000
#define ACPI_PHYSICAL_ADDRESS 0x000EA000
#define ROMBIOS_PHYSICAL_ADDRESS 0x000F0000
+#define SCRATCH_PHYSICAL_ADDRESS 0x00010000
#endif /* __HVMLOADER_CONFIG_H__ */
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/hvmloader/hvmloader.c Thu May 22 19:42:51 2008 +0900
@@ -103,12 +103,7 @@ void create_mp_tables(void);
void create_mp_tables(void);
int hvm_write_smbios_tables(void);
-static int
-cirrus_check(void)
-{
- outw(0x3C4, 0x9206);
- return inb(0x3C5) == 0x12;
-}
+static enum { VGA_none, VGA_std, VGA_cirrus } virtual_vga = VGA_none;
static void
init_hypercalls(void)
@@ -165,7 +160,7 @@ static void pci_setup(void)
/* Create a list of device BARs in descending order of size. */
struct bars {
uint32_t devfn, bar_reg, bar_sz;
- } *bars = (struct bars *)0xc0000;
+ } *bars = (struct bars *)SCRATCH_PHYSICAL_ADDRESS;
unsigned int i, nr_bars = 0;
/* Program PCI-ISA bridge with appropriate link routes. */
@@ -196,12 +191,15 @@ static void pci_setup(void)
switch ( class )
{
+ case 0x0300:
+ if ( (vendor_id == 0x1234) && (device_id == 0x1111) )
+ virtual_vga = VGA_std;
+ if ( (vendor_id == 0x1013) && (device_id == 0xb8) )
+ virtual_vga = VGA_cirrus;
+ break;
case 0x0680:
+ /* PIIX4 ACPI PM. Special device with special PCI config space. */
ASSERT((vendor_id == 0x8086) && (device_id == 0x7113));
- /*
- * PIIX4 ACPI PM. Special device with special PCI config space.
- * No ordinary BARs.
- */
pci_writew(devfn, 0x20, 0x0000); /* No smb bus IO enable */
pci_writew(devfn, 0x22, 0x0000);
pci_writew(devfn, 0x3c, 0x0009); /* Hardcoded IRQ9 */
@@ -212,42 +210,41 @@ static void pci_setup(void)
ASSERT((vendor_id == 0x8086) && (device_id == 0x7010));
pci_writew(devfn, 0x40, 0x8000); /* enable IDE0 */
pci_writew(devfn, 0x42, 0x8000); /* enable IDE1 */
- /* fall through */
- default:
- /* Default memory mappings. */
- for ( bar = 0; bar < 7; bar++ )
- {
- bar_reg = PCI_BASE_ADDRESS_0 + 4*bar;
- if ( bar == 6 )
- bar_reg = PCI_ROM_ADDRESS;
-
- bar_data = pci_readl(devfn, bar_reg);
- pci_writel(devfn, bar_reg, ~0);
- bar_sz = pci_readl(devfn, bar_reg);
- pci_writel(devfn, bar_reg, bar_data);
- if ( bar_sz == 0 )
- continue;
-
- bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
- PCI_BASE_ADDRESS_SPACE_MEMORY) ?
- PCI_BASE_ADDRESS_MEM_MASK :
- (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
- bar_sz &= ~(bar_sz - 1);
-
- for ( i = 0; i < nr_bars; i++ )
- if ( bars[i].bar_sz < bar_sz )
- break;
-
- if ( i != nr_bars )
- memmove(&bars[i+1], &bars[i], (nr_bars-i) * sizeof(*bars));
-
- bars[i].devfn = devfn;
- bars[i].bar_reg = bar_reg;
- bars[i].bar_sz = bar_sz;
-
- nr_bars++;
- }
break;
+ }
+
+ /* Map the I/O memory and port resources. */
+ for ( bar = 0; bar < 7; bar++ )
+ {
+ bar_reg = PCI_BASE_ADDRESS_0 + 4*bar;
+ if ( bar == 6 )
+ bar_reg = PCI_ROM_ADDRESS;
+
+ bar_data = pci_readl(devfn, bar_reg);
+ pci_writel(devfn, bar_reg, ~0);
+ bar_sz = pci_readl(devfn, bar_reg);
+ pci_writel(devfn, bar_reg, bar_data);
+ if ( bar_sz == 0 )
+ continue;
+
+ bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
+ PCI_BASE_ADDRESS_SPACE_MEMORY) ?
+ PCI_BASE_ADDRESS_MEM_MASK :
+ (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
+ bar_sz &= ~(bar_sz - 1);
+
+ for ( i = 0; i < nr_bars; i++ )
+ if ( bars[i].bar_sz < bar_sz )
+ break;
+
+ if ( i != nr_bars )
+ memmove(&bars[i+1], &bars[i], (nr_bars-i) * sizeof(*bars));
+
+ bars[i].devfn = devfn;
+ bars[i].bar_reg = bar_reg;
+ bars[i].bar_sz = bar_sz;
+
+ nr_bars++;
}
/* Map the interrupt. */
@@ -464,19 +461,23 @@ int main(void)
if ( (get_vcpu_nr() > 1) || get_apic_mode() )
create_mp_tables();
- if ( cirrus_check() )
- {
+ switch ( virtual_vga )
+ {
+ case VGA_cirrus:
printf("Loading Cirrus VGABIOS ...\n");
memcpy((void *)VGABIOS_PHYSICAL_ADDRESS,
vgabios_cirrusvga, sizeof(vgabios_cirrusvga));
vgabios_sz = sizeof(vgabios_cirrusvga);
- }
- else
- {
+ break;
+ case VGA_std:
printf("Loading Standard VGABIOS ...\n");
memcpy((void *)VGABIOS_PHYSICAL_ADDRESS,
vgabios_stdvga, sizeof(vgabios_stdvga));
vgabios_sz = sizeof(vgabios_stdvga);
+ break;
+ default:
+ printf("No emulated VGA adaptor ...\n");
+ break;
}
etherboot_sz = scan_etherboot_nic((void*)ETHERBOOT_PHYSICAL_ADDRESS);
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/hvmloader/smbios.c
--- a/tools/firmware/hvmloader/smbios.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/hvmloader/smbios.c Thu May 22 19:42:51 2008 +0900
@@ -217,15 +217,16 @@ hvm_write_smbios_tables(void)
xen_version_str[sizeof(xen_version_str)-1] = '\0';
- /* NB. 0xC0000 is a safe large memory area for scratch. */
- len = write_smbios_tables((void *)0xC0000,
+ /* SCRATCH_PHYSICAL_ADDRESS is a safe large memory area for scratch. */
+ len = write_smbios_tables((void *)SCRATCH_PHYSICAL_ADDRESS,
get_vcpu_nr(), get_memsize(),
uuid, xen_version_str,
xen_major_version, xen_minor_version);
if ( len > SMBIOS_MAXIMUM_SIZE )
goto error_out;
/* Okay, not too large: copy out of scratch to final location. */
- memcpy((void *)SMBIOS_PHYSICAL_ADDRESS, (void *)0xC0000, len);
+ memcpy((void *)SMBIOS_PHYSICAL_ADDRESS,
+ (void *)SCRATCH_PHYSICAL_ADDRESS, len);
return len;
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/rombios/rombios.c
--- a/tools/firmware/rombios/rombios.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/rombios/rombios.c Thu May 22 19:42:51 2008 +0900
@@ -1843,12 +1843,24 @@ keyboard_panic(status)
BX_PANIC("Keyboard error:%u\n",status);
}
+
+#define CMOS_SHUTDOWN_S3 0xFE
//--------------------------------------------------------------------------
// machine_reset
//--------------------------------------------------------------------------
void
machine_reset()
{
+ASM_START
+;we must check whether CMOS_SHUTDOWN_S3 is set or not
+;if it is s3 resume, just jmp back to normal Post Entry
+;below port io will prevent s3 resume
+ mov al, #0x0f
+ out 0x70, al
+ in al, 0x71
+ cmp al, #0xFE
+ jz post
+ASM_END
/* Frob the keyboard reset line to reset the processor */
outb(0x64, 0x60); /* Map the flags register at data port (0x60) */
outb(0x60, 0x14); /* Set the flags to system|disable */
@@ -2305,6 +2317,72 @@ debugger_off()
debugger_off()
{
outb(0xfedc, 0x00);
+}
+
+/* according to memory layout defined in acpi_build_tables(),
+ acpi FACS table is located in ACPI_PHYSICAL_ADDRESS(0xEA000) */
+#define ACPI_FACS_ADDRESS 0xEA000
+#define ACPI_FACS_OFFSET 0x10
+/* S3 resume status in CMOS 0Fh shutdown status byte*/
+
+void
+s3_resume()
+{
+ Bit16u s3_wakeup_vector;
+ extern Bit16u s3_wakeup_ip;
+ extern Bit16u s3_wakeup_cs;
+ extern Bit8u s3_resume_flag;
+
+ASM_START
+ push ds
+ mov ax, #0xF000
+ mov ds, ax
+ASM_END
+
+ if (s3_resume_flag!=CMOS_SHUTDOWN_S3){
+ goto s3_out;
+ }
+ s3_resume_flag = 0;
+
+ASM_START
+ mov ax, #0x0
+ mov ds, ax
+ASM_END
+
+ /* get x_firmware_waking_vector */
+ s3_wakeup_vector = *((Bit16u*)(ACPI_FACS_ADDRESS+ACPI_FACS_OFFSET+24));
+ if (s3_wakeup_vector == 0){
+ /* get firmware_waking_vector */
+ s3_wakeup_vector = *((Bit16u*)(ACPI_FACS_ADDRESS+ACPI_FACS_OFFSET+12));
+ if (s3_wakeup_vector == 0){
+ goto s3_out;
+ }
+ }
+
+ /* setup wakeup vector */
+ s3_wakeup_ip = s3_wakeup_vector & 0xF;
+ s3_wakeup_cs = s3_wakeup_vector >> 4;
+
+ASM_START
+ mov bx, [_s3_wakeup_cs]
+ mov dx, [_s3_wakeup_ip]
+
+ mov ax, #0xF000
+ mov ds, ax
+ mov [_s3_wakeup_cs], bx
+ mov [_s3_wakeup_ip], dx
+ jmpf [_s3_wakeup_ip]
+
+; S3 data
+_s3_wakeup_ip: dw 0x0a
+_s3_wakeup_cs: dw 0x0
+_s3_resume_flag: db 0 ; set at POST time by CMOS[0xF] shutdown status
+ASM_END
+
+s3_out:
+ASM_START
+ pop ds
+ASM_END
}
#if BX_USE_ATADRV
@@ -9752,6 +9830,18 @@ post:
;; Examine CMOS shutdown status.
mov al, bl
+ ;; 0xFE S3 resume
+ cmp AL, #0xFE
+ jnz not_s3_resume
+
+ ;; set S3 resume flag
+ mov dx, #0xF000
+ mov ds, dx
+ mov [_s3_resume_flag], AL
+ jmp normal_post
+
+not_s3_resume:
+
;; 0x00, 0x09, 0x0D+ = normal startup
cmp AL, #0x00
jz normal_post
@@ -10049,6 +10139,7 @@ post_default_ints:
;;
#endif // BX_ELTORITO_BOOT
+ call _s3_resume
call _interactive_bootkey
#if BX_TCGBIOS
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/vgabios/clext.c
--- a/tools/firmware/vgabios/clext.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/vgabios/clext.c Thu May 22 19:42:51 2008 +0900
@@ -26,6 +26,7 @@
#define PM_BIOSMEM_CURRENT_MODE 0x449
#define PM_BIOSMEM_CRTC_ADDRESS 0x463
#define PM_BIOSMEM_VBE_MODE 0x4BA
+#define PM_BIOSMEM_VBE_POWER 0x4BC
typedef struct
{
@@ -491,7 +492,7 @@ cirrus_vesa:
#ifdef CIRRUS_DEBUG
call cirrus_debug_dump
#endif
- cmp al, #0x0F
+ cmp al, #0x10
ja cirrus_vesa_not_handled
push bx
xor bx, bx
@@ -682,7 +683,7 @@ c80h_2:
ret
cirrus_extbios_81h:
- mov ax, #0x100 ;; XXX
+ mov ax, #0x103 ;; XXX
ret
cirrus_extbios_82h:
push dx
@@ -1175,6 +1176,52 @@ cirrus_vesa_07h_2:
mov cx, ax
pop dx
mov ax, #0x004f
+ ret
+
+cirrus_vesa_10h: ;; Power management functions
+ ;; Set up DS to read stored power info from RAM
+ push ds
+#ifdef CIRRUS_VESA3_PMINFO
+ db 0x2e ;; cs:
+ mov ax, [cirrus_vesa_sel0000_data]
+#else
+ xor ax, ax
+#endif
+ mov ds, ax
+ ;; Now choose the right function
+ cmp bl, #0x00
+ ja cirrus_vesa_10h_01
+ ;;
+ ;; Function 00h: Get capabilities
+ ;;
+ mov bx, #0x0720 ;; 07: standby/suspend/off, 20: VBE/PM 2.0
+ mov ax, #0x004f
+ jmp cirrus_vesa_10h_done
+cirrus_vesa_10h_01:
+ cmp bl, #0x01
+ ja cirrus_vesa_10h_02
+ ;;
+ ;; Function 01h: Set power state
+ ;;
+ mov ax, bx
+ mov bx, # PM_BIOSMEM_VBE_POWER
+ mov [bx], ah
+ mov ax, #0x004f
+ jmp cirrus_vesa_10h_done
+cirrus_vesa_10h_02:
+ cmp bl, #0x02
+ ja cirrus_vesa_10h_unimplemented
+ ;;
+ ;; Function 02h: Get power state
+ ;;
+ mov bx, # PM_BIOSMEM_VBE_POWER
+ mov bh, [bx]
+ mov ax, #0x004f
+ jmp cirrus_vesa_10h_done
+cirrus_vesa_10h_unimplemented:
+ mov ax, #0x014F ;; not implemented
+cirrus_vesa_10h_done:
+ pop ds
ret
cirrus_vesa_unimplemented:
@@ -1601,7 +1648,8 @@ cirrus_vesa_handlers:
dw cirrus_vesa_unimplemented
dw cirrus_vesa_unimplemented
dw cirrus_vesa_unimplemented
-
+ ;; 10h
+ dw cirrus_vesa_10h
ASM_END
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/firmware/vgabios/vgatables.h
--- a/tools/firmware/vgabios/vgatables.h Tue May 20 18:54:09 2008 +0900
+++ b/tools/firmware/vgabios/vgatables.h Thu May 22 19:42:51 2008 +0900
@@ -25,6 +25,7 @@
#define BIOSMEM_VS_POINTER 0xA8
#define BIOSMEM_VBE_FLAG 0xB9
#define BIOSMEM_VBE_MODE 0xBA
+#define BIOSMEM_VBE_POWER 0xBC
/*
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/ioemu/hw/pc.c
--- a/tools/ioemu/hw/pc.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/ioemu/hw/pc.c Thu May 22 19:42:51 2008 +0900
@@ -1121,6 +1121,14 @@ static void pc_init_isa(uint64_t ram_siz
initrd_filename, 0, NULL);
}
+/* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
+ BIOS will read it and start S3 resume at POST Entry*/
+void cmos_set_s3_resume(void)
+{
+ if (rtc_state)
+ rtc_set_memory(rtc_state, 0xF, 0xFE);
+}
+
QEMUMachine pc_machine = {
"pc",
"Standard PC",
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/ioemu/hw/piix4acpi.c
--- a/tools/ioemu/hw/piix4acpi.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/ioemu/hw/piix4acpi.c Thu May 22 19:42:51 2008 +0900
@@ -25,6 +25,7 @@
#include "vl.h"
#include <xen/hvm/ioreq.h>
+#include <xen/hvm/params.h>
/* PM1a_CNT bits, as defined in the ACPI specification. */
#define SCI_EN (1 << 0)
@@ -35,6 +36,7 @@
/* Sleep state type codes as defined by the \_Sx objects in the DSDT. */
/* These must be kept in sync with the DSDT (hvmloader/acpi/dsdt.asl) */
#define SLP_TYP_S4 (6 << 10)
+#define SLP_TYP_S3 (5 << 10)
#define SLP_TYP_S5 (7 << 10)
#define ACPI_DBG_IO_ADDR 0xb044
@@ -78,6 +80,8 @@ typedef struct PHPSlots {
} PHPSlots;
PHPSlots php_slots;
+
+int s3_shutdown_flag;
static void piix4acpi_save(QEMUFile *f, void *opaque)
{
@@ -118,6 +122,13 @@ static void acpi_shutdown(uint32_t val)
return;
switch (val & SLP_TYP_Sx) {
+ case SLP_TYP_S3:
+ s3_shutdown_flag = 1;
+ qemu_system_reset();
+ s3_shutdown_flag = 0;
+ cmos_set_s3_resume();
+ xc_set_hvm_param(xc_handle, domid, HVM_PARAM_ACPI_S_STATE, 3);
+ break;
case SLP_TYP_S4:
case SLP_TYP_S5:
qemu_system_shutdown_request();
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/ioemu/hw/xenfb.c
--- a/tools/ioemu/hw/xenfb.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/ioemu/hw/xenfb.c Thu May 22 19:42:51 2008 +0900
@@ -498,7 +498,7 @@ static int xenfb_configure_fb(struct xen
fb_len_lim, fb_len_max);
fb_len_lim = fb_len_max;
}
- if (fb_len > fb_len_lim) {
+ if (fb_len_lim && fb_len > fb_len_lim) {
fprintf(stderr,
"FB: frontend fb size %zu limited to %zu\n",
fb_len, fb_len_lim);
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/ioemu/target-i386-dm/helper2.c
--- a/tools/ioemu/target-i386-dm/helper2.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/ioemu/target-i386-dm/helper2.c Thu May 22 19:42:51 2008 +0900
@@ -133,8 +133,12 @@ CPUX86State *cpu_x86_init(void)
/* called from main_cpu_reset */
void cpu_reset(CPUX86State *env)
{
+ extern int s3_shutdown_flag;
int xcHandle;
int sts;
+
+ if (s3_shutdown_flag)
+ return;
xcHandle = xc_interface_open();
if (xcHandle < 0)
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/ioemu/vl.h
--- a/tools/ioemu/vl.h Tue May 20 18:54:09 2008 +0900
+++ b/tools/ioemu/vl.h Thu May 22 19:42:51 2008 +0900
@@ -1181,6 +1181,7 @@ extern int fd_bootchk;
void ioport_set_a20(int enable);
int ioport_get_a20(void);
+void cmos_set_s3_resume(void);
/* ppc.c */
extern QEMUMachine prep_machine;
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/libxc/xc_cpuid_x86.c
--- a/tools/libxc/xc_cpuid_x86.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/libxc/xc_cpuid_x86.c Thu May 22 19:42:51 2008 +0900
@@ -105,11 +105,14 @@ static void cpuid(const unsigned int *in
static void cpuid(const unsigned int *input, unsigned int *regs)
{
unsigned int count = (input[1] == XEN_CPUID_INPUT_UNUSED) ? 0 : input[1];
- unsigned int bx_temp;
- asm ( "mov %%ebx,%4; cpuid; mov %%ebx,%1; mov %4,%%ebx"
- : "=a" (regs[0]), "=r" (regs[1]),
- "=c" (regs[2]), "=d" (regs[3]), "=m" (bx_temp)
- : "0" (input[0]), "2" (count) );
+ asm (
+#ifdef __i386__
+ "push %%ebx; cpuid; mov %%ebx,%1; pop %%ebx"
+#else
+ "push %%rbx; cpuid; mov %%ebx,%1; pop %%rbx"
+#endif
+ : "=a" (regs[0]), "=r" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
+ : "0" (input[0]), "2" (count) );
}
/* Get the manufacturer brand name of the host processor. */
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/libxc/xc_pm.c
--- a/tools/libxc/xc_pm.c Tue May 20 18:54:09 2008 +0900
+++ b/tools/libxc/xc_pm.c Thu May 22 19:42:51 2008 +0900
@@ -99,3 +99,71 @@ int xc_pm_reset_pxstat(int xc_handle, in
return xc_sysctl(xc_handle, &sysctl);
}
+
+int xc_pm_get_max_cx(int xc_handle, int cpuid, int *max_cx)
+{
+ DECLARE_SYSCTL;
+ int ret = 0;
+
+ sysctl.cmd = XEN_SYSCTL_get_pmstat;
+ sysctl.u.get_pmstat.type = PMSTAT_get_max_cx;
+ sysctl.u.get_pmstat.cpuid = cpuid;
+ if ( (ret = xc_sysctl(xc_handle, &sysctl)) != 0 )
+ return ret;
+
+ *max_cx = sysctl.u.get_pmstat.u.getcx.nr;
+ return ret;
+}
+
+int xc_pm_get_cxstat(int xc_handle, int cpuid, struct xc_cx_stat *cxpt)
+{
+ DECLARE_SYSCTL;
+ int max_cx, ret;
+
+ if( !cxpt || !(cxpt->triggers) || !(cxpt->residencies) )
+ return -EINVAL;
+
+ if ( (ret = xc_pm_get_max_cx(xc_handle, cpuid, &max_cx)) )
+ goto unlock_0;
+
+ if ( (ret = lock_pages(cxpt, sizeof(struct xc_cx_stat))) )
+ goto unlock_0;
+ if ( (ret = lock_pages(cxpt->triggers, max_cx * sizeof(uint64_t))) )
+ goto unlock_1;
+ if ( (ret = lock_pages(cxpt->residencies, max_cx * sizeof(uint64_t))) )
+ goto unlock_2;
+
+ sysctl.cmd = XEN_SYSCTL_get_pmstat;
+ sysctl.u.get_pmstat.type = PMSTAT_get_cxstat;
+ sysctl.u.get_pmstat.cpuid = cpuid;
+ set_xen_guest_handle(sysctl.u.get_pmstat.u.getcx.triggers, cxpt->triggers);
+ set_xen_guest_handle(sysctl.u.get_pmstat.u.getcx.residencies,
+ cxpt->residencies);
+
+ if ( (ret = xc_sysctl(xc_handle, &sysctl)) )
+ goto unlock_3;
+
+ cxpt->nr = sysctl.u.get_pmstat.u.getcx.nr;
+ cxpt->last = sysctl.u.get_pmstat.u.getcx.last;
+ cxpt->idle_time = sysctl.u.get_pmstat.u.getcx.idle_time;
+
+unlock_3:
+ unlock_pages(cxpt->residencies, max_cx * sizeof(uint64_t));
+unlock_2:
+ unlock_pages(cxpt->triggers, max_cx * sizeof(uint64_t));
+unlock_1:
+ unlock_pages(cxpt, sizeof(struct xc_cx_stat));
+unlock_0:
+ return ret;
+}
+
+int xc_pm_reset_cxstat(int xc_handle, int cpuid)
+{
+ DECLARE_SYSCTL;
+
+ sysctl.cmd = XEN_SYSCTL_get_pmstat;
+ sysctl.u.get_pmstat.type = PMSTAT_reset_cxstat;
+ sysctl.u.get_pmstat.cpuid = cpuid;
+
+ return xc_sysctl(xc_handle, &sysctl);
+}
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h Tue May 20 18:54:09 2008 +0900
+++ b/tools/libxc/xenctrl.h Thu May 22 19:42:51 2008 +0900
@@ -1053,4 +1053,17 @@ int xc_pm_get_pxstat(int xc_handle, int
int xc_pm_get_pxstat(int xc_handle, int cpuid, struct xc_px_stat *pxpt);
int xc_pm_reset_pxstat(int xc_handle, int cpuid);
+struct xc_cx_stat {
+ uint32_t nr; /* entry nr in triggers & residencies, including C0 */
+ uint32_t last; /* last Cx state */
+ uint64_t idle_time; /* idle time from boot */
+ uint64_t *triggers; /* Cx trigger counts */
+ uint64_t *residencies; /* Cx residencies */
+};
+typedef struct xc_cx_stat xc_cx_stat_t;
+
+int xc_pm_get_max_cx(int xc_handle, int cpuid, int *max_cx);
+int xc_pm_get_cxstat(int xc_handle, int cpuid, struct xc_cx_stat *cxpt);
+int xc_pm_reset_cxstat(int xc_handle, int cpuid);
+
#endif /* XENCTRL_H */
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/python/xen/util/blkif.py
--- a/tools/python/xen/util/blkif.py Tue May 20 18:54:09 2008 +0900
+++ b/tools/python/xen/util/blkif.py Thu May 22 19:42:51 2008 +0900
@@ -1,8 +1,6 @@ import os
import os
import re
import string
-
-from xen.xend.XendLogging import log
def expand_dev_name(name):
if not name:
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py Tue May 20 18:54:09 2008 +0900
+++ b/tools/python/xen/xend/XendConfig.py Thu May 22 19:42:51 2008 +0900
@@ -1143,10 +1143,11 @@ class XendConfig(dict):
if o_dev_type == 'vbd' or o_dev_type == 'tap':
blkdev_file = blkdev_uname_to_file(dev_uname)
o_dev_uname = sxp.child_value(o_dev_info, 'uname')
- o_blkdev_file = blkdev_uname_to_file(o_dev_uname)
- if blkdev_file == o_blkdev_file:
- raise XendConfigError('The file "%s" is already used' %
- blkdev_file)
+ if o_dev_uname != None:
+ o_blkdev_file = blkdev_uname_to_file(o_dev_uname)
+ if blkdev_file == o_blkdev_file:
+ raise XendConfigError('The file "%s" is already
used' %
+ blkdev_file)
o_blkdev_name = sxp.child_value(o_dev_info, 'dev')
o_devid = self._blkdev_name_to_number(o_blkdev_name)
if o_devid != None and devid == o_devid:
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/python/xen/xend/XendConstants.py
--- a/tools/python/xen/xend/XendConstants.py Tue May 20 18:54:09 2008 +0900
+++ b/tools/python/xen/xend/XendConstants.py Thu May 22 19:42:51 2008 +0900
@@ -48,6 +48,7 @@ HVM_PARAM_BUFPIOREQ_PFN = 9
HVM_PARAM_BUFPIOREQ_PFN = 9
HVM_PARAM_TIMER_MODE = 10
HVM_PARAM_HPET_ENABLED = 11
+HVM_PARAM_ACPI_S_STATE = 14
restart_modes = [
"restart",
@@ -102,11 +103,13 @@ TRIGGER_NMI = 0
TRIGGER_NMI = 0
TRIGGER_RESET = 1
TRIGGER_INIT = 2
+TRIGGER_S3RESUME = 3
TRIGGER_TYPE = {
"nmi" : TRIGGER_NMI,
"reset" : TRIGGER_RESET,
- "init" : TRIGGER_INIT
+ "init" : TRIGGER_INIT,
+ "s3resume": TRIGGER_S3RESUME
}
#
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Tue May 20 18:54:09 2008 +0900
+++ b/tools/python/xen/xend/XendDomain.py Thu May 22 19:42:51 2008 +0900
@@ -1282,6 +1282,10 @@ class XendDomain:
if dominfo.getDomid() == DOM0_ID:
raise XendError("Cannot migrate privileged domain %s" % domid)
+ if dominfo._stateGet() != DOM_STATE_RUNNING:
+ raise VMBadState("Domain is not running",
+ POWER_STATE_NAMES[DOM_STATE_RUNNING],
+ POWER_STATE_NAMES[dominfo._stateGet()])
""" The following call may raise a XendError exception """
dominfo.testMigrateDevices(True, dst)
@@ -1653,6 +1657,9 @@ class XendDomain:
trigger = TRIGGER_TYPE[trigger_name.lower()]
else:
raise XendError("Invalid trigger: %s" % trigger_name)
+ if trigger == TRIGGER_S3RESUME:
+ xc.hvm_set_param(dominfo.getDomid(), HVM_PARAM_ACPI_S_STATE, 0)
+ return None
try:
return xc.domain_send_trigger(dominfo.getDomid(),
trigger,
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/python/xen/xend/xenstore/xswatch.py
--- a/tools/python/xen/xend/xenstore/xswatch.py Tue May 20 18:54:09 2008 +0900
+++ b/tools/python/xen/xend/xenstore/xswatch.py Thu May 22 19:42:51 2008 +0900
@@ -8,8 +8,6 @@ import errno
import errno
import threading
from xen.xend.xenstore.xsutil import xshandle
-
-from xen.xend.XendLogging import log
class xswatch:
@@ -76,7 +74,7 @@ def watchMain():
else:
raise
except:
- log.exception("read_watch failed")
+ pass
# Ignore this exception -- there's no point throwing it
# further on because that will just kill the watcher thread,
# which achieves nothing.
diff -r f04ce41dab84 -r 74d0f17f3fa5 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Tue May 20 18:54:09 2008 +0900
+++ b/tools/python/xen/xm/main.py Thu May 22 19:42:51 2008 +0900
@@ -143,7 +143,7 @@ SUBCOMMAND_HELP = {
'Get/set credit scheduler parameters.'),
'sysrq' : ('<Domain> <letter>', 'Send a sysrq to a domain.'),
'debug-keys' : ('<Keys>', 'Send debug keys to Xen.'),
- 'trigger' : ('<Domain> <nmi|reset|init> [<VCPU>]',
+ 'trigger' : ('<Domain> <nmi|reset|init|s3resume> [<VCPU>]',
'Send a trigger to a domain.'),
'vcpu-list' : ('[Domain, ...]',
'List the VCPUs for all/some domains.'),
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/ia64/xen/domain.c Thu May 22 19:42:51 2008 +0900
@@ -644,10 +644,9 @@ void arch_domain_destroy(struct domain *
deallocate_rid_range(d);
}
-int arch_vcpu_reset(struct vcpu *v)
+void arch_vcpu_reset(struct vcpu *v)
{
/* FIXME: Stub for now */
- return 0;
}
/* Here it is assumed that all of the CPUs has same RSE.N_STACKED_PHYS */
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/Makefile
--- a/xen/arch/x86/Makefile Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/Makefile Thu May 22 19:42:51 2008 +0900
@@ -50,6 +50,7 @@ obj-y += machine_kexec.o
obj-y += machine_kexec.o
obj-y += crash.o
obj-y += tboot.o
+obj-y += hpet.o
obj-$(crash_debug) += gdbstub.o
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/acpi/cpu_idle.c
--- a/xen/arch/x86/acpi/cpu_idle.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/acpi/cpu_idle.c Thu May 22 19:42:51 2008 +0900
@@ -37,12 +37,14 @@
#include <xen/types.h>
#include <xen/acpi.h>
#include <xen/smp.h>
+#include <xen/guest_access.h>
+#include <xen/keyhandler.h>
#include <asm/cache.h>
#include <asm/io.h>
-#include <xen/guest_access.h>
+#include <asm/hpet.h>
+#include <asm/processor.h>
#include <public/platform.h>
-#include <asm/processor.h>
-#include <xen/keyhandler.h>
+#include <public/sysctl.h>
#define DEBUG_PM_CX
@@ -127,45 +129,29 @@ static void print_acpi_power(uint32_t cp
{
uint32_t i;
- printk("saved cpu%d cx acpi info:\n", cpu);
- printk("\tcurrent state is C%d\n", (power->state)?power->state->type:-1);
- printk("\tbm_check_timestamp = %"PRId64"\n", power->bm_check_timestamp);
- printk("\tdefault_state = %d\n", power->default_state);
- printk("\tbm_activity = 0x%08x\n", power->bm_activity);
- printk("\tcount = %d\n", power->count);
+ printk("==cpu%d==\n", cpu);
+ printk("active state:\t\tC%d\n", (power->state)?power->state->type:-1);
+ printk("max_cstate:\t\tC%d\n", max_cstate);
+ printk("bus master activity:\t%08x\n", power->bm_activity);
+ printk("states:\n");
- for ( i = 0; i < power->count; i++ )
- {
- printk("\tstates[%d]:\n", i);
- printk("\t\tvalid = %d\n", power->states[i].valid);
- printk("\t\ttype = %d\n", power->states[i].type);
- printk("\t\taddress = 0x%x\n", power->states[i].address);
- printk("\t\tspace_id = 0x%x\n", power->states[i].space_id);
- printk("\t\tlatency = %d\n", power->states[i].latency);
- printk("\t\tpower = %d\n", power->states[i].power);
- printk("\t\tlatency_ticks = %d\n", power->states[i].latency_ticks);
- printk("\t\tusage = %d\n", power->states[i].usage);
- printk("\t\ttime = %"PRId64"\n", power->states[i].time);
-
- printk("\t\tpromotion policy:\n");
- printk("\t\t\tcount = %d\n", power->states[i].promotion.count);
- printk("\t\t\tstate = C%d\n",
- (power->states[i].promotion.state) ?
- power->states[i].promotion.state->type : -1);
- printk("\t\t\tthreshold.time = %d\n",
power->states[i].promotion.threshold.time);
- printk("\t\t\tthreshold.ticks = %d\n",
power->states[i].promotion.threshold.ticks);
- printk("\t\t\tthreshold.count = %d\n",
power->states[i].promotion.threshold.count);
- printk("\t\t\tthreshold.bm = %d\n",
power->states[i].promotion.threshold.bm);
-
- printk("\t\tdemotion policy:\n");
- printk("\t\t\tcount = %d\n", power->states[i].demotion.count);
- printk("\t\t\tstate = C%d\n",
- (power->states[i].demotion.state) ?
- power->states[i].demotion.state->type : -1);
- printk("\t\t\tthreshold.time = %d\n",
power->states[i].demotion.threshold.time);
- printk("\t\t\tthreshold.ticks = %d\n",
power->states[i].demotion.threshold.ticks);
- printk("\t\t\tthreshold.count = %d\n",
power->states[i].demotion.threshold.count);
- printk("\t\t\tthreshold.bm = %d\n",
power->states[i].demotion.threshold.bm);
+ for ( i = 1; i < power->count; i++ )
+ {
+ printk((power->states[i].type == power->state->type) ? " *" : "
");
+ printk("C%d:\t\t", i);
+ printk("type[C%d] ", power->states[i].type);
+ if ( power->states[i].promotion.state )
+ printk("promotion[C%d] ", power->states[i].promotion.state->type);
+ else
+ printk("promotion[--] ");
+ if ( power->states[i].demotion.state )
+ printk("demotion[C%d] ", power->states[i].demotion.state->type);
+ else
+ printk("demotion[--] ");
+ printk("latency[%03d]\n ", power->states[i].latency);
+ printk("\t\t\t");
+ printk("usage[%08d] ", power->states[i].usage);
+ printk("duration[%"PRId64"]\n", power->states[i].time);
}
}
@@ -438,19 +424,19 @@ static void acpi_processor_idle(void)
t1 = inl(pmtmr_ioport);
/*
- * FIXME: Before invoking C3, be aware that TSC/APIC timer may be
+ * Before invoking C3, be aware that TSC/APIC timer may be
* stopped by H/W. Without carefully handling of TSC/APIC stop issues,
* deep C state can't work correctly.
*/
/* preparing TSC stop */
cstate_save_tsc();
- /* placeholder for preparing APIC stop */
-
+ /* preparing APIC stop */
+ hpet_broadcast_enter();
/* Invoke C3 */
acpi_idle_do_entry(cx);
- /* placeholder for recovering APIC */
-
+ /* recovering APIC */
+ hpet_broadcast_exit();
/* recovering TSC */
cstate_restore_tsc();
@@ -955,3 +941,41 @@ long set_cx_pminfo(uint32_t cpu, struct
return 0;
}
+
+uint32_t pmstat_get_cx_nr(uint32_t cpuid)
+{
+ return processor_powers[cpuid].count;
+}
+
+int pmstat_get_cx_stat(uint32_t cpuid, struct pm_cx_stat *stat)
+{
+ struct acpi_processor_power *power = &processor_powers[cpuid];
+ struct vcpu *v = idle_vcpu[cpuid];
+ uint64_t usage;
+ int i;
+
+ stat->last = (power->state) ? power->state->type : 0;
+ stat->nr = processor_powers[cpuid].count;
+ stat->idle_time = v->runstate.time[RUNSTATE_running];
+ if ( v->is_running )
+ stat->idle_time += NOW() - v->runstate.state_entry_time;
+
+ for ( i = 0; i < power->count; i++ )
+ {
+ usage = power->states[i].usage;
+ if ( copy_to_guest_offset(stat->triggers, i, &usage, 1) )
+ return -EFAULT;
+ }
+ for ( i = 0; i < power->count; i++ )
+ if ( copy_to_guest_offset(stat->residencies, i,
+ &power->states[i].time, 1) )
+ return -EFAULT;
+
+ return 0;
+}
+
+int pmstat_reset_cx_stat(uint32_t cpuid)
+{
+ return 0;
+}
+
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/acpi/pmstat.c
--- a/xen/arch/x86/acpi/pmstat.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/acpi/pmstat.c Thu May 22 19:42:51 2008 +0900
@@ -42,6 +42,10 @@
struct pm_px px_statistic_data[NR_CPUS];
+extern uint32_t pmstat_get_cx_nr(uint32_t cpuid);
+extern int pmstat_get_cx_stat(uint32_t cpuid, struct pm_cx_stat *stat);
+extern int pmstat_reset_cx_stat(uint32_t cpuid);
+
int do_get_pm_info(struct xen_sysctl_get_pmstat *op)
{
int ret = 0;
@@ -50,7 +54,7 @@ int do_get_pm_info(struct xen_sysctl_get
/* to protect the case when Px was controlled by dom0-kernel */
/* or when CPU_FREQ not set in which case ACPI Px objects not parsed */
- if ( !pmpt->perf.init )
+ if ( !pmpt->perf.init && (op->type & PMSTAT_CATEGORY_MASK) == PMSTAT_PX )
return -EINVAL;
if ( !cpu_online(op->cpuid) )
@@ -100,6 +104,25 @@ int do_get_pm_info(struct xen_sysctl_get
break;
}
+ case PMSTAT_get_max_cx:
+ {
+ op->u.getcx.nr = pmstat_get_cx_nr(op->cpuid);
+ ret = 0;
+ break;
+ }
+
+ case PMSTAT_get_cxstat:
+ {
+ ret = pmstat_get_cx_stat(op->cpuid, &op->u.getcx);
+ break;
+ }
+
+ case PMSTAT_reset_cxstat:
+ {
+ ret = pmstat_reset_cx_stat(op->cpuid);
+ break;
+ }
+
default:
printk("not defined sub-hypercall @ do_get_pm_info\n");
ret = -ENOSYS;
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/domain.c Thu May 22 19:42:51 2008 +0900
@@ -823,11 +823,10 @@ int arch_set_info_guest(
#undef c
}
-int arch_vcpu_reset(struct vcpu *v)
+void arch_vcpu_reset(struct vcpu *v)
{
destroy_gdt(v);
vcpu_destroy_pagetables(v);
- return 0;
}
/*
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/domain_build.c Thu May 22 19:42:51 2008 +0900
@@ -221,9 +221,7 @@ int __init construct_dom0(
#if CONFIG_PAGING_LEVELS >= 4
l4_pgentry_t *l4tab = NULL, *l4start = NULL;
#endif
-#if CONFIG_PAGING_LEVELS >= 3
l3_pgentry_t *l3tab = NULL, *l3start = NULL;
-#endif
l2_pgentry_t *l2tab = NULL, *l2start = NULL;
l1_pgentry_t *l1tab = NULL, *l1start = NULL;
@@ -277,13 +275,6 @@ int __init construct_dom0(
compat32 = 0;
machine = elf_uval(&elf, elf.ehdr, e_machine);
switch (CONFIG_PAGING_LEVELS) {
- case 2: /* x86_32 */
- if (parms.pae == PAEKERN_bimodal)
- parms.pae = PAEKERN_no;
- printk(" Xen kernel: 32-bit, lsb\n");
- if (elf_32bit(&elf) && !parms.pae && machine == EM_386)
- compatible = 1;
- break;
case 3: /* x86_32p */
if (parms.pae == PAEKERN_bimodal)
parms.pae = PAEKERN_extended_cr3;
@@ -479,7 +470,6 @@ int __init construct_dom0(
}
/* WARNING: The new domain must have its 'processor' field filled in! */
-#if CONFIG_PAGING_LEVELS == 3
l3start = l3tab = (l3_pgentry_t *)mpt_alloc; mpt_alloc += PAGE_SIZE;
l2start = l2tab = (l2_pgentry_t *)mpt_alloc; mpt_alloc += 4*PAGE_SIZE;
memcpy(l2tab, idle_pg_table_l2, 4*PAGE_SIZE);
@@ -489,13 +479,6 @@ int __init construct_dom0(
l2e_from_paddr((u32)l2tab + i*PAGE_SIZE, __PAGE_HYPERVISOR);
}
v->arch.guest_table = pagetable_from_paddr((unsigned long)l3start);
-#else
- l2start = l2tab = (l2_pgentry_t *)mpt_alloc; mpt_alloc += PAGE_SIZE;
- copy_page(l2tab, idle_pg_table);
- l2tab[LINEAR_PT_VIRT_START >> L2_PAGETABLE_SHIFT] =
- l2e_from_paddr((unsigned long)l2start, __PAGE_HYPERVISOR);
- v->arch.guest_table = pagetable_from_paddr((unsigned long)l2start);
-#endif
for ( i = 0; i < PDPT_L2_ENTRIES; i++ )
l2tab[l2_linear_offset(PERDOMAIN_VIRT_START) + i] =
@@ -539,16 +522,16 @@ int __init construct_dom0(
if ( !get_page_type(page, PGT_writable_page) )
BUG();
-#if CONFIG_PAGING_LEVELS == 3
- switch (count) {
+ switch ( count )
+ {
case 0:
page->u.inuse.type_info &= ~PGT_type_mask;
page->u.inuse.type_info |= PGT_l3_page_table;
get_page(page, d); /* an extra ref because of readable mapping */
/* Get another ref to L3 page so that it can be pinned. */
- if ( !get_page_and_type(page, d, PGT_l3_page_table) )
- BUG();
+ page->u.inuse.type_info++;
+ page->count_info++;
set_bit(_PGT_pinned, &page->u.inuse.type_info);
break;
case 1 ... 4:
@@ -564,38 +547,6 @@ int __init construct_dom0(
get_page(page, d); /* an extra ref because of readable mapping */
break;
}
-#else
- if ( count == 0 )
- {
- page->u.inuse.type_info &= ~PGT_type_mask;
- page->u.inuse.type_info |= PGT_l2_page_table;
-
- /*
- * No longer writable: decrement the type_count.
- * Installed as CR3: increment both the ref_count and type_count.
- * Net: just increment the ref_count.
- */
- get_page(page, d); /* an extra ref because of readable mapping */
-
- /* Get another ref to L2 page so that it can be pinned. */
- if ( !get_page_and_type(page, d, PGT_l2_page_table) )
- BUG();
- set_bit(_PGT_pinned, &page->u.inuse.type_info);
- }
- else
- {
- page->u.inuse.type_info &= ~PGT_type_mask;
- page->u.inuse.type_info |= PGT_l1_page_table;
-
- /*
- * No longer writable: decrement the type_count.
- * This is an L1 page, installed in a validated L2 page:
- * increment both the ref_count and type_count.
- * Net: just increment the ref_count.
- */
- get_page(page, d); /* an extra ref because of readable mapping */
- }
-#endif
if ( !((unsigned long)++l1tab & (PAGE_SIZE - 1)) )
l1start = l1tab = (l1_pgentry_t *)(u32)l2e_get_paddr(*++l2tab);
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hpet.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/x86/hpet.c Thu May 22 19:42:51 2008 +0900
@@ -0,0 +1,291 @@
+/******************************************************************************
+ * arch/x86/hpet.c
+ *
+ * HPET management.
+ */
+
+#include <xen/config.h>
+#include <xen/errno.h>
+#include <xen/time.h>
+#include <xen/timer.h>
+#include <xen/smp.h>
+#include <xen/softirq.h>
+#include <asm/fixmap.h>
+#include <asm/div64.h>
+#include <asm/hpet.h>
+
+#define STIME_MAX ((s_time_t)((uint64_t)~0ull>>1))
+
+#define MAX_DELTA_NS MILLISECS(10*1000)
+#define MIN_DELTA_NS MICROSECS(1)
+
+struct hpet_event_channel
+{
+ unsigned long mult;
+ int shift;
+ s_time_t next_event;
+ cpumask_t cpumask;
+ spinlock_t lock;
+ void (*event_handler)(struct hpet_event_channel *);
+};
+static struct hpet_event_channel hpet_event;
+
+unsigned long hpet_address;
+
+/*
+ * Calculate a multiplication factor for scaled math, which is used to convert
+ * nanoseconds based values to clock ticks:
+ *
+ * clock_ticks = (nanoseconds * factor) >> shift.
+ *
+ * div_sc is the rearranged equation to calculate a factor from a given clock
+ * ticks / nanoseconds ratio:
+ *
+ * factor = (clock_ticks << shift) / nanoseconds
+ */
+static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec,
+ int shift)
+{
+ uint64_t tmp = ((uint64_t)ticks) << shift;
+
+ do_div(tmp, nsec);
+ return (unsigned long) tmp;
+}
+
+/*
+ * Convert nanoseconds based values to clock ticks:
+ *
+ * clock_ticks = (nanoseconds * factor) >> shift.
+ */
+static inline unsigned long ns2ticks(unsigned long nsec, int shift,
+ unsigned long factor)
+{
+ uint64_t tmp = ((uint64_t)nsec * factor) >> shift;
+
+ return (unsigned long) tmp;
+}
+
+static int hpet_legacy_next_event(unsigned long delta)
+{
+ unsigned long cnt;
+
+ cnt = hpet_read32(HPET_COUNTER);
+ cnt += delta;
+ hpet_write32(cnt, HPET_T0_CMP);
+
+ return ((long)(hpet_read32(HPET_COUNTER) - cnt) > 0) ? -ETIME : 0;
+}
+
+static int reprogram_hpet_evt_channel(
+ struct hpet_event_channel *ch,
+ s_time_t expire, s_time_t now, int force)
+{
+ int64_t delta;
+ int ret;
+
+ if ( unlikely(expire < 0) )
+ {
+ printk(KERN_DEBUG "reprogram: expire < 0\n");
+ return -ETIME;
+ }
+
+ delta = expire - now;
+ if ( delta <= 0 )
+ {
+ printk(KERN_DEBUG "reprogram: expire(%"PRIx64") < "
+ "now(%"PRIx64")\n", expire, now);
+ if ( !force )
+ return -ETIME;
+ }
+
+ ch->next_event = expire;
+
+ delta = min_t(int64_t, delta, MAX_DELTA_NS);
+ delta = max_t(int64_t, delta, MIN_DELTA_NS);
+ delta = ns2ticks(delta, ch->shift, ch->mult);
+
+ ret = hpet_legacy_next_event(delta);
+ while ( ret && force )
+ {
+ delta += delta;
+ ret = hpet_legacy_next_event(delta);
+ }
+
+ return ret;
+}
+
+static int evt_do_broadcast(cpumask_t mask)
+{
+ int ret = 0, cpu = smp_processor_id();
+
+ if ( cpu_isset(cpu, mask) )
+ {
+ cpu_clear(cpu, mask);
+ raise_softirq(TIMER_SOFTIRQ);
+ ret = 1;
+ }
+
+ if ( !cpus_empty(mask) )
+ {
+ cpumask_raise_softirq(mask, TIMER_SOFTIRQ);
+ ret = 1;
+ }
+ return ret;
+}
+
+static void handle_hpet_broadcast(struct hpet_event_channel *ch)
+{
+ cpumask_t mask;
+ s_time_t now, next_event;
+ int cpu, current_cpu = smp_processor_id();
+
+ spin_lock(&ch->lock);
+
+ if ( cpu_isset(current_cpu, ch->cpumask) )
+ printk(KERN_DEBUG "WARNING: current cpu%d in bc_mask\n", current_cpu);
+again:
+ ch->next_event = STIME_MAX;
+ next_event = STIME_MAX;
+ mask = (cpumask_t)CPU_MASK_NONE;
+ now = NOW();
+
+ /* find all expired events */
+ for_each_cpu_mask(cpu, ch->cpumask)
+ {
+ if ( per_cpu(timer_deadline, cpu) <= now )
+ cpu_set(cpu, mask);
+ else if ( per_cpu(timer_deadline, cpu) < next_event )
+ next_event = per_cpu(timer_deadline, cpu);
+ }
+ if ( per_cpu(timer_deadline, current_cpu) <= now )
+ cpu_set(current_cpu, mask);
+
+ /* wakeup the cpus which have an expired event. */
+ evt_do_broadcast(mask);
+
+ if ( next_event != STIME_MAX )
+ {
+ if ( reprogram_hpet_evt_channel(ch, next_event, now, 0) )
+ goto again;
+ }
+ spin_unlock(&ch->lock);
+}
+
+void hpet_broadcast_init(void)
+{
+ u64 hpet_rate;
+ u32 hpet_id, cfg;
+
+ hpet_rate = hpet_setup();
+ if ( hpet_rate == 0 )
+ return;
+
+ hpet_id = hpet_read32(HPET_ID);
+ if ( !(hpet_id & HPET_ID_LEGSUP) )
+ return;
+
+ /* Start HPET legacy interrupts */
+ cfg = hpet_read32(HPET_CFG);
+ cfg |= HPET_CFG_LEGACY;
+ hpet_write32(cfg, HPET_CFG);
+
+ /* set HPET T0 as oneshot */
+ cfg = hpet_read32(HPET_T0_CFG);
+ cfg &= ~HPET_TN_PERIODIC;
+ cfg |= HPET_TN_ENABLE | HPET_TN_32BIT;
+ hpet_write32(cfg, HPET_T0_CFG);
+
+ /*
+ * The period is a femto seconds value. We need to calculate the scaled
+ * math multiplication factor for nanosecond to hpet tick conversion.
+ */
+ hpet_event.mult = div_sc((unsigned long)hpet_rate, 1000000000ul, 32);
+ hpet_event.shift = 32;
+ hpet_event.next_event = STIME_MAX;
+ hpet_event.event_handler = handle_hpet_broadcast;
+ spin_lock_init(&hpet_event.lock);
+}
+
+void hpet_broadcast_enter(void)
+{
+ struct hpet_event_channel *ch = &hpet_event;
+
+ cpu_set(smp_processor_id(), ch->cpumask);
+
+ spin_lock(&ch->lock);
+
+ /* reprogram if current cpu expire time is nearer */
+ if ( this_cpu(timer_deadline) < ch->next_event )
+ reprogram_hpet_evt_channel(ch, this_cpu(timer_deadline), NOW(), 1);
+
+ spin_unlock(&ch->lock);
+}
+
+void hpet_broadcast_exit(void)
+{
+ struct hpet_event_channel *ch = &hpet_event;
+ int cpu = smp_processor_id();
+
+ if ( cpu_test_and_clear(cpu, ch->cpumask) )
+ reprogram_timer(per_cpu(timer_deadline, cpu));
+}
+
+int hpet_legacy_irq_tick(void)
+{
+ if ( !hpet_event.event_handler )
+ return 0;
+ hpet_event.event_handler(&hpet_event);
+ return 1;
+}
+
+u64 hpet_setup(void)
+{
+ static u64 hpet_rate;
+ static int initialised;
+ u32 hpet_id, hpet_period, cfg;
+ int i;
+
+ if ( initialised )
+ return hpet_rate;
+ initialised = 1;
+
+ if ( hpet_address == 0 )
+ return 0;
+
+ set_fixmap_nocache(FIX_HPET_BASE, hpet_address);
+
+ hpet_id = hpet_read32(HPET_ID);
+ if ( hpet_id == 0 )
+ {
+ printk("BAD HPET vendor id.\n");
+ return 0;
+ }
+
+ /* Check for sane period (100ps <= period <= 100ns). */
+ hpet_period = hpet_read32(HPET_PERIOD);
+ if ( (hpet_period > 100000000) || (hpet_period < 100000) )
+ {
+ printk("BAD HPET period %u.\n", hpet_period);
+ return 0;
+ }
+
+ cfg = hpet_read32(HPET_CFG);
+ cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY);
+ hpet_write32(cfg, HPET_CFG);
+
+ for ( i = 0; i <= ((hpet_id >> 8) & 31); i++ )
+ {
+ cfg = hpet_read32(HPET_T0_CFG + i*0x20);
+ cfg &= ~HPET_TN_ENABLE;
+ hpet_write32(cfg & ~HPET_TN_ENABLE, HPET_T0_CFG);
+ }
+
+ cfg = hpet_read32(HPET_CFG);
+ cfg |= HPET_CFG_ENABLE;
+ hpet_write32(cfg, HPET_CFG);
+
+ hpet_rate = 1000000000000000ULL; /* 10^15 */
+ (void)do_div(hpet_rate, hpet_period);
+
+ return hpet_rate;
+}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/hpet.c
--- a/xen/arch/x86/hvm/hpet.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/hpet.c Thu May 22 19:42:51 2008 +0900
@@ -591,3 +591,8 @@ void hpet_deinit(struct domain *d)
kill_timer(&h->timers[i]);
}
+void hpet_reset(struct domain *d)
+{
+ hpet_deinit(d);
+ hpet_init(d->vcpu[0]);
+}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/hvm.c Thu May 22 19:42:51 2008 +0900
@@ -2058,6 +2058,118 @@ static int hvmop_set_pci_intx_level(
return rc;
}
+void hvm_vcpu_reset_state(struct vcpu *v, uint16_t cs, uint16_t ip)
+{
+ struct domain *d = current->domain;
+ struct vcpu_guest_context *ctxt;
+ struct segment_register reg;
+
+ BUG_ON(vcpu_runnable(v));
+
+ domain_lock(d);
+
+ if ( v->is_initialised )
+ goto out;
+
+ ctxt = &v->arch.guest_context;
+ memset(ctxt, 0, sizeof(*ctxt));
+ ctxt->flags = VGCF_online;
+ ctxt->user_regs.eflags = 2;
+ ctxt->user_regs.edx = 0x00000f00;
+ ctxt->user_regs.eip = ip;
+
+ v->arch.hvm_vcpu.guest_cr[0] = X86_CR0_ET;
+ hvm_update_guest_cr(v, 0);
+
+ v->arch.hvm_vcpu.guest_cr[2] = 0;
+ hvm_update_guest_cr(v, 2);
+
+ v->arch.hvm_vcpu.guest_cr[3] = 0;
+ hvm_update_guest_cr(v, 3);
+
+ v->arch.hvm_vcpu.guest_cr[4] = 0;
+ hvm_update_guest_cr(v, 4);
+
+ v->arch.hvm_vcpu.guest_efer = 0;
+ hvm_update_guest_efer(v);
+
+ reg.sel = cs;
+ reg.base = (uint32_t)reg.sel << 4;
+ reg.limit = 0xffff;
+ reg.attr.bytes = 0x09b;
+ hvm_set_segment_register(v, x86_seg_cs, ®);
+
+ reg.sel = reg.base = 0;
+ reg.limit = 0xffff;
+ reg.attr.bytes = 0x093;
+ hvm_set_segment_register(v, x86_seg_ds, ®);
+ hvm_set_segment_register(v, x86_seg_es, ®);
+ hvm_set_segment_register(v, x86_seg_fs, ®);
+ hvm_set_segment_register(v, x86_seg_gs, ®);
+ hvm_set_segment_register(v, x86_seg_ss, ®);
+
+ reg.attr.bytes = 0x82; /* LDT */
+ hvm_set_segment_register(v, x86_seg_ldtr, ®);
+
+ reg.attr.bytes = 0x8b; /* 32-bit TSS (busy) */
+ hvm_set_segment_register(v, x86_seg_tr, ®);
+
+ reg.attr.bytes = 0;
+ hvm_set_segment_register(v, x86_seg_gdtr, ®);
+ hvm_set_segment_register(v, x86_seg_idtr, ®);
+
+ /* Sync AP's TSC with BSP's. */
+ v->arch.hvm_vcpu.cache_tsc_offset =
+ v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
+ hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
+
+ v->arch.flags |= TF_kernel_mode;
+ v->is_initialised = 1;
+ clear_bit(_VPF_down, &v->pause_flags);
+
+ out:
+ domain_unlock(d);
+}
+
+static void hvm_s3_suspend(struct domain *d)
+{
+ struct vcpu *v;
+
+ domain_pause(d);
+ domain_lock(d);
+
+ if ( (d->vcpu[0] == NULL) ||
+ test_and_set_bool(d->arch.hvm_domain.is_s3_suspended) )
+ {
+ domain_unlock(d);
+ domain_unpause(d);
+ return;
+ }
+
+ for_each_vcpu ( d, v )
+ {
+ vlapic_reset(vcpu_vlapic(v));
+ vcpu_reset(v);
+ }
+
+ vpic_reset(d);
+ vioapic_reset(d);
+ pit_reset(d);
+ rtc_reset(d);
+ pmtimer_reset(d);
+ hpet_reset(d);
+
+ hvm_vcpu_reset_state(d->vcpu[0], 0xf000, 0xfff0);
+
+ domain_unlock(d);
+}
+
+static void hvm_s3_resume(struct domain *d)
+{
+ if ( test_and_clear_bool(d->arch.hvm_domain.is_s3_suspended) )
+ domain_unpause(d);
+}
+
static int hvmop_set_isa_irq_level(
XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t) uop)
{
@@ -2314,6 +2426,21 @@ long do_hvm_op(unsigned long op, XEN_GUE
}
domain_unpause(d);
break;
+ case HVM_PARAM_ACPI_S_STATE:
+ /* Privileged domains only, as we must domain_pause(d). */
+ rc = -EPERM;
+ if ( !IS_PRIV_FOR(current->domain, d) )
+ break;
+
+ rc = 0;
+ if ( a.value == 3 )
+ hvm_s3_suspend(d);
+ else if ( a.value == 0 )
+ hvm_s3_resume(d);
+ else
+ rc = -EINVAL;
+
+ break;
}
if ( rc == 0 )
@@ -2321,7 +2448,15 @@ long do_hvm_op(unsigned long op, XEN_GUE
}
else
{
- a.value = d->arch.hvm_domain.params[a.index];
+ switch ( a.index )
+ {
+ case HVM_PARAM_ACPI_S_STATE:
+ a.value = d->arch.hvm_domain.is_s3_suspended ? 3 : 0;
+ break;
+ default:
+ a.value = d->arch.hvm_domain.params[a.index];
+ break;
+ }
rc = copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/i8254.c
--- a/xen/arch/x86/hvm/i8254.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/i8254.c Thu May 22 19:42:51 2008 +0900
@@ -446,22 +446,16 @@ static int pit_load(struct domain *d, hv
HVM_REGISTER_SAVE_RESTORE(PIT, pit_save, pit_load, 1, HVMSR_PER_DOM);
-void pit_init(struct vcpu *v, unsigned long cpu_khz)
-{
- PITState *pit = vcpu_vpit(v);
+void pit_reset(struct domain *d)
+{
+ PITState *pit = domain_vpit(d);
struct hvm_hw_pit_channel *s;
int i;
- spin_lock_init(&pit->lock);
-
- /* Some sub-functions assert that they are called with the lock held. */
- spin_lock(&pit->lock);
-
+ destroy_periodic_time(&pit->pt0);
pit->pt0.source = PTSRC_isa;
- register_portio_handler(v->domain, PIT_BASE, 4, handle_pit_io);
- register_portio_handler(v->domain, 0x61, 1, handle_speaker_io);
- ticks_per_sec(v) = cpu_khz * (int64_t)1000;
+ spin_lock(&pit->lock);
for ( i = 0; i < 3; i++ )
{
@@ -472,6 +466,20 @@ void pit_init(struct vcpu *v, unsigned l
}
spin_unlock(&pit->lock);
+}
+
+void pit_init(struct vcpu *v, unsigned long cpu_khz)
+{
+ PITState *pit = vcpu_vpit(v);
+
+ spin_lock_init(&pit->lock);
+
+ register_portio_handler(v->domain, PIT_BASE, 4, handle_pit_io);
+ register_portio_handler(v->domain, 0x61, 1, handle_speaker_io);
+
+ ticks_per_sec(v) = cpu_khz * (int64_t)1000;
+
+ pit_reset(v->domain);
}
void pit_deinit(struct domain *d)
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/pmtimer.c
--- a/xen/arch/x86/hvm/pmtimer.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/pmtimer.c Thu May 22 19:42:51 2008 +0900
@@ -276,3 +276,9 @@ void pmtimer_deinit(struct domain *d)
PMTState *s = &d->arch.hvm_domain.pl_time.vpmt;
kill_timer(&s->timer);
}
+
+void pmtimer_reset(struct domain *d)
+{
+ /* Reset the counter. */
+ d->arch.hvm_domain.pl_time.vpmt.pm.tmr_val = 0;
+}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/rtc.c
--- a/xen/arch/x86/hvm/rtc.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/rtc.c Thu May 22 19:42:51 2008 +0900
@@ -511,3 +511,9 @@ void rtc_deinit(struct domain *d)
kill_timer(&s->second_timer);
kill_timer(&s->second_timer2);
}
+
+void rtc_reset(struct domain *d)
+{
+ RTCState *s = domain_vrtc(d);
+ destroy_periodic_time(&s->pt);
+}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/vioapic.c
--- a/xen/arch/x86/hvm/vioapic.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/vioapic.c Thu May 22 19:42:51 2008 +0900
@@ -494,21 +494,25 @@ static int ioapic_load(struct domain *d,
HVM_REGISTER_SAVE_RESTORE(IOAPIC, ioapic_save, ioapic_load, 1, HVMSR_PER_DOM);
-int vioapic_init(struct domain *d)
-{
- struct hvm_vioapic *vioapic;
+void vioapic_reset(struct domain *d)
+{
+ struct hvm_vioapic *vioapic = d->arch.hvm_domain.vioapic;
int i;
-
- vioapic = d->arch.hvm_domain.vioapic = xmalloc(struct hvm_vioapic);
- if ( vioapic == NULL )
- return -ENOMEM;
-
- vioapic->domain = d;
memset(&vioapic->hvm_hw_vioapic, 0, sizeof(vioapic->hvm_hw_vioapic));
for ( i = 0; i < VIOAPIC_NUM_PINS; i++ )
vioapic->hvm_hw_vioapic.redirtbl[i].fields.mask = 1;
vioapic->hvm_hw_vioapic.base_address = VIOAPIC_DEFAULT_BASE_ADDRESS;
+}
+
+int vioapic_init(struct domain *d)
+{
+ if ( (d->arch.hvm_domain.vioapic == NULL) &&
+ ((d->arch.hvm_domain.vioapic = xmalloc(struct hvm_vioapic)) == NULL) )
+ return -ENOMEM;
+
+ d->arch.hvm_domain.vioapic->domain = d;
+ vioapic_reset(d);
return 0;
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/vlapic.c
--- a/xen/arch/x86/hvm/vlapic.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/vlapic.c Thu May 22 19:42:51 2008 +0900
@@ -298,10 +298,6 @@ static int vlapic_accept_init(struct vcp
static int vlapic_accept_sipi(struct vcpu *v, int trampoline_vector)
{
- struct domain *d = current->domain;
- struct vcpu_guest_context *ctxt;
- struct segment_register reg;
-
/* If the VCPU is not on its way down we have nothing to do. */
if ( !test_bit(_VPF_down, &v->pause_flags) )
return X86EMUL_OKAY;
@@ -309,68 +305,10 @@ static int vlapic_accept_sipi(struct vcp
if ( !vlapic_vcpu_pause_async(v) )
return X86EMUL_RETRY;
- domain_lock(d);
-
- if ( v->is_initialised )
- goto out;
-
- ctxt = &v->arch.guest_context;
- memset(ctxt, 0, sizeof(*ctxt));
- ctxt->flags = VGCF_online;
- ctxt->user_regs.eflags = 2;
-
- v->arch.hvm_vcpu.guest_cr[0] = X86_CR0_ET;
- hvm_update_guest_cr(v, 0);
-
- v->arch.hvm_vcpu.guest_cr[2] = 0;
- hvm_update_guest_cr(v, 2);
-
- v->arch.hvm_vcpu.guest_cr[3] = 0;
- hvm_update_guest_cr(v, 3);
-
- v->arch.hvm_vcpu.guest_cr[4] = 0;
- hvm_update_guest_cr(v, 4);
-
- v->arch.hvm_vcpu.guest_efer = 0;
- hvm_update_guest_efer(v);
-
- reg.sel = trampoline_vector << 8;
- reg.base = (uint32_t)reg.sel << 4;
- reg.limit = 0xffff;
- reg.attr.bytes = 0x89b;
- hvm_set_segment_register(v, x86_seg_cs, ®);
-
- reg.sel = reg.base = 0;
- reg.limit = 0xffff;
- reg.attr.bytes = 0x893;
- hvm_set_segment_register(v, x86_seg_ds, ®);
- hvm_set_segment_register(v, x86_seg_es, ®);
- hvm_set_segment_register(v, x86_seg_fs, ®);
- hvm_set_segment_register(v, x86_seg_gs, ®);
- hvm_set_segment_register(v, x86_seg_ss, ®);
-
- reg.attr.bytes = 0x82; /* LDT */
- hvm_set_segment_register(v, x86_seg_ldtr, ®);
-
- reg.attr.bytes = 0x8b; /* 32-bit TSS (busy) */
- hvm_set_segment_register(v, x86_seg_tr, ®);
-
- reg.attr.bytes = 0;
- hvm_set_segment_register(v, x86_seg_gdtr, ®);
- hvm_set_segment_register(v, x86_seg_idtr, ®);
-
- /* Sync AP's TSC with BSP's. */
- v->arch.hvm_vcpu.cache_tsc_offset =
- v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
- hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
-
- v->arch.flags |= TF_kernel_mode;
- v->is_initialised = 1;
- clear_bit(_VPF_down, &v->pause_flags);
-
- out:
- domain_unlock(d);
+ hvm_vcpu_reset_state(v, trampoline_vector << 8, 0);
+
vcpu_unpause(v);
+
return X86EMUL_OKAY;
}
@@ -1028,23 +966,26 @@ int vlapic_init(struct vcpu *v)
if ( boot_cpu_data.x86_vendor == X86_VENDOR_INTEL )
memflags |= MEMF_bits(32);
#endif
-
- vlapic->regs_page = alloc_domheap_page(NULL, memflags);
- if ( vlapic->regs_page == NULL )
- {
- dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n",
- v->domain->domain_id, v->vcpu_id);
- return -ENOMEM;
- }
-
- vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page));
- if ( vlapic->regs == NULL )
- {
- dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n",
- v->domain->domain_id, v->vcpu_id);
- return -ENOMEM;
- }
-
+ if (vlapic->regs_page == NULL)
+ {
+ vlapic->regs_page = alloc_domheap_page(NULL, memflags);
+ if ( vlapic->regs_page == NULL )
+ {
+ dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n",
+ v->domain->domain_id, v->vcpu_id);
+ return -ENOMEM;
+ }
+ }
+ if (vlapic->regs == NULL)
+ {
+ vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page));
+ if ( vlapic->regs == NULL )
+ {
+ dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n",
+ v->domain->domain_id, v->vcpu_id);
+ return -ENOMEM;
+ }
+ }
clear_page(vlapic->regs);
vlapic_reset(vlapic);
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/hvm/vpic.c
--- a/xen/arch/x86/hvm/vpic.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/hvm/vpic.c Thu May 22 19:42:51 2008 +0900
@@ -395,7 +395,7 @@ static int vpic_load(struct domain *d, h
HVM_REGISTER_SAVE_RESTORE(PIC, vpic_save, vpic_load, 2, HVMSR_PER_DOM);
-void vpic_init(struct domain *d)
+void vpic_reset(struct domain *d)
{
struct hvm_hw_vpic *vpic;
@@ -404,13 +404,20 @@ void vpic_init(struct domain *d)
memset(vpic, 0, sizeof(*vpic));
vpic->is_master = 1;
vpic->elcr = 1 << 2;
- register_portio_handler(d, 0x20, 2, vpic_intercept_pic_io);
- register_portio_handler(d, 0x4d0, 1, vpic_intercept_elcr_io);
/* Slave PIC. */
vpic++;
memset(vpic, 0, sizeof(*vpic));
+}
+
+void vpic_init(struct domain *d)
+{
+ vpic_reset(d);
+
+ register_portio_handler(d, 0x20, 2, vpic_intercept_pic_io);
register_portio_handler(d, 0xa0, 2, vpic_intercept_pic_io);
+
+ register_portio_handler(d, 0x4d0, 1, vpic_intercept_elcr_io);
register_portio_handler(d, 0x4d1, 1, vpic_intercept_elcr_io);
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/mm/hap/p2m-ept.c
--- a/xen/arch/x86/mm/hap/p2m-ept.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/mm/hap/p2m-ept.c Thu May 22 19:42:51 2008 +0900
@@ -49,10 +49,35 @@ static void ept_p2m_type_to_flags(ept_en
#define GUEST_TABLE_NORMAL_PAGE 1
#define GUEST_TABLE_SUPER_PAGE 2
+#define GUEST_TABLE_SPLIT_PAGE 3
+
+static int ept_set_middle_entry(struct domain *d, ept_entry_t *ept_entry)
+{
+ struct page_info *pg;
+
+ pg = d->arch.p2m->alloc_page(d);
+ if ( pg == NULL )
+ return 0;
+
+ pg->count_info = 1;
+ pg->u.inuse.type_info = 1 | PGT_validated;
+ list_add_tail(&pg->list, &d->arch.p2m->pages);
+
+ ept_entry->emt = 0;
+ ept_entry->sp_avail = 0;
+ ept_entry->avail1 = 0;
+ ept_entry->mfn = page_to_mfn(pg);
+ ept_entry->rsvd = 0;
+ ept_entry->avail2 = 0;
+ /* last step */
+ ept_entry->r = ept_entry->w = ept_entry->x = 1;
+
+ return 1;
+}
static int ept_next_level(struct domain *d, bool_t read_only,
ept_entry_t **table, unsigned long *gfn_remainder,
- u32 shift)
+ u32 shift, int order)
{
ept_entry_t *ept_entry, *next;
u32 index;
@@ -63,27 +88,11 @@ static int ept_next_level(struct domain
if ( !(ept_entry->epte & 0x7) )
{
- struct page_info *pg;
-
if ( read_only )
return 0;
- pg = d->arch.p2m->alloc_page(d);
- if ( pg == NULL )
+ if ( !ept_set_middle_entry(d, ept_entry) )
return 0;
-
- pg->count_info = 1;
- pg->u.inuse.type_info = 1 | PGT_validated;
- list_add_tail(&pg->list, &d->arch.p2m->pages);
-
- ept_entry->emt = 0;
- ept_entry->sp_avail = 0;
- ept_entry->avail1 = 0;
- ept_entry->mfn = page_to_mfn(pg);
- ept_entry->rsvd = 0;
- ept_entry->avail2 = 0;
- /* last step */
- ept_entry->r = ept_entry->w = ept_entry->x = 1;
}
if ( !ept_entry->sp_avail )
@@ -95,7 +104,12 @@ static int ept_next_level(struct domain
return GUEST_TABLE_NORMAL_PAGE;
}
else
- return GUEST_TABLE_SUPER_PAGE;
+ {
+ if ( order == shift || read_only )
+ return GUEST_TABLE_SUPER_PAGE;
+ else
+ return GUEST_TABLE_SPLIT_PAGE;
+ }
}
static int
@@ -109,7 +123,9 @@ ept_set_entry(struct domain *d, unsigned
int i, rv = 0, ret = 0;
int walk_level = order / EPT_TABLE_ORDER;
- /* Should check if gfn obeys GAW here */
+ /* we only support 4k and 2m pages now */
+
+ BUG_ON(order && order != EPT_TABLE_ORDER);
if ( order != 0 )
if ( (gfn & ((1UL << order) - 1)) )
@@ -122,10 +138,10 @@ ept_set_entry(struct domain *d, unsigned
for ( i = EPT_DEFAULT_GAW; i > walk_level; i-- )
{
ret = ept_next_level(d, 0, &table, &gfn_remainder,
- i * EPT_TABLE_ORDER);
+ i * EPT_TABLE_ORDER, order);
if ( !ret )
goto out;
- else if ( ret == GUEST_TABLE_SUPER_PAGE )
+ else if ( ret != GUEST_TABLE_NORMAL_PAGE )
break;
}
@@ -135,35 +151,87 @@ ept_set_entry(struct domain *d, unsigned
ept_entry = table + index;
- if ( mfn_valid(mfn_x(mfn)) || (p2mt == p2m_mmio_direct) )
- {
- /* Track the highest gfn for which we have ever had a valid mapping */
- if ( gfn > d->arch.p2m->max_mapped_pfn )
- d->arch.p2m->max_mapped_pfn = gfn;
-
- ept_entry->emt = EPT_DEFAULT_MT;
- ept_entry->sp_avail = walk_level ? 1 : 0;
-
- if ( ret == GUEST_TABLE_SUPER_PAGE )
- {
- ept_entry->mfn = mfn_x(mfn) - offset;
- if ( ept_entry->avail1 == p2m_ram_logdirty &&
- p2mt == p2m_ram_rw )
- for ( i = 0; i < 512; i++ )
- paging_mark_dirty(d, mfn_x(mfn)-offset+i);
+ if ( ret != GUEST_TABLE_SPLIT_PAGE )
+ {
+ if ( mfn_valid(mfn_x(mfn)) || (p2mt == p2m_mmio_direct) )
+ {
+ /* Track the highest gfn for which we have ever had a valid
mapping */
+ if ( gfn > d->arch.p2m->max_mapped_pfn )
+ d->arch.p2m->max_mapped_pfn = gfn;
+
+ ept_entry->emt = EPT_DEFAULT_MT;
+ ept_entry->sp_avail = walk_level ? 1 : 0;
+
+ if ( ret == GUEST_TABLE_SUPER_PAGE )
+ {
+ ept_entry->mfn = mfn_x(mfn) - offset;
+ if ( ept_entry->avail1 == p2m_ram_logdirty &&
+ p2mt == p2m_ram_rw )
+ for ( i = 0; i < 512; i++ )
+ paging_mark_dirty(d, mfn_x(mfn)-offset+i);
+ }
+ else
+ ept_entry->mfn = mfn_x(mfn);
+
+ ept_entry->avail1 = p2mt;
+ ept_entry->rsvd = 0;
+ ept_entry->avail2 = 0;
+ /* last step */
+ ept_entry->r = ept_entry->w = ept_entry->x = 1;
+ ept_p2m_type_to_flags(ept_entry, p2mt);
}
else
- ept_entry->mfn = mfn_x(mfn);
-
- ept_entry->avail1 = p2mt;
- ept_entry->rsvd = 0;
- ept_entry->avail2 = 0;
- /* last step */
- ept_entry->r = ept_entry->w = ept_entry->x = 1;
- ept_p2m_type_to_flags(ept_entry, p2mt);
+ ept_entry->epte = 0;
}
else
- ept_entry->epte = 0;
+ {
+ /* It's super page before, now set one of the 4k pages, so
+ * we should split the 2m page to 4k pages now.
+ */
+
+ ept_entry_t *split_table = NULL;
+ ept_entry_t *split_ept_entry = NULL;
+ unsigned long split_mfn = ept_entry->mfn;
+ p2m_type_t split_p2mt = ept_entry->avail1;
+
+ /* alloc new page for new ept middle level entry which is
+ * before a leaf super entry
+ */
+
+ if ( !ept_set_middle_entry(d, ept_entry) )
+ goto out;
+
+ /* split the super page before to 4k pages */
+
+ split_table = map_domain_page(ept_entry->mfn);
+
+ for ( i = 0; i < 512; i++ )
+ {
+ split_ept_entry = split_table + i;
+ split_ept_entry->emt = EPT_DEFAULT_MT;
+ split_ept_entry->sp_avail = 0;
+
+ split_ept_entry->mfn = split_mfn+i;
+
+ split_ept_entry->avail1 = split_p2mt;
+ split_ept_entry->rsvd = 0;
+ split_ept_entry->avail2 = 0;
+ /* last step */
+ split_ept_entry->r = split_ept_entry->w = split_ept_entry->x = 1;
+ ept_p2m_type_to_flags(split_ept_entry, split_p2mt);
+ }
+
+ /* Set the destinated 4k page as normal */
+
+ offset = gfn & ((1 << EPT_TABLE_ORDER) - 1);
+ split_ept_entry = split_table + offset;
+ split_ept_entry->mfn = mfn_x(mfn);
+ split_ept_entry->avail1 = p2mt;
+ ept_p2m_type_to_flags(split_ept_entry, p2mt);
+
+ unmap_domain_page(split_table);
+
+ }
/* Success */
rv = 1;
@@ -179,22 +247,22 @@ out:
{
if ( p2mt == p2m_ram_rw )
{
- if ( ret == GUEST_TABLE_SUPER_PAGE )
+ if ( order == EPT_TABLE_ORDER )
{
for ( i = 0; i < 512; i++ )
iommu_map_page(d, gfn-offset+i, mfn_x(mfn)-offset+i);
}
- else if ( ret )
+ else if ( !order )
iommu_map_page(d, gfn, mfn_x(mfn));
}
else
{
- if ( ret == GUEST_TABLE_SUPER_PAGE )
+ if ( order == EPT_TABLE_ORDER )
{
for ( i = 0; i < 512; i++ )
iommu_unmap_page(d, gfn-offset+i);
}
- else if ( ret )
+ else if ( !order )
iommu_unmap_page(d, gfn);
}
}
@@ -230,7 +298,7 @@ static mfn_t ept_get_entry(struct domain
for ( i = EPT_DEFAULT_GAW; i > 0; i-- )
{
ret = ept_next_level(d, 1, &table, &gfn_remainder,
- i * EPT_TABLE_ORDER);
+ i * EPT_TABLE_ORDER, 0);
if ( !ret )
goto out;
else if ( ret == GUEST_TABLE_SUPER_PAGE )
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/mm/p2m.c Thu May 22 19:42:51 2008 +0900
@@ -250,7 +250,7 @@ p2m_set_entry(struct domain *d, unsigned
// XXX -- this might be able to be faster iff current->domain == d
mfn_t table_mfn = pagetable_get_mfn(d->arch.phys_table);
void *table =map_domain_page(mfn_x(table_mfn));
- unsigned long gfn_remainder = gfn;
+ unsigned long i, gfn_remainder = gfn;
l1_pgentry_t *p2m_entry;
l1_pgentry_t entry_content;
l2_pgentry_t l2e_content;
@@ -328,9 +328,11 @@ p2m_set_entry(struct domain *d, unsigned
if ( iommu_enabled && is_hvm_domain(d) )
{
if ( p2mt == p2m_ram_rw )
- iommu_map_page(d, gfn, mfn_x(mfn));
+ for ( i = 0; i < (1UL << page_order); i++ )
+ iommu_map_page(d, gfn+i, mfn_x(mfn)+i );
else
- iommu_unmap_page(d, gfn);
+ for ( int i = 0; i < (1UL << page_order); i++ )
+ iommu_unmap_page(d, gfn+i);
}
/* Success */
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/time.c Thu May 22 19:42:51 2008 +0900
@@ -38,7 +38,6 @@ string_param("clocksource", opt_clocksou
#define EPOCH MILLISECS(1000)
unsigned long cpu_khz; /* CPU clock frequency in kHz. */
-unsigned long hpet_address;
DEFINE_SPINLOCK(rtc_lock);
unsigned long pit0_ticks;
static u32 wc_sec, wc_nsec; /* UTC time at last 'time update'. */
@@ -68,7 +67,8 @@ struct platform_timesource {
static DEFINE_PER_CPU(struct cpu_time, cpu_time);
-static u8 tsc_invariant=0; /* TSC is invariant upon C state entry */
+/* TSC is invariant on C state entry? */
+static bool_t tsc_invariant;
/*
* We simulate a 32-bit platform timer from the 16-bit PIT ch2 counter.
@@ -151,6 +151,9 @@ static void timer_interrupt(int irq, voi
{
ASSERT(local_irq_is_enabled());
+ if ( hpet_legacy_irq_tick() )
+ return;
+
/* Only for start-of-day interruopt tests in io_apic.c. */
(*(volatile unsigned long *)&pit0_ticks)++;
@@ -347,47 +350,10 @@ static u32 read_hpet_count(void)
static int init_hpet(struct platform_timesource *pts)
{
- u64 hpet_rate;
- u32 hpet_id, hpet_period, cfg;
- int i;
-
- if ( hpet_address == 0 )
+ u64 hpet_rate = hpet_setup();
+
+ if ( hpet_rate == 0 )
return 0;
-
- set_fixmap_nocache(FIX_HPET_BASE, hpet_address);
-
- hpet_id = hpet_read32(HPET_ID);
- if ( hpet_id == 0 )
- {
- printk("BAD HPET vendor id.\n");
- return 0;
- }
-
- /* Check for sane period (100ps <= period <= 100ns). */
- hpet_period = hpet_read32(HPET_PERIOD);
- if ( (hpet_period > 100000000) || (hpet_period < 100000) )
- {
- printk("BAD HPET period %u.\n", hpet_period);
- return 0;
- }
-
- cfg = hpet_read32(HPET_CFG);
- cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY);
- hpet_write32(cfg, HPET_CFG);
-
- for ( i = 0; i <= ((hpet_id >> 8) & 31); i++ )
- {
- cfg = hpet_read32(HPET_T0_CFG + i*0x20);
- cfg &= ~HPET_TN_ENABLE;
- hpet_write32(cfg & ~HPET_TN_ENABLE, HPET_T0_CFG);
- }
-
- cfg = hpet_read32(HPET_CFG);
- cfg |= HPET_CFG_ENABLE;
- hpet_write32(cfg, HPET_CFG);
-
- hpet_rate = 1000000000000000ULL; /* 10^15 */
- (void)do_div(hpet_rate, hpet_period);
pts->name = "HPET";
pts->frequency = hpet_rate;
@@ -1041,7 +1007,14 @@ static int __init disable_pit_irq(void)
outb_p(0x30, PIT_MODE);
outb_p(0, PIT_CH0);
outb_p(0, PIT_CH0);
- }
+
+ /*
+ * If we do not rely on PIT CH0 then we can use HPET for one-shot
+ * timer emulation when entering deep C states.
+ */
+ hpet_broadcast_init();
+ }
+
return 0;
}
__initcall(disable_pit_irq);
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/x86_32/entry.S
--- a/xen/arch/x86/x86_32/entry.S Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/x86_32/entry.S Thu May 22 19:42:51 2008 +0900
@@ -197,13 +197,12 @@ 1: sti
#define SHADOW_BYTES 24 /* 6 shadow parameters */
#endif
cmpb $0,tb_init_done
- je tracing_off
+ je 1f
call trace_hypercall
/* Now restore all the registers that trace_hypercall clobbered */
movl UREGS_eax+SHADOW_BYTES(%esp),%eax /* Hypercall # */
#undef SHADOW_BYTES
-tracing_off:
- call *hypercall_table(,%eax,4)
+1: call *hypercall_table(,%eax,4)
addl $24,%esp # Discard the shadow parameters
#ifndef NDEBUG
/* Deliberately corrupt real parameter regs used by this hypercall. */
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/x86_64/compat/entry.S Thu May 22 19:42:51 2008 +0900
@@ -59,7 +59,7 @@ ENTRY(compat_hypercall)
#define SHADOW_BYTES 0 /* No on-stack shadow state */
#endif
cmpb $0,tb_init_done(%rip)
- je compat_tracing_off
+ je 1f
call trace_hypercall
/* Now restore all the registers that trace_hypercall clobbered */
movl UREGS_rax+SHADOW_BYTES(%rsp),%eax /* Hypercall # */
@@ -70,8 +70,7 @@ ENTRY(compat_hypercall)
movl UREGS_rdi+SHADOW_BYTES(%rsp),%r8d /* Arg 5 */
movl UREGS_rbp+SHADOW_BYTES(%rsp),%r9d /* Arg 6 */
#undef SHADOW_BYTES
-compat_tracing_off:
- leaq compat_hypercall_table(%rip),%r10
+1: leaq compat_hypercall_table(%rip),%r10
PERFC_INCR(PERFC_hypercalls, %rax, %rbx)
callq *(%r10,%rax,8)
#ifndef NDEBUG
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S Tue May 20 18:54:09 2008 +0900
+++ b/xen/arch/x86/x86_64/entry.S Thu May 22 19:42:51 2008 +0900
@@ -163,7 +163,7 @@ ENTRY(syscall_enter)
#define SHADOW_BYTES 0 /* No on-stack shadow state */
#endif
cmpb $0,tb_init_done(%rip)
- je tracing_off
+ je 1f
call trace_hypercall
/* Now restore all the registers that trace_hypercall clobbered */
movq UREGS_rax+SHADOW_BYTES(%rsp),%rax /* Hypercall # */
@@ -174,8 +174,7 @@ ENTRY(syscall_enter)
movq UREGS_rdi+SHADOW_BYTES(%rsp),%r8 /* Arg 5 */
movq UREGS_rbp+SHADOW_BYTES(%rsp),%r9 /* Arg 6 */
#undef SHADOW_BYTES
-tracing_off:
- leaq hypercall_table(%rip),%r10
+1: leaq hypercall_table(%rip),%r10
PERFC_INCR(PERFC_hypercalls, %rax, %rbx)
callq *(%r10,%rax,8)
#ifndef NDEBUG
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/common/domain.c
--- a/xen/common/domain.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/common/domain.c Thu May 22 19:42:51 2008 +0900
@@ -633,17 +633,14 @@ int boot_vcpu(struct domain *d, int vcpu
return arch_set_info_guest(v, ctxt);
}
-int vcpu_reset(struct vcpu *v)
+void vcpu_reset(struct vcpu *v)
{
struct domain *d = v->domain;
- int rc;
domain_pause(d);
domain_lock(d);
- rc = arch_vcpu_reset(v);
- if ( rc != 0 )
- goto out;
+ arch_vcpu_reset(v);
set_bit(_VPF_down, &v->pause_flags);
@@ -655,11 +652,8 @@ int vcpu_reset(struct vcpu *v)
v->nmi_masked = 0;
clear_bit(_VPF_blocked, &v->pause_flags);
- out:
domain_unlock(v->domain);
domain_unpause(d);
-
- return rc;
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/common/domctl.c
--- a/xen/common/domctl.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/common/domctl.c Thu May 22 19:42:51 2008 +0900
@@ -218,7 +218,8 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
if ( guest_handle_is_null(op->u.vcpucontext.ctxt) )
{
- ret = vcpu_reset(v);
+ vcpu_reset(v);
+ ret = 0;
goto svc_out;
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/common/timer.c
--- a/xen/common/timer.c Tue May 20 18:54:09 2008 +0900
+++ b/xen/common/timer.c Thu May 22 19:42:51 2008 +0900
@@ -35,7 +35,7 @@ struct timers {
static DEFINE_PER_CPU(struct timers, timers);
-extern int reprogram_timer(s_time_t timeout);
+DEFINE_PER_CPU(s_time_t, timer_deadline);
/****************************************************************************
* HEAP OPERATIONS.
@@ -323,8 +323,10 @@ static void timer_softirq_action(void)
}
ts->running = NULL;
- }
- while ( !reprogram_timer(GET_HEAP_SIZE(heap) ? heap[1]->expires : 0) );
+
+ this_cpu(timer_deadline) = GET_HEAP_SIZE(heap) ? heap[1]->expires : 0;
+ }
+ while ( !reprogram_timer(this_cpu(timer_deadline)) );
spin_unlock_irq(&ts->lock);
}
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/asm-x86/hpet.h
--- a/xen/include/asm-x86/hpet.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/asm-x86/hpet.h Thu May 22 19:42:51 2008 +0900
@@ -49,4 +49,24 @@
#define hpet_write32(y,x) \
(*(volatile u32 *)(fix_to_virt(FIX_HPET_BASE) + (x)) = (y))
+/*
+ * Detect and initialise HPET hardware: return counter update frequency.
+ * Return value is zero if HPET is unavailable.
+ */
+u64 hpet_setup(void);
+
+/*
+ * Callback from legacy timer (PIT channel 0) IRQ handler.
+ * Returns 1 if tick originated from HPET; else 0.
+ */
+int hpet_legacy_irq_tick(void);
+
+/*
+ * Temporarily use an HPET event counter for timer interrupt handling,
+ * rather than using the LAPIC timer. Used for Cx state entry.
+ */
+void hpet_broadcast_init(void);
+void hpet_broadcast_enter(void);
+void hpet_broadcast_exit(void);
+
#endif /* __X86_HPET_H__ */
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/asm-x86/hvm/domain.h
--- a/xen/include/asm-x86/hvm/domain.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/asm-x86/hvm/domain.h Thu May 22 19:42:51 2008 +0900
@@ -76,6 +76,7 @@ struct hvm_domain {
bool_t hap_enabled;
bool_t qemu_mapcache_invalidate;
+ bool_t is_s3_suspended;
union {
struct vmx_domain vmx;
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/asm-x86/hvm/hvm.h Thu May 22 19:42:51 2008 +0900
@@ -141,6 +141,7 @@ void hvm_vcpu_down(struct vcpu *v);
void hvm_vcpu_down(struct vcpu *v);
int hvm_vcpu_cacheattr_init(struct vcpu *v);
void hvm_vcpu_cacheattr_destroy(struct vcpu *v);
+void hvm_vcpu_reset_state(struct vcpu *v, uint16_t cs, uint16_t ip);
void hvm_send_assist_req(struct vcpu *v);
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/asm-x86/hvm/vioapic.h
--- a/xen/include/asm-x86/hvm/vioapic.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/asm-x86/hvm/vioapic.h Thu May 22 19:42:51 2008 +0900
@@ -63,6 +63,7 @@ struct hvm_vioapic {
int vioapic_init(struct domain *d);
void vioapic_deinit(struct domain *d);
+void vioapic_reset(struct domain *d);
void vioapic_irq_positive_edge(struct domain *d, unsigned int irq);
void vioapic_update_EOI(struct domain *d, int vector);
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/asm-x86/hvm/vpic.h
--- a/xen/include/asm-x86/hvm/vpic.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/asm-x86/hvm/vpic.h Thu May 22 19:42:51 2008 +0900
@@ -32,6 +32,7 @@ void vpic_irq_positive_edge(struct domai
void vpic_irq_positive_edge(struct domain *d, int irq);
void vpic_irq_negative_edge(struct domain *d, int irq);
void vpic_init(struct domain *d);
+void vpic_reset(struct domain *d);
int vpic_ack_pending_irq(struct vcpu *v);
int is_periodic_irq(struct vcpu *v, int irq, int type);
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/asm-x86/hvm/vpt.h
--- a/xen/include/asm-x86/hvm/vpt.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/asm-x86/hvm/vpt.h Thu May 22 19:42:51 2008 +0900
@@ -166,17 +166,23 @@ void destroy_periodic_time(struct period
void destroy_periodic_time(struct periodic_time *pt);
int pv_pit_handler(int port, int data, int write);
+void pit_reset(struct domain *d);
+
void pit_init(struct vcpu *v, unsigned long cpu_khz);
void pit_stop_channel0_irq(PITState * pit);
void pit_deinit(struct domain *d);
void rtc_init(struct vcpu *v, int base);
void rtc_migrate_timers(struct vcpu *v);
void rtc_deinit(struct domain *d);
+void rtc_reset(struct domain *d);
+
void pmtimer_init(struct vcpu *v);
void pmtimer_deinit(struct domain *d);
+void pmtimer_reset(struct domain *d);
void hpet_migrate_timers(struct vcpu *v);
void hpet_init(struct vcpu *v);
void hpet_deinit(struct domain *d);
+void hpet_reset(struct domain *d);
#endif /* __ASM_X86_HVM_VPT_H__ */
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/public/hvm/params.h
--- a/xen/include/public/hvm/params.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/public/hvm/params.h Thu May 22 19:42:51 2008 +0900
@@ -90,6 +90,9 @@
/* Device Model domain, defaults to 0. */
#define HVM_PARAM_DM_DOMAIN 13
-#define HVM_NR_PARAMS 14
+/* ACPI S state: currently support S0 and S3 on x86. */
+#define HVM_PARAM_ACPI_S_STATE 14
+
+#define HVM_NR_PARAMS 15
#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/public/sysctl.h
--- a/xen/include/public/sysctl.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/public/sysctl.h Thu May 22 19:42:51 2008 +0900
@@ -233,15 +233,30 @@ typedef struct pm_px_stat pm_px_stat_t;
typedef struct pm_px_stat pm_px_stat_t;
DEFINE_XEN_GUEST_HANDLE(pm_px_stat_t);
+struct pm_cx_stat {
+ uint32_t nr; /* entry nr in triggers & residencies, including C0 */
+ uint32_t last; /* last Cx state */
+ uint64_aligned_t idle_time; /* idle time from boot */
+ XEN_GUEST_HANDLE_64(uint64) triggers; /* Cx trigger counts */
+ XEN_GUEST_HANDLE_64(uint64) residencies; /* Cx residencies */
+};
+
struct xen_sysctl_get_pmstat {
-#define PMSTAT_get_max_px 0x11
-#define PMSTAT_get_pxstat 0x12
-#define PMSTAT_reset_pxstat 0x13
+#define PMSTAT_CATEGORY_MASK 0xf0
+#define PMSTAT_PX 0x10
+#define PMSTAT_CX 0x20
+#define PMSTAT_get_max_px (PMSTAT_PX | 0x1)
+#define PMSTAT_get_pxstat (PMSTAT_PX | 0x2)
+#define PMSTAT_reset_pxstat (PMSTAT_PX | 0x3)
+#define PMSTAT_get_max_cx (PMSTAT_CX | 0x1)
+#define PMSTAT_get_cxstat (PMSTAT_CX | 0x2)
+#define PMSTAT_reset_cxstat (PMSTAT_CX | 0x3)
uint32_t type;
uint32_t cpuid;
union {
struct pm_px_stat getpx;
- /* other struct for cx, tx, etc */
+ struct pm_cx_stat getcx;
+ /* other struct for tx, etc */
} u;
};
typedef struct xen_sysctl_get_pmstat xen_sysctl_get_pmstat_t;
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/xen/domain.h
--- a/xen/include/xen/domain.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/xen/domain.h Thu May 22 19:42:51 2008 +0900
@@ -14,7 +14,7 @@ int boot_vcpu(
int boot_vcpu(
struct domain *d, int vcpuid, vcpu_guest_context_u ctxt);
struct vcpu *alloc_idle_vcpu(unsigned int cpu_id);
-int vcpu_reset(struct vcpu *v);
+void vcpu_reset(struct vcpu *v);
struct domain *alloc_domain(domid_t domid);
void free_domain(struct domain *d);
@@ -55,7 +55,7 @@ void arch_dump_vcpu_info(struct vcpu *v)
void arch_dump_domain_info(struct domain *d);
-int arch_vcpu_reset(struct vcpu *v);
+void arch_vcpu_reset(struct vcpu *v);
extern unsigned int xen_processor_pmbits;
diff -r f04ce41dab84 -r 74d0f17f3fa5 xen/include/xen/timer.h
--- a/xen/include/xen/timer.h Tue May 20 18:54:09 2008 +0900
+++ b/xen/include/xen/timer.h Thu May 22 19:42:51 2008 +0900
@@ -99,6 +99,15 @@ extern void process_pending_timers(void)
*/
extern void timer_init(void);
+/*
+ * Next timer deadline for each CPU.
+ * Modified only by the local CPU and never in interrupt context.
+ */
+DECLARE_PER_CPU(s_time_t, timer_deadline);
+
+/* Arch-defined function to reprogram timer hardware for new deadline. */
+extern int reprogram_timer(s_time_t timeout);
+
#endif /* _TIMER_H_ */
/*
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|