Configuration

Table of Contents
    • Creating a configuration file
    • SystemParameters
      • boot-args
      • prev-lang:kbd
      • CustomUUID
      • InjectSystemID
      • LegacyBoot
      • BacklightLevel
    • SMBIOS
      • ProductName
      • SmUUID
      • FirmwareFeatures
      • BoardSerialNumber
      • BoardType
      • Mobile
      • ChassisType
      • ChassisAssetTag
      • Trust
    • CPU
      • Turbo
      • CpuFrequencyMHz
      • BusSpeedkHz
      • QPI
      • ProcessorType
    • Graphics
      • GraphicsInjector
      • VRAM
      • LoadVBios
      • DualLink
      • PatchVBios
      • PatchVBiosBytes
      • InjectEDID
      • CustomEDID
      • VideoPorts
      • FBName
      • NVCAP
      • display-cfg
      • ig-platform-id
    • KernelAndKextPatches
      • Debug
      • KernelCpu
      • AsusAICPUPM
      • AppleRTC
      • KernelLapic
      • KextsToPatch
      • ATIConnectorsController
    • PCI
      • StringInjector
      • DeviceProperties
      • PCIRootUID
      • HDAInjection
      • USBInjection
      • USBFixOwnership
      • InjectClockID
      • LpcTune
    • RtVariables
      • MLB
      • ROM
      • MountEFI
      • LogEveryBoot
      • LogLineCount
    • DisableDrivers
    • ACPI
      • DropOEMSSDT
      • DropAPIC
      • DropMCFG
      • DropHPET
      • DropBGRT
      • DropECDT
      • DropDMAR
      • GenerateCStates
      • C3Latency
      • GeneratePStates
      • PLimitDict
      • UnderVoltStep
      • GenerateIvyStates
      • DoubleFirstState
      • MinMultiplier
      • MaxMultiplier
      • PluginType
      • ResetAddress and ResetValue
      • smartUPS
      • PatchAPIC
      • FixDsdtMask
    • GUI
      • TextOnly
      • Theme
      • Timeout
      • DefaultBootVolume
      • ScreenResolution
      • Mouse
      • Volumes
      • HideEntries
      • DebugLog
      • FastBoot

Creating a configuration file

Clover will perform an automatic configuration based on the computer's hardware. Nevertheless, an automatic unit is never perfect and this is why the user can permanently change several parameters in the configuration file config.plist or on the fly in the GUI. The configuration file is written in XML but it can be handy to view it as a text file. It can be edited by simple text editors or by plist editors like PlistEdit. Clover is shipped with two variants of this file: a full-size version with all possible configuration options and a minimal version.

Some general rules: if you do not know what value a parameter needs, exclude it from the config file completely! Do not leave a parameter without a value. Last but not least, do not set a value you do not understand!

Following way of creating a configuration file is offered:

  • Install the minimal version, which only uses safe parameters
  • Load Clover's GUI and enter the Options menu (by pressing O)
  • Browse all options and try to understand what is set and why
  • Fix what you understand and leave the rest like it is
  • Load the OS. If it doesn't load, repeat the last steps until it starts

In the OS start the Terminal and enter:

cd ~/App/getconfig >config.plist

It is assumed that you already copied the utility getconfig into directory ~/App

This way you get a nearly complete configuration file with the parameters used to successfully load the OS. Some more manual work is needed to finish it. Here are the different sections and parameter descriptions:

SystemParameters

boot-args

<key>boot-args</key>
<string>-v arch=i386</string>

These arguments are passed to boot.efi and then partly to the kernel. A complete listing of all kernel arguments can be found in Apple's documentation. A list of arguments for boot.efi can be found in the documentation of com.apple.Boot.plist. Popular ones are:

  • Kernel=mach_kernel
  • MKext=extensions.mkext

Additionally Clover uses its own arguments:

  • WithKexts - Loads additional kexts from EFI/CLOVER/kexts/[OSVersion].
    • [OSVersion] is determined while loading an OS, e.g. 10.7, 10.8
    • Turned off by default - additional kexts are not loaded.
  • NoCaches - It may be necessary to load all available drivers and recreate system caches, for example after the installation of new drivers.

FSInject.efi driver must be available in both cases as it is used to analyse both arguments.

prev-lang:kbd

<key>prev-lang:kbd</key>
<string>en:0</string>

Currently it is only useful for changing the language of the Help menu. Furthermore, this parameter is passed to the OS and can affect the language.

CustomUUID

<key>CustomUUID</key>
<string>511CE200-1000-4000-9999-010203040506</string>

Unique identification number of your computer. If not set, an automatically generated UUID will be used. Customise it with hexadecimal digits for full control over your hackintosh.

Do not use this example value. It is by far not unique, as there are enough fools who copied it already.

InjectSystemID

<key>InjectSystemID</key>
<false/>

The number described above can be injected differently and transformed by the OS into another ID. The aim is to provide an option for Chameleon users to replicate their UUID. Set to <true/> and change CustomUUID to match the UUID used with Chameleon found in registry at IODeviceTree:/efi/platform>system-id. Profiler will show a different UUID that will match the one generated with Chameleon.

LegacyBoot

<key>LegacyBoot</key>
<string>PBR</string>

Necessary for loading old versions of Windows and Linux. Greatly depends on hardware and BIOS. Several algorithms were developed to allow customisation:

  • LegacyBiosDefault - for UEFI BIOS variants containing protocol LegacyBios
  • PBRtest - PBR boot algorithm
  • PBR - Another PBR boot algorithm

BacklightLevel

<key>BacklightLevel</key>
<string>0x0101</string>

Monitor brightness level. However, only few systems will be affected by this parameter. It also is read from NVRAM. By default a value given by the system is used. Specifying it in the configuration file will override it.

SMBIOS

This group of parameters is used to mask your PC as a Mac. Clover will do this task automatically based on the given processor, video card and signs of mobility. However, you may choose differently. Get the MacTracker application, choose a model you like and find matching values. Chameleon Wizard may help you with this task. There is not much to comment here, these values are not for beginners. If you know them - change them; otherwise leave it. Calculating them is mostly not possible.

ProductName

<key>ProductName</key>
<string>MacBook1,1</string>

You can set only this value and Clover will adjust the rest of the parameters automatically according to the model, so you can leave them out. Otherwise your custom values will be preferred.

Clover has built-in definitions for following models:

  • MacBook1,1
  • MacBook2,1
  • MacBook4,1
  • MacBook5,2
  • MacBookPro5,1
  • MacBookPro8,1
  • MacBookPro8,3
  • MacBookPro9,2
  • MacBookAir3,1
  • MacBookAir5,2
  • Macmini2,1
  • Macmini5,1
  • Macmini6,2
  • iMac8,1
  • iMac10,1
  • iMac11,1
  • iMac11,2
  • iMac11,3
  • iMac12,1
  • iMac12,2
  • iMac13,1
  • iMac13,2
  • MacPro3,1
  • MacPro4,1
  • MacPro5,1

All other models require setting all fields manually.

In case the model is not set, Clover will automatically choose one for you.

Some parameters like BoardSerialNumber should be generated and specified manually to be unique though.

SmUUID

<key>SmUUID</key>
<string>00000000-0000-1000-8000-010203040506</string>

This is the UUID, which is written into the SMBIOS table. Apparently it makes sense to fill the last pairs of digits with the MAC address of your ethernet card. This UUID will also be used in case CustomUUID is missing.

FirmwareFeatures

<key>FirmwareFeatures</key>
<string>0xC0001403</string>

These digits exceed the standard SMBIOS and are part of Apple's specification. Different real Macs show different values and no description of the meaning exists. The only clue is provided by the sources of the bless command:

  && (featureFlags & 0x00000001)) {
  contextprintf(context, kBLLogLevelVerbose,  "Legacy mode suppported\n");

Therefore, we too need an odd number here.

BoardSerialNumber

<key>BoardSerialNumber</key>
<string>C02032101R5DC771H</string>

Clover will use one specific value here, which needs to be replaced by your own serial number. It is required for working iCloud and iMessage services. The length must be 17 digits, consisting of letters from the Latin alphabet and numbers. The serial number used by Clover is most probably banned already.

BoardType

<key>BoardType</key>
<integer>10</integer>

This parameter was introduced for the MacPro, which uses 11 (ProcessorBoard) instead of 10 (Motherboard), apparently for historical reasons. The effect is not clear, however it can be seen in Profiler.

Mobile

<key>Mobile</key>
<true/>

Usually Clover will automatically detect the mobility of a system, e.g. if is powered by a battery, needs energy saving, or not. Change it to trick the system into thinking that a battery is not available, or otherwise.

ChassisType

<key>ChassisType</key>
<string>0x10</string>

Used as an indirect indication for platform mobility. Here is a table according to SMBIOS standards:

Type Value
MiscChassisTypeOther 0x01
MiscChassisTypeUnknown 0x02
MiscChassisTypeDeskTop 0x03
MiscChassisTypeLowProfileDesktop 0x04
MiscChassisTypePizzaBox 0x05
MiscChassisTypeMiniTower 0x06
MiscChassisTypeTower 0x07
MiscChassisTypePortable 0x08
MiscChassisTypeLapTop 0x09
MiscChassisTypeNotebook 0x0A
MiscChassisTypeHandHeld 0x0B
MiscChassisTypeDockingStation 0x0C
MiscChassisTypeAllInOne 0x0D
MiscChassisTypeSubNotebook 0x0E
MiscChassisTypeSpaceSaving 0x0F
MiscChassisTypeLunchBox 0x10

Clover will use a value according to the set Mac model, like it is used in real Macs. The effect, except mobility settings, is unclear.

ChassisAssetTag

<key>ChassisAssetTag</key>
<string>LatitudeD420</string>

This field is never used with real Macs. We can use it for our own purpose, for example in the HWSensors project.

Trust

<key>Trust</key>
<true/>

Used to give priority to memory descriptor values found in SMBIOS or SPD. Change if your memory is described incorrectly in Mac. Default is <true/>.

CPU

This group of parameters helps with CPU definitions in case the internal algorithms fail.

Turbo

This parameter is now excluded. The CPU either does support Turbo, or not.

<key>Turbo</key>
<string>Yes</string>

Some processors do not support this technology. The current version has a detection, which is also printed into the boot log. Systems below Nehalem do not support Turbo mode, even if the CPU itself does.

CpuFrequencyMHz

<key>CpuFrequencyMHz</key>
<string>3200</string>

CPU base frequency in MHz. Usually Clover will get it from DMI, however if it is not accurate, you can override it. A wrong value can cause system instability - synchronisation issues, slowness etc. It is recommended not use this parameter at all.

Most probably this parameter will be excluded in coming revisions due to its dangerous and harmful nature.

BusSpeedkHz

<key>BusSpeedkHz</key>
<string>133330</string>

Bus speed in kHz. Very important value for a stable system. It is passed from the boot loader to the kernel. If this value is not correct, the kernel will not start at all. If it is slightly incorrect, clock issues may arise and the system will behave in a strange way.

An automatic detection was introduced with revision 1060, which relies on the ACPI timer producing much more accurate values than the ones stored in DMI.

DMI stores this value in MHz, which is not accurate in contrast to a value calculated from CPU frequency. You can choose a more accurate value, if needed. For example my DMI has a value of 100 MHz, however manually overriding it to a value of 99790 kHz produced better clocks.
Some vendors use a different meaning for BusSpeed and FSBSpeed and use values four times bigger in the BIOS. You can distinguish them according to the scale: either it is from 100 MHz to 400 MHz or it matches the formula CPUFrequency=RailFrequency*CPUMultiplier.
If ASUS uses a rail frequency of 1600 MHz and a multiplier of 8, the formula does not work - a CPU with 12,8 GHz does not exist; a division into 4 is required.

QPI

<key>QPI</key>
<string>4800</string>

System Profiler calls it Processor Bus Speed or Bus Speed. Chameleon has an algorithm for calculating this value for Nehalem CPUs (, which is however not correct). Clover has a corrected algorithm according to Intel data sheets. AppleSmbios sources describe two variants: either SMBIOS already contains this value as specified by the vendor, or it is calculated by the formulae BusSpeed*4. After a long argument this value was sourced into the configuration file - write what you want (in MHz). This is a purely cosmetic value. Apparently this value only makes sense for Nehalems, the rest should use the formula stated above - or nothing at all.

ProcessorType

<key>ProcessorType</key>
<string>0x0201</string>

This result of this value can only be found in Apple's specification and it is used in the window About this Mac, which is displaying the according processor name. Otherwise "Unknown CPU" will be displayed. An invocation of CPUID was not possible due to PowerPC and due to Apple's different view of the world SMBIOS table 4 is not used either. Clover knows most values but due to the fact that hardware development does not stand still, you can specify this value. Again, this is purely cosmetic.

Graphics

This parameter group is made for injecting video card properties as done, for example, by Natit.kext. There are many different parameters that are injected, mostly constants, some of them calculated, some of them defined in the internal table and only a few parameters can be adjusted with the configuration file.

GraphicsInjector

<key>GraphicsInjector</key>
<true/>

Enables graphics injection, which is necessary for a working system. It is only advised to disable it, if you do not know a better method. Some video cards, for instance Nvidia GTX 6xx or AMD Radeon HD 6xxx do not require injection and it will automatically be disabled without user interaction. At least it is enough to reach the desktop.

Enabled by default.

VRAM

<key>VRAM</key>
<integer>1024</integer>

Amount of video memory in MB. It is determined automatically but no one will be harmed if you write a correct value. However, changing it has not helped anyone yet.

LoadVBios

<key>LoadVBios</key>
<true/>

Loads a video bios from a file, which needs to be stored at the directory EFI/CLOVER/OEM/[model]/ROM or EFI/CLOVER/ROM with the name [vendor]_[device].rom, for instance 1002_68d8.rom. Sometimes it makes sense to load video bios manually, for example when you need a patched version or when the video card does not show it to the system - like mobile Radeon cards. In this case it is enough to set this parameter to Yes without providing any file. Clover will read the video bios from legacy memory at 0xC0000, where it is present most of the times, and enable functionality.
Apparently the video bios written to the card's ROM does not match the one stored at address 0xC0000 - the shadow ROM. In short:

  • <true/> - Use for mobile Radeon cards without any external file.
    Can also be used to supply a legacy video bios to cards, which only contain a UEFI video bios.
  • <false/> - For all other variants

DualLink

<key>DualLink</key>
<integer>0</integer>

Default is 1.

Some systems show a quartered screen. Use 0 to solve this problem, as showed in the example above.

PatchVBios

<key>PatchVBios</key>
<true/>

Clover applies corrections to the shadow ROM at address 0xC0000 to allow support of the highest monitor resolution. For instance, a monitor's EDID contains the mode 1920x1080 but the video bios does not. Clover will apply it as the first mode to be used. In case the monitor does not produce an EDID, it can be injected manually.

In case ScreenResolution in section GUI is set, it will be used for this patch.

Should the automatic patch fail, then you can specify a manual one.

PatchVBiosBytes

<key>PatchVBiosBytes</key>
<array>
    <dict>
        <key>Find</key>
        <data>gAeoAqAF</data>
        <key>Replace</key>
        <data>gAeoAjgE</data>
    </dict>
</array>

This example applied to an AMD Radeon HD 6670 video bios, resulting in a replacement of mode 1920x1440 with mode 1920x1080. It is advised to choose a mode with the same horizontal resolution.

It is possible to apply multiple patches. An Nvidia video bios, for instance, was successfully modified with four patches.

InjectEDID

<key>InjectEDID</key>
<true/>

This parameter is useful when an EDID exists but is not seen by Apple's drivers. In this case it is enough to set this option to <true/>. Clover will automatically extract the EDID and provide it to the drivers. See Mobile Radeons for more info. For monitors without DDC and for UEFI-only computers a custom EDID is needed:

CustomEDID

<key>CustomEDID</key>
<data>AP///////wAyDADfAAAAAAASAQOAIRV4CunVmVlTjigmUFQAAAABAQEBAQEBAQEBAQEBAQEB3iGgcFCEHzAgIFYAS88QAAAY3iGgcFCEHzAgIFYAS88QAAAAAAAA/gBXNjU3RwAxNTRXUDEKAAAA/gAjMz1IZYSq/wIBCiAgAJo=</data>

As a missing EDID cannot be extracted, you will need another one. The main requirement is to have a correct maximal resolution.

Another possibility is to use ViewSonic EDID Editor v3.1.5 that can easily be ported to Mac, if needed.

An EDID from a Dell Inspiron will be used in the sample configuration file with a matrix of 1440x900.

A custom EDID will also be used for automatic video bios patching. Look above.

VideoPorts

<key>VideoPorts</key>
<integer>2</integer>

The amount of ports on a video card, including TVO and/or HDMI. The chosen Apple framebuffer may not correspond to our real video card.

FBName

<key>FBName</key>
<string>Macaque</string>

This parameter is specific to AMD Radeon cards, which have a bunch of different framebuffers without any specific pattern. For a wide range of common video cards Clover will automatically choose a suiting framebuffer name. Feel free to set your own if you want. If you do not know what to write here, delete this parameter completely.

Do not use Macaque! It is solely used for absurdity. But no - people still use it in their configurations!

Small guidance table:

Series v / Type > Mobile Desktop
HD 5000 Alouatta Baboon
HD 6000 Cttail Ipomoea
HD 7000 Pondweed Futomaki

NVCAP

<key>NVCAP</key>
<string>04000000000003000C0000000000000A00000000</string>

This parameter is only useful for Nvidia video cards and configures types and usage of video ports. The example line contains 40 capitalised hexadecimal digits. Theory is missing in this case and praxis shows controversial results.

Following table exists (found somewhere on insanelymac) but its correctness is debatable:

You can also find other methods on calculating a correct value for this line.

Clover will try to generate one according to the video bios.

display-cfg

<key>display-cfg</key>
<string>03010300FFFF0001</string>

This parameter is also just for Nvidia cards. For details see the topic on projectosx. However the listed examples are controversial. You can see real configurations in this topic. Apparently it is best to just let Clover handle this value. Leave it out completely and let Clover do the calculation.

ig-platform-id

<key>ig-platform-id</key>
<string>0x01620005</string>

This parameter is used to enable the internal Intel HD 4000 video card. Until now no common rule for selecting a value was found, so either let Clover handle this parameter or use another one if it does not work.

Here is a table with possible values:

Value Type Ports
0x01660000 Mobile 4 ports: 1 LVDS, 3 DP
0x01660001 Mobile 4 ports: 1 LVDS, 1 HDMI, 2 DP
0x01660002 Mobile 1 port: LVDS
0x01660003 Mobile 4 ports: 1 LVDS, 1 HDMI e 2 DP
0x01660004 Mobile 1 port: LVDS
0x01620005 Desktop 3 ports: DP
0x01620006 Desktop 0 ports
0x01620007 Desktop 0 ports
0x01660008 Mobile 3 ports: 1 LVDS, 2 DP
0x01660009 Mobile 3 ports: 1 LVDS, 2 DP
0x0166000a Mobile 3 ports: 2 DP, 1 HDMI
0x0166000b Mobile 3 ports: 2 DP, 1 HDMI

KernelAndKextPatches

This parameter group enables patching on-the-fly.

Requirement: booting with kernel cache or with the key NoCache.
Should the cache be missing because of other reasons, then patching will not be enabled.

Debug

<key>Debug</key>
<true/>

Enables detailed output describing the patching process. Useful for debugging purposes.

KernelCpu

<key>KernelCpu</key>
<true/>

Eliminates kernel panics related to an unsupported CPU, like Yonah, Atom or Ivy Bridge.
However, the kernel has other algorithms which will not work correctly when using an unsupported CPU and this patch will not solve all problems. It is highly unlikely that this will work with a Pentium M, Pentium 4 or and AMD. The use of a special replacement kernel is advised in such cases.

AsusAICPUPM

<key>AsusAICPUPM</key>
<true/>

Some vendors, like ASUS, restrict the use of MSR register 0xE2 in their power management module to ReadOnly. On Sandy/Ivy Bridge systems the kext AppleIntelCpuPowerManagement will try to write to this register and cause a kernel panic. This patch will eliminate the kext's write operations.

AppleRTC

<key>AppleRTC</key>
<true/>

OS X has compatibility issues with a BIOS CMOS resulting in its reset on each wake after sleep and reboot, which is noticeable in a loss of BIOS settings. Mostly Gigabyte motherboards are affected. Usually it can be solved by patching Device(RTC) in the DSDT.
If this does not help, the kext itself can be patched, which is done here.

KernelLapic

<key>KernelLapic</key>
<false/>

HP notebooks have lapic problems, which can be solved by using the boot parameter cpus=1 or by using this option.

KextsToPatch

<key>KextsToPatch</key>
<array>

Apart from the built-in patches you can create your own ones providing following data: the binary file name, the data to find and the data to replace with - both in hexadecimal. The data length must be equal. A smaller replacement data line can be filled with zeroes.

  • The following example shows a patch for VoodooHDA replacing the string Headphones with Telephones:
    <key>KextsToPatch</key>
    <array>
    <dict>
        <key>Name</key>
        <string>VoodooHDA</string>
        <key>Find</key>
        <data>SGVhZHBob25lcwA=</data>
        <key>Replace</key>
        <data>VGVsZXBob25lcwA=</data>
    </dict>
    </array>
    

Note: the patch data is encoded in base64 due to the data type of the field.

Common patches are:

  • TRIM function for non-Apple SSDs:
    <dict>
        <key>Name</key>
        <string>IOAHCIBlockStorage</string>
        <key>Find</key>
        <data>QVBQTEUgU1NEAA==</data>                       
        <key>Replace</key>
        <data>AAAAAAAAAAAAAA==</data>
    </dict>
    
  • Define external drivers as internal to fix yellow drive icons:

    <dict>
        <key>Name</key>
        <string>AppleAHCIPort</string>
        <key>Find</key>
        <data>RXh0ZXJuYWw=</data>
        <key>Replace</key>
        <data>SW50ZXJuYWw=</data>
    </dict>
    
  • Allow booting with a MacPro4,1 or MacPro5,1 SMBIOS definition without ECC memory:

    <dict>
        <key>Name</key>
        <string>AppleTyMCEDriver</string>
        <key>Find</key>
        <data>cgoATWFjUHJvNCwxAE1hY1BybzUsMQBY</data>
        <key>Replace</key>
        <data>cgoAAAAAAAAAAAAAAAAAAAAAAAAAAABY</data>
    </dict>
    

It is sometimes necessary to additionally modify a kext's Info.plist. In this case following syntax is used:

<dict>
    <key>Name</key>
    <string>AppleHDAController</string>
    <key>Comment</key>
    <string>Patch_to_not_load_this_driver</string>
    <key>InfoPlistPatch</key>
    <true/>
    <key>Find</key>
    <string>0x04020000</string>
    <key>Replace</key>
    <string>0x44220000</string>
</dict>

Side note: The patch is supposed to be done in the cache. If you patch an Info.plist to allow the loading of a kext, then it is not yet present in the cache. You will need to reboot twice. First with the key NoCaches to allow FSInject to load the kext and a second time for the cache to be patched successfully.

ATIConnectorsController

<key>ATIConnectorsController</key>
<string>6000</string>

For a fully working AMD video card injecting properties into the registry is not enough. Additionally a modification of the connectors in the according controller binary file is necessary. The example points to the 6000 series controller file:

<key>ATIConnectorsData</key>
<string>000400000403000000010000210302040400000014020000000100000000 040310000000100000000001000000000001</string>
<key>ATIConnectorsPatch</key>
<string>040000001402000000010000000004040004000004030000000100001102 010500000000000000000000000000000000</string>

This method works for systems using Mac OS X 10.7 or newer.

More info in the post of bcc9 on insanelymac.

PCI

Parameter group for tweaking setting affecting PCI devices.

StringInjector

<key>StringInjector</key>
<false/>

Enabling it will cause the automatic injection to turn off and allow the injection of a custom string.

DeviceProperties

<key>DeviceProperPes</key>
<string>0207364862FA54HG345</string>

To create your own string you need the tool gfxutil that, for example, is bundled with DarwinDumper. You will need to create an xml file using a device path in standard notation as header and list properties, which will be injected. The example shows a file used to enable a video card:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
    <dict>
        <key>AAPL,HasPanel</key>
        <data>AQAAAA== </data>
        <key>built-in</key>
        <data>AA==</data>
        <key>class-code</key>
        <data>AAADAA==</data>
        <key>device_type</key>
        <data>ZGlzcGxheQA=</data>
        <key>model</key>
        <data>R01BIDk1MAA=</data>
    </dict>
</dict>
</plist>

It is possible to obtain the currently used plist with DarwinDumper, to modify it and convert it into string form with the command:

./gfxutil –i xml –o hex devprop.plist devprop.hex

.. resulting in:

d30000000100000001000000c70000000500000002010c00d041030a000000000101060000027fff0400100000006d006f00640065006c0000000c000000474d4120393530001c0000006400650076006900630065005f00740079007000650000000c000000646973706c617900200000004100410050004c002c00480061007300500061006e0065006c0000000800000001000000160000006200750069006c0074002d0069006e00000005000000001a00000063006c006100730073002d0063006f006400650000000800000000000300

The result needs to be used as a value for DeviceProperties. The same effect can be achieved by adding a _DMS method into the according section of your DSDT. It may be practical to use the string method when no DSDT is available yet.

PCIRootUID

Deprecated. An UID of 0 is set automatically.

<key>PCIRootUID</key>
<integer>0</integer>

The injection of properties depends on the ID of PciRoot. Earlier the ID was thought of as a property but with time, hackintoshing showed that this is just an identification number written into the DSDT:

Device (PCI0)
    {
        Name (_HID, EisaId ("PNP0A08"))
        Name (_CID, EisaId ("PNP0A03"))
        Name (_ADR, Zero)
        Name (_UID, Zero)

Name (_UID, Zero) defines _UID as 0 or with One as 1. You can change this value without any side effects. Real Macs always use 0 and boot.efi always assumes this value. This is the reason why the DSDT should be corrected to use 0.

HDAInjection

<key>HDAInjection</key>
<string>Detect</string>

Property injection for the sound chip. Only works when the DSDT defines Device (HDEF). If you renamed it, you can also inject the other properties differently. Do not use this parameter with VoodooHDA. Possible options are:

  • No - Injection is turned off
  • Detect - Automatic detection of the sound chip and injection of its ID as layout ID. Actually this is nonsense but still very popular. Does not do any harm and affects the display of sound properties in System Profiler.
  • 883 - Decimal number representing. Refers to Realtek ALC883 in this case.
  • 0x373 - Same as above in hexadecimal.

These numbers are incorrect, you will need to find the correct value and possibly replace the layout file bundled with AppleHDA to get the chip working.

USBInjection

<key>USBInjection</key>
<true/>

Injects USB properties. You can turn it off for whatever reason, if you need. It is also disabled if the DSDT patch mask matches 0x1000 to prevent data duplication.

USBFixOwnership

<key>USBFixOwnership</key>
<true/>

It is possible to leave USB injection enabled and only turn off the ownership fix.

This fix is not relevant for UEFI booting.

InjectClockID

<key>InjectClockID</key>
<true/>
  • <true/> - Enables a good, deep sleep, which cannot be exited by keyboard or mouse input.
  • <false/> - The PC will possibly sleep and it can be woken up by keyboard or mouse; or it will be automatically woken up by some attached device

Set it to your liking.

Default value is set to disabled.

LpcTune

<key>LpcTune</key>
<true/>

Enables the initialisation of the LPC controller chip. According to Intel's ICH8M specification, it contains an LPC controller device that stores following data in register A0:

Bit State Effect
12 0 Enable C4
11 1 Enable C6
7 1 Enter C4 when C3 is invoked
3 1 Enable Intel SpeedStep - not related to Enhanced Intel SpeedStep Technology (EIST) and C-,P-States!

These bits are defined for the mobile chipset only and will be useless for desktops.
Probably this will not have any effect on notebooks, either.

RtVariables

Parameter group for defining runtime variables affecting Apple services or Clover itself.

MLB

Deprecated! Will automatically be read from SMBIOS.

<key>MLB</key>
<string>XXXXXXXXXX</string>

Digits and letters, 17 in length, describing the motherboard's serial number. No special rule exists here. The best option is to choose a real serial number and to replace digits in the middle. For instance, write …SLICE… or whatever comes to your mind.

ROM

Deprecated! Will automatically be read from SMBIOS.

<key>ROM</key>
<data>AAAAAAAA</data>

Twelve hexadecimal digits, often corresponding to the MAC address of the ethernet card. According to several reports this value can be random.

MountEFI

<key>MountEFI</key>
<false/>

This parameter is connected to the startup script and passes the option to automatically mount the ESP (EFI System Partition) on each boot. For most people this will be useless. Thus it is recommended to disable it and - when needed - to enable the according option in CloverGUI.

Alternatively you can specify the disk ID, for example disk1 to mount a specific ESP on multi-disk systems.

LogEveryBoot

<key>LogEveryBoot</key>
<string>Yes</string>

The boot log is usually needed for debugging purposes only. It is recommended to turn this option off. Additionally you can specify the maximal amount of stored logs, for example 10.

LogLineCount

<key>LogLineCount</key>
<string>3000</string>

Specify the maximal amount of lines in the log file to prevent an endlessly growing file size.

DisableDrivers

<key>DisableDrivers</key>
<array>
    <string>CsmVideoDxe</string>
    <string>VBoxExt4</string>
</array>

The purpose of this parameter is to have multiple configurations in the OEM folder. Only one driver folder exists, though, and it may be necessary to disable specific drivers for different configurations. One may need OsxAptioFixDxe, another one EmuVariableDxe.

ACPI

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.

DropOEMSSDT

<key>DropOemSSDT</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.

Other tables can be dropped, if you know which effects it will have:

DropAPIC

<key>DropAPIC</key>
<false/>

DropMCFG

<key>DropMCFG</key>
<false/>

Fixes booting issues when using a MacMini SMBIOS.

DropHPET

<key>DropHPET</key>
<false/>

DropBGRT

<key>DropBGRT</key>
<false/>

Drops the Boot Graphics Resource Table to remove vendor specific boot logos.

DropECDT

<key>DropECDT</key>
<false/>

DropDMAR

<key>DropDMAR</key>
<true/>

Enables booting on systems with CPUs supporting Intel's VT-d virtualization technology for directed I/O.

Alternatively you can use the kernel parameter dart=0.

GenerateCStates

<key>GenerateCStates</key>
<true/>

Automatic SSDT table generation, which extends the processor section with _CST methods 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.

For Ivy Bridge CPUs, go to GenerateIvyStates.

C3Latency

<key>C3Latency</key>
<string>0x03E9</string>

This parameter value represents the C3 entry latency issued when entering C3 state. The critical value is 0x3E8(1000). A lower value will allow SpeedStep, a higher one will not allow it. Real Macs always use 0x3E9, meaning SpeedStep is not turned on. Decide for yourself what you need.
Notebook users should use 0x00FA to enable power management.

GeneratePStates

<key>GeneratePStates</key>
<string>Yes</string>

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.

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/Conte nts/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.

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.

GenerateIvyStates

<key>GenerateIvyStates</key>
<string>Yes</string>

Ivy Bridge needs another approach to generate the needed properties and it all can be achieved by just setting this parameter.

In reality this parameter stands for a group of multiple settings:

gSettings.GeneratePStates = TRUE;
gSettings.GenerateCStates = TRUE;
gSettings.EnableISS = FALSE;
gSettings.PluginType = 1;
gSettings.MinMultiplier = 7;
gSettings.DoubleFirstState = FALSE;
gSettings.DropSSDT = TRUE;
gSettings.C3Latency = 0x3E7;

This parameter is still subject to change and may be adjusted in future revisions.

DoubleFirstState

Deprecated! Use GenerateIvyStates instead.

<key>DoubleFirstState</key>
<true/>

Ivy Bridge power management requires one more additional performance state, which can be achieved by, for example, doubling the first state.

MinMultiplier

<key>MinMulPplier</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.

MaxMultiplier

<key>MaxMulPplier</key>
<integer>30</integer>

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

PluginType

Deprecated! Use GenerateIvyStates instead.

<key>PluginType</key>
<integer>0</integer>

Changes the type of power management plugin your system will use. Possible values are:

  • 0 - ACPI_SMC_PlatformPlugin will be used
  • 1 - X86PlatformPlugin will be used. Select for Ivy Bridge

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.

FixDsdtMask

<key>FixDsdtMask</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:

Alternatively you can use the mask calculator by cVaD.

See Fixing DSDT for a detailed description of these options.

GUI

The interface settings can me modified by changing parameters in the GUI section of the main configuration file config.plist.

Older Clover revisions <1659 read the interface settings from refit.conf

<key>GUI</key>
<dict>
...

TextOnly

<key>TextOnly</key>
<false/>

Text-only menu mode for a minimal interface and faster loading times.

Theme

The design of the GUI depends on the chosen theme, which is set using:

<key>Theme</key>
<string>metal</string>

Additionally you can set the theme in the preference panel. This setting overrides the one in the configuration file. In case an invalid theme name is used here (no theme.plist exists at the given path), then the configuration file setting is used again. If even here the theme name is invalid, then you will be greeted with an ugly fallback theme that will still be operational.

Furthermore, this section contains parameters affecting the behaviour of the interface:

Timeout

<key>Timeout</key>
<integer>5</integer>

The boot loader will pause for 5 seconds after starting before automatically loading an operating system. If a key is pressed during this period of time, the countdown is stopped. Options:

  • 0 - GUI is not invoked, the OS is loaded instantly
  • -1 - GUI is invoked, automatic OS loading is turned off

After 25 seconds to allow the user to enjoy some theme animations an OS is loaded, which is defined in the following parameter:

DefaultBootVolume

<key>DefaultBootVolume</key>
<string>MacHDD</string>

The name of the partition can be viewed in the boot log. Additionally, the name can automatically be set in NVRAM after a reboot from the Startup Disk preference panel and it will be given preference.

ScreenResolution

<key>ScreenResolution</key>
<string>1024x768</string>

You can set the desired screen resolution if it is supported by the video card and the monitor. Clover will try to set the highest available resolution, however it might fail. You can check the list of supported resolutions in the boot log. In case PatchVBios=Yes is used in the Graphics section, you will get the highest resolution supported by the monitor. In that case this parameter may be obsolete. The default value is 1024x768.

Mouse

<key>Mouse</key>
<dict>
    <key>Enabled</key>
    <true/>
    <key>Speed</key>
    <integer>2</integer>
    <key>Mirror</key>
    <false/>
    <key>DoubleClick</key>
    <integer>500</integer>
</dict>
  • Enabled - The mouse may not work or even cause the whole interface to lock up. Turn it off if this is the case.
  • Speed - Mouse movement speed. Reasonable values range from 2-8. Some mice may need a negative speed to reverse the movement. 0 turns off the mouse.
  • Mirror - Negative movement speed on a single axis
  • DoubleClick - Pause for double click detection in milliseconds. Until now 500 has been a good value for everyone.

Volumes

Clover's interface can show both legacy and UEFI loaders for installed operating systems. It is even possible to have multiple boot loaders on one partition. Maybe you do not need all of them and having just a couple is enough. You can hide single partitions, as well as whole loader types:

<key>Volumes</key>
<dict>
    <key>Legacy</key>
    <string>First</string>
    <key>Hide</key>
    <array>
        <string>WindowsHDD</string>
        <string>HD(1,GPT,E223FF7F-F2DA-4DBB-B765- 756F2D95B0FE)</string>
    </array>
</dict>
  • Legacy - Boot loader started through PBR. Choose from No to hide the loader, First to list in the beginning, Last to list it in the end.
  • Hide - Hide a partition with given name or UUID.

HideEntries

<key>HideEntries</key>
<dict>
    <key>OSXInstall</key>
    <true/>
    <key>Recovery</key>
    <true/>
    <key>Duplicate</key>
    <true/>
    <key>WindowsEFI</key>
    <false/>
    <key>Grub</key>
    <false/>
    <key>Gentoo</key>
    <false/>
    <key>Ubuntu</key>
    <false/>
    <key>OpticalUEFI</key>
    <true/>
    <key>InternalUEFI</key>
    <true/>
    <key>ExternalUEFI</key>
    <true/>
</dict>

This way you can hide loaders used by a specific operating system (why did you install them in first place?) or service partitions like Recovery or UEFI files found in different places.

DebugLog

One last parameter, which does not really belong here, is stored in this section:

<key>DebugLog</key>
<false/>

Setting it to <true/> will dramatically decrease loading time and generate a log file, which can be inspected for debugging purposes after a reboot.

FastBoot

<key>FastBoot</key>
<true/>
[Clover on applelife] [Clover on projectosx] [Clover on sourceforge]