Tiny SSDT example 2: ASUS P8Z68 V PRO - RevoGirl/RevoBoot GitHub Wiki
Introduction
This is another example of a tiny SSDT. This time for the Asus P8Z68-V PRO motherboards, and now it includes
the header. Making it easier for you to compile it with iasl or iaslMe.app Simply compare it with our other examples and see how little was changed.
Notes
We cannot say this often enough: Most of what you see here isn't even necessary. Most of it is pure cosmetic. Not required. Yes. The tiny SSDT examples can be a lot smaller, but our goal here is to help you understand what can be done.
We also like to reiterate that it will take some time before the stubborn old geezers change their minds, but once they have seen the light... this thing will become even bigger. They just don't realize what they are missing (the bigger picture).
/*
* Intel ACPI Component Architecture
* AML Disassembler version 20110316-64 [Mar 16 2011]
* Copyright (c) 2000 - 2011 Intel Corporation
*
* Original Table Header:
* Signature "SSDT"
* Length 0x00000156 (342)
* Revision 0x01
* Checksum 0x67
* OEM ID "APPLE "
* OEM Table ID "general"
* OEM Revision 0x00001000 (1)
* Compiler ID "INTL"
* Compiler Version 0x20110316 (537985814)
*/
DefinitionBlock ("ssdt.aml", "SSDT", 1, "APPLE ", "general", 0x00001000)
{
Scope (\)
{
External (\_SB.PCI0, DeviceObj)
External (\_SB.PCI0.HPET.HPTE, IntObj)
Method (_INI, 0, NotSerialized) // Adding _INI Method.
{
Store (One, \_SB.PCI0.HPET.HPTE) // Sets the High Precision Timer setting in the UEFI BIOS to Enabled.
}
External (AMW0, DeviceObj) // Here we disable device AMW0 in the factory DSDT.
Scope (AMW0)
{
Name (_STA, Zero)
}
External (OMSC, DeviceObj)
Scope (OMSC) // And here another one.
{
Name (_STA, Zero)
}
Scope (\_SB) // Changing the scope to the System Bus tree.
{
External (RMEM, DeviceObj)
Scope (RMEM) // Removing a factory device.
{
Name (_STA, Zero)
}
Scope (PCI0) // And over to device PCI0.
{
Name (PW94, Package (0x02) { 0x09, 0x04 })
Device (MCHC) // Adding device for Power Management.
{
Name (_ADR, Zero)
}
Device (HDEF) // Adding audio device.
{
Name (_ADR, 0x001B0000)
Alias (PW94, _PRW)
}
External (GFX0, DeviceObj)
Scope (GFX0) // Disabling GFX0 (so that we can rename it).
{
Name (_STA, Zero)
}
Device (IGPU) // Adding name to the on-board HD3000 GPU.
{
Name (_ADR, 0x00020000)
}
External (P0P1, DeviceObj)
Scope (P0P1)
{
Device (GFX0) // Giving our discrete GPU card a device name.
{
Name (_SUN, One) // A simple cosmetic only change.
Name (_ADR, Zero)
}
Device (HDAU) // Base for High Definition Audio link.
{
Name (_ADR, One)
}
}
External (PEX6, DeviceObj) // Path to Device PEX6 in namespace.
Scope (PEX6)
{
External (BR24, DeviceObj) // Path to Device BR24 in namespace.
Scope (BR24) // Removing factory FireWire Bridge.
{
Name (_STA, Zero)
}
Device (FWBR) // Adding a new one with a different name.
{
Name (_ADR, Zero)
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02) { 0x0B, 0x04 })
}
External (AR24, DeviceObj) // Path to power resource in namespace.
Method (_PRT, 0, NotSerialized)
{
Return (AR24)
}
Device (FRWR) // And here we give our Firewire device a name.
{
Name (_ADR, 0x20000)
}
}
}
External (GBE, DeviceObj) // Path to factory Ethernet Device.
Scope (GBE) // Removing factory Ethernet Device.
{
Name (_STA, Zero)
}
Device (GIGE) // And here we add one under a new name.
{
Name (_ADR, 0x00190000)
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02) { 0x0D, 0x04 })
}
}
External (BR20, DeviceObj) // Path to Bluetooth Device in namespace.
Scope (BR20)
{
Name (_STA, 0x0F)
}
External (SAT0, DeviceObj) // Removing a SATA device with the wrong name.
Scope (SAT0)
{
Name (_STA, Zero)
}
External (SAT1, DeviceObj) // Removing an unused device.
Scope (SAT1)
{
Name (_STA, Zero)
}
Device (SATA) // Inject new SATA device, one with the correct name.
{
Name (_ADR, 0x001F0002)
}
External (SBRG, DeviceObj)
Scope (SBRG) // Using Scope here since this device is already defined in the namespace!
{
External (EC0, DeviceObj) // Creating a path to the factory EC0 in the namespace
Scope (EC0)
{
Name (_STA, Zero) // Removing factory EC0 device
}
Device (EC) // Adding new EC device to the namespace!
{
Name (_HID, EisaId ("PNP0C09"))
Name (_GPE, 0x18)
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0062,
0x0062,
0x00,
0x01,
_Y12)
IO (Decode16,
0x0066,
0x0066,
0x00,
0x01,
_Y13)
})
CreateWordField (_CRS, \_SB.PCI0.SBRG.EC._Y12._MIN, DPRT)
CreateWordField (_CRS, \_SB.PCI0.SBRG.EC._Y13._MIN, CPRT)
}
External (SPKR, DeviceObj) // Creating a path to the existing device in the namespace
Scope (SPKR) // Let's remove the speaker device (most people won't need it)
{
Name (_STA, Zero) // Disabling device, by adding a status property with Zero as value
}
External (RMSC, DeviceObj)
Scope (RMSC)
{
Name (_STA, Zero)
}
External (COPR, DeviceObj) // Creating a path to the existing device in the namespace
Scope (COPR) // Declaring the scope of operation
{
Name (_STA, Zero) // Disabling factory device
}
Device (MATH) // Adding a new device to the namespace!
{
Name (_HID, EisaId ("PNP0C04"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x00F0,
0x00F0,
0x00,
0x10,
)
IRQNoFlags ()
{13}
})
}
External (DMAD, DeviceObj) // Creating a path to DMAD in the namespace
Scope (DMAD) // Removing factory timer device
{
Name (_STA, Zero) // Disabling factory device
}
External (TMR, DeviceObj) // Creating a path to the existing device in the namespace
Scope (TMR) // Removing factory timer device
{
Name (_STA, Zero) // Disabling factory device
}
Device (TIMR) // Adding a new timer device to the namespace
{
Name (_HID, EisaId ("PNP0100"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0040,
0x0040,
0x00,
0x04,
)
IRQNoFlags ()
{0}
})
}
External (RTC0, DeviceObj) // Creating a path to the existing device in the namespace
Scope (RTC0) // Declaring the scope of operation
{
Name (_STA, Zero) // Disabling factory device, by adding a status property with Zero as value
}
Device (RTC) // Adding a fixed RTC device to the namespace!
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070,
0x0070,
0x01,
0x08, // Fix for "RTC: Only single RAM bank (128 bytes)" in kernel.log
)
IRQNoFlags ()
{8}
})
}
External (SIO1, DeviceObj)
Scope (SIO1)
{
Name (_STA, Zero)
}
External (WMI1, DeviceObj)
Scope (WMI1)
{
Name (_STA, Zero)
}
}
Device (SBUS) // Adding device SBUS.
{
Name (_ADR, 0x001F0003)
Device (BUS0)
{
Name (_CID, "smbus")
Name (_ADR, Zero)
Device (DVL0)
{
Name (_ADR, 0x57)
Name (_CID, "diagsvault")
}
}
}
}
}
External (DBG8, IntObj)
External (\_SB.SMIC, IntObj)
External (\_SB.PCI0.SBRG.PS1S, IntObj)
External (\_SB.PCI0.SBRG.PS1E, IntObj)
Method (_PTS, 1, NotSerialized)
{
Store (0x90, \_SB.SMIC)
Store (Arg0, DBG8)
If (LNotEqual (Arg0, 0x05))
{
Store (One, \_SB.PCI0.SBRG.PS1S)
Store (One, \_SB.PCI0.SBRG.PS1E)
}
}
}
}
IGPU
There are two versions of the IGPU - on chip graphics core - being the Intel® HD Graphics 2000 and Intel® HD Graphics 3000. Not to be confuse with discrete graphics cards. And some of you might have noticed that the example above does not include any lines for the IGPU, so let's add that here. In a separate code block example because we don't expect people to include it - most people will be using AMD or NVIDIA PCIe cards instead.
External (GFX0, DeviceObj)
Scope (GFX0) // Disabling GFX0 (so that we can rename it).
{
Name (_STA, Zero)
}
Device (IGPU) // Adding name to the on-board HD3000 GPU.
{
Name (_ADR, 0x00020000)
}
We've put the above lines right under Device (MCHC) and just above Device (HDEF). In between of the two that is. Please note that nothing shows up until you enabled it in the BIOS.
IGPU Update
I have added the IGPU changes to make sure that people know what to put where!
SBUS Update
I now also added Device SBUS, which wasn't there because I inject it with RevoBoot. Please note, and very well, that you cannot have duplicated devices. Use either one i.e. or use this Tiny-SSDT or let RevoBoot inject it for you. Not both!
Troubleshooting
You may have de-compiled ssdt.aml and run into trouble when you try to compile it again. This can be easily fixed. You have to change two of the "External" declarations in your ssdt.dsl. Make sure it looks like this:
DefinitionBlock ("ssdt.aml", "SSDT", 1, "APPLE ", "general", 0x00001000)
{
External (DBG8, IntObj)
External (AR24, IntObj)
External (WMI1, DeviceObj)
External (SIO1, DeviceObj)
External (RTC0, DeviceObj)
External (TMR, DeviceObj)
External (DMAD, DeviceObj)
External (COPR, DeviceObj)
External (RMSC, DeviceObj)
External (SPKR, DeviceObj)
External (EC0, DeviceObj)
External (SAT1, DeviceObj)
External (SAT0, DeviceObj)
External (BR20, DeviceObj)
External (GBE, DeviceObj)
External (BR24, DeviceObj)
External (PEX6, DeviceObj)
External (P0P1, DeviceObj)
External (RMEM, DeviceObj)
External (OMSC, DeviceObj)
External (AMW0, DeviceObj)
External (\_SB.SMIC)
External (\_SB.PCI0, DeviceObj) // Target #1
External (\_SB.PCI0.HPET.HPTE, IntObj)
External (\_SB.PCI0.SBRG, DeviceObj) // Target #2
External (\_SB.PCI0.SBRG.PS1E)
External (\_SB.PCI0.SBRG.PS1S)
Scope (\)
{ ...
Also check for duplicates and compile again. Should fix this issue. Problem solved.