VirtualBox

Changeset 26095 in vbox


Ignore:
Timestamp:
Jan 29, 2010 10:27:05 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
57068
Message:

ACPI: Move the processor definition out of the DSDT into a SSDT. Provide a special SSDT for CPU hot-plug

Location:
trunk/src/VBox/Devices/PC
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp

    r25838 r26095  
    4242/* Statically compiled AML */
    4343# include <vboxaml.hex>
     44# include <vboxssdt-standard.hex>
     45# include <vboxssdt-cpuhotplug.hex>
    4446#endif
    4547
     
    137139#endif
    138140
    139 /* Two only public functions */
    140 int acpiPrepareDsdt(PPDMDEVINS pDevIns,  void * *ppPtr, size_t *puDsdtLen)
    141 {
    142 #ifdef VBOX_WITH_DYNAMIC_DSDT
    143     return prepareDynamicDsdt(pDevIns, ppPtr, puDsdtLen);
    144 #else
     141/**
     142 * Loads an AML file if present in CFGM
     143 *
     144 * @returns VBox status code
     145 * @param   pDevIns        The device instance
     146 * @param   pcszCfgName    The configuration key holding the file path
     147 * @param   pcszSignature  The signature to check for
     148 * @param   ppbAmlCode     Where to store the pointer to the AML code on success.
     149 * @param   pcbAmlCode     Where to store the number of bytes of the AML code on success.
     150 */
     151static int acpiAmlLoadExternal(PPDMDEVINS pDevIns, const char *pcszCfgName, const char *pcszSignature, uint8_t **ppbAmlCode, size_t *pcbAmlCode)
     152{
    145153    uint8_t *pbAmlCode = NULL;
    146154    size_t cbAmlCode = 0;
    147155    char *pszAmlFilePath = NULL;
    148     int rc = CFGMR3QueryStringAlloc(pDevIns->pCfgHandle, "AmlFilePath", &pszAmlFilePath);
     156    int rc = CFGMR3QueryStringAlloc(pDevIns->pCfgHandle, pcszCfgName, &pszAmlFilePath);
     157
    149158    if (RT_SUCCESS(rc))
    150159    {
     
    178187                     */
    179188                    if (   RT_FAILURE(rc)
    180                         || strncmp((const char *)pbAmlCode, "DSDT", 4))
     189                        || strncmp((const char *)pbAmlCode, pcszSignature, 4))
    181190                    {
    182191                        RTMemFree(pbAmlCode);
     
    186195                        if (RT_SUCCESS(rc))
    187196                            rc = VERR_PARSE_ERROR;
     197                    }
     198                    else
     199                    {
     200                        *ppbAmlCode = pbAmlCode;
     201                        *pcbAmlCode = cbAmlCode;
     202                        rc = VINF_SUCCESS;
    188203                    }
    189204                }
     
    196211        MMR3HeapFree(pszAmlFilePath);
    197212    }
    198     else if (rc == VERR_CFGM_VALUE_NOT_FOUND)
     213
     214    return rc;
     215}
     216
     217/* Two only public functions */
     218int acpiPrepareDsdt(PPDMDEVINS pDevIns,  void * *ppPtr, size_t *puDsdtLen)
     219{
     220#ifdef VBOX_WITH_DYNAMIC_DSDT
     221    return prepareDynamicDsdt(pDevIns, ppPtr, puDsdtLen);
     222#else
     223    uint8_t *pbAmlCodeDsdt = NULL;
     224    size_t cbAmlCodeDsdt = 0;
     225    int rc = acpiAmlLoadExternal(pDevIns, "DsdtFilePath", "DSDT", &pbAmlCodeDsdt, &cbAmlCodeDsdt);
     226
     227    if (rc == VERR_CFGM_VALUE_NOT_FOUND)
    199228    {
    200229        rc = VINF_SUCCESS;
    201230
    202231        /* Use the compiled in AML code */
    203         cbAmlCode = sizeof(AmlCode);
    204         pbAmlCode = (uint8_t *)RTMemAllocZ(cbAmlCode);
    205         if (pbAmlCode)
    206             memcpy(pbAmlCode, AmlCode, cbAmlCode);
     232        cbAmlCodeDsdt = sizeof(AmlCode);
     233        pbAmlCodeDsdt = (uint8_t *)RTMemAllocZ(cbAmlCodeDsdt);
     234        if (pbAmlCodeDsdt)
     235            memcpy(pbAmlCodeDsdt, AmlCode, cbAmlCodeDsdt);
    207236        else
    208237            rc = VERR_NO_MEMORY;
     
    210239    else if (RT_FAILURE(rc))
    211240        return PDMDEV_SET_ERROR(pDevIns, rc,
    212                                 N_("Configuration error: Failed to read \"AmlFilePath\""));
     241                                N_("Configuration error: Failed to read \"DsdtFilePath\""));
    213242
    214243    if (RT_SUCCESS(rc))
    215244    {
    216         patchAml(pDevIns, pbAmlCode, cbAmlCode);
    217         *ppPtr = pbAmlCode;
    218         *puDsdtLen = cbAmlCode;
     245        patchAml(pDevIns, pbAmlCodeDsdt, cbAmlCodeDsdt);
     246        *ppPtr = pbAmlCodeDsdt;
     247        *puDsdtLen = cbAmlCodeDsdt;
    219248    }
    220249    return rc;
     
    233262}
    234263
     264int acpiPrepareSsdt(PPDMDEVINS pDevIns, void* *ppPtr, size_t *puSsdtLen)
     265{
     266    uint8_t *pbAmlCodeSsdt = NULL;
     267    size_t   cbAmlCodeSsdt = 0;
     268    int rc = acpiAmlLoadExternal(pDevIns, "SsdtFilePath", "SSDT", &pbAmlCodeSsdt, &cbAmlCodeSsdt);
     269
     270    if (rc == VERR_CFGM_VALUE_NOT_FOUND)
     271    {
     272        bool fCpuHotPlug = false;
     273        uint8_t *pbAmlCode = NULL;
     274        rc = CFGMR3QueryBoolDef(pDevIns->pCfgHandle, "CpuHotPlug", &fCpuHotPlug, false);
     275
     276        if (RT_FAILURE(rc))
     277            return rc;
     278
     279        if (fCpuHotPlug)
     280        {
     281            pbAmlCode     = AmlCodeSsdtCpuHotPlug;
     282            cbAmlCodeSsdt = sizeof(AmlCodeSsdtCpuHotPlug);
     283        }
     284        else
     285        {
     286            pbAmlCode     = AmlCodeSsdtStandard;
     287            cbAmlCodeSsdt = sizeof(AmlCodeSsdtStandard);
     288        }
     289
     290        pbAmlCodeSsdt = (uint8_t *)RTMemAllocZ(cbAmlCodeSsdt);
     291        if (pbAmlCodeSsdt)
     292            memcpy(pbAmlCodeSsdt, pbAmlCode, cbAmlCodeSsdt);
     293        else
     294            rc = VERR_NO_MEMORY;
     295    }
     296    else if (RT_FAILURE(rc))
     297        return PDMDEV_SET_ERROR(pDevIns, rc,
     298                                N_("Configuration error: Failed to read \"SsdtFilePath\""));
     299
     300    if (RT_SUCCESS(rc))
     301    {
     302        patchAml(pDevIns, pbAmlCodeSsdt, cbAmlCodeSsdt);
     303        *ppPtr = pbAmlCodeSsdt;
     304        *puSsdtLen = cbAmlCodeSsdt;
     305    }
     306
     307    return VINF_SUCCESS;
     308}
     309
     310int acpiCleanupSsdt(PPDMDEVINS pDevIns, void* pPtr)
     311{
     312    if (pPtr)
     313        RTMemFree(pPtr);
     314    return VINF_SUCCESS;
     315}
     316
  • trunk/src/VBox/Devices/PC/DevACPI.cpp

    r26078 r26095  
    4545int acpiPrepareDsdt(PPDMDEVINS pDevIns, void* *ppPtr, size_t *puDsdtLen);
    4646int acpiCleanupDsdt(PPDMDEVINS pDevIns, void* pPtr);
     47
     48int acpiPrepareSsdt(PPDMDEVINS pDevIns, void* *ppPtr, size_t *puSsdtLen);
     49int acpiCleanupSsdt(PPDMDEVINS pDevIns, void* pPtr);
    4750#endif /* !IN_RING3 */
    4851
     
    682685}
    683686
     687/** Secondary System Description Table (SSDT) */
     688
     689static void acpiSetupSSDT(ACPIState *s, RTGCPHYS32 addr,
     690                            void* pPtr, size_t uSsdtLen)
     691{
     692    acpiPhyscpy(s, addr, pPtr, uSsdtLen);
     693}
     694
    684695/** Firmware ACPI Control Structure (FACS) */
    685696static void acpiSetupFACS(ACPIState *s, RTGCPHYS32 addr)
     
    19401951    int        rc;
    19411952    RTGCPHYS32 GCPhysCur, GCPhysRsdt, GCPhysXsdt, GCPhysFadtAcpi1, GCPhysFadtAcpi2, GCPhysFacs, GCPhysDsdt;
    1942     RTGCPHYS32 GCPhysHpet = 0, GCPhysApic = 0;
     1953    RTGCPHYS32 GCPhysHpet = 0, GCPhysApic = 0, GCPhysSsdt = 0;
    19431954    uint32_t   addend = 0;
    19441955    RTGCPHYS32 aGCPhysRsdt[4];
    19451956    RTGCPHYS32 aGCPhysXsdt[4];
    1946     uint32_t   cAddr, iMadt = 0, iHpet = 0;
     1957    uint32_t   cAddr, iMadt = 0, iHpet = 0, iSsdt = 0;
    19471958    size_t     cbRsdt = sizeof(ACPITBLHEADER);
    19481959    size_t     cbXsdt = sizeof(ACPITBLHEADER);
     
    19541965    if (s->fUseHpet)
    19551966        iHpet = cAddr++;        /* HPET */
     1967
     1968    iSsdt = cAddr++;            /* SSDT */
    19561969
    19571970    cbRsdt += cAddr*sizeof(uint32_t);  /* each entry: 32 bits phys. address. */
     
    20092022        GCPhysCur = RT_ALIGN_32(GCPhysCur + sizeof(ACPITBLHPET), 16);
    20102023    }
     2024
     2025    void*  pSsdtCode = NULL;
     2026    size_t cbSsdtSize = 0;
     2027    rc = acpiPrepareSsdt(s->pDevIns, &pSsdtCode, &cbSsdtSize);
     2028    if (RT_FAILURE(rc))
     2029        return rc;
     2030
     2031    GCPhysSsdt = GCPhysCur;
     2032    GCPhysCur = RT_ALIGN_32(GCPhysCur + cbSsdtSize, 16);
     2033
    20112034    GCPhysDsdt = GCPhysCur;
    20122035
     
    20182041
    20192042    GCPhysCur = RT_ALIGN_32(GCPhysCur + cbDsdtSize, 16);
     2043
    20202044    if (GCPhysCur > 0x10000)
    20212045        return PDMDEV_SET_ERROR(s->pDevIns, VERR_TOO_MUCH_DATA,
     
    20312055    if (s->fUseHpet)
    20322056        Log((" HPET 0x%08X", GCPhysHpet + addend));
     2057    Log((" SSDT 0x%08X", GCPhysSsdt + addend));
    20332058    Log(("\n"));
    20342059
     
    20532078        aGCPhysXsdt[iHpet] = GCPhysHpet + addend;
    20542079    }
     2080    acpiSetupSSDT(s, GCPhysSsdt + addend, pSsdtCode, cbSsdtSize);
     2081    acpiCleanupSsdt(s->pDevIns, pSsdtCode);
     2082    aGCPhysRsdt[iSsdt] = GCPhysSsdt + addend;
     2083    aGCPhysXsdt[iSsdt] = GCPhysSsdt + addend;
    20552084
    20562085    rc = acpiSetupRSDT(s, GCPhysRsdt + addend, cAddr, aGCPhysRsdt);
  • trunk/src/VBox/Devices/PC/vbox-cpuhotplug.dsl

    r26078 r26095  
    1818// additional information or have any questions.
    1919
    20 DefinitionBlock ("DSDT.aml", "DSDT", 1, "VBOX  ", "VBOXBIOS", 2)
     20DefinitionBlock ("SSDT-cpuhotplug.aml", "SSDT", 1, "VBOX  ", "VBOXCPUT", 2)
    2121{
    22     // Declare debugging ports withing SystemIO
    23     OperationRegion(DBG0, SystemIO, 0x3000, 4)
    24 
    25     // Writes to this field Will dump hex char
    26     Field (DBG0, ByteAcc, NoLock, Preserve)
    27     {
    28         DHE1, 8,
    29     }
    30 
    31     // Writes to this field Will dump hex word
    32     Field (DBG0, WordAcc, NoLock, Preserve)
    33     {
    34         DHE2, 16,
    35     }
    36 
    37     // Writes to this field Will dump hex double word
    38     Field (DBG0, DWordAcc, NoLock, Preserve)
    39     {
    40         DHE4, 32,
    41     }
    42 
    43     // Writes to this field will dump ascii char
    44     Field (DBG0, ByteAcc, NoLock, Preserve)
    45     {
    46         Offset (1),
    47         DCHR, 8
    48     }
    49 
    50     // Shortcuts
    51     Method(HEX, 1)
    52     {
    53         Store (Arg0, DHE1)
    54     }
    55 
    56     Method(HEX2, 1)
    57     {
    58         Store (Arg0, DHE2)
    59     }
    60 
    61     Method(HEX4, 1)
    62     {
    63         Store (Arg0, DHE4)
    64     }
    65 
    66     // Code from Microsoft sample
    67     // http://www.microsoft.com/whdc/system/pnppwr/powermgmt/_OSI-method.mspx
    68 
    69     //
    70     // SLEN(Str) - Returns the length of Str (excluding NULL).
    71     //
    72     Method(SLEN, 1)
    73     {
    74         //
    75         // Note: The caller must make sure that the argument is a string object.
    76         //
    77         Store(Arg0, Local0)
    78         Return(Sizeof(Local0))
    79     }
    80 
    81     Method(S2BF, 1)
    82     {
    83         //
    84         // Note: The caller must make sure that the argument is a string object.
    85         //
    86         // Local0 contains length of string + NULL.
    87         //
    88         Store(Arg0, Local0)
    89         Add(SLEN(Local0), One, Local0)
    90         //
    91         // Convert the string object into a buffer object.
    92         //
    93         Name(BUFF, Buffer(Local0) {})
    94         Store(Arg0, BUFF)
    95         Return(BUFF)
    96     }
    97 
    98     // Convert ASCII string to buffer and store it's contents (char by
    99     // char) into DCHR (thus possibly writing the string to console)
    100     Method (\DBG, 1, NotSerialized)
    101     {
    102         Store(Arg0, Local0)
    103         Store(S2BF (Local0), Local1)
    104         Store(SizeOf (Local1), Local0)
    105         Decrement (Local0)
    106         Store(Zero, Local2)
    107         While (Local0)
    108         {
    109             Decrement (Local0)
    110             Store (DerefOf (Index (Local1, Local2)), DCHR)
    111             Increment (Local2)
    112         }
    113     }
    114 
    115     Name(PICM, 0)
    116     Method(_PIC, 1)
    117     {
    118         DBG ("Pic mode: ")
    119         HEX4 (Arg0)
    120         Store (Arg0, PICM)
    121     }
     22    External(\_SB.CPUC)
     23    External(\_SB.CPUL)
    12224
    12325    // Method to check for the CPU status
     
    12830    }
    12931
    130     // Processor object
    131     // #1463: Showing the CPU can make the guest do bad things on it like SpeedStep.
    132     // In this case, XP SP2 contains this buggy Intelppm.sys driver which wants to mess
    133     // with SpeedStep if it finds a CPU object and when it finds out that it can't, it
    134     // tries to unload and crashes (MS probably never tested this code path).
    135     // So we enable this ACPI object only for certain guests, which do need it,
    136     // if by accident Windows guest seen enabled CPU object, just boot from latest
    137     // known good configuration, as it remembers state, even if ACPI object gets disabled.
    138     Scope (\_PR)
     32    Scope (\_SB)
    13933    {
    140         Processor (CPU0, /* Name */
    141                     0x00, /* Id */
    142                     0x0,  /* Processor IO ports range start */
    143                     0x0   /* Processor IO ports range length */
    144                     )
    145         {
    146         }
    147 
    148          // A ACPI node which contains all hot-plugable CPUs
    149          // Needed on Linux or the new CPU device can't be registered
    150          // after it was inserted.
    151          // Windows guests will perform better if this device is present.
    152          // The guest the guest seems to be kind of stuck for about 30sec
    153          // (the mouse jumps if it is moved for example) without it.
    154         Device(HPL)
    155         {
    156             Name (_HID, "ACPI0004") // Generic container, prevents that Windows guests ask for a driver
     34        Device (SCK0)
     35        {
     36            Name (_HID, "ACPI0004")
     37            Name (_UID, "SCKCPU0")
     38
     39            Method (_STA, 0, NotSerialized)
     40            {
     41                IF (CPCK(0x00))
     42                {
     43                    Return (0xF)
     44                }
     45                Else
     46                {
     47                    Return (0x0)
     48                }
     49            }
     50
     51            Processor (CPU0, /* Name */
     52                       0x00, /* Id */
     53                       0x0,  /* Processor IO ports range start */
     54                       0x0   /* Processor IO ports range length */
     55                       )
     56            {
     57                Name (_HID, "ACPI0007")
     58                Name (_UID, "SCK0-CPU0")
     59                Name (_PXM, 0x00)
     60
     61                Method(_MAT, 0)
     62                {
     63                    IF (CPCK(0x00))
     64                    {
     65                        Name (APIC, Buffer (8) {0x00, 0x08, 0x00, 0x00, 0x01})
     66                        Return(APIC)
     67                    }
     68                    Else
     69                    {
     70                        Return (0x00)
     71                    }
     72                }
     73                Method(_STA) // Used for device presence detection
     74                {
     75                    IF (CPCK(0x00))
     76                    {
     77                        Return (0xF)
     78                    }
     79                    Else
     80                    {
     81                        Return (0x0)
     82                    }
     83                }
     84                Method(_EJ0, 1)
     85                {
     86                    Store(0x0, \_SB.CPUL) // Unlock the CPU
     87                    Return
     88                }
     89            }
     90        }
     91
     92        Device (SCK1)
     93        {
     94            Name (_HID, "ACPI0004")
     95            Name (_UID, "SCKCPU1")
     96
     97            Method (_STA, 0, NotSerialized)
     98            {
     99                Return (0xF)
     100            }
    157101
    158102            Processor (CPU1, /* Name */
     
    162106                       )
    163107            {
    164                 Method(_MAT, 0) {
     108                Name (_HID, "ACPI0007")
     109                Name (_UID, "SCK1-CPU0")
     110                Name (_PXM, 0x00)
     111
     112                Method(_MAT, 0)
     113                {
    165114                    IF (CPCK(0x01))
    166115                    {
     
    173122                    }
    174123                }
     124
    175125                Method(_STA) // Used for device presence detection
    176126                {
     
    184134                    }
    185135                }
     136
    186137                Method(_EJ0, 1)
    187138                {
     
    190141                }
    191142            }
     143        }
     144
     145        Device (SCK2)
     146        {
     147            Name (_HID, "ACPI0004")
     148            Name (_UID, "SCKCPU2")
     149
     150            Method (_STA, 0, NotSerialized)
     151            {
     152                IF (CPCK(0x02))
     153                {
     154                    Return (0xF)
     155                }
     156                Else
     157                {
     158                    Return (0x0)
     159                }
     160            }
     161
    192162            Processor (CPU2, /* Name */
    193163                       0x02, /* Id */
     
    196166                       )
    197167            {
    198                 Method(_MAT, 0) {
     168                Name (_HID, "ACPI0007")
     169                Name (_UID, "SCK2-CPU0")
     170                Name (_PXM, 0x00)
     171
     172                Method(_MAT, 0)
     173                {
    199174                    IF (CPCK(0x02))
    200175                    {
     
    207182                    }
    208183                }
     184
    209185                Method(_STA) // Used for device presence detection
    210186                {
     
    218194                    }
    219195                }
     196
    220197                Method(_EJ0, 1)
    221198                {
     
    224201                }
    225202            }
     203        }
     204
     205        Device (SCK3)
     206        {
     207            Name (_HID, "ACPI0004")
     208            Name (_UID, "SCKCPU3")
     209
     210            Method (_STA, 0, NotSerialized)
     211            {
     212                IF (CPCK(0x03))
     213                {
     214                    Return (0xF)
     215                }
     216                Else
     217                {
     218                    Return (0x0)
     219                }
     220            }
     221
    226222            Processor (CPU3, /* Name */
    227223                       0x03, /* Id */
     
    230226                       )
    231227            {
    232                 Method(_MAT, 0) {
     228                Name (_HID, "ACPI0007")
     229                Name (_UID, "SCK3-CPU0")
     230                Name (_PXM, 0x00)
     231
     232                Method(_MAT, 0)
     233                {
    233234                    IF (CPCK(0x03))
    234235                    {
     
    241242                    }
    242243                }
     244
    243245                Method(_STA) // Used for device presence detection
    244246                {
     
    252254                    }
    253255                }
     256
    254257                Method(_EJ0, 1)
    255258                {
     
    258261                }
    259262            }
     263        }
     264
     265        Device (SCK4)
     266        {
     267            Name (_HID, "ACPI0004")
     268            Name (_UID, "SCKCPU4")
     269
     270            Method (_STA, 0, NotSerialized)
     271            {
     272                IF (CPCK(0x04))
     273                {
     274                    Return (0xF)
     275                }
     276                Else
     277                {
     278                    Return (0x0)
     279                }
     280            }
     281
    260282            Processor (CPU4, /* Name */
    261283                       0x04, /* Id */
     
    264286                       )
    265287            {
    266                 Method(_MAT, 0) {
     288                Name (_HID, "ACPI0007")
     289                Name (_UID, "SCK4-CPU0")
     290                Name (_PXM, 0x00)
     291
     292                Method(_MAT, 0)
     293                {
    267294                    IF (CPCK(0x04))
    268295                    {
     
    275302                    }
    276303                }
     304
    277305                Method(_STA) // Used for device presence detection
    278306                {
     
    286314                    }
    287315                }
     316
    288317                Method(_EJ0, 1)
    289318                {
     
    292321                }
    293322            }
     323        }
     324
     325        Device (SCK5)
     326        {
     327            Name (_HID, "ACPI0004")
     328            Name (_UID, "SCKCPU5")
     329
     330            Method (_STA, 0, NotSerialized)
     331            {
     332                IF (CPCK(0x05))
     333                {
     334                    Return (0xF)
     335                }
     336                Else
     337                {
     338                    Return (0x0)
     339                }
     340            }
     341
    294342            Processor (CPU5, /* Name */
    295343                       0x05, /* Id */
     
    298346                       )
    299347            {
    300                 Method(_MAT, 0) {
     348                Name (_HID, "ACPI0007")
     349                Name (_UID, "SCK5-CPU0")
     350                Name (_PXM, 0x00)
     351
     352                Method(_MAT, 0)
     353                {
    301354                    IF (CPCK(0x05))
    302355                    {
     
    309362                    }
    310363                }
     364
    311365                Method(_STA) // Used for device presence detection
    312366                {
     
    320374                    }
    321375                }
     376
    322377                Method(_EJ0, 1)
    323378                {
     
    326381                }
    327382            }
     383        }
     384
     385        Device (SCK6)
     386        {
     387            Name (_HID, "ACPI0004")
     388            Name (_UID, "SCKCPU6")
     389
     390            Method (_STA, 0, NotSerialized)
     391            {
     392                IF (CPCK(0x06))
     393                {
     394                    Return (0xF)
     395                }
     396                Else
     397                {
     398                    Return (0x0)
     399                }
     400            }
     401
    328402            Processor (CPU6, /* Name */
    329403                       0x06, /* Id */
     
    332406                       )
    333407            {
    334                 Method(_MAT, 0) {
     408                Name (_HID, "ACPI0007")
     409                Name (_UID, "SCK6-CPU0")
     410                Name (_PXM, 0x00)
     411
     412                Method(_MAT, 0)
     413                {
     414                    IF (CPCK(0x6))
     415                    {
     416                        Name (APIC, Buffer (8) {0x00, 0x08, 0x06, 0x06, 0x01})
     417                        Return(APIC)
     418                    }
     419                    Else
     420                    {
     421                        Return (0x00)
     422                    }
     423                }
     424
     425                Method(_STA) // Used for device presence detection
     426                {
    335427                    IF (CPCK(0x06))
    336428                    {
    337                         Name (APIC, Buffer (8) {0x00, 0x08, 0x06, 0x06, 0x01})
    338                         Return(APIC)
    339                     }
    340                     Else
    341                     {
    342                         Return (0x00)
    343                     }
    344                 }
    345                 Method(_STA) // Used for device presence detection
    346                 {
    347                     IF (CPCK(0x06))
    348                     {
    349                         Return (0xF)
    350                     }
    351                     Else
    352                     {
    353                         Return (0x0)
    354                     }
    355                 }
     429                        Return (0xF)
     430                    }
     431                    Else
     432                    {
     433                        Return (0x0)
     434                    }
     435                }
     436
    356437                Method(_EJ0, 1)
    357438                {
     
    360441                }
    361442            }
     443        }
     444
     445        Device (SCK7)
     446        {
     447            Name (_HID, "ACPI0004")
     448            Name (_UID, "SCKCPU7")
     449
     450            Method (_STA, 0, NotSerialized)
     451            {
     452                IF (CPCK(0x07))
     453                {
     454                    Return (0xF)
     455                }
     456                Else
     457                {
     458                    Return (0x0)
     459                }
     460            }
     461
    362462            Processor (CPU7, /* Name */
    363463                       0x07, /* Id */
     
    366466                       )
    367467            {
    368                 Method(_MAT, 0) {
     468                Name (_HID, "ACPI0007")
     469                Name (_UID, "SCK7-CPU0")
     470                Name (_PXM, 0x00)
     471
     472                Method(_MAT, 0)
     473                {
    369474                    IF (CPCK(0x07))
    370475                    {
     
    377482                    }
    378483                }
     484
    379485                Method(_STA) // Used for device presence detection
    380486                {
     
    388494                    }
    389495                }
     496
    390497                Method(_EJ0, 1)
    391498                {
     
    394501                }
    395502            }
     503        }
     504
     505        Device (SCK8)
     506        {
     507            Name (_HID, "ACPI0004")
     508            Name (_UID, "SCKCPU8")
     509
     510            Method (_STA, 0, NotSerialized)
     511            {
     512                IF (CPCK(0x08))
     513                {
     514                    Return (0xF)
     515                }
     516                Else
     517                {
     518                    Return (0x0)
     519                }
     520            }
     521
    396522            Processor (CPU8, /* Name */
    397523                       0x08, /* Id */
     
    400526                       )
    401527            {
    402                 Method(_MAT, 0) {
     528                Name (_HID, "ACPI0007")
     529                Name (_UID, "SCK4-CPU0")
     530                Name (_PXM, 0x00)
     531
     532                Method(_MAT, 0)
     533                {
    403534                    IF (CPCK(0x08))
    404535                    {
     
    411542                    }
    412543                }
     544
    413545                Method(_STA) // Used for device presence detection
    414546                {
     
    422554                    }
    423555                }
     556
    424557                Method(_EJ0, 1)
    425558                {
     
    428561                }
    429562            }
     563        }
     564
     565        Device (SCK9)
     566        {
     567            Name (_HID, "ACPI0004")
     568            Name (_UID, "SCKCPU9")
     569
     570            Method (_STA, 0, NotSerialized)
     571            {
     572                IF (CPCK(0x09))
     573                {
     574                    Return (0xF)
     575                }
     576                Else
     577                {
     578                    Return (0x0)
     579                }
     580            }
     581
    430582            Processor (CPU9, /* Name */
    431583                       0x09, /* Id */
     
    434586                       )
    435587            {
    436                 Method(_MAT, 0) {
     588                Name (_HID, "ACPI0007")
     589                Name (_UID, "SCK9-CPU0")
     590                Name (_PXM, 0x00)
     591
     592                Method(_MAT, 0)
     593                {
    437594                    IF (CPCK(0x09))
    438595                    {
     
    445602                    }
    446603                }
     604
    447605                Method(_STA) // Used for device presence detection
    448606                {
     
    456614                    }
    457615                }
     616
    458617                Method(_EJ0, 1)
    459618                {
     
    462621                }
    463622            }
     623        }
     624
     625        Device (SCKA)
     626        {
     627            Name (_HID, "ACPI0004")
     628            Name (_UID, "SCKCPUA")
     629
     630            Method (_STA, 0, NotSerialized)
     631            {
     632                IF (CPCK(0x0a))
     633                {
     634                    Return (0xF)
     635                }
     636                Else
     637                {
     638                    Return (0x0)
     639                }
     640            }
     641
    464642            Processor (CPUA, /* Name */
    465643                       0x0a, /* Id */
     
    468646                       )
    469647            {
    470                 Method(_MAT, 0) {
     648                Name (_HID, "ACPI0007")
     649                Name (_UID, "SCKA-CPU0")
     650                Name (_PXM, 0x00)
     651
     652                Method(_MAT, 0)
     653                {
    471654                    IF (CPCK(0x0a))
    472655                    {
     
    479662                    }
    480663                }
     664
    481665                Method(_STA) // Used for device presence detection
    482666                {
     
    490674                    }
    491675                }
    492                 Method(_EJ0, 1)
    493                 {
    494                     Store(0xa, \_SB.CPUL) // Unlock the CPU
    495                     Return
    496                 }
    497             }
     676
     677                Method(_EJ0, 1)
     678                {
     679                    Store(0x0a, \_SB.CPUL) // Unlock the CPU
     680                    Return
     681                }
     682            }
     683        }
     684
     685        Device (SCKB)
     686        {
     687            Name (_HID, "ACPI0004")
     688            Name (_UID, "SCKCPUB")
     689
     690            Method (_STA, 0, NotSerialized)
     691            {
     692                IF (CPCK(0x0b))
     693                {
     694                    Return (0xF)
     695                }
     696                Else
     697                {
     698                    Return (0x0)
     699                }
     700            }
     701
    498702            Processor (CPUB, /* Name */
    499703                       0x0b, /* Id */
     
    502706                       )
    503707            {
    504                 Method(_MAT, 0) {
     708                Name (_HID, "ACPI0007")
     709                Name (_UID, "SCKB-CPU0")
     710                Name (_PXM, 0x00)
     711
     712                Method(_MAT, 0)
     713                {
    505714                    IF (CPCK(0x0b))
    506715                    {
     
    513722                    }
    514723                }
     724
    515725                Method(_STA) // Used for device presence detection
    516726                {
     
    524734                    }
    525735                }
    526                 Method(_EJ0, 1)
    527                 {
    528                     Store(0xb, \_SB.CPUL) // Unlock the CPU
    529                     Return
    530                 }
    531             }
     736
     737                Method(_EJ0, 1)
     738                {
     739                    Store(0x0b, \_SB.CPUL) // Unlock the CPU
     740                    Return
     741                }
     742            }
     743        }
     744
     745        Device (SCKC)
     746        {
     747            Name (_HID, "ACPI0004")
     748            Name (_UID, "SCKCPUC")
     749
     750            Method (_STA, 0, NotSerialized)
     751            {
     752                IF (CPCK(0x0c))
     753                {
     754                    Return (0xF)
     755                }
     756                Else
     757                {
     758                    Return (0x0)
     759                }
     760            }
     761
    532762            Processor (CPUC, /* Name */
    533763                       0x0c, /* Id */
     
    536766                       )
    537767            {
    538                 Method(_MAT, 0) {
     768                Name (_HID, "ACPI0007")
     769                Name (_UID, "SCKC-CPU0")
     770                Name (_PXM, 0x00)
     771
     772                Method(_MAT, 0)
     773                {
    539774                    IF (CPCK(0x0c))
    540775                    {
     
    547782                    }
    548783                }
     784
    549785                Method(_STA) // Used for device presence detection
    550786                {
     
    558794                    }
    559795                }
    560                 Method(_EJ0, 1)
    561                 {
    562                     Store(0xc, \_SB.CPUL) // Unlock the CPU
    563                     Return
    564                 }
    565             }
     796
     797                Method(_EJ0, 1)
     798                {
     799                    Store(0x0c, \_SB.CPUL) // Unlock the CPU
     800                    Return
     801                }
     802            }
     803        }
     804
     805        Device (SCKD)
     806        {
     807            Name (_HID, "ACPI0004")
     808            Name (_UID, "SCKCPUD")
     809
     810            Method (_STA, 0, NotSerialized)
     811            {
     812                IF (CPCK(0x0d))
     813                {
     814                    Return (0xF)
     815                }
     816                Else
     817                {
     818                    Return (0x0)
     819                }
     820            }
     821
    566822            Processor (CPUD, /* Name */
    567823                       0x0d, /* Id */
     
    570826                       )
    571827            {
    572                 Method(_MAT, 0) {
     828                Name (_HID, "ACPI0007")
     829                Name (_UID, "SCKD-CPU0")
     830                Name (_PXM, 0x00)
     831
     832                Method(_MAT, 0)
     833                {
    573834                    IF (CPCK(0x0d))
    574835                    {
     
    581842                    }
    582843                }
     844
    583845                Method(_STA) // Used for device presence detection
    584846                {
     
    592854                    }
    593855                }
    594                 Method(_EJ0, 1)
    595                 {
    596                     Store(0xd, \_SB.CPUL) // Unlock the CPU
    597                     Return
    598                 }
    599             }
     856
     857                Method(_EJ0, 1)
     858                {
     859                    Store(0x0d, \_SB.CPUL) // Unlock the CPU
     860                    Return
     861                }
     862            }
     863        }
     864
     865        Device (SCKE)
     866        {
     867            Name (_HID, "ACPI0004")
     868            Name (_UID, "SCKCPUE")
     869
     870            Method (_STA, 0, NotSerialized)
     871            {
     872                IF (CPCK(0x0e))
     873                {
     874                    Return (0xF)
     875                }
     876                Else
     877                {
     878                    Return (0x0)
     879                }
     880            }
     881
    600882            Processor (CPUE, /* Name */
    601883                       0x0e, /* Id */
     
    604886                       )
    605887            {
    606                 Method(_MAT, 0) {
     888                Name (_HID, "ACPI0007")
     889                Name (_UID, "SCKE-CPU0")
     890                Name (_PXM, 0x00)
     891
     892                Method(_MAT, 0)
     893                {
    607894                    IF (CPCK(0x0e))
    608895                    {
     
    615902                    }
    616903                }
     904
    617905                Method(_STA) // Used for device presence detection
    618906                {
     
    626914                    }
    627915                }
    628                 Method(_EJ0, 1)
    629                 {
    630                     Store(0xe, \_SB.CPUL) // Unlock the CPU
    631                     Return
    632                 }
    633             }
     916
     917                Method(_EJ0, 1)
     918                {
     919                    Store(0x0e, \_SB.CPUL) // Unlock the CPU
     920                    Return
     921                }
     922            }
     923        }
     924
     925        Device (SCKF)
     926        {
     927            Name (_HID, "ACPI0004")
     928            Name (_UID, "SCKCPUF")
     929
     930            Method (_STA, 0, NotSerialized)
     931            {
     932                IF (CPCK(0x0f))
     933                {
     934                    Return (0xF)
     935                }
     936                Else
     937                {
     938                    Return (0x0)
     939                }
     940            }
     941
    634942            Processor (CPUF, /* Name */
    635943                       0x0f, /* Id */
     
    638946                       )
    639947            {
    640                 Method(_MAT, 0) {
     948                Name (_HID, "ACPI0007")
     949                Name (_UID, "SCKF-CPU0")
     950                Name (_PXM, 0x00)
     951
     952                Method(_MAT, 0)
     953                {
    641954                    IF (CPCK(0x0f))
    642955                    {
     
    649962                    }
    650963                }
     964
    651965                Method(_STA) // Used for device presence detection
    652966                {
     
    660974                    }
    661975                }
     976
    662977                Method(_EJ0, 1)
    663978                {
     
    666981                }
    667982            }
     983        }
     984
     985        Device (SCKG)
     986        {
     987            Name (_HID, "ACPI0004")
     988            Name (_UID, "SCKCPUG")
     989
     990            Method (_STA, 0, NotSerialized)
     991            {
     992                IF (CPCK(0x10))
     993                {
     994                    Return (0xF)
     995                }
     996                Else
     997                {
     998                    Return (0x0)
     999                }
     1000            }
     1001
    6681002            Processor (CPUG, /* Name */
    6691003                       0x10, /* Id */
     
    6721006                       )
    6731007            {
    674                 Method(_MAT, 0) {
     1008                Name (_HID, "ACPI0007")
     1009                Name (_UID, "SCKG-CPU0")
     1010                Name (_PXM, 0x00)
     1011
     1012                Method(_MAT, 0)
     1013                {
    6751014                    IF (CPCK(0x10))
    6761015                    {
     
    6831022                    }
    6841023                }
     1024
    6851025                Method(_STA) // Used for device presence detection
    6861026                {
     
    6941034                    }
    6951035                }
     1036
    6961037                Method(_EJ0, 1)
    6971038                {
     
    7001041                }
    7011042            }
     1043        }
     1044
     1045        Device (SCKH)
     1046        {
     1047            Name (_HID, "ACPI0004")
     1048            Name (_UID, "SCKCPUH")
     1049
     1050            Method (_STA, 0, NotSerialized)
     1051            {
     1052                IF (CPCK(0x11))
     1053                {
     1054                    Return (0xF)
     1055                }
     1056                Else
     1057                {
     1058                    Return (0x0)
     1059                }
     1060            }
     1061
    7021062            Processor (CPUH, /* Name */
    7031063                       0x11, /* Id */
     
    7061066                       )
    7071067            {
    708                 Method(_MAT, 0) {
     1068                Name (_HID, "ACPI0007")
     1069                Name (_UID, "SCKH-CPU0")
     1070                Name (_PXM, 0x00)
     1071
     1072                Method(_MAT, 0)
     1073                {
    7091074                    IF (CPCK(0x11))
    7101075                    {
     
    7171082                    }
    7181083                }
     1084
    7191085                Method(_STA) // Used for device presence detection
    7201086                {
     
    7281094                    }
    7291095                }
     1096
    7301097                Method(_EJ0, 1)
    7311098                {
     
    7341101                }
    7351102            }
     1103        }
     1104
     1105        Device (SCKI)
     1106        {
     1107            Name (_HID, "ACPI0004")
     1108            Name (_UID, "SCKCPUI")
     1109
     1110            Method (_STA, 0, NotSerialized)
     1111            {
     1112                IF (CPCK(0x12))
     1113                {
     1114                    Return (0xF)
     1115                }
     1116                Else
     1117                {
     1118                    Return (0x0)
     1119                }
     1120            }
     1121
    7361122            Processor (CPUI, /* Name */
    7371123                       0x12, /* Id */
     
    7401126                       )
    7411127            {
    742                 Method(_MAT, 0) {
     1128                Name (_HID, "ACPI0007")
     1129                Name (_UID, "SCKI-CPU0")
     1130                Name (_PXM, 0x00)
     1131
     1132                Method(_MAT, 0)
     1133                {
    7431134                    IF (CPCK(0x12))
    7441135                    {
     
    7511142                    }
    7521143                }
     1144
    7531145                Method(_STA) // Used for device presence detection
    7541146                {
     
    7621154                    }
    7631155                }
     1156
    7641157                Method(_EJ0, 1)
    7651158                {
     
    7681161                }
    7691162            }
     1163        }
     1164
     1165        Device (SCKJ)
     1166        {
     1167            Name (_HID, "ACPI0004")
     1168            Name (_UID, "SCKCPUJ")
     1169
     1170            Method (_STA, 0, NotSerialized)
     1171            {
     1172                IF (CPCK(0x13))
     1173                {
     1174                    Return (0xF)
     1175                }
     1176                Else
     1177                {
     1178                    Return (0x0)
     1179                }
     1180            }
     1181
    7701182            Processor (CPUJ, /* Name */
    7711183                       0x13, /* Id */
     
    7741186                       )
    7751187            {
    776                 Method(_MAT, 0) {
     1188                Name (_HID, "ACPI0007")
     1189                Name (_UID, "SCKJ-CPU0")
     1190                Name (_PXM, 0x00)
     1191
     1192                Method(_MAT, 0)
     1193                {
    7771194                    IF (CPCK(0x13))
    7781195                    {
     
    7851202                    }
    7861203                }
     1204
    7871205                Method(_STA) // Used for device presence detection
    7881206                {
     
    7961214                    }
    7971215                }
     1216
    7981217                Method(_EJ0, 1)
    7991218                {
     
    8021221                }
    8031222            }
     1223        }
     1224
     1225        Device (SCKK)
     1226        {
     1227            Name (_HID, "ACPI0004")
     1228            Name (_UID, "SCKCPUK")
     1229
     1230            Method (_STA, 0, NotSerialized)
     1231            {
     1232                IF (CPCK(0x14))
     1233                {
     1234                    Return (0xF)
     1235                }
     1236                Else
     1237                {
     1238                    Return (0x0)
     1239                }
     1240            }
     1241
    8041242            Processor (CPUK, /* Name */
    8051243                       0x14, /* Id */
     
    8081246                       )
    8091247            {
    810                 Method(_MAT, 0) {
     1248                Name (_HID, "ACPI0007")
     1249                Name (_UID, "SCKK-CPU0")
     1250                Name (_PXM, 0x00)
     1251
     1252                Method(_MAT, 0)
     1253                {
    8111254                    IF (CPCK(0x14))
    8121255                    {
     
    8191262                    }
    8201263                }
     1264
    8211265                Method(_STA) // Used for device presence detection
    8221266                {
     
    8301274                    }
    8311275                }
     1276
    8321277                Method(_EJ0, 1)
    8331278                {
     
    8361281                }
    8371282            }
     1283        }
     1284
     1285        Device (SCKL)
     1286        {
     1287            Name (_HID, "ACPI0004")
     1288            Name (_UID, "SCKCPUL")
     1289
     1290            Method (_STA, 0, NotSerialized)
     1291            {
     1292                IF (CPCK(0x15))
     1293                {
     1294                    Return (0xF)
     1295                }
     1296                Else
     1297                {
     1298                    Return (0x0)
     1299                }
     1300            }
     1301
    8381302            Processor (CPUL, /* Name */
    8391303                       0x15, /* Id */
     
    8421306                       )
    8431307            {
    844                 Method(_MAT, 0) {
     1308                Name (_HID, "ACPI0007")
     1309                Name (_UID, "SCKL-CPU0")
     1310                Name (_PXM, 0x00)
     1311
     1312                Method(_MAT, 0)
     1313                {
    8451314                    IF (CPCK(0x15))
    8461315                    {
     
    8531322                    }
    8541323                }
     1324
    8551325                Method(_STA) // Used for device presence detection
    8561326                {
     
    8641334                    }
    8651335                }
     1336
    8661337                Method(_EJ0, 1)
    8671338                {
     
    8701341                }
    8711342            }
     1343        }
     1344
     1345        Device (SCKM)
     1346        {
     1347            Name (_HID, "ACPI0004")
     1348            Name (_UID, "SCKCPUM")
     1349
     1350            Method (_STA, 0, NotSerialized)
     1351            {
     1352                IF (CPCK(0x16))
     1353                {
     1354                    Return (0xF)
     1355                }
     1356                Else
     1357                {
     1358                    Return (0x0)
     1359                }
     1360            }
     1361
    8721362            Processor (CPUM, /* Name */
    8731363                       0x16, /* Id */
     
    8761366                       )
    8771367            {
    878                 Method(_MAT, 0) {
     1368                Name (_HID, "ACPI0007")
     1369                Name (_UID, "SCKM-CPU0")
     1370                Name (_PXM, 0x00)
     1371
     1372                Method(_MAT, 0)
     1373                {
    8791374                    IF (CPCK(0x16))
    8801375                    {
     
    8871382                    }
    8881383                }
     1384
    8891385                Method(_STA) // Used for device presence detection
    8901386                {
     
    8981394                    }
    8991395                }
     1396
    9001397                Method(_EJ0, 1)
    9011398                {
     
    9041401                }
    9051402            }
     1403        }
     1404
     1405        Device (SCKN)
     1406        {
     1407            Name (_HID, "ACPI0004")
     1408            Name (_UID, "SCKCPUN")
     1409
     1410            Method (_STA, 0, NotSerialized)
     1411            {
     1412                IF (CPCK(0x17))
     1413                {
     1414                    Return (0xF)
     1415                }
     1416                Else
     1417                {
     1418                    Return (0x0)
     1419                }
     1420            }
     1421
    9061422            Processor (CPUN, /* Name */
    9071423                       0x17, /* Id */
     
    9101426                       )
    9111427            {
    912                 Method(_MAT, 0) {
     1428                Name (_HID, "ACPI0007")
     1429                Name (_UID, "SCKN-CPU0")
     1430                Name (_PXM, 0x00)
     1431
     1432                Method(_MAT, 0)
     1433                {
    9131434                    IF (CPCK(0x17))
    9141435                    {
     
    9211442                    }
    9221443                }
     1444
    9231445                Method(_STA) // Used for device presence detection
    9241446                {
     
    9321454                    }
    9331455                }
     1456
    9341457                Method(_EJ0, 1)
    9351458                {
     
    9381461                }
    9391462            }
     1463        }
     1464
     1465        Device (SCKO)
     1466        {
     1467            Name (_HID, "ACPI0004")
     1468            Name (_UID, "SCKCPUO")
     1469
     1470            Method (_STA, 0, NotSerialized)
     1471            {
     1472                IF (CPCK(0x18))
     1473                {
     1474                    Return (0xF)
     1475                }
     1476                Else
     1477                {
     1478                    Return (0x0)
     1479                }
     1480            }
     1481
    9401482            Processor (CPUO, /* Name */
    9411483                       0x18, /* Id */
     
    9441486                       )
    9451487            {
    946                 Method(_MAT, 0) {
     1488                Name (_HID, "ACPI0007")
     1489                Name (_UID, "SCKO-CPU0")
     1490                Name (_PXM, 0x00)
     1491
     1492                Method(_MAT, 0)
     1493                {
    9471494                    IF (CPCK(0x18))
    9481495                    {
     
    9551502                    }
    9561503                }
     1504
    9571505                Method(_STA) // Used for device presence detection
    9581506                {
     
    9661514                    }
    9671515                }
     1516
    9681517                Method(_EJ0, 1)
    9691518                {
     
    9721521                }
    9731522            }
     1523        }
     1524
     1525        Device (SCKP)
     1526        {
     1527            Name (_HID, "ACPI0004")
     1528            Name (_UID, "SCKCPUP")
     1529
     1530            Method (_STA, 0, NotSerialized)
     1531            {
     1532                IF (CPCK(0x19))
     1533                {
     1534                    Return (0xF)
     1535                }
     1536                Else
     1537                {
     1538                    Return (0x0)
     1539                }
     1540            }
     1541
    9741542            Processor (CPUP, /* Name */
    9751543                       0x19, /* Id */
     
    9781546                       )
    9791547            {
    980                 Method(_MAT, 0) {
     1548                Name (_HID, "ACPI0007")
     1549                Name (_UID, "SCKP-CPU0")
     1550                Name (_PXM, 0x00)
     1551
     1552                Method(_MAT, 0)
     1553                {
    9811554                    IF (CPCK(0x19))
    9821555                    {
     
    9891562                    }
    9901563                }
     1564
    9911565                Method(_STA) // Used for device presence detection
    9921566                {
     
    10001574                    }
    10011575                }
     1576
    10021577                Method(_EJ0, 1)
    10031578                {
     
    10061581                }
    10071582            }
     1583        }
     1584
     1585        Device (SCKQ)
     1586        {
     1587            Name (_HID, "ACPI0004")
     1588            Name (_UID, "SCKCPUQ")
     1589
     1590            Method (_STA, 0, NotSerialized)
     1591            {
     1592                IF (CPCK(0x1a))
     1593                {
     1594                    Return (0xF)
     1595                }
     1596                Else
     1597                {
     1598                    Return (0x0)
     1599                }
     1600            }
     1601
    10081602            Processor (CPUQ, /* Name */
    10091603                       0x1a, /* Id */
     
    10121606                       )
    10131607            {
    1014                 Method(_MAT, 0) {
     1608                Name (_HID, "ACPI0007")
     1609                Name (_UID, "SCKQ-CPU0")
     1610                Name (_PXM, 0x00)
     1611
     1612                Method(_MAT, 0)
     1613                {
    10151614                    IF (CPCK(0x1a))
    10161615                    {
     
    10231622                    }
    10241623                }
     1624
    10251625                Method(_STA) // Used for device presence detection
    10261626                {
     
    10341634                    }
    10351635                }
     1636
    10361637                Method(_EJ0, 1)
    10371638                {
     
    10401641                }
    10411642            }
     1643        }
     1644
     1645        Device (SCKR)
     1646        {
     1647            Name (_HID, "ACPI0004")
     1648            Name (_UID, "SCKCPUR")
     1649
     1650            Method (_STA, 0, NotSerialized)
     1651            {
     1652                IF (CPCK(0x1b))
     1653                {
     1654                    Return (0xF)
     1655                }
     1656                Else
     1657                {
     1658                    Return (0x0)
     1659                }
     1660            }
     1661
    10421662            Processor (CPUR, /* Name */
    10431663                       0x1b, /* Id */
     
    10461666                       )
    10471667            {
    1048                 Method(_MAT, 0) {
     1668                Name (_HID, "ACPI0007")
     1669                Name (_UID, "SCKR-CPU0")
     1670                Name (_PXM, 0x00)
     1671
     1672                Method(_MAT, 0)
     1673                {
    10491674                    IF (CPCK(0x1b))
    10501675                    {
     
    10571682                    }
    10581683                }
     1684
    10591685                Method(_STA) // Used for device presence detection
    10601686                {
     
    10681694                    }
    10691695                }
     1696
    10701697                Method(_EJ0, 1)
    10711698                {
     
    10741701                }
    10751702            }
     1703        }
     1704
     1705        Device (SCKS)
     1706        {
     1707            Name (_HID, "ACPI0004")
     1708            Name (_UID, "SCKCPUS")
     1709
     1710            Method (_STA, 0, NotSerialized)
     1711            {
     1712                IF (CPCK(0x1c))
     1713                {
     1714                    Return (0xF)
     1715                }
     1716                Else
     1717                {
     1718                    Return (0x0)
     1719                }
     1720            }
     1721
    10761722            Processor (CPUS, /* Name */
    10771723                       0x1c, /* Id */
     
    10801726                       )
    10811727            {
    1082                 Method(_MAT, 0) {
     1728                Name (_HID, "ACPI0007")
     1729                Name (_UID, "SCKS-CPU0")
     1730                Name (_PXM, 0x00)
     1731
     1732                Method(_MAT, 0)
     1733                {
    10831734                    IF (CPCK(0x1c))
    10841735                    {
     
    10911742                    }
    10921743                }
     1744
    10931745                Method(_STA) // Used for device presence detection
    10941746                {
     
    11021754                    }
    11031755                }
     1756
    11041757                Method(_EJ0, 1)
    11051758                {
     
    11081761                }
    11091762            }
     1763        }
     1764
     1765        Device (SCKT)
     1766        {
     1767            Name (_HID, "ACPI0004")
     1768            Name (_UID, "SCKCPUT")
     1769
     1770            Method (_STA, 0, NotSerialized)
     1771            {
     1772                IF (CPCK(0x1d))
     1773                {
     1774                    Return (0xF)
     1775                }
     1776                Else
     1777                {
     1778                    Return (0x0)
     1779                }
     1780            }
     1781
    11101782            Processor (CPUT, /* Name */
    11111783                       0x1d, /* Id */
     
    11141786                       )
    11151787            {
    1116                 Method(_MAT, 0) {
     1788                Name (_HID, "ACPI0007")
     1789                Name (_UID, "SCKT-CPU0")
     1790                Name (_PXM, 0x00)
     1791
     1792                Method(_MAT, 0)
     1793                {
    11171794                    IF (CPCK(0x1d))
    11181795                    {
     
    11251802                    }
    11261803                }
     1804
    11271805                Method(_STA) // Used for device presence detection
    11281806                {
     
    11361814                    }
    11371815                }
     1816
    11381817                Method(_EJ0, 1)
    11391818                {
     
    11421821                }
    11431822            }
     1823        }
     1824
     1825        Device (SCKU)
     1826        {
     1827            Name (_HID, "ACPI0004")
     1828            Name (_UID, "SCKCPUU")
     1829
     1830            Method (_STA, 0, NotSerialized)
     1831            {
     1832                IF (CPCK(0x1e))
     1833                {
     1834                    Return (0xF)
     1835                }
     1836                Else
     1837                {
     1838                    Return (0x0)
     1839                }
     1840            }
     1841
    11441842            Processor (CPUU, /* Name */
    11451843                       0x1e, /* Id */
     
    11481846                       )
    11491847            {
    1150                 Method(_MAT, 0) {
     1848                Name (_HID, "ACPI0007")
     1849                Name (_UID, "SCKU-CPU0")
     1850                Name (_PXM, 0x00)
     1851
     1852                Method(_MAT, 0)
     1853                {
    11511854                    IF (CPCK(0x1e))
    11521855                    {
     
    11591862                    }
    11601863                }
     1864
    11611865                Method(_STA) // Used for device presence detection
    11621866                {
     
    11701874                    }
    11711875                }
     1876
    11721877                Method(_EJ0, 1)
    11731878                {
     
    11761881                }
    11771882            }
     1883        }
     1884
     1885        Device (SCKV)
     1886        {
     1887            Name (_HID, "ACPI0004")
     1888            Name (_UID, "SCKCPUV")
     1889
     1890            Method (_STA, 0, NotSerialized)
     1891            {
     1892                IF (CPCK(0x1f))
     1893                {
     1894                    Return (0xF)
     1895                }
     1896                Else
     1897                {
     1898                    Return (0x0)
     1899                }
     1900            }
     1901
    11781902            Processor (CPUV, /* Name */
    11791903                       0x1f, /* Id */
     
    11821906                       )
    11831907            {
    1184                 Method(_MAT, 0) {
     1908                Name (_HID, "ACPI0007")
     1909                Name (_UID, "SCKV-CPU0")
     1910                Name (_PXM, 0x00)
     1911
     1912                Method(_MAT, 0)
     1913                {
    11851914                    IF (CPCK(0x1f))
    11861915                    {
     
    11931922                    }
    11941923                }
     1924
    11951925                Method(_STA) // Used for device presence detection
    11961926                {
     
    12041934                    }
    12051935                }
     1936
    12061937                Method(_EJ0, 1)
    12071938                {
     
    12241955            //IF (And(\_SB.CPUD, 0x2))
    12251956            //{
    1226             //    Notify(\_PR.HPL.CPU1, 0x3)
     1957            //    Notify(\_PR.SCK1, 0x3)
    12271958            //}
    12281959
    12291960            IF (CPCK(0x01))
    12301961            {
    1231                 Notify (\_PR.HPL.CPU1, 0x0)
     1962                Notify (\_SB.SCK1, 0x1)
    12321963            }
    12331964            IF (CPCK(0x02))
    12341965            {
    1235                 Notify (\_PR.HPL.CPU2, 0x0)
     1966                Notify (\_SB.SCK2, 0x1)
    12361967            }
    12371968            IF (CPCK(0x03))
    12381969            {
    1239                 Notify (\_PR.HPL.CPU3, 0x0)
     1970                Notify (\_SB.SCK3, 0x1)
    12401971            }
    12411972            IF (CPCK(0x04))
    12421973            {
    1243                 Notify (\_PR.HPL.CPU4, 0x0)
     1974                Notify (\_SB.SCK4, 0x1)
    12441975            }
    12451976            IF (CPCK(0x05))
    12461977            {
    1247                 Notify (\_PR.HPL.CPU5, 0x0)
     1978                Notify (\_SB.SCK5, 0x1)
    12481979            }
    12491980            IF (CPCK(0x06))
    12501981            {
    1251                 Notify (\_PR.HPL.CPU6, 0x0)
     1982                Notify (\_SB.SCK6, 0x1)
    12521983            }
    12531984            IF (CPCK(0x07))
    12541985            {
    1255                 Notify (\_PR.HPL.CPU7, 0x0)
     1986                Notify (\_SB.SCK7, 0x1)
    12561987            }
    12571988            IF (CPCK(0x08))
    12581989            {
    1259                 Notify (\_PR.HPL.CPU8, 0x0)
     1990                Notify (\_SB.SCK8, 0x1)
    12601991            }
    12611992            IF (CPCK(0x09))
    12621993            {
    1263                 Notify (\_PR.HPL.CPU9, 0x0)
     1994                Notify (\_SB.SCK9, 0x1)
    12641995            }
    12651996            IF (CPCK(0x0a))
    12661997            {
    1267                 Notify (\_PR.HPL.CPUA, 0x0)
     1998                Notify (\_SB.SCKA, 0x1)
    12681999            }
    12692000            IF (CPCK(0x0b))
    12702001            {
    1271                 Notify (\_PR.HPL.CPUB, 0x0)
     2002                Notify (\_SB.SCKB, 0x1)
    12722003            }
    12732004            IF (CPCK(0x0c))
    12742005            {
    1275                 Notify (\_PR.HPL.CPUC, 0x0)
     2006                Notify (\_SB.SCKC, 0x1)
    12762007            }
    12772008            IF (CPCK(0x0d))
    12782009            {
    1279                 Notify (\_PR.HPL.CPUD, 0x0)
     2010                Notify (\_SB.SCKD, 0x1)
    12802011            }
    12812012            IF (CPCK(0x0e))
    12822013            {
    1283                 Notify (\_PR.HPL.CPUE, 0x0)
     2014                Notify (\_SB.SCKE, 0x1)
    12842015            }
    12852016            IF (CPCK(0x0f))
    12862017            {
    1287                 Notify (\_PR.HPL.CPUF, 0x0)
     2018                Notify (\_SB.SCKF, 0x1)
    12882019            }
    12892020            IF (CPCK(0x10))
    12902021            {
    1291                 Notify (\_PR.HPL.CPUG, 0x0)
     2022                Notify (\_SB.SCKG, 0x1)
    12922023            }
    12932024            IF (CPCK(0x11))
    12942025            {
    1295                 Notify (\_PR.HPL.CPUH, 0x0)
     2026                Notify (\_SB.SCKH, 0x1)
    12962027            }
    12972028            IF (CPCK(0x12))
    12982029            {
    1299                 Notify (\_PR.HPL.CPUI, 0x0)
     2030                Notify (\_SB.SCKI, 0x1)
    13002031            }
    13012032            IF (CPCK(0x13))
    13022033            {
    1303                 Notify (\_PR.HPL.CPUJ, 0x0)
     2034                Notify (\_SB.SCKJ, 0x1)
    13042035            }
    13052036            IF (CPCK(0x14))
    13062037            {
    1307                 Notify (\_PR.HPL.CPUK, 0x0)
     2038                Notify (\_SB.SCKK, 0x1)
    13082039            }
    13092040            IF (CPCK(0x15))
    13102041            {
    1311                 Notify (\_PR.HPL.CPUL, 0x0)
     2042                Notify (\_SB.SCKL, 0x1)
    13122043            }
    13132044            IF (CPCK(0x16))
    13142045            {
    1315                 Notify (\_PR.HPL.CPUM, 0x0)
     2046                Notify (\_SB.SCKM, 0x1)
    13162047            }
    13172048            IF (CPCK(0x17))
    13182049            {
    1319                 Notify (\_PR.HPL.CPUN, 0x0)
     2050                Notify (\_SB.SCKN, 0x1)
    13202051            }
    13212052            IF (CPCK(0x18))
    13222053            {
    1323                 Notify (\_PR.HPL.CPUO, 0x0)
     2054                Notify (\_SB.SCKO, 0x1)
    13242055            }
    13252056            IF (CPCK(0x19))
    13262057            {
    1327                 Notify (\_PR.HPL.CPUP, 0x0)
     2058                Notify (\_SB.SCKP, 0x1)
    13282059            }
    13292060            IF (CPCK(0x1a))
    13302061            {
    1331                 Notify (\_PR.HPL.CPUQ, 0x0)
     2062                Notify (\_SB.SCKQ, 0x1)
    13322063            }
    13332064            IF (CPCK(0x1b))
    13342065            {
    1335                 Notify (\_PR.HPL.CPUR, 0x0)
     2066                Notify (\_SB.SCKR, 0x1)
    13362067            }
    13372068            IF (CPCK(0x1c))
    13382069            {
    1339                 Notify (\_PR.HPL.CPUS, 0x0)
     2070                Notify (\_SB.SCKS, 0x1)
    13402071            }
    13412072            IF (CPCK(0x1d))
    13422073            {
    1343                 Notify (\_PR.HPL.CPUT, 0x0)
     2074                Notify (\_SB.SCKT, 0x1)
    13442075            }
    13452076            IF (CPCK(0x1e))
    13462077            {
    1347                 Notify (\_PR.HPL.CPUU, 0x0)
     2078                Notify (\_SB.SCKU, 0x1)
    13482079            }
    13492080            IF (CPCK(0x1f))
    13502081            {
    1351                 Notify (\_PR.HPL.CPUV, 0x0)
     2082                Notify (\_SB.SCKV, 0x1)
    13522083            }
    13532084        }
    13542085    }
    13552086
    1356     Scope (\_SB)
    1357     {
    1358         OperationRegion (SYSI, SystemIO, 0x4048, 0x08)
    1359         Field (SYSI, DwordAcc, NoLock, Preserve)
    1360         {
    1361             IDX0, 32,
    1362             DAT0, 32,
    1363         }
    1364 
    1365         IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
    1366         {
    1367             MEML,  32,
    1368             UIOA,  32,
    1369             UHPT,  32,
    1370             USMC,  32,
    1371             UFDC,  32,
    1372             // @todo: maybe make it bitmask instead?
    1373             UCP0,  32,
    1374             UCP1,  32,
    1375             UCP2,  32,
    1376             UCP3,  32,
    1377             MEMH,  32,
    1378             URTC,  32,
    1379             CPUL,  32,
    1380             CPUC,  32,
    1381             Offset (0x80),
    1382             ININ, 32,
    1383             Offset (0x200),
    1384             VAIN, 32,
    1385         }
    1386 
    1387         Method (_INI, 0, NotSerialized)
    1388         {
    1389             Store (0xbadc0de, VAIN)
    1390             DBG ("MEML: ")
    1391             HEX4 (MEML)
    1392             DBG ("UIOA: ")
    1393             HEX4 (UIOA)
    1394             DBG ("UHPT: ")
    1395             HEX4 (UHPT)
    1396             DBG ("USMC: ")
    1397             HEX4 (USMC)
    1398             DBG ("UFDC: ")
    1399             HEX4 (UFDC)
    1400             DBG ("UCP0: ")
    1401             HEX4 (UCP0)
    1402             DBG ("MEMH: ")
    1403             HEX4 (MEMH)
    1404         }
    1405 
    1406         // PCI PIC IRQ Routing table
    1407         // Must match pci.c:pci_slot_get_pirq
    1408         Name (PR00, Package ()
    1409         {
    1410             Package (0x04) {0x0002FFFF, 0x00, LNKB, 0x00,},
    1411             Package (0x04) {0x0002FFFF, 0x01, LNKC, 0x00,},
    1412             Package (0x04) {0x0002FFFF, 0x02, LNKD, 0x00,},
    1413             Package (0x04) {0x0002FFFF, 0x03, LNKA, 0x00,},
    1414 
    1415             Package (0x04) {0x0003FFFF, 0x00, LNKC, 0x00,},
    1416             Package (0x04) {0x0003FFFF, 0x01, LNKD, 0x00,},
    1417             Package (0x04) {0x0003FFFF, 0x02, LNKA, 0x00,},
    1418             Package (0x04) {0x0003FFFF, 0x03, LNKB, 0x00,},
    1419 
    1420             Package (0x04) {0x0004FFFF, 0x00, LNKD, 0x00,},
    1421             Package (0x04) {0x0004FFFF, 0x01, LNKA, 0x00,},
    1422             Package (0x04) {0x0004FFFF, 0x02, LNKB, 0x00,},
    1423             Package (0x04) {0x0004FFFF, 0x03, LNKC, 0x00,},
    1424 
    1425             Package (0x04) {0x0005FFFF, 0x00, LNKA, 0x00,},
    1426             Package (0x04) {0x0005FFFF, 0x01, LNKB, 0x00,},
    1427             Package (0x04) {0x0005FFFF, 0x02, LNKC, 0x00,},
    1428             Package (0x04) {0x0005FFFF, 0x03, LNKD, 0x00,},
    1429 
    1430             Package (0x04) {0x0006FFFF, 0x00, LNKB, 0x00,},
    1431             Package (0x04) {0x0006FFFF, 0x01, LNKC, 0x00,},
    1432             Package (0x04) {0x0006FFFF, 0x02, LNKD, 0x00,},
    1433             Package (0x04) {0x0006FFFF, 0x03, LNKA, 0x00,},
    1434 
    1435             Package (0x04) {0x0007FFFF, 0x00, LNKC, 0x00,},
    1436             Package (0x04) {0x0007FFFF, 0x01, LNKD, 0x00,},
    1437             Package (0x04) {0x0007FFFF, 0x02, LNKA, 0x00,},
    1438             Package (0x04) {0x0007FFFF, 0x03, LNKB, 0x00,},
    1439 
    1440             Package (0x04) {0x0008FFFF, 0x00, LNKD, 0x00,},
    1441             Package (0x04) {0x0008FFFF, 0x01, LNKA, 0x00,},
    1442             Package (0x04) {0x0008FFFF, 0x02, LNKB, 0x00,},
    1443             Package (0x04) {0x0008FFFF, 0x03, LNKC, 0x00,},
    1444 
    1445             Package (0x04) {0x0009FFFF, 0x00, LNKA, 0x00,},
    1446             Package (0x04) {0x0009FFFF, 0x01, LNKB, 0x00,},
    1447             Package (0x04) {0x0009FFFF, 0x02, LNKC, 0x00,},
    1448             Package (0x04) {0x0009FFFF, 0x03, LNKD, 0x00,},
    1449 
    1450             Package (0x04) {0x000AFFFF, 0x00, LNKB, 0x00,},
    1451             Package (0x04) {0x000AFFFF, 0x01, LNKC, 0x00,},
    1452             Package (0x04) {0x000AFFFF, 0x02, LNKD, 0x00,},
    1453             Package (0x04) {0x000AFFFF, 0x03, LNKA, 0x00,},
    1454 
    1455             Package (0x04) {0x000BFFFF, 0x00, LNKC, 0x00,},
    1456             Package (0x04) {0x000BFFFF, 0x01, LNKD, 0x00,},
    1457             Package (0x04) {0x000BFFFF, 0x02, LNKA, 0x00,},
    1458             Package (0x04) {0x000BFFFF, 0x03, LNKB, 0x00,},
    1459 
    1460             Package (0x04) {0x000CFFFF, 0x00, LNKD, 0x00,},
    1461             Package (0x04) {0x000CFFFF, 0x01, LNKA, 0x00,},
    1462             Package (0x04) {0x000CFFFF, 0x02, LNKB, 0x00,},
    1463             Package (0x04) {0x000CFFFF, 0x03, LNKC, 0x00,},
    1464 
    1465             Package (0x04) {0x000DFFFF, 0x00, LNKA, 0x00,},
    1466             Package (0x04) {0x000DFFFF, 0x01, LNKB, 0x00,},
    1467             Package (0x04) {0x000DFFFF, 0x02, LNKC, 0x00,},
    1468             Package (0x04) {0x000DFFFF, 0x03, LNKD, 0x00,},
    1469 
    1470             Package (0x04) {0x000EFFFF, 0x00, LNKB, 0x00,},
    1471             Package (0x04) {0x000EFFFF, 0x01, LNKC, 0x00,},
    1472             Package (0x04) {0x000EFFFF, 0x02, LNKD, 0x00,},
    1473             Package (0x04) {0x000EFFFF, 0x03, LNKA, 0x00,},
    1474 
    1475             Package (0x04) {0x000FFFFF, 0x00, LNKC, 0x00,},
    1476             Package (0x04) {0x000FFFFF, 0x01, LNKD, 0x00,},
    1477             Package (0x04) {0x000FFFFF, 0x02, LNKA, 0x00,},
    1478             Package (0x04) {0x000FFFFF, 0x03, LNKB, 0x00,},
    1479 
    1480             Package (0x04) {0x0010FFFF, 0x00, LNKD, 0x00,},
    1481             Package (0x04) {0x0010FFFF, 0x01, LNKA, 0x00,},
    1482             Package (0x04) {0x0010FFFF, 0x02, LNKB, 0x00,},
    1483             Package (0x04) {0x0010FFFF, 0x03, LNKC, 0x00,},
    1484 
    1485             Package (0x04) {0x0011FFFF, 0x00, LNKA, 0x00,},
    1486             Package (0x04) {0x0011FFFF, 0x01, LNKB, 0x00,},
    1487             Package (0x04) {0x0011FFFF, 0x02, LNKC, 0x00,},
    1488             Package (0x04) {0x0011FFFF, 0x03, LNKD, 0x00,},
    1489 
    1490             Package (0x04) {0x0012FFFF, 0x00, LNKB, 0x00,},
    1491             Package (0x04) {0x0012FFFF, 0x01, LNKC, 0x00,},
    1492             Package (0x04) {0x0012FFFF, 0x02, LNKD, 0x00,},
    1493             Package (0x04) {0x0012FFFF, 0x03, LNKA, 0x00,},
    1494 
    1495             Package (0x04) {0x0013FFFF, 0x00, LNKC, 0x00,},
    1496             Package (0x04) {0x0013FFFF, 0x01, LNKD, 0x00,},
    1497             Package (0x04) {0x0013FFFF, 0x02, LNKA, 0x00,},
    1498             Package (0x04) {0x0013FFFF, 0x03, LNKB, 0x00,},
    1499 
    1500             Package (0x04) {0x0014FFFF, 0x00, LNKD, 0x00,},
    1501             Package (0x04) {0x0014FFFF, 0x01, LNKA, 0x00,},
    1502             Package (0x04) {0x0014FFFF, 0x02, LNKB, 0x00,},
    1503             Package (0x04) {0x0014FFFF, 0x03, LNKC, 0x00,},
    1504 
    1505             Package (0x04) {0x0015FFFF, 0x00, LNKA, 0x00,},
    1506             Package (0x04) {0x0015FFFF, 0x01, LNKB, 0x00,},
    1507             Package (0x04) {0x0015FFFF, 0x02, LNKC, 0x00,},
    1508             Package (0x04) {0x0015FFFF, 0x03, LNKD, 0x00,},
    1509 
    1510             Package (0x04) {0x0016FFFF, 0x00, LNKB, 0x00,},
    1511             Package (0x04) {0x0016FFFF, 0x01, LNKC, 0x00,},
    1512             Package (0x04) {0x0016FFFF, 0x02, LNKD, 0x00,},
    1513             Package (0x04) {0x0016FFFF, 0x03, LNKA, 0x00,},
    1514 
    1515             Package (0x04) {0x0017FFFF, 0x00, LNKC, 0x00,},
    1516             Package (0x04) {0x0017FFFF, 0x01, LNKD, 0x00,},
    1517             Package (0x04) {0x0017FFFF, 0x02, LNKA, 0x00,},
    1518             Package (0x04) {0x0017FFFF, 0x03, LNKB, 0x00,},
    1519 
    1520             Package (0x04) {0x0018FFFF, 0x00, LNKD, 0x00,},
    1521             Package (0x04) {0x0018FFFF, 0x01, LNKA, 0x00,},
    1522             Package (0x04) {0x0018FFFF, 0x02, LNKB, 0x00,},
    1523             Package (0x04) {0x0018FFFF, 0x03, LNKC, 0x00,},
    1524 
    1525             Package (0x04) {0x0019FFFF, 0x00, LNKA, 0x00,},
    1526             Package (0x04) {0x0019FFFF, 0x01, LNKB, 0x00,},
    1527             Package (0x04) {0x0019FFFF, 0x02, LNKC, 0x00,},
    1528             Package (0x04) {0x0019FFFF, 0x03, LNKD, 0x00,},
    1529 
    1530             Package (0x04) {0x001AFFFF, 0x00, LNKB, 0x00,},
    1531             Package (0x04) {0x001AFFFF, 0x01, LNKC, 0x00,},
    1532             Package (0x04) {0x001AFFFF, 0x02, LNKD, 0x00,},
    1533             Package (0x04) {0x001AFFFF, 0x03, LNKA, 0x00,},
    1534 
    1535             Package (0x04) {0x001BFFFF, 0x00, LNKC, 0x00,},
    1536             Package (0x04) {0x001BFFFF, 0x01, LNKD, 0x00,},
    1537             Package (0x04) {0x001BFFFF, 0x02, LNKA, 0x00,},
    1538             Package (0x04) {0x001BFFFF, 0x03, LNKB, 0x00,},
    1539 
    1540             Package (0x04) {0x001CFFFF, 0x00, LNKD, 0x00,},
    1541             Package (0x04) {0x001CFFFF, 0x01, LNKA, 0x00,},
    1542             Package (0x04) {0x001CFFFF, 0x02, LNKB, 0x00,},
    1543             Package (0x04) {0x001CFFFF, 0x03, LNKC, 0x00,},
    1544 
    1545             Package (0x04) {0x001DFFFF, 0x00, LNKA, 0x00,},
    1546             Package (0x04) {0x001DFFFF, 0x01, LNKB, 0x00,},
    1547             Package (0x04) {0x001DFFFF, 0x02, LNKC, 0x00,},
    1548             Package (0x04) {0x001DFFFF, 0x03, LNKD, 0x00,},
    1549 
    1550             Package (0x04) {0x001EFFFF, 0x00, LNKB, 0x00,},
    1551             Package (0x04) {0x001EFFFF, 0x01, LNKC, 0x00,},
    1552             Package (0x04) {0x001EFFFF, 0x02, LNKD, 0x00,},
    1553             Package (0x04) {0x001EFFFF, 0x03, LNKA, 0x00,},
    1554 
    1555             Package (0x04) {0x001FFFFF, 0x00, LNKC, 0x00,},
    1556             Package (0x04) {0x001FFFFF, 0x01, LNKD, 0x00,},
    1557             Package (0x04) {0x001FFFFF, 0x02, LNKA, 0x00,},
    1558             Package (0x04) {0x001FFFFF, 0x03, LNKB, 0x00,}
    1559         })
    1560 
    1561         // PCI I/O APIC IRQ Routing table
    1562         // Must match pci.c:pci_slot_get_acpi_pirq
    1563         Name (PR01, Package ()
    1564         {
    1565             Package (0x04) {0x0002FFFF, 0x00, 0x00, 0x12,},
    1566             Package (0x04) {0x0002FFFF, 0x01, 0x00, 0x13,},
    1567             Package (0x04) {0x0002FFFF, 0x02, 0x00, 0x14,},
    1568             Package (0x04) {0x0002FFFF, 0x03, 0x00, 0x15,},
    1569 
    1570             Package (0x04) {0x0003FFFF, 0x00, 0x00, 0x13,},
    1571             Package (0x04) {0x0003FFFF, 0x01, 0x00, 0x14,},
    1572             Package (0x04) {0x0003FFFF, 0x02, 0x00, 0x15,},
    1573             Package (0x04) {0x0003FFFF, 0x03, 0x00, 0x16,},
    1574 
    1575             Package (0x04) {0x0004FFFF, 0x00, 0x00, 0x14,},
    1576             Package (0x04) {0x0004FFFF, 0x01, 0x00, 0x15,},
    1577             Package (0x04) {0x0004FFFF, 0x02, 0x00, 0x16,},
    1578             Package (0x04) {0x0004FFFF, 0x03, 0x00, 0x17,},
    1579 
    1580             Package (0x04) {0x0005FFFF, 0x00, 0x00, 0x15,},
    1581             Package (0x04) {0x0005FFFF, 0x01, 0x00, 0x16,},
    1582             Package (0x04) {0x0005FFFF, 0x02, 0x00, 0x17,},
    1583             Package (0x04) {0x0005FFFF, 0x03, 0x00, 0x10,},
    1584 
    1585             Package (0x04) {0x0006FFFF, 0x00, 0x00, 0x16,},
    1586             Package (0x04) {0x0006FFFF, 0x01, 0x00, 0x17,},
    1587             Package (0x04) {0x0006FFFF, 0x02, 0x00, 0x10,},
    1588             Package (0x04) {0x0006FFFF, 0x03, 0x00, 0x11,},
    1589 
    1590             Package (0x04) {0x0007FFFF, 0x00, 0x00, 0x17,},
    1591             Package (0x04) {0x0007FFFF, 0x01, 0x00, 0x10,},
    1592             Package (0x04) {0x0007FFFF, 0x02, 0x00, 0x11,},
    1593             Package (0x04) {0x0007FFFF, 0x03, 0x00, 0x12,},
    1594 
    1595             Package (0x04) {0x0008FFFF, 0x00, 0x00, 0x10,},
    1596             Package (0x04) {0x0008FFFF, 0x01, 0x00, 0x11,},
    1597             Package (0x04) {0x0008FFFF, 0x02, 0x00, 0x12,},
    1598             Package (0x04) {0x0008FFFF, 0x03, 0x00, 0x13,},
    1599 
    1600             Package (0x04) {0x0009FFFF, 0x00, 0x00, 0x11,},
    1601             Package (0x04) {0x0009FFFF, 0x01, 0x00, 0x12,},
    1602             Package (0x04) {0x0009FFFF, 0x02, 0x00, 0x13,},
    1603             Package (0x04) {0x0009FFFF, 0x03, 0x00, 0x14,},
    1604 
    1605             Package (0x04) {0x000AFFFF, 0x00, 0x00, 0x12,},
    1606             Package (0x04) {0x000AFFFF, 0x01, 0x00, 0x13,},
    1607             Package (0x04) {0x000AFFFF, 0x02, 0x00, 0x14,},
    1608             Package (0x04) {0x000AFFFF, 0x03, 0x00, 0x15,},
    1609 
    1610             Package (0x04) {0x000BFFFF, 0x00, 0x00, 0x13,},
    1611             Package (0x04) {0x000BFFFF, 0x01, 0x00, 0x14,},
    1612             Package (0x04) {0x000BFFFF, 0x02, 0x00, 0x15,},
    1613             Package (0x04) {0x000BFFFF, 0x03, 0x00, 0x16,},
    1614 
    1615             Package (0x04) {0x000CFFFF, 0x00, 0x00, 0x14,},
    1616             Package (0x04) {0x000CFFFF, 0x01, 0x00, 0x15,},
    1617             Package (0x04) {0x000CFFFF, 0x02, 0x00, 0x16,},
    1618             Package (0x04) {0x000CFFFF, 0x03, 0x00, 0x17,},
    1619 
    1620             Package (0x04) {0x000DFFFF, 0x00, 0x00, 0x15,},
    1621             Package (0x04) {0x000DFFFF, 0x01, 0x00, 0x16,},
    1622             Package (0x04) {0x000DFFFF, 0x02, 0x00, 0x17,},
    1623             Package (0x04) {0x000DFFFF, 0x03, 0x00, 0x10,},
    1624 
    1625             Package (0x04) {0x000EFFFF, 0x00, 0x00, 0x16,},
    1626             Package (0x04) {0x000EFFFF, 0x01, 0x00, 0x17,},
    1627             Package (0x04) {0x000EFFFF, 0x02, 0x00, 0x10,},
    1628             Package (0x04) {0x000EFFFF, 0x03, 0x00, 0x11,},
    1629 
    1630             Package (0x04) {0x000FFFFF, 0x00, 0x00, 0x17,},
    1631             Package (0x04) {0x000FFFFF, 0x01, 0x00, 0x10,},
    1632             Package (0x04) {0x000FFFFF, 0x02, 0x00, 0x11,},
    1633             Package (0x04) {0x000FFFFF, 0x03, 0x00, 0x12,},
    1634 
    1635             Package (0x04) {0x0010FFFF, 0x00, 0x00, 0x10,},
    1636             Package (0x04) {0x0010FFFF, 0x01, 0x00, 0x11,},
    1637             Package (0x04) {0x0010FFFF, 0x02, 0x00, 0x12,},
    1638             Package (0x04) {0x0010FFFF, 0x03, 0x00, 0x13,},
    1639 
    1640             Package (0x04) {0x0011FFFF, 0x00, 0x00, 0x11,},
    1641             Package (0x04) {0x0011FFFF, 0x01, 0x00, 0x12,},
    1642             Package (0x04) {0x0011FFFF, 0x02, 0x00, 0x13,},
    1643             Package (0x04) {0x0011FFFF, 0x03, 0x00, 0x14,},
    1644 
    1645             Package (0x04) {0x0012FFFF, 0x00, 0x00, 0x12,},
    1646             Package (0x04) {0x0012FFFF, 0x01, 0x00, 0x13,},
    1647             Package (0x04) {0x0012FFFF, 0x02, 0x00, 0x14,},
    1648             Package (0x04) {0x0012FFFF, 0x03, 0x00, 0x15,},
    1649 
    1650             Package (0x04) {0x0013FFFF, 0x00, 0x00, 0x13,},
    1651             Package (0x04) {0x0013FFFF, 0x01, 0x00, 0x14,},
    1652             Package (0x04) {0x0013FFFF, 0x02, 0x00, 0x15,},
    1653             Package (0x04) {0x0013FFFF, 0x03, 0x00, 0x16,},
    1654 
    1655             Package (0x04) {0x0014FFFF, 0x00, 0x00, 0x14,},
    1656             Package (0x04) {0x0014FFFF, 0x01, 0x00, 0x15,},
    1657             Package (0x04) {0x0014FFFF, 0x02, 0x00, 0x16,},
    1658             Package (0x04) {0x0014FFFF, 0x03, 0x00, 0x17,},
    1659 
    1660             Package (0x04) {0x0015FFFF, 0x00, 0x00, 0x15,},
    1661             Package (0x04) {0x0015FFFF, 0x01, 0x00, 0x16,},
    1662             Package (0x04) {0x0015FFFF, 0x02, 0x00, 0x17,},
    1663             Package (0x04) {0x0015FFFF, 0x03, 0x00, 0x10,},
    1664 
    1665             Package (0x04) {0x0016FFFF, 0x00, 0x00, 0x16,},
    1666             Package (0x04) {0x0016FFFF, 0x01, 0x00, 0x17,},
    1667             Package (0x04) {0x0016FFFF, 0x02, 0x00, 0x10,},
    1668             Package (0x04) {0x0016FFFF, 0x03, 0x00, 0x11,},
    1669 
    1670             Package (0x04) {0x0017FFFF, 0x00, 0x00, 0x17,},
    1671             Package (0x04) {0x0017FFFF, 0x01, 0x00, 0x10,},
    1672             Package (0x04) {0x0017FFFF, 0x02, 0x00, 0x11,},
    1673             Package (0x04) {0x0017FFFF, 0x03, 0x00, 0x12,},
    1674 
    1675             Package (0x04) {0x0018FFFF, 0x00, 0x00, 0x10,},
    1676             Package (0x04) {0x0018FFFF, 0x01, 0x00, 0x11,},
    1677             Package (0x04) {0x0018FFFF, 0x02, 0x00, 0x12,},
    1678             Package (0x04) {0x0018FFFF, 0x03, 0x00, 0x13,},
    1679 
    1680             Package (0x04) {0x0019FFFF, 0x00, 0x00, 0x11,},
    1681             Package (0x04) {0x0019FFFF, 0x01, 0x00, 0x12,},
    1682             Package (0x04) {0x0019FFFF, 0x02, 0x00, 0x13,},
    1683             Package (0x04) {0x0019FFFF, 0x03, 0x00, 0x14,},
    1684 
    1685             Package (0x04) {0x001AFFFF, 0x00, 0x00, 0x12,},
    1686             Package (0x04) {0x001AFFFF, 0x01, 0x00, 0x13,},
    1687             Package (0x04) {0x001AFFFF, 0x02, 0x00, 0x14,},
    1688             Package (0x04) {0x001AFFFF, 0x03, 0x00, 0x15,},
    1689 
    1690             Package (0x04) {0x001BFFFF, 0x00, 0x00, 0x13,},
    1691             Package (0x04) {0x001BFFFF, 0x01, 0x00, 0x14,},
    1692             Package (0x04) {0x001BFFFF, 0x02, 0x00, 0x15,},
    1693             Package (0x04) {0x001BFFFF, 0x03, 0x00, 0x16,},
    1694 
    1695             Package (0x04) {0x001CFFFF, 0x00, 0x00, 0x14,},
    1696             Package (0x04) {0x001CFFFF, 0x01, 0x00, 0x15,},
    1697             Package (0x04) {0x001CFFFF, 0x02, 0x00, 0x16,},
    1698             Package (0x04) {0x001CFFFF, 0x03, 0x00, 0x17,},
    1699 
    1700             Package (0x04) {0x001DFFFF, 0x00, 0x00, 0x15,},
    1701             Package (0x04) {0x001DFFFF, 0x01, 0x00, 0x16,},
    1702             Package (0x04) {0x001DFFFF, 0x02, 0x00, 0x17,},
    1703             Package (0x04) {0x001DFFFF, 0x03, 0x00, 0x10,},
    1704 
    1705             Package (0x04) {0x001EFFFF, 0x00, 0x00, 0x16,},
    1706             Package (0x04) {0x001EFFFF, 0x01, 0x00, 0x17,},
    1707             Package (0x04) {0x001EFFFF, 0x02, 0x00, 0x10,},
    1708             Package (0x04) {0x001EFFFF, 0x03, 0x00, 0x11,},
    1709 
    1710             Package (0x04) {0x001FFFFF, 0x00, 0x00, 0x17,},
    1711             Package (0x04) {0x001FFFFF, 0x01, 0x00, 0x10,},
    1712             Package (0x04) {0x001FFFFF, 0x02, 0x00, 0x11,},
    1713             Package (0x04) {0x001FFFFF, 0x03, 0x00, 0x12,}
    1714         })
    1715 
    1716         // Possible resource settings for PCI link A
    1717         Name (PRSA, ResourceTemplate ()
    1718         {
    1719             IRQ (Level, ActiveLow, Shared) {5,9,10,11}
    1720         })
    1721 
    1722         // Possible resource settings for PCI link B
    1723         Name (PRSB, ResourceTemplate ()
    1724         {
    1725             IRQ (Level, ActiveLow, Shared) {5,9,10,11}
    1726         })
    1727 
    1728         // Possible resource settings for PCI link C
    1729         Name (PRSC, ResourceTemplate ()
    1730         {
    1731             IRQ (Level, ActiveLow, Shared) {5,9,10,11}
    1732         })
    1733 
    1734         // Possible resource settings for PCI link D
    1735         Name (PRSD, ResourceTemplate ()
    1736         {
    1737             IRQ (Level, ActiveLow, Shared) {5,9,10,11}
    1738         })
    1739 
    1740         // PCI bus 0
    1741         Device (PCI0)
    1742         {
    1743             Name (_HID, EisaId ("PNP0A03"))
    1744             Name (_ADR, 0x00) // address
    1745             Name (_BBN, 0x00) // base bus adddress
    1746             Name (_UID, 0x00)
    1747 
    1748             // Method that returns routing table
    1749             Method (_PRT, 0, NotSerialized)
    1750             {
    1751                 if (LEqual (LAnd (PICM, UIOA), Zero)) {
    1752                     DBG ("RETURNING PIC\n")
    1753                     Store (0x00, \_SB.PCI0.SBRG.APDE)
    1754                     Store (0x00, \_SB.PCI0.SBRG.APAD)
    1755                     Return (PR00)
    1756                 }
    1757                 else {
    1758                     DBG ("RETURNING APIC\n")
    1759                     Store (0xbe, \_SB.PCI0.SBRG.APDE)
    1760                     Store (0xef, \_SB.PCI0.SBRG.APAD)
    1761                     Return (PR01)
    1762                 }
    1763             }
    1764 
    1765             Device (SBRG)
    1766             {
    1767                 // Address of the PIIX3 (device 1 function 0)
    1768                 Name (_ADR, 0x00010000)
    1769                 OperationRegion (PCIC, PCI_Config, 0x00, 0xff)
    1770 
    1771                 Field (PCIC, ByteAcc, NoLock, Preserve)
    1772                 {
    1773                     Offset (0xad),
    1774                     APAD,   8,
    1775                     Offset (0xde),
    1776                     APDE,   8,
    1777                 }
    1778 
    1779                 // Keyboard device
    1780                 Device (PS2K)
    1781                 {
    1782                     Name (_HID, EisaId ("PNP0303"))
    1783                     Method (_STA, 0, NotSerialized)
    1784                     {
    1785                         Return (0x0F)
    1786                     }
    1787 
    1788                     Name (_CRS, ResourceTemplate ()
    1789                     {
    1790                         IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
    1791                         IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
    1792                         IRQNoFlags () {1}
    1793                     })
    1794                 }
    1795 
    1796                 // DMA Controller
    1797                 Device (DMAC)
    1798                 {
    1799                     Name (_HID, EisaId ("PNP0200"))
    1800                     Name (_CRS, ResourceTemplate ()
    1801                     {
    1802                         IO (Decode16, 0x0000, 0x0000, 0x01, 0x10)
    1803                         IO (Decode16, 0x0080, 0x0080, 0x01, 0x10)
    1804                         IO (Decode16, 0x00C0, 0x00C0, 0x01, 0x20)
    1805                         DMA (Compatibility, BusMaster, Transfer8_16) {4}
    1806                     })
    1807                 }
    1808 
    1809                 // Floppy disk controller
    1810                 Device (FDC0)
    1811                 {
    1812                     Name (_HID, EisaId ("PNP0700"))
    1813 
    1814                     Method (_STA, 0, NotSerialized)
    1815                     {
    1816                         Return (UFDC)
    1817                     }
    1818 
    1819                     // Current resource settings
    1820                     Name (_CRS, ResourceTemplate ()
    1821                     {
    1822                         IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
    1823                         IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
    1824                         IRQNoFlags () {6}
    1825                         DMA (Compatibility, NotBusMaster, Transfer8) {2}
    1826                     })
    1827 
    1828                     // Possible resource settings
    1829                     Name (_PRS, ResourceTemplate ()
    1830                     {
    1831                         IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
    1832                         IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
    1833                         IRQNoFlags () {6}
    1834                         DMA (Compatibility, NotBusMaster, Transfer8) {2}
    1835                     })
    1836 
    1837                 }
    1838 
    1839                 // Mouse device
    1840                 Device (PS2M)
    1841                 {
    1842                     Name (_HID, EisaId ("PNP0F03"))
    1843                     Method (_STA, 0, NotSerialized)
    1844                     {
    1845                         Return (0x0F)
    1846                     }
    1847 
    1848                     Name (_CRS, ResourceTemplate ()
    1849                     {
    1850                         IRQNoFlags () {12}
    1851                     })
    1852                 }
    1853 
    1854                 // Parallel port
    1855                 Device (LPT)
    1856                 {
    1857                     Name (_HID, EisaId ("PNP0400"))
    1858                     Method (_STA, 0, NotSerialized)
    1859                     {
    1860                         Return (0x0F)
    1861                     }
    1862                     Name (_CRS, ResourceTemplate ()
    1863                     {
    1864                         IO (Decode16, 0x0378, 0x0378, 0x08, 0x08)
    1865                         IO (Decode16, 0x0778, 0x0778, 0x08, 0x08)
    1866                         IRQNoFlags () {7}
    1867                     })
    1868                 }
    1869 
    1870                 // RTC and CMOS
    1871                 Device (RTC)
    1872                 {
    1873                     Name (_HID, EisaId ("PNP0B00"))
    1874                     Name (_CRS, ResourceTemplate ()
    1875                     {
    1876                       IO (Decode16,
    1877                           0x0070,             // Range Minimum
    1878                           0x0070,             // Range Maximum
    1879                           0x01,               // Alignment
    1880                           0x02,               // Length
    1881                       )
    1882                     })
    1883                     Method (_STA, 0, NotSerialized)
    1884                     {
    1885                        Return (0x0f)
    1886                     }
    1887                 }
    1888 
    1889                 // System Management Controller
    1890                 Device (SMC)
    1891                 {
    1892                     Name (_HID, EisaId ("APP0001"))
    1893                     Name (_CID, "smc-napa")
    1894 
    1895                     Method (_STA, 0, NotSerialized)
    1896                     {
    1897                        Return (USMC)
    1898                     }
    1899                     Name (_CRS, ResourceTemplate ()
    1900                     {
    1901                        IO (Decode16,
    1902                            0x0300,             // Range Minimum
    1903                            0x0300,             // Range Maximum
    1904                            0x01,               // Alignment
    1905                            0x20,               // Length
    1906                     )
    1907                     // This line seriously confuses Windows ACPI driver, so not even try to
    1908                     // enable SMC for Windows guests
    1909                     IRQNoFlags () {8}
    1910                  })
    1911                }
    1912             }
    1913 
    1914             // Control method battery
    1915             Device (BAT0)
    1916             {
    1917                 Name (_HID, EisaId ("PNP0C0A"))
    1918                 Name (_UID, 0x00)
    1919 
    1920                 Scope (\_GPE)
    1921                 {
    1922                     // GPE bit 0 handler
    1923                     // GPE.0 must be set and SCI raised when
    1924                     // battery info changed and _BIF must be
    1925                     // re-evaluated
    1926                     Method (_L00, 0, NotSerialized)
    1927                     {
    1928                             Notify (\_SB.PCI0.BAT0, 0x81)
    1929                     }
    1930                 }
    1931 
    1932                 OperationRegion (CBAT, SystemIO, 0x4040, 0x08)
    1933                 Field (CBAT, DwordAcc, NoLock, Preserve)
    1934                 {
    1935                     IDX0, 32,
    1936                     DAT0, 32,
    1937                 }
    1938 
    1939                 IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
    1940                 {
    1941                     STAT, 32,
    1942                     PRAT, 32,
    1943                     RCAP, 32,
    1944                     PVOL, 32,
    1945 
    1946                     UNIT, 32,
    1947                     DCAP, 32,
    1948                     LFCP, 32,
    1949                     BTEC, 32,
    1950                     DVOL, 32,
    1951                     DWRN, 32,
    1952                     DLOW, 32,
    1953                     GRN1, 32,
    1954                     GRN2, 32,
    1955 
    1956                     BSTA, 32,
    1957                     APSR, 32,
    1958                 }
    1959 
    1960                 Method (_STA, 0, NotSerialized)
    1961                 {
    1962                     return (BSTA)
    1963                 }
    1964 
    1965                 Name (PBIF, Package ()
    1966                 {
    1967                     0x01,       // Power unit, 1 - mA
    1968                     0x7fffffff, // Design capacity
    1969                     0x7fffffff, // Last full charge capacity
    1970                     0x00,       // Battery technology
    1971                     0xffffffff, // Design voltage
    1972                     0x00,       // Design capacity of Warning
    1973                     0x00,       // Design capacity of Low
    1974                     0x04,       // Battery capacity granularity 1
    1975                     0x04,       // Battery capacity granularity 2
    1976                     "1",        // Model number
    1977                     "0",        // Serial number
    1978                     "VBOX",     // Battery type
    1979                     "innotek"   // OEM Information
    1980                 })
    1981 
    1982                 Name (PBST, Package () {
    1983                     0,          // Battery state
    1984                     0x7fffffff, // Battery present rate
    1985                     0x7fffffff, // Battery remaining capacity
    1986                     0x7fffffff  // Battery present voltage
    1987                 })
    1988 
    1989                 // Battery information
    1990                 Method (_BIF, 0, NotSerialized)
    1991                 {
    1992                     Store (UNIT, Index (PBIF, 0,))
    1993                     Store (DCAP, Index (PBIF, 1,))
    1994                     Store (LFCP, Index (PBIF, 2,))
    1995                     Store (BTEC, Index (PBIF, 3,))
    1996                     Store (DVOL, Index (PBIF, 4,))
    1997                     Store (DWRN, Index (PBIF, 5,))
    1998                     Store (DLOW, Index (PBIF, 6,))
    1999                     Store (GRN1, Index (PBIF, 7,))
    2000                     Store (GRN2, Index (PBIF, 8,))
    2001 
    2002                     DBG ("_BIF:\n")
    2003                     HEX4 (DerefOf (Index (PBIF, 0,)))
    2004                     HEX4 (DerefOf (Index (PBIF, 1,)))
    2005                     HEX4 (DerefOf (Index (PBIF, 2,)))
    2006                     HEX4 (DerefOf (Index (PBIF, 3,)))
    2007                     HEX4 (DerefOf (Index (PBIF, 4,)))
    2008                     HEX4 (DerefOf (Index (PBIF, 5,)))
    2009                     HEX4 (DerefOf (Index (PBIF, 6,)))
    2010                     HEX4 (DerefOf (Index (PBIF, 7,)))
    2011                     HEX4 (DerefOf (Index (PBIF, 8,)))
    2012 
    2013                     return (PBIF)
    2014                 }
    2015 
    2016                 // Battery status
    2017                 Method (_BST, 0, NotSerialized)
    2018                 {
    2019                     Store (STAT, Index (PBST, 0,))
    2020                     Store (PRAT, Index (PBST, 1,))
    2021                     Store (RCAP, Index (PBST, 2,))
    2022                     Store (PVOL, Index (PBST, 3,))
    2023 /*
    2024                     DBG ("_BST:\n")
    2025                     HEX4 (DerefOf (Index (PBST, 0,)))
    2026                     HEX4 (DerefOf (Index (PBST, 1,)))
    2027                     HEX4 (DerefOf (Index (PBST, 2,)))
    2028                     HEX4 (DerefOf (Index (PBST, 3,)))
    2029 */
    2030                     return (PBST)
    2031                 }
    2032             }
    2033 
    2034             Device (AC)
    2035             {
    2036                 Name (_HID, "ACPI0003")
    2037                 Name (_UID, 0x00)
    2038                 Name (_PCL, Package (0x01)
    2039                 {
    2040                     \_SB
    2041                 })
    2042 
    2043                 Method (_PSR, 0, NotSerialized)
    2044                 {
    2045                     // DBG ("_PSR:\n")
    2046                     // HEX4 (\_SB.PCI0.BAT0.APSR)
    2047                     return (\_SB.PCI0.BAT0.APSR)
    2048                 }
    2049 
    2050                 Method (_STA, 0, NotSerialized)
    2051                 {
    2052                     return (0x0f)
    2053                 }
    2054             }
    2055         }
    2056     }
    2057 
    2058     Scope (\_SB)
    2059     {
    2060         Scope (PCI0)
    2061         {
    2062             // PCI0 current resource settings
    2063             Name (CRS, ResourceTemplate ()
    2064             {
    2065                 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
    2066                                0x0000,
    2067                                0x0000,
    2068                                0x00FF,
    2069                                0x0000,
    2070                                0x0100)
    2071                 IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08)
    2072                 WordIO (ResourceProducer, MinFixed, MaxFixed,
    2073                         PosDecode, EntireRange,
    2074                         0x0000,
    2075                         0x0000,
    2076                         0x0CF7,
    2077                         0x0000,
    2078                         0x0CF8)
    2079                 WordIO (ResourceProducer, MinFixed, MaxFixed,
    2080                         PosDecode, EntireRange,
    2081                         0x0000,
    2082                         0x0D00,
    2083                         0xFFFF,
    2084                         0x0000,
    2085                         0xF300)
    2086 
    2087                 /* Taken from ACPI faq (with some modifications) */
    2088                 DwordMemory( // descriptor for video RAM behind ISA bus
    2089                      ResourceProducer,        // bit 0 of general flags is 0
    2090                      PosDecode,
    2091                      MinFixed,                // Range is fixed
    2092                      MaxFixed,                // Range is Fixed
    2093                      Cacheable,
    2094                      ReadWrite,
    2095                      0x00000000,              // Granularity
    2096                      0x000a0000,              // Min
    2097                      0x000bffff,              // Max
    2098                      0x00000000,              // Translation
    2099                      0x00020000               // Range Length
    2100                      )
    2101 
    2102                 DwordMemory( // Consumed-and-produced resource
    2103                              // (all of low memory space)
    2104                      ResourceProducer,        // bit 0 of general flags is 0
    2105                      PosDecode,               // positive Decode
    2106                      MinFixed,                // Range is fixed
    2107                      MaxFixed,                // Range is fixed
    2108                      Cacheable,
    2109                      ReadWrite,
    2110                      0x00000000,              // Granularity
    2111                      0x00000000,              // Min (calculated dynamically)
    2112 
    2113                      0xffdfffff,              // Max = 4GB - 2MB
    2114                      0x00000000,              // Translation
    2115                      0xdfdfffff,              // Range Length (calculated
    2116                                               // dynamically)
    2117                      ,                        // Optional field left blank
    2118                      ,                        // Optional field left blank
    2119                      MEM3                     // Name declaration for this
    2120                                               //  descriptor
    2121                      )
    2122             })
    2123 
    2124 //            Name (TOM, ResourceTemplate ()      // Memory above 4GB (aka high), appended when needed.
    2125 //            {
    2126 //                QWORDMemory(
    2127 //                    ResourceProducer,           // bit 0 of general flags is 0
    2128 //                    PosDecode,                  // positive Decode
    2129 //                    MinFixed,                   // Range is fixed
    2130 //                    MaxFixed,                   // Range is fixed
    2131 //                    Cacheable,
    2132 //                    ReadWrite,
    2133 //                    0x0000000000000000,         // _GRA: Granularity.
    2134 //                    0 /*0x0000000100000000*/,   // _MIN: Min address, 4GB.
    2135 //                    0 /*0x00000fffffffffff*/,   // _MAX: Max possible address, 16TB.
    2136 //                    0x0000000000000000,         // _TRA: Translation
    2137 //                    0x0000000000000000,         // _LEN: Range length (calculated dynamically)
    2138 //                    ,                           // ResourceSourceIndex: Optional field left blank
    2139 //                    ,                           // ResourceSource:      Optional field left blank
    2140 //                    MEM4                        // Name declaration for this descriptor.
    2141 //                    )
    2142 //            })
    2143 
    2144             Method (_CRS, 0, NotSerialized)
    2145             {
    2146                 CreateDwordField (CRS, \_SB.PCI0.MEM3._MIN, RAMT)
    2147                 CreateDwordField (CRS, \_SB.PCI0.MEM3._LEN, RAMR)
    2148 //                CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4L)
    2149 //                CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4N)
    2150 //                CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4X)
    2151 
    2152                 Store (MEML, RAMT)
    2153                 Subtract (0xffe00000, RAMT, RAMR)
    2154 
    2155 //                If (LNotEqual (MEMH, 0x00000000))
    2156 //                {
    2157 //                    //
    2158 //                    // Update the TOM resource template and append it to CRS.
    2159 //                    // This way old < 4GB guest doesn't see anything different.
    2160 //                    // (MEMH is the memory above 4GB specified in 64KB units.)
    2161 //                    //
    2162 //                    // Note: ACPI v2 doesn't do 32-bit integers. IASL may fail on
    2163 //                    //       seeing 64-bit constants and the code probably wont work.
    2164 //                    //
    2165 //                    Store (1, TM4N)
    2166 //                    ShiftLeft (TM4N, 32, TM4N)
    2167 //
    2168 //                    Store (0x00000fff, TM4X)
    2169 //                    ShiftLeft (TM4X, 32, TM4X)
    2170 //                    Or (TM4X, 0xffffffff, TM4X)
    2171 //
    2172 //                    Store (MEMH, TM4L)
    2173 //                    ShiftLeft (TM4L, 16, TM4L)
    2174 //
    2175 //                    ConcatenateResTemplate (CRS, TOM, Local2)
    2176 //                    Return (Local2)
    2177 //                }
    2178 
    2179                 Return (CRS)
    2180             }
    2181         }
    2182     }
    2183 
    2184     Scope (\_SB)
    2185     {
    2186          // High Precision Event Timer
    2187         Device(HPET) {
    2188             Name(_HID,  EISAID("PNP0103"))
    2189             Name (_CID, 0x010CD041)
    2190             Name(_UID, 0)
    2191             Method (_STA, 0, NotSerialized) {
    2192                     Return(UHPT)
    2193             }
    2194             Name(_CRS, ResourceTemplate() {
    2195                 DWordMemory(
    2196                     ResourceConsumer, PosDecode, MinFixed, MaxFixed,
    2197                     NonCacheable, ReadWrite,
    2198                     0x00000000,
    2199                     0xFED00000,
    2200                     0xFED003FF,
    2201                     0x00000000,
    2202                     0x00000400 /* 1K memory: FED00000 - FED003FF */
    2203                 )
    2204             })
    2205         }
    2206        
    2207         // Fields within PIIX3 configuration[0x60..0x63] with
    2208         // IRQ mappings
    2209         Field (\_SB.PCI0.SBRG.PCIC, ByteAcc, NoLock, Preserve)
    2210         {
    2211             Offset (0x60),
    2212             PIRA,   8,
    2213             PIRB,   8,
    2214             PIRC,   8,
    2215             PIRD,   8
    2216         }
    2217 
    2218         Name (BUFA, ResourceTemplate ()
    2219         {
    2220             IRQ (Level, ActiveLow, Shared) {15}
    2221         })
    2222         CreateWordField (BUFA, 0x01, ICRS)
    2223 
    2224         // Generic status of IRQ routing entry
    2225         Method (LSTA, 1, NotSerialized)
    2226         {
    2227             And (Arg0, 0x80, Local0)
    2228 //            DBG ("LSTA: ")
    2229 //            HEX (Arg0)
    2230             If (Local0)
    2231             {
    2232                 Return (0x09)
    2233             }
    2234             Else
    2235             {
    2236                 Return (0x0B)
    2237             }
    2238         }
    2239 
    2240         // Generic "current resource settings" for routing entry
    2241         Method (LCRS, 1, NotSerialized)
    2242         {
    2243             And (Arg0, 0x0F, Local0)
    2244             ShiftLeft (0x01, Local0, ICRS)
    2245 //            DBG ("LCRS: ")
    2246 //            HEX (ICRS)
    2247             Return (BUFA)
    2248         }
    2249 
    2250         // Generic "set resource settings" for routing entry
    2251         Method (LSRS, 1, NotSerialized)
    2252         {
    2253             CreateWordField (Arg0, 0x01, ISRS)
    2254             FindSetRightBit (ISRS, Local0)
    2255             Return (Decrement (Local0))
    2256         }
    2257 
    2258         // Generic "disable" for routing entry
    2259         Method (LDIS, 1, NotSerialized)
    2260         {
    2261             Return (Or (Arg0, 0x80))
    2262         }
    2263 
    2264         // Link A
    2265         Device (LNKA)
    2266         {
    2267             Name (_HID, EisaId ("PNP0C0F"))
    2268             Name (_UID, 0x01)
    2269 
    2270             // Status
    2271             Method (_STA, 0, NotSerialized)
    2272             {
    2273                 DBG ("LNKA._STA\n")
    2274                 Return (LSTA (PIRA))
    2275             }
    2276 
    2277             // Possible resource settings
    2278             Method (_PRS, 0, NotSerialized)
    2279             {
    2280                 DBG ("LNKA._PRS\n")
    2281                 Return (PRSA)
    2282             }
    2283 
    2284             // Disable
    2285             Method (_DIS, 0, NotSerialized)
    2286             {
    2287                 DBG ("LNKA._DIS\n")
    2288                 Store (LDIS (PIRA), PIRA)
    2289             }
    2290 
    2291             // Current resource settings
    2292             Method (_CRS, 0, NotSerialized)
    2293             {
    2294                 DBG ("LNKA._CRS\n")
    2295                 Return (LCRS (PIRA))
    2296             }
    2297 
    2298             // Set resource settings
    2299             Method (_SRS, 1, NotSerialized)
    2300             {
    2301                 DBG ("LNKA._SRS: ")
    2302                 HEX (LSRS (Arg0))
    2303                 Store (LSRS (Arg0), PIRA)
    2304             }
    2305         }
    2306 
    2307         // Link B
    2308         Device (LNKB)
    2309         {
    2310             Name (_HID, EisaId ("PNP0C0F"))
    2311             Name (_UID, 0x02)
    2312             Method (_STA, 0, NotSerialized)
    2313             {
    2314                 // DBG ("LNKB._STA\n")
    2315                 Return (LSTA (PIRB))
    2316             }
    2317 
    2318             Method (_PRS, 0, NotSerialized)
    2319             {
    2320                 // DBG ("LNKB._PRS\n")
    2321                 Return (PRSB)
    2322             }
    2323 
    2324             Method (_DIS, 0, NotSerialized)
    2325             {
    2326                 // DBG ("LNKB._DIS\n")
    2327                 Store (LDIS (PIRB), PIRB)
    2328             }
    2329 
    2330             Method (_CRS, 0, NotSerialized)
    2331             {
    2332                 // DBG ("LNKB._CRS\n")
    2333                 Return (LCRS (PIRB))
    2334             }
    2335 
    2336             Method (_SRS, 1, NotSerialized)
    2337             {
    2338                 DBG ("LNKB._SRS: ")
    2339                 HEX (LSRS (Arg0))
    2340                 Store (LSRS (Arg0), PIRB)
    2341             }
    2342         }
    2343 
    2344         // Link C
    2345         Device (LNKC)
    2346         {
    2347             Name (_HID, EisaId ("PNP0C0F"))
    2348             Name (_UID, 0x03)
    2349             Method (_STA, 0, NotSerialized)
    2350             {
    2351                 // DBG ("LNKC._STA\n")
    2352                 Return (LSTA (PIRC))
    2353             }
    2354 
    2355             Method (_PRS, 0, NotSerialized)
    2356             {
    2357                 // DBG ("LNKC._PRS\n")
    2358                 Return (PRSC)
    2359             }
    2360 
    2361             Method (_DIS, 0, NotSerialized)
    2362             {
    2363                 // DBG ("LNKC._DIS\n")
    2364                 Store (LDIS (PIRC), PIRC)
    2365             }
    2366 
    2367             Method (_CRS, 0, NotSerialized)
    2368             {
    2369                 // DBG ("LNKC._CRS\n")
    2370                 Return (LCRS (PIRC))
    2371             }
    2372 
    2373             Method (_SRS, 1, NotSerialized)
    2374             {
    2375                 DBG ("LNKC._SRS: ")
    2376                 HEX (LSRS (Arg0))
    2377                 Store (LSRS (Arg0), PIRC)
    2378             }
    2379         }
    2380 
    2381         // Link D
    2382         Device (LNKD)
    2383         {
    2384             Name (_HID, EisaId ("PNP0C0F"))
    2385             Name (_UID, 0x04)
    2386             Method (_STA, 0, NotSerialized)
    2387             {
    2388                 // DBG ("LNKD._STA\n")
    2389                 Return (LSTA (PIRD))
    2390             }
    2391 
    2392             Method (_PRS, 0, NotSerialized)
    2393             {
    2394                 // DBG ("LNKD._PRS\n")
    2395                 Return (PRSD)
    2396             }
    2397 
    2398             Method (_DIS, 0, NotSerialized)
    2399             {
    2400                 // DBG ("LNKD._DIS\n")
    2401                 Store (LDIS (PIRA), PIRD)
    2402             }
    2403 
    2404             Method (_CRS, 0, NotSerialized)
    2405             {
    2406                 // DBG ("LNKD._CRS\n")
    2407                 Return (LCRS (PIRD))
    2408             }
    2409 
    2410             Method (_SRS, 1, NotSerialized)
    2411             {
    2412                 DBG ("LNKD._SRS: ")
    2413                 HEX (LSRS (Arg0))
    2414                 Store (LSRS (Arg0), PIRD)
    2415             }
    2416         }
    2417     }
    2418 
    2419     // Sx states
    2420     Name (_S0, Package (2) {
    2421         0x00,
    2422         0x00,
    2423     })
    2424 
    2425     Name (_S5, Package (2) {
    2426         0x05,
    2427         0x05,
    2428     })
    2429 
    2430     Method (_PTS, 1, NotSerialized)
    2431     {
    2432         DBG ("Prepare to sleep: ")
    2433         HEX (Arg0)
    2434     }
    24352087}
    24362088
  • trunk/src/VBox/Devices/PC/vbox.dsl

    r25987 r26095  
    121121    }
    122122
    123     // Processor object
    124     // #1463: Showing the CPU can make the guest do bad things on it like SpeedStep.
    125     // In this case, XP SP2 contains this buggy Intelppm.sys driver which wants to mess
    126     // with SpeedStep if it finds a CPU object and when it finds out that it can't, it
    127     // tries to unload and crashes (MS probably never tested this code path).
    128     // So we enable this ACPI object only for certain guests, which do need it,
    129     // if by accident Windows guest seen enabled CPU object, just boot from latest
    130     // known good configuration, as it remembers state, even if ACPI object gets disabled.
    131     Scope (\_PR)
    132     {
    133         Processor (CPU0, /* Name */
    134                    0x00, /* Id */
    135                    0x0,  /* Processor IO ports range start */
    136                    0x0   /* Processor IO ports range length */
    137                    )
    138         {
    139         }
    140         Processor (CPU1, /* Name */
    141                    0x01, /* Id */
    142                    0x0,  /* Processor IO ports range start */
    143                    0x0   /* Processor IO ports range length */
    144                    )
    145         {
    146         }
    147         Processor (CPU2, /* Name */
    148                    0x02, /* Id */
    149                    0x0,  /* Processor IO ports range start */
    150                    0x0   /* Processor IO ports range length */
    151                    )
    152         {
    153         }
    154         Processor (CPU3, /* Name */
    155                    0x03, /* Id */
    156                    0x0,  /* Processor IO ports range start */
    157                    0x0   /* Processor IO ports range length */
    158                    )
    159         {
    160         }
    161         Processor (CPU4, /* Name */
    162                    0x04, /* Id */
    163                    0x0,  /* Processor IO ports range start */
    164                    0x0   /* Processor IO ports range length */
    165                    )
    166         {
    167         }
    168         Processor (CPU5, /* Name */
    169                    0x05, /* Id */
    170                    0x0,  /* Processor IO ports range start */
    171                    0x0   /* Processor IO ports range length */
    172                    )
    173         {
    174         }
    175         Processor (CPU6, /* Name */
    176                    0x06, /* Id */
    177                    0x0,  /* Processor IO ports range start */
    178                    0x0   /* Processor IO ports range length */
    179                    )
    180         {
    181         }
    182         Processor (CPU7, /* Name */
    183                    0x07, /* Id */
    184                    0x0,  /* Processor IO ports range start */
    185                    0x0   /* Processor IO ports range length */
    186                    )
    187         {
    188         }
    189         Processor (CPU8, /* Name */
    190                    0x08, /* Id */
    191                    0x0,  /* Processor IO ports range start */
    192                    0x0   /* Processor IO ports range length */
    193                    )
    194         {
    195         }
    196         Processor (CPU9, /* Name */
    197                    0x09, /* Id */
    198                    0x0,  /* Processor IO ports range start */
    199                    0x0   /* Processor IO ports range length */
    200                    )
    201         {
    202         }
    203         Processor (CPUA, /* Name */
    204                    0x0a, /* Id */
    205                    0x0,  /* Processor IO ports range start */
    206                    0x0   /* Processor IO ports range length */
    207                    )
    208         {
    209         }
    210         Processor (CPUB, /* Name */
    211                    0x0b, /* Id */
    212                    0x0,  /* Processor IO ports range start */
    213                    0x0   /* Processor IO ports range length */
    214                    )
    215         {
    216         }
    217         Processor (CPUC, /* Name */
    218                    0x0c, /* Id */
    219                    0x0,  /* Processor IO ports range start */
    220                    0x0   /* Processor IO ports range length */
    221                    )
    222         {
    223         }
    224         Processor (CPUD, /* Name */
    225                    0x0d, /* Id */
    226                    0x0,  /* Processor IO ports range start */
    227                    0x0   /* Processor IO ports range length */
    228                    )
    229         {
    230         }
    231         Processor (CPUE, /* Name */
    232                    0x0e, /* Id */
    233                    0x0,  /* Processor IO ports range start */
    234                    0x0   /* Processor IO ports range length */
    235                    )
    236         {
    237         }
    238         Processor (CPUF, /* Name */
    239                    0x0f, /* Id */
    240                    0x0,  /* Processor IO ports range start */
    241                    0x0   /* Processor IO ports range length */
    242                    )
    243         {
    244         }
    245         Processor (CPUG, /* Name */
    246                    0x10, /* Id */
    247                    0x0,  /* Processor IO ports range start */
    248                    0x0   /* Processor IO ports range length */
    249                    )
    250         {
    251         }
    252         Processor (CPUH, /* Name */
    253                    0x11, /* Id */
    254                    0x0,  /* Processor IO ports range start */
    255                    0x0   /* Processor IO ports range length */
    256                    )
    257         {
    258         }
    259         Processor (CPUI, /* Name */
    260                    0x12, /* Id */
    261                    0x0,  /* Processor IO ports range start */
    262                    0x0   /* Processor IO ports range length */
    263                    )
    264         {
    265         }
    266         Processor (CPUJ, /* Name */
    267                    0x13, /* Id */
    268                    0x0,  /* Processor IO ports range start */
    269                    0x0   /* Processor IO ports range length */
    270                    )
    271         {
    272         }
    273         Processor (CPUK, /* Name */
    274                    0x14, /* Id */
    275                    0x0,  /* Processor IO ports range start */
    276                    0x0   /* Processor IO ports range length */
    277                    )
    278         {
    279         }
    280         Processor (CPUL, /* Name */
    281                    0x15, /* Id */
    282                    0x0,  /* Processor IO ports range start */
    283                    0x0   /* Processor IO ports range length */
    284                    )
    285         {
    286         }
    287         Processor (CPUM, /* Name */
    288                    0x16, /* Id */
    289                    0x0,  /* Processor IO ports range start */
    290                    0x0   /* Processor IO ports range length */
    291                    )
    292         {
    293         }
    294         Processor (CPUN, /* Name */
    295                    0x17, /* Id */
    296                    0x0,  /* Processor IO ports range start */
    297                    0x0   /* Processor IO ports range length */
    298                    )
    299         {
    300         }
    301         Processor (CPUO, /* Name */
    302                    0x18, /* Id */
    303                    0x0,  /* Processor IO ports range start */
    304                    0x0   /* Processor IO ports range length */
    305                    )
    306         {
    307         }
    308         Processor (CPUP, /* Name */
    309                    0x19, /* Id */
    310                    0x0,  /* Processor IO ports range start */
    311                    0x0   /* Processor IO ports range length */
    312                    )
    313         {
    314         }
    315         Processor (CPUQ, /* Name */
    316                    0x1a, /* Id */
    317                    0x0,  /* Processor IO ports range start */
    318                    0x0   /* Processor IO ports range length */
    319                    )
    320         {
    321         }
    322         Processor (CPUR, /* Name */
    323                    0x1b, /* Id */
    324                    0x0,  /* Processor IO ports range start */
    325                    0x0   /* Processor IO ports range length */
    326                    )
    327         {
    328         }
    329         Processor (CPUS, /* Name */
    330                    0x1c, /* Id */
    331                    0x0,  /* Processor IO ports range start */
    332                    0x0   /* Processor IO ports range length */
    333                    )
    334         {
    335         }
    336         Processor (CPUT, /* Name */
    337                    0x1d, /* Id */
    338                    0x0,  /* Processor IO ports range start */
    339                    0x0   /* Processor IO ports range length */
    340                    )
    341         {
    342         }
    343         Processor (CPUU, /* Name */
    344                    0x1e, /* Id */
    345                    0x0,  /* Processor IO ports range start */
    346                    0x0   /* Processor IO ports range length */
    347                    )
    348         {
    349         }
    350         Processor (CPUV, /* Name */
    351                    0x1f, /* Id */
    352                    0x0,  /* Processor IO ports range start */
    353                    0x0   /* Processor IO ports range length */
    354                    )
    355         {
    356         }
    357        
    358     }
    359 
    360123    Scope (\_SB)
    361124    {
     
    376139            // @todo: maybe make it bitmask instead?
    377140            UCP0,  32,
    378             UCP1,  32, 
    379             UCP2,  32, 
    380             UCP3,  32, 
     141            UCP1,  32,
     142            UCP2,  32,
     143            UCP3,  32,
    381144            MEMH,  32,
    382145            URTC,  32,
     146            CPUL,  32,
     147            CPUC,  32,
    383148            Offset (0x80),
    384149            ININ, 32,
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette