ia64/xen-unstable

changeset 17699:74d0f17f3fa5

merge with xen-unstable.hg
author Isaku Yamahata <yamahata@valinux.co.jp>
date Thu May 22 19:42:51 2008 +0900 (2008-05-22)
parents f04ce41dab84 b259eebb0223
children 9c0a654157cb
files
line diff
     1.1 --- a/tools/firmware/hvmloader/acpi/dsdt.asl	Tue May 20 18:54:09 2008 +0900
     1.2 +++ b/tools/firmware/hvmloader/acpi/dsdt.asl	Thu May 22 19:42:51 2008 +0900
     1.3 @@ -52,7 +52,17 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 
     1.4           * at HVM guest boot time. */
     1.5      }
     1.6  
     1.7 -    /* S4 (STD) and S5 (power-off) type codes: must match piix4 emulation. */
     1.8 +    /*
     1.9 +     * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes:
    1.10 +     * must match piix4 emulation.
    1.11 +     */
    1.12 +    Name (\_S3, Package (0x04)
    1.13 +    {
    1.14 +        0x05,  /* PM1a_CNT.SLP_TYP */
    1.15 +        0x05,  /* PM1b_CNT.SLP_TYP */
    1.16 +        0x0,   /* reserved */
    1.17 +        0x0    /* reserved */
    1.18 +    })
    1.19      Name (\_S4, Package (0x04)
    1.20      {
    1.21          0x06,  /* PM1a_CNT.SLP_TYP */
     2.1 --- a/tools/firmware/hvmloader/acpi/dsdt.c	Tue May 20 18:54:09 2008 +0900
     2.2 +++ b/tools/firmware/hvmloader/acpi/dsdt.c	Thu May 22 19:42:51 2008 +0900
     2.3 @@ -5,15 +5,15 @@
     2.4   * Copyright (C) 2000 - 2006 Intel Corporation
     2.5   * Supports ACPI Specification Revision 3.0a
     2.6   * 
     2.7 - * Compilation of "dsdt.asl" - Tue Mar 25 10:53:38 2008
     2.8 + * Compilation of "dsdt.asl" - Tue May 20 14:34:40 2008
     2.9   * 
    2.10   * C source code output
    2.11   *
    2.12   */
    2.13  unsigned char AmlCode[] =
    2.14  {
    2.15 -    0x44,0x53,0x44,0x54,0x24,0x11,0x00,0x00,  /* 00000000    "DSDT$..." */
    2.16 -    0x02,0x82,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    "..Xen..." */
    2.17 +    0x44,0x53,0x44,0x54,0x32,0x11,0x00,0x00,  /* 00000000    "DSDT2..." */
    2.18 +    0x02,0xEC,0x58,0x65,0x6E,0x00,0x00,0x00,  /* 00000008    "..Xen..." */
    2.19      0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "HVM....." */
    2.20      0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
    2.21      0x07,0x07,0x06,0x20,0x08,0x50,0x4D,0x42,  /* 00000020    "... .PMB" */
    2.22 @@ -48,518 +48,520 @@ unsigned char AmlCode[] =
    2.23      0x00,0x5B,0x83,0x0B,0x50,0x52,0x30,0x44,  /* 00000108    ".[..PR0D" */
    2.24      0x0D,0x00,0x00,0x00,0x00,0x00,0x5B,0x83,  /* 00000110    "......[." */
    2.25      0x0B,0x50,0x52,0x30,0x45,0x0E,0x00,0x00,  /* 00000118    ".PR0E..." */
    2.26 -    0x00,0x00,0x00,0x08,0x5F,0x53,0x34,0x5F,  /* 00000120    "...._S4_" */
    2.27 -    0x12,0x08,0x04,0x0A,0x06,0x0A,0x06,0x00,  /* 00000128    "........" */
    2.28 -    0x00,0x08,0x5F,0x53,0x35,0x5F,0x12,0x08,  /* 00000130    ".._S5_.." */
    2.29 -    0x04,0x0A,0x07,0x0A,0x07,0x00,0x00,0x08,  /* 00000138    "........" */
    2.30 -    0x50,0x49,0x43,0x44,0x00,0x14,0x0C,0x5F,  /* 00000140    "PICD..._" */
    2.31 -    0x50,0x49,0x43,0x01,0x70,0x68,0x50,0x49,  /* 00000148    "PIC.phPI" */
    2.32 -    0x43,0x44,0x10,0x42,0xF1,0x5F,0x53,0x42,  /* 00000150    "CD.B._SB" */
    2.33 -    0x5F,0x5B,0x80,0x42,0x49,0x4F,0x53,0x00,  /* 00000158    "_[.BIOS." */
    2.34 -    0x0C,0x00,0xA0,0x0E,0x00,0x0A,0x10,0x5B,  /* 00000160    ".......[" */
    2.35 -    0x81,0x21,0x42,0x49,0x4F,0x53,0x01,0x55,  /* 00000168    ".!BIOS.U" */
    2.36 -    0x41,0x52,0x31,0x01,0x55,0x41,0x52,0x32,  /* 00000170    "AR1.UAR2" */
    2.37 -    0x01,0x48,0x50,0x45,0x54,0x01,0x00,0x1D,  /* 00000178    ".HPET..." */
    2.38 -    0x50,0x4D,0x49,0x4E,0x20,0x50,0x4C,0x45,  /* 00000180    "PMIN PLE" */
    2.39 -    0x4E,0x20,0x5B,0x82,0x49,0x04,0x4D,0x45,  /* 00000188    "N [.I.ME" */
    2.40 -    0x4D,0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000190    "M0._HID." */
    2.41 -    0x41,0xD0,0x0C,0x02,0x08,0x5F,0x43,0x52,  /* 00000198    "A...._CR" */
    2.42 -    0x53,0x11,0x33,0x0A,0x30,0x8A,0x2B,0x00,  /* 000001A0    "S.3.0.+." */
    2.43 -    0x00,0x0D,0x03,0x00,0x00,0x00,0x00,0x00,  /* 000001A8    "........" */
    2.44 -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B0    "........" */
    2.45 -    0x00,0x00,0x00,0xFF,0xFF,0x09,0x00,0x00,  /* 000001B8    "........" */
    2.46 +    0x00,0x00,0x00,0x08,0x5F,0x53,0x33,0x5F,  /* 00000120    "...._S3_" */
    2.47 +    0x12,0x08,0x04,0x0A,0x05,0x0A,0x05,0x00,  /* 00000128    "........" */
    2.48 +    0x00,0x08,0x5F,0x53,0x34,0x5F,0x12,0x08,  /* 00000130    ".._S4_.." */
    2.49 +    0x04,0x0A,0x06,0x0A,0x06,0x00,0x00,0x08,  /* 00000138    "........" */
    2.50 +    0x5F,0x53,0x35,0x5F,0x12,0x08,0x04,0x0A,  /* 00000140    "_S5_...." */
    2.51 +    0x07,0x0A,0x07,0x00,0x00,0x08,0x50,0x49,  /* 00000148    "......PI" */
    2.52 +    0x43,0x44,0x00,0x14,0x0C,0x5F,0x50,0x49,  /* 00000150    "CD..._PI" */
    2.53 +    0x43,0x01,0x70,0x68,0x50,0x49,0x43,0x44,  /* 00000158    "C.phPICD" */
    2.54 +    0x10,0x42,0xF1,0x5F,0x53,0x42,0x5F,0x5B,  /* 00000160    ".B._SB_[" */
    2.55 +    0x80,0x42,0x49,0x4F,0x53,0x00,0x0C,0x00,  /* 00000168    ".BIOS..." */
    2.56 +    0xA0,0x0E,0x00,0x0A,0x10,0x5B,0x81,0x21,  /* 00000170    ".....[.!" */
    2.57 +    0x42,0x49,0x4F,0x53,0x01,0x55,0x41,0x52,  /* 00000178    "BIOS.UAR" */
    2.58 +    0x31,0x01,0x55,0x41,0x52,0x32,0x01,0x48,  /* 00000180    "1.UAR2.H" */
    2.59 +    0x50,0x45,0x54,0x01,0x00,0x1D,0x50,0x4D,  /* 00000188    "PET...PM" */
    2.60 +    0x49,0x4E,0x20,0x50,0x4C,0x45,0x4E,0x20,  /* 00000190    "IN PLEN " */
    2.61 +    0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D,0x30,  /* 00000198    "[.I.MEM0" */
    2.62 +    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000001A0    "._HID.A." */
    2.63 +    0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 000001A8    "..._CRS." */
    2.64 +    0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00,0x0D,  /* 000001B0    "3.0.+..." */
    2.65 +    0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B8    "........" */
    2.66      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001C0    "........" */
    2.67 -    0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x00,  /* 000001C8    "........" */
    2.68 -    0x00,0x00,0x00,0x79,0x00,0x5B,0x82,0x4E,  /* 000001D0    "...y.[.N" */
    2.69 -    0xE8,0x50,0x43,0x49,0x30,0x08,0x5F,0x48,  /* 000001D8    ".PCI0._H" */
    2.70 -    0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03,0x08,  /* 000001E0    "ID.A...." */
    2.71 -    0x5F,0x55,0x49,0x44,0x00,0x08,0x5F,0x41,  /* 000001E8    "_UID.._A" */
    2.72 -    0x44,0x52,0x00,0x08,0x5F,0x42,0x42,0x4E,  /* 000001F0    "DR.._BBN" */
    2.73 -    0x00,0x14,0x4E,0x0C,0x5F,0x43,0x52,0x53,  /* 000001F8    "..N._CRS" */
    2.74 -    0x00,0x08,0x50,0x52,0x54,0x30,0x11,0x42,  /* 00000200    "..PRT0.B" */
    2.75 -    0x07,0x0A,0x6E,0x88,0x0D,0x00,0x02,0x0E,  /* 00000208    "..n....." */
    2.76 -    0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,  /* 00000210    "........" */
    2.77 -    0x00,0x00,0x01,0x47,0x01,0xF8,0x0C,0xF8,  /* 00000218    "...G...." */
    2.78 -    0x0C,0x01,0x08,0x88,0x0D,0x00,0x01,0x0C,  /* 00000220    "........" */
    2.79 -    0x03,0x00,0x00,0x00,0x00,0xF7,0x0C,0x00,  /* 00000228    "........" */
    2.80 -    0x00,0xF8,0x0C,0x88,0x0D,0x00,0x01,0x0C,  /* 00000230    "........" */
    2.81 -    0x03,0x00,0x00,0x00,0x0D,0xFF,0xFF,0x00,  /* 00000238    "........" */
    2.82 -    0x00,0x00,0xF3,0x87,0x17,0x00,0x00,0x0C,  /* 00000240    "........" */
    2.83 -    0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,  /* 00000248    "........" */
    2.84 -    0x00,0xFF,0xFF,0x0B,0x00,0x00,0x00,0x00,  /* 00000250    "........" */
    2.85 -    0x00,0x00,0x00,0x02,0x00,0x87,0x17,0x00,  /* 00000258    "........" */
    2.86 -    0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,  /* 00000260    "........" */
    2.87 -    0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xF4,0x00,  /* 00000268    "........" */
    2.88 -    0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x79,  /* 00000270    ".......y" */
    2.89 -    0x00,0x8A,0x50,0x52,0x54,0x30,0x0A,0x5C,  /* 00000278    "..PRT0.\" */
    2.90 -    0x4D,0x4D,0x49,0x4E,0x8A,0x50,0x52,0x54,  /* 00000280    "MMIN.PRT" */
    2.91 -    0x30,0x0A,0x60,0x4D,0x4D,0x41,0x58,0x8A,  /* 00000288    "0.`MMAX." */
    2.92 -    0x50,0x52,0x54,0x30,0x0A,0x68,0x4D,0x4C,  /* 00000290    "PRT0.hML" */
    2.93 -    0x45,0x4E,0x70,0x50,0x4D,0x49,0x4E,0x4D,  /* 00000298    "ENpPMINM" */
    2.94 -    0x4D,0x49,0x4E,0x70,0x50,0x4C,0x45,0x4E,  /* 000002A0    "MINpPLEN" */
    2.95 -    0x4D,0x4C,0x45,0x4E,0x72,0x4D,0x4D,0x49,  /* 000002A8    "MLENrMMI" */
    2.96 -    0x4E,0x4D,0x4C,0x45,0x4E,0x4D,0x4D,0x41,  /* 000002B0    "NMLENMMA" */
    2.97 -    0x58,0x74,0x4D,0x4D,0x41,0x58,0x01,0x4D,  /* 000002B8    "XtMMAX.M" */
    2.98 -    0x4D,0x41,0x58,0xA4,0x50,0x52,0x54,0x30,  /* 000002C0    "MAX.PRT0" */
    2.99 -    0x08,0x42,0x55,0x46,0x41,0x11,0x09,0x0A,  /* 000002C8    ".BUFA..." */
   2.100 -    0x06,0x23,0x20,0x0C,0x18,0x79,0x00,0x08,  /* 000002D0    ".# ..y.." */
   2.101 -    0x42,0x55,0x46,0x42,0x11,0x09,0x0A,0x06,  /* 000002D8    "BUFB...." */
   2.102 -    0x23,0x00,0x00,0x18,0x79,0x00,0x8B,0x42,  /* 000002E0    "#...y..B" */
   2.103 -    0x55,0x46,0x42,0x01,0x49,0x52,0x51,0x56,  /* 000002E8    "UFB.IRQV" */
   2.104 -    0x5B,0x82,0x48,0x08,0x4C,0x4E,0x4B,0x41,  /* 000002F0    "[.H.LNKA" */
   2.105 -    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 000002F8    "._HID.A." */
   2.106 -    0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x01,  /* 00000300    "..._UID." */
   2.107 -    0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,  /* 00000308    ".._STA.{" */
   2.108 -    0x50,0x49,0x52,0x41,0x0A,0x80,0x60,0xA0,  /* 00000310    "PIRA..`." */
   2.109 -    0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,  /* 00000318    "..`....." */
   2.110 -    0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,  /* 00000320    "......._" */
   2.111 -    0x50,0x52,0x53,0x00,0xA4,0x42,0x55,0x46,  /* 00000328    "PRS..BUF" */
   2.112 -    0x41,0x14,0x11,0x5F,0x44,0x49,0x53,0x00,  /* 00000330    "A.._DIS." */
   2.113 -    0x7D,0x50,0x49,0x52,0x41,0x0A,0x80,0x50,  /* 00000338    "}PIRA..P" */
   2.114 -    0x49,0x52,0x41,0x14,0x1A,0x5F,0x43,0x52,  /* 00000340    "IRA.._CR" */
   2.115 -    0x53,0x00,0x7B,0x50,0x49,0x52,0x41,0x0A,  /* 00000348    "S.{PIRA." */
   2.116 -    0x0F,0x60,0x79,0x01,0x60,0x49,0x52,0x51,  /* 00000350    ".`y.`IRQ" */
   2.117 -    0x56,0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,  /* 00000358    "V.BUFB.." */
   2.118 -    0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01,  /* 00000360    "_SRS..h." */
   2.119 -    0x49,0x52,0x51,0x31,0x82,0x49,0x52,0x51,  /* 00000368    "IRQ1.IRQ" */
   2.120 -    0x31,0x60,0x76,0x60,0x70,0x60,0x50,0x49,  /* 00000370    "1`v`p`PI" */
   2.121 -    0x52,0x41,0x5B,0x82,0x49,0x08,0x4C,0x4E,  /* 00000378    "RA[.I.LN" */
   2.122 -    0x4B,0x42,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000380    "KB._HID." */
   2.123 -    0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,  /* 00000388    "A...._UI" */
   2.124 -    0x44,0x0A,0x02,0x14,0x1C,0x5F,0x53,0x54,  /* 00000390    "D...._ST" */
   2.125 -    0x41,0x00,0x7B,0x50,0x49,0x52,0x42,0x0A,  /* 00000398    "A.{PIRB." */
   2.126 -    0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,  /* 000003A0    ".`...`.." */
   2.127 -    0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,  /* 000003A8    "........" */
   2.128 -    0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,  /* 000003B0    ".._PRS.." */
   2.129 -    0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44,  /* 000003B8    "BUFA.._D" */
   2.130 -    0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x42,  /* 000003C0    "IS.}PIRB" */
   2.131 -    0x0A,0x80,0x50,0x49,0x52,0x42,0x14,0x1A,  /* 000003C8    "..PIRB.." */
   2.132 -    0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49,  /* 000003D0    "_CRS.{PI" */
   2.133 -    0x52,0x42,0x0A,0x0F,0x60,0x79,0x01,0x60,  /* 000003D8    "RB..`y.`" */
   2.134 -    0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46,  /* 000003E0    "IRQV.BUF" */
   2.135 -    0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,  /* 000003E8    "B.._SRS." */
   2.136 -    0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82,  /* 000003F0    ".h.IRQ1." */
   2.137 -    0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70,  /* 000003F8    "IRQ1`v`p" */
   2.138 -    0x60,0x50,0x49,0x52,0x42,0x5B,0x82,0x49,  /* 00000400    "`PIRB[.I" */
   2.139 -    0x08,0x4C,0x4E,0x4B,0x43,0x08,0x5F,0x48,  /* 00000408    ".LNKC._H" */
   2.140 -    0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,  /* 00000410    "ID.A...." */
   2.141 -    0x5F,0x55,0x49,0x44,0x0A,0x03,0x14,0x1C,  /* 00000418    "_UID...." */
   2.142 -    0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49,  /* 00000420    "_STA.{PI" */
   2.143 -    0x52,0x43,0x0A,0x80,0x60,0xA0,0x08,0x93,  /* 00000428    "RC..`..." */
   2.144 -    0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,  /* 00000430    "`......." */
   2.145 -    0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,  /* 00000438    "....._PR" */
   2.146 -    0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14,  /* 00000440    "S..BUFA." */
   2.147 -    0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,  /* 00000448    "._DIS.}P" */
   2.148 -    0x49,0x52,0x43,0x0A,0x80,0x50,0x49,0x52,  /* 00000450    "IRC..PIR" */
   2.149 -    0x43,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,  /* 00000458    "C.._CRS." */
   2.150 -    0x7B,0x50,0x49,0x52,0x43,0x0A,0x0F,0x60,  /* 00000460    "{PIRC..`" */
   2.151 -    0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4,  /* 00000468    "y.`IRQV." */
   2.152 -    0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,  /* 00000470    "BUFB.._S" */
   2.153 -    0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52,  /* 00000478    "RS..h.IR" */
   2.154 -    0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60,  /* 00000480    "Q1.IRQ1`" */
   2.155 -    0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x43,  /* 00000488    "v`p`PIRC" */
   2.156 -    0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,0x44,  /* 00000490    "[.I.LNKD" */
   2.157 -    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000498    "._HID.A." */
   2.158 -    0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,  /* 000004A0    "..._UID." */
   2.159 -    0x04,0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,  /* 000004A8    "..._STA." */
   2.160 -    0x7B,0x50,0x49,0x52,0x44,0x0A,0x80,0x60,  /* 000004B0    "{PIRD..`" */
   2.161 -    0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,  /* 000004B8    "...`...." */
   2.162 -    0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,  /* 000004C0    "........" */
   2.163 -    0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,0x55,  /* 000004C8    "_PRS..BU" */
   2.164 -    0x46,0x41,0x14,0x11,0x5F,0x44,0x49,0x53,  /* 000004D0    "FA.._DIS" */
   2.165 -    0x00,0x7D,0x50,0x49,0x52,0x44,0x0A,0x80,  /* 000004D8    ".}PIRD.." */
   2.166 -    0x50,0x49,0x52,0x44,0x14,0x1A,0x5F,0x43,  /* 000004E0    "PIRD.._C" */
   2.167 -    0x52,0x53,0x00,0x7B,0x50,0x49,0x52,0x44,  /* 000004E8    "RS.{PIRD" */
   2.168 -    0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,0x52,  /* 000004F0    "..`y.`IR" */
   2.169 -    0x51,0x56,0xA4,0x42,0x55,0x46,0x42,0x14,  /* 000004F8    "QV.BUFB." */
   2.170 -    0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,  /* 00000500    "._SRS..h" */
   2.171 -    0x01,0x49,0x52,0x51,0x31,0x82,0x49,0x52,  /* 00000508    ".IRQ1.IR" */
   2.172 -    0x51,0x31,0x60,0x76,0x60,0x70,0x60,0x50,  /* 00000510    "Q1`v`p`P" */
   2.173 -    0x49,0x52,0x44,0x5B,0x82,0x44,0x05,0x48,  /* 00000518    "IRD[.D.H" */
   2.174 -    0x50,0x45,0x54,0x08,0x5F,0x48,0x49,0x44,  /* 00000520    "PET._HID" */
   2.175 -    0x0C,0x41,0xD0,0x01,0x03,0x08,0x5F,0x55,  /* 00000528    ".A...._U" */
   2.176 -    0x49,0x44,0x00,0x14,0x18,0x5F,0x53,0x54,  /* 00000530    "ID..._ST" */
   2.177 -    0x41,0x00,0xA0,0x0C,0x93,0x5E,0x5E,0x5E,  /* 00000538    "A....^^^" */
   2.178 -    0x48,0x50,0x45,0x54,0x00,0xA4,0x00,0xA1,  /* 00000540    "HPET...." */
   2.179 -    0x04,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 00000548    "....._CR" */
   2.180 -    0x53,0x11,0x1F,0x0A,0x1C,0x87,0x17,0x00,  /* 00000550    "S......." */
   2.181 -    0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,  /* 00000558    "........" */
   2.182 -    0x00,0xD0,0xFE,0xFF,0x03,0xD0,0xFE,0x00,  /* 00000560    "........" */
   2.183 -    0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x79,  /* 00000568    ".......y" */
   2.184 -    0x00,0x14,0x16,0x5F,0x50,0x52,0x54,0x00,  /* 00000570    "..._PRT." */
   2.185 -    0xA0,0x0A,0x50,0x49,0x43,0x44,0xA4,0x50,  /* 00000578    "..PICD.P" */
   2.186 -    0x52,0x54,0x41,0xA4,0x50,0x52,0x54,0x50,  /* 00000580    "RTA.PRTP" */
   2.187 -    0x08,0x50,0x52,0x54,0x50,0x12,0x49,0x36,  /* 00000588    ".PRTP.I6" */
   2.188 -    0x3C,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x01,  /* 00000590    "<......." */
   2.189 -    0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000598    "..LNKB.." */
   2.190 -    0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x01,  /* 000005A0    "........" */
   2.191 -    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,  /* 000005A8    "LNKC...." */
   2.192 -    0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x02,0x4C,  /* 000005B0    ".......L" */
   2.193 -    0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,  /* 000005B8    "NKD....." */
   2.194 -    0xFF,0xFF,0x01,0x00,0x0A,0x03,0x4C,0x4E,  /* 000005C0    "......LN" */
   2.195 -    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000005C8    "KA......" */
   2.196 -    0xFF,0x02,0x00,0x00,0x4C,0x4E,0x4B,0x43,  /* 000005D0    "....LNKC" */
   2.197 +    0x00,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,  /* 000001C8    "........" */
   2.198 +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D0    "........" */
   2.199 +    0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
   2.200 +    0x00,0x79,0x00,0x5B,0x82,0x4E,0xE8,0x50,  /* 000001E0    ".y.[.N.P" */
   2.201 +    0x43,0x49,0x30,0x08,0x5F,0x48,0x49,0x44,  /* 000001E8    "CI0._HID" */
   2.202 +    0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F,0x55,  /* 000001F0    ".A...._U" */
   2.203 +    0x49,0x44,0x00,0x08,0x5F,0x41,0x44,0x52,  /* 000001F8    "ID.._ADR" */
   2.204 +    0x00,0x08,0x5F,0x42,0x42,0x4E,0x00,0x14,  /* 00000200    ".._BBN.." */
   2.205 +    0x4E,0x0C,0x5F,0x43,0x52,0x53,0x00,0x08,  /* 00000208    "N._CRS.." */
   2.206 +    0x50,0x52,0x54,0x30,0x11,0x42,0x07,0x0A,  /* 00000210    "PRT0.B.." */
   2.207 +    0x6E,0x88,0x0D,0x00,0x02,0x0E,0x00,0x00,  /* 00000218    "n......." */
   2.208 +    0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,  /* 00000220    "........" */
   2.209 +    0x01,0x47,0x01,0xF8,0x0C,0xF8,0x0C,0x01,  /* 00000228    ".G......" */
   2.210 +    0x08,0x88,0x0D,0x00,0x01,0x0C,0x03,0x00,  /* 00000230    "........" */
   2.211 +    0x00,0x00,0x00,0xF7,0x0C,0x00,0x00,0xF8,  /* 00000238    "........" */
   2.212 +    0x0C,0x88,0x0D,0x00,0x01,0x0C,0x03,0x00,  /* 00000240    "........" */
   2.213 +    0x00,0x00,0x0D,0xFF,0xFF,0x00,0x00,0x00,  /* 00000248    "........" */
   2.214 +    0xF3,0x87,0x17,0x00,0x00,0x0C,0x03,0x00,  /* 00000250    "........" */
   2.215 +    0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0xFF,  /* 00000258    "........" */
   2.216 +    0xFF,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000260    "........" */
   2.217 +    0x00,0x02,0x00,0x87,0x17,0x00,0x00,0x0C,  /* 00000268    "........" */
   2.218 +    0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000270    "........" */
   2.219 +    0xF0,0xFF,0xFF,0xFF,0xF4,0x00,0x00,0x00,  /* 00000278    "........" */
   2.220 +    0x00,0x00,0x00,0x00,0x05,0x79,0x00,0x8A,  /* 00000280    ".....y.." */
   2.221 +    0x50,0x52,0x54,0x30,0x0A,0x5C,0x4D,0x4D,  /* 00000288    "PRT0.\MM" */
   2.222 +    0x49,0x4E,0x8A,0x50,0x52,0x54,0x30,0x0A,  /* 00000290    "IN.PRT0." */
   2.223 +    0x60,0x4D,0x4D,0x41,0x58,0x8A,0x50,0x52,  /* 00000298    "`MMAX.PR" */
   2.224 +    0x54,0x30,0x0A,0x68,0x4D,0x4C,0x45,0x4E,  /* 000002A0    "T0.hMLEN" */
   2.225 +    0x70,0x50,0x4D,0x49,0x4E,0x4D,0x4D,0x49,  /* 000002A8    "pPMINMMI" */
   2.226 +    0x4E,0x70,0x50,0x4C,0x45,0x4E,0x4D,0x4C,  /* 000002B0    "NpPLENML" */
   2.227 +    0x45,0x4E,0x72,0x4D,0x4D,0x49,0x4E,0x4D,  /* 000002B8    "ENrMMINM" */
   2.228 +    0x4C,0x45,0x4E,0x4D,0x4D,0x41,0x58,0x74,  /* 000002C0    "LENMMAXt" */
   2.229 +    0x4D,0x4D,0x41,0x58,0x01,0x4D,0x4D,0x41,  /* 000002C8    "MMAX.MMA" */
   2.230 +    0x58,0xA4,0x50,0x52,0x54,0x30,0x08,0x42,  /* 000002D0    "X.PRT0.B" */
   2.231 +    0x55,0x46,0x41,0x11,0x09,0x0A,0x06,0x23,  /* 000002D8    "UFA....#" */
   2.232 +    0x20,0x0C,0x18,0x79,0x00,0x08,0x42,0x55,  /* 000002E0    " ..y..BU" */
   2.233 +    0x46,0x42,0x11,0x09,0x0A,0x06,0x23,0x00,  /* 000002E8    "FB....#." */
   2.234 +    0x00,0x18,0x79,0x00,0x8B,0x42,0x55,0x46,  /* 000002F0    "..y..BUF" */
   2.235 +    0x42,0x01,0x49,0x52,0x51,0x56,0x5B,0x82,  /* 000002F8    "B.IRQV[." */
   2.236 +    0x48,0x08,0x4C,0x4E,0x4B,0x41,0x08,0x5F,  /* 00000300    "H.LNKA._" */
   2.237 +    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,  /* 00000308    "HID.A..." */
   2.238 +    0x08,0x5F,0x55,0x49,0x44,0x01,0x14,0x1C,  /* 00000310    "._UID..." */
   2.239 +    0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,0x49,  /* 00000318    "_STA.{PI" */
   2.240 +    0x52,0x41,0x0A,0x80,0x60,0xA0,0x08,0x93,  /* 00000320    "RA..`..." */
   2.241 +    0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,  /* 00000328    "`......." */
   2.242 +    0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,  /* 00000330    "....._PR" */
   2.243 +    0x53,0x00,0xA4,0x42,0x55,0x46,0x41,0x14,  /* 00000338    "S..BUFA." */
   2.244 +    0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,  /* 00000340    "._DIS.}P" */
   2.245 +    0x49,0x52,0x41,0x0A,0x80,0x50,0x49,0x52,  /* 00000348    "IRA..PIR" */
   2.246 +    0x41,0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,  /* 00000350    "A.._CRS." */
   2.247 +    0x7B,0x50,0x49,0x52,0x41,0x0A,0x0F,0x60,  /* 00000358    "{PIRA..`" */
   2.248 +    0x79,0x01,0x60,0x49,0x52,0x51,0x56,0xA4,  /* 00000360    "y.`IRQV." */
   2.249 +    0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,  /* 00000368    "BUFB.._S" */
   2.250 +    0x52,0x53,0x01,0x8B,0x68,0x01,0x49,0x52,  /* 00000370    "RS..h.IR" */
   2.251 +    0x51,0x31,0x82,0x49,0x52,0x51,0x31,0x60,  /* 00000378    "Q1.IRQ1`" */
   2.252 +    0x76,0x60,0x70,0x60,0x50,0x49,0x52,0x41,  /* 00000380    "v`p`PIRA" */
   2.253 +    0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B,0x42,  /* 00000388    "[.I.LNKB" */
   2.254 +    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000390    "._HID.A." */
   2.255 +    0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,  /* 00000398    "..._UID." */
   2.256 +    0x02,0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,  /* 000003A0    "..._STA." */
   2.257 +    0x7B,0x50,0x49,0x52,0x42,0x0A,0x80,0x60,  /* 000003A8    "{PIRB..`" */
   2.258 +    0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,  /* 000003B0    "...`...." */
   2.259 +    0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,  /* 000003B8    "........" */
   2.260 +    0x5F,0x50,0x52,0x53,0x00,0xA4,0x42,0x55,  /* 000003C0    "_PRS..BU" */
   2.261 +    0x46,0x41,0x14,0x11,0x5F,0x44,0x49,0x53,  /* 000003C8    "FA.._DIS" */
   2.262 +    0x00,0x7D,0x50,0x49,0x52,0x42,0x0A,0x80,  /* 000003D0    ".}PIRB.." */
   2.263 +    0x50,0x49,0x52,0x42,0x14,0x1A,0x5F,0x43,  /* 000003D8    "PIRB.._C" */
   2.264 +    0x52,0x53,0x00,0x7B,0x50,0x49,0x52,0x42,  /* 000003E0    "RS.{PIRB" */
   2.265 +    0x0A,0x0F,0x60,0x79,0x01,0x60,0x49,0x52,  /* 000003E8    "..`y.`IR" */
   2.266 +    0x51,0x56,0xA4,0x42,0x55,0x46,0x42,0x14,  /* 000003F0    "QV.BUFB." */
   2.267 +    0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,  /* 000003F8    "._SRS..h" */
   2.268 +    0x01,0x49,0x52,0x51,0x31,0x82,0x49,0x52,  /* 00000400    ".IRQ1.IR" */
   2.269 +    0x51,0x31,0x60,0x76,0x60,0x70,0x60,0x50,  /* 00000408    "Q1`v`p`P" */
   2.270 +    0x49,0x52,0x42,0x5B,0x82,0x49,0x08,0x4C,  /* 00000410    "IRB[.I.L" */
   2.271 +    0x4E,0x4B,0x43,0x08,0x5F,0x48,0x49,0x44,  /* 00000418    "NKC._HID" */
   2.272 +    0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,  /* 00000420    ".A...._U" */
   2.273 +    0x49,0x44,0x0A,0x03,0x14,0x1C,0x5F,0x53,  /* 00000428    "ID...._S" */
   2.274 +    0x54,0x41,0x00,0x7B,0x50,0x49,0x52,0x43,  /* 00000430    "TA.{PIRC" */
   2.275 +    0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,  /* 00000438    "..`...`." */
   2.276 +    0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,  /* 00000440    "........" */
   2.277 +    0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,  /* 00000448    "..._PRS." */
   2.278 +    0xA4,0x42,0x55,0x46,0x41,0x14,0x11,0x5F,  /* 00000450    ".BUFA.._" */
   2.279 +    0x44,0x49,0x53,0x00,0x7D,0x50,0x49,0x52,  /* 00000458    "DIS.}PIR" */
   2.280 +    0x43,0x0A,0x80,0x50,0x49,0x52,0x43,0x14,  /* 00000460    "C..PIRC." */
   2.281 +    0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,  /* 00000468    "._CRS.{P" */
   2.282 +    0x49,0x52,0x43,0x0A,0x0F,0x60,0x79,0x01,  /* 00000470    "IRC..`y." */
   2.283 +    0x60,0x49,0x52,0x51,0x56,0xA4,0x42,0x55,  /* 00000478    "`IRQV.BU" */
   2.284 +    0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,  /* 00000480    "FB.._SRS" */
   2.285 +    0x01,0x8B,0x68,0x01,0x49,0x52,0x51,0x31,  /* 00000488    "..h.IRQ1" */
   2.286 +    0x82,0x49,0x52,0x51,0x31,0x60,0x76,0x60,  /* 00000490    ".IRQ1`v`" */
   2.287 +    0x70,0x60,0x50,0x49,0x52,0x43,0x5B,0x82,  /* 00000498    "p`PIRC[." */
   2.288 +    0x49,0x08,0x4C,0x4E,0x4B,0x44,0x08,0x5F,  /* 000004A0    "I.LNKD._" */
   2.289 +    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F,  /* 000004A8    "HID.A..." */
   2.290 +    0x08,0x5F,0x55,0x49,0x44,0x0A,0x04,0x14,  /* 000004B0    "._UID..." */
   2.291 +    0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,0x50,  /* 000004B8    "._STA.{P" */
   2.292 +    0x49,0x52,0x44,0x0A,0x80,0x60,0xA0,0x08,  /* 000004C0    "IRD..`.." */
   2.293 +    0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1,  /* 000004C8    ".`......" */
   2.294 +    0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50,  /* 000004D0    "......_P" */
   2.295 +    0x52,0x53,0x00,0xA4,0x42,0x55,0x46,0x41,  /* 000004D8    "RS..BUFA" */
   2.296 +    0x14,0x11,0x5F,0x44,0x49,0x53,0x00,0x7D,  /* 000004E0    ".._DIS.}" */
   2.297 +    0x50,0x49,0x52,0x44,0x0A,0x80,0x50,0x49,  /* 000004E8    "PIRD..PI" */
   2.298 +    0x52,0x44,0x14,0x1A,0x5F,0x43,0x52,0x53,  /* 000004F0    "RD.._CRS" */
   2.299 +    0x00,0x7B,0x50,0x49,0x52,0x44,0x0A,0x0F,  /* 000004F8    ".{PIRD.." */
   2.300 +    0x60,0x79,0x01,0x60,0x49,0x52,0x51,0x56,  /* 00000500    "`y.`IRQV" */
   2.301 +    0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,0x5F,  /* 00000508    ".BUFB.._" */
   2.302 +    0x53,0x52,0x53,0x01,0x8B,0x68,0x01,0x49,  /* 00000510    "SRS..h.I" */
   2.303 +    0x52,0x51,0x31,0x82,0x49,0x52,0x51,0x31,  /* 00000518    "RQ1.IRQ1" */
   2.304 +    0x60,0x76,0x60,0x70,0x60,0x50,0x49,0x52,  /* 00000520    "`v`p`PIR" */
   2.305 +    0x44,0x5B,0x82,0x44,0x05,0x48,0x50,0x45,  /* 00000528    "D[.D.HPE" */
   2.306 +    0x54,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000530    "T._HID.A" */
   2.307 +    0xD0,0x01,0x03,0x08,0x5F,0x55,0x49,0x44,  /* 00000538    "...._UID" */
   2.308 +    0x00,0x14,0x18,0x5F,0x53,0x54,0x41,0x00,  /* 00000540    "..._STA." */
   2.309 +    0xA0,0x0C,0x93,0x5E,0x5E,0x5E,0x48,0x50,  /* 00000548    "...^^^HP" */
   2.310 +    0x45,0x54,0x00,0xA4,0x00,0xA1,0x04,0xA4,  /* 00000550    "ET......" */
   2.311 +    0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 00000558    "..._CRS." */
   2.312 +    0x1F,0x0A,0x1C,0x87,0x17,0x00,0x00,0x0D,  /* 00000560    "........" */
   2.313 +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,  /* 00000568    "........" */
   2.314 +    0xFE,0xFF,0x03,0xD0,0xFE,0x00,0x00,0x00,  /* 00000570    "........" */
   2.315 +    0x00,0x00,0x04,0x00,0x00,0x79,0x00,0x14,  /* 00000578    ".....y.." */
   2.316 +    0x16,0x5F,0x50,0x52,0x54,0x00,0xA0,0x0A,  /* 00000580    "._PRT..." */
   2.317 +    0x50,0x49,0x43,0x44,0xA4,0x50,0x52,0x54,  /* 00000588    "PICD.PRT" */
   2.318 +    0x41,0xA4,0x50,0x52,0x54,0x50,0x08,0x50,  /* 00000590    "A.PRTP.P" */
   2.319 +    0x52,0x54,0x50,0x12,0x49,0x36,0x3C,0x12,  /* 00000598    "RTP.I6<." */
   2.320 +    0x0D,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x00,  /* 000005A0    "........" */
   2.321 +    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 000005A8    "LNKB...." */
   2.322 +    0x0C,0xFF,0xFF,0x01,0x00,0x01,0x4C,0x4E,  /* 000005B0    "......LN" */
   2.323 +    0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000005B8    "KC......" */
   2.324 +    0xFF,0x01,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 000005C0    ".....LNK" */
   2.325 +    0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 000005C8    "D......." */
   2.326 +    0x01,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41,  /* 000005D0    "....LNKA" */
   2.327      0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x02,  /* 000005D8    "........" */
   2.328 -    0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 000005E0    "..LNKD.." */
   2.329 -    0x0E,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,  /* 000005E8    "........" */
   2.330 -    0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,  /* 000005F0    ".LNKA..." */
   2.331 -    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x03,  /* 000005F8    "........" */
   2.332 -    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 00000600    "LNKB...." */
   2.333 -    0x0C,0xFF,0xFF,0x03,0x00,0x00,0x4C,0x4E,  /* 00000608    "......LN" */
   2.334 -    0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000610    "KD......" */
   2.335 -    0xFF,0x03,0x00,0x01,0x4C,0x4E,0x4B,0x41,  /* 00000618    "....LNKA" */
   2.336 -    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03,  /* 00000620    "........" */
   2.337 -    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,  /* 00000628    "...LNKB." */
   2.338 -    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 00000630    "........" */
   2.339 -    0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 00000638    "..LNKC.." */
   2.340 -    0x0D,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x00,  /* 00000640    "........" */
   2.341 -    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04,  /* 00000648    "LNKA...." */
   2.342 -    0x0C,0xFF,0xFF,0x04,0x00,0x01,0x4C,0x4E,  /* 00000650    "......LN" */
   2.343 -    0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000658    "KB......" */
   2.344 -    0xFF,0x04,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000660    ".....LNK" */
   2.345 -    0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000668    "C......." */
   2.346 -    0x04,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44,  /* 00000670    "....LNKD" */
   2.347 -    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x05,  /* 00000678    "........" */
   2.348 -    0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000680    "..LNKB.." */
   2.349 -    0x0D,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x01,  /* 00000688    "........" */
   2.350 -    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,  /* 00000690    "LNKC...." */
   2.351 -    0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x02,0x4C,  /* 00000698    ".......L" */
   2.352 -    0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,  /* 000006A0    "NKD....." */
   2.353 -    0xFF,0xFF,0x05,0x00,0x0A,0x03,0x4C,0x4E,  /* 000006A8    "......LN" */
   2.354 -    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000006B0    "KA......" */
   2.355 -    0xFF,0x06,0x00,0x00,0x4C,0x4E,0x4B,0x43,  /* 000006B8    "....LNKC" */
   2.356 +    0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 000005E0    "..LNKC.." */
   2.357 +    0x0D,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x01,  /* 000005E8    "........" */
   2.358 +    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,  /* 000005F0    "LNKD...." */
   2.359 +    0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x02,0x4C,  /* 000005F8    ".......L" */
   2.360 +    0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,  /* 00000600    "NKA....." */
   2.361 +    0xFF,0xFF,0x02,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000608    "......LN" */
   2.362 +    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000610    "KB......" */
   2.363 +    0xFF,0x03,0x00,0x00,0x4C,0x4E,0x4B,0x44,  /* 00000618    "....LNKD" */
   2.364 +    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x03,  /* 00000620    "........" */
   2.365 +    0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000628    "..LNKA.." */
   2.366 +    0x0E,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,  /* 00000630    "........" */
   2.367 +    0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,  /* 00000638    ".LNKB..." */
   2.368 +    0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x03,  /* 00000640    "........" */
   2.369 +    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000648    "LNKC...." */
   2.370 +    0x0C,0xFF,0xFF,0x04,0x00,0x00,0x4C,0x4E,  /* 00000650    "......LN" */
   2.371 +    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000658    "KA......" */
   2.372 +    0xFF,0x04,0x00,0x01,0x4C,0x4E,0x4B,0x42,  /* 00000660    "....LNKB" */
   2.373 +    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x04,  /* 00000668    "........" */
   2.374 +    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00,  /* 00000670    "...LNKC." */
   2.375 +    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x04,0x00,  /* 00000678    "........" */
   2.376 +    0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000680    "..LNKD.." */
   2.377 +    0x0D,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x00,  /* 00000688    "........" */
   2.378 +    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 00000690    "LNKB...." */
   2.379 +    0x0C,0xFF,0xFF,0x05,0x00,0x01,0x4C,0x4E,  /* 00000698    "......LN" */
   2.380 +    0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 000006A0    "KC......" */
   2.381 +    0xFF,0x05,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 000006A8    ".....LNK" */
   2.382 +    0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 000006B0    "D......." */
   2.383 +    0x05,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41,  /* 000006B8    "....LNKA" */
   2.384      0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x06,  /* 000006C0    "........" */
   2.385 -    0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 000006C8    "..LNKD.." */
   2.386 -    0x0E,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A,  /* 000006D0    "........" */
   2.387 -    0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,  /* 000006D8    ".LNKA..." */
   2.388 -    0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x03,  /* 000006E0    "........" */
   2.389 -    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 000006E8    "LNKB...." */
   2.390 -    0x0C,0xFF,0xFF,0x07,0x00,0x00,0x4C,0x4E,  /* 000006F0    "......LN" */
   2.391 -    0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000006F8    "KD......" */
   2.392 -    0xFF,0x07,0x00,0x01,0x4C,0x4E,0x4B,0x41,  /* 00000700    "....LNKA" */
   2.393 -    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x07,  /* 00000708    "........" */
   2.394 -    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,  /* 00000710    "...LNKB." */
   2.395 -    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x07,0x00,  /* 00000718    "........" */
   2.396 -    0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 00000720    "..LNKC.." */
   2.397 -    0x0D,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x00,  /* 00000728    "........" */
   2.398 -    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04,  /* 00000730    "LNKA...." */
   2.399 -    0x0C,0xFF,0xFF,0x08,0x00,0x01,0x4C,0x4E,  /* 00000738    "......LN" */
   2.400 -    0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000740    "KB......" */
   2.401 -    0xFF,0x08,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000748    ".....LNK" */
   2.402 -    0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000750    "C......." */
   2.403 -    0x08,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44,  /* 00000758    "....LNKD" */
   2.404 -    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x09,  /* 00000760    "........" */
   2.405 -    0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000768    "..LNKB.." */
   2.406 -    0x0D,0x04,0x0C,0xFF,0xFF,0x09,0x00,0x01,  /* 00000770    "........" */
   2.407 -    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,  /* 00000778    "LNKC...." */
   2.408 -    0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x02,0x4C,  /* 00000780    ".......L" */
   2.409 -    0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,  /* 00000788    "NKD....." */
   2.410 -    0xFF,0xFF,0x09,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000790    "......LN" */
   2.411 -    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000798    "KA......" */
   2.412 -    0xFF,0x0A,0x00,0x00,0x4C,0x4E,0x4B,0x43,  /* 000007A0    "....LNKC" */
   2.413 +    0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 000006C8    "..LNKC.." */
   2.414 +    0x0D,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x01,  /* 000006D0    "........" */
   2.415 +    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,  /* 000006D8    "LNKD...." */
   2.416 +    0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x02,0x4C,  /* 000006E0    ".......L" */
   2.417 +    0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,  /* 000006E8    "NKA....." */
   2.418 +    0xFF,0xFF,0x06,0x00,0x0A,0x03,0x4C,0x4E,  /* 000006F0    "......LN" */
   2.419 +    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000006F8    "KB......" */
   2.420 +    0xFF,0x07,0x00,0x00,0x4C,0x4E,0x4B,0x44,  /* 00000700    "....LNKD" */
   2.421 +    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x07,  /* 00000708    "........" */
   2.422 +    0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 00000710    "..LNKA.." */
   2.423 +    0x0E,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A,  /* 00000718    "........" */
   2.424 +    0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,  /* 00000720    ".LNKB..." */
   2.425 +    0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x03,  /* 00000728    "........" */
   2.426 +    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000730    "LNKC...." */
   2.427 +    0x0C,0xFF,0xFF,0x08,0x00,0x00,0x4C,0x4E,  /* 00000738    "......LN" */
   2.428 +    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000740    "KA......" */
   2.429 +    0xFF,0x08,0x00,0x01,0x4C,0x4E,0x4B,0x42,  /* 00000748    "....LNKB" */
   2.430 +    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x08,  /* 00000750    "........" */
   2.431 +    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00,  /* 00000758    "...LNKC." */
   2.432 +    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x08,0x00,  /* 00000760    "........" */
   2.433 +    0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000768    "..LNKD.." */
   2.434 +    0x0D,0x04,0x0C,0xFF,0xFF,0x09,0x00,0x00,  /* 00000770    "........" */
   2.435 +    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 00000778    "LNKB...." */
   2.436 +    0x0C,0xFF,0xFF,0x09,0x00,0x01,0x4C,0x4E,  /* 00000780    "......LN" */
   2.437 +    0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000788    "KC......" */
   2.438 +    0xFF,0x09,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000790    ".....LNK" */
   2.439 +    0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000798    "D......." */
   2.440 +    0x09,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41,  /* 000007A0    "....LNKA" */
   2.441      0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0A,  /* 000007A8    "........" */
   2.442 -    0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 000007B0    "..LNKD.." */
   2.443 -    0x0E,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A,  /* 000007B8    "........" */
   2.444 -    0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,  /* 000007C0    ".LNKA..." */
   2.445 -    0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x03,  /* 000007C8    "........" */
   2.446 -    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 000007D0    "LNKB...." */
   2.447 -    0x0C,0xFF,0xFF,0x0B,0x00,0x00,0x4C,0x4E,  /* 000007D8    "......LN" */
   2.448 -    0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000007E0    "KD......" */
   2.449 -    0xFF,0x0B,0x00,0x01,0x4C,0x4E,0x4B,0x41,  /* 000007E8    "....LNKA" */
   2.450 -    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0B,  /* 000007F0    "........" */
   2.451 -    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,  /* 000007F8    "...LNKB." */
   2.452 -    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0B,0x00,  /* 00000800    "........" */
   2.453 -    0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 00000808    "..LNKC.." */
   2.454 -    0x0D,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x00,  /* 00000810    "........" */
   2.455 -    0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04,  /* 00000818    "LNKA...." */
   2.456 -    0x0C,0xFF,0xFF,0x0C,0x00,0x01,0x4C,0x4E,  /* 00000820    "......LN" */
   2.457 -    0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000828    "KB......" */
   2.458 -    0xFF,0x0C,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000830    ".....LNK" */
   2.459 -    0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000838    "C......." */
   2.460 -    0x0C,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x44,  /* 00000840    "....LNKD" */
   2.461 -    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0D,  /* 00000848    "........" */
   2.462 -    0x00,0x00,0x4C,0x4E,0x4B,0x42,0x00,0x12,  /* 00000850    "..LNKB.." */
   2.463 -    0x0D,0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x01,  /* 00000858    "........" */
   2.464 -    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,  /* 00000860    "LNKC...." */
   2.465 -    0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x02,0x4C,  /* 00000868    ".......L" */
   2.466 -    0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,  /* 00000870    "NKD....." */
   2.467 -    0xFF,0xFF,0x0D,0x00,0x0A,0x03,0x4C,0x4E,  /* 00000878    "......LN" */
   2.468 -    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000880    "KA......" */
   2.469 -    0xFF,0x0E,0x00,0x00,0x4C,0x4E,0x4B,0x43,  /* 00000888    "....LNKC" */
   2.470 +    0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 000007B0    "..LNKC.." */
   2.471 +    0x0D,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x01,  /* 000007B8    "........" */
   2.472 +    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,  /* 000007C0    "LNKD...." */
   2.473 +    0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x02,0x4C,  /* 000007C8    ".......L" */
   2.474 +    0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,  /* 000007D0    "NKA....." */
   2.475 +    0xFF,0xFF,0x0A,0x00,0x0A,0x03,0x4C,0x4E,  /* 000007D8    "......LN" */
   2.476 +    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000007E0    "KB......" */
   2.477 +    0xFF,0x0B,0x00,0x00,0x4C,0x4E,0x4B,0x44,  /* 000007E8    "....LNKD" */
   2.478 +    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0B,  /* 000007F0    "........" */
   2.479 +    0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 000007F8    "..LNKA.." */
   2.480 +    0x0E,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A,  /* 00000800    "........" */
   2.481 +    0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,  /* 00000808    ".LNKB..." */
   2.482 +    0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x03,  /* 00000810    "........" */
   2.483 +    0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04,  /* 00000818    "LNKC...." */
   2.484 +    0x0C,0xFF,0xFF,0x0C,0x00,0x00,0x4C,0x4E,  /* 00000820    "......LN" */
   2.485 +    0x4B,0x41,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 00000828    "KA......" */
   2.486 +    0xFF,0x0C,0x00,0x01,0x4C,0x4E,0x4B,0x42,  /* 00000830    "....LNKB" */
   2.487 +    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0C,  /* 00000838    "........" */
   2.488 +    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x43,0x00,  /* 00000840    "...LNKC." */
   2.489 +    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0C,0x00,  /* 00000848    "........" */
   2.490 +    0x0A,0x03,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000850    "..LNKD.." */
   2.491 +    0x0D,0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x00,  /* 00000858    "........" */
   2.492 +    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 00000860    "LNKB...." */
   2.493 +    0x0C,0xFF,0xFF,0x0D,0x00,0x01,0x4C,0x4E,  /* 00000868    "......LN" */
   2.494 +    0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C,0xFF,  /* 00000870    "KC......" */
   2.495 +    0xFF,0x0D,0x00,0x0A,0x02,0x4C,0x4E,0x4B,  /* 00000878    ".....LNK" */
   2.496 +    0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,  /* 00000880    "D......." */
   2.497 +    0x0D,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x41,  /* 00000888    "....LNKA" */
   2.498      0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0E,  /* 00000890    "........" */
   2.499 -    0x00,0x01,0x4C,0x4E,0x4B,0x44,0x00,0x12,  /* 00000898    "..LNKD.." */
   2.500 -    0x0E,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A,  /* 000008A0    "........" */
   2.501 -    0x02,0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,  /* 000008A8    ".LNKA..." */
   2.502 -    0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x03,  /* 000008B0    "........" */
   2.503 -    0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0D,0x04,  /* 000008B8    "LNKB...." */
   2.504 -    0x0C,0xFF,0xFF,0x0F,0x00,0x00,0x4C,0x4E,  /* 000008C0    "......LN" */
   2.505 -    0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000008C8    "KD......" */
   2.506 -    0xFF,0x0F,0x00,0x01,0x4C,0x4E,0x4B,0x41,  /* 000008D0    "....LNKA" */
   2.507 -    0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0F,  /* 000008D8    "........" */
   2.508 -    0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x42,0x00,  /* 000008E0    "...LNKB." */
   2.509 -    0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0F,0x00,  /* 000008E8    "........" */
   2.510 -    0x0A,0x03,0x4C,0x4E,0x4B,0x43,0x00,0x08,  /* 000008F0    "..LNKC.." */
   2.511 -    0x50,0x52,0x54,0x41,0x12,0x41,0x2F,0x3C,  /* 000008F8    "PRTA.A/<" */
   2.512 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 00000900    "........" */
   2.513 -    0x00,0x00,0x0A,0x14,0x12,0x0B,0x04,0x0C,  /* 00000908    "........" */
   2.514 -    0xFF,0xFF,0x01,0x00,0x01,0x00,0x0A,0x15,  /* 00000910    "........" */
   2.515 -    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x01,0x00,  /* 00000918    "........" */
   2.516 -    0x0A,0x02,0x00,0x0A,0x16,0x12,0x0C,0x04,  /* 00000920    "........" */
   2.517 -    0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x03,0x00,  /* 00000928    "........" */
   2.518 -    0x0A,0x17,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000930    "........" */
   2.519 -    0x02,0x00,0x00,0x00,0x0A,0x18,0x12,0x0B,  /* 00000938    "........" */
   2.520 -    0x04,0x0C,0xFF,0xFF,0x02,0x00,0x01,0x00,  /* 00000940    "........" */
   2.521 -    0x0A,0x19,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000948    "........" */
   2.522 -    0x02,0x00,0x0A,0x02,0x00,0x0A,0x1A,0x12,  /* 00000950    "........" */
   2.523 -    0x0C,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,  /* 00000958    "........" */
   2.524 -    0x03,0x00,0x0A,0x1B,0x12,0x0B,0x04,0x0C,  /* 00000960    "........" */
   2.525 -    0xFF,0xFF,0x03,0x00,0x00,0x00,0x0A,0x1C,  /* 00000968    "........" */
   2.526 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x03,0x00,  /* 00000970    "........" */
   2.527 -    0x01,0x00,0x0A,0x1D,0x12,0x0C,0x04,0x0C,  /* 00000978    "........" */
   2.528 -    0xFF,0xFF,0x03,0x00,0x0A,0x02,0x00,0x0A,  /* 00000980    "........" */
   2.529 -    0x1E,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x03,  /* 00000988    "........" */
   2.530 -    0x00,0x0A,0x03,0x00,0x0A,0x1F,0x12,0x0B,  /* 00000990    "........" */
   2.531 -    0x04,0x0C,0xFF,0xFF,0x04,0x00,0x00,0x00,  /* 00000998    "........" */
   2.532 -    0x0A,0x20,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 000009A0    ". ......" */
   2.533 -    0x04,0x00,0x01,0x00,0x0A,0x21,0x12,0x0C,  /* 000009A8    ".....!.." */
   2.534 -    0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x02,  /* 000009B0    "........" */
   2.535 -    0x00,0x0A,0x22,0x12,0x0C,0x04,0x0C,0xFF,  /* 000009B8    ".."....." */
   2.536 -    0xFF,0x04,0x00,0x0A,0x03,0x00,0x0A,0x23,  /* 000009C0    ".......#" */
   2.537 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x05,0x00,  /* 000009C8    "........" */
   2.538 -    0x00,0x00,0x0A,0x24,0x12,0x0B,0x04,0x0C,  /* 000009D0    "...$...." */
   2.539 -    0xFF,0xFF,0x05,0x00,0x01,0x00,0x0A,0x25,  /* 000009D8    ".......%" */
   2.540 -    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x05,0x00,  /* 000009E0    "........" */
   2.541 -    0x0A,0x02,0x00,0x0A,0x26,0x12,0x0C,0x04,  /* 000009E8    "....&..." */
   2.542 -    0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x03,0x00,  /* 000009F0    "........" */
   2.543 -    0x0A,0x27,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 000009F8    ".'......" */
   2.544 -    0x06,0x00,0x00,0x00,0x0A,0x28,0x12,0x0B,  /* 00000A00    ".....(.." */
   2.545 -    0x04,0x0C,0xFF,0xFF,0x06,0x00,0x01,0x00,  /* 00000A08    "........" */
   2.546 -    0x0A,0x29,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000A10    ".)......" */
   2.547 -    0x06,0x00,0x0A,0x02,0x00,0x0A,0x2A,0x12,  /* 00000A18    "......*." */
   2.548 -    0x0C,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A,  /* 00000A20    "........" */
   2.549 -    0x03,0x00,0x0A,0x2B,0x12,0x0B,0x04,0x0C,  /* 00000A28    "...+...." */
   2.550 -    0xFF,0xFF,0x07,0x00,0x00,0x00,0x0A,0x2C,  /* 00000A30    ".......," */
   2.551 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x07,0x00,  /* 00000A38    "........" */
   2.552 -    0x01,0x00,0x0A,0x2D,0x12,0x0C,0x04,0x0C,  /* 00000A40    "...-...." */
   2.553 -    0xFF,0xFF,0x07,0x00,0x0A,0x02,0x00,0x0A,  /* 00000A48    "........" */
   2.554 -    0x2E,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x07,  /* 00000A50    "........" */
   2.555 -    0x00,0x0A,0x03,0x00,0x0A,0x2F,0x12,0x0B,  /* 00000A58    "...../.." */
   2.556 -    0x04,0x0C,0xFF,0xFF,0x08,0x00,0x00,0x00,  /* 00000A60    "........" */
   2.557 -    0x0A,0x11,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000A68    "........" */
   2.558 -    0x08,0x00,0x01,0x00,0x0A,0x12,0x12,0x0C,  /* 00000A70    "........" */
   2.559 -    0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x02,  /* 00000A78    "........" */
   2.560 -    0x00,0x0A,0x13,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000A80    "........" */
   2.561 -    0xFF,0x08,0x00,0x0A,0x03,0x00,0x0A,0x14,  /* 00000A88    "........" */
   2.562 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x09,0x00,  /* 00000A90    "........" */
   2.563 -    0x00,0x00,0x0A,0x15,0x12,0x0B,0x04,0x0C,  /* 00000A98    "........" */
   2.564 -    0xFF,0xFF,0x09,0x00,0x01,0x00,0x0A,0x16,  /* 00000AA0    "........" */
   2.565 -    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x09,0x00,  /* 00000AA8    "........" */
   2.566 -    0x0A,0x02,0x00,0x0A,0x17,0x12,0x0C,0x04,  /* 00000AB0    "........" */
   2.567 -    0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x03,0x00,  /* 00000AB8    "........" */
   2.568 -    0x0A,0x18,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000AC0    "........" */
   2.569 -    0x0A,0x00,0x00,0x00,0x0A,0x19,0x12,0x0B,  /* 00000AC8    "........" */
   2.570 -    0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x01,0x00,  /* 00000AD0    "........" */
   2.571 -    0x0A,0x1A,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000AD8    "........" */
   2.572 -    0x0A,0x00,0x0A,0x02,0x00,0x0A,0x1B,0x12,  /* 00000AE0    "........" */
   2.573 -    0x0C,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A,  /* 00000AE8    "........" */
   2.574 -    0x03,0x00,0x0A,0x1C,0x12,0x0B,0x04,0x0C,  /* 00000AF0    "........" */
   2.575 -    0xFF,0xFF,0x0B,0x00,0x00,0x00,0x0A,0x1D,  /* 00000AF8    "........" */
   2.576 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0B,0x00,  /* 00000B00    "........" */
   2.577 -    0x01,0x00,0x0A,0x1E,0x12,0x0C,0x04,0x0C,  /* 00000B08    "........" */
   2.578 -    0xFF,0xFF,0x0B,0x00,0x0A,0x02,0x00,0x0A,  /* 00000B10    "........" */
   2.579 -    0x1F,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0B,  /* 00000B18    "........" */
   2.580 -    0x00,0x0A,0x03,0x00,0x0A,0x20,0x12,0x0B,  /* 00000B20    "..... .." */
   2.581 -    0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x00,0x00,  /* 00000B28    "........" */
   2.582 -    0x0A,0x21,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000B30    ".!......" */
   2.583 -    0x0C,0x00,0x01,0x00,0x0A,0x22,0x12,0x0C,  /* 00000B38    ".....".." */
   2.584 -    0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A,0x02,  /* 00000B40    "........" */
   2.585 -    0x00,0x0A,0x23,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000B48    "..#....." */
   2.586 -    0xFF,0x0C,0x00,0x0A,0x03,0x00,0x0A,0x24,  /* 00000B50    ".......$" */
   2.587 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0D,0x00,  /* 00000B58    "........" */
   2.588 -    0x00,0x00,0x0A,0x25,0x12,0x0B,0x04,0x0C,  /* 00000B60    "...%...." */
   2.589 -    0xFF,0xFF,0x0D,0x00,0x01,0x00,0x0A,0x26,  /* 00000B68    ".......&" */
   2.590 -    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0D,0x00,  /* 00000B70    "........" */
   2.591 -    0x0A,0x02,0x00,0x0A,0x27,0x12,0x0C,0x04,  /* 00000B78    "....'..." */
   2.592 -    0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x03,0x00,  /* 00000B80    "........" */
   2.593 -    0x0A,0x28,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000B88    ".(......" */
   2.594 -    0x0E,0x00,0x00,0x00,0x0A,0x29,0x12,0x0B,  /* 00000B90    ".....).." */
   2.595 -    0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x01,0x00,  /* 00000B98    "........" */
   2.596 -    0x0A,0x2A,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000BA0    ".*......" */
   2.597 -    0x0E,0x00,0x0A,0x02,0x00,0x0A,0x2B,0x12,  /* 00000BA8    "......+." */
   2.598 -    0x0C,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A,  /* 00000BB0    "........" */
   2.599 -    0x03,0x00,0x0A,0x2C,0x12,0x0B,0x04,0x0C,  /* 00000BB8    "...,...." */
   2.600 -    0xFF,0xFF,0x0F,0x00,0x00,0x00,0x0A,0x2D,  /* 00000BC0    ".......-" */
   2.601 -    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0F,0x00,  /* 00000BC8    "........" */
   2.602 -    0x01,0x00,0x0A,0x2E,0x12,0x0C,0x04,0x0C,  /* 00000BD0    "........" */
   2.603 -    0xFF,0xFF,0x0F,0x00,0x0A,0x02,0x00,0x0A,  /* 00000BD8    "........" */
   2.604 -    0x2F,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0F,  /* 00000BE0    "/......." */
   2.605 -    0x00,0x0A,0x03,0x00,0x0A,0x10,0x5B,0x82,  /* 00000BE8    "......[." */
   2.606 -    0x46,0x37,0x49,0x53,0x41,0x5F,0x08,0x5F,  /* 00000BF0    "F7ISA_._" */
   2.607 -    0x41,0x44,0x52,0x0C,0x00,0x00,0x01,0x00,  /* 00000BF8    "ADR....." */
   2.608 -    0x5B,0x80,0x50,0x49,0x52,0x51,0x02,0x0A,  /* 00000C00    "[.PIRQ.." */
   2.609 -    0x60,0x0A,0x04,0x10,0x2E,0x5C,0x00,0x5B,  /* 00000C08    "`....\.[" */
   2.610 -    0x81,0x29,0x5C,0x2F,0x04,0x5F,0x53,0x42,  /* 00000C10    ".)\/._SB" */
   2.611 -    0x5F,0x50,0x43,0x49,0x30,0x49,0x53,0x41,  /* 00000C18    "_PCI0ISA" */
   2.612 -    0x5F,0x50,0x49,0x52,0x51,0x01,0x50,0x49,  /* 00000C20    "_PIRQ.PI" */
   2.613 -    0x52,0x41,0x08,0x50,0x49,0x52,0x42,0x08,  /* 00000C28    "RA.PIRB." */
   2.614 -    0x50,0x49,0x52,0x43,0x08,0x50,0x49,0x52,  /* 00000C30    "PIRC.PIR" */
   2.615 -    0x44,0x08,0x5B,0x82,0x46,0x0B,0x53,0x59,  /* 00000C38    "D.[.F.SY" */
   2.616 -    0x53,0x52,0x08,0x5F,0x48,0x49,0x44,0x0C,  /* 00000C40    "SR._HID." */
   2.617 -    0x41,0xD0,0x0C,0x02,0x08,0x5F,0x55,0x49,  /* 00000C48    "A...._UI" */
   2.618 -    0x44,0x01,0x08,0x43,0x52,0x53,0x5F,0x11,  /* 00000C50    "D..CRS_." */
   2.619 -    0x4E,0x08,0x0A,0x8A,0x47,0x01,0x10,0x00,  /* 00000C58    "N...G..." */
   2.620 -    0x10,0x00,0x00,0x10,0x47,0x01,0x22,0x00,  /* 00000C60    "....G."." */
   2.621 -    0x22,0x00,0x00,0x0C,0x47,0x01,0x30,0x00,  /* 00000C68    ""...G.0." */
   2.622 -    0x30,0x00,0x00,0x10,0x47,0x01,0x44,0x00,  /* 00000C70    "0...G.D." */
   2.623 -    0x44,0x00,0x00,0x1C,0x47,0x01,0x62,0x00,  /* 00000C78    "D...G.b." */
   2.624 -    0x62,0x00,0x00,0x02,0x47,0x01,0x65,0x00,  /* 00000C80    "b...G.e." */
   2.625 -    0x65,0x00,0x00,0x0B,0x47,0x01,0x72,0x00,  /* 00000C88    "e...G.r." */
   2.626 -    0x72,0x00,0x00,0x0E,0x47,0x01,0x80,0x00,  /* 00000C90    "r...G..." */
   2.627 -    0x80,0x00,0x00,0x01,0x47,0x01,0x84,0x00,  /* 00000C98    "....G..." */
   2.628 -    0x84,0x00,0x00,0x03,0x47,0x01,0x88,0x00,  /* 00000CA0    "....G..." */
   2.629 -    0x88,0x00,0x00,0x01,0x47,0x01,0x8C,0x00,  /* 00000CA8    "....G..." */
   2.630 -    0x8C,0x00,0x00,0x03,0x47,0x01,0x90,0x00,  /* 00000CB0    "....G..." */
   2.631 -    0x90,0x00,0x00,0x10,0x47,0x01,0xA2,0x00,  /* 00000CB8    "....G..." */
   2.632 -    0xA2,0x00,0x00,0x1C,0x47,0x01,0xE0,0x00,  /* 00000CC0    "....G..." */
   2.633 -    0xE0,0x00,0x00,0x10,0x47,0x01,0xA0,0x08,  /* 00000CC8    "....G..." */
   2.634 -    0xA0,0x08,0x00,0x04,0x47,0x01,0xC0,0x0C,  /* 00000CD0    "....G..." */
   2.635 -    0xC0,0x0C,0x00,0x10,0x47,0x01,0xD0,0x04,  /* 00000CD8    "....G..." */
   2.636 -    0xD0,0x04,0x00,0x02,0x79,0x00,0x14,0x0B,  /* 00000CE0    "....y..." */
   2.637 -    0x5F,0x43,0x52,0x53,0x00,0xA4,0x43,0x52,  /* 00000CE8    "_CRS..CR" */
   2.638 -    0x53,0x5F,0x5B,0x82,0x2B,0x50,0x49,0x43,  /* 00000CF0    "S_[.+PIC" */
   2.639 -    0x5F,0x08,0x5F,0x48,0x49,0x44,0x0B,0x41,  /* 00000CF8    "_._HID.A" */
   2.640 -    0xD0,0x08,0x5F,0x43,0x52,0x53,0x11,0x18,  /* 00000D00    ".._CRS.." */
   2.641 -    0x0A,0x15,0x47,0x01,0x20,0x00,0x20,0x00,  /* 00000D08    "..G. . ." */
   2.642 -    0x01,0x02,0x47,0x01,0xA0,0x00,0xA0,0x00,  /* 00000D10    "..G....." */
   2.643 -    0x01,0x02,0x22,0x04,0x00,0x79,0x00,0x5B,  /* 00000D18    ".."..y.[" */
   2.644 -    0x82,0x47,0x05,0x44,0x4D,0x41,0x30,0x08,  /* 00000D20    ".G.DMA0." */
   2.645 -    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x02,  /* 00000D28    "_HID.A.." */
   2.646 -    0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x41,  /* 00000D30    ".._CRS.A" */
   2.647 -    0x04,0x0A,0x3D,0x2A,0x10,0x04,0x47,0x01,  /* 00000D38    "..=*..G." */
   2.648 -    0x00,0x00,0x00,0x00,0x00,0x10,0x47,0x01,  /* 00000D40    "......G." */
   2.649 -    0x81,0x00,0x81,0x00,0x00,0x03,0x47,0x01,  /* 00000D48    "......G." */
   2.650 -    0x87,0x00,0x87,0x00,0x00,0x01,0x47,0x01,  /* 00000D50    "......G." */
   2.651 -    0x89,0x00,0x89,0x00,0x00,0x03,0x47,0x01,  /* 00000D58    "......G." */
   2.652 -    0x8F,0x00,0x8F,0x00,0x00,0x01,0x47,0x01,  /* 00000D60    "......G." */
   2.653 -    0xC0,0x00,0xC0,0x00,0x00,0x20,0x47,0x01,  /* 00000D68    "..... G." */
   2.654 -    0x80,0x04,0x80,0x04,0x00,0x10,0x79,0x00,  /* 00000D70    "......y." */
   2.655 -    0x5B,0x82,0x25,0x54,0x4D,0x52,0x5F,0x08,  /* 00000D78    "[.%TMR_." */
   2.656 -    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x01,  /* 00000D80    "_HID.A.." */
   2.657 -    0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x10,  /* 00000D88    ".._CRS.." */
   2.658 -    0x0A,0x0D,0x47,0x01,0x40,0x00,0x40,0x00,  /* 00000D90    "..G.@.@." */
   2.659 -    0x00,0x04,0x22,0x01,0x00,0x79,0x00,0x5B,  /* 00000D98    ".."..y.[" */
   2.660 -    0x82,0x25,0x52,0x54,0x43,0x5F,0x08,0x5F,  /* 00000DA0    ".%RTC_._" */
   2.661 -    0x48,0x49,0x44,0x0C,0x41,0xD0,0x0B,0x00,  /* 00000DA8    "HID.A..." */
   2.662 -    0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,  /* 00000DB0    "._CRS..." */
   2.663 -    0x0D,0x47,0x01,0x70,0x00,0x70,0x00,0x00,  /* 00000DB8    ".G.p.p.." */
   2.664 -    0x02,0x22,0x00,0x01,0x79,0x00,0x5B,0x82,  /* 00000DC0    "."..y.[." */
   2.665 -    0x22,0x53,0x50,0x4B,0x52,0x08,0x5F,0x48,  /* 00000DC8    ""SPKR._H" */
   2.666 -    0x49,0x44,0x0C,0x41,0xD0,0x08,0x00,0x08,  /* 00000DD0    "ID.A...." */
   2.667 -    0x5F,0x43,0x52,0x53,0x11,0x0D,0x0A,0x0A,  /* 00000DD8    "_CRS...." */
   2.668 -    0x47,0x01,0x61,0x00,0x61,0x00,0x00,0x01,  /* 00000DE0    "G.a.a..." */
   2.669 -    0x79,0x00,0x5B,0x82,0x31,0x50,0x53,0x32,  /* 00000DE8    "y.[.1PS2" */
   2.670 -    0x4D,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,  /* 00000DF0    "M._HID.A" */
   2.671 -    0xD0,0x0F,0x13,0x08,0x5F,0x43,0x49,0x44,  /* 00000DF8    "...._CID" */
   2.672 -    0x0C,0x41,0xD0,0x0F,0x13,0x14,0x09,0x5F,  /* 00000E00    ".A....._" */
   2.673 -    0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,  /* 00000E08    "STA....." */
   2.674 -    0x5F,0x43,0x52,0x53,0x11,0x08,0x0A,0x05,  /* 00000E10    "_CRS...." */
   2.675 -    0x22,0x00,0x10,0x79,0x00,0x5B,0x82,0x42,  /* 00000E18    ""..y.[.B" */
   2.676 -    0x04,0x50,0x53,0x32,0x4B,0x08,0x5F,0x48,  /* 00000E20    ".PS2K._H" */
   2.677 -    0x49,0x44,0x0C,0x41,0xD0,0x03,0x03,0x08,  /* 00000E28    "ID.A...." */
   2.678 -    0x5F,0x43,0x49,0x44,0x0C,0x41,0xD0,0x03,  /* 00000E30    "_CID.A.." */
   2.679 -    0x0B,0x14,0x09,0x5F,0x53,0x54,0x41,0x00,  /* 00000E38    "..._STA." */
   2.680 -    0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,  /* 00000E40    "...._CRS" */
   2.681 -    0x11,0x18,0x0A,0x15,0x47,0x01,0x60,0x00,  /* 00000E48    "....G.`." */
   2.682 -    0x60,0x00,0x00,0x01,0x47,0x01,0x64,0x00,  /* 00000E50    "`...G.d." */
   2.683 -    0x64,0x00,0x00,0x01,0x22,0x02,0x00,0x79,  /* 00000E58    "d..."..y" */
   2.684 -    0x00,0x5B,0x82,0x3A,0x46,0x44,0x43,0x30,  /* 00000E60    ".[.:FDC0" */
   2.685 -    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000E68    "._HID.A." */
   2.686 -    0x07,0x00,0x14,0x09,0x5F,0x53,0x54,0x41,  /* 00000E70    "...._STA" */
   2.687 -    0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,  /* 00000E78    "....._CR" */
   2.688 -    0x53,0x11,0x1B,0x0A,0x18,0x47,0x01,0xF0,  /* 00000E80    "S....G.." */
   2.689 -    0x03,0xF0,0x03,0x01,0x06,0x47,0x01,0xF7,  /* 00000E88    ".....G.." */
   2.690 -    0x03,0xF7,0x03,0x01,0x01,0x22,0x40,0x00,  /* 00000E90    "....."@." */
   2.691 -    0x2A,0x04,0x00,0x79,0x00,0x5B,0x82,0x46,  /* 00000E98    "*..y.[.F" */
   2.692 -    0x04,0x55,0x41,0x52,0x31,0x08,0x5F,0x48,  /* 00000EA0    ".UAR1._H" */
   2.693 -    0x49,0x44,0x0C,0x41,0xD0,0x05,0x01,0x08,  /* 00000EA8    "ID.A...." */
   2.694 -    0x5F,0x55,0x49,0x44,0x01,0x14,0x19,0x5F,  /* 00000EB0    "_UID..._" */
   2.695 -    0x53,0x54,0x41,0x00,0xA0,0x0D,0x93,0x5E,  /* 00000EB8    "STA....^" */
   2.696 -    0x5E,0x5E,0x5E,0x55,0x41,0x52,0x31,0x00,  /* 00000EC0    "^^^UAR1." */
   2.697 -    0xA4,0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x08,  /* 00000EC8    "........" */
   2.698 -    0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,  /* 00000ED0    "_CRS...." */
   2.699 -    0x47,0x01,0xF8,0x03,0xF8,0x03,0x08,0x08,  /* 00000ED8    "G......." */
   2.700 -    0x22,0x10,0x00,0x79,0x00,0x5B,0x82,0x47,  /* 00000EE0    ""..y.[.G" */
   2.701 -    0x04,0x55,0x41,0x52,0x32,0x08,0x5F,0x48,  /* 00000EE8    ".UAR2._H" */
   2.702 -    0x49,0x44,0x0C,0x41,0xD0,0x05,0x01,0x08,  /* 00000EF0    "ID.A...." */
   2.703 -    0x5F,0x55,0x49,0x44,0x0A,0x02,0x14,0x19,  /* 00000EF8    "_UID...." */
   2.704 -    0x5F,0x53,0x54,0x41,0x00,0xA0,0x0D,0x93,  /* 00000F00    "_STA...." */
   2.705 -    0x5E,0x5E,0x5E,0x5E,0x55,0x41,0x52,0x32,  /* 00000F08    "^^^^UAR2" */
   2.706 -    0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A,0x0F,  /* 00000F10    "........" */
   2.707 -    0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,  /* 00000F18    "._CRS..." */
   2.708 -    0x0D,0x47,0x01,0xF8,0x02,0xF8,0x02,0x08,  /* 00000F20    ".G......" */
   2.709 -    0x08,0x22,0x08,0x00,0x79,0x00,0x5B,0x82,  /* 00000F28    "."..y.[." */
   2.710 -    0x36,0x4C,0x54,0x50,0x31,0x08,0x5F,0x48,  /* 00000F30    "6LTP1._H" */
   2.711 -    0x49,0x44,0x0C,0x41,0xD0,0x04,0x00,0x08,  /* 00000F38    "ID.A...." */
   2.712 -    0x5F,0x55,0x49,0x44,0x0A,0x02,0x14,0x09,  /* 00000F40    "_UID...." */
   2.713 -    0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,  /* 00000F48    "_STA...." */
   2.714 -    0x08,0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,  /* 00000F50    "._CRS..." */
   2.715 -    0x0D,0x47,0x01,0x78,0x03,0x78,0x03,0x08,  /* 00000F58    ".G.x.x.." */
   2.716 -    0x08,0x22,0x80,0x00,0x79,0x00,0x5B,0x82,  /* 00000F60    "."..y.[." */
   2.717 -    0x4D,0x07,0x53,0x31,0x46,0x30,0x08,0x5F,  /* 00000F68    "M.S1F0._" */
   2.718 -    0x41,0x44,0x52,0x0C,0x00,0x00,0x06,0x00,  /* 00000F70    "ADR....." */
   2.719 -    0x08,0x5F,0x53,0x55,0x4E,0x01,0x14,0x13,  /* 00000F78    "._SUN..." */
   2.720 -    0x5F,0x50,0x53,0x30,0x00,0x70,0x0A,0x80,  /* 00000F80    "_PS0.p.." */
   2.721 -    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00000F88    "\._GPEDP" */
   2.722 -    0x54,0x32,0x14,0x13,0x5F,0x50,0x53,0x33,  /* 00000F90    "T2.._PS3" */
   2.723 -    0x00,0x70,0x0A,0x83,0x5C,0x2E,0x5F,0x47,  /* 00000F98    ".p..\._G" */
   2.724 -    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x1F,  /* 00000FA0    "PEDPT2.." */
   2.725 -    0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,0x88,  /* 00000FA8    "_EJ0.p.." */
   2.726 -    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00000FB0    "\._GPEDP" */
   2.727 -    0x54,0x32,0x70,0x01,0x5C,0x2E,0x5F,0x47,  /* 00000FB8    "T2p.\._G" */
   2.728 -    0x50,0x45,0x50,0x48,0x50,0x31,0x14,0x1E,  /* 00000FC0    "PEPHP1.." */
   2.729 -    0x5F,0x53,0x54,0x41,0x00,0x70,0x0A,0x89,  /* 00000FC8    "_STA.p.." */
   2.730 -    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00000FD0    "\._GPEDP" */
   2.731 -    0x54,0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,  /* 00000FD8    "T2.\._GP" */
   2.732 -    0x45,0x50,0x48,0x50,0x31,0x5B,0x82,0x4E,  /* 00000FE0    "EPHP1[.N" */
   2.733 -    0x07,0x53,0x32,0x46,0x30,0x08,0x5F,0x41,  /* 00000FE8    ".S2F0._A" */
   2.734 -    0x44,0x52,0x0C,0x00,0x00,0x07,0x00,0x08,  /* 00000FF0    "DR......" */
   2.735 -    0x5F,0x53,0x55,0x4E,0x0A,0x02,0x14,0x13,  /* 00000FF8    "_SUN...." */
   2.736 -    0x5F,0x50,0x53,0x30,0x00,0x70,0x0A,0x90,  /* 00001000    "_PS0.p.." */
   2.737 -    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001008    "\._GPEDP" */
   2.738 -    0x54,0x32,0x14,0x13,0x5F,0x50,0x53,0x33,  /* 00001010    "T2.._PS3" */
   2.739 -    0x00,0x70,0x0A,0x93,0x5C,0x2E,0x5F,0x47,  /* 00001018    ".p..\._G" */
   2.740 -    0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x1F,  /* 00001020    "PEDPT2.." */
   2.741 -    0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A,0x98,  /* 00001028    "_EJ0.p.." */
   2.742 -    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001030    "\._GPEDP" */
   2.743 -    0x54,0x32,0x70,0x01,0x5C,0x2E,0x5F,0x47,  /* 00001038    "T2p.\._G" */
   2.744 -    0x50,0x45,0x50,0x48,0x50,0x32,0x14,0x1E,  /* 00001040    "PEPHP2.." */
   2.745 -    0x5F,0x53,0x54,0x41,0x00,0x70,0x0A,0x99,  /* 00001048    "_STA.p.." */
   2.746 -    0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,  /* 00001050    "\._GPEDP" */
   2.747 -    0x54,0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,  /* 00001058    "T2.\._GP" */
   2.748 -    0x45,0x50,0x48,0x50,0x32,0x10,0x4E,0x0B,  /* 00001060    "EPHP2.N." */
   2.749 -    0x5F,0x47,0x50,0x45,0x5B,0x80,0x50,0x48,  /* 00001068    "_GPE[.PH" */
   2.750 -    0x50,0x5F,0x01,0x0B,0xC0,0x10,0x0A,0x03,  /* 00001070    "P_......" */
   2.751 -    0x5B,0x81,0x15,0x50,0x48,0x50,0x5F,0x01,  /* 00001078    "[..PHP_." */
   2.752 -    0x50,0x53,0x54,0x41,0x08,0x50,0x48,0x50,  /* 00001080    "PSTA.PHP" */
   2.753 -    0x31,0x08,0x50,0x48,0x50,0x32,0x08,0x5B,  /* 00001088    "1.PHP2.[" */
   2.754 -    0x80,0x44,0x47,0x31,0x5F,0x01,0x0B,0x44,  /* 00001090    ".DG1_..D" */
   2.755 -    0xB0,0x0A,0x04,0x5B,0x81,0x10,0x44,0x47,  /* 00001098    "...[..DG" */
   2.756 -    0x31,0x5F,0x01,0x44,0x50,0x54,0x31,0x08,  /* 000010A0    "1_.DPT1." */
   2.757 -    0x44,0x50,0x54,0x32,0x08,0x14,0x46,0x07,  /* 000010A8    "DPT2..F." */
   2.758 -    0x5F,0x4C,0x30,0x33,0x00,0x08,0x53,0x4C,  /* 000010B0    "_L03..SL" */
   2.759 -    0x54,0x5F,0x00,0x08,0x45,0x56,0x54,0x5F,  /* 000010B8    "T_..EVT_" */
   2.760 -    0x00,0x70,0x50,0x53,0x54,0x41,0x61,0x7A,  /* 000010C0    ".pPSTAaz" */
   2.761 -    0x61,0x0A,0x04,0x53,0x4C,0x54,0x5F,0x7B,  /* 000010C8    "a..SLT_{" */
   2.762 -    0x61,0x0A,0x0F,0x45,0x56,0x54,0x5F,0x70,  /* 000010D0    "a..EVT_p" */
   2.763 -    0x53,0x4C,0x54,0x5F,0x44,0x50,0x54,0x31,  /* 000010D8    "SLT_DPT1" */
   2.764 -    0x70,0x45,0x56,0x54,0x5F,0x44,0x50,0x54,  /* 000010E0    "pEVT_DPT" */
   2.765 -    0x32,0xA0,0x1B,0x93,0x53,0x4C,0x54,0x5F,  /* 000010E8    "2...SLT_" */
   2.766 -    0x01,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,  /* 000010F0    "..\/._SB" */
   2.767 -    0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x46,  /* 000010F8    "_PCI0S1F" */
   2.768 -    0x30,0x45,0x56,0x54,0x5F,0xA1,0x1E,0xA0,  /* 00001100    "0EVT_..." */
   2.769 -    0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A,0x02,  /* 00001108    "..SLT_.." */
   2.770 -    0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00001110    ".\/._SB_" */
   2.771 -    0x50,0x43,0x49,0x30,0x53,0x32,0x46,0x30,  /* 00001118    "PCI0S2F0" */
   2.772 -    0x45,0x56,0x54,0x5F,
   2.773 +    0x00,0x00,0x4C,0x4E,0x4B,0x43,0x00,0x12,  /* 00000898    "..LNKC.." */
   2.774 +    0x0D,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x01,  /* 000008A0    "........" */
   2.775 +    0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E,0x04,  /* 000008A8    "LNKD...." */
   2.776 +    0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x02,0x4C,  /* 000008B0    ".......L" */
   2.777 +    0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,  /* 000008B8    "NKA....." */
   2.778 +    0xFF,0xFF,0x0E,0x00,0x0A,0x03,0x4C,0x4E,  /* 000008C0    "......LN" */
   2.779 +    0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF,  /* 000008C8    "KB......" */
   2.780 +    0xFF,0x0F,0x00,0x00,0x4C,0x4E,0x4B,0x44,  /* 000008D0    "....LNKD" */
   2.781 +    0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0F,  /* 000008D8    "........" */
   2.782 +    0x00,0x01,0x4C,0x4E,0x4B,0x41,0x00,0x12,  /* 000008E0    "..LNKA.." */
   2.783 +    0x0E,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A,  /* 000008E8    "........" */
   2.784 +    0x02,0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,  /* 000008F0    ".LNKB..." */
   2.785 +    0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x03,  /* 000008F8    "........" */
   2.786 +    0x4C,0x4E,0x4B,0x43,0x00,0x08,0x50,0x52,  /* 00000900    "LNKC..PR" */
   2.787 +    0x54,0x41,0x12,0x41,0x2F,0x3C,0x12,0x0B,  /* 00000908    "TA.A/<.." */
   2.788 +    0x04,0x0C,0xFF,0xFF,0x01,0x00,0x00,0x00,  /* 00000910    "........" */
   2.789 +    0x0A,0x14,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000918    "........" */
   2.790 +    0x01,0x00,0x01,0x00,0x0A,0x15,0x12,0x0C,  /* 00000920    "........" */
   2.791 +    0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x02,  /* 00000928    "........" */
   2.792 +    0x00,0x0A,0x16,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000930    "........" */
   2.793 +    0xFF,0x01,0x00,0x0A,0x03,0x00,0x0A,0x17,  /* 00000938    "........" */
   2.794 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x02,0x00,  /* 00000940    "........" */
   2.795 +    0x00,0x00,0x0A,0x18,0x12,0x0B,0x04,0x0C,  /* 00000948    "........" */
   2.796 +    0xFF,0xFF,0x02,0x00,0x01,0x00,0x0A,0x19,  /* 00000950    "........" */
   2.797 +    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x02,0x00,  /* 00000958    "........" */
   2.798 +    0x0A,0x02,0x00,0x0A,0x1A,0x12,0x0C,0x04,  /* 00000960    "........" */
   2.799 +    0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x03,0x00,  /* 00000968    "........" */
   2.800 +    0x0A,0x1B,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000970    "........" */
   2.801 +    0x03,0x00,0x00,0x00,0x0A,0x1C,0x12,0x0B,  /* 00000978    "........" */
   2.802 +    0x04,0x0C,0xFF,0xFF,0x03,0x00,0x01,0x00,  /* 00000980    "........" */
   2.803 +    0x0A,0x1D,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000988    "........" */
   2.804 +    0x03,0x00,0x0A,0x02,0x00,0x0A,0x1E,0x12,  /* 00000990    "........" */
   2.805 +    0x0C,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,  /* 00000998    "........" */
   2.806 +    0x03,0x00,0x0A,0x1F,0x12,0x0B,0x04,0x0C,  /* 000009A0    "........" */
   2.807 +    0xFF,0xFF,0x04,0x00,0x00,0x00,0x0A,0x20,  /* 000009A8    "....... " */
   2.808 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x04,0x00,  /* 000009B0    "........" */
   2.809 +    0x01,0x00,0x0A,0x21,0x12,0x0C,0x04,0x0C,  /* 000009B8    "...!...." */
   2.810 +    0xFF,0xFF,0x04,0x00,0x0A,0x02,0x00,0x0A,  /* 000009C0    "........" */
   2.811 +    0x22,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x04,  /* 000009C8    ""......." */
   2.812 +    0x00,0x0A,0x03,0x00,0x0A,0x23,0x12,0x0B,  /* 000009D0    ".....#.." */
   2.813 +    0x04,0x0C,0xFF,0xFF,0x05,0x00,0x00,0x00,  /* 000009D8    "........" */
   2.814 +    0x0A,0x24,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 000009E0    ".$......" */
   2.815 +    0x05,0x00,0x01,0x00,0x0A,0x25,0x12,0x0C,  /* 000009E8    ".....%.." */
   2.816 +    0x04,0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x02,  /* 000009F0    "........" */
   2.817 +    0x00,0x0A,0x26,0x12,0x0C,0x04,0x0C,0xFF,  /* 000009F8    "..&....." */
   2.818 +    0xFF,0x05,0x00,0x0A,0x03,0x00,0x0A,0x27,  /* 00000A00    ".......'" */
   2.819 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x06,0x00,  /* 00000A08    "........" */
   2.820 +    0x00,0x00,0x0A,0x28,0x12,0x0B,0x04,0x0C,  /* 00000A10    "...(...." */
   2.821 +    0xFF,0xFF,0x06,0x00,0x01,0x00,0x0A,0x29,  /* 00000A18    ".......)" */
   2.822 +    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x06,0x00,  /* 00000A20    "........" */
   2.823 +    0x0A,0x02,0x00,0x0A,0x2A,0x12,0x0C,0x04,  /* 00000A28    "....*..." */
   2.824 +    0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x03,0x00,  /* 00000A30    "........" */
   2.825 +    0x0A,0x2B,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000A38    ".+......" */
   2.826 +    0x07,0x00,0x00,0x00,0x0A,0x2C,0x12,0x0B,  /* 00000A40    ".....,.." */
   2.827 +    0x04,0x0C,0xFF,0xFF,0x07,0x00,0x01,0x00,  /* 00000A48    "........" */
   2.828 +    0x0A,0x2D,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000A50    ".-......" */
   2.829 +    0x07,0x00,0x0A,0x02,0x00,0x0A,0x2E,0x12,  /* 00000A58    "........" */
   2.830 +    0x0C,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A,  /* 00000A60    "........" */
   2.831 +    0x03,0x00,0x0A,0x2F,0x12,0x0B,0x04,0x0C,  /* 00000A68    ".../...." */
   2.832 +    0xFF,0xFF,0x08,0x00,0x00,0x00,0x0A,0x11,  /* 00000A70    "........" */
   2.833 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x08,0x00,  /* 00000A78    "........" */
   2.834 +    0x01,0x00,0x0A,0x12,0x12,0x0C,0x04,0x0C,  /* 00000A80    "........" */
   2.835 +    0xFF,0xFF,0x08,0x00,0x0A,0x02,0x00,0x0A,  /* 00000A88    "........" */
   2.836 +    0x13,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x08,  /* 00000A90    "........" */
   2.837 +    0x00,0x0A,0x03,0x00,0x0A,0x14,0x12,0x0B,  /* 00000A98    "........" */
   2.838 +    0x04,0x0C,0xFF,0xFF,0x09,0x00,0x00,0x00,  /* 00000AA0    "........" */
   2.839 +    0x0A,0x15,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000AA8    "........" */
   2.840 +    0x09,0x00,0x01,0x00,0x0A,0x16,0x12,0x0C,  /* 00000AB0    "........" */
   2.841 +    0x04,0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x02,  /* 00000AB8    "........" */
   2.842 +    0x00,0x0A,0x17,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000AC0    "........" */
   2.843 +    0xFF,0x09,0x00,0x0A,0x03,0x00,0x0A,0x18,  /* 00000AC8    "........" */
   2.844 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0A,0x00,  /* 00000AD0    "........" */
   2.845 +    0x00,0x00,0x0A,0x19,0x12,0x0B,0x04,0x0C,  /* 00000AD8    "........" */
   2.846 +    0xFF,0xFF,0x0A,0x00,0x01,0x00,0x0A,0x1A,  /* 00000AE0    "........" */
   2.847 +    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0A,0x00,  /* 00000AE8    "........" */
   2.848 +    0x0A,0x02,0x00,0x0A,0x1B,0x12,0x0C,0x04,  /* 00000AF0    "........" */
   2.849 +    0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x03,0x00,  /* 00000AF8    "........" */
   2.850 +    0x0A,0x1C,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000B00    "........" */
   2.851 +    0x0B,0x00,0x00,0x00,0x0A,0x1D,0x12,0x0B,  /* 00000B08    "........" */
   2.852 +    0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x01,0x00,  /* 00000B10    "........" */
   2.853 +    0x0A,0x1E,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000B18    "........" */
   2.854 +    0x0B,0x00,0x0A,0x02,0x00,0x0A,0x1F,0x12,  /* 00000B20    "........" */
   2.855 +    0x0C,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A,  /* 00000B28    "........" */
   2.856 +    0x03,0x00,0x0A,0x20,0x12,0x0B,0x04,0x0C,  /* 00000B30    "... ...." */
   2.857 +    0xFF,0xFF,0x0C,0x00,0x00,0x00,0x0A,0x21,  /* 00000B38    ".......!" */
   2.858 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0C,0x00,  /* 00000B40    "........" */
   2.859 +    0x01,0x00,0x0A,0x22,0x12,0x0C,0x04,0x0C,  /* 00000B48    "..."...." */
   2.860 +    0xFF,0xFF,0x0C,0x00,0x0A,0x02,0x00,0x0A,  /* 00000B50    "........" */
   2.861 +    0x23,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0C,  /* 00000B58    "#......." */
   2.862 +    0x00,0x0A,0x03,0x00,0x0A,0x24,0x12,0x0B,  /* 00000B60    ".....$.." */
   2.863 +    0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x00,0x00,  /* 00000B68    "........" */
   2.864 +    0x0A,0x25,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000B70    ".%......" */
   2.865 +    0x0D,0x00,0x01,0x00,0x0A,0x26,0x12,0x0C,  /* 00000B78    ".....&.." */
   2.866 +    0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x02,  /* 00000B80    "........" */
   2.867 +    0x00,0x0A,0x27,0x12,0x0C,0x04,0x0C,0xFF,  /* 00000B88    "..'....." */
   2.868 +    0xFF,0x0D,0x00,0x0A,0x03,0x00,0x0A,0x28,  /* 00000B90    ".......(" */
   2.869 +    0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0E,0x00,  /* 00000B98    "........" */
   2.870 +    0x00,0x00,0x0A,0x29,0x12,0x0B,0x04,0x0C,  /* 00000BA0    "...)...." */
   2.871 +    0xFF,0xFF,0x0E,0x00,0x01,0x00,0x0A,0x2A,  /* 00000BA8    ".......*" */
   2.872 +    0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0E,0x00,  /* 00000BB0    "........" */
   2.873 +    0x0A,0x02,0x00,0x0A,0x2B,0x12,0x0C,0x04,  /* 00000BB8    "....+..." */
   2.874 +    0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x03,0x00,  /* 00000BC0    "........" */
   2.875 +    0x0A,0x2C,0x12,0x0B,0x04,0x0C,0xFF,0xFF,  /* 00000BC8    ".,......" */
   2.876 +    0x0F,0x00,0x00,0x00,0x0A,0x2D,0x12,0x0B,  /* 00000BD0    ".....-.." */
   2.877 +    0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x01,0x00,  /* 00000BD8    "........" */
   2.878 +    0x0A,0x2E,0x12,0x0C,0x04,0x0C,0xFF,0xFF,  /* 00000BE0    "........" */
   2.879 +    0x0F,0x00,0x0A,0x02,0x00,0x0A,0x2F,0x12,  /* 00000BE8    "....../." */
   2.880 +    0x0C,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A,  /* 00000BF0    "........" */
   2.881 +    0x03,0x00,0x0A,0x10,0x5B,0x82,0x46,0x37,  /* 00000BF8    "....[.F7" */
   2.882 +    0x49,0x53,0x41,0x5F,0x08,0x5F,0x41,0x44,  /* 00000C00    "ISA_._AD" */
   2.883 +    0x52,0x0C,0x00,0x00,0x01,0x00,0x5B,0x80,  /* 00000C08    "R.....[." */
   2.884 +    0x50,0x49,0x52,0x51,0x02,0x0A,0x60,0x0A,  /* 00000C10    "PIRQ..`." */
   2.885 +    0x04,0x10,0x2E,0x5C,0x00,0x5B,0x81,0x29,  /* 00000C18    "...\.[.)" */
   2.886 +    0x5C,0x2F,0x04,0x5F,0x53,0x42,0x5F,0x50,  /* 00000C20    "\/._SB_P" */
   2.887 +    0x43,0x49,0x30,0x49,0x53,0x41,0x5F,0x50,  /* 00000C28    "CI0ISA_P" */
   2.888 +    0x49,0x52,0x51,0x01,0x50,0x49,0x52,0x41,  /* 00000C30    "IRQ.PIRA" */
   2.889 +    0x08,0x50,0x49,0x52,0x42,0x08,0x50,0x49,  /* 00000C38    ".PIRB.PI" */
   2.890 +    0x52,0x43,0x08,0x50,0x49,0x52,0x44,0x08,  /* 00000C40    "RC.PIRD." */
   2.891 +    0x5B,0x82,0x46,0x0B,0x53,0x59,0x53,0x52,  /* 00000C48    "[.F.SYSR" */
   2.892 +    0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,  /* 00000C50    "._HID.A." */
   2.893 +    0x0C,0x02,0x08,0x5F,0x55,0x49,0x44,0x01,  /* 00000C58    "..._UID." */
   2.894 +    0x08,0x43,0x52,0x53,0x5F,0x11,0x4E,0x08,  /* 00000C60    ".CRS_.N." */
   2.895 +    0x0A,0x8A,0x47,0x01,0x10,0x00,0x10,0x00,  /* 00000C68    "..G....." */
   2.896 +    0x00,0x10,0x47,0x01,0x22,0x00,0x22,0x00,  /* 00000C70    "..G."."." */
   2.897 +    0x00,0x0C,0x47,0x01,0x30,0x00,0x30,0x00,  /* 00000C78    "..G.0.0." */
   2.898 +    0x00,0x10,0x47,0x01,0x44,0x00,0x44,0x00,  /* 00000C80    "..G.D.D." */
   2.899 +    0x00,0x1C,0x47,0x01,0x62,0x00,0x62,0x00,  /* 00000C88    "..G.b.b." */
   2.900 +    0x00,0x02,0x47,0x01,0x65,0x00,0x65,0x00,  /* 00000C90    "..G.e.e." */
   2.901 +    0x00,0x0B,0x47,0x01,0x72,0x00,0x72,0x00,  /* 00000C98    "..G.r.r." */
   2.902 +    0x00,0x0E,0x47,0x01,0x80,0x00,0x80,0x00,  /* 00000CA0    "..G....." */
   2.903 +    0x00,0x01,0x47,0x01,0x84,0x00,0x84,0x00,  /* 00000CA8    "..G....." */
   2.904 +    0x00,0x03,0x47,0x01,0x88,0x00,0x88,0x00,  /* 00000CB0    "..G....." */
   2.905 +    0x00,0x01,0x47,0x01,0x8C,0x00,0x8C,0x00,  /* 00000CB8    "..G....." */
   2.906 +    0x00,0x03,0x47,0x01,0x90,0x00,0x90,0x00,  /* 00000CC0    "..G....." */
   2.907 +    0x00,0x10,0x47,0x01,0xA2,0x00,0xA2,0x00,  /* 00000CC8    "..G....." */
   2.908 +    0x00,0x1C,0x47,0x01,0xE0,0x00,0xE0,0x00,  /* 00000CD0    "..G....." */
   2.909 +    0x00,0x10,0x47,0x01,0xA0,0x08,0xA0,0x08,  /* 00000CD8    "..G....." */
   2.910 +    0x00,0x04,0x47,0x01,0xC0,0x0C,0xC0,0x0C,  /* 00000CE0    "..G....." */
   2.911 +    0x00,0x10,0x47,0x01,0xD0,0x04,0xD0,0x04,  /* 00000CE8    "..G....." */
   2.912 +    0x00,0x02,0x79,0x00,0x14,0x0B,0x5F,0x43,  /* 00000CF0    "..y..._C" */
   2.913 +    0x52,0x53,0x00,0xA4,0x43,0x52,0x53,0x5F,  /* 00000CF8    "RS..CRS_" */
   2.914 +    0x5B,0x82,0x2B,0x50,0x49,0x43,0x5F,0x08,  /* 00000D00    "[.+PIC_." */
   2.915 +    0x5F,0x48,0x49,0x44,0x0B,0x41,0xD0,0x08,  /* 00000D08    "_HID.A.." */
   2.916 +    0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15,  /* 00000D10    "_CRS...." */
   2.917 +    0x47,0x01,0x20,0x00,0x20,0x00,0x01,0x02,  /* 00000D18    "G. . ..." */
   2.918 +    0x47,0x01,0xA0,0x00,0xA0,0x00,0x01,0x02,  /* 00000D20    "G......." */
   2.919 +    0x22,0x04,0x00,0x79,0x00,0x5B,0x82,0x47,  /* 00000D28    ""..y.[.G" */
   2.920 +    0x05,0x44,0x4D,0x41,0x30,0x08,0x5F,0x48,  /* 00000D30    ".DMA0._H" */
   2.921 +    0x49,0x44,0x0C,0x41,0xD0,0x02,0x00,0x08,  /* 00000D38    "ID.A...." */
   2.922 +    0x5F,0x43,0x52,0x53,0x11,0x41,0x04,0x0A,  /* 00000D40    "_CRS.A.." */
   2.923 +    0x3D,0x2A,0x10,0x04,0x47,0x01,0x00,0x00,  /* 00000D48    "=*..G..." */
   2.924 +    0x00,0x00,0x00,0x10,0x47,0x01,0x81,0x00,  /* 00000D50    "....G..." */
   2.925 +    0x81,0x00,0x00,0x03,0x47,0x01,0x87,0x00,  /* 00000D58    "....G..." */
   2.926 +    0x87,0x00,0x00,0x01,0x47,0x01,0x89,0x00,  /* 00000D60    "....G..." */
   2.927 +    0x89,0x00,0x00,0x03,0x47,0x01,0x8F,0x00,  /* 00000D68    "....G..." */
   2.928 +    0x8F,0x00,0x00,0x01,0x47,0x01,0xC0,0x00,  /* 00000D70    "....G..." */
   2.929 +    0xC0,0x00,0x00,0x20,0x47,0x01,0x80,0x04,  /* 00000D78    "... G..." */
   2.930 +    0x80,0x04,0x00,0x10,0x79,0x00,0x5B,0x82,  /* 00000D80    "....y.[." */
   2.931 +    0x25,0x54,0x4D,0x52,0x5F,0x08,0x5F,0x48,  /* 00000D88    "%TMR_._H" */
   2.932 +    0x49,0x44,0x0C,0x41,0xD0,0x01,0x00,0x08,  /* 00000D90    "ID.A...." */
   2.933 +    0x5F,0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,  /* 00000D98    "_CRS...." */
   2.934 +    0x47,0x01,0x40,0x00,0x40,0x00,0x00,0x04,  /* 00000DA0    "G.@.@..." */
   2.935 +    0x22,0x01,0x00,0x79,0x00,0x5B,0x82,0x25,  /* 00000DA8    ""..y.[.%" */
   2.936 +    0x52,0x54,0x43,0x5F,0x08,0x5F,0x48,0x49,  /* 00000DB0    "RTC_._HI" */
   2.937 +    0x44,0x0C,0x41,0xD0,0x0B,0x00,0x08,0x5F,  /* 00000DB8    "D.A...._" */
   2.938 +    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 00000DC0    "CRS....G" */
   2.939 +    0x01,0x70,0x00,0x70,0x00,0x00,0x02,0x22,  /* 00000DC8    ".p.p..."" */
   2.940 +    0x00,0x01,0x79,0x00,0x5B,0x82,0x22,0x53,  /* 00000DD0    "..y.[."S" */
   2.941 +    0x50,0x4B,0x52,0x08,0x5F,0x48,0x49,0x44,  /* 00000DD8    "PKR._HID" */
   2.942 +    0x0C,0x41,0xD0,0x08,0x00,0x08,0x5F,0x43,  /* 00000DE0    ".A...._C" */
   2.943 +    0x52,0x53,0x11,0x0D,0x0A,0x0A,0x47,0x01,  /* 00000DE8    "RS....G." */
   2.944 +    0x61,0x00,0x61,0x00,0x00,0x01,0x79,0x00,  /* 00000DF0    "a.a...y." */
   2.945 +    0x5B,0x82,0x31,0x50,0x53,0x32,0x4D,0x08,  /* 00000DF8    "[.1PS2M." */
   2.946 +    0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0F,  /* 00000E00    "_HID.A.." */
   2.947 +    0x13,0x08,0x5F,0x43,0x49,0x44,0x0C,0x41,  /* 00000E08    ".._CID.A" */
   2.948 +    0xD0,0x0F,0x13,0x14,0x09,0x5F,0x53,0x54,  /* 00000E10    "....._ST" */
   2.949 +    0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,  /* 00000E18    "A....._C" */
   2.950 +    0x52,0x53,0x11,0x08,0x0A,0x05,0x22,0x00,  /* 00000E20    "RS...."." */
   2.951 +    0x10,0x79,0x00,0x5B,0x82,0x42,0x04,0x50,  /* 00000E28    ".y.[.B.P" */
   2.952 +    0x53,0x32,0x4B,0x08,0x5F,0x48,0x49,0x44,  /* 00000E30    "S2K._HID" */
   2.953 +    0x0C,0x41,0xD0,0x03,0x03,0x08,0x5F,0x43,  /* 00000E38    ".A...._C" */
   2.954 +    0x49,0x44,0x0C,0x41,0xD0,0x03,0x0B,0x14,  /* 00000E40    "ID.A...." */
   2.955 +    0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,  /* 00000E48    "._STA..." */
   2.956 +    0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x18,  /* 00000E50    ".._CRS.." */
   2.957 +    0x0A,0x15,0x47,0x01,0x60,0x00,0x60,0x00,  /* 00000E58    "..G.`.`." */
   2.958 +    0x00,0x01,0x47,0x01,0x64,0x00,0x64,0x00,  /* 00000E60    "..G.d.d." */
   2.959 +    0x00,0x01,0x22,0x02,0x00,0x79,0x00,0x5B,  /* 00000E68    ".."..y.[" */
   2.960 +    0x82,0x3A,0x46,0x44,0x43,0x30,0x08,0x5F,  /* 00000E70    ".:FDC0._" */
   2.961 +    0x48,0x49,0x44,0x0C,0x41,0xD0,0x07,0x00,  /* 00000E78    "HID.A..." */
   2.962 +    0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,  /* 00000E80    ".._STA.." */
   2.963 +    0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,  /* 00000E88    "..._CRS." */
   2.964 +    0x1B,0x0A,0x18,0x47,0x01,0xF0,0x03,0xF0,  /* 00000E90    "...G...." */
   2.965 +    0x03,0x01,0x06,0x47,0x01,0xF7,0x03,0xF7,  /* 00000E98    "...G...." */
   2.966 +    0x03,0x01,0x01,0x22,0x40,0x00,0x2A,0x04,  /* 00000EA0    "..."@.*." */
   2.967 +    0x00,0x79,0x00,0x5B,0x82,0x46,0x04,0x55,  /* 00000EA8    ".y.[.F.U" */
   2.968 +    0x41,0x52,0x31,0x08,0x5F,0x48,0x49,0x44,  /* 00000EB0    "AR1._HID" */
   2.969 +    0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,0x55,  /* 00000EB8    ".A...._U" */
   2.970 +    0x49,0x44,0x01,0x14,0x19,0x5F,0x53,0x54,  /* 00000EC0    "ID..._ST" */
   2.971 +    0x41,0x00,0xA0,0x0D,0x93,0x5E,0x5E,0x5E,  /* 00000EC8    "A....^^^" */
   2.972 +    0x5E,0x55,0x41,0x52,0x31,0x00,0xA4,0x00,  /* 00000ED0    "^UAR1..." */
   2.973 +    0xA1,0x04,0xA4,0x0A,0x0F,0x08,0x5F,0x43,  /* 00000ED8    "......_C" */
   2.974 +    0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,  /* 00000EE0    "RS....G." */
   2.975 +    0xF8,0x03,0xF8,0x03,0x08,0x08,0x22,0x10,  /* 00000EE8    "......"." */
   2.976 +    0x00,0x79,0x00,0x5B,0x82,0x47,0x04,0x55,  /* 00000EF0    ".y.[.G.U" */
   2.977 +    0x41,0x52,0x32,0x08,0x5F,0x48,0x49,0x44,  /* 00000EF8    "AR2._HID" */
   2.978 +    0x0C,0x41,0xD0,0x05,0x01,0x08,0x5F,0x55,  /* 00000F00    ".A...._U" */
   2.979 +    0x49,0x44,0x0A,0x02,0x14,0x19,0x5F,0x53,  /* 00000F08    "ID...._S" */
   2.980 +    0x54,0x41,0x00,0xA0,0x0D,0x93,0x5E,0x5E,  /* 00000F10    "TA....^^" */
   2.981 +    0x5E,0x5E,0x55,0x41,0x52,0x32,0x00,0xA4,  /* 00000F18    "^^UAR2.." */
   2.982 +    0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x08,0x5F,  /* 00000F20    "......._" */
   2.983 +    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 00000F28    "CRS....G" */
   2.984 +    0x01,0xF8,0x02,0xF8,0x02,0x08,0x08,0x22,  /* 00000F30    "......."" */
   2.985 +    0x08,0x00,0x79,0x00,0x5B,0x82,0x36,0x4C,  /* 00000F38    "..y.[.6L" */
   2.986 +    0x54,0x50,0x31,0x08,0x5F,0x48,0x49,0x44,  /* 00000F40    "TP1._HID" */
   2.987 +    0x0C,0x41,0xD0,0x04,0x00,0x08,0x5F,0x55,  /* 00000F48    ".A...._U" */
   2.988 +    0x49,0x44,0x0A,0x02,0x14,0x09,0x5F,0x53,  /* 00000F50    "ID...._S" */
   2.989 +    0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,  /* 00000F58    "TA....._" */
   2.990 +    0x43,0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,  /* 00000F60    "CRS....G" */
   2.991 +    0x01,0x78,0x03,0x78,0x03,0x08,0x08,0x22,  /* 00000F68    ".x.x..."" */
   2.992 +    0x80,0x00,0x79,0x00,0x5B,0x82,0x4D,0x07,  /* 00000F70    "..y.[.M." */
   2.993 +    0x53,0x31,0x46,0x30,0x08,0x5F,0x41,0x44,  /* 00000F78    "S1F0._AD" */
   2.994 +    0x52,0x0C,0x00,0x00,0x06,0x00,0x08,0x5F,  /* 00000F80    "R......_" */
   2.995 +    0x53,0x55,0x4E,0x01,0x14,0x13,0x5F,0x50,  /* 00000F88    "SUN..._P" */
   2.996 +    0x53,0x30,0x00,0x70,0x0A,0x80,0x5C,0x2E,  /* 00000F90    "S0.p..\." */
   2.997 +    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00000F98    "_GPEDPT2" */
   2.998 +    0x14,0x13,0x5F,0x50,0x53,0x33,0x00,0x70,  /* 00000FA0    ".._PS3.p" */
   2.999 +    0x0A,0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00000FA8    "..\._GPE" */
  2.1000 +    0x44,0x50,0x54,0x32,0x14,0x1F,0x5F,0x45,  /* 00000FB0    "DPT2.._E" */
  2.1001 +    0x4A,0x30,0x01,0x70,0x0A,0x88,0x5C,0x2E,  /* 00000FB8    "J0.p..\." */
  2.1002 +    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00000FC0    "_GPEDPT2" */
  2.1003 +    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00000FC8    "p.\._GPE" */
  2.1004 +    0x50,0x48,0x50,0x31,0x14,0x1E,0x5F,0x53,  /* 00000FD0    "PHP1.._S" */
  2.1005 +    0x54,0x41,0x00,0x70,0x0A,0x89,0x5C,0x2E,  /* 00000FD8    "TA.p..\." */
  2.1006 +    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00000FE0    "_GPEDPT2" */
  2.1007 +    0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x50,  /* 00000FE8    ".\._GPEP" */
  2.1008 +    0x48,0x50,0x31,0x5B,0x82,0x4E,0x07,0x53,  /* 00000FF0    "HP1[.N.S" */
  2.1009 +    0x32,0x46,0x30,0x08,0x5F,0x41,0x44,0x52,  /* 00000FF8    "2F0._ADR" */
  2.1010 +    0x0C,0x00,0x00,0x07,0x00,0x08,0x5F,0x53,  /* 00001000    "......_S" */
  2.1011 +    0x55,0x4E,0x0A,0x02,0x14,0x13,0x5F,0x50,  /* 00001008    "UN...._P" */
  2.1012 +    0x53,0x30,0x00,0x70,0x0A,0x90,0x5C,0x2E,  /* 00001010    "S0.p..\." */
  2.1013 +    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001018    "_GPEDPT2" */
  2.1014 +    0x14,0x13,0x5F,0x50,0x53,0x33,0x00,0x70,  /* 00001020    ".._PS3.p" */
  2.1015 +    0x0A,0x93,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001028    "..\._GPE" */
  2.1016 +    0x44,0x50,0x54,0x32,0x14,0x1F,0x5F,0x45,  /* 00001030    "DPT2.._E" */
  2.1017 +    0x4A,0x30,0x01,0x70,0x0A,0x98,0x5C,0x2E,  /* 00001038    "J0.p..\." */
  2.1018 +    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001040    "_GPEDPT2" */
  2.1019 +    0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45,  /* 00001048    "p.\._GPE" */
  2.1020 +    0x50,0x48,0x50,0x32,0x14,0x1E,0x5F,0x53,  /* 00001050    "PHP2.._S" */
  2.1021 +    0x54,0x41,0x00,0x70,0x0A,0x99,0x5C,0x2E,  /* 00001058    "TA.p..\." */
  2.1022 +    0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32,  /* 00001060    "_GPEDPT2" */
  2.1023 +    0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x50,  /* 00001068    ".\._GPEP" */
  2.1024 +    0x48,0x50,0x32,0x10,0x4E,0x0B,0x5F,0x47,  /* 00001070    "HP2.N._G" */
  2.1025 +    0x50,0x45,0x5B,0x80,0x50,0x48,0x50,0x5F,  /* 00001078    "PE[.PHP_" */
  2.1026 +    0x01,0x0B,0xC0,0x10,0x0A,0x03,0x5B,0x81,  /* 00001080    "......[." */
  2.1027 +    0x15,0x50,0x48,0x50,0x5F,0x01,0x50,0x53,  /* 00001088    ".PHP_.PS" */
  2.1028 +    0x54,0x41,0x08,0x50,0x48,0x50,0x31,0x08,  /* 00001090    "TA.PHP1." */
  2.1029 +    0x50,0x48,0x50,0x32,0x08,0x5B,0x80,0x44,  /* 00001098    "PHP2.[.D" */
  2.1030 +    0x47,0x31,0x5F,0x01,0x0B,0x44,0xB0,0x0A,  /* 000010A0    "G1_..D.." */
  2.1031 +    0x04,0x5B,0x81,0x10,0x44,0x47,0x31,0x5F,  /* 000010A8    ".[..DG1_" */
  2.1032 +    0x01,0x44,0x50,0x54,0x31,0x08,0x44,0x50,  /* 000010B0    ".DPT1.DP" */
  2.1033 +    0x54,0x32,0x08,0x14,0x46,0x07,0x5F,0x4C,  /* 000010B8    "T2..F._L" */
  2.1034 +    0x30,0x33,0x00,0x08,0x53,0x4C,0x54,0x5F,  /* 000010C0    "03..SLT_" */
  2.1035 +    0x00,0x08,0x45,0x56,0x54,0x5F,0x00,0x70,  /* 000010C8    "..EVT_.p" */
  2.1036 +    0x50,0x53,0x54,0x41,0x61,0x7A,0x61,0x0A,  /* 000010D0    "PSTAaza." */
  2.1037 +    0x04,0x53,0x4C,0x54,0x5F,0x7B,0x61,0x0A,  /* 000010D8    ".SLT_{a." */
  2.1038 +    0x0F,0x45,0x56,0x54,0x5F,0x70,0x53,0x4C,  /* 000010E0    ".EVT_pSL" */
  2.1039 +    0x54,0x5F,0x44,0x50,0x54,0x31,0x70,0x45,  /* 000010E8    "T_DPT1pE" */
  2.1040 +    0x56,0x54,0x5F,0x44,0x50,0x54,0x32,0xA0,  /* 000010F0    "VT_DPT2." */
  2.1041 +    0x1B,0x93,0x53,0x4C,0x54,0x5F,0x01,0x86,  /* 000010F8    "..SLT_.." */
  2.1042 +    0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,  /* 00001100    "\/._SB_P" */
  2.1043 +    0x43,0x49,0x30,0x53,0x31,0x46,0x30,0x45,  /* 00001108    "CI0S1F0E" */
  2.1044 +    0x56,0x54,0x5F,0xA1,0x1E,0xA0,0x1C,0x93,  /* 00001110    "VT_....." */
  2.1045 +    0x53,0x4C,0x54,0x5F,0x0A,0x02,0x86,0x5C,  /* 00001118    "SLT_...\" */
  2.1046 +    0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50,0x43,  /* 00001120    "/._SB_PC" */
  2.1047 +    0x49,0x30,0x53,0x32,0x46,0x30,0x45,0x56,  /* 00001128    "I0S2F0EV" */
  2.1048 +    0x54,0x5F,
  2.1049  };
  2.1050  int DsdtLen=sizeof(AmlCode);
     3.1 --- a/tools/firmware/hvmloader/config.h	Tue May 20 18:54:09 2008 +0900
     3.2 +++ b/tools/firmware/hvmloader/config.h	Thu May 22 19:42:51 2008 +0900
     3.3 @@ -23,11 +23,12 @@
     3.4  /* Memory map. */
     3.5  #define HYPERCALL_PHYSICAL_ADDRESS    0x00080000
     3.6  #define VGABIOS_PHYSICAL_ADDRESS      0x000C0000
     3.7 -#define ETHERBOOT_PHYSICAL_ADDRESS    0x000C8000
     3.8 +#define ETHERBOOT_PHYSICAL_ADDRESS    0x000D0000
     3.9  #define EXTBOOT_PHYSICAL_ADDRESS      0x000DF800
    3.10  #define SMBIOS_PHYSICAL_ADDRESS       0x000E9000
    3.11  #define SMBIOS_MAXIMUM_SIZE           0x00001000
    3.12  #define ACPI_PHYSICAL_ADDRESS         0x000EA000
    3.13  #define ROMBIOS_PHYSICAL_ADDRESS      0x000F0000
    3.14 +#define SCRATCH_PHYSICAL_ADDRESS      0x00010000
    3.15  
    3.16  #endif /* __HVMLOADER_CONFIG_H__ */
     4.1 --- a/tools/firmware/hvmloader/hvmloader.c	Tue May 20 18:54:09 2008 +0900
     4.2 +++ b/tools/firmware/hvmloader/hvmloader.c	Thu May 22 19:42:51 2008 +0900
     4.3 @@ -103,12 +103,7 @@ void smp_initialise(void);
     4.4  void create_mp_tables(void);
     4.5  int hvm_write_smbios_tables(void);
     4.6  
     4.7 -static int
     4.8 -cirrus_check(void)
     4.9 -{
    4.10 -    outw(0x3C4, 0x9206);
    4.11 -    return inb(0x3C5) == 0x12;
    4.12 -}
    4.13 +static enum { VGA_none, VGA_std, VGA_cirrus } virtual_vga = VGA_none;
    4.14  
    4.15  static void
    4.16  init_hypercalls(void)
    4.17 @@ -165,7 +160,7 @@ static void pci_setup(void)
    4.18      /* Create a list of device BARs in descending order of size. */
    4.19      struct bars {
    4.20          uint32_t devfn, bar_reg, bar_sz;
    4.21 -    } *bars = (struct bars *)0xc0000;
    4.22 +    } *bars = (struct bars *)SCRATCH_PHYSICAL_ADDRESS;
    4.23      unsigned int i, nr_bars = 0;
    4.24  
    4.25      /* Program PCI-ISA bridge with appropriate link routes. */
    4.26 @@ -196,12 +191,15 @@ static void pci_setup(void)
    4.27  
    4.28          switch ( class )
    4.29          {
    4.30 +        case 0x0300:
    4.31 +            if ( (vendor_id == 0x1234) && (device_id == 0x1111) )
    4.32 +                virtual_vga = VGA_std;
    4.33 +            if ( (vendor_id == 0x1013) && (device_id == 0xb8) )
    4.34 +                virtual_vga = VGA_cirrus;
    4.35 +            break;
    4.36          case 0x0680:
    4.37 +            /* PIIX4 ACPI PM. Special device with special PCI config space. */
    4.38              ASSERT((vendor_id == 0x8086) && (device_id == 0x7113));
    4.39 -            /*
    4.40 -             * PIIX4 ACPI PM. Special device with special PCI config space.
    4.41 -             * No ordinary BARs.
    4.42 -             */
    4.43              pci_writew(devfn, 0x20, 0x0000); /* No smb bus IO enable */
    4.44              pci_writew(devfn, 0x22, 0x0000);
    4.45              pci_writew(devfn, 0x3c, 0x0009); /* Hardcoded IRQ9 */
    4.46 @@ -212,42 +210,41 @@ static void pci_setup(void)
    4.47              ASSERT((vendor_id == 0x8086) && (device_id == 0x7010));
    4.48              pci_writew(devfn, 0x40, 0x8000); /* enable IDE0 */
    4.49              pci_writew(devfn, 0x42, 0x8000); /* enable IDE1 */
    4.50 -            /* fall through */
    4.51 -        default:
    4.52 -            /* Default memory mappings. */
    4.53 -            for ( bar = 0; bar < 7; bar++ )
    4.54 -            {
    4.55 -                bar_reg = PCI_BASE_ADDRESS_0 + 4*bar;
    4.56 -                if ( bar == 6 )
    4.57 -                    bar_reg = PCI_ROM_ADDRESS;
    4.58 -
    4.59 -                bar_data = pci_readl(devfn, bar_reg);
    4.60 -                pci_writel(devfn, bar_reg, ~0);
    4.61 -                bar_sz = pci_readl(devfn, bar_reg);
    4.62 -                pci_writel(devfn, bar_reg, bar_data);
    4.63 -                if ( bar_sz == 0 )
    4.64 -                    continue;
    4.65 +            break;
    4.66 +        }
    4.67  
    4.68 -                bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
    4.69 -                           PCI_BASE_ADDRESS_SPACE_MEMORY) ?
    4.70 -                           PCI_BASE_ADDRESS_MEM_MASK :
    4.71 -                           (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
    4.72 -                bar_sz &= ~(bar_sz - 1);
    4.73 -
    4.74 -                for ( i = 0; i < nr_bars; i++ )
    4.75 -                    if ( bars[i].bar_sz < bar_sz )
    4.76 -                        break;
    4.77 +        /* Map the I/O memory and port resources. */
    4.78 +        for ( bar = 0; bar < 7; bar++ )
    4.79 +        {
    4.80 +            bar_reg = PCI_BASE_ADDRESS_0 + 4*bar;
    4.81 +            if ( bar == 6 )
    4.82 +                bar_reg = PCI_ROM_ADDRESS;
    4.83  
    4.84 -                if ( i != nr_bars )
    4.85 -                    memmove(&bars[i+1], &bars[i], (nr_bars-i) * sizeof(*bars));
    4.86 +            bar_data = pci_readl(devfn, bar_reg);
    4.87 +            pci_writel(devfn, bar_reg, ~0);
    4.88 +            bar_sz = pci_readl(devfn, bar_reg);
    4.89 +            pci_writel(devfn, bar_reg, bar_data);
    4.90 +            if ( bar_sz == 0 )
    4.91 +                continue;
    4.92  
    4.93 -                bars[i].devfn   = devfn;
    4.94 -                bars[i].bar_reg = bar_reg;
    4.95 -                bars[i].bar_sz  = bar_sz;
    4.96 +            bar_sz &= (((bar_data & PCI_BASE_ADDRESS_SPACE) ==
    4.97 +                        PCI_BASE_ADDRESS_SPACE_MEMORY) ?
    4.98 +                       PCI_BASE_ADDRESS_MEM_MASK :
    4.99 +                       (PCI_BASE_ADDRESS_IO_MASK & 0xffff));
   4.100 +            bar_sz &= ~(bar_sz - 1);
   4.101  
   4.102 -                nr_bars++;
   4.103 -            }
   4.104 -            break;
   4.105 +            for ( i = 0; i < nr_bars; i++ )
   4.106 +                if ( bars[i].bar_sz < bar_sz )
   4.107 +                    break;
   4.108 +
   4.109 +            if ( i != nr_bars )
   4.110 +                memmove(&bars[i+1], &bars[i], (nr_bars-i) * sizeof(*bars));
   4.111 +
   4.112 +            bars[i].devfn   = devfn;
   4.113 +            bars[i].bar_reg = bar_reg;
   4.114 +            bars[i].bar_sz  = bar_sz;
   4.115 +
   4.116 +            nr_bars++;
   4.117          }
   4.118  
   4.119          /* Map the interrupt. */
   4.120 @@ -464,19 +461,23 @@ int main(void)
   4.121      if ( (get_vcpu_nr() > 1) || get_apic_mode() )
   4.122          create_mp_tables();
   4.123  
   4.124 -    if ( cirrus_check() )
   4.125 +    switch ( virtual_vga )
   4.126      {
   4.127 +    case VGA_cirrus:
   4.128          printf("Loading Cirrus VGABIOS ...\n");
   4.129          memcpy((void *)VGABIOS_PHYSICAL_ADDRESS,
   4.130                 vgabios_cirrusvga, sizeof(vgabios_cirrusvga));
   4.131          vgabios_sz = sizeof(vgabios_cirrusvga);
   4.132 -    }
   4.133 -    else
   4.134 -    {
   4.135 +        break;
   4.136 +    case VGA_std:
   4.137          printf("Loading Standard VGABIOS ...\n");
   4.138          memcpy((void *)VGABIOS_PHYSICAL_ADDRESS,
   4.139                 vgabios_stdvga, sizeof(vgabios_stdvga));
   4.140          vgabios_sz = sizeof(vgabios_stdvga);
   4.141 +        break;
   4.142 +    default:
   4.143 +        printf("No emulated VGA adaptor ...\n");
   4.144 +        break;
   4.145      }
   4.146  
   4.147      etherboot_sz = scan_etherboot_nic((void*)ETHERBOOT_PHYSICAL_ADDRESS);
     5.1 --- a/tools/firmware/hvmloader/smbios.c	Tue May 20 18:54:09 2008 +0900
     5.2 +++ b/tools/firmware/hvmloader/smbios.c	Thu May 22 19:42:51 2008 +0900
     5.3 @@ -217,15 +217,16 @@ hvm_write_smbios_tables(void)
     5.4  
     5.5      xen_version_str[sizeof(xen_version_str)-1] = '\0';
     5.6  
     5.7 -    /* NB. 0xC0000 is a safe large memory area for scratch. */
     5.8 -    len = write_smbios_tables((void *)0xC0000,
     5.9 +    /* SCRATCH_PHYSICAL_ADDRESS is a safe large memory area for scratch. */
    5.10 +    len = write_smbios_tables((void *)SCRATCH_PHYSICAL_ADDRESS,
    5.11                                get_vcpu_nr(), get_memsize(),
    5.12                                uuid, xen_version_str,
    5.13                                xen_major_version, xen_minor_version);
    5.14      if ( len > SMBIOS_MAXIMUM_SIZE )
    5.15          goto error_out;
    5.16      /* Okay, not too large: copy out of scratch to final location. */
    5.17 -    memcpy((void *)SMBIOS_PHYSICAL_ADDRESS, (void *)0xC0000, len);
    5.18 +    memcpy((void *)SMBIOS_PHYSICAL_ADDRESS,
    5.19 +           (void *)SCRATCH_PHYSICAL_ADDRESS, len);
    5.20  
    5.21      return len;
    5.22  
     6.1 --- a/tools/firmware/rombios/rombios.c	Tue May 20 18:54:09 2008 +0900
     6.2 +++ b/tools/firmware/rombios/rombios.c	Thu May 22 19:42:51 2008 +0900
     6.3 @@ -1843,12 +1843,24 @@ keyboard_panic(status)
     6.4    BX_PANIC("Keyboard error:%u\n",status);
     6.5  }
     6.6  
     6.7 +
     6.8 +#define CMOS_SHUTDOWN_S3 0xFE
     6.9  //--------------------------------------------------------------------------
    6.10  // machine_reset
    6.11  //--------------------------------------------------------------------------
    6.12    void
    6.13  machine_reset()
    6.14  {
    6.15 +ASM_START
    6.16 +;we must check whether CMOS_SHUTDOWN_S3 is set or not
    6.17 +;if it is s3 resume, just jmp back to normal Post Entry
    6.18 +;below port io will prevent s3 resume
    6.19 +  mov al, #0x0f
    6.20 +  out 0x70, al
    6.21 +  in al, 0x71
    6.22 +  cmp al, #0xFE
    6.23 +  jz post
    6.24 +ASM_END
    6.25    /* Frob the keyboard reset line to reset the processor */
    6.26    outb(0x64, 0x60); /* Map the flags register at data port (0x60) */
    6.27    outb(0x60, 0x14); /* Set the flags to system|disable */
    6.28 @@ -2307,6 +2319,72 @@ debugger_off()
    6.29    outb(0xfedc, 0x00);
    6.30  }
    6.31  
    6.32 +/* according to memory layout defined in acpi_build_tables(),
    6.33 +   acpi FACS table is located in ACPI_PHYSICAL_ADDRESS(0xEA000) */
    6.34 +#define ACPI_FACS_ADDRESS 0xEA000
    6.35 +#define ACPI_FACS_OFFSET 0x10
    6.36 +/* S3 resume status in CMOS 0Fh shutdown status byte*/
    6.37 +
    6.38 +void 
    6.39 +s3_resume()
    6.40 +{
    6.41 +    Bit16u s3_wakeup_vector;
    6.42 +    extern Bit16u s3_wakeup_ip;
    6.43 +    extern Bit16u s3_wakeup_cs;
    6.44 +    extern Bit8u s3_resume_flag;
    6.45 +
    6.46 +ASM_START
    6.47 +    push ds
    6.48 +    mov ax, #0xF000
    6.49 +    mov ds, ax
    6.50 +ASM_END
    6.51 +
    6.52 +    if (s3_resume_flag!=CMOS_SHUTDOWN_S3){
    6.53 +        goto s3_out;
    6.54 +    }
    6.55 +    s3_resume_flag = 0;
    6.56 +
    6.57 +ASM_START
    6.58 +    mov ax, #0x0
    6.59 +    mov ds, ax
    6.60 +ASM_END
    6.61 +
    6.62 +    /* get x_firmware_waking_vector */
    6.63 +    s3_wakeup_vector = *((Bit16u*)(ACPI_FACS_ADDRESS+ACPI_FACS_OFFSET+24));
    6.64 +    if (s3_wakeup_vector == 0){
    6.65 +        /* get firmware_waking_vector */
    6.66 +        s3_wakeup_vector = *((Bit16u*)(ACPI_FACS_ADDRESS+ACPI_FACS_OFFSET+12));
    6.67 +        if (s3_wakeup_vector == 0){
    6.68 +            goto s3_out;
    6.69 +        }
    6.70 +    }
    6.71 +
    6.72 +    /* setup wakeup vector */
    6.73 +    s3_wakeup_ip = s3_wakeup_vector & 0xF;
    6.74 +    s3_wakeup_cs = s3_wakeup_vector >> 4;
    6.75 +
    6.76 +ASM_START
    6.77 +    mov bx, [_s3_wakeup_cs]
    6.78 +    mov dx, [_s3_wakeup_ip]
    6.79 +
    6.80 +    mov ax, #0xF000
    6.81 +    mov ds, ax
    6.82 +    mov [_s3_wakeup_cs], bx
    6.83 +    mov [_s3_wakeup_ip], dx
    6.84 +    jmpf [_s3_wakeup_ip]
    6.85 +
    6.86 +; S3 data
    6.87 +_s3_wakeup_ip:    dw 0x0a      
    6.88 +_s3_wakeup_cs:    dw 0x0      
    6.89 +_s3_resume_flag:  db 0   ; set at POST time by CMOS[0xF] shutdown status
    6.90 +ASM_END
    6.91 +
    6.92 +s3_out:
    6.93 +ASM_START
    6.94 +   pop ds 
    6.95 +ASM_END
    6.96 +}
    6.97 +
    6.98  #if BX_USE_ATADRV
    6.99  
   6.100  // ---------------------------------------------------------------------------
   6.101 @@ -9752,6 +9830,18 @@ post:
   6.102    ;; Examine CMOS shutdown status.
   6.103    mov al, bl
   6.104  
   6.105 +  ;; 0xFE S3 resume
   6.106 +  cmp AL, #0xFE
   6.107 +  jnz not_s3_resume
   6.108 +
   6.109 +  ;; set S3 resume flag
   6.110 +  mov dx, #0xF000
   6.111 +  mov ds, dx
   6.112 +  mov [_s3_resume_flag], AL
   6.113 +  jmp normal_post
   6.114 +
   6.115 +not_s3_resume:
   6.116 +
   6.117    ;; 0x00, 0x09, 0x0D+ = normal startup
   6.118    cmp AL, #0x00
   6.119    jz normal_post
   6.120 @@ -10049,6 +10139,7 @@ post_default_ints:
   6.121    ;;
   6.122  #endif // BX_ELTORITO_BOOT
   6.123  
   6.124 +  call _s3_resume
   6.125    call _interactive_bootkey
   6.126  
   6.127  #if BX_TCGBIOS
     7.1 --- a/tools/firmware/vgabios/clext.c	Tue May 20 18:54:09 2008 +0900
     7.2 +++ b/tools/firmware/vgabios/clext.c	Thu May 22 19:42:51 2008 +0900
     7.3 @@ -26,6 +26,7 @@
     7.4  #define PM_BIOSMEM_CURRENT_MODE 0x449
     7.5  #define PM_BIOSMEM_CRTC_ADDRESS 0x463
     7.6  #define PM_BIOSMEM_VBE_MODE 0x4BA
     7.7 +#define PM_BIOSMEM_VBE_POWER 0x4BC 
     7.8  
     7.9  typedef struct
    7.10  {
    7.11 @@ -491,7 +492,7 @@ cirrus_vesa:
    7.12  #ifdef CIRRUS_DEBUG
    7.13    call cirrus_debug_dump
    7.14  #endif
    7.15 -  cmp al, #0x0F
    7.16 +  cmp al, #0x10
    7.17    ja cirrus_vesa_not_handled
    7.18    push bx
    7.19    xor bx, bx
    7.20 @@ -682,7 +683,7 @@ c80h_2:
    7.21    ret
    7.22  
    7.23  cirrus_extbios_81h:
    7.24 -  mov ax, #0x100 ;; XXX
    7.25 +  mov ax, #0x103 ;; XXX
    7.26    ret
    7.27  cirrus_extbios_82h:
    7.28    push dx
    7.29 @@ -1177,6 +1178,52 @@ cirrus_vesa_07h_2:
    7.30    mov  ax, #0x004f
    7.31    ret
    7.32  
    7.33 +cirrus_vesa_10h: ;; Power management functions
    7.34 +  ;; Set up DS to read stored power info from RAM
    7.35 +  push ds
    7.36 +#ifdef CIRRUS_VESA3_PMINFO
    7.37 + db 0x2e ;; cs:
    7.38 +  mov ax, [cirrus_vesa_sel0000_data]
    7.39 +#else
    7.40 +  xor ax, ax
    7.41 +#endif
    7.42 +  mov  ds, ax
    7.43 +  ;; Now choose the right function
    7.44 +  cmp  bl, #0x00
    7.45 +  ja   cirrus_vesa_10h_01
    7.46 +  ;;
    7.47 +  ;; Function 00h: Get capabilities
    7.48 +  ;;
    7.49 +  mov  bx, #0x0720 ;; 07: standby/suspend/off, 20: VBE/PM 2.0
    7.50 +  mov  ax, #0x004f
    7.51 +  jmp cirrus_vesa_10h_done
    7.52 +cirrus_vesa_10h_01:
    7.53 +  cmp  bl, #0x01
    7.54 +  ja   cirrus_vesa_10h_02
    7.55 +  ;;
    7.56 +  ;; Function 01h: Set power state
    7.57 +  ;; 
    7.58 +  mov  ax, bx
    7.59 +  mov  bx, # PM_BIOSMEM_VBE_POWER
    7.60 +  mov  [bx], ah
    7.61 +  mov  ax, #0x004f 
    7.62 +  jmp cirrus_vesa_10h_done
    7.63 +cirrus_vesa_10h_02:
    7.64 +  cmp  bl, #0x02
    7.65 +  ja   cirrus_vesa_10h_unimplemented
    7.66 +  ;;
    7.67 +  ;; Function 02h: Get power state
    7.68 +  ;; 
    7.69 +  mov  bx, # PM_BIOSMEM_VBE_POWER
    7.70 +  mov  bh, [bx]
    7.71 +  mov  ax, #0x004f 
    7.72 +  jmp cirrus_vesa_10h_done
    7.73 +cirrus_vesa_10h_unimplemented:
    7.74 +  mov  ax, #0x014F ;; not implemented
    7.75 +cirrus_vesa_10h_done:
    7.76 +  pop ds
    7.77 +  ret
    7.78 +
    7.79  cirrus_vesa_unimplemented:
    7.80    mov ax, #0x014F ;; not implemented
    7.81    ret
    7.82 @@ -1601,7 +1648,8 @@ cirrus_vesa_handlers:
    7.83    dw cirrus_vesa_unimplemented
    7.84    dw cirrus_vesa_unimplemented
    7.85    dw cirrus_vesa_unimplemented
    7.86 -
    7.87 +  ;; 10h
    7.88 +  dw cirrus_vesa_10h
    7.89  
    7.90  
    7.91  ASM_END
     8.1 --- a/tools/firmware/vgabios/vgatables.h	Tue May 20 18:54:09 2008 +0900
     8.2 +++ b/tools/firmware/vgabios/vgatables.h	Thu May 22 19:42:51 2008 +0900
     8.3 @@ -25,6 +25,7 @@
     8.4  #define BIOSMEM_VS_POINTER    0xA8
     8.5  #define BIOSMEM_VBE_FLAG      0xB9
     8.6  #define BIOSMEM_VBE_MODE      0xBA
     8.7 +#define BIOSMEM_VBE_POWER     0xBC
     8.8  
     8.9  
    8.10  /*
     9.1 --- a/tools/ioemu/hw/pc.c	Tue May 20 18:54:09 2008 +0900
     9.2 +++ b/tools/ioemu/hw/pc.c	Thu May 22 19:42:51 2008 +0900
     9.3 @@ -1121,6 +1121,14 @@ static void pc_init_isa(uint64_t ram_siz
     9.4               initrd_filename, 0, NULL);
     9.5  }
     9.6  
     9.7 +/* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
     9.8 +   BIOS will read it and start S3 resume at POST Entry*/
     9.9 +void cmos_set_s3_resume(void)
    9.10 +{
    9.11 +    if (rtc_state)
    9.12 +        rtc_set_memory(rtc_state, 0xF, 0xFE);
    9.13 +}
    9.14 +
    9.15  QEMUMachine pc_machine = {
    9.16      "pc",
    9.17      "Standard PC",
    10.1 --- a/tools/ioemu/hw/piix4acpi.c	Tue May 20 18:54:09 2008 +0900
    10.2 +++ b/tools/ioemu/hw/piix4acpi.c	Thu May 22 19:42:51 2008 +0900
    10.3 @@ -25,6 +25,7 @@
    10.4  
    10.5  #include "vl.h"
    10.6  #include <xen/hvm/ioreq.h>
    10.7 +#include <xen/hvm/params.h>
    10.8  
    10.9  /* PM1a_CNT bits, as defined in the ACPI specification. */
   10.10  #define SCI_EN            (1 <<  0)
   10.11 @@ -35,6 +36,7 @@
   10.12  /* Sleep state type codes as defined by the \_Sx objects in the DSDT. */
   10.13  /* These must be kept in sync with the DSDT (hvmloader/acpi/dsdt.asl) */
   10.14  #define SLP_TYP_S4        (6 << 10)
   10.15 +#define SLP_TYP_S3        (5 << 10)
   10.16  #define SLP_TYP_S5        (7 << 10)
   10.17  
   10.18  #define ACPI_DBG_IO_ADDR  0xb044
   10.19 @@ -79,6 +81,8 @@ typedef struct PHPSlots {
   10.20  
   10.21  PHPSlots php_slots;
   10.22  
   10.23 +int s3_shutdown_flag;
   10.24 +
   10.25  static void piix4acpi_save(QEMUFile *f, void *opaque)
   10.26  {
   10.27      PCIAcpiState *s = opaque;
   10.28 @@ -118,6 +122,13 @@ static void acpi_shutdown(uint32_t val)
   10.29          return;
   10.30  
   10.31      switch (val & SLP_TYP_Sx) {
   10.32 +    case SLP_TYP_S3:
   10.33 +        s3_shutdown_flag = 1;
   10.34 +        qemu_system_reset();
   10.35 +        s3_shutdown_flag = 0;
   10.36 +        cmos_set_s3_resume();
   10.37 +        xc_set_hvm_param(xc_handle, domid, HVM_PARAM_ACPI_S_STATE, 3);
   10.38 +        break;
   10.39      case SLP_TYP_S4:
   10.40      case SLP_TYP_S5:
   10.41          qemu_system_shutdown_request();
    11.1 --- a/tools/ioemu/hw/xenfb.c	Tue May 20 18:54:09 2008 +0900
    11.2 +++ b/tools/ioemu/hw/xenfb.c	Thu May 22 19:42:51 2008 +0900
    11.3 @@ -498,7 +498,7 @@ static int xenfb_configure_fb(struct xen
    11.4  			fb_len_lim, fb_len_max);
    11.5  		fb_len_lim = fb_len_max;
    11.6  	}
    11.7 -	if (fb_len > fb_len_lim) {
    11.8 +	if (fb_len_lim && fb_len > fb_len_lim) {
    11.9  		fprintf(stderr,
   11.10  			"FB: frontend fb size %zu limited to %zu\n",
   11.11  			fb_len, fb_len_lim);
    12.1 --- a/tools/ioemu/target-i386-dm/helper2.c	Tue May 20 18:54:09 2008 +0900
    12.2 +++ b/tools/ioemu/target-i386-dm/helper2.c	Thu May 22 19:42:51 2008 +0900
    12.3 @@ -133,8 +133,12 @@ CPUX86State *cpu_x86_init(void)
    12.4  /* called from main_cpu_reset */
    12.5  void cpu_reset(CPUX86State *env)
    12.6  {
    12.7 +    extern int s3_shutdown_flag;
    12.8      int xcHandle;
    12.9      int sts;
   12.10 + 
   12.11 +    if (s3_shutdown_flag)
   12.12 +        return;
   12.13  
   12.14      xcHandle = xc_interface_open();
   12.15      if (xcHandle < 0)
    13.1 --- a/tools/ioemu/vl.h	Tue May 20 18:54:09 2008 +0900
    13.2 +++ b/tools/ioemu/vl.h	Thu May 22 19:42:51 2008 +0900
    13.3 @@ -1181,6 +1181,7 @@ extern int fd_bootchk;
    13.4  
    13.5  void ioport_set_a20(int enable);
    13.6  int ioport_get_a20(void);
    13.7 +void cmos_set_s3_resume(void);
    13.8  
    13.9  /* ppc.c */
   13.10  extern QEMUMachine prep_machine;
    14.1 --- a/tools/libxc/xc_cpuid_x86.c	Tue May 20 18:54:09 2008 +0900
    14.2 +++ b/tools/libxc/xc_cpuid_x86.c	Thu May 22 19:42:51 2008 +0900
    14.3 @@ -105,11 +105,14 @@ static void intel_xc_cpuid_policy(
    14.4  static void cpuid(const unsigned int *input, unsigned int *regs)
    14.5  {
    14.6      unsigned int count = (input[1] == XEN_CPUID_INPUT_UNUSED) ? 0 : input[1];
    14.7 -    unsigned int bx_temp;
    14.8 -    asm ( "mov %%ebx,%4; cpuid; mov %%ebx,%1; mov %4,%%ebx"
    14.9 -          : "=a" (regs[0]), "=r" (regs[1]),
   14.10 -          "=c" (regs[2]), "=d" (regs[3]), "=m" (bx_temp)
   14.11 -          : "0" (input[0]), "2" (count) );
   14.12 +    asm (
   14.13 +#ifdef __i386__
   14.14 +        "push %%ebx; cpuid; mov %%ebx,%1; pop %%ebx"
   14.15 +#else
   14.16 +        "push %%rbx; cpuid; mov %%ebx,%1; pop %%rbx"
   14.17 +#endif
   14.18 +        : "=a" (regs[0]), "=r" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
   14.19 +        : "0" (input[0]), "2" (count) );
   14.20  }
   14.21  
   14.22  /* Get the manufacturer brand name of the host processor. */
    15.1 --- a/tools/libxc/xc_pm.c	Tue May 20 18:54:09 2008 +0900
    15.2 +++ b/tools/libxc/xc_pm.c	Thu May 22 19:42:51 2008 +0900
    15.3 @@ -99,3 +99,71 @@ int xc_pm_reset_pxstat(int xc_handle, in
    15.4  
    15.5      return xc_sysctl(xc_handle, &sysctl);
    15.6  }
    15.7 +
    15.8 +int xc_pm_get_max_cx(int xc_handle, int cpuid, int *max_cx)
    15.9 +{
   15.10 +    DECLARE_SYSCTL;
   15.11 +    int ret = 0;
   15.12 +
   15.13 +    sysctl.cmd = XEN_SYSCTL_get_pmstat;
   15.14 +    sysctl.u.get_pmstat.type = PMSTAT_get_max_cx;
   15.15 +    sysctl.u.get_pmstat.cpuid = cpuid;
   15.16 +    if ( (ret = xc_sysctl(xc_handle, &sysctl)) != 0 )
   15.17 +        return ret;
   15.18 +
   15.19 +    *max_cx = sysctl.u.get_pmstat.u.getcx.nr;
   15.20 +    return ret;
   15.21 +}
   15.22 +
   15.23 +int xc_pm_get_cxstat(int xc_handle, int cpuid, struct xc_cx_stat *cxpt)
   15.24 +{
   15.25 +    DECLARE_SYSCTL;
   15.26 +    int max_cx, ret;
   15.27 +
   15.28 +    if( !cxpt || !(cxpt->triggers) || !(cxpt->residencies) )
   15.29 +        return -EINVAL;
   15.30 +
   15.31 +    if ( (ret = xc_pm_get_max_cx(xc_handle, cpuid, &max_cx)) )
   15.32 +        goto unlock_0;
   15.33 +
   15.34 +    if ( (ret = lock_pages(cxpt, sizeof(struct xc_cx_stat))) )
   15.35 +        goto unlock_0;
   15.36 +    if ( (ret = lock_pages(cxpt->triggers, max_cx * sizeof(uint64_t))) )
   15.37 +        goto unlock_1;
   15.38 +    if ( (ret = lock_pages(cxpt->residencies, max_cx * sizeof(uint64_t))) )
   15.39 +        goto unlock_2;
   15.40 +
   15.41 +    sysctl.cmd = XEN_SYSCTL_get_pmstat;
   15.42 +    sysctl.u.get_pmstat.type = PMSTAT_get_cxstat;
   15.43 +    sysctl.u.get_pmstat.cpuid = cpuid;
   15.44 +    set_xen_guest_handle(sysctl.u.get_pmstat.u.getcx.triggers, cxpt->triggers);
   15.45 +    set_xen_guest_handle(sysctl.u.get_pmstat.u.getcx.residencies, 
   15.46 +                         cxpt->residencies);
   15.47 +
   15.48 +    if ( (ret = xc_sysctl(xc_handle, &sysctl)) )
   15.49 +        goto unlock_3;
   15.50 +
   15.51 +    cxpt->nr = sysctl.u.get_pmstat.u.getcx.nr;
   15.52 +    cxpt->last = sysctl.u.get_pmstat.u.getcx.last;
   15.53 +    cxpt->idle_time = sysctl.u.get_pmstat.u.getcx.idle_time;
   15.54 +
   15.55 +unlock_3:
   15.56 +    unlock_pages(cxpt->residencies, max_cx * sizeof(uint64_t));
   15.57 +unlock_2:
   15.58 +    unlock_pages(cxpt->triggers, max_cx * sizeof(uint64_t));
   15.59 +unlock_1:
   15.60 +    unlock_pages(cxpt, sizeof(struct xc_cx_stat));
   15.61 +unlock_0:
   15.62 +    return ret;
   15.63 +}
   15.64 +
   15.65 +int xc_pm_reset_cxstat(int xc_handle, int cpuid)
   15.66 +{
   15.67 +    DECLARE_SYSCTL;
   15.68 +
   15.69 +    sysctl.cmd = XEN_SYSCTL_get_pmstat;
   15.70 +    sysctl.u.get_pmstat.type = PMSTAT_reset_cxstat;
   15.71 +    sysctl.u.get_pmstat.cpuid = cpuid;
   15.72 +
   15.73 +    return xc_sysctl(xc_handle, &sysctl);
   15.74 +}
    16.1 --- a/tools/libxc/xenctrl.h	Tue May 20 18:54:09 2008 +0900
    16.2 +++ b/tools/libxc/xenctrl.h	Thu May 22 19:42:51 2008 +0900
    16.3 @@ -1053,4 +1053,17 @@ int xc_pm_get_max_px(int xc_handle, int 
    16.4  int xc_pm_get_pxstat(int xc_handle, int cpuid, struct xc_px_stat *pxpt);
    16.5  int xc_pm_reset_pxstat(int xc_handle, int cpuid);
    16.6  
    16.7 +struct xc_cx_stat {
    16.8 +    uint32_t nr;    /* entry nr in triggers & residencies, including C0 */
    16.9 +    uint32_t last;         /* last Cx state */
   16.10 +    uint64_t idle_time;    /* idle time from boot */
   16.11 +    uint64_t *triggers;    /* Cx trigger counts */
   16.12 +    uint64_t *residencies; /* Cx residencies */
   16.13 +};
   16.14 +typedef struct xc_cx_stat xc_cx_stat_t;
   16.15 +
   16.16 +int xc_pm_get_max_cx(int xc_handle, int cpuid, int *max_cx);
   16.17 +int xc_pm_get_cxstat(int xc_handle, int cpuid, struct xc_cx_stat *cxpt);
   16.18 +int xc_pm_reset_cxstat(int xc_handle, int cpuid);
   16.19 +
   16.20  #endif /* XENCTRL_H */
    17.1 --- a/tools/python/xen/util/blkif.py	Tue May 20 18:54:09 2008 +0900
    17.2 +++ b/tools/python/xen/util/blkif.py	Thu May 22 19:42:51 2008 +0900
    17.3 @@ -2,8 +2,6 @@ import os
    17.4  import re
    17.5  import string
    17.6  
    17.7 -from xen.xend.XendLogging import log
    17.8 -
    17.9  def expand_dev_name(name):
   17.10      if not name:
   17.11          return name
    18.1 --- a/tools/python/xen/xend/XendConfig.py	Tue May 20 18:54:09 2008 +0900
    18.2 +++ b/tools/python/xen/xend/XendConfig.py	Thu May 22 19:42:51 2008 +0900
    18.3 @@ -1143,10 +1143,11 @@ class XendConfig(dict):
    18.4                  if o_dev_type == 'vbd' or o_dev_type == 'tap':
    18.5                      blkdev_file = blkdev_uname_to_file(dev_uname)
    18.6                      o_dev_uname = sxp.child_value(o_dev_info, 'uname')
    18.7 -                    o_blkdev_file = blkdev_uname_to_file(o_dev_uname)
    18.8 -                    if blkdev_file == o_blkdev_file:
    18.9 -                        raise XendConfigError('The file "%s" is already used' %
   18.10 -                                              blkdev_file)
   18.11 +                    if o_dev_uname != None:
   18.12 +                        o_blkdev_file = blkdev_uname_to_file(o_dev_uname)
   18.13 +                        if blkdev_file == o_blkdev_file:
   18.14 +                            raise XendConfigError('The file "%s" is already used' %
   18.15 +                                                  blkdev_file)
   18.16                      o_blkdev_name = sxp.child_value(o_dev_info, 'dev')
   18.17                      o_devid = self._blkdev_name_to_number(o_blkdev_name)
   18.18                      if o_devid != None and devid == o_devid:
    19.1 --- a/tools/python/xen/xend/XendConstants.py	Tue May 20 18:54:09 2008 +0900
    19.2 +++ b/tools/python/xen/xend/XendConstants.py	Thu May 22 19:42:51 2008 +0900
    19.3 @@ -48,6 +48,7 @@ HVM_PARAM_VHPT_SIZE    = 8
    19.4  HVM_PARAM_BUFPIOREQ_PFN = 9
    19.5  HVM_PARAM_TIMER_MODE   = 10
    19.6  HVM_PARAM_HPET_ENABLED = 11
    19.7 +HVM_PARAM_ACPI_S_STATE = 14
    19.8  
    19.9  restart_modes = [
   19.10      "restart",
   19.11 @@ -102,11 +103,13 @@ LAST_SHUTDOWN_REASON = 'xend/last_shutdo
   19.12  TRIGGER_NMI   = 0
   19.13  TRIGGER_RESET = 1
   19.14  TRIGGER_INIT  = 2
   19.15 +TRIGGER_S3RESUME = 3
   19.16  
   19.17  TRIGGER_TYPE = {
   19.18      "nmi"   : TRIGGER_NMI,
   19.19      "reset" : TRIGGER_RESET,
   19.20 -    "init"  : TRIGGER_INIT
   19.21 +    "init"  : TRIGGER_INIT,
   19.22 +    "s3resume": TRIGGER_S3RESUME
   19.23  }
   19.24  
   19.25  #
    20.1 --- a/tools/python/xen/xend/XendDomain.py	Tue May 20 18:54:09 2008 +0900
    20.2 +++ b/tools/python/xen/xend/XendDomain.py	Thu May 22 19:42:51 2008 +0900
    20.3 @@ -1282,6 +1282,10 @@ class XendDomain:
    20.4  
    20.5          if dominfo.getDomid() == DOM0_ID:
    20.6              raise XendError("Cannot migrate privileged domain %s" % domid)
    20.7 +        if dominfo._stateGet() != DOM_STATE_RUNNING:
    20.8 +            raise VMBadState("Domain is not running",
    20.9 +                             POWER_STATE_NAMES[DOM_STATE_RUNNING],
   20.10 +                             POWER_STATE_NAMES[dominfo._stateGet()])
   20.11  
   20.12          """ The following call may raise a XendError exception """
   20.13          dominfo.testMigrateDevices(True, dst)
   20.14 @@ -1653,6 +1657,9 @@ class XendDomain:
   20.15              trigger = TRIGGER_TYPE[trigger_name.lower()]
   20.16          else:
   20.17              raise XendError("Invalid trigger: %s" % trigger_name)
   20.18 +        if trigger == TRIGGER_S3RESUME:
   20.19 +            xc.hvm_set_param(dominfo.getDomid(), HVM_PARAM_ACPI_S_STATE, 0)
   20.20 +            return None
   20.21          try:
   20.22              return xc.domain_send_trigger(dominfo.getDomid(),
   20.23                                            trigger,
    21.1 --- a/tools/python/xen/xend/xenstore/xswatch.py	Tue May 20 18:54:09 2008 +0900
    21.2 +++ b/tools/python/xen/xend/xenstore/xswatch.py	Thu May 22 19:42:51 2008 +0900
    21.3 @@ -9,8 +9,6 @@ import errno
    21.4  import threading
    21.5  from xen.xend.xenstore.xsutil import xshandle
    21.6  
    21.7 -from xen.xend.XendLogging import log
    21.8 -
    21.9  
   21.10  class xswatch:
   21.11  
   21.12 @@ -76,7 +74,7 @@ def watchMain():
   21.13                      else:
   21.14                          raise
   21.15          except:
   21.16 -            log.exception("read_watch failed")
   21.17 +            pass
   21.18              # Ignore this exception -- there's no point throwing it
   21.19              # further on because that will just kill the watcher thread,
   21.20              # which achieves nothing.
    22.1 --- a/tools/python/xen/xm/main.py	Tue May 20 18:54:09 2008 +0900
    22.2 +++ b/tools/python/xen/xm/main.py	Thu May 22 19:42:51 2008 +0900
    22.3 @@ -143,7 +143,7 @@ SUBCOMMAND_HELP = {
    22.4                       'Get/set credit scheduler parameters.'),
    22.5      'sysrq'       : ('<Domain> <letter>', 'Send a sysrq to a domain.'),
    22.6      'debug-keys'  : ('<Keys>', 'Send debug keys to Xen.'),
    22.7 -    'trigger'     : ('<Domain> <nmi|reset|init> [<VCPU>]',
    22.8 +    'trigger'     : ('<Domain> <nmi|reset|init|s3resume> [<VCPU>]',
    22.9                       'Send a trigger to a domain.'),
   22.10      'vcpu-list'   : ('[Domain, ...]',
   22.11                       'List the VCPUs for all/some domains.'),
    23.1 --- a/xen/arch/ia64/xen/domain.c	Tue May 20 18:54:09 2008 +0900
    23.2 +++ b/xen/arch/ia64/xen/domain.c	Thu May 22 19:42:51 2008 +0900
    23.3 @@ -644,10 +644,9 @@ void arch_domain_destroy(struct domain *
    23.4  	deallocate_rid_range(d);
    23.5  }
    23.6  
    23.7 -int arch_vcpu_reset(struct vcpu *v)
    23.8 +void arch_vcpu_reset(struct vcpu *v)
    23.9  {
   23.10  	/* FIXME: Stub for now */
   23.11 -	return 0;
   23.12  }
   23.13  
   23.14  /* Here it is assumed that all of the CPUs has same RSE.N_STACKED_PHYS */
    24.1 --- a/xen/arch/x86/Makefile	Tue May 20 18:54:09 2008 +0900
    24.2 +++ b/xen/arch/x86/Makefile	Thu May 22 19:42:51 2008 +0900
    24.3 @@ -50,6 +50,7 @@ obj-y += x86_emulate.o
    24.4  obj-y += machine_kexec.o
    24.5  obj-y += crash.o
    24.6  obj-y += tboot.o
    24.7 +obj-y += hpet.o
    24.8  
    24.9  obj-$(crash_debug) += gdbstub.o
   24.10  
    25.1 --- a/xen/arch/x86/acpi/cpu_idle.c	Tue May 20 18:54:09 2008 +0900
    25.2 +++ b/xen/arch/x86/acpi/cpu_idle.c	Thu May 22 19:42:51 2008 +0900
    25.3 @@ -37,12 +37,14 @@
    25.4  #include <xen/types.h>
    25.5  #include <xen/acpi.h>
    25.6  #include <xen/smp.h>
    25.7 +#include <xen/guest_access.h>
    25.8 +#include <xen/keyhandler.h>
    25.9  #include <asm/cache.h>
   25.10  #include <asm/io.h>
   25.11 -#include <xen/guest_access.h>
   25.12 +#include <asm/hpet.h>
   25.13 +#include <asm/processor.h>
   25.14  #include <public/platform.h>
   25.15 -#include <asm/processor.h>
   25.16 -#include <xen/keyhandler.h>
   25.17 +#include <public/sysctl.h>
   25.18  
   25.19  #define DEBUG_PM_CX
   25.20  
   25.21 @@ -127,45 +129,29 @@ static void print_acpi_power(uint32_t cp
   25.22  {
   25.23      uint32_t i;
   25.24  
   25.25 -    printk("saved cpu%d cx acpi info:\n", cpu);
   25.26 -    printk("\tcurrent state is C%d\n", (power->state)?power->state->type:-1);
   25.27 -    printk("\tbm_check_timestamp = %"PRId64"\n", power->bm_check_timestamp);
   25.28 -    printk("\tdefault_state = %d\n", power->default_state);
   25.29 -    printk("\tbm_activity = 0x%08x\n", power->bm_activity);
   25.30 -    printk("\tcount = %d\n", power->count);
   25.31 +    printk("==cpu%d==\n", cpu);
   25.32 +    printk("active state:\t\tC%d\n", (power->state)?power->state->type:-1);
   25.33 +    printk("max_cstate:\t\tC%d\n", max_cstate);
   25.34 +    printk("bus master activity:\t%08x\n", power->bm_activity);
   25.35 +    printk("states:\n");
   25.36      
   25.37 -    for ( i = 0; i < power->count; i++ )
   25.38 +    for ( i = 1; i < power->count; i++ )
   25.39      {
   25.40 -        printk("\tstates[%d]:\n", i);
   25.41 -        printk("\t\tvalid   = %d\n", power->states[i].valid);
   25.42 -        printk("\t\ttype    = %d\n", power->states[i].type);
   25.43 -        printk("\t\taddress = 0x%x\n", power->states[i].address);
   25.44 -        printk("\t\tspace_id = 0x%x\n", power->states[i].space_id);
   25.45 -        printk("\t\tlatency = %d\n", power->states[i].latency);
   25.46 -        printk("\t\tpower   = %d\n", power->states[i].power);
   25.47 -        printk("\t\tlatency_ticks = %d\n", power->states[i].latency_ticks);
   25.48 -        printk("\t\tusage   = %d\n", power->states[i].usage);
   25.49 -        printk("\t\ttime    = %"PRId64"\n", power->states[i].time);
   25.50 -
   25.51 -        printk("\t\tpromotion policy:\n");
   25.52 -        printk("\t\t\tcount    = %d\n", power->states[i].promotion.count);
   25.53 -        printk("\t\t\tstate    = C%d\n",
   25.54 -               (power->states[i].promotion.state) ? 
   25.55 -               power->states[i].promotion.state->type : -1);
   25.56 -        printk("\t\t\tthreshold.time = %d\n", power->states[i].promotion.threshold.time);
   25.57 -        printk("\t\t\tthreshold.ticks = %d\n", power->states[i].promotion.threshold.ticks);
   25.58 -        printk("\t\t\tthreshold.count = %d\n", power->states[i].promotion.threshold.count);
   25.59 -        printk("\t\t\tthreshold.bm = %d\n", power->states[i].promotion.threshold.bm);
   25.60 -
   25.61 -        printk("\t\tdemotion policy:\n");
   25.62 -        printk("\t\t\tcount    = %d\n", power->states[i].demotion.count);
   25.63 -        printk("\t\t\tstate    = C%d\n",
   25.64 -               (power->states[i].demotion.state) ? 
   25.65 -               power->states[i].demotion.state->type : -1);
   25.66 -        printk("\t\t\tthreshold.time = %d\n", power->states[i].demotion.threshold.time);
   25.67 -        printk("\t\t\tthreshold.ticks = %d\n", power->states[i].demotion.threshold.ticks);
   25.68 -        printk("\t\t\tthreshold.count = %d\n", power->states[i].demotion.threshold.count);
   25.69 -        printk("\t\t\tthreshold.bm = %d\n", power->states[i].demotion.threshold.bm);
   25.70 +        printk((power->states[i].type == power->state->type) ? "   *" : "    ");
   25.71 +        printk("C%d:\t\t", i);
   25.72 +        printk("type[C%d] ", power->states[i].type);
   25.73 +        if ( power->states[i].promotion.state )
   25.74 +            printk("promotion[C%d] ", power->states[i].promotion.state->type);
   25.75 +        else
   25.76 +            printk("promotion[--] ");
   25.77 +        if ( power->states[i].demotion.state )
   25.78 +            printk("demotion[C%d] ", power->states[i].demotion.state->type);
   25.79 +        else
   25.80 +            printk("demotion[--] ");
   25.81 +        printk("latency[%03d]\n ", power->states[i].latency);
   25.82 +        printk("\t\t\t");
   25.83 +        printk("usage[%08d] ", power->states[i].usage);
   25.84 +        printk("duration[%"PRId64"]\n", power->states[i].time);
   25.85      }
   25.86  }
   25.87  
   25.88 @@ -438,19 +424,19 @@ static void acpi_processor_idle(void)
   25.89          t1 = inl(pmtmr_ioport);
   25.90  
   25.91          /*
   25.92 -         * FIXME: Before invoking C3, be aware that TSC/APIC timer may be 
   25.93 +         * Before invoking C3, be aware that TSC/APIC timer may be 
   25.94           * stopped by H/W. Without carefully handling of TSC/APIC stop issues,
   25.95           * deep C state can't work correctly.
   25.96           */
   25.97          /* preparing TSC stop */
   25.98          cstate_save_tsc();
   25.99 -        /* placeholder for preparing APIC stop */
  25.100 -
  25.101 +        /* preparing APIC stop */
  25.102 +        hpet_broadcast_enter();
  25.103          /* Invoke C3 */
  25.104          acpi_idle_do_entry(cx);
  25.105  
  25.106 -        /* placeholder for recovering APIC */
  25.107 -
  25.108 +        /* recovering APIC */
  25.109 +        hpet_broadcast_exit();
  25.110          /* recovering TSC */
  25.111          cstate_restore_tsc();
  25.112  
  25.113 @@ -955,3 +941,41 @@ long set_cx_pminfo(uint32_t cpu, struct 
  25.114          
  25.115      return 0;
  25.116  }
  25.117 +
  25.118 +uint32_t pmstat_get_cx_nr(uint32_t cpuid)
  25.119 +{
  25.120 +    return processor_powers[cpuid].count;
  25.121 +}
  25.122 +
  25.123 +int pmstat_get_cx_stat(uint32_t cpuid, struct pm_cx_stat *stat)
  25.124 +{
  25.125 +    struct acpi_processor_power *power = &processor_powers[cpuid];
  25.126 +    struct vcpu *v = idle_vcpu[cpuid];
  25.127 +    uint64_t usage;
  25.128 +    int i;
  25.129 +
  25.130 +    stat->last = (power->state) ? power->state->type : 0;
  25.131 +    stat->nr = processor_powers[cpuid].count;
  25.132 +    stat->idle_time = v->runstate.time[RUNSTATE_running];
  25.133 +    if ( v->is_running )
  25.134 +        stat->idle_time += NOW() - v->runstate.state_entry_time;
  25.135 +
  25.136 +    for ( i = 0; i < power->count; i++ )
  25.137 +    {
  25.138 +        usage = power->states[i].usage;
  25.139 +        if ( copy_to_guest_offset(stat->triggers, i, &usage, 1) )
  25.140 +            return -EFAULT;
  25.141 +    }
  25.142 +    for ( i = 0; i < power->count; i++ )
  25.143 +        if ( copy_to_guest_offset(stat->residencies, i, 
  25.144 +                                  &power->states[i].time, 1) )
  25.145 +            return -EFAULT;
  25.146 +
  25.147 +    return 0;
  25.148 +}
  25.149 +
  25.150 +int pmstat_reset_cx_stat(uint32_t cpuid)
  25.151 +{
  25.152 +    return 0;
  25.153 +}
  25.154 +
    26.1 --- a/xen/arch/x86/acpi/pmstat.c	Tue May 20 18:54:09 2008 +0900
    26.2 +++ b/xen/arch/x86/acpi/pmstat.c	Thu May 22 19:42:51 2008 +0900
    26.3 @@ -42,6 +42,10 @@
    26.4  
    26.5  struct pm_px px_statistic_data[NR_CPUS];
    26.6  
    26.7 +extern uint32_t pmstat_get_cx_nr(uint32_t cpuid);
    26.8 +extern int pmstat_get_cx_stat(uint32_t cpuid, struct pm_cx_stat *stat);
    26.9 +extern int pmstat_reset_cx_stat(uint32_t cpuid);
   26.10 +
   26.11  int do_get_pm_info(struct xen_sysctl_get_pmstat *op)
   26.12  {
   26.13      int ret = 0;
   26.14 @@ -50,7 +54,7 @@ int do_get_pm_info(struct xen_sysctl_get
   26.15  
   26.16      /* to protect the case when Px was controlled by dom0-kernel */
   26.17      /* or when CPU_FREQ not set in which case ACPI Px objects not parsed */
   26.18 -    if ( !pmpt->perf.init )
   26.19 +    if ( !pmpt->perf.init && (op->type & PMSTAT_CATEGORY_MASK) == PMSTAT_PX )
   26.20          return -EINVAL;
   26.21  
   26.22      if ( !cpu_online(op->cpuid) )
   26.23 @@ -100,6 +104,25 @@ int do_get_pm_info(struct xen_sysctl_get
   26.24          break;
   26.25      }
   26.26  
   26.27 +    case PMSTAT_get_max_cx:
   26.28 +    {
   26.29 +        op->u.getcx.nr = pmstat_get_cx_nr(op->cpuid);
   26.30 +        ret = 0;
   26.31 +        break;
   26.32 +    }
   26.33 +
   26.34 +    case PMSTAT_get_cxstat:
   26.35 +    {
   26.36 +        ret = pmstat_get_cx_stat(op->cpuid, &op->u.getcx);
   26.37 +        break;
   26.38 +    }
   26.39 +
   26.40 +    case PMSTAT_reset_cxstat:
   26.41 +    {
   26.42 +        ret = pmstat_reset_cx_stat(op->cpuid);
   26.43 +        break;
   26.44 +    }
   26.45 +
   26.46      default:
   26.47          printk("not defined sub-hypercall @ do_get_pm_info\n");
   26.48          ret = -ENOSYS;
    27.1 --- a/xen/arch/x86/domain.c	Tue May 20 18:54:09 2008 +0900
    27.2 +++ b/xen/arch/x86/domain.c	Thu May 22 19:42:51 2008 +0900
    27.3 @@ -823,11 +823,10 @@ int arch_set_info_guest(
    27.4  #undef c
    27.5  }
    27.6  
    27.7 -int arch_vcpu_reset(struct vcpu *v)
    27.8 +void arch_vcpu_reset(struct vcpu *v)
    27.9  {
   27.10      destroy_gdt(v);
   27.11      vcpu_destroy_pagetables(v);
   27.12 -    return 0;
   27.13  }
   27.14  
   27.15  /* 
    28.1 --- a/xen/arch/x86/domain_build.c	Tue May 20 18:54:09 2008 +0900
    28.2 +++ b/xen/arch/x86/domain_build.c	Thu May 22 19:42:51 2008 +0900
    28.3 @@ -221,9 +221,7 @@ int __init construct_dom0(
    28.4  #if CONFIG_PAGING_LEVELS >= 4
    28.5      l4_pgentry_t *l4tab = NULL, *l4start = NULL;
    28.6  #endif
    28.7 -#if CONFIG_PAGING_LEVELS >= 3
    28.8      l3_pgentry_t *l3tab = NULL, *l3start = NULL;
    28.9 -#endif
   28.10      l2_pgentry_t *l2tab = NULL, *l2start = NULL;
   28.11      l1_pgentry_t *l1tab = NULL, *l1start = NULL;
   28.12  
   28.13 @@ -277,13 +275,6 @@ int __init construct_dom0(
   28.14      compat32   = 0;
   28.15      machine = elf_uval(&elf, elf.ehdr, e_machine);
   28.16      switch (CONFIG_PAGING_LEVELS) {
   28.17 -    case 2: /* x86_32 */
   28.18 -        if (parms.pae == PAEKERN_bimodal)
   28.19 -            parms.pae = PAEKERN_no;
   28.20 -        printk(" Xen  kernel: 32-bit, lsb\n");
   28.21 -        if (elf_32bit(&elf) && !parms.pae && machine == EM_386)
   28.22 -            compatible = 1;
   28.23 -        break;
   28.24      case 3: /* x86_32p */
   28.25          if (parms.pae == PAEKERN_bimodal)
   28.26              parms.pae = PAEKERN_extended_cr3;
   28.27 @@ -479,7 +470,6 @@ int __init construct_dom0(
   28.28      }
   28.29  
   28.30      /* WARNING: The new domain must have its 'processor' field filled in! */
   28.31 -#if CONFIG_PAGING_LEVELS == 3
   28.32      l3start = l3tab = (l3_pgentry_t *)mpt_alloc; mpt_alloc += PAGE_SIZE;
   28.33      l2start = l2tab = (l2_pgentry_t *)mpt_alloc; mpt_alloc += 4*PAGE_SIZE;
   28.34      memcpy(l2tab, idle_pg_table_l2, 4*PAGE_SIZE);
   28.35 @@ -489,13 +479,6 @@ int __init construct_dom0(
   28.36              l2e_from_paddr((u32)l2tab + i*PAGE_SIZE, __PAGE_HYPERVISOR);
   28.37      }
   28.38      v->arch.guest_table = pagetable_from_paddr((unsigned long)l3start);
   28.39 -#else
   28.40 -    l2start = l2tab = (l2_pgentry_t *)mpt_alloc; mpt_alloc += PAGE_SIZE;
   28.41 -    copy_page(l2tab, idle_pg_table);
   28.42 -    l2tab[LINEAR_PT_VIRT_START >> L2_PAGETABLE_SHIFT] =
   28.43 -        l2e_from_paddr((unsigned long)l2start, __PAGE_HYPERVISOR);
   28.44 -    v->arch.guest_table = pagetable_from_paddr((unsigned long)l2start);
   28.45 -#endif
   28.46  
   28.47      for ( i = 0; i < PDPT_L2_ENTRIES; i++ )
   28.48          l2tab[l2_linear_offset(PERDOMAIN_VIRT_START) + i] =
   28.49 @@ -539,16 +522,16 @@ int __init construct_dom0(
   28.50              if ( !get_page_type(page, PGT_writable_page) )
   28.51                  BUG();
   28.52  
   28.53 -#if CONFIG_PAGING_LEVELS == 3
   28.54 -        switch (count) {
   28.55 +        switch ( count )
   28.56 +        {
   28.57          case 0:
   28.58              page->u.inuse.type_info &= ~PGT_type_mask;
   28.59              page->u.inuse.type_info |= PGT_l3_page_table;
   28.60              get_page(page, d); /* an extra ref because of readable mapping */
   28.61  
   28.62              /* Get another ref to L3 page so that it can be pinned. */
   28.63 -            if ( !get_page_and_type(page, d, PGT_l3_page_table) )
   28.64 -                BUG();
   28.65 +            page->u.inuse.type_info++;
   28.66 +            page->count_info++;
   28.67              set_bit(_PGT_pinned, &page->u.inuse.type_info);
   28.68              break;
   28.69          case 1 ... 4:
   28.70 @@ -564,38 +547,6 @@ int __init construct_dom0(
   28.71              get_page(page, d); /* an extra ref because of readable mapping */
   28.72              break;
   28.73          }
   28.74 -#else
   28.75 -        if ( count == 0 )
   28.76 -        {
   28.77 -            page->u.inuse.type_info &= ~PGT_type_mask;
   28.78 -            page->u.inuse.type_info |= PGT_l2_page_table;
   28.79 -
   28.80 -            /*
   28.81 -             * No longer writable: decrement the type_count.
   28.82 -             * Installed as CR3: increment both the ref_count and type_count.
   28.83 -             * Net: just increment the ref_count.
   28.84 -             */
   28.85 -            get_page(page, d); /* an extra ref because of readable mapping */
   28.86 -
   28.87 -            /* Get another ref to L2 page so that it can be pinned. */
   28.88 -            if ( !get_page_and_type(page, d, PGT_l2_page_table) )
   28.89 -                BUG();
   28.90 -            set_bit(_PGT_pinned, &page->u.inuse.type_info);
   28.91 -        }
   28.92 -        else
   28.93 -        {
   28.94 -            page->u.inuse.type_info &= ~PGT_type_mask;
   28.95 -            page->u.inuse.type_info |= PGT_l1_page_table;
   28.96 -
   28.97 -            /*
   28.98 -             * No longer writable: decrement the type_count.
   28.99 -             * This is an L1 page, installed in a validated L2 page:
  28.100 -             * increment both the ref_count and type_count.
  28.101 -             * Net: just increment the ref_count.
  28.102 -             */
  28.103 -            get_page(page, d); /* an extra ref because of readable mapping */
  28.104 -        }
  28.105 -#endif
  28.106          if ( !((unsigned long)++l1tab & (PAGE_SIZE - 1)) )
  28.107              l1start = l1tab = (l1_pgentry_t *)(u32)l2e_get_paddr(*++l2tab);
  28.108      }
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/xen/arch/x86/hpet.c	Thu May 22 19:42:51 2008 +0900
    29.3 @@ -0,0 +1,291 @@
    29.4 +/******************************************************************************
    29.5 + * arch/x86/hpet.c
    29.6 + * 
    29.7 + * HPET management.
    29.8 + */
    29.9 +
   29.10 +#include <xen/config.h>
   29.11 +#include <xen/errno.h>
   29.12 +#include <xen/time.h>
   29.13 +#include <xen/timer.h>
   29.14 +#include <xen/smp.h>
   29.15 +#include <xen/softirq.h>
   29.16 +#include <asm/fixmap.h>
   29.17 +#include <asm/div64.h>
   29.18 +#include <asm/hpet.h>
   29.19 +
   29.20 +#define STIME_MAX ((s_time_t)((uint64_t)~0ull>>1))
   29.21 +
   29.22 +#define MAX_DELTA_NS MILLISECS(10*1000)
   29.23 +#define MIN_DELTA_NS MICROSECS(1)
   29.24 +
   29.25 +struct hpet_event_channel
   29.26 +{
   29.27 +    unsigned long mult;
   29.28 +    int           shift;
   29.29 +    s_time_t      next_event;
   29.30 +    cpumask_t     cpumask;
   29.31 +    spinlock_t    lock;
   29.32 +    void          (*event_handler)(struct hpet_event_channel *);
   29.33 +};
   29.34 +static struct hpet_event_channel hpet_event;
   29.35 +
   29.36 +unsigned long hpet_address;
   29.37 +
   29.38 +/*
   29.39 + * Calculate a multiplication factor for scaled math, which is used to convert
   29.40 + * nanoseconds based values to clock ticks:
   29.41 + *
   29.42 + * clock_ticks = (nanoseconds * factor) >> shift.
   29.43 + *
   29.44 + * div_sc is the rearranged equation to calculate a factor from a given clock
   29.45 + * ticks / nanoseconds ratio:
   29.46 + *
   29.47 + * factor = (clock_ticks << shift) / nanoseconds
   29.48 + */
   29.49 +static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec,
   29.50 +                                   int shift)
   29.51 +{
   29.52 +    uint64_t tmp = ((uint64_t)ticks) << shift;
   29.53 +
   29.54 +    do_div(tmp, nsec);
   29.55 +    return (unsigned long) tmp;
   29.56 +}
   29.57 +
   29.58 +/*
   29.59 + * Convert nanoseconds based values to clock ticks:
   29.60 + *
   29.61 + * clock_ticks = (nanoseconds * factor) >> shift.
   29.62 + */
   29.63 +static inline unsigned long ns2ticks(unsigned long nsec, int shift,
   29.64 +                                     unsigned long factor)
   29.65 +{
   29.66 +    uint64_t tmp = ((uint64_t)nsec * factor) >> shift;
   29.67 +
   29.68 +    return (unsigned long) tmp;
   29.69 +}
   29.70 +
   29.71 +static int hpet_legacy_next_event(unsigned long delta)
   29.72 +{
   29.73 +    unsigned long cnt;
   29.74 +
   29.75 +    cnt = hpet_read32(HPET_COUNTER);
   29.76 +    cnt += delta;
   29.77 +    hpet_write32(cnt, HPET_T0_CMP);
   29.78 +
   29.79 +    return ((long)(hpet_read32(HPET_COUNTER) - cnt) > 0) ? -ETIME : 0;
   29.80 +}
   29.81 +
   29.82 +static int reprogram_hpet_evt_channel(
   29.83 +    struct hpet_event_channel *ch,
   29.84 +    s_time_t expire, s_time_t now, int force)
   29.85 +{
   29.86 +    int64_t delta;
   29.87 +    int ret;
   29.88 +
   29.89 +    if ( unlikely(expire < 0) )
   29.90 +    {
   29.91 +        printk(KERN_DEBUG "reprogram: expire < 0\n");
   29.92 +        return -ETIME;
   29.93 +    }
   29.94 +
   29.95 +    delta = expire - now;
   29.96 +    if ( delta <= 0 )
   29.97 +    {
   29.98 +        printk(KERN_DEBUG "reprogram: expire(%"PRIx64") < "
   29.99 +               "now(%"PRIx64")\n", expire, now);
  29.100 +        if ( !force )
  29.101 +            return -ETIME;
  29.102 +    }
  29.103 +
  29.104 +    ch->next_event = expire;
  29.105 +
  29.106 +    delta = min_t(int64_t, delta, MAX_DELTA_NS);
  29.107 +    delta = max_t(int64_t, delta, MIN_DELTA_NS);
  29.108 +    delta = ns2ticks(delta, ch->shift, ch->mult);
  29.109 +
  29.110 +    ret = hpet_legacy_next_event(delta);
  29.111 +    while ( ret && force )
  29.112 +    {
  29.113 +        delta += delta;
  29.114 +        ret = hpet_legacy_next_event(delta);
  29.115 +    }
  29.116 +
  29.117 +    return ret;
  29.118 +}
  29.119 +
  29.120 +static int evt_do_broadcast(cpumask_t mask)
  29.121 +{
  29.122 +    int ret = 0, cpu = smp_processor_id();
  29.123 +
  29.124 +    if ( cpu_isset(cpu, mask) )
  29.125 +    {
  29.126 +        cpu_clear(cpu, mask);
  29.127 +        raise_softirq(TIMER_SOFTIRQ);
  29.128 +        ret = 1;
  29.129 +    }
  29.130 +
  29.131 +    if ( !cpus_empty(mask) )
  29.132 +    {
  29.133 +       cpumask_raise_softirq(mask, TIMER_SOFTIRQ);
  29.134 +       ret = 1;
  29.135 +    }
  29.136 +    return ret;
  29.137 +}
  29.138 +
  29.139 +static void handle_hpet_broadcast(struct hpet_event_channel *ch)
  29.140 +{
  29.141 +    cpumask_t mask;
  29.142 +    s_time_t now, next_event;
  29.143 +    int cpu, current_cpu = smp_processor_id();
  29.144 +
  29.145 +    spin_lock(&ch->lock);
  29.146 +
  29.147 +    if ( cpu_isset(current_cpu, ch->cpumask) )
  29.148 +        printk(KERN_DEBUG "WARNING: current cpu%d in bc_mask\n", current_cpu);
  29.149 +again:
  29.150 +    ch->next_event = STIME_MAX;
  29.151 +    next_event = STIME_MAX;
  29.152 +    mask = (cpumask_t)CPU_MASK_NONE;
  29.153 +    now = NOW();
  29.154 +
  29.155 +    /* find all expired events */
  29.156 +    for_each_cpu_mask(cpu, ch->cpumask)
  29.157 +    {
  29.158 +        if ( per_cpu(timer_deadline, cpu) <= now )
  29.159 +            cpu_set(cpu, mask);
  29.160 +        else if ( per_cpu(timer_deadline, cpu) < next_event )
  29.161 +            next_event = per_cpu(timer_deadline, cpu);
  29.162 +    }
  29.163 +    if ( per_cpu(timer_deadline, current_cpu) <= now )
  29.164 +        cpu_set(current_cpu, mask);
  29.165 +
  29.166 +    /* wakeup the cpus which have an expired event. */
  29.167 +    evt_do_broadcast(mask);
  29.168 +
  29.169 +    if ( next_event != STIME_MAX )
  29.170 +    {
  29.171 +        if ( reprogram_hpet_evt_channel(ch, next_event, now, 0) )
  29.172 +            goto again;
  29.173 +    }
  29.174 +    spin_unlock(&ch->lock);
  29.175 +}
  29.176 +
  29.177 +void hpet_broadcast_init(void)
  29.178 +{
  29.179 +    u64 hpet_rate;
  29.180 +    u32 hpet_id, cfg;
  29.181 +
  29.182 +    hpet_rate = hpet_setup();
  29.183 +    if ( hpet_rate == 0 )
  29.184 +        return;
  29.185 +
  29.186 +    hpet_id = hpet_read32(HPET_ID);
  29.187 +    if ( !(hpet_id & HPET_ID_LEGSUP) )
  29.188 +        return;
  29.189 +
  29.190 +    /* Start HPET legacy interrupts */
  29.191 +    cfg = hpet_read32(HPET_CFG);
  29.192 +    cfg |= HPET_CFG_LEGACY;
  29.193 +    hpet_write32(cfg, HPET_CFG);
  29.194 +
  29.195 +    /* set HPET T0 as oneshot */
  29.196 +    cfg = hpet_read32(HPET_T0_CFG);
  29.197 +    cfg &= ~HPET_TN_PERIODIC;
  29.198 +    cfg |= HPET_TN_ENABLE | HPET_TN_32BIT;
  29.199 +    hpet_write32(cfg, HPET_T0_CFG);
  29.200 +
  29.201 +    /*
  29.202 +     * The period is a femto seconds value. We need to calculate the scaled
  29.203 +     * math multiplication factor for nanosecond to hpet tick conversion.
  29.204 +     */
  29.205 +    hpet_event.mult = div_sc((unsigned long)hpet_rate, 1000000000ul, 32);
  29.206 +    hpet_event.shift = 32;
  29.207 +    hpet_event.next_event = STIME_MAX;
  29.208 +    hpet_event.event_handler = handle_hpet_broadcast;
  29.209 +    spin_lock_init(&hpet_event.lock);
  29.210 +}
  29.211 +
  29.212 +void hpet_broadcast_enter(void)
  29.213 +{
  29.214 +    struct hpet_event_channel *ch = &hpet_event;
  29.215 +
  29.216 +    cpu_set(smp_processor_id(), ch->cpumask);
  29.217 +
  29.218 +    spin_lock(&ch->lock);
  29.219 +
  29.220 +    /* reprogram if current cpu expire time is nearer */
  29.221 +    if ( this_cpu(timer_deadline) < ch->next_event )
  29.222 +        reprogram_hpet_evt_channel(ch, this_cpu(timer_deadline), NOW(), 1);
  29.223 +
  29.224 +    spin_unlock(&ch->lock);
  29.225 +}
  29.226 +
  29.227 +void hpet_broadcast_exit(void)
  29.228 +{
  29.229 +    struct hpet_event_channel *ch = &hpet_event;
  29.230 +    int cpu = smp_processor_id();
  29.231 +
  29.232 +    if ( cpu_test_and_clear(cpu, ch->cpumask) )
  29.233 +        reprogram_timer(per_cpu(timer_deadline, cpu));
  29.234 +}
  29.235 +
  29.236 +int hpet_legacy_irq_tick(void)
  29.237 +{
  29.238 +    if ( !hpet_event.event_handler )
  29.239 +        return 0;
  29.240 +    hpet_event.event_handler(&hpet_event);
  29.241 +    return 1;
  29.242 +}
  29.243 +
  29.244 +u64 hpet_setup(void)
  29.245 +{
  29.246 +    static u64 hpet_rate;
  29.247 +    static int initialised;
  29.248 +    u32 hpet_id, hpet_period, cfg;
  29.249 +    int i;
  29.250 +
  29.251 +    if ( initialised )
  29.252 +        return hpet_rate;
  29.253 +    initialised = 1;
  29.254 +
  29.255 +    if ( hpet_address == 0 )
  29.256 +        return 0;
  29.257 +
  29.258 +    set_fixmap_nocache(FIX_HPET_BASE, hpet_address);
  29.259 +
  29.260 +    hpet_id = hpet_read32(HPET_ID);
  29.261 +    if ( hpet_id == 0 )
  29.262 +    {
  29.263 +        printk("BAD HPET vendor id.\n");
  29.264 +        return 0;
  29.265 +    }
  29.266 +
  29.267 +    /* Check for sane period (100ps <= period <= 100ns). */
  29.268 +    hpet_period = hpet_read32(HPET_PERIOD);
  29.269 +    if ( (hpet_period > 100000000) || (hpet_period < 100000) )
  29.270 +    {
  29.271 +        printk("BAD HPET period %u.\n", hpet_period);
  29.272 +        return 0;
  29.273 +    }
  29.274 +
  29.275 +    cfg = hpet_read32(HPET_CFG);
  29.276 +    cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY);
  29.277 +    hpet_write32(cfg, HPET_CFG);
  29.278 +
  29.279 +    for ( i = 0; i <= ((hpet_id >> 8) & 31); i++ )
  29.280 +    {
  29.281 +        cfg = hpet_read32(HPET_T0_CFG + i*0x20);
  29.282 +        cfg &= ~HPET_TN_ENABLE;
  29.283 +        hpet_write32(cfg & ~HPET_TN_ENABLE, HPET_T0_CFG);
  29.284 +    }
  29.285 +
  29.286 +    cfg = hpet_read32(HPET_CFG);
  29.287 +    cfg |= HPET_CFG_ENABLE;
  29.288 +    hpet_write32(cfg, HPET_CFG);
  29.289 +
  29.290 +    hpet_rate = 1000000000000000ULL; /* 10^15 */
  29.291 +    (void)do_div(hpet_rate, hpet_period);
  29.292 +
  29.293 +    return hpet_rate;
  29.294 +}
    30.1 --- a/xen/arch/x86/hvm/hpet.c	Tue May 20 18:54:09 2008 +0900
    30.2 +++ b/xen/arch/x86/hvm/hpet.c	Thu May 22 19:42:51 2008 +0900
    30.3 @@ -591,3 +591,8 @@ void hpet_deinit(struct domain *d)
    30.4          kill_timer(&h->timers[i]);
    30.5  }
    30.6  
    30.7 +void hpet_reset(struct domain *d)
    30.8 +{
    30.9 +    hpet_deinit(d);
   30.10 +    hpet_init(d->vcpu[0]);
   30.11 +}
    31.1 --- a/xen/arch/x86/hvm/hvm.c	Tue May 20 18:54:09 2008 +0900
    31.2 +++ b/xen/arch/x86/hvm/hvm.c	Thu May 22 19:42:51 2008 +0900
    31.3 @@ -2058,6 +2058,118 @@ static int hvmop_set_pci_intx_level(
    31.4      return rc;
    31.5  }
    31.6  
    31.7 +void hvm_vcpu_reset_state(struct vcpu *v, uint16_t cs, uint16_t ip)
    31.8 +{
    31.9 +    struct domain *d = current->domain;
   31.10 +    struct vcpu_guest_context *ctxt;
   31.11 +    struct segment_register reg;
   31.12 +
   31.13 +    BUG_ON(vcpu_runnable(v));
   31.14 +
   31.15 +    domain_lock(d);
   31.16 +
   31.17 +    if ( v->is_initialised )
   31.18 +        goto out;
   31.19 +
   31.20 +    ctxt = &v->arch.guest_context;
   31.21 +    memset(ctxt, 0, sizeof(*ctxt));
   31.22 +    ctxt->flags = VGCF_online;
   31.23 +    ctxt->user_regs.eflags = 2;
   31.24 +    ctxt->user_regs.edx = 0x00000f00;
   31.25 +    ctxt->user_regs.eip = ip;
   31.26 +
   31.27 +    v->arch.hvm_vcpu.guest_cr[0] = X86_CR0_ET;
   31.28 +    hvm_update_guest_cr(v, 0);
   31.29 +
   31.30 +    v->arch.hvm_vcpu.guest_cr[2] = 0;
   31.31 +    hvm_update_guest_cr(v, 2);
   31.32 +
   31.33 +    v->arch.hvm_vcpu.guest_cr[3] = 0;
   31.34 +    hvm_update_guest_cr(v, 3);
   31.35 +
   31.36 +    v->arch.hvm_vcpu.guest_cr[4] = 0;
   31.37 +    hvm_update_guest_cr(v, 4);
   31.38 +
   31.39 +    v->arch.hvm_vcpu.guest_efer = 0;
   31.40 +    hvm_update_guest_efer(v);
   31.41 +
   31.42 +    reg.sel = cs;
   31.43 +    reg.base = (uint32_t)reg.sel << 4;
   31.44 +    reg.limit = 0xffff;
   31.45 +    reg.attr.bytes = 0x09b;
   31.46 +    hvm_set_segment_register(v, x86_seg_cs, &reg);
   31.47 +
   31.48 +    reg.sel = reg.base = 0;
   31.49 +    reg.limit = 0xffff;
   31.50 +    reg.attr.bytes = 0x093;
   31.51 +    hvm_set_segment_register(v, x86_seg_ds, &reg);
   31.52 +    hvm_set_segment_register(v, x86_seg_es, &reg);
   31.53 +    hvm_set_segment_register(v, x86_seg_fs, &reg);
   31.54 +    hvm_set_segment_register(v, x86_seg_gs, &reg);
   31.55 +    hvm_set_segment_register(v, x86_seg_ss, &reg);
   31.56 +
   31.57 +    reg.attr.bytes = 0x82; /* LDT */
   31.58 +    hvm_set_segment_register(v, x86_seg_ldtr, &reg);
   31.59 +
   31.60 +    reg.attr.bytes = 0x8b; /* 32-bit TSS (busy) */
   31.61 +    hvm_set_segment_register(v, x86_seg_tr, &reg);
   31.62 +
   31.63 +    reg.attr.bytes = 0;
   31.64 +    hvm_set_segment_register(v, x86_seg_gdtr, &reg);
   31.65 +    hvm_set_segment_register(v, x86_seg_idtr, &reg);
   31.66 +
   31.67 +    /* Sync AP's TSC with BSP's. */
   31.68 +    v->arch.hvm_vcpu.cache_tsc_offset =
   31.69 +        v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
   31.70 +    hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
   31.71 +
   31.72 +    v->arch.flags |= TF_kernel_mode;
   31.73 +    v->is_initialised = 1;
   31.74 +    clear_bit(_VPF_down, &v->pause_flags);
   31.75 +
   31.76 + out:
   31.77 +    domain_unlock(d);
   31.78 +}
   31.79 +
   31.80 +static void hvm_s3_suspend(struct domain *d)
   31.81 +{
   31.82 +    struct vcpu *v;
   31.83 +
   31.84 +    domain_pause(d);
   31.85 +    domain_lock(d);
   31.86 +
   31.87 +    if ( (d->vcpu[0] == NULL) ||
   31.88 +         test_and_set_bool(d->arch.hvm_domain.is_s3_suspended) )
   31.89 +    {
   31.90 +        domain_unlock(d);
   31.91 +        domain_unpause(d);
   31.92 +        return;
   31.93 +    }
   31.94 +
   31.95 +    for_each_vcpu ( d, v )
   31.96 +    {
   31.97 +        vlapic_reset(vcpu_vlapic(v));
   31.98 +        vcpu_reset(v);
   31.99 +    }
  31.100 +
  31.101 +    vpic_reset(d);
  31.102 +    vioapic_reset(d);
  31.103 +    pit_reset(d);
  31.104 +    rtc_reset(d);	
  31.105 +    pmtimer_reset(d);
  31.106 +    hpet_reset(d);
  31.107 +
  31.108 +    hvm_vcpu_reset_state(d->vcpu[0], 0xf000, 0xfff0);
  31.109 +
  31.110 +    domain_unlock(d);
  31.111 +}
  31.112 +
  31.113 +static void hvm_s3_resume(struct domain *d)
  31.114 +{
  31.115 +    if ( test_and_clear_bool(d->arch.hvm_domain.is_s3_suspended) )
  31.116 +        domain_unpause(d);
  31.117 +}
  31.118 +
  31.119  static int hvmop_set_isa_irq_level(
  31.120      XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t) uop)
  31.121  {
  31.122 @@ -2314,6 +2426,21 @@ long do_hvm_op(unsigned long op, XEN_GUE
  31.123                  }
  31.124                  domain_unpause(d);
  31.125                  break;
  31.126 +            case HVM_PARAM_ACPI_S_STATE:
  31.127 +                /* Privileged domains only, as we must domain_pause(d). */
  31.128 +                rc = -EPERM;
  31.129 +                if ( !IS_PRIV_FOR(current->domain, d) )
  31.130 +                    break;
  31.131 +
  31.132 +                rc = 0;
  31.133 +                if ( a.value == 3 )
  31.134 +                    hvm_s3_suspend(d);
  31.135 +                else if ( a.value == 0 )
  31.136 +                    hvm_s3_resume(d);
  31.137 +                else
  31.138 +                    rc = -EINVAL;
  31.139 +
  31.140 +                break;
  31.141              }
  31.142  
  31.143              if ( rc == 0 )
  31.144 @@ -2321,7 +2448,15 @@ long do_hvm_op(unsigned long op, XEN_GUE
  31.145          }
  31.146          else
  31.147          {
  31.148 -            a.value = d->arch.hvm_domain.params[a.index];
  31.149 +            switch ( a.index )
  31.150 +            {
  31.151 +            case HVM_PARAM_ACPI_S_STATE:
  31.152 +                a.value = d->arch.hvm_domain.is_s3_suspended ? 3 : 0;
  31.153 +                break;
  31.154 +            default:
  31.155 +                a.value = d->arch.hvm_domain.params[a.index];
  31.156 +                break;
  31.157 +            }
  31.158              rc = copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
  31.159          }
  31.160  
    32.1 --- a/xen/arch/x86/hvm/i8254.c	Tue May 20 18:54:09 2008 +0900
    32.2 +++ b/xen/arch/x86/hvm/i8254.c	Thu May 22 19:42:51 2008 +0900
    32.3 @@ -446,22 +446,16 @@ static int pit_load(struct domain *d, hv
    32.4  
    32.5  HVM_REGISTER_SAVE_RESTORE(PIT, pit_save, pit_load, 1, HVMSR_PER_DOM);
    32.6  
    32.7 -void pit_init(struct vcpu *v, unsigned long cpu_khz)
    32.8 +void pit_reset(struct domain *d)
    32.9  {
   32.10 -    PITState *pit = vcpu_vpit(v);
   32.11 +    PITState *pit = domain_vpit(d);
   32.12      struct hvm_hw_pit_channel *s;
   32.13      int i;
   32.14  
   32.15 -    spin_lock_init(&pit->lock);
   32.16 -
   32.17 -    /* Some sub-functions assert that they are called with the lock held. */
   32.18 -    spin_lock(&pit->lock);
   32.19 -
   32.20 +    destroy_periodic_time(&pit->pt0);
   32.21      pit->pt0.source = PTSRC_isa;
   32.22  
   32.23 -    register_portio_handler(v->domain, PIT_BASE, 4, handle_pit_io);
   32.24 -    register_portio_handler(v->domain, 0x61, 1, handle_speaker_io);
   32.25 -    ticks_per_sec(v) = cpu_khz * (int64_t)1000;
   32.26 +    spin_lock(&pit->lock);
   32.27  
   32.28      for ( i = 0; i < 3; i++ )
   32.29      {
   32.30 @@ -474,6 +468,20 @@ void pit_init(struct vcpu *v, unsigned l
   32.31      spin_unlock(&pit->lock);
   32.32  }
   32.33  
   32.34 +void pit_init(struct vcpu *v, unsigned long cpu_khz)
   32.35 +{
   32.36 +    PITState *pit = vcpu_vpit(v);
   32.37 +
   32.38 +    spin_lock_init(&pit->lock);
   32.39 +
   32.40 +    register_portio_handler(v->domain, PIT_BASE, 4, handle_pit_io);
   32.41 +    register_portio_handler(v->domain, 0x61, 1, handle_speaker_io);
   32.42 +
   32.43 +    ticks_per_sec(v) = cpu_khz * (int64_t)1000;
   32.44 +
   32.45 +    pit_reset(v->domain);
   32.46 +}
   32.47 +
   32.48  void pit_deinit(struct domain *d)
   32.49  {
   32.50      PITState *pit = domain_vpit(d);
    33.1 --- a/xen/arch/x86/hvm/pmtimer.c	Tue May 20 18:54:09 2008 +0900
    33.2 +++ b/xen/arch/x86/hvm/pmtimer.c	Thu May 22 19:42:51 2008 +0900
    33.3 @@ -276,3 +276,9 @@ void pmtimer_deinit(struct domain *d)
    33.4      PMTState *s = &d->arch.hvm_domain.pl_time.vpmt;
    33.5      kill_timer(&s->timer);
    33.6  }
    33.7 +
    33.8 +void pmtimer_reset(struct domain *d)
    33.9 +{
   33.10 +    /* Reset the counter. */
   33.11 +    d->arch.hvm_domain.pl_time.vpmt.pm.tmr_val = 0;
   33.12 +}
    34.1 --- a/xen/arch/x86/hvm/rtc.c	Tue May 20 18:54:09 2008 +0900
    34.2 +++ b/xen/arch/x86/hvm/rtc.c	Thu May 22 19:42:51 2008 +0900
    34.3 @@ -511,3 +511,9 @@ void rtc_deinit(struct domain *d)
    34.4      kill_timer(&s->second_timer);
    34.5      kill_timer(&s->second_timer2);
    34.6  }
    34.7 +
    34.8 +void rtc_reset(struct domain *d)
    34.9 +{
   34.10 +    RTCState *s = domain_vrtc(d);
   34.11 +    destroy_periodic_time(&s->pt);
   34.12 +}
    35.1 --- a/xen/arch/x86/hvm/vioapic.c	Tue May 20 18:54:09 2008 +0900
    35.2 +++ b/xen/arch/x86/hvm/vioapic.c	Thu May 22 19:42:51 2008 +0900
    35.3 @@ -494,21 +494,25 @@ static int ioapic_load(struct domain *d,
    35.4  
    35.5  HVM_REGISTER_SAVE_RESTORE(IOAPIC, ioapic_save, ioapic_load, 1, HVMSR_PER_DOM);
    35.6  
    35.7 -int vioapic_init(struct domain *d)
    35.8 +void vioapic_reset(struct domain *d)
    35.9  {
   35.10 -    struct hvm_vioapic *vioapic;
   35.11 +    struct hvm_vioapic *vioapic = d->arch.hvm_domain.vioapic;
   35.12      int i;
   35.13  
   35.14 -    vioapic = d->arch.hvm_domain.vioapic = xmalloc(struct hvm_vioapic);
   35.15 -    if ( vioapic == NULL )
   35.16 -        return -ENOMEM;
   35.17 -
   35.18 -    vioapic->domain = d;
   35.19 -
   35.20      memset(&vioapic->hvm_hw_vioapic, 0, sizeof(vioapic->hvm_hw_vioapic));
   35.21      for ( i = 0; i < VIOAPIC_NUM_PINS; i++ )
   35.22          vioapic->hvm_hw_vioapic.redirtbl[i].fields.mask = 1;
   35.23      vioapic->hvm_hw_vioapic.base_address = VIOAPIC_DEFAULT_BASE_ADDRESS;
   35.24 +}
   35.25 +
   35.26 +int vioapic_init(struct domain *d)
   35.27 +{
   35.28 +    if ( (d->arch.hvm_domain.vioapic == NULL) &&
   35.29 +         ((d->arch.hvm_domain.vioapic = xmalloc(struct hvm_vioapic)) == NULL) )
   35.30 +        return -ENOMEM;
   35.31 +
   35.32 +    d->arch.hvm_domain.vioapic->domain = d;
   35.33 +    vioapic_reset(d);
   35.34  
   35.35      return 0;
   35.36  }
    36.1 --- a/xen/arch/x86/hvm/vlapic.c	Tue May 20 18:54:09 2008 +0900
    36.2 +++ b/xen/arch/x86/hvm/vlapic.c	Thu May 22 19:42:51 2008 +0900
    36.3 @@ -298,10 +298,6 @@ static int vlapic_accept_init(struct vcp
    36.4  
    36.5  static int vlapic_accept_sipi(struct vcpu *v, int trampoline_vector)
    36.6  {
    36.7 -    struct domain *d = current->domain;
    36.8 -    struct vcpu_guest_context *ctxt;
    36.9 -    struct segment_register reg;
   36.10 -
   36.11      /* If the VCPU is not on its way down we have nothing to do. */
   36.12      if ( !test_bit(_VPF_down, &v->pause_flags) )
   36.13          return X86EMUL_OKAY;
   36.14 @@ -309,68 +305,10 @@ static int vlapic_accept_sipi(struct vcp
   36.15      if ( !vlapic_vcpu_pause_async(v) )
   36.16          return X86EMUL_RETRY;
   36.17  
   36.18 -    domain_lock(d);
   36.19 -
   36.20 -    if ( v->is_initialised )
   36.21 -        goto out;
   36.22 -
   36.23 -    ctxt = &v->arch.guest_context;
   36.24 -    memset(ctxt, 0, sizeof(*ctxt));
   36.25 -    ctxt->flags = VGCF_online;
   36.26 -    ctxt->user_regs.eflags = 2;
   36.27 -
   36.28 -    v->arch.hvm_vcpu.guest_cr[0] = X86_CR0_ET;
   36.29 -    hvm_update_guest_cr(v, 0);
   36.30 -
   36.31 -    v->arch.hvm_vcpu.guest_cr[2] = 0;
   36.32 -    hvm_update_guest_cr(v, 2);
   36.33 -
   36.34 -    v->arch.hvm_vcpu.guest_cr[3] = 0;
   36.35 -    hvm_update_guest_cr(v, 3);
   36.36 -
   36.37 -    v->arch.hvm_vcpu.guest_cr[4] = 0;
   36.38 -    hvm_update_guest_cr(v, 4);
   36.39 -
   36.40 -    v->arch.hvm_vcpu.guest_efer = 0;
   36.41 -    hvm_update_guest_efer(v);
   36.42 -
   36.43 -    reg.sel = trampoline_vector << 8;
   36.44 -    reg.base = (uint32_t)reg.sel << 4;
   36.45 -    reg.limit = 0xffff;
   36.46 -    reg.attr.bytes = 0x89b;
   36.47 -    hvm_set_segment_register(v, x86_seg_cs, &reg);
   36.48 +    hvm_vcpu_reset_state(v, trampoline_vector << 8, 0);
   36.49  
   36.50 -    reg.sel = reg.base = 0;
   36.51 -    reg.limit = 0xffff;
   36.52 -    reg.attr.bytes = 0x893;
   36.53 -    hvm_set_segment_register(v, x86_seg_ds, &reg);
   36.54 -    hvm_set_segment_register(v, x86_seg_es, &reg);
   36.55 -    hvm_set_segment_register(v, x86_seg_fs, &reg);
   36.56 -    hvm_set_segment_register(v, x86_seg_gs, &reg);
   36.57 -    hvm_set_segment_register(v, x86_seg_ss, &reg);
   36.58 -
   36.59 -    reg.attr.bytes = 0x82; /* LDT */
   36.60 -    hvm_set_segment_register(v, x86_seg_ldtr, &reg);
   36.61 -
   36.62 -    reg.attr.bytes = 0x8b; /* 32-bit TSS (busy) */
   36.63 -    hvm_set_segment_register(v, x86_seg_tr, &reg);
   36.64 +    vcpu_unpause(v);
   36.65  
   36.66 -    reg.attr.bytes = 0;
   36.67 -    hvm_set_segment_register(v, x86_seg_gdtr, &reg);
   36.68 -    hvm_set_segment_register(v, x86_seg_idtr, &reg);
   36.69 -
   36.70 -    /* Sync AP's TSC with BSP's. */
   36.71 -    v->arch.hvm_vcpu.cache_tsc_offset =
   36.72 -        v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
   36.73 -    hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
   36.74 -
   36.75 -    v->arch.flags |= TF_kernel_mode;
   36.76 -    v->is_initialised = 1;
   36.77 -    clear_bit(_VPF_down, &v->pause_flags);
   36.78 -
   36.79 - out:
   36.80 -    domain_unlock(d);
   36.81 -    vcpu_unpause(v);
   36.82      return X86EMUL_OKAY;
   36.83  }
   36.84  
   36.85 @@ -1028,23 +966,26 @@ int vlapic_init(struct vcpu *v)
   36.86      if ( boot_cpu_data.x86_vendor == X86_VENDOR_INTEL )
   36.87          memflags |= MEMF_bits(32);
   36.88  #endif
   36.89 -
   36.90 -    vlapic->regs_page = alloc_domheap_page(NULL, memflags);
   36.91 -    if ( vlapic->regs_page == NULL )
   36.92 +    if (vlapic->regs_page == NULL)
   36.93      {
   36.94 -        dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n",
   36.95 -                v->domain->domain_id, v->vcpu_id);
   36.96 -        return -ENOMEM;
   36.97 +        vlapic->regs_page = alloc_domheap_page(NULL, memflags);
   36.98 +        if ( vlapic->regs_page == NULL )
   36.99 +        {
  36.100 +            dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n",
  36.101 +                    v->domain->domain_id, v->vcpu_id);
  36.102 +            return -ENOMEM;
  36.103 +        }
  36.104      }
  36.105 -
  36.106 -    vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page));
  36.107 -    if ( vlapic->regs == NULL )
  36.108 +    if (vlapic->regs == NULL) 
  36.109      {
  36.110 -        dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n",
  36.111 -                v->domain->domain_id, v->vcpu_id);
  36.112 -        return -ENOMEM;
  36.113 +        vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page));
  36.114 +        if ( vlapic->regs == NULL )
  36.115 +        {
  36.116 +            dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n",
  36.117 +                    v->domain->domain_id, v->vcpu_id);
  36.118 +            return -ENOMEM;
  36.119 +        }
  36.120      }
  36.121 -
  36.122      clear_page(vlapic->regs);
  36.123  
  36.124      vlapic_reset(vlapic);
    37.1 --- a/xen/arch/x86/hvm/vpic.c	Tue May 20 18:54:09 2008 +0900
    37.2 +++ b/xen/arch/x86/hvm/vpic.c	Thu May 22 19:42:51 2008 +0900
    37.3 @@ -395,7 +395,7 @@ static int vpic_load(struct domain *d, h
    37.4  
    37.5  HVM_REGISTER_SAVE_RESTORE(PIC, vpic_save, vpic_load, 2, HVMSR_PER_DOM);
    37.6  
    37.7 -void vpic_init(struct domain *d)
    37.8 +void vpic_reset(struct domain *d)
    37.9  {
   37.10      struct hvm_hw_vpic *vpic;
   37.11  
   37.12 @@ -404,13 +404,20 @@ void vpic_init(struct domain *d)
   37.13      memset(vpic, 0, sizeof(*vpic));
   37.14      vpic->is_master = 1;
   37.15      vpic->elcr      = 1 << 2;
   37.16 -    register_portio_handler(d, 0x20, 2, vpic_intercept_pic_io);
   37.17 -    register_portio_handler(d, 0x4d0, 1, vpic_intercept_elcr_io);
   37.18  
   37.19      /* Slave PIC. */
   37.20      vpic++;
   37.21      memset(vpic, 0, sizeof(*vpic));
   37.22 +}
   37.23 +
   37.24 +void vpic_init(struct domain *d)
   37.25 +{
   37.26 +    vpic_reset(d);
   37.27 +
   37.28 +    register_portio_handler(d, 0x20, 2, vpic_intercept_pic_io);
   37.29      register_portio_handler(d, 0xa0, 2, vpic_intercept_pic_io);
   37.30 +
   37.31 +    register_portio_handler(d, 0x4d0, 1, vpic_intercept_elcr_io);
   37.32      register_portio_handler(d, 0x4d1, 1, vpic_intercept_elcr_io);
   37.33  }
   37.34  
    38.1 --- a/xen/arch/x86/mm/hap/p2m-ept.c	Tue May 20 18:54:09 2008 +0900
    38.2 +++ b/xen/arch/x86/mm/hap/p2m-ept.c	Thu May 22 19:42:51 2008 +0900
    38.3 @@ -49,10 +49,35 @@ static void ept_p2m_type_to_flags(ept_en
    38.4  
    38.5  #define GUEST_TABLE_NORMAL_PAGE 1
    38.6  #define GUEST_TABLE_SUPER_PAGE  2
    38.7 +#define GUEST_TABLE_SPLIT_PAGE  3
    38.8 +
    38.9 +static int ept_set_middle_entry(struct domain *d, ept_entry_t *ept_entry)
   38.10 +{
   38.11 +    struct page_info *pg;
   38.12 +
   38.13 +    pg = d->arch.p2m->alloc_page(d);
   38.14 +    if ( pg == NULL )
   38.15 +        return 0;
   38.16 +
   38.17 +    pg->count_info = 1;
   38.18 +    pg->u.inuse.type_info = 1 | PGT_validated;
   38.19 +    list_add_tail(&pg->list, &d->arch.p2m->pages);
   38.20 +
   38.21 +    ept_entry->emt = 0;
   38.22 +    ept_entry->sp_avail = 0;
   38.23 +    ept_entry->avail1 = 0;
   38.24 +    ept_entry->mfn = page_to_mfn(pg);
   38.25 +    ept_entry->rsvd = 0;
   38.26 +    ept_entry->avail2 = 0;
   38.27 +    /* last step */
   38.28 +    ept_entry->r = ept_entry->w = ept_entry->x = 1;
   38.29 +
   38.30 +    return 1;
   38.31 +}
   38.32  
   38.33  static int ept_next_level(struct domain *d, bool_t read_only,
   38.34                            ept_entry_t **table, unsigned long *gfn_remainder,
   38.35 -                          u32 shift)
   38.36 +                          u32 shift, int order)
   38.37  {
   38.38      ept_entry_t *ept_entry, *next;
   38.39      u32 index;
   38.40 @@ -63,27 +88,11 @@ static int ept_next_level(struct domain 
   38.41  
   38.42      if ( !(ept_entry->epte & 0x7) )
   38.43      {
   38.44 -        struct page_info *pg;
   38.45 -
   38.46          if ( read_only )
   38.47              return 0;
   38.48  
   38.49 -        pg = d->arch.p2m->alloc_page(d);
   38.50 -        if ( pg == NULL )
   38.51 +        if ( !ept_set_middle_entry(d, ept_entry) )
   38.52              return 0;
   38.53 -
   38.54 -        pg->count_info = 1;
   38.55 -        pg->u.inuse.type_info = 1 | PGT_validated;
   38.56 -        list_add_tail(&pg->list, &d->arch.p2m->pages);
   38.57 -
   38.58 -        ept_entry->emt = 0;
   38.59 -        ept_entry->sp_avail = 0;
   38.60 -        ept_entry->avail1 = 0;
   38.61 -        ept_entry->mfn = page_to_mfn(pg);
   38.62 -        ept_entry->rsvd = 0;
   38.63 -        ept_entry->avail2 = 0;
   38.64 -        /* last step */
   38.65 -        ept_entry->r = ept_entry->w = ept_entry->x = 1;
   38.66      }
   38.67  
   38.68      if ( !ept_entry->sp_avail )
   38.69 @@ -95,7 +104,12 @@ static int ept_next_level(struct domain 
   38.70          return GUEST_TABLE_NORMAL_PAGE;
   38.71      }
   38.72      else
   38.73 -        return GUEST_TABLE_SUPER_PAGE;
   38.74 +    {
   38.75 +        if ( order == shift || read_only )
   38.76 +            return GUEST_TABLE_SUPER_PAGE;
   38.77 +        else
   38.78 +            return GUEST_TABLE_SPLIT_PAGE;
   38.79 +    }
   38.80  }
   38.81  
   38.82  static int
   38.83 @@ -109,7 +123,9 @@ ept_set_entry(struct domain *d, unsigned
   38.84      int i, rv = 0, ret = 0;
   38.85      int walk_level = order / EPT_TABLE_ORDER;
   38.86  
   38.87 -    /* Should check if gfn obeys GAW here */
   38.88 +    /* we only support 4k and 2m pages now */
   38.89 +
   38.90 +    BUG_ON(order && order != EPT_TABLE_ORDER);
   38.91  
   38.92      if (  order != 0 )
   38.93          if ( (gfn & ((1UL << order) - 1)) )
   38.94 @@ -122,10 +138,10 @@ ept_set_entry(struct domain *d, unsigned
   38.95      for ( i = EPT_DEFAULT_GAW; i > walk_level; i-- )
   38.96      {
   38.97          ret = ept_next_level(d, 0, &table, &gfn_remainder,
   38.98 -          i * EPT_TABLE_ORDER);
   38.99 +          i * EPT_TABLE_ORDER, order);
  38.100          if ( !ret )
  38.101              goto out;
  38.102 -        else if ( ret == GUEST_TABLE_SUPER_PAGE )
  38.103 +        else if ( ret != GUEST_TABLE_NORMAL_PAGE )
  38.104              break;
  38.105      }
  38.106  
  38.107 @@ -135,35 +151,87 @@ ept_set_entry(struct domain *d, unsigned
  38.108  
  38.109      ept_entry = table + index;
  38.110  
  38.111 -    if ( mfn_valid(mfn_x(mfn)) || (p2mt == p2m_mmio_direct) )
  38.112 +    if ( ret != GUEST_TABLE_SPLIT_PAGE )
  38.113      {
  38.114 -        /* Track the highest gfn for which we have ever had a valid mapping */
  38.115 -        if ( gfn > d->arch.p2m->max_mapped_pfn )
  38.116 -            d->arch.p2m->max_mapped_pfn = gfn;
  38.117 +        if ( mfn_valid(mfn_x(mfn)) || (p2mt == p2m_mmio_direct) )
  38.118 +        {
  38.119 +            /* Track the highest gfn for which we have ever had a valid mapping */
  38.120 +            if ( gfn > d->arch.p2m->max_mapped_pfn )
  38.121 +                d->arch.p2m->max_mapped_pfn = gfn;
  38.122  
  38.123 -        ept_entry->emt = EPT_DEFAULT_MT;
  38.124 -        ept_entry->sp_avail = walk_level ? 1 : 0;
  38.125 +            ept_entry->emt = EPT_DEFAULT_MT;
  38.126 +            ept_entry->sp_avail = walk_level ? 1 : 0;
  38.127  
  38.128 -        if ( ret == GUEST_TABLE_SUPER_PAGE )
  38.129 -        {
  38.130 -            ept_entry->mfn = mfn_x(mfn) - offset;
  38.131 -            if ( ept_entry->avail1 == p2m_ram_logdirty &&
  38.132 -              p2mt == p2m_ram_rw )
  38.133 -                for ( i = 0; i < 512; i++ )
  38.134 -                    paging_mark_dirty(d, mfn_x(mfn)-offset+i);
  38.135 +            if ( ret == GUEST_TABLE_SUPER_PAGE )
  38.136 +            {
  38.137 +                ept_entry->mfn = mfn_x(mfn) - offset;
  38.138 +                if ( ept_entry->avail1 == p2m_ram_logdirty &&
  38.139 +                  p2mt == p2m_ram_rw )
  38.140 +                    for ( i = 0; i < 512; i++ )
  38.141 +                        paging_mark_dirty(d, mfn_x(mfn)-offset+i);
  38.142 +            }
  38.143 +            else
  38.144 +                ept_entry->mfn = mfn_x(mfn);
  38.145 +
  38.146 +            ept_entry->avail1 = p2mt;
  38.147 +            ept_entry->rsvd = 0;
  38.148 +            ept_entry->avail2 = 0;
  38.149 +            /* last step */
  38.150 +            ept_entry->r = ept_entry->w = ept_entry->x = 1;
  38.151 +            ept_p2m_type_to_flags(ept_entry, p2mt);
  38.152          }
  38.153          else
  38.154 -            ept_entry->mfn = mfn_x(mfn);
  38.155 -
  38.156 -        ept_entry->avail1 = p2mt;
  38.157 -        ept_entry->rsvd = 0;
  38.158 -        ept_entry->avail2 = 0;
  38.159 -        /* last step */
  38.160 -        ept_entry->r = ept_entry->w = ept_entry->x = 1;
  38.161 -        ept_p2m_type_to_flags(ept_entry, p2mt);
  38.162 +            ept_entry->epte = 0;
  38.163      }
  38.164      else
  38.165 -        ept_entry->epte = 0;
  38.166 +    {
  38.167 +        /* It's super page before, now set one of the 4k pages, so
  38.168 +         * we should split the 2m page to 4k pages now.
  38.169 +         */
  38.170 +
  38.171 +        ept_entry_t *split_table = NULL;
  38.172 +        ept_entry_t *split_ept_entry = NULL;
  38.173 +        unsigned long split_mfn = ept_entry->mfn;
  38.174 +        p2m_type_t split_p2mt = ept_entry->avail1;
  38.175 +
  38.176 +        /* alloc new page for new ept middle level entry which is
  38.177 +         * before a leaf super entry
  38.178 +         */
  38.179 +
  38.180 +        if ( !ept_set_middle_entry(d, ept_entry) )
  38.181 +            goto out;
  38.182 +
  38.183 +        /* split the super page before to 4k pages */
  38.184 +
  38.185 +        split_table = map_domain_page(ept_entry->mfn);
  38.186 +
  38.187 +        for ( i = 0; i < 512; i++ )
  38.188 +        {
  38.189 +            split_ept_entry = split_table + i;
  38.190 +            split_ept_entry->emt = EPT_DEFAULT_MT;
  38.191 +            split_ept_entry->sp_avail =  0;
  38.192 +
  38.193 +            split_ept_entry->mfn = split_mfn+i;
  38.194 +
  38.195 +            split_ept_entry->avail1 = split_p2mt;
  38.196 +            split_ept_entry->rsvd = 0;
  38.197 +            split_ept_entry->avail2 = 0;
  38.198 +            /* last step */
  38.199 +            split_ept_entry->r = split_ept_entry->w = split_ept_entry->x = 1;
  38.200 +            ept_p2m_type_to_flags(split_ept_entry, split_p2mt);
  38.201 +        }
  38.202 +
  38.203 +        /* Set the destinated 4k page as normal */
  38.204 +
  38.205 +        offset = gfn & ((1 << EPT_TABLE_ORDER) - 1);
  38.206 +        split_ept_entry = split_table + offset;
  38.207 +        split_ept_entry->mfn = mfn_x(mfn);
  38.208 +        split_ept_entry->avail1 = p2mt;
  38.209 +        ept_p2m_type_to_flags(split_ept_entry, p2mt);
  38.210 +
  38.211 +        unmap_domain_page(split_table);
  38.212 +
  38.213 +    }
  38.214  
  38.215      /* Success */
  38.216      rv = 1;
  38.217 @@ -179,22 +247,22 @@ out:
  38.218      {
  38.219          if ( p2mt == p2m_ram_rw )
  38.220          {
  38.221 -            if ( ret == GUEST_TABLE_SUPER_PAGE )
  38.222 +            if ( order == EPT_TABLE_ORDER )
  38.223              {
  38.224                  for ( i = 0; i < 512; i++ )
  38.225                      iommu_map_page(d, gfn-offset+i, mfn_x(mfn)-offset+i);
  38.226              }
  38.227 -            else if ( ret )
  38.228 +            else if ( !order )
  38.229                  iommu_map_page(d, gfn, mfn_x(mfn));
  38.230          }
  38.231          else
  38.232          {
  38.233 -            if ( ret == GUEST_TABLE_SUPER_PAGE )
  38.234 +            if ( order == EPT_TABLE_ORDER )
  38.235              {
  38.236                  for ( i = 0; i < 512; i++ )
  38.237                      iommu_unmap_page(d, gfn-offset+i);
  38.238              }
  38.239 -            else if ( ret )
  38.240 +            else if ( !order )
  38.241                  iommu_unmap_page(d, gfn);
  38.242          }
  38.243      }
  38.244 @@ -230,7 +298,7 @@ static mfn_t ept_get_entry(struct domain
  38.245      for ( i = EPT_DEFAULT_GAW; i > 0; i-- )
  38.246      {
  38.247          ret = ept_next_level(d, 1, &table, &gfn_remainder,
  38.248 -                             i * EPT_TABLE_ORDER);
  38.249 +                             i * EPT_TABLE_ORDER, 0);
  38.250          if ( !ret )
  38.251              goto out;
  38.252          else if ( ret == GUEST_TABLE_SUPER_PAGE )
    39.1 --- a/xen/arch/x86/mm/p2m.c	Tue May 20 18:54:09 2008 +0900
    39.2 +++ b/xen/arch/x86/mm/p2m.c	Thu May 22 19:42:51 2008 +0900
    39.3 @@ -250,7 +250,7 @@ p2m_set_entry(struct domain *d, unsigned
    39.4      // XXX -- this might be able to be faster iff current->domain == d
    39.5      mfn_t table_mfn = pagetable_get_mfn(d->arch.phys_table);
    39.6      void *table =map_domain_page(mfn_x(table_mfn));
    39.7 -    unsigned long gfn_remainder = gfn;
    39.8 +    unsigned long i, gfn_remainder = gfn;
    39.9      l1_pgentry_t *p2m_entry;
   39.10      l1_pgentry_t entry_content;
   39.11      l2_pgentry_t l2e_content;
   39.12 @@ -328,9 +328,11 @@ p2m_set_entry(struct domain *d, unsigned
   39.13      if ( iommu_enabled && is_hvm_domain(d) )
   39.14      {
   39.15          if ( p2mt == p2m_ram_rw )
   39.16 -            iommu_map_page(d, gfn, mfn_x(mfn));
   39.17 +            for ( i = 0; i < (1UL << page_order); i++ )
   39.18 +                iommu_map_page(d, gfn+i, mfn_x(mfn)+i );
   39.19          else
   39.20 -            iommu_unmap_page(d, gfn);
   39.21 +            for ( int i = 0; i < (1UL << page_order); i++ )
   39.22 +                iommu_unmap_page(d, gfn+i);
   39.23      }
   39.24  
   39.25      /* Success */
    40.1 --- a/xen/arch/x86/time.c	Tue May 20 18:54:09 2008 +0900
    40.2 +++ b/xen/arch/x86/time.c	Thu May 22 19:42:51 2008 +0900
    40.3 @@ -38,7 +38,6 @@ string_param("clocksource", opt_clocksou
    40.4  #define EPOCH MILLISECS(1000)
    40.5  
    40.6  unsigned long cpu_khz;  /* CPU clock frequency in kHz. */
    40.7 -unsigned long hpet_address;
    40.8  DEFINE_SPINLOCK(rtc_lock);
    40.9  unsigned long pit0_ticks;
   40.10  static u32 wc_sec, wc_nsec; /* UTC time at last 'time update'. */
   40.11 @@ -68,7 +67,8 @@ struct platform_timesource {
   40.12  
   40.13  static DEFINE_PER_CPU(struct cpu_time, cpu_time);
   40.14  
   40.15 -static u8 tsc_invariant=0;  /* TSC is invariant upon C state entry */
   40.16 +/* TSC is invariant on C state entry? */
   40.17 +static bool_t tsc_invariant;
   40.18  
   40.19  /*
   40.20   * We simulate a 32-bit platform timer from the 16-bit PIT ch2 counter.
   40.21 @@ -151,6 +151,9 @@ static void timer_interrupt(int irq, voi
   40.22  {
   40.23      ASSERT(local_irq_is_enabled());
   40.24  
   40.25 +    if ( hpet_legacy_irq_tick() )
   40.26 +        return;
   40.27 +
   40.28      /* Only for start-of-day interruopt tests in io_apic.c. */
   40.29      (*(volatile unsigned long *)&pit0_ticks)++;
   40.30  
   40.31 @@ -347,47 +350,10 @@ static u32 read_hpet_count(void)
   40.32  
   40.33  static int init_hpet(struct platform_timesource *pts)
   40.34  {
   40.35 -    u64 hpet_rate;
   40.36 -    u32 hpet_id, hpet_period, cfg;
   40.37 -    int i;
   40.38 -
   40.39 -    if ( hpet_address == 0 )
   40.40 -        return 0;
   40.41 -
   40.42 -    set_fixmap_nocache(FIX_HPET_BASE, hpet_address);
   40.43 -
   40.44 -    hpet_id = hpet_read32(HPET_ID);
   40.45 -    if ( hpet_id == 0 )
   40.46 -    {
   40.47 -        printk("BAD HPET vendor id.\n");
   40.48 -        return 0;
   40.49 -    }
   40.50 +    u64 hpet_rate = hpet_setup();
   40.51  
   40.52 -    /* Check for sane period (100ps <= period <= 100ns). */
   40.53 -    hpet_period = hpet_read32(HPET_PERIOD);
   40.54 -    if ( (hpet_period > 100000000) || (hpet_period < 100000) )
   40.55 -    {
   40.56 -        printk("BAD HPET period %u.\n", hpet_period);
   40.57 +    if ( hpet_rate == 0 )
   40.58          return 0;
   40.59 -    }
   40.60 -
   40.61 -    cfg = hpet_read32(HPET_CFG);
   40.62 -    cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY);
   40.63 -    hpet_write32(cfg, HPET_CFG);
   40.64 -
   40.65 -    for ( i = 0; i <= ((hpet_id >> 8) & 31); i++ )
   40.66 -    {
   40.67 -        cfg = hpet_read32(HPET_T0_CFG + i*0x20);
   40.68 -        cfg &= ~HPET_TN_ENABLE;
   40.69 -        hpet_write32(cfg & ~HPET_TN_ENABLE, HPET_T0_CFG);
   40.70 -    }
   40.71 -
   40.72 -    cfg = hpet_read32(HPET_CFG);
   40.73 -    cfg |= HPET_CFG_ENABLE;
   40.74 -    hpet_write32(cfg, HPET_CFG);
   40.75 -
   40.76 -    hpet_rate = 1000000000000000ULL; /* 10^15 */
   40.77 -    (void)do_div(hpet_rate, hpet_period);
   40.78  
   40.79      pts->name = "HPET";
   40.80      pts->frequency = hpet_rate;
   40.81 @@ -1041,7 +1007,14 @@ static int __init disable_pit_irq(void)
   40.82          outb_p(0x30, PIT_MODE);
   40.83          outb_p(0, PIT_CH0);
   40.84          outb_p(0, PIT_CH0);
   40.85 +
   40.86 +        /*
   40.87 +         * If we do not rely on PIT CH0 then we can use HPET for one-shot
   40.88 +         * timer emulation when entering deep C states.
   40.89 +         */
   40.90 +        hpet_broadcast_init();
   40.91      }
   40.92 +
   40.93      return 0;
   40.94  }
   40.95  __initcall(disable_pit_irq);
    41.1 --- a/xen/arch/x86/x86_32/entry.S	Tue May 20 18:54:09 2008 +0900
    41.2 +++ b/xen/arch/x86/x86_32/entry.S	Thu May 22 19:42:51 2008 +0900
    41.3 @@ -197,13 +197,12 @@ 1:      sti
    41.4  #define SHADOW_BYTES 24 /* 6 shadow parameters */
    41.5  #endif
    41.6          cmpb  $0,tb_init_done
    41.7 -        je    tracing_off
    41.8 +        je    1f
    41.9          call  trace_hypercall
   41.10          /* Now restore all the registers that trace_hypercall clobbered */
   41.11          movl  UREGS_eax+SHADOW_BYTES(%esp),%eax /* Hypercall # */
   41.12  #undef SHADOW_BYTES
   41.13 -tracing_off:
   41.14 -        call *hypercall_table(,%eax,4)
   41.15 +1:      call *hypercall_table(,%eax,4)
   41.16          addl  $24,%esp     # Discard the shadow parameters
   41.17  #ifndef NDEBUG
   41.18          /* Deliberately corrupt real parameter regs used by this hypercall. */
    42.1 --- a/xen/arch/x86/x86_64/compat/entry.S	Tue May 20 18:54:09 2008 +0900
    42.2 +++ b/xen/arch/x86/x86_64/compat/entry.S	Thu May 22 19:42:51 2008 +0900
    42.3 @@ -59,7 +59,7 @@ ENTRY(compat_hypercall)
    42.4  #define SHADOW_BYTES 0  /* No on-stack shadow state */
    42.5  #endif
    42.6          cmpb  $0,tb_init_done(%rip)
    42.7 -        je    compat_tracing_off
    42.8 +        je    1f
    42.9          call  trace_hypercall
   42.10          /* Now restore all the registers that trace_hypercall clobbered */
   42.11          movl  UREGS_rax+SHADOW_BYTES(%rsp),%eax   /* Hypercall #  */
   42.12 @@ -70,8 +70,7 @@ ENTRY(compat_hypercall)
   42.13          movl  UREGS_rdi+SHADOW_BYTES(%rsp),%r8d   /* Arg 5        */
   42.14          movl  UREGS_rbp+SHADOW_BYTES(%rsp),%r9d   /* Arg 6        */
   42.15  #undef SHADOW_BYTES
   42.16 -compat_tracing_off:
   42.17 -        leaq  compat_hypercall_table(%rip),%r10
   42.18 +1:      leaq  compat_hypercall_table(%rip),%r10
   42.19          PERFC_INCR(PERFC_hypercalls, %rax, %rbx)
   42.20          callq *(%r10,%rax,8)
   42.21  #ifndef NDEBUG
    43.1 --- a/xen/arch/x86/x86_64/entry.S	Tue May 20 18:54:09 2008 +0900
    43.2 +++ b/xen/arch/x86/x86_64/entry.S	Thu May 22 19:42:51 2008 +0900
    43.3 @@ -163,7 +163,7 @@ ENTRY(syscall_enter)
    43.4  #define SHADOW_BYTES 0  /* No on-stack shadow state */
    43.5  #endif
    43.6          cmpb  $0,tb_init_done(%rip)
    43.7 -        je    tracing_off
    43.8 +        je    1f
    43.9          call  trace_hypercall
   43.10          /* Now restore all the registers that trace_hypercall clobbered */
   43.11          movq  UREGS_rax+SHADOW_BYTES(%rsp),%rax   /* Hypercall #  */
   43.12 @@ -174,8 +174,7 @@ ENTRY(syscall_enter)
   43.13          movq  UREGS_rdi+SHADOW_BYTES(%rsp),%r8    /* Arg 5        */
   43.14          movq  UREGS_rbp+SHADOW_BYTES(%rsp),%r9    /* Arg 6        */
   43.15  #undef SHADOW_BYTES
   43.16 -tracing_off:
   43.17 -        leaq  hypercall_table(%rip),%r10
   43.18 +1:      leaq  hypercall_table(%rip),%r10
   43.19          PERFC_INCR(PERFC_hypercalls, %rax, %rbx)
   43.20          callq *(%r10,%rax,8)
   43.21  #ifndef NDEBUG
    44.1 --- a/xen/common/domain.c	Tue May 20 18:54:09 2008 +0900
    44.2 +++ b/xen/common/domain.c	Thu May 22 19:42:51 2008 +0900
    44.3 @@ -633,17 +633,14 @@ int boot_vcpu(struct domain *d, int vcpu
    44.4      return arch_set_info_guest(v, ctxt);
    44.5  }
    44.6  
    44.7 -int vcpu_reset(struct vcpu *v)
    44.8 +void vcpu_reset(struct vcpu *v)
    44.9  {
   44.10      struct domain *d = v->domain;
   44.11 -    int rc;
   44.12  
   44.13      domain_pause(d);
   44.14      domain_lock(d);
   44.15  
   44.16 -    rc = arch_vcpu_reset(v);
   44.17 -    if ( rc != 0 )
   44.18 -        goto out;
   44.19 +    arch_vcpu_reset(v);
   44.20  
   44.21      set_bit(_VPF_down, &v->pause_flags);
   44.22  
   44.23 @@ -655,11 +652,8 @@ int vcpu_reset(struct vcpu *v)
   44.24      v->nmi_masked      = 0;
   44.25      clear_bit(_VPF_blocked, &v->pause_flags);
   44.26  
   44.27 - out:
   44.28      domain_unlock(v->domain);
   44.29      domain_unpause(d);
   44.30 -
   44.31 -    return rc;
   44.32  }
   44.33  
   44.34  
    45.1 --- a/xen/common/domctl.c	Tue May 20 18:54:09 2008 +0900
    45.2 +++ b/xen/common/domctl.c	Thu May 22 19:42:51 2008 +0900
    45.3 @@ -218,7 +218,8 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
    45.4  
    45.5          if ( guest_handle_is_null(op->u.vcpucontext.ctxt) )
    45.6          {
    45.7 -            ret = vcpu_reset(v);
    45.8 +            vcpu_reset(v);
    45.9 +            ret = 0;
   45.10              goto svc_out;
   45.11          }
   45.12  
    46.1 --- a/xen/common/timer.c	Tue May 20 18:54:09 2008 +0900
    46.2 +++ b/xen/common/timer.c	Thu May 22 19:42:51 2008 +0900
    46.3 @@ -35,7 +35,7 @@ struct timers {
    46.4  
    46.5  static DEFINE_PER_CPU(struct timers, timers);
    46.6  
    46.7 -extern int reprogram_timer(s_time_t timeout);
    46.8 +DEFINE_PER_CPU(s_time_t, timer_deadline);
    46.9  
   46.10  /****************************************************************************
   46.11   * HEAP OPERATIONS.
   46.12 @@ -323,8 +323,10 @@ static void timer_softirq_action(void)
   46.13          }
   46.14  
   46.15          ts->running = NULL;
   46.16 +
   46.17 +        this_cpu(timer_deadline) = GET_HEAP_SIZE(heap) ? heap[1]->expires : 0;
   46.18      }
   46.19 -    while ( !reprogram_timer(GET_HEAP_SIZE(heap) ? heap[1]->expires : 0) );
   46.20 +    while ( !reprogram_timer(this_cpu(timer_deadline)) );
   46.21  
   46.22      spin_unlock_irq(&ts->lock);
   46.23  }
    47.1 --- a/xen/include/asm-x86/hpet.h	Tue May 20 18:54:09 2008 +0900
    47.2 +++ b/xen/include/asm-x86/hpet.h	Thu May 22 19:42:51 2008 +0900
    47.3 @@ -49,4 +49,24 @@
    47.4  #define hpet_write32(y,x) \
    47.5      (*(volatile u32 *)(fix_to_virt(FIX_HPET_BASE) + (x)) = (y))
    47.6  
    47.7 +/*
    47.8 + * Detect and initialise HPET hardware: return counter update frequency.
    47.9 + * Return value is zero if HPET is unavailable.
   47.10 + */
   47.11 +u64 hpet_setup(void);
   47.12 +
   47.13 +/*
   47.14 + * Callback from legacy timer (PIT channel 0) IRQ handler.
   47.15 + * Returns 1 if tick originated from HPET; else 0.
   47.16 + */
   47.17 +int hpet_legacy_irq_tick(void);
   47.18 +
   47.19 +/*
   47.20 + * Temporarily use an HPET event counter for timer interrupt handling,
   47.21 + * rather than using the LAPIC timer. Used for Cx state entry.
   47.22 + */
   47.23 +void hpet_broadcast_init(void);
   47.24 +void hpet_broadcast_enter(void);
   47.25 +void hpet_broadcast_exit(void);
   47.26 +
   47.27  #endif /* __X86_HPET_H__ */
    48.1 --- a/xen/include/asm-x86/hvm/domain.h	Tue May 20 18:54:09 2008 +0900
    48.2 +++ b/xen/include/asm-x86/hvm/domain.h	Thu May 22 19:42:51 2008 +0900
    48.3 @@ -76,6 +76,7 @@ struct hvm_domain {
    48.4  
    48.5      bool_t                 hap_enabled;
    48.6      bool_t                 qemu_mapcache_invalidate;
    48.7 +    bool_t                 is_s3_suspended;
    48.8  
    48.9      union {
   48.10          struct vmx_domain vmx;
    49.1 --- a/xen/include/asm-x86/hvm/hvm.h	Tue May 20 18:54:09 2008 +0900
    49.2 +++ b/xen/include/asm-x86/hvm/hvm.h	Thu May 22 19:42:51 2008 +0900
    49.3 @@ -141,6 +141,7 @@ void hvm_vcpu_destroy(struct vcpu *v);
    49.4  void hvm_vcpu_down(struct vcpu *v);
    49.5  int hvm_vcpu_cacheattr_init(struct vcpu *v);
    49.6  void hvm_vcpu_cacheattr_destroy(struct vcpu *v);
    49.7 +void hvm_vcpu_reset_state(struct vcpu *v, uint16_t cs, uint16_t ip);
    49.8  
    49.9  void hvm_send_assist_req(struct vcpu *v);
   49.10  
    50.1 --- a/xen/include/asm-x86/hvm/vioapic.h	Tue May 20 18:54:09 2008 +0900
    50.2 +++ b/xen/include/asm-x86/hvm/vioapic.h	Thu May 22 19:42:51 2008 +0900
    50.3 @@ -63,6 +63,7 @@ struct hvm_vioapic {
    50.4  
    50.5  int vioapic_init(struct domain *d);
    50.6  void vioapic_deinit(struct domain *d);
    50.7 +void vioapic_reset(struct domain *d);
    50.8  void vioapic_irq_positive_edge(struct domain *d, unsigned int irq);
    50.9  void vioapic_update_EOI(struct domain *d, int vector);
   50.10  
    51.1 --- a/xen/include/asm-x86/hvm/vpic.h	Tue May 20 18:54:09 2008 +0900
    51.2 +++ b/xen/include/asm-x86/hvm/vpic.h	Thu May 22 19:42:51 2008 +0900
    51.3 @@ -32,6 +32,7 @@
    51.4  void vpic_irq_positive_edge(struct domain *d, int irq);
    51.5  void vpic_irq_negative_edge(struct domain *d, int irq);
    51.6  void vpic_init(struct domain *d);
    51.7 +void vpic_reset(struct domain *d);
    51.8  int vpic_ack_pending_irq(struct vcpu *v);
    51.9  int is_periodic_irq(struct vcpu *v, int irq, int type);
   51.10  
    52.1 --- a/xen/include/asm-x86/hvm/vpt.h	Tue May 20 18:54:09 2008 +0900
    52.2 +++ b/xen/include/asm-x86/hvm/vpt.h	Thu May 22 19:42:51 2008 +0900
    52.3 @@ -166,17 +166,23 @@ void create_periodic_time(
    52.4  void destroy_periodic_time(struct periodic_time *pt);
    52.5  
    52.6  int pv_pit_handler(int port, int data, int write);
    52.7 +void pit_reset(struct domain *d);
    52.8 +
    52.9  void pit_init(struct vcpu *v, unsigned long cpu_khz);
   52.10  void pit_stop_channel0_irq(PITState * pit);
   52.11  void pit_deinit(struct domain *d);
   52.12  void rtc_init(struct vcpu *v, int base);
   52.13  void rtc_migrate_timers(struct vcpu *v);
   52.14  void rtc_deinit(struct domain *d);
   52.15 +void rtc_reset(struct domain *d);
   52.16 +
   52.17  void pmtimer_init(struct vcpu *v);
   52.18  void pmtimer_deinit(struct domain *d);
   52.19 +void pmtimer_reset(struct domain *d);
   52.20  
   52.21  void hpet_migrate_timers(struct vcpu *v);
   52.22  void hpet_init(struct vcpu *v);
   52.23  void hpet_deinit(struct domain *d);
   52.24 +void hpet_reset(struct domain *d);
   52.25  
   52.26  #endif /* __ASM_X86_HVM_VPT_H__ */
    53.1 --- a/xen/include/public/hvm/params.h	Tue May 20 18:54:09 2008 +0900
    53.2 +++ b/xen/include/public/hvm/params.h	Thu May 22 19:42:51 2008 +0900
    53.3 @@ -90,6 +90,9 @@
    53.4  /* Device Model domain, defaults to 0. */
    53.5  #define HVM_PARAM_DM_DOMAIN    13
    53.6  
    53.7 -#define HVM_NR_PARAMS          14
    53.8 +/* ACPI S state: currently support S0 and S3 on x86. */
    53.9 +#define HVM_PARAM_ACPI_S_STATE 14
   53.10 +
   53.11 +#define HVM_NR_PARAMS          15
   53.12  
   53.13  #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
    54.1 --- a/xen/include/public/sysctl.h	Tue May 20 18:54:09 2008 +0900
    54.2 +++ b/xen/include/public/sysctl.h	Thu May 22 19:42:51 2008 +0900
    54.3 @@ -233,15 +233,30 @@ struct pm_px_stat {
    54.4  typedef struct pm_px_stat pm_px_stat_t;
    54.5  DEFINE_XEN_GUEST_HANDLE(pm_px_stat_t);
    54.6  
    54.7 +struct pm_cx_stat {
    54.8 +    uint32_t nr;    /* entry nr in triggers & residencies, including C0 */
    54.9 +    uint32_t last;  /* last Cx state */
   54.10 +    uint64_aligned_t idle_time;                 /* idle time from boot */
   54.11 +    XEN_GUEST_HANDLE_64(uint64) triggers;    /* Cx trigger counts */
   54.12 +    XEN_GUEST_HANDLE_64(uint64) residencies; /* Cx residencies */
   54.13 +};
   54.14 +
   54.15  struct xen_sysctl_get_pmstat {
   54.16 -#define PMSTAT_get_max_px   0x11
   54.17 -#define PMSTAT_get_pxstat   0x12
   54.18 -#define PMSTAT_reset_pxstat 0x13
   54.19 +#define PMSTAT_CATEGORY_MASK 0xf0
   54.20 +#define PMSTAT_PX            0x10
   54.21 +#define PMSTAT_CX            0x20
   54.22 +#define PMSTAT_get_max_px    (PMSTAT_PX | 0x1)
   54.23 +#define PMSTAT_get_pxstat    (PMSTAT_PX | 0x2)
   54.24 +#define PMSTAT_reset_pxstat  (PMSTAT_PX | 0x3)
   54.25 +#define PMSTAT_get_max_cx    (PMSTAT_CX | 0x1)
   54.26 +#define PMSTAT_get_cxstat    (PMSTAT_CX | 0x2)
   54.27 +#define PMSTAT_reset_cxstat  (PMSTAT_CX | 0x3)
   54.28      uint32_t type;
   54.29      uint32_t cpuid;
   54.30      union {
   54.31          struct pm_px_stat getpx;
   54.32 -        /* other struct for cx, tx, etc */
   54.33 +        struct pm_cx_stat getcx;
   54.34 +        /* other struct for tx, etc */
   54.35      } u;
   54.36  };
   54.37  typedef struct xen_sysctl_get_pmstat xen_sysctl_get_pmstat_t;
    55.1 --- a/xen/include/xen/domain.h	Tue May 20 18:54:09 2008 +0900
    55.2 +++ b/xen/include/xen/domain.h	Thu May 22 19:42:51 2008 +0900
    55.3 @@ -14,7 +14,7 @@ struct vcpu *alloc_vcpu(
    55.4  int boot_vcpu(
    55.5      struct domain *d, int vcpuid, vcpu_guest_context_u ctxt);
    55.6  struct vcpu *alloc_idle_vcpu(unsigned int cpu_id);
    55.7 -int vcpu_reset(struct vcpu *v);
    55.8 +void vcpu_reset(struct vcpu *v);
    55.9  
   55.10  struct domain *alloc_domain(domid_t domid);
   55.11  void free_domain(struct domain *d);
   55.12 @@ -55,7 +55,7 @@ void arch_dump_vcpu_info(struct vcpu *v)
   55.13  
   55.14  void arch_dump_domain_info(struct domain *d);
   55.15  
   55.16 -int arch_vcpu_reset(struct vcpu *v);
   55.17 +void arch_vcpu_reset(struct vcpu *v);
   55.18  
   55.19  extern unsigned int xen_processor_pmbits;
   55.20  
    56.1 --- a/xen/include/xen/timer.h	Tue May 20 18:54:09 2008 +0900
    56.2 +++ b/xen/include/xen/timer.h	Thu May 22 19:42:51 2008 +0900
    56.3 @@ -99,6 +99,15 @@ extern void process_pending_timers(void)
    56.4   */
    56.5  extern void timer_init(void);
    56.6  
    56.7 +/*
    56.8 + * Next timer deadline for each CPU.
    56.9 + * Modified only by the local CPU and never in interrupt context.
   56.10 + */
   56.11 +DECLARE_PER_CPU(s_time_t, timer_deadline);
   56.12 +
   56.13 +/* Arch-defined function to reprogram timer hardware for new deadline. */
   56.14 +extern int reprogram_timer(s_time_t timeout);
   56.15 +
   56.16  #endif /* _TIMER_H_ */
   56.17  
   56.18  /*