[SeaBIOS] [PATCH] vcpu hotplug: Setup vcpu add/remove infrastructure, including madt bios_info and dsdt

Liu, Jinsong jinsong.liu at intel.com
Fri Jan 22 10:11:03 CET 2010


Gleb Natapov wrote:
> On Fri, Jan 22, 2010 at 09:35:55AM +0800, Liu, Jinsong wrote:
>>> From cb997030cba02e7e74a29b3d942aeba9808ed293 Mon Sep 17 00:00:00
>>> 2001
>> From: Liu, Jinsong <jinsong.liu at intel.com>
>> Date: Fri, 22 Jan 2010 03:18:46 +0800
>> Subject: [PATCH]         Setup vcpu add/remove infrastructure,
>> including madt bios_info and dsdt.
>>
>>         1. setup madt bios_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 bios_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.
>>
>>         Signed-off-by: Liu, Jinsong <jinsong.liu at intel.com>
> As far as I can see this is the same version as previous one. No
> comments addressed.
>

Yes, yesterday I mis-send the vcpu bios patch to kvm at vger.kernel.org.
Avi remind me to send to seabios at seabios.org, so I re-send same patch to seabios.

Thanks,
Jinsong

>> ---
>>  src/acpi-dsdt.dsl |  131 ++++++++++++++++-
>>  src/acpi-dsdt.hex |  441
>>  ++++++++++++++++++++++++++++++++++++++++++++++++++---  src/acpi.c
>>  |    7 + src/biosvar.h     |   14 ++ src/post.c        |   13 ++
>>  5 files changed, 582 insertions(+), 24 deletions(-)
>>
>> diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl
>> index cc31112..ed78489 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,130 @@ DefinitionBlock (
>>          }
>>      }
>>
>> +
>> +    Scope (\_PR)
>> +    {
>> +        /* BIOS_INFO_PHYSICAL_ADDRESS == 0xEA000 */
>> +        OperationRegion(BIOS, SystemMemory, 0xEA000, 16)
>> +        Field(BIOS, DwordAcc, NoLock, Preserve)
>> +        {
>> +            MSUA, 32, /* MADT checksum address */
>> +            MAPA, 32, /* MADT LAPIC0 address */
>> +            PBYT, 32, /* bytes of max vcpus bitmap */
>> +            PBIT, 32  /* bits of last byte of max vcpus bitmap */ +
>> } +
>> +        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, \_PR.PBYT)) {
>> +                Store(Zero, Local1)
>> +                Store(DerefOf(Index(Local3, Local0)), Local2)
>> +                While(LLess(Local1, 8)) {
>> +                    NTFY(Add(Multiply(Local0, 8), Local1),
>> And(Local2, 1)) +                    ShiftRight(Local2, 1, Local2)
>> +                    Increment(Local1)
>> +                }
>> +                Increment(Local0)
>> +            }
>> +
>> +            Store(Zero, Local1)
>> +            Store(DerefOf(Index(Local3, Local0)), Local2)
>> +            While(LLess(Local1, \_PR.PBIT)) {
>> +                NTFY(Add(Multiply(Local0, 8), Local1), And(Local2,
>> 1)) +                ShiftRight(Local2, 1, Local2)
>> +                Increment(Local1)
>> +            }
>> +
>> +            Return(One)
>> +        }
>> +    }
>>  }
>> diff --git a/src/acpi-dsdt.hex b/src/acpi-dsdt.hex
>> index 465e93e..85d6d69 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 22 02:12:21 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,0x7D,0x2A,0x00,0x00,  /*
>> 00000000    "DSDT}*.." */ +
>>      0x01,0x68,0x42,0x58,0x50,0x43,0x00,0x00,  /* 00000008
>>      ".hBXPC.." */ 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,416 @@ 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." */
>> -    0xA4,0x01,
>> +    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,0x41,0xC5,0x5F,0x50,  /* 00001E28    "....A._P"
>> */ +    0x52,0x5F,0x5B,0x80,0x42,0x49,0x4F,0x53,  /* 00001E30
>> "R_[.BIOS" */ +    0x00,0x0C,0x00,0xA0,0x0E,0x00,0x0A,0x10,  /*
>> 00001E38    "........" */ +
>> 0x5B,0x81,0x1A,0x42,0x49,0x4F,0x53,0x03,  /* 00001E40    "[..BIOS."
>> */ +    0x4D,0x53,0x55,0x41,0x20,0x4D,0x41,0x50,  /* 00001E48
>> "MSUA MAP" */ +    0x41,0x20,0x50,0x42,0x59,0x54,0x20,0x50,  /*
>> 00001E50    "A PBYT P" */ +
>> 0x42,0x49,0x54,0x20,0x5B,0x80,0x4D,0x53,  /* 00001E58    "BIT [.MS"
>> */ +    0x55,0x4D,0x00,0x4D,0x53,0x55,0x41,0x01,  /* 00001E60
>> "UM.MSUA." */ +    0x5B,0x81,0x0B,0x4D,0x53,0x55,0x4D,0x01,  /*
>> 00001E68    "[..MSUM." */ +
>> 0x4D,0x53,0x55,0x5F,0x08,0x5B,0x83,0x46,  /* 00001E70    "MSU_.[.F"
>> */ +    0x07,0x43,0x30,0x5F,0x5F,0x00,0x10,0xB0,  /* 00001E78
>> ".C0__..." */ +    0x00,0x00,0x06,0x08,0x5F,0x48,0x49,0x44,  /*
>> 00001E80    "...._HID" */ +
>> 0x0D,0x41,0x43,0x50,0x49,0x30,0x30,0x30,  /* 00001E88    ".ACPI000"
>> */ +    0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,0x52,  /* 00001E90
>> "7.[.MATR" */ +    0x00,0x72,0x4D,0x41,0x50,0x41,0x00,0x00,  /*
>> 00001E98    ".rMAPA.." */ +
>> 0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,0x54,  /* 00001EA0    "..[..MAT"
>> */ +    0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,0x04,  /* 00001EA8
>> "R.MAT_ at ." */ +    0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,0x01,  /*
>> 00001EB0    "[..MATR." */ +
>> 0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,0x14,  /* 00001EB8    ". FLG_.."
>> */ +    0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,0x96,  /* 00001EC0
>> "._MAT..." */ +    0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,0x5F,  /*
>> 00001EC8    "MAT_..._" */ +
>> 0x53,0x54,0x41,0x00,0xA0,0x08,0x46,0x4C,  /* 00001ED0    "STA...FL"
>> */ +    0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,0xA4,  /* 00001ED8
>> "G_......" */ +    0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,0x30,  /*
>> 00001EE0    "...._EJ0" */ +
>> 0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,0x47,  /* 00001EE8    ".["..[.G"
>> */ +    0x07,0x43,0x31,0x5F,0x5F,0x01,0x10,0xB0,  /* 00001EF0
>> ".C1__..." */ +    0x00,0x00,0x06,0x08,0x5F,0x48,0x49,0x44,  /*
>> 00001EF8    "...._HID" */ +
>> 0x0D,0x41,0x43,0x50,0x49,0x30,0x30,0x30,  /* 00001F00    ".ACPI000"
>> */ +    0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,0x52,  /* 00001F08
>> "7.[.MATR" */ +    0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,0x08,  /*
>> 00001F10    ".rMAPA.." */ +
>> 0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,  /* 00001F18    "...[..MA"
>> */ +    0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,  /* 00001F20
>> "TR.MAT_@" */ +    0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,  /*
>> 00001F28    ".[..MATR" */ +
>> 0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,  /* 00001F30    ".. FLG_."
>> */ +    0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,  /* 00001F38
>> ".._MAT.." */ +    0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,  /*
>> 00001F40    ".MAT_..." */ +
>> 0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,0x46,  /* 00001F48    "_STA...F"
>> */ +    0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,  /* 00001F50
>> "LG_....." */ +    0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,  /*
>> 00001F58    "....._EJ" */ +
>> 0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,  /* 00001F60    "0.["..[."
>> */ +    0x47,0x07,0x43,0x32,0x5F,0x5F,0x02,0x10,  /* 00001F68
>> "G.C2__.." */ +    0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,0x49,  /*
>> 00001F70    "....._HI" */ +
>> 0x44,0x0D,0x41,0x43,0x50,0x49,0x30,0x30,  /* 00001F78    "D.ACPI00"
>> */ +    0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,  /* 00001F80
>> "07.[.MAT" */ +    0x52,0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,  /*
>> 00001F88    "R.rMAPA." */ +
>> 0x10,0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,  /* 00001F90    "....[..M"
>> */ +    0x41,0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,  /* 00001F98
>> "ATR.MAT_" */ +    0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,  /*
>> 00001FA0    "@.[..MAT" */ +
>> 0x52,0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,  /* 00001FA8    "R.. FLG_"
>> */ +    0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,  /* 00001FB0
>> "..._MAT." */ +    0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,  /*
>> 00001FB8    "..MAT_.." */ +
>> 0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,  /* 00001FC0    "._STA..."
>> */ +    0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,  /* 00001FC8
>> "FLG_...." */ +    0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,  /*
>> 00001FD0    "......_E" */ +
>> 0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,  /* 00001FD8    "J0.["..["
>> */ +    0x83,0x47,0x07,0x43,0x33,0x5F,0x5F,0x03,  /* 00001FE0
>> ".G.C3__." */ +    0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,  /*
>> 00001FE8    "......_H" */ +
>> 0x49,0x44,0x0D,0x41,0x43,0x50,0x49,0x30,  /* 00001FF0    "ID.ACPI0"
>> */ +    0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,  /* 00001FF8
>> "007.[.MA" */ +    0x54,0x52,0x00,0x72,0x4D,0x41,0x50,0x41,  /*
>> 00002000    "TR.rMAPA" */ +
>> 0x0A,0x18,0x00,0x0A,0x08,0x5B,0x81,0x0C,  /* 00002008    ".....[.."
>> */ +    0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,0x54,  /* 00002010
>> "MATR.MAT" */ +    0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,  /*
>> 00002018    "_ at .[..MA" */ +
>> 0x54,0x52,0x01,0x00,0x20,0x46,0x4C,0x47,  /* 00002020    "TR.. FLG"
>> */ +    0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,  /* 00002028
>> "_..._MAT" */ +    0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,  /*
>> 00002030    "...MAT_." */ +
>> 0x14,0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,  /* 00002038    ".._STA.."
>> */ +    0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,  /* 00002040
>> ".FLG_..." */ +    0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,  /*
>> 00002048    "......._" */ +
>> 0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,  /* 00002050    "EJ0.[".."
>> */ +    0x5B,0x83,0x47,0x07,0x43,0x34,0x5F,0x5F,  /* 00002058
>> "[.G.C4__" */ +    0x04,0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,  /*
>> 00002060    "......._" */ +
>> 0x48,0x49,0x44,0x0D,0x41,0x43,0x50,0x49,  /* 00002068    "HID.ACPI"
>> */ +    0x30,0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,  /* 00002070
>> "0007.[.M" */ +    0x41,0x54,0x52,0x00,0x72,0x4D,0x41,0x50,  /*
>> 00002078    "ATR.rMAP" */ +
>> 0x41,0x0A,0x20,0x00,0x0A,0x08,0x5B,0x81,  /* 00002080    "A. ...[."
>> */ +    0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,  /* 00002088
>> ".MATR.MA" */ +    0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,  /*
>> 00002090    "T_ at .[..M" */ +
>> 0x41,0x54,0x52,0x01,0x00,0x20,0x46,0x4C,  /* 00002098    "ATR.. FL"
>> */ +    0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,  /* 000020A0
>> "G_..._MA" */ +    0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,  /*
>> 000020A8    "T...MAT_" */ +
>> 0x00,0x14,0x14,0x5F,0x53,0x54,0x41,0x00,  /* 000020B0    "..._STA."
>> */ +    0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,  /* 000020B8
>> "..FLG_.." */ +    0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,  /*
>> 000020C0    "........" */ +
>> 0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,  /* 000020C8    "_EJ0.["."
>> */ +    0xC8,0x5B,0x83,0x47,0x07,0x43,0x35,0x5F,  /* 000020D0
>> ".[.G.C5_" */ +    0x5F,0x05,0x10,0xB0,0x00,0x00,0x06,0x08,  /*
>> 000020D8    "_......." */ +
>> 0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50,  /* 000020E0    "_HID.ACP"
>> */ +    0x49,0x30,0x30,0x30,0x37,0x00,0x5B,0x80,  /* 000020E8
>> "I0007.[." */ +    0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,0x41,  /*
>> 000020F0    "MATR.rMA" */ +
>> 0x50,0x41,0x0A,0x28,0x00,0x0A,0x08,0x5B,  /* 000020F8    "PA.(...["
>> */ +    0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,  /* 00002100
>> "..MATR.M" */ +    0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,  /*
>> 00002108    "AT_ at .[.." */ +
>> 0x4D,0x41,0x54,0x52,0x01,0x00,0x20,0x46,  /* 00002110    "MATR.. F"
>> */ +    0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,  /* 00002118
>> "LG_..._M" */ +    0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,  /*
>> 00002120    "AT...MAT" */ +
>> 0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,0x41,  /* 00002128    "_..._STA"
>> */ +    0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,  /* 00002130
>> "...FLG_." */ +    0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,  /*
>> 00002138    "........" */ +
>> 0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,  /* 00002140    "._EJ0.[""
>> */ +    0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,0x36,  /* 00002148
>> "..[.G.C6" */ +    0x5F,0x5F,0x06,0x10,0xB0,0x00,0x00,0x06,  /*
>> 00002150    "__......" */ +
>> 0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,  /* 00002158    "._HID.AC"
>> */ +    0x50,0x49,0x30,0x30,0x30,0x37,0x00,0x5B,  /* 00002160
>> "PI0007.[" */ +    0x80,0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,  /*
>> 00002168    ".MATR.rM" */ +
>> 0x41,0x50,0x41,0x0A,0x30,0x00,0x0A,0x08,  /* 00002170    "APA.0..."
>> */ +    0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,  /* 00002178
>> "[..MATR." */ +    0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,  /*
>> 00002180    "MAT_ at .[." */ +
>> 0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,0x20,  /* 00002188    ".MATR.. "
>> */ +    0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,  /* 00002190
>> "FLG_..._" */ +    0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,  /*
>> 00002198    "MAT...MA" */ +
>> 0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,  /* 000021A0    "T_..._ST"
>> */ +    0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,  /* 000021A8
>> "A...FLG_" */ +    0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,  /*
>> 000021B0    "........" */ +
>> 0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,  /* 000021B8    ".._EJ0.["
>> */ +    0x22,0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,  /* 000021C0
>> ""..[.G.C" */ +    0x37,0x5F,0x5F,0x07,0x10,0xB0,0x00,0x00,  /*
>> 000021C8    "7__....." */ +
>> 0x06,0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,  /* 000021D0    ".._HID.A"
>> */ +    0x43,0x50,0x49,0x30,0x30,0x30,0x37,0x00,  /* 000021D8
>> "CPI0007." */ +    0x5B,0x80,0x4D,0x41,0x54,0x52,0x00,0x72,  /*
>> 000021E0    "[.MATR.r" */ +
>> 0x4D,0x41,0x50,0x41,0x0A,0x38,0x00,0x0A,  /* 000021E8    "MAPA.8.."
>> */ +    0x08,0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,  /* 000021F0
>> ".[..MATR" */ +    0x01,0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,  /*
>> 000021F8    ".MAT_ at .[" */ +
>> 0x81,0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,  /* 00002200    "..MATR.."
>> */ +    0x20,0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,  /* 00002208    "
>> FLG_..." */ +    0x5F,0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,  /*
>> 00002210    "_MAT...M" */ +
>> 0x41,0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,  /* 00002218    "AT_..._S"
>> */ +    0x54,0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,  /* 00002220
>> "TA...FLG" */ +    0x5F,0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,  /*
>> 00002228    "_......." */ +
>> 0x09,0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,  /* 00002230    "..._EJ0."
>> */ +    0x5B,0x22,0x0A,0xC8,0x5B,0x83,0x47,0x07,  /* 00002238
>> "["..[.G." */ +    0x43,0x38,0x5F,0x5F,0x08,0x10,0xB0,0x00,  /*
>> 00002240    "C8__...." */ +
>> 0x00,0x06,0x08,0x5F,0x48,0x49,0x44,0x0D,  /* 00002248    "..._HID."
>> */ +    0x41,0x43,0x50,0x49,0x30,0x30,0x30,0x37,  /* 00002250
>> "ACPI0007" */ +    0x00,0x5B,0x80,0x4D,0x41,0x54,0x52,0x00,  /*
>> 00002258    ".[.MATR." */ +
>> 0x72,0x4D,0x41,0x50,0x41,0x0A,0x40,0x00,  /* 00002260    "rMAPA. at ."
>> */ +    0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,0x54,  /* 00002268
>> "..[..MAT" */ +    0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,0x04,  /*
>> 00002270    "R.MAT_ at ." */ +
>> 0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,0x01,  /* 00002278    "[..MATR."
>> */ +    0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,0x14,  /* 00002280    ".
>> FLG_.." */ +    0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,0x96,  /*
>> 00002288    "._MAT..." */ +
>> 0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,0x5F,  /* 00002290    "MAT_..._"
>> */ +    0x53,0x54,0x41,0x00,0xA0,0x08,0x46,0x4C,  /* 00002298
>> "STA...FL" */ +    0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,0xA4,  /*
>> 000022A0    "G_......" */ +
>> 0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,0x30,  /* 000022A8    "...._EJ0"
>> */ +    0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,0x47,  /* 000022B0
>> ".["..[.G" */ +    0x07,0x43,0x39,0x5F,0x5F,0x09,0x10,0xB0,  /*
>> 000022B8    ".C9__..." */ +
>> 0x00,0x00,0x06,0x08,0x5F,0x48,0x49,0x44,  /* 000022C0    "...._HID"
>> */ +    0x0D,0x41,0x43,0x50,0x49,0x30,0x30,0x30,  /* 000022C8
>> ".ACPI000" */ +    0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,0x52,  /*
>> 000022D0    "7.[.MATR" */ +
>> 0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,0x48,  /* 000022D8    ".rMAPA.H"
>> */ +    0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,0x41,  /* 000022E0
>> "...[..MA" */ +    0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,0x40,  /*
>> 000022E8    "TR.MAT_@" */ +
>> 0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,0x52,  /* 000022F0    ".[..MATR"
>> */ +    0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,0x01,  /* 000022F8    "..
>> FLG_." */ +    0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,0xA4,  /* 00002300
>> ".._MAT.." */ +    0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,0x14,  /*
>> 00002308    ".MAT_..." */ +
>> 0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,0x46,  /* 00002310    "_STA...F"
>> */ +    0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,0x04,  /* 00002318
>> "LG_....." */ +    0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,0x4A,  /*
>> 00002320    "....._EJ" */ +
>> 0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,0x83,  /* 00002328    "0.["..[."
>> */ +    0x47,0x07,0x43,0x41,0x5F,0x5F,0x0A,0x10,  /* 00002330
>> "G.CA__.." */ +    0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,0x49,  /*
>> 00002338    "....._HI" */ +
>> 0x44,0x0D,0x41,0x43,0x50,0x49,0x30,0x30,  /* 00002340    "D.ACPI00"
>> */ +    0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,0x54,  /* 00002348
>> "07.[.MAT" */ +    0x52,0x00,0x72,0x4D,0x41,0x50,0x41,0x0A,  /*
>> 00002350    "R.rMAPA." */ +
>> 0x50,0x00,0x0A,0x08,0x5B,0x81,0x0C,0x4D,  /* 00002358    "P...[..M"
>> */ +    0x41,0x54,0x52,0x01,0x4D,0x41,0x54,0x5F,  /* 00002360
>> "ATR.MAT_" */ +    0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,0x54,  /*
>> 00002368    "@.[..MAT" */ +
>> 0x52,0x01,0x00,0x20,0x46,0x4C,0x47,0x5F,  /* 00002370    "R.. FLG_"
>> */ +    0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,0x00,  /* 00002378
>> "..._MAT." */ +    0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,0x14,  /*
>> 00002380    "..MAT_.." */ +
>> 0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,0x08,  /* 00002388    "._STA..."
>> */ +    0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,0xA1,  /* 00002390
>> "FLG_...." */ +    0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,0x45,  /*
>> 00002398    "......_E" */ +
>> 0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,0x5B,  /* 000023A0    "J0.["..["
>> */ +    0x83,0x47,0x07,0x43,0x42,0x5F,0x5F,0x0B,  /* 000023A8
>> ".G.CB__." */ +    0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,0x48,  /*
>> 000023B0    "......_H" */ +
>> 0x49,0x44,0x0D,0x41,0x43,0x50,0x49,0x30,  /* 000023B8    "ID.ACPI0"
>> */ +    0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,0x41,  /* 000023C0
>> "007.[.MA" */ +    0x54,0x52,0x00,0x72,0x4D,0x41,0x50,0x41,  /*
>> 000023C8    "TR.rMAPA" */ +
>> 0x0A,0x58,0x00,0x0A,0x08,0x5B,0x81,0x0C,  /* 000023D0    ".X...[.."
>> */ +    0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,0x54,  /* 000023D8
>> "MATR.MAT" */ +    0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,0x41,  /*
>> 000023E0    "_ at .[..MA" */ +
>> 0x54,0x52,0x01,0x00,0x20,0x46,0x4C,0x47,  /* 000023E8    "TR.. FLG"
>> */ +    0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,0x54,  /* 000023F0
>> "_..._MAT" */ +    0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,0x00,  /*
>> 000023F8    "...MAT_." */ +
>> 0x14,0x14,0x5F,0x53,0x54,0x41,0x00,0xA0,  /* 00002400    ".._STA.."
>> */ +    0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,0x0F,  /* 00002408
>> ".FLG_..." */ +    0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,0x5F,  /*
>> 00002410    "......._" */ +
>> 0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,0xC8,  /* 00002418    "EJ0.[".."
>> */ +    0x5B,0x83,0x47,0x07,0x43,0x43,0x5F,0x5F,  /* 00002420
>> "[.G.CC__" */ +    0x0C,0x10,0xB0,0x00,0x00,0x06,0x08,0x5F,  /*
>> 00002428    "......._" */ +
>> 0x48,0x49,0x44,0x0D,0x41,0x43,0x50,0x49,  /* 00002430    "HID.ACPI"
>> */ +    0x30,0x30,0x30,0x37,0x00,0x5B,0x80,0x4D,  /* 00002438
>> "0007.[.M" */ +    0x41,0x54,0x52,0x00,0x72,0x4D,0x41,0x50,  /*
>> 00002440    "ATR.rMAP" */ +
>> 0x41,0x0A,0x60,0x00,0x0A,0x08,0x5B,0x81,  /* 00002448    "A.`...[."
>> */ +    0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,0x41,  /* 00002450
>> ".MATR.MA" */ +    0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,0x4D,  /*
>> 00002458    "T_ at .[..M" */ +
>> 0x41,0x54,0x52,0x01,0x00,0x20,0x46,0x4C,  /* 00002460    "ATR.. FL"
>> */ +    0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,0x41,  /* 00002468
>> "G_..._MA" */ +    0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,0x5F,  /*
>> 00002470    "T...MAT_" */ +
>> 0x00,0x14,0x14,0x5F,0x53,0x54,0x41,0x00,  /* 00002478    "..._STA."
>> */ +    0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,0x0A,  /* 00002480
>> "..FLG_.." */ +    0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,0x0A,  /*
>> 00002488    "........" */ +
>> 0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,0x0A,  /* 00002490    "_EJ0.["."
>> */ +    0xC8,0x5B,0x83,0x47,0x07,0x43,0x44,0x5F,  /* 00002498
>> ".[.G.CD_" */ +    0x5F,0x0D,0x10,0xB0,0x00,0x00,0x06,0x08,  /*
>> 000024A0    "_......." */ +
>> 0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,0x50,  /* 000024A8    "_HID.ACP"
>> */ +    0x49,0x30,0x30,0x30,0x37,0x00,0x5B,0x80,  /* 000024B0
>> "I0007.[." */ +    0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,0x41,  /*
>> 000024B8    "MATR.rMA" */ +
>> 0x50,0x41,0x0A,0x68,0x00,0x0A,0x08,0x5B,  /* 000024C0    "PA.h...["
>> */ +    0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,0x4D,  /* 000024C8
>> "..MATR.M" */ +    0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,0x0D,  /*
>> 000024D0    "AT_ at .[.." */ +
>> 0x4D,0x41,0x54,0x52,0x01,0x00,0x20,0x46,  /* 000024D8    "MATR.. F"
>> */ +    0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,0x4D,  /* 000024E0
>> "LG_..._M" */ +    0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,0x54,  /*
>> 000024E8    "AT...MAT" */ +
>> 0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,0x41,  /* 000024F0    "_..._STA"
>> */ +    0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,0xA4,  /* 000024F8
>> "...FLG_." */ +    0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,0x14,  /*
>> 00002500    "........" */ +
>> 0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,0x22,  /* 00002508    "._EJ0.[""
>> */ +    0x0A,0xC8,0x5B,0x83,0x47,0x07,0x43,0x45,  /* 00002510
>> "..[.G.CE" */ +    0x5F,0x5F,0x0E,0x10,0xB0,0x00,0x00,0x06,  /*
>> 00002518    "__......" */ +
>> 0x08,0x5F,0x48,0x49,0x44,0x0D,0x41,0x43,  /* 00002520    "._HID.AC"
>> */ +    0x50,0x49,0x30,0x30,0x30,0x37,0x00,0x5B,  /* 00002528
>> "PI0007.[" */ +    0x80,0x4D,0x41,0x54,0x52,0x00,0x72,0x4D,  /*
>> 00002530    ".MATR.rM" */ +
>> 0x41,0x50,0x41,0x0A,0x70,0x00,0x0A,0x08,  /* 00002538    "APA.p..."
>> */ +    0x5B,0x81,0x0C,0x4D,0x41,0x54,0x52,0x01,  /* 00002540
>> "[..MATR." */ +    0x4D,0x41,0x54,0x5F,0x40,0x04,0x5B,0x81,  /*
>> 00002548    "MAT_ at .[." */ +
>> 0x0D,0x4D,0x41,0x54,0x52,0x01,0x00,0x20,  /* 00002550    ".MATR.. "
>> */ +    0x46,0x4C,0x47,0x5F,0x01,0x14,0x0D,0x5F,  /* 00002558
>> "FLG_..._" */ +    0x4D,0x41,0x54,0x00,0xA4,0x96,0x4D,0x41,  /*
>> 00002560    "MAT...MA" */ +
>> 0x54,0x5F,0x00,0x14,0x14,0x5F,0x53,0x54,  /* 00002568    "T_..._ST"
>> */ +    0x41,0x00,0xA0,0x08,0x46,0x4C,0x47,0x5F,  /* 00002570
>> "A...FLG_" */ +    0xA4,0x0A,0x0F,0xA1,0x04,0xA4,0x0A,0x09,  /*
>> 00002578    "........" */ +
>> 0x14,0x0A,0x5F,0x45,0x4A,0x30,0x01,0x5B,  /* 00002580    ".._EJ0.["
>> */ +    0x22,0x0A,0xC8,0x14,0x4C,0x46,0x4E,0x54,  /* 00002588
>> ""...LFNT" */ +    0x46,0x59,0x02,0xA0,0x49,0x04,0x93,0x68,  /*
>> 00002590    "FY..I..h" */ +
>> 0x00,0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,  /* 00002598    "..C...i^"
>> */ +    0x2E,0x43,0x30,0x5F,0x5F,0x46,0x4C,0x47,  /* 000025A0
>> ".C0__FLG" */ +    0x5F,0x70,0x69,0x5E,0x2E,0x43,0x30,0x5F,  /*
>> 000025A8    "_pi^.C0_" */ +
>> 0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,  /* 000025B0    "_FLG_..."
>> */ +    0x69,0x01,0x86,0x43,0x30,0x5F,0x5F,0x01,  /* 000025B8
>> "i..C0__." */ +    0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /*
>> 000025C0    "tMSU_.MS" */ +
>> 0x55,0x5F,0xA1,0x12,0x86,0x43,0x30,0x5F,  /* 000025C8    "U_...C0_"
>> */ +    0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,  /* 000025D0
>> "_..rMSU_" */ +    0x01,0x4D,0x53,0x55,0x5F,0xA0,0x49,0x04,  /*
>> 000025D8    ".MSU_.I." */ +
>> 0x93,0x68,0x01,0xA0,0x43,0x04,0x92,0x93,  /* 000025E0    ".h..C..."
>> */ +    0x69,0x5E,0x2E,0x43,0x31,0x5F,0x5F,0x46,  /* 000025E8
>> "i^.C1__F" */ +    0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,  /*
>> 000025F0    "LG_pi^.C" */ +
>> 0x31,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,  /* 000025F8    "1__FLG_."
>> */ +    0x14,0x93,0x69,0x01,0x86,0x43,0x31,0x5F,  /* 00002600
>> "..i..C1_" */ +    0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,  /*
>> 00002608    "_.tMSU_." */ +
>> 0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,  /* 00002610    "MSU_...C"
>> */ +    0x31,0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,  /* 00002618
>> "1__..rMS" */ +    0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,  /*
>> 00002620    "U_.MSU_." */ +
>> 0x4A,0x04,0x93,0x68,0x0A,0x02,0xA0,0x43,  /* 00002628    "J..h...C"
>> */ +    0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,0x32,  /* 00002630
>> "...i^.C2" */ +    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,0x69,  /*
>> 00002638    "__FLG_pi" */ +
>> 0x5E,0x2E,0x43,0x32,0x5F,0x5F,0x46,0x4C,  /* 00002640    "^.C2__FL"
>> */ +    0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,0x86,  /* 00002648
>> "G_...i.." */ +    0x43,0x32,0x5F,0x5F,0x01,0x74,0x4D,0x53,  /*
>> 00002650    "C2__.tMS" */ +
>> 0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA1,  /* 00002658    "U_.MSU_."
>> */ +    0x12,0x86,0x43,0x32,0x5F,0x5F,0x0A,0x03,  /* 00002660
>> "..C2__.." */ +    0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /*
>> 00002668    "rMSU_.MS" */ +
>> 0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,0x0A,  /* 00002670    "U_.J..h."
>> */ +    0x03,0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,  /* 00002678
>> "..C...i^" */ +    0x2E,0x43,0x33,0x5F,0x5F,0x46,0x4C,0x47,  /*
>> 00002680    ".C3__FLG" */ +
>> 0x5F,0x70,0x69,0x5E,0x2E,0x43,0x33,0x5F,  /* 00002688    "_pi^.C3_"
>> */ +    0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,  /* 00002690
>> "_FLG_..." */ +    0x69,0x01,0x86,0x43,0x33,0x5F,0x5F,0x01,  /*
>> 00002698    "i..C3__." */ +
>> 0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /* 000026A0    "tMSU_.MS"
>> */ +    0x55,0x5F,0xA1,0x12,0x86,0x43,0x33,0x5F,  /* 000026A8
>> "U_...C3_" */ +    0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,  /*
>> 000026B0    "_..rMSU_" */ +
>> 0x01,0x4D,0x53,0x55,0x5F,0xA0,0x4A,0x04,  /* 000026B8    ".MSU_.J."
>> */ +    0x93,0x68,0x0A,0x04,0xA0,0x43,0x04,0x92,  /* 000026C0
>> ".h...C.." */ +    0x93,0x69,0x5E,0x2E,0x43,0x34,0x5F,0x5F,  /*
>> 000026C8    ".i^.C4__" */ +
>> 0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,  /* 000026D0    "FLG_pi^."
>> */ +    0x43,0x34,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 000026D8
>> "C4__FLG_" */ +    0xA0,0x14,0x93,0x69,0x01,0x86,0x43,0x34,  /*
>> 000026E0    "...i..C4" */ +
>> 0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,  /* 000026E8    "__.tMSU_"
>> */ +    0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,  /* 000026F0
>> ".MSU_..." */ +    0x43,0x34,0x5F,0x5F,0x0A,0x03,0x72,0x4D,  /*
>> 000026F8    "C4__..rM" */ +
>> 0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002700    "SU_.MSU_"
>> */ +    0xA0,0x4A,0x04,0x93,0x68,0x0A,0x05,0xA0,  /* 00002708
>> ".J..h..." */ +    0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,  /*
>> 00002710    "C...i^.C" */ +
>> 0x35,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,  /* 00002718    "5__FLG_p"
>> */ +    0x69,0x5E,0x2E,0x43,0x35,0x5F,0x5F,0x46,  /* 00002720
>> "i^.C5__F" */ +    0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,  /*
>> 00002728    "LG_...i." */ +
>> 0x86,0x43,0x35,0x5F,0x5F,0x01,0x74,0x4D,  /* 00002730    ".C5__.tM"
>> */ +    0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002738
>> "SU_.MSU_" */ +    0xA1,0x12,0x86,0x43,0x35,0x5F,0x5F,0x0A,  /*
>> 00002740    "...C5__." */ +
>> 0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 00002748    ".rMSU_.M"
>> */ +    0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,  /* 00002750
>> "SU_.J..h" */ +    0x0A,0x06,0xA0,0x43,0x04,0x92,0x93,0x69,  /*
>>  00002758    "...C...i" */ +
>> 0x5E,0x2E,0x43,0x36,0x5F,0x5F,0x46,0x4C,  /* 00002760    "^.C6__FL"
>> */ +    0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,0x36,  /* 00002768
>> "G_pi^.C6" */ +    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,  /*
>> 00002770    "__FLG_.." */ +
>> 0x93,0x69,0x01,0x86,0x43,0x36,0x5F,0x5F,  /* 00002778    ".i..C6__"
>> */ +    0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 00002780
>> ".tMSU_.M" */ +    0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,0x36,  /*
>> 00002788    "SU_...C6" */ +
>> 0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,  /* 00002790    "__..rMSU"
>> */ +    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,0x4A,  /* 00002798
>> "_.MSU_.J" */ +    0x04,0x93,0x68,0x0A,0x07,0xA0,0x43,0x04,  /*
>> 000027A0    "..h...C." */ +
>> 0x92,0x93,0x69,0x5E,0x2E,0x43,0x37,0x5F,  /* 000027A8    "..i^.C7_"
>> */ +    0x5F,0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,  /* 000027B0
>> "_FLG_pi^" */ +    0x2E,0x43,0x37,0x5F,0x5F,0x46,0x4C,0x47,  /*
>> 000027B8    ".C7__FLG" */ +
>> 0x5F,0xA0,0x14,0x93,0x69,0x01,0x86,0x43,  /* 000027C0    "_...i..C"
>> */ +    0x37,0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,  /* 000027C8
>> "7__.tMSU" */ +    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,  /*
>> 000027D0    "_.MSU_.." */ +
>> 0x86,0x43,0x37,0x5F,0x5F,0x0A,0x03,0x72,  /* 000027D8    ".C7__..r"
>> */ +    0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,  /* 000027E0
>> "MSU_.MSU" */ +    0x5F,0xA0,0x4A,0x04,0x93,0x68,0x0A,0x08,  /*
>> 000027E8    "_.J..h.." */ +
>> 0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,  /* 000027F0    ".C...i^."
>> */ +    0x43,0x38,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 000027F8
>> "C8__FLG_" */ +    0x70,0x69,0x5E,0x2E,0x43,0x38,0x5F,0x5F,  /*
>> 00002800    "pi^.C8__" */ +
>> 0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,  /* 00002808    "FLG_...i"
>> */ +    0x01,0x86,0x43,0x38,0x5F,0x5F,0x01,0x74,  /* 00002810
>> "..C8__.t" */ +    0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,  /*
>> 00002818    "MSU_.MSU" */ +
>> 0x5F,0xA1,0x12,0x86,0x43,0x38,0x5F,0x5F,  /* 00002820    "_...C8__"
>> */ +    0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,  /* 00002828
>> "..rMSU_." */ +    0x4D,0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,  /*
>> 00002830    "MSU_.J.." */ +
>> 0x68,0x0A,0x09,0xA0,0x43,0x04,0x92,0x93,  /* 00002838    "h...C..."
>> */ +    0x69,0x5E,0x2E,0x43,0x39,0x5F,0x5F,0x46,  /* 00002840
>> "i^.C9__F" */ +    0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,  /*
>> 00002848    "LG_pi^.C" */ +
>> 0x39,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,  /* 00002850    "9__FLG_."
>> */ +    0x14,0x93,0x69,0x01,0x86,0x43,0x39,0x5F,  /* 00002858
>> "..i..C9_" */ +    0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,  /*
>> 00002860    "_.tMSU_." */ +
>> 0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,  /* 00002868    "MSU_...C"
>> */ +    0x39,0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,  /* 00002870
>> "9__..rMS" */ +    0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA0,  /*
>> 00002878    "U_.MSU_." */ +
>> 0x4A,0x04,0x93,0x68,0x0A,0x0A,0xA0,0x43,  /* 00002880    "J..h...C"
>> */ +    0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,0x41,  /* 00002888
>> "...i^.CA" */ +    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,0x69,  /*
>> 00002890    "__FLG_pi" */ +
>> 0x5E,0x2E,0x43,0x41,0x5F,0x5F,0x46,0x4C,  /* 00002898    "^.CA__FL"
>> */ +    0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,0x86,  /* 000028A0
>> "G_...i.." */ +    0x43,0x41,0x5F,0x5F,0x01,0x74,0x4D,0x53,  /*
>> 000028A8    "CA__.tMS" */ +
>> 0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA1,  /* 000028B0    "U_.MSU_."
>> */ +    0x12,0x86,0x43,0x41,0x5F,0x5F,0x0A,0x03,  /* 000028B8
>> "..CA__.." */ +    0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /*
>> 000028C0    "rMSU_.MS" */ +
>> 0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,0x0A,  /* 000028C8    "U_.J..h."
>> */ +    0x0B,0xA0,0x43,0x04,0x92,0x93,0x69,0x5E,  /* 000028D0
>> "..C...i^" */ +    0x2E,0x43,0x42,0x5F,0x5F,0x46,0x4C,0x47,  /*
>> 000028D8    ".CB__FLG" */ +
>> 0x5F,0x70,0x69,0x5E,0x2E,0x43,0x42,0x5F,  /* 000028E0    "_pi^.CB_"
>> */ +    0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,0x93,  /* 000028E8
>> "_FLG_..." */ +    0x69,0x01,0x86,0x43,0x42,0x5F,0x5F,0x01,  /*
>> 000028F0    "i..CB__." */ +
>> 0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,0x53,  /* 000028F8    "tMSU_.MS"
>> */ +    0x55,0x5F,0xA1,0x12,0x86,0x43,0x42,0x5F,  /* 00002900
>> "U_...CB_" */ +    0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,0x5F,  /*
>> 00002908    "_..rMSU_" */ +
>> 0x01,0x4D,0x53,0x55,0x5F,0xA0,0x4A,0x04,  /* 00002910    ".MSU_.J."
>> */ +    0x93,0x68,0x0A,0x0C,0xA0,0x43,0x04,0x92,  /* 00002918
>> ".h...C.." */ +    0x93,0x69,0x5E,0x2E,0x43,0x43,0x5F,0x5F,  /*
>> 00002920    ".i^.CC__" */ +
>> 0x46,0x4C,0x47,0x5F,0x70,0x69,0x5E,0x2E,  /* 00002928    "FLG_pi^."
>> */ +    0x43,0x43,0x5F,0x5F,0x46,0x4C,0x47,0x5F,  /* 00002930
>> "CC__FLG_" */ +    0xA0,0x14,0x93,0x69,0x01,0x86,0x43,0x43,  /*
>> 00002938    "...i..CC" */ +
>> 0x5F,0x5F,0x01,0x74,0x4D,0x53,0x55,0x5F,  /* 00002940    "__.tMSU_"
>> */ +    0x01,0x4D,0x53,0x55,0x5F,0xA1,0x12,0x86,  /* 00002948
>> ".MSU_..." */ +    0x43,0x43,0x5F,0x5F,0x0A,0x03,0x72,0x4D,  /*
>> 00002950    "CC__..rM" */ +
>> 0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002958    "SU_.MSU_"
>> */ +    0xA0,0x4A,0x04,0x93,0x68,0x0A,0x0D,0xA0,  /* 00002960
>> ".J..h..." */ +    0x43,0x04,0x92,0x93,0x69,0x5E,0x2E,0x43,  /*
>> 00002968    "C...i^.C" */ +
>> 0x44,0x5F,0x5F,0x46,0x4C,0x47,0x5F,0x70,  /* 00002970    "D__FLG_p"
>> */ +    0x69,0x5E,0x2E,0x43,0x44,0x5F,0x5F,0x46,  /* 00002978
>> "i^.CD__F" */ +    0x4C,0x47,0x5F,0xA0,0x14,0x93,0x69,0x01,  /*
>> 00002980    "LG_...i." */ +
>> 0x86,0x43,0x44,0x5F,0x5F,0x01,0x74,0x4D,  /* 00002988    ".CD__.tM"
>> */ +    0x53,0x55,0x5F,0x01,0x4D,0x53,0x55,0x5F,  /* 00002990
>> "SU_.MSU_" */ +    0xA1,0x12,0x86,0x43,0x44,0x5F,0x5F,0x0A,  /*
>> 00002998    "...CD__." */ +
>> 0x03,0x72,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 000029A0    ".rMSU_.M"
>> */ +    0x53,0x55,0x5F,0xA0,0x4A,0x04,0x93,0x68,  /* 000029A8
>> "SU_.J..h" */ +    0x0A,0x0E,0xA0,0x43,0x04,0x92,0x93,0x69,  /*
>> 000029B0    "...C...i" */ +
>> 0x5E,0x2E,0x43,0x45,0x5F,0x5F,0x46,0x4C,  /* 000029B8    "^.CE__FL"
>> */ +    0x47,0x5F,0x70,0x69,0x5E,0x2E,0x43,0x45,  /* 000029C0
>> "G_pi^.CE" */ +    0x5F,0x5F,0x46,0x4C,0x47,0x5F,0xA0,0x14,  /*
>> 000029C8    "__FLG_.." */ +
>> 0x93,0x69,0x01,0x86,0x43,0x45,0x5F,0x5F,  /* 000029D0    ".i..CE__"
>> */ +    0x01,0x74,0x4D,0x53,0x55,0x5F,0x01,0x4D,  /* 000029D8
>> ".tMSU_.M" */ +    0x53,0x55,0x5F,0xA1,0x12,0x86,0x43,0x45,  /*
>> 000029E0    "SU_...CE" */ +
>> 0x5F,0x5F,0x0A,0x03,0x72,0x4D,0x53,0x55,  /* 000029E8    "__..rMSU"
>> */ +    0x5F,0x01,0x4D,0x53,0x55,0x5F,0xA4,0x01,  /* 000029F0
>> "_.MSU_.." */ +    0x5B,0x80,0x50,0x52,0x53,0x54,0x01,0x0B,  /*
>> 000029F8    "[.PRST.." */ +
>> 0x00,0xAF,0x0A,0x20,0x5B,0x81,0x0C,0x50,  /* 00002A00    "... [..P"
>> */ +    0x52,0x53,0x54,0x01,0x50,0x52,0x53,0x5F,  /* 00002A08
>> "RST.PRS_" */ +    0x40,0x10,0x14,0x4A,0x06,0x50,0x52,0x53,  /*
>> 00002A10    "@..J.PRS" */ +
>> 0x43,0x00,0x70,0x50,0x52,0x53,0x5F,0x63,  /* 00002A18    "C.pPRS_c"
>> */ +    0x70,0x00,0x60,0xA2,0x2F,0x95,0x60,0x50,  /* 00002A20
>> "p.`./.`P" */ +    0x42,0x59,0x54,0x70,0x00,0x61,0x70,0x83,  /*
>> 00002A28    "BYTp.ap." */ +
>> 0x88,0x63,0x60,0x00,0x62,0xA2,0x1B,0x95,  /* 00002A30    ".c`.b..."
>> */ +    0x61,0x0A,0x08,0x4E,0x54,0x46,0x59,0x72,  /* 00002A38
>> "a..NTFYr" */ +    0x77,0x60,0x0A,0x08,0x00,0x61,0x00,0x7B,  /*
>> 00002A40    "w`...a.{" */ +
>> 0x62,0x01,0x00,0x7A,0x62,0x01,0x62,0x75,  /* 00002A48    "b..zb.bu"
>> */ +    0x61,0x75,0x60,0x70,0x00,0x61,0x70,0x83,  /* 00002A50
>> "au`p.ap." */ +    0x88,0x63,0x60,0x00,0x62,0xA2,0x1D,0x95,  /*
>> 00002A58    ".c`.b..." */ +
>> 0x61,0x50,0x42,0x49,0x54,0x4E,0x54,0x46,  /* 00002A60    "aPBITNTF"
>> */ +    0x59,0x72,0x77,0x60,0x0A,0x08,0x00,0x61,  /* 00002A68
>> "Yrw`...a" */ +    0x00,0x7B,0x62,0x01,0x00,0x7A,0x62,0x01,  /*
>> 00002A70    ".{b..zb." */ +    0x62,0x75,0x61,0xA4,0x01, };
>> diff --git a/src/acpi.c b/src/acpi.c
>> index f613b03..037da46 100644
>> --- a/src/acpi.c
>> +++ b/src/acpi.c
>> @@ -344,6 +344,9 @@ build_fadt(int bdf)
>>      return fadt;
>>  }
>>
>> +u32 madt_csum_addr, madt_lapic0_addr;
>> +u32 max_cpus_byte, max_cpus_bit;
>> +
>>  static void*
>>  build_madt(void)
>>  {
>> @@ -360,6 +363,10 @@ 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_csum_addr = (u32)&madt->checksum;
>> +    madt_lapic0_addr = (u32)apic;
>> +    max_cpus_byte = MaxCountCPUs / 8;
>> +    max_cpus_bit = MaxCountCPUs % 8;
>>      int i;
>>      for (i=0; i<MaxCountCPUs; i++) {
>>          apic->type = APIC_PROCESSOR;
>> diff --git a/src/biosvar.h b/src/biosvar.h
>> index b6e061b..57dd86b 100644
>> --- a/src/biosvar.h
>> +++ b/src/biosvar.h
>> @@ -11,6 +11,20 @@
>>  #include "config.h" // CONFIG_*
>>  #include "disk.h" // struct chs_s
>>
>> +/* *****************************************************************
>> + * use bios_info to enable dsdt get run-time madt and cpu info,
>> + * and to avoid more hardcode magic number.
>> +
>> *******************************************************************/
>> +#define BIOS_INFO_PHYSICAL_ADDRESS    0x000EA000 +struct bios_info {
>> +    u32 madt_csum_addr;    /* address of MADT checksum */
>> +    u32 madt_lapic0_addr;  /* address of first MADT LAPIC struct */
>> +    u32 max_cpus_byte;     /* max cpus bitmap bytes */
>> +    u32 max_cpus_bit;      /* max cpus bitmap bits of last byte */
>> +}; +
>> +extern u32 madt_csum_addr, madt_lapic0_addr;
>> +extern u32 max_cpus_byte, max_cpus_bit;
>>
>>  /****************************************************************
>> * Interupt vector table diff --git a/src/post.c b/src/post.c
>> index fb3b37f..8e30a57 100644
>> --- a/src/post.c
>> +++ b/src/post.c
>> @@ -161,6 +161,18 @@ init_bios_tables(void)
>>      acpi_bios_init();
>>  }
>>
>> +static void init_bios_info(void)
>> +{
>> +    struct bios_info *bios_info;
>> +
>> +    bios_info = (struct bios_info *)BIOS_INFO_PHYSICAL_ADDRESS;
>> +    memset(bios_info, 0, sizeof(*bios_info));
>> +    bios_info->madt_csum_addr = madt_csum_addr;
>> +    bios_info->madt_lapic0_addr = madt_lapic0_addr;
>> +    bios_info->max_cpus_byte = max_cpus_byte;
>> +    bios_info->max_cpus_bit = max_cpus_bit;
>> +}
>> +
>>  // Main setup code.
>>  static void
>>  post(void)
>> @@ -195,6 +207,7 @@ post(void)
>>      kbd_setup();
>>      mouse_setup();
>>      init_bios_tables();
>> +    init_bios_info();
>>
>>      // Run vga option rom (if running synchronously)
>>      if (!CONFIG_THREADS || !CONFIG_THREAD_OPTIONROMS) --
>> 1.6.5.6




More information about the SeaBIOS mailing list