Menu

ACPI

apianti arsr4du

Home > Configuration > ACPI

<key>ACPI</key>
<dict>
...
</dict>

Parameter group affecting various corrections of ACPI tables. This is a rather complex topic. There are several versions of ACPI specifications and additionally Mac has its own requirements. Often vendors are too lazy to write proper tables and internal devices may not be listed or CPU definitions are missing completely.

Table of Contents


ResetAddress and ResetValue

<key>ResetAddress</key>
<string>0x64</string>
<key>ResetValue</key>
<string>0xFE</string>

These two parameters serve a very important purpose: to fix restart. These values theoretically should be in the FADT table, but it is not always the case. Furthermore, FADT may be shorter than required and not contain them at all. Default values are 0x64/0xFE, which means a restart through the PS2 controller.
However, this does not work on every system and you can alternatively use 0x0CF9/0x06, which indicates a restart though the PCI rail. This is the default value for real Macs but does not always work on a hackintosh. The difference is clear: a hackintosh additionally has a PS2 controller, which may prevent rebooting, if not disabled.
Last but not least you can set them to 0x0/0x0 to allow the use of default FACP values. If not present, the default values states above will be used instead.


smartUPS

<key>smartUPS</key>
<string>No</string>

This parameter affects the power profile, which will be written into table FADT.

Value|Type|Power supply type :---|:---|:--- 1|Desktop|AC 2|Mobile|Battery 3|Server|SmartUPS

Clover will choose between 1 and 2 according to the mobility bit and according to the Mobile parameter in SMBIOS. It is, for example, possible to fake a mobile MacMini. Value 3 will be chosen if this parameter is enabled.


PatchAPIC

<key>PatchAPIC</key>
<string>No</string>

Some systems can either be started using the kernel parameter cpus=1, or by using a patched kernel (Lapic NMI). It turns out that in these case the table MADT is incomplete and missing the NMI section. Enabling this parameter will cause Clover to automatically correct this table. If the table already is complete, then nothing will be changed.


HaltEnabler

<key>HaltEnabler</key>
<true>

It works as OpenHaltRestart, clearing SLP_SMI_EN at start of OSX system.


UseSystemIO

<key>UseSystemIO</key>
<true>

Key UseSystemIO at SSDT section will serve to choose in the generated _CST tables between:

Register (FFixedHW,
Register (SystemIO,

DSDT

<key>DSDT</key>
<dict>
...
</dict>

Parameter group affecting DSDT.


DSDT / Name

<key>Name</key>
<string>DSDT.aml</string>

File name of the binary DSDT file to load and inject.


DSDT / FixMask

Deprecated! Replaced by Fixes.

<key>FixMask</key>
<string>0xFFFF</string>

This parameter represents a whole set of DSDT patches masked in the digit 0xFFFF. Following options are available:

//0x00FF
#define FIX_DTGP      bit(0)
#define FIX_WARNING   bit(1)
#define FIX_SHUTDOWN  bit(2)
#define FIX_MCHC      bit(3)
#define FIX_HPET      bit(4)
#define FIX_LPC       bit(5)
#define FIX_IPIC      bit(6)
#define FIX_SBUS      bit(7)
//0xFF00
#define FIX_DISPLAY   bit(8)
#define FIX_IDE       bit(9)
#define FIX_SATA      bit(10)
#define FIX_FIREWIRE  bit(11)
#define FIX_USB       bit(12)
#define FIX_LAN       bit(13)
#define FIX_WIFI      bit(14)
#define FIX_HDA       bit(15)

To calculate the mask you can use the Calculator app, switch into Programmer view and turn on the hexadecimal numbering system. Switch bits 0 to 15 to generate the required mask. Example with enabled FIX_DTGP and FIX_MCHC:

img

Alternatively you can use the mask calculator by cVaD.

See Fixing DSDT for a detailed description of these options.


DSDT / Fixes

<key>Fixes</key>
<dict>
...
</dict>

This parameter represents a whole set of DSDT patches which can be activated individually. Following options are available:

<key>AddDTGP_0001</key>
<true/>
<key>FixDarwin_0002</key>
<true/>
<key>FixShutdown_0004</key>
<true/>
<key>AddMCHC_0008</key>
<true/>
<key>FixHPET_0010</key>
<true/>
<key>FakeLPC_0020</key>
<true/>
<key>FixIPIC_0040</key>
<true/>
<key>FixSBUS_0080</key>
<true/>
<key>FixDisplay_0100</key>
<true/>
<key>FixIDE_0200</key>
<true/>
<key>FixSATA_0400</key>
<true/>
<key>FixFirewire_0800</key>
<true/>
<key>FixUSB_1000</key>
<true/>
<key>FixLAN_2000</key>
<true/>
<key>FixAirport_4000</key>
<true/>
<key>FixHDA_8000</key>
<true/>
  • AddDTGP_0001
    Inserts Method (DTGP) into DSDT. It is required for _DSM methods, so if you use some other DSDT fix to inject device properties then you must enable this. No sense to use this method without other fixes.
  • FixDarwin_0002
    Provide a set of corrections to DSDT to make your system "Darwin" to be identified as "Windows 2001", like most ACPI systems. More ACPI devices will work in this mode. Old way this bit also provide fixes FIX_WAK_200000, DeleteUnused_400000, FIX_ACST_4000000, FIX_S3D_2000000, AddPNLF_1000000, FIX_ADP1_800000.
  • FixShutdown_0004
    Adds If(arg=5){} to method _PTS. This trick may repair shutdown problems for some systems (ASUS).
  • AddMCHC_0008
    Adds device MCHC to DSDT. For my board H61M this is obligatory, else KP. Old way also included AddIMEI_80000.
  • FixHPET_0010
    Adds IRQ(0, 8, 11) to device HPET. Obligatory for OSX <= 10.8, Mavericks can work without it. Old way also included FIX_RTC_20000, FIX_TMR_40000.
  • FakeLPC_0020
    Changes the device-id for the LPC chipset device. Needed in very rare cases for non-standard (for Apple) chipsets, like ICH9.
  • FixIPIC_0040
    Deletes IRQ(2) from device IPIC. Helps with a non working Power button.
  • FixSBUS_0080
    Adds SMBUS device into DSDT, with some sub-device. I don't know the reason for the patch but it's advised in many forums. Never seen any problem with this bit.
  • FixDisplay_0100
    This is a very functional patch for video devices. Recommended even if you don't want to inject properties to the device. When this bit is set other settings like FakeID will be applied as well. Old way: this patch will affect all video cards, included embedded Intel GFX.
    New way: Intel will be patched separately.
  • FixIDE_0200
    Adds initialization for IDE controllers (not SATA) to prevent panic with it. More information.
  • FixSATA_0400
    Injects the DeviceID from ICH6 to prevent the orange icons problem. Nowadays this patch looks to be obsolete. It is better to do the kext binary patch instead.
  • FixFirewire_0800
    Adds device Firewire into DSDT if absent and if the device really present. Safe.
  • FixUSB_1000
    Injects USB devices and their properties for USB-1, USB-2 and USB-3. No reason not to use this bit.
  • FixLAN_2000
    Injects device and properties for the LAN controller. Also made FakeID for some known substitutions.
  • FixAirport_4000
    Injects device and properties for the WiFi controller. Also made FakeID for some known substitutions.
  • FixHDA_8000
    Renames AZAL to HDEF or HDAU. Adds the HMDI device if absent. Else AppleHDA will not work. Adds the properties "layout-id", "MaximumBootBeepVolume" and "PinConfigurations".

Since rev2392 the DSDT fix mask has been extended to 32 bit. So now the full mask is 0xFFFFFFFF.

For backward compatibility Clover will check for the bit NewWay_80000000. If this bit is not set then the old mask will work as before.

Settings for "NewWay" Patches:

<key>NewWay_80000000</key>
<true/>
<key>FIX_DARWIN_10000</key>
<true/>
<key>FIX_RTC_20000</key>
<true/>
<key>FIX_TMR_40000</key>
<true/>
<key>AddIMEI_80000</key>
<true/>
<key>FIX_INTELGFX_100000</key>
<true/>
<key>FIX_WAK_200000</key>
<true/>
<key>DeleteUnused_400000</key>
<true/>
<key>FIX_ADP1_800000</key>
<true/>
<key>AddPNLF_1000000</key>
<true/>
<key>FIX_S3D_2000000</key>
<true/>
<key>FIX_ACST_4000000</key>
<true/>
<key>AddHDMI_8000000</key>
<true/>
<key>FixRegions_10000000</key>
<true/>
<key>AddPNLF_1000000</key>
<true/>
<key>FixDarwin7_10000</key>
<true/>
  • NewWay_80000000
    If you set this bit then your old bit will work restrictedly for one purpose each.
    Without this bit the rest of these bits will be useless
  • FIX_DARWIN_10000
    Only patches the "Darwin OS" identification.
  • FIX_RTC_20000
    Excludes IRQ(0) from RTC device.
  • FIX_TMR_40000
    Excludes IRQ(8) from TMR device. This is an ancient DOS device and is not needed in modern computers.
  • AddIMEI_80000
    This device is used for IntelHDxxxx graphics. This is required when using the FakeID->IMEI bit. It does nothing on Core 2 systems.
  • FIX_INTELGFX_100000
    New way to patch an IntelGFX device.
  • FIX_WAK_200000
    Adds Return(Package(0)) into method _WAK if absent. This patch eliminates a warning, but we don't know if it affects anything else on a working system.
  • DeleteUnused_400000
    Deletes devices like Floppy drive, LPT port and others from the DSDT.
  • FIX_ADP1_800000
    Renames device AC0 to ADP1.
  • AddPNLF_1000000
    The device PNLF is necessary to have brightness control. This patch is also a good influence for proper Sleep/Wake.
  • FIX_S3D_2000000
    Also resolves some Sleep/Wake problems by correcting _S3D methods.
  • FIX_ACST_4000000
    Name ACST is used differently by Apple and ASUS. For ASUS it's the AC adapter state, but for Apple it's a replacement for _CST, c-states table. To avoid conflict it is necessary to rename such function to something else.
  • AddHDMI_8000000 Adds the HDAU device if absent, with some default properties.
  • FixRegions_10000000
    Some OperationRegions in Bios DSDT are floating and values may change in time due to changes in the BIOS. The presence of floating regions makes it impossible to use a custom DSDT because this region may be shifted and will not correspond to the current state. This patch is intended to find all such regions in BIOS and correct them in custom DSDT.
  • AddPNLF_1000000
    Rev 4195
    Set backlight control for Nvidia mobile cards.
    img
    In my case there are:
    DSDT_FIX: AddPNLF_1000000
    OEM SSDT NvdTable, but _DSM -> ZDSM corrected by Clover. No new _DSM
    No additional kexts.

A trick to assign keys to reduce/increase brightness:
1. Insert temporarily USB keyboard
2. Control Panel -> Keyboard -> Shotcuts -> Screen (appeared due to USB keyboard)
3. Assign F1 to Reduce brightness and F2 to Increase. No other combinations!
4. After removing the USB keyboard assigning will continue working.

  • FixDarwin7_10000
    Rev 4200
    New fix for compatibility with Windows 7 SP1 (Windows 2009). It should gives OSYS=0x7D9.

DSDT / Patches

Binary DSDT patching

<key>Patches</key>
  <array>
    <dict>
      <key>Find</key>
      <data>W4IeQkFUMQhfSElEDEHQDAoIX1VJRAEUCF9TVEEApAA=</data>
      <key>Replace</key>
      <data></data>
    </dict>
    <dict>
      <key>Find</key>
      <data>UFhTWAhfQURSAAhfUFJXEgYC</data>
      <key>Replace</key>
      <data>UFhTWAhfQURSAAhfU1VOCgQIX1BSVxIGAg==</data>
    </dict>
  </array>

Rev 4314

Limit scope of binary DSDT patch by "Device" section with specified name in additional "TgtBridge" tag by goodwin_c.

Config.plist sample:

 <dict>
    <key>Comment</key>
    <string>Rename PXSX to SSD0</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>UFhTWA==</data>
    <key>Replace</key>
    <data>U1NEMA==</data>
    <key>TgtBridge</key>
    <data>UlAwOQ==</data>
</dict>
<dict>
    <key>Comment</key>
    <string>Rename PXSX to SSD0 2</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>UlAwOS5QWFNY</data>
    <key>Replace</key>
    <data>UlAwOS5TU0Qw</data>
</dict>

Rev 4468

More exact renaming Devices in DSDT and SSDT taking into account its bridge.

Example:

<key>RenameDevices</key>
        <dict>
            <key>_SB.PCI0.RP02.PSXS</key>
            <string>ARPT</string>
            <key>_SB.PCI0.EHC1</key>
            <string>EH01</string>
            <key>_SB.PCI0.POP2.PEGP</key>
            <string>GFX0</string>
        </dict>

Complex case such as this DSDT is also taken into account.

_SB.PCI0.RP02.PSXS
We have to take into account fields like
Scope(\_SB)
{
  Device (PCI0)
  {
    Device(RP02)
    {
      Device(PSXS)  <- to patch
      {
        Method(_ON)
        {
        }
        Method(_OFF)
        {
        }

      }
      PSXS._ON() <- to patch
    }
    Scope(RP02)
    {
      PSXS._OFF() <- to patch
    }
    Device(RP03)
    {
      Device(PSXS) <- to not patch
      {
      }
      PSXS._ON() <- to not patch
    }

DSDT / DropOEM_DSM

<key>DropOEM_DSM</key>
<true/>

Some OEM DSDT already contains Method(_DSM...) for some devices. It has another structure, another logic, and another results then we need. But we can't modify this method, and we can't create own method with the same name, so DropOEM_DSM was created to drop these OEM _DSM.

Default value is false if using a custom DSDT and true if using BIOS.aml.

Alternatively if you only need to drop the _DSM for certain devices, you can select any of these individually:

<key>DropOEM_DSM</key>
<dict>
    <key>ATI</key>
    <true/>
    <key>Firewire</key>
    <true/>
    <key>HDA</key>
    <true/>
    <key>HDMI</key>
    <true/>
    <key>IDE</key>
    <true/>
    <key>IntelGFX</key>
    <true/>
    <key>LAN</key>
    <true/>
    <key>LPC</key>
    <true/>
    <key>NVidia</key>
    <true/>
    <key>SATA</key>
    <true/>
    <key>SmBUS</key>
    <true/>
    <key>USB</key>
    <true/>
    <key>WIFI</key>
    <true/>
</dict>

DSDT / SlpSmiAtWake

<key>SlpSmiAtWake</key>
<true>

It adds SLP_SMI_EN=0 at every wake. It may help solve sleep and shutdown issues on UEFI boot.


DSDT / SuspendOverride

<key>SuspendOverride</key>
<true>

Influences the DSDT patch FixShutdown_0004 and extends the fix from state 5 to 3, 4 and 5 (sleep and suspend).


DSDT / ReuseFFFF

<key>ReuseFFFF</key>
<true>

Some OEM DSDT contains some device with Name (_ADR, 0xFFFF). This is a big problem as I can convert it to ADR=0 and inject properties but this is dangerous patch, it may lead to panic on IOPCIFamily.kext. So this key is proposed which will convert this device to (ADR, 0) and reused for injection. (FakeID for example)


DSDT / Rtc8Allowed

<key>Rtc8Allowed</key>
<false>

Some users claim that RTC length may be 8 bytes without CMOS reset, but others claim that the reset is still occurring. For those who wants len=8 it should be set to true. Default is false.


SSDT

<key>SSDT</key>
<dict>
...
</dict>

Parameter group affecting SSDTs.


SSDT / DropOem

<key>DropOem</key>
<true/>

Drops all internal SSDT tables to avoid conflicts when generating an SSDT for your processor, which contains P- and C-States. Clover can do this automatically or you can specify an external file, which will be loaded from EFI/OEM/[model]/ACPI/patched.


SSDT / Generate

<key>Generate</key>
<false/>

Generate an SSDT with p-states and c-states.


SSDT / Generate / CStates

<key>Generate</key>
<dict>
  <key>CStates</key>
  <true/>
</dict>

Automatic SSDT table generation, which extends the processor section with _CSTmethods for each core. _CST generation is affected by parameters EnableC2, EnableC4, EnableC6, EnableISS, C3Latency. There is no need to comment them as everything will work either way. Experiment by yourself.
Besides, Clover already has obtained the processor type and core count.
Not using this parameter will result in following error message:ACPI_SMC_PlatformPlugin::pushCPU_CSTData - _CST evaluation failed.


SSDT / Generate / PStates

<key>Generate</key>
<dict>
  <key>PStates</key>
  <true/>
</dict>

Automatic SSDT table generation, which extends the processor section with _PPC, _PPC and _PSS methods.

  • _PCT - Performance control. Controls SpeedStep functions
  • _PPC - Performance Present Capabilities. SpeedStep capabilities. This method returns a value limiting the frequency. Look further for PLimitDict.
  • _PSS - Performance Supported States. An array containing possible CPU states - P-States.
    PLimitDict, UnderVoltStep and Turbo will be taken into consideration when generated this array.

SSDT / EnableC2

<key>EnableC2</key>
<true/>

This key allows you to enable the C2 states generator. Disabled by default.


SSDT / EnableC4

<key>EnableC4</key>
<true/>

This key allows you to enable the C4 states generator. Disabled by default.


SSDT / EnableC6

<key>EnableC6</key>
<true/>

This key allows you to enable the C6 states generator.


SSDT / EnableC7

<key>EnableC7</key>
<true/>

This key allows you to enable the C7 states generator. Disabled by default.


SSDT / PLimitDict

<key>PLimitDict</key>
<string>1</string>

Limits the maximal CPU frequency.

  • 0 - No limit.
  • 1 - Reduce frequency by one step
  • 2 - Reduce frequency by two steps

Example: A Core2Duo T8300 with 2400 MHz operates at a maximal frequency of 2000 MHz when limited by two steps. This parameter might be used to reduce heat in mobile systems.

The same parameter exists in platform plists, for example in:System/Library/Extensions/IOPlaEormPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlaEormPlugin.kext/Contents/Resources/MacBook5_1.plist.
They will be discussed later.

Other CPUs may need other values. This value has a reversed effect on a Core2Quad for instance. The optimal value is 1 in this case. It may be a DSDT error, though.


SSDT / UnderVoltStep

<key>UnderVoltStep</key>
<string>1</string>

This parameter lowers the CPU voltage and indirectly affects the temperature. Possible values are 0, 1, 2, etc. Clover will only allow sane values, meaning it is safe to increase this value until the CPU stops working correctly.


SSDT / MinMultiplier

<key>MinMultiplier</key>
<integer>7</integer>

Minimal CPU multiplier. Usually a value of 16 is ported, resulting in a frequency of 1600 MHz but you should use lower values when using SpeedStep, like 8 or even 7.


SSDT / MaxMultiplier

<key>MaxMultiplier</key>
<integer>30</integer>

Introduces as an analogy to the minimal multiplier but not really necessary. It is not advised to set it.


DropTables

<key>DropTables</key>
<array>
  <dict>
    <key>Signature</key>
    <string>SSDT</string>
    <key>TableId</key>
    <string>SataTabl</string>
  </dict>
  <dict>
    <key>Signature</key>
    <string>SSDT</string>
    <key>TableId</key>
    <string>SataAddr</string>
  </dict>
  <dict>
    <key>Signature</key>
    <string>BGRT</string>
  </dict>
  <dict>
    <key>TableId</key>
    <string>A M I</string> (WARNING: DO NOT DO THIS!!!!!!!)
  </dict>
  ...
</array>

Drop OEM ACPI tables by signature and/or table identifier.

Additionally, now you can drop tables by their length. Why? Because we found Acer laptop where all SSDT have the same TableID.

<key>DropTables</key>
<array>
  <dict>
    <key>Signature</key>
    <string>SSDT</string>
    <key>Length</key>
    <integer>720</integer>
  </dict>
</array>

FixHeaders

Rev 4427-4429

FixHeaders should be in common ACPI section, it is not DSDT-only fix.

<key>FixHeaders</key>
<true/>

The fix is recommended to all users even if you are not going to fix DSDT.
Anyway the fix is safe.

Old setting inside DSDT fixes remains for backward compatibility but I recommend to exclude it from those section.