[SeaBIOS] [PATCH] vcpu hotplug: Setup vcpu add/remove infrastructure

Liu, Jinsong jinsong.liu at intel.com
Thu Jan 28 15:54:48 CET 2010


Connor and Gleb,

I updated my patch according to our discussion:
1. simplify scan loop according to 'maxvcpus';
2. remove unecessary global variables;
3. change hardcode address to bios use only area '0x514';
4. remove simple \_PR scope from ssdt;

Thanks,
Jinsong


>From 7bdbffc1fdd77c2468812833d9a45bcdb09e8418 Mon Sep 17 00:00:00 2001
From: Liu, Jinsong <jinsong.liu at intel.com>
Date: Fri, 29 Jan 2010 06:32:22 +0800
Subject: [PATCH]     Setup vcpu add/remove infrastructure, including madt bios_info and d

    1. setup madt_info structure, so that static dsdt get
       run-time madt info like checksum address, lapic address,
       max cpu numbers, with least hardcode magic number (realmode
       address of madt_info).
    2. setup vcpu add/remove dsdt infrastructure, including processor
       related acpi objects and control methods. vcpu add/remove will
       trigger SCI and then control method _L02. By matching madt, vcpu
       number and add/remove action were found, then by notify control
       method, it will notify OS acpi driver.
    3. remove simple \_PR scope from ssdt.

    Signed-off-by: Liu, Jinsong <jinsong.liu at intel.com>
---
 src/acpi-dsdt.dsl |  126 +++++++++++++++-
 src/acpi-dsdt.hex |  435 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 src/acpi.c        |   59 +++-----
 3 files changed, 556 insertions(+), 64 deletions(-)

diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl
index cc31112..abc524e 100644
--- a/src/acpi-dsdt.dsl
+++ b/src/acpi-dsdt.dsl
@@ -700,8 +700,11 @@ DefinitionBlock (
             Return (0x01)

         }
+        /*
+         * _L02 method for CPU notification
+         */
         Method(_L02) {
-            Return(0x01)
+            Return(\_PR.PRSC())
         }
         Method(_L03) {
             Return(0x01)
@@ -744,4 +747,125 @@ DefinitionBlock (
         }
     }

+
+    Scope (\_PR)
+    {
+        /* MADT_INFO_PHYSICAL_ADDRESS == 0x514 */
+        OperationRegion(MINF, SystemMemory, 0x514, 12)
+        Field(MINF, DwordAcc, NoLock, Preserve)
+        {
+            MSUA, 32, /* MADT checksum address */
+            MAPA, 32, /* MADT LAPIC0 address */
+            CPUN, 32  /* Max cpu number */
+        }
+
+        OperationRegion(MSUM, SystemMemory, MSUA, 1)
+        Field(MSUM, ByteAcc, NoLock, Preserve)
+        {
+            MSU, 8    /* MADT checksum */
+        }
+
+        #define gen_processor(nr, name)                                       \
+        Processor (C##name, nr, 0x0000b010, 0x06) {                           \
+            Name (_HID, "ACPI0007")                                           \
+            OperationRegion(MATR, SystemMemory, Add(MAPA, Multiply(nr,8)), 8) \
+            Field (MATR, ByteAcc, NoLock, Preserve)                           \
+            {                                                                 \
+                MAT, 64                                                       \
+            }                                                                 \
+            Field (MATR, ByteAcc, NoLock, Preserve)                           \
+            {                                                                 \
+                Offset(4),                                                    \
+                FLG, 1                                                        \
+            }                                                                 \
+            Method(_MAT, 0) {                                                 \
+                Return(ToBuffer(MAT))                                         \
+            }                                                                 \
+            Method (_STA) {                                                   \
+                If (FLG) { Return(0xF) } Else { Return(0x9) }                 \
+            }                                                                 \
+            Method (_EJ0, 1, NotSerialized) {                                 \
+                Sleep (0xC8)                                                  \
+            }                                                                 \
+        }                                                                     \
+
+        gen_processor(0, 0)
+        gen_processor(1, 1)
+        gen_processor(2, 2)
+        gen_processor(3, 3)
+        gen_processor(4, 4)
+        gen_processor(5, 5)
+        gen_processor(6, 6)
+        gen_processor(7, 7)
+        gen_processor(8, 8)
+        gen_processor(9, 9)
+        gen_processor(10, A)
+        gen_processor(11, B)
+        gen_processor(12, C)
+        gen_processor(13, D)
+        gen_processor(14, E)
+
+
+        Method (NTFY, 2) {
+        #define gen_ntfy(nr)                        \
+        If (LEqual(Arg0, 0x##nr)) {                 \
+            If (LNotEqual(Arg1, \_PR.C##nr.FLG)) {  \
+                Store (Arg1, \_PR.C##nr.FLG)        \
+                If (LEqual(Arg1, 1)) {              \
+                    Notify(C##nr, 1)                \
+                    Subtract(\_PR.MSU, 1, \_PR.MSU) \
+                } Else {                            \
+                    Notify(C##nr, 3)                \
+                    Add(\_PR.MSU, 1, \_PR.MSU)      \
+                }                                   \
+            }                                       \
+        }
+
+        gen_ntfy(0)
+        gen_ntfy(1)
+        gen_ntfy(2)
+        gen_ntfy(3)
+        gen_ntfy(4)
+        gen_ntfy(5)
+        gen_ntfy(6)
+        gen_ntfy(7)
+        gen_ntfy(8)
+        gen_ntfy(9)
+        gen_ntfy(A)
+        gen_ntfy(B)
+        gen_ntfy(C)
+        gen_ntfy(D)
+        gen_ntfy(E)
+
+        Return(One)
+        }
+
+
+        OperationRegion(PRST, SystemIO, 0xaf00, 32)
+        Field (PRST, ByteAcc, NoLock, Preserve)
+        {
+            PRS, 256
+        }
+
+        Method(PRSC, 0) {
+            Store(PRS, Local3)
+            Store(Zero, Local0)
+            While(LLess(Local0, 32)) {
+                Store(Zero, Local1)
+                Store(DerefOf(Index(Local3, Local0)), Local2)
+                While(LLess(Local1, 8)) {
+                    Store(Add(Multiply(Local0, 8), Local1), Local4)
+                    If(LLess(Local4, CPUN)) {
+                        NTFY(Local4, And(Local2, 1))
+                    } Else {
+                        Break
+                    }
+                    ShiftRight(Local2, 1, Local2)
+                    Increment(Local1)
+                }
+                Increment(Local0)
+            }
+            Return(One)
+        }
+    }
 }
diff --git a/src/acpi-dsdt.hex b/src/acpi-dsdt.hex
index 465e93e..aeb5722 100644
--- a/src/acpi-dsdt.hex
+++ b/src/acpi-dsdt.hex
@@ -1,22 +1,22 @@
 /*
  *
  * Intel ACPI Component Architecture
- * ASL Optimizing Compiler version 20090123 [Feb 25 2009]
- * Copyright (C) 2000 - 2009 Intel Corporation
+ * ASL Optimizing Compiler version 20061109 [Jul 16 2007]
+ * Copyright (C) 2000 - 2006 Intel Corporation
  * Supports ACPI Specification Revision 3.0a
  *
- * Compilation of "out/acpi-dsdt.dsl.i" - Wed Dec 30 12:30:21 2009
+ * Compilation of "out/acpi-dsdt.dsl.i" - Fri Jan 29 04:51:16 2010
  *
  * C source code output
  *
  */
 unsigned char AmlCode[] =
 {
-    0x44,0x53,0x44,0x54,0x22,0x1E,0x00,0x00,  /* 00000000    "DSDT"..." */
-    0x01,0x71,0x42,0x58,0x50,0x43,0x00,0x00,  /* 00000008    ".qBXPC.." */
+    0x44,0x53,0x44,0x54,0x5A,0x2A,0x00,0x00,  /* 00000000    "DSDTZ*.." */
+    0x01,0x5D,0x42,0x58,0x50,0x43,0x00,0x00,  /* 00000008    ".]BXPC.." */
     0x42,0x58,0x44,0x53,0x44,0x54,0x00,0x00,  /* 00000010    "BXDSDT.." */
     0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
-    0x23,0x01,0x09,0x20,0x10,0x1C,0x5C,0x00,  /* 00000020    "#.. ..\." */
+    0x09,0x11,0x06,0x20,0x10,0x1C,0x5C,0x00,  /* 00000020    "... ..\." */
     0x5B,0x80,0x44,0x42,0x47,0x5F,0x01,0x0B,  /* 00000028    "[.DBG_.." */
     0x44,0xB0,0x0A,0x04,0x5B,0x81,0x0B,0x44,  /* 00000030    "D...[..D" */
     0x42,0x47,0x5F,0x03,0x44,0x42,0x47,0x4C,  /* 00000038    "BG_.DBGL" */
@@ -643,7 +643,7 @@ unsigned char AmlCode[] =
     0x08,0x5F,0x53,0x34,0x5F,0x12,0x06,0x04,  /* 000013A0    "._S4_..." */
     0x00,0x00,0x00,0x00,0x08,0x5F,0x53,0x35,  /* 000013A8    "....._S5" */
     0x5F,0x12,0x06,0x04,0x00,0x00,0x00,0x00,  /* 000013B0    "_......." */
-    0x10,0x49,0xA6,0x5F,0x47,0x50,0x45,0x08,  /* 000013B8    ".I._GPE." */
+    0x10,0x42,0xA7,0x5F,0x47,0x50,0x45,0x08,  /* 000013B8    ".B._GPE." */
     0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50,  /* 000013C0    "_HID.ACP" */
     0x49,0x30,0x30,0x30,0x36,0x00,0x14,0x08,  /* 000013C8    "I0006..." */
     0x5F,0x4C,0x30,0x30,0x00,0xA4,0x01,0x14,  /* 000013D0    "_L00...." */
@@ -960,21 +960,412 @@ unsigned char AmlCode[] =
     0x49,0x44,0x0C,0x00,0x00,0x00,0x80,0x00,  /* 00001D88    "ID......" */
     0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,  /* 00001D90    ".\/._SB_" */
     0x50,0x43,0x49,0x30,0x53,0x33,0x31,0x5F,  /* 00001D98    "PCI0S31_" */
-    0x0A,0x03,0xA4,0x01,0x14,0x08,0x5F,0x4C,  /* 00001DA0    "......_L" */
-    0x30,0x32,0x00,0xA4,0x01,0x14,0x08,0x5F,  /* 00001DA8    "02....._" */
-    0x4C,0x30,0x33,0x00,0xA4,0x01,0x14,0x08,  /* 00001DB0    "L03....." */
-    0x5F,0x4C,0x30,0x34,0x00,0xA4,0x01,0x14,  /* 00001DB8    "_L04...." */
-    0x08,0x5F,0x4C,0x30,0x35,0x00,0xA4,0x01,  /* 00001DC0    "._L05..." */
-    0x14,0x08,0x5F,0x4C,0x30,0x36,0x00,0xA4,  /* 00001DC8    ".._L06.." */
-    0x01,0x14,0x08,0x5F,0x4C,0x30,0x37,0x00,  /* 00001DD0    "..._L07." */
-    0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,0x38,  /* 00001DD8    "...._L08" */
+    0x0A,0x03,0xA4,0x01,0x14,0x11,0x5F,0x4C,  /* 00001DA0    "......_L" */
+    0x30,0x32,0x00,0xA4,0x5C,0x2E,0x5F,0x50,  /* 00001DA8    "02..\._P" */
+    0x52,0x5F,0x50,0x52,0x53,0x43,0x14,0x08,  /* 00001DB0    "R_PRSC.." */
+    0x5F,0x4C,0x30,0x33,0x00,0xA4,0x01,0x14,  /* 00001DB8    "_L03...." */
+    0x08,0x5F,0x4C,0x30,0x34,0x00,0xA4,0x01,  /* 00001DC0    "._L04..." */
+    0x14,0x08,0x5F,0x4C,0x30,0x35,0x00,0xA4,  /* 00001DC8    ".._L05.." */
+    0x01,0x14,0x08,0x5F,0x4C,0x30,0x36,0x00,  /* 00001DD0    "..._L06." */
+    0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,0x37,  /* 00001DD8    "...._L07" */
     0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,  /* 00001DE0    "....._L0" */
-    0x39,0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C,  /* 00001DE8    "9....._L" */
-    0x30,0x41,0x00,0xA4,0x01,0x14,0x08,0x5F,  /* 00001DF0    "0A....._" */
-    0x4C,0x30,0x42,0x00,0xA4,0x01,0x14,0x08,  /* 00001DF8    "L0B....." */
-    0x5F,0x4C,0x30,0x43,0x00,0xA4,0x01,0x14,  /* 00001E00    "_L0C...." */
-    0x08,0x5F,0x4C,0x30,0x44,0x00,0xA4,0x01,  /* 00001E08    "._L0D..." */
-    0x14,0x08,0x5F,0x4C,0x30,0x45,0x00,0xA4,  /* 00001E10    ".._L0E.." */
-    0x01,0x14,0x08,0x5F,0x4C,0x30,0x46,0x00,  /* 00001E18    "..._L0F." */
+    0x38,0x00,0xA4,0x01,0x14,0x08,0x5F,0x4C,  /* 00001DE8    "8....._L" */
+    0x30,0x39,0x00,0xA4,0x01,0x14,0x08,0x5F,  /* 00001DF0    "09....._" */
+    0x4C,0x30,0x41,0x00,0xA4,0x01,0x14,0x08,  /* 00001DF8    "L0A....." */
+    0x5F,0x4C,0x30,0x42,0x00,0xA4,0x01,0x14,  /* 00001E00    "_L0B...." */
+    0x08,0x5F,0x4C,0x30,0x43,0x00,0xA4,0x01,  /* 00001E08    "._L0C..." */
+    0x14,0x08,0x5F,0x4C,0x30,0x44,0x00,0xA4,  /* 00001E10    ".._L0D.." */
+    0x01,0x14,0x08,0x5F,0x4C,0x30,0x45,0x00,  /* 00001E18    "..._L0E." */
+    0xA4,0x01,0x14,0x08,0x5F,0x4C,0x30,0x46,  /* 00001E20    "...._L0F" */
+    0x00,0xA4,0x01,0x10,0x4E,0xC2,0x5F,0x50,  /* 00001E28    "....N._P" */
+    0x52,0x5F,0x5B,0x80,0x4D,0x49,0x4E,0x46,  /* 00001E30    "R_[.MINF" */
+    0x00,0x0B,0x14,0x05,0x0A,0x0C,0x5B,0x81,  /* 00001E38    "......[." */
+    0x15,0x4D,0x49,0x4E,0x46,0x03,0x4D,0x53,  /* 00001E40    ".MINF.MS" */
+    0x55,0x41,0x20,0x4D,0x41,0x50,0x41,0x20,  /* 00001E48    "UA MAPA " */
+    0x43,0x50,0x55,0x4E,0x20,0x5B,0x80,0x4D,  /* 00001E50    "CPUN [.M" */
+    0x53,0x55,0x4D,0x00,0x4D,0x53,0x55,0x41,  /* 00001E58    "SUM.MSUA" */
+    0x01,0x5B,0x81,0x0B,0x4D,0x53,0x55,0x4D,  /* 00001E60    ".[..MSUM" */
+    0x01,0x4D,0x53,0x55,0x5F,0x08,0x5B,0x83,  /* 00001E68    ".MSU_.[." */
+    0x46,0x07,0x43,0x30,0x5F,0x5F,0x00,0x10,  /* 00001E70    "F.C0__.." */
+    0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,0x49,  /* 00001E78    "....._HI" */
+    0x44,0x0D,0x41,0x43,0x50,0x49,0x30,0x30,  /* 00001E80    "D.ACPI00" */
+    0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,  /* 00001E88    "07.[.MAT" */
+    0x52,0x00,0x72,0x4D,0x41,0x50,0x41,0x00,  /* 00001E90    "R.rMAPA." */
+    0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,  /* 00001E98    "...[..MA" */
+    0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,  /* 00001EA0    "TR.MAT_@" */
+    0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,  /* 00001EA8    ".[..MATR" */
+    0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,  /* 00001EB0    ".. FLG_." */
+    0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,  /* 00001EB8    ".._MAT.." */
+    0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,  /* 00001EC0    ".MAT_..." */
+    0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,0x46,  /* 00001EC8    "_STA...F" */
+    0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,  /* 00001ED0    "LG_....." */
+    0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,  /* 00001ED8    "....._EJ" */
+    0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,  /* 00001EE0    "0.["..[." */
+    0x47,0x07,0x43,0x31,0x5F,0x5F,0x01,0x10,  /* 00001EE8    "G.C1__.." */
+    0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,0x49,  /* 00001EF0    "....._HI" */
+    0x44,0x0D,0x41,0x43,0x50,0x49,0x30,0x30,  /* 00001EF8    "D.ACPI00" */
+    0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,  /* 00001F00    "07.[.MAT" */
+    0x52,0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,  /* 00001F08    "R.rMAPA." */
+    0x08,0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,  /* 00001F10    "....[..M" */
+    0x41,0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,  /* 00001F18    "ATR.MAT_" */
+    0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,  /* 00001F20    "@.[..MAT" */
+    0x52,0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,  /* 00001F28    "R.. FLG_" */
+    0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,  /* 00001F30    "..._MAT." */
+    0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,  /* 00001F38    "..MAT_.." */
+    0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,  /* 00001F40    "._STA..." */
+    0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,  /* 00001F48    "FLG_...." */
+    0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,  /* 00001F50    "......_E" */
+    0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,  /* 00001F58    "J0.["..[" */
+    0x83,0x47,0x07,0x43,0x32,0x5F,0x5F,0x02,  /* 00001F60    ".G.C2__." */
+    0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,  /* 00001F68    "......_H" */
+    0x49,0x44,0x0D,0x41,0x43,0x50,0x49,0x30,  /* 00001F70    "ID.ACPI0" */
+    0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,  /* 00001F78    "007.[.MA" */
+    0x54,0x52,0x00,0x72,0x4D,0x41,0x50,0x41,  /* 00001F80    "TR.rMAPA" */
+    0x0A,0x10,0x00,0x0A,0x08,0x5B,0x81,0x0C,  /* 00001F88    ".....[.." */
+    0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,0x54,  /* 00001F90    "MATR.MAT" */
+    0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,  /* 00001F98    "_ at .[..MA" */
+    0x54,0x52,0x01,0x00,0x20,0x46,0x4C,0x47,  /* 00001FA0    "TR.. FLG" */
+    0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,  /* 00001FA8    "_..._MAT" */
+    0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,  /* 00001FB0    "...MAT_." */
+    0x14,0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,  /* 00001FB8    ".._STA.." */
+    0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,  /* 00001FC0    ".FLG_..." */
+    0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,  /* 00001FC8    "......._" */
+    0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,  /* 00001FD0    "EJ0.[".." */
+    0x5B,0x83,0x47,0x07,0x43,0x33,0x5F,0x5F,  /* 00001FD8    "[.G.C3__" */
+    0x03,0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,  /* 00001FE0    "......._" */
+    0x48,0x49,0x44,0x0D,0x41,0x43,0x50,0x49,  /* 00001FE8    "HID.ACPI" */
+    0x30,0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,  /* 00001FF0    "0007.[.M" */
+    0x41,0x54,0x52,0x00,0x72,0x4D,0x41,0x50,  /* 00001FF8    "ATR.rMAP" */
+    0x41,0x0A,0x18,0x00,0x0A,0x08,0x5B,0x81,  /* 00002000    "A.....[." */
+    0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,  /* 00002008    ".MATR.MA" */
+    0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,  /* 00002010    "T_ at .[..M" */
+    0x41,0x54,0x52,0x01,0x00,0x20,0x46,0x4C,  /* 00002018    "ATR.. FL" */
+    0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,  /* 00002020    "G_..._MA" */
+    0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,  /* 00002028    "T...MAT_" */
+    0x00,0x14,0x14,0x5F,0x53,0x54,0x41,0x00,  /* 00002030    "..._STA." */
+    0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,  /* 00002038    "..FLG_.." */
+    0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,  /* 00002040    "........" */
+    0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,  /* 00002048    "_EJ0.["." */
+    0xC8,0x5B,0x83,0x47,0x07,0x43,0x34,0x5F,  /* 00002050    ".[.G.C4_" */
+    0x5F,0x04,0x10,0xB0,0x00,0x00,0x06,0x08,  /* 00002058    "_......." */
+    0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50,  /* 00002060    "_HID.ACP" */
+    0x49,0x30,0x30,0x30,0x37,0x00,0x5B,0x80,  /* 00002068    "I0007.[." */
+    0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,0x41,  /* 00002070    "MATR.rMA" */
+    0x50,0x41,0x0A,0x20,0x00,0x0A,0x08,0x5B,  /* 00002078    "PA. ...[" */
+    0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,  /* 00002080    "..MATR.M" */
+    0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,  /* 00002088    "AT_ at .[.." */
+    0x4D,0x41,0x54,0x52,0x01,0x00,0x20,0x46,  /* 00002090    "MATR.. F" */
+    0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,  /* 00002098    "LG_..._M" */
+    0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,  /* 000020A0    "AT...MAT" */
+    0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,0x41,  /* 000020A8    "_..._STA" */
+    0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,  /* 000020B0    "...FLG_." */
+    0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,  /* 000020B8    "........" */
+    0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,  /* 000020C0    "._EJ0.["" */
+    0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,0x35,  /* 000020C8    "..[.G.C5" */
+    0x5F,0x5F,0x05,0x10,0xB0,0x00,0x00,0x06,  /* 000020D0    "__......" */
+    0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,  /* 000020D8    "._HID.AC" */
+    0x50,0x49,0x30,0x30,0x30,0x37,0x00,0x5B,  /* 000020E0    "PI0007.[" */
+    0x80,0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,  /* 000020E8    ".MATR.rM" */
+    0x41,0x50,0x41,0x0A,0x28,0x00,0x0A,0x08,  /* 000020F0    "APA.(..." */
+    0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,  /* 000020F8    "[..MATR." */
+    0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,  /* 00002100    "MAT_ at .[." */
+    0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,0x20,  /* 00002108    ".MATR.. " */
+    0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,  /* 00002110    "FLG_..._" */
+    0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,  /* 00002118    "MAT...MA" */
+    0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,  /* 00002120    "T_..._ST" */
+    0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,  /* 00002128    "A...FLG_" */
+    0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,  /* 00002130    "........" */
+    0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,  /* 00002138    ".._EJ0.[" */
+    0x22,0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,  /* 00002140    ""..[.G.C" */
+    0x36,0x5F,0x5F,0x06,0x10,0xB0,0x00,0x00,  /* 00002148    "6__....." */
+    0x06,0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,  /* 00002150    ".._HID.A" */
+    0x43,0x50,0x49,0x30,0x30,0x30,0x37,0x00,  /* 00002158    "CPI0007." */
+    0x5B,0x80,0x4D,0x41,0x54,0x52,0x00,0x72,  /* 00002160    "[.MATR.r" */
+    0x4D,0x41,0x50,0x41,0x0A,0x30,0x00,0x0A,  /* 00002168    "MAPA.0.." */
+    0x08,0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,  /* 00002170    ".[..MATR" */
+    0x01,0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,  /* 00002178    ".MAT_ at .[" */
+    0x81,0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,  /* 00002180    "..MATR.." */
+    0x20,0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,  /* 00002188    " FLG_..." */
+    0x5F,0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,  /* 00002190    "_MAT...M" */
+    0x41,0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,  /* 00002198    "AT_..._S" */
+    0x54,0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,  /* 000021A0    "TA...FLG" */
+    0x5F,0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,  /* 000021A8    "_......." */
+    0x09,0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,  /* 000021B0    "..._EJ0." */
+    0x5B,0x22,0x0A,0xC8,0x5B,0x83,0x47,0x07,  /* 000021B8    "["..[.G." */
+    0x43,0x37,0x5F,0x5F,0x07,0x10,0xB0,0x00,  /* 000021C0    "C7__...." */
+    0x00,0x06,0x08,0x5F,0x48,0x49,0x44,0x0D,  /* 000021C8    "..._HID." */
+    0x41,0x43,0x50,0x49,0x30,0x30,0x30,0x37,  /* 000021D0    "ACPI0007" */
+    0x00,0x5B,0x80,0x4D,0x41,0x54,0x52,0x00,  /* 000021D8    ".[.MATR." */
+    0x72,0x4D,0x41,0x50,0x41,0x0A,0x38,0x00,  /* 000021E0    "rMAPA.8." */
+    0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,0x54,  /* 000021E8    "..[..MAT" */
+    0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,0x04,  /* 000021F0    "R.MAT_ at ." */
+    0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,0x01,  /* 000021F8    "[..MATR." */
+    0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,0x14,  /* 00002200    ". FLG_.." */
+    0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,0x96,  /* 00002208    "._MAT..." */
+    0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,0x5F,  /* 00002210    "MAT_..._" */
+    0x53,0x54,0x41,0x00,0xA0,0x08,0x46,0x4C,  /* 00002218    "STA...FL" */
+    0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,0xA4,  /* 00002220    "G_......" */
+    0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,0x30,  /* 00002228    "...._EJ0" */
+    0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,0x47,  /* 00002230    ".["..[.G" */
+    0x07,0x43,0x38,0x5F,0x5F,0x08,0x10,0xB0,  /* 00002238    ".C8__..." */
+    0x00,0x00,0x06,0x08,0x5F,0x48,0x49,0x44,  /* 00002240    "...._HID" */
+    0x0D,0x41,0x43,0x50,0x49,0x30,0x30,0x30,  /* 00002248    ".ACPI000" */
+    0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,0x52,  /* 00002250    "7.[.MATR" */
+    0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,0x40,  /* 00002258    ".rMAPA.@" */
+    0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,  /* 00002260    "...[..MA" */
+    0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,  /* 00002268    "TR.MAT_@" */
+    0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,  /* 00002270    ".[..MATR" */
+    0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,  /* 00002278    ".. FLG_." */
+    0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,  /* 00002280    ".._MAT.." */
+    0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,  /* 00002288    ".MAT_..." */
+    0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,0x46,  /* 00002290    "_STA...F" */
+    0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,  /* 00002298    "LG_....." */
+    0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,  /* 000022A0    "....._EJ" */
+    0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,  /* 000022A8    "0.["..[." */
+    0x47,0x07,0x43,0x39,0x5F,0x5F,0x09,0x10,  /* 000022B0    "G.C9__.." */
+    0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,0x49,  /* 000022B8    "....._HI" */
+    0x44,0x0D,0x41,0x43,0x50,0x49,0x30,0x30,  /* 000022C0    "D.ACPI00" */
+    0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,  /* 000022C8    "07.[.MAT" */
+    0x52,0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,  /* 000022D0    "R.rMAPA." */
+    0x48,0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,  /* 000022D8    "H...[..M" */
+    0x41,0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,  /* 000022E0    "ATR.MAT_" */
+    0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,  /* 000022E8    "@.[..MAT" */
+    0x52,0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,  /* 000022F0    "R.. FLG_" */
+    0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,  /* 000022F8    "..._MAT." */
+    0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,  /* 00002300    "..MAT_.." */
+    0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,  /* 00002308    "._STA..." */
+    0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,  /* 00002310    "FLG_...." */
+    0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,  /* 00002318    "......_E" */
+    0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,  /* 00002320    "J0.["..[" */
+    0x83,0x47,0x07,0x43,0x41,0x5F,0x5F,0x0A,  /* 00002328    ".G.CA__." */
+    0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,  /* 00002330    "......_H" */
+    0x49,0x44,0x0D,0x41,0x43,0x50,0x49,0x30,  /* 00002338    "ID.ACPI0" */
+    0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,  /* 00002340    "007.[.MA" */
+    0x54,0x52,0x00,0x72,0x4D,0x41,0x50,0x41,  /* 00002348    "TR.rMAPA" */
+    0x0A,0x50,0x00,0x0A,0x08,0x5B,0x81,0x0C,  /* 00002350    ".P...[.." */
+    0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,0x54,  /* 00002358    "MATR.MAT" */
+    0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,  /* 00002360    "_ at .[..MA" */
+    0x54,0x52,0x01,0x00,0x20,0x46,0x4C,0x47,  /* 00002368    "TR.. FLG" */
+    0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,  /* 00002370    "_..._MAT" */
+    0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,  /* 00002378    "...MAT_." */
+    0x14,0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,  /* 00002380    ".._STA.." */
+    0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,  /* 00002388    ".FLG_..." */
+    0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,  /* 00002390    "......._" */
+    0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,  /* 00002398    "EJ0.[".." */
+    0x5B,0x83,0x47,0x07,0x43,0x42,0x5F,0x5F,  /* 000023A0    "[.G.CB__" */
+    0x0B,0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,  /* 000023A8    "......._" */
+    0x48,0x49,0x44,0x0D,0x41,0x43,0x50,0x49,  /* 000023B0    "HID.ACPI" */
+    0x30,0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,  /* 000023B8    "0007.[.M" */
+    0x41,0x54,0x52,0x00,0x72,0x4D,0x41,0x50,  /* 000023C0    "ATR.rMAP" */
+    0x41,0x0A,0x58,0x00,0x0A,0x08,0x5B,0x81,  /* 000023C8    "A.X...[." */
+    0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,  /* 000023D0    ".MATR.MA" */
+    0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,  /* 000023D8    "T_ at .[..M" */
+    0x41,0x54,0x52,0x01,0x00,0x20,0x46,0x4C,  /* 000023E0    "ATR.. FL" */
+    0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,  /* 000023E8    "G_..._MA" */
+    0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,  /* 000023F0    "T...MAT_" */
+    0x00,0x14,0x14,0x5F,0x53,0x54,0x41,0x00,  /* 000023F8    "..._STA." */
+    0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,  /* 00002400    "..FLG_.." */
+    0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,  /* 00002408    "........" */
+    0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,  /* 00002410    "_EJ0.["." */
+    0xC8,0x5B,0x83,0x47,0x07,0x43,0x43,0x5F,  /* 00002418    ".[.G.CC_" */
+    0x5F,0x0C,0x10,0xB0,0x00,0x00,0x06,0x08,  /* 00002420    "_......." */
+    0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50,  /* 00002428    "_HID.ACP" */
+    0x49,0x30,0x30,0x30,0x37,0x00,0x5B,0x80,  /* 00002430    "I0007.[." */
+    0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,0x41,  /* 00002438    "MATR.rMA" */
+    0x50,0x41,0x0A,0x60,0x00,0x0A,0x08,0x5B,  /* 00002440    "PA.`...[" */
+    0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,  /* 00002448    "..MATR.M" */
+    0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,  /* 00002450    "AT_ at .[.." */
+    0x4D,0x41,0x54,0x52,0x01,0x00,0x20,0x46,  /* 00002458    "MATR.. F" */
+    0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,  /* 00002460    "LG_..._M" */
+    0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,  /* 00002468    "AT...MAT" */
+    0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,0x41,  /* 00002470    "_..._STA" */
+    0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,  /* 00002478    "...FLG_." */
+    0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,  /* 00002480    "........" */
+    0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,  /* 00002488    "._EJ0.["" */
+    0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,0x44,  /* 00002490    "..[.G.CD" */
+    0x5F,0x5F,0x0D,0x10,0xB0,0x00,0x00,0x06,  /* 00002498    "__......" */
+    0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,  /* 000024A0    "._HID.AC" */
+    0x50,0x49,0x30,0x30,0x30,0x37,0x00,0x5B,  /* 000024A8    "PI0007.[" */
+    0x80,0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,  /* 000024B0    ".MATR.rM" */
+    0x41,0x50,0x41,0x0A,0x68,0x00,0x0A,0x08,  /* 000024B8    "APA.h..." */
+    0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,  /* 000024C0    "[..MATR." */
+    0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,  /* 000024C8    "MAT_ at .[." */
+    0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,0x20,  /* 000024D0    ".MATR.. " */
+    0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,  /* 000024D8    "FLG_..._" */
+    0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,  /* 000024E0    "MAT...MA" */
+    0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,  /* 000024E8    "T_..._ST" */
+    0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,  /* 000024F0    "A...FLG_" */
+    0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,  /* 000024F8    "........" */
+    0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,  /* 00002500    ".._EJ0.[" */
+    0x22,0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,  /* 00002508    ""..[.G.C" */
+    0x45,0x5F,0x5F,0x0E,0x10,0xB0,0x00,0x00,  /* 00002510    "E__....." */
+    0x06,0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,  /* 00002518    ".._HID.A" */
+    0x43,0x50,0x49,0x30,0x30,0x30,0x37,0x00,  /* 00002520    "CPI0007." */
+    0x5B,0x80,0x4D,0x41,0x54,0x52,0x00,0x72,  /* 00002528    "[.MATR.r" */
+    0x4D,0x41,0x50,0x41,0x0A,0x70,0x00,0x0A,  /* 00002530    "MAPA.p.." */
+    0x08,0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,  /* 00002538    ".[..MATR" */
+    0x01,0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,  /* 00002540    ".MAT_ at .[" */
+    0x81,0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,  /* 00002548    "..MATR.." */
+    0x20,0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,  /* 00002550    " FLG_..." */
+    0x5F,0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,  /* 00002558    "_MAT...M" */
+    0x41,0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,  /* 00002560    "AT_..._S" */
+    0x54,0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,  /* 00002568    "TA...FLG" */
+    0x5F,0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,  /* 00002570    "_......." */
+    0x09,0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,  /* 00002578    "..._EJ0." */
+    0x5B,0x22,0x0A,0xC8,0x14,0x4C,0x46,0x4E,  /* 00002580    "["...LFN" */
+    0x54,0x46,0x59,0x02,0xA0,0x49,0x04,0x93,  /* 00002588    "TFY..I.." */
+    0x68,0x00,0xA0,0x43,0x04,0x92,0x93,0x69,  /* 00002590    "h..C...i" */
+    0x5E,0x2E,0x43,0x30,0x5F,0x5F,0x46,0x4C,  /* 00002598    "^.C0__FL" */
+    0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,0x30,  /* 000025A0    "G_pi^.C0" */
+    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,  /* 000025A8    "__FLG_.." */
+    0x93,0x69,0x01,0x86,0x43,0x30,0x5F,0x5F,  /* 000025B0    ".i..C0__" */
+    0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 000025B8    ".tMSU_.M" */
+    0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,0x30,  /* 000025C0    "SU_...C0" */
+    0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,  /* 000025C8    "__..rMSU" */
+    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,0x49,  /* 000025D0    "_.MSU_.I" */
+    0x04,0x93,0x68,0x01,0xA0,0x43,0x04,0x92,  /* 000025D8    "..h..C.." */
+    0x93,0x69,0x5E,0x2E,0x43,0x31,0x5F,0x5F,  /* 000025E0    ".i^.C1__" */
+    0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,  /* 000025E8    "FLG_pi^." */
+    0x43,0x31,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 000025F0    "C1__FLG_" */
+    0xA0,0x14,0x93,0x69,0x01,0x86,0x43,0x31,  /* 000025F8    "...i..C1" */
+    0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,  /* 00002600    "__.tMSU_" */
+    0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,  /* 00002608    ".MSU_..." */
+    0x43,0x31,0x5F,0x5F,0x0A,0x03,0x72,0x4D,  /* 00002610    "C1__..rM" */
+    0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002618    "SU_.MSU_" */
+    0xA0,0x4A,0x04,0x93,0x68,0x0A,0x02,0xA0,  /* 00002620    ".J..h..." */
+    0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,  /* 00002628    "C...i^.C" */
+    0x32,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,  /* 00002630    "2__FLG_p" */
+    0x69,0x5E,0x2E,0x43,0x32,0x5F,0x5F,0x46,  /* 00002638    "i^.C2__F" */
+    0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,  /* 00002640    "LG_...i." */
+    0x86,0x43,0x32,0x5F,0x5F,0x01,0x74,0x4D,  /* 00002648    ".C2__.tM" */
+    0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002650    "SU_.MSU_" */
+    0xA1,0x12,0x86,0x43,0x32,0x5F,0x5F,0x0A,  /* 00002658    "...C2__." */
+    0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 00002660    ".rMSU_.M" */
+    0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,  /* 00002668    "SU_.J..h" */
+    0x0A,0x03,0xA0,0x43,0x04,0x92,0x93,0x69,  /* 00002670    "...C...i" */
+    0x5E,0x2E,0x43,0x33,0x5F,0x5F,0x46,0x4C,  /* 00002678    "^.C3__FL" */
+    0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,0x33,  /* 00002680    "G_pi^.C3" */
+    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,  /* 00002688    "__FLG_.." */
+    0x93,0x69,0x01,0x86,0x43,0x33,0x5F,0x5F,  /* 00002690    ".i..C3__" */
+    0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 00002698    ".tMSU_.M" */
+    0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,0x33,  /* 000026A0    "SU_...C3" */
+    0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,  /* 000026A8    "__..rMSU" */
+    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,0x4A,  /* 000026B0    "_.MSU_.J" */
+    0x04,0x93,0x68,0x0A,0x04,0xA0,0x43,0x04,  /* 000026B8    "..h...C." */
+    0x92,0x93,0x69,0x5E,0x2E,0x43,0x34,0x5F,  /* 000026C0    "..i^.C4_" */
+    0x5F,0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,  /* 000026C8    "_FLG_pi^" */
+    0x2E,0x43,0x34,0x5F,0x5F,0x46,0x4C,0x47,  /* 000026D0    ".C4__FLG" */
+    0x5F,0xA0,0x14,0x93,0x69,0x01,0x86,0x43,  /* 000026D8    "_...i..C" */
+    0x34,0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,  /* 000026E0    "4__.tMSU" */
+    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,  /* 000026E8    "_.MSU_.." */
+    0x86,0x43,0x34,0x5F,0x5F,0x0A,0x03,0x72,  /* 000026F0    ".C4__..r" */
+    0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,  /* 000026F8    "MSU_.MSU" */
+    0x5F,0xA0,0x4A,0x04,0x93,0x68,0x0A,0x05,  /* 00002700    "_.J..h.." */
+    0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,  /* 00002708    ".C...i^." */
+    0x43,0x35,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 00002710    "C5__FLG_" */
+    0x70,0x69,0x5E,0x2E,0x43,0x35,0x5F,0x5F,  /* 00002718    "pi^.C5__" */
+    0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,  /* 00002720    "FLG_...i" */
+    0x01,0x86,0x43,0x35,0x5F,0x5F,0x01,0x74,  /* 00002728    "..C5__.t" */
+    0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,  /* 00002730    "MSU_.MSU" */
+    0x5F,0xA1,0x12,0x86,0x43,0x35,0x5F,0x5F,  /* 00002738    "_...C5__" */
+    0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,  /* 00002740    "..rMSU_." */
+    0x4D,0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,  /* 00002748    "MSU_.J.." */
+    0x68,0x0A,0x06,0xA0,0x43,0x04,0x92,0x93,  /* 00002750    "h...C..." */
+    0x69,0x5E,0x2E,0x43,0x36,0x5F,0x5F,0x46,  /* 00002758    "i^.C6__F" */
+    0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,  /* 00002760    "LG_pi^.C" */
+    0x36,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,  /* 00002768    "6__FLG_." */
+    0x14,0x93,0x69,0x01,0x86,0x43,0x36,0x5F,  /* 00002770    "..i..C6_" */
+    0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,  /* 00002778    "_.tMSU_." */
+    0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,  /* 00002780    "MSU_...C" */
+    0x36,0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,  /* 00002788    "6__..rMS" */
+    0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,  /* 00002790    "U_.MSU_." */
+    0x4A,0x04,0x93,0x68,0x0A,0x07,0xA0,0x43,  /* 00002798    "J..h...C" */
+    0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,0x37,  /* 000027A0    "...i^.C7" */
+    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,0x69,  /* 000027A8    "__FLG_pi" */
+    0x5E,0x2E,0x43,0x37,0x5F,0x5F,0x46,0x4C,  /* 000027B0    "^.C7__FL" */
+    0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,0x86,  /* 000027B8    "G_...i.." */
+    0x43,0x37,0x5F,0x5F,0x01,0x74,0x4D,0x53,  /* 000027C0    "C7__.tMS" */
+    0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA1,  /* 000027C8    "U_.MSU_." */
+    0x12,0x86,0x43,0x37,0x5F,0x5F,0x0A,0x03,  /* 000027D0    "..C7__.." */
+    0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /* 000027D8    "rMSU_.MS" */
+    0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,0x0A,  /* 000027E0    "U_.J..h." */
+    0x08,0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,  /* 000027E8    "..C...i^" */
+    0x2E,0x43,0x38,0x5F,0x5F,0x46,0x4C,0x47,  /* 000027F0    ".C8__FLG" */
+    0x5F,0x70,0x69,0x5E,0x2E,0x43,0x38,0x5F,  /* 000027F8    "_pi^.C8_" */
+    0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,  /* 00002800    "_FLG_..." */
+    0x69,0x01,0x86,0x43,0x38,0x5F,0x5F,0x01,  /* 00002808    "i..C8__." */
+    0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /* 00002810    "tMSU_.MS" */
+    0x55,0x5F,0xA1,0x12,0x86,0x43,0x38,0x5F,  /* 00002818    "U_...C8_" */
+    0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,  /* 00002820    "_..rMSU_" */
+    0x01,0x4D,0x53,0x55,0x5F,0xA0,0x4A,0x04,  /* 00002828    ".MSU_.J." */
+    0x93,0x68,0x0A,0x09,0xA0,0x43,0x04,0x92,  /* 00002830    ".h...C.." */
+    0x93,0x69,0x5E,0x2E,0x43,0x39,0x5F,0x5F,  /* 00002838    ".i^.C9__" */
+    0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,  /* 00002840    "FLG_pi^." */
+    0x43,0x39,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 00002848    "C9__FLG_" */
+    0xA0,0x14,0x93,0x69,0x01,0x86,0x43,0x39,  /* 00002850    "...i..C9" */
+    0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,  /* 00002858    "__.tMSU_" */
+    0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,  /* 00002860    ".MSU_..." */
+    0x43,0x39,0x5F,0x5F,0x0A,0x03,0x72,0x4D,  /* 00002868    "C9__..rM" */
+    0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002870    "SU_.MSU_" */
+    0xA0,0x4A,0x04,0x93,0x68,0x0A,0x0A,0xA0,  /* 00002878    ".J..h..." */
+    0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,  /* 00002880    "C...i^.C" */
+    0x41,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,  /* 00002888    "A__FLG_p" */
+    0x69,0x5E,0x2E,0x43,0x41,0x5F,0x5F,0x46,  /* 00002890    "i^.CA__F" */
+    0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,  /* 00002898    "LG_...i." */
+    0x86,0x43,0x41,0x5F,0x5F,0x01,0x74,0x4D,  /* 000028A0    ".CA__.tM" */
+    0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 000028A8    "SU_.MSU_" */
+    0xA1,0x12,0x86,0x43,0x41,0x5F,0x5F,0x0A,  /* 000028B0    "...CA__." */
+    0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 000028B8    ".rMSU_.M" */
+    0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,  /* 000028C0    "SU_.J..h" */
+    0x0A,0x0B,0xA0,0x43,0x04,0x92,0x93,0x69,  /* 000028C8    "...C...i" */
+    0x5E,0x2E,0x43,0x42,0x5F,0x5F,0x46,0x4C,  /* 000028D0    "^.CB__FL" */
+    0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,0x42,  /* 000028D8    "G_pi^.CB" */
+    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,  /* 000028E0    "__FLG_.." */
+    0x93,0x69,0x01,0x86,0x43,0x42,0x5F,0x5F,  /* 000028E8    ".i..CB__" */
+    0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 000028F0    ".tMSU_.M" */
+    0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,0x42,  /* 000028F8    "SU_...CB" */
+    0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,  /* 00002900    "__..rMSU" */
+    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,0x4A,  /* 00002908    "_.MSU_.J" */
+    0x04,0x93,0x68,0x0A,0x0C,0xA0,0x43,0x04,  /* 00002910    "..h...C." */
+    0x92,0x93,0x69,0x5E,0x2E,0x43,0x43,0x5F,  /* 00002918    "..i^.CC_" */
+    0x5F,0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,  /* 00002920    "_FLG_pi^" */
+    0x2E,0x43,0x43,0x5F,0x5F,0x46,0x4C,0x47,  /* 00002928    ".CC__FLG" */
+    0x5F,0xA0,0x14,0x93,0x69,0x01,0x86,0x43,  /* 00002930    "_...i..C" */
+    0x43,0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,  /* 00002938    "C__.tMSU" */
+    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,  /* 00002940    "_.MSU_.." */
+    0x86,0x43,0x43,0x5F,0x5F,0x0A,0x03,0x72,  /* 00002948    ".CC__..r" */
+    0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,  /* 00002950    "MSU_.MSU" */
+    0x5F,0xA0,0x4A,0x04,0x93,0x68,0x0A,0x0D,  /* 00002958    "_.J..h.." */
+    0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,  /* 00002960    ".C...i^." */
+    0x43,0x44,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 00002968    "CD__FLG_" */
+    0x70,0x69,0x5E,0x2E,0x43,0x44,0x5F,0x5F,  /* 00002970    "pi^.CD__" */
+    0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,  /* 00002978    "FLG_...i" */
+    0x01,0x86,0x43,0x44,0x5F,0x5F,0x01,0x74,  /* 00002980    "..CD__.t" */
+    0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,  /* 00002988    "MSU_.MSU" */
+    0x5F,0xA1,0x12,0x86,0x43,0x44,0x5F,0x5F,  /* 00002990    "_...CD__" */
+    0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,  /* 00002998    "..rMSU_." */
+    0x4D,0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,  /* 000029A0    "MSU_.J.." */
+    0x68,0x0A,0x0E,0xA0,0x43,0x04,0x92,0x93,  /* 000029A8    "h...C..." */
+    0x69,0x5E,0x2E,0x43,0x45,0x5F,0x5F,0x46,  /* 000029B0    "i^.CE__F" */
+    0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,  /* 000029B8    "LG_pi^.C" */
+    0x45,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,  /* 000029C0    "E__FLG_." */
+    0x14,0x93,0x69,0x01,0x86,0x43,0x45,0x5F,  /* 000029C8    "..i..CE_" */
+    0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,  /* 000029D0    "_.tMSU_." */
+    0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,  /* 000029D8    "MSU_...C" */
+    0x45,0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,  /* 000029E0    "E__..rMS" */
+    0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA4,  /* 000029E8    "U_.MSU_." */
+    0x01,0x5B,0x80,0x50,0x52,0x53,0x54,0x01,  /* 000029F0    ".[.PRST." */
+    0x0B,0x00,0xAF,0x0A,0x20,0x5B,0x81,0x0C,  /* 000029F8    ".... [.." */
+    0x50,0x52,0x53,0x54,0x01,0x50,0x52,0x53,  /* 00002A00    "PRST.PRS" */
+    0x5F,0x40,0x10,0x14,0x4E,0x04,0x50,0x52,  /* 00002A08    "_ at ..N.PR" */
+    0x53,0x43,0x00,0x70,0x50,0x52,0x53,0x5F,  /* 00002A10    "SC.pPRS_" */
+    0x63,0x70,0x00,0x60,0xA2,0x3B,0x95,0x60,  /* 00002A18    "cp.`.;.`" */
+    0x0A,0x20,0x70,0x00,0x61,0x70,0x83,0x88,  /* 00002A20    ". p.ap.." */
+    0x63,0x60,0x00,0x62,0xA2,0x29,0x95,0x61,  /* 00002A28    "c`.b.).a" */
+    0x0A,0x08,0x70,0x72,0x77,0x60,0x0A,0x08,  /* 00002A30    "..prw`.." */
+    0x00,0x61,0x00,0x64,0xA0,0x10,0x95,0x64,  /* 00002A38    ".a.d...d" */
+    0x43,0x50,0x55,0x4E,0x4E,0x54,0x46,0x59,  /* 00002A40    "CPUNNTFY" */
+    0x64,0x7B,0x62,0x01,0x00,0xA1,0x02,0xA5,  /* 00002A48    "d{b....." */
+    0x7A,0x62,0x01,0x62,0x75,0x61,0x75,0x60,  /* 00002A50    "zb.buau`" */
     0xA4,0x01,
 };
diff --git a/src/acpi.c b/src/acpi.c
index f613b03..eb4ee99 100644
--- a/src/acpi.c
+++ b/src/acpi.c
@@ -344,9 +344,19 @@ build_fadt(int bdf)
     return fadt;
 }

+/* BIOS use only area unit: transfer MADT info to DSDT */
+#define MADT_INFO_PHYSICAL_ADDRESS    0x514
+struct madt_info {
+    u32 madt_csum_addr;    /* address of MADT checksum */
+    u32 madt_lapic0_addr;  /* address of first MADT LAPIC struct */
+    u32 maxcpus;           /* max cpus */
+};
+
 static void*
 build_madt(void)
 {
+    struct madt_info *madt_info;
+
     int madt_size = (sizeof(struct multiple_apic_table)
                      + sizeof(struct madt_processor_apic) * MaxCountCPUs
                      + sizeof(struct madt_io_apic)
@@ -360,6 +370,13 @@ build_madt(void)
     madt->local_apic_address = cpu_to_le32(BUILD_APIC_ADDR);
     madt->flags = cpu_to_le32(1);
     struct madt_processor_apic *apic = (void*)&madt[1];
+
+    madt_info = (struct madt_info *)MADT_INFO_PHYSICAL_ADDRESS;
+    memset(madt_info, 0, sizeof(*madt_info));
+    madt_info->madt_csum_addr = (u32)&madt->checksum;
+    madt_info->madt_lapic0_addr = (u32)apic;
+    madt_info->maxcpus = MaxCountCPUs;
+
     int i;
     for (i=0; i<MaxCountCPUs; i++) {
         apic->type = APIC_PROCESSOR;
@@ -410,13 +427,7 @@ build_madt(void)
 static void*
 build_ssdt(void)
 {
-    int acpi_cpus = MaxCountCPUs > 0xff ? 0xff : MaxCountCPUs;
-    // calculate the length of processor block and scope block
-    // excluding PkgLength
-    int cpu_length = 13 * acpi_cpus + 4;
-
-    int length = sizeof(struct acpi_table_header) + 3 + cpu_length;
-    u8 *ssdt = malloc_high(length);
+    u8 *ssdt = malloc_high(sizeof(struct acpi_table_header));
     if (! ssdt) {
         dprintf(1, "No space for ssdt!\n");
         return NULL;
@@ -426,40 +437,6 @@ build_ssdt(void)
     ssdt_ptr[9] = 0; // checksum;
     ssdt_ptr += sizeof(struct acpi_table_header);

-    // build processor scope header
-    *(ssdt_ptr++) = 0x10; // ScopeOp
-    if (cpu_length <= 0x3e) {
-        *(ssdt_ptr++) = cpu_length + 1;
-    } else {
-        *(ssdt_ptr++) = 0x7F;
-        *(ssdt_ptr++) = (cpu_length + 2) >> 6;
-    }
-    *(ssdt_ptr++) = '_'; // Name
-    *(ssdt_ptr++) = 'P';
-    *(ssdt_ptr++) = 'R';
-    *(ssdt_ptr++) = '_';
-
-    // build object for each processor
-    int i;
-    for (i=0; i<acpi_cpus; i++) {
-        *(ssdt_ptr++) = 0x5B; // ProcessorOp
-        *(ssdt_ptr++) = 0x83;
-        *(ssdt_ptr++) = 0x0B; // Length
-        *(ssdt_ptr++) = 'C';  // Name (CPUxx)
-        *(ssdt_ptr++) = 'P';
-        if ((i & 0xf0) != 0)
-            *(ssdt_ptr++) = (i >> 4) < 0xa ? (i >> 4) + '0' : (i >> 4) + 'A' - 0xa;
-        else
-            *(ssdt_ptr++) = 'U';
-        *(ssdt_ptr++) = (i & 0xf) < 0xa ? (i & 0xf) + '0' : (i & 0xf) + 'A' - 0xa;
-        *(ssdt_ptr++) = i;
-        *(ssdt_ptr++) = 0x10; // Processor block address
-        *(ssdt_ptr++) = 0xb0;
-        *(ssdt_ptr++) = 0;
-        *(ssdt_ptr++) = 0;
-        *(ssdt_ptr++) = 6;    // Processor block length
-    }
-
     build_header((void*)ssdt, SSDT_SIGNATURE, ssdt_ptr - ssdt, 1);

     return ssdt;
--
1.6.5.6
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vcpu_hotplug.patch
Type: application/octet-stream
Size: 44751 bytes
Desc: vcpu_hotplug.patch
URL: <http://www.seabios.org/pipermail/seabios/attachments/20100128/25fa3e7a/attachment-0001.dmg>


More information about the SeaBIOS mailing list