[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] merge with xen-unstable.hg
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |