Monday, July 11, 2011

Minimal DSDT Edits for Gigabyte Socket 1155 Motherboards


I started researching and testing what edits from my New Minimal DSDT Edits for Gigabyte Socket 1156 Motherboards were or weren't needed on the Socket 1155 boards. The good news is that the majority of the edits carry over, but some are not needed. For example, we don't need to inject anything for the USB ports to be fully recognized. But there are a couple of required Socket 1155 specific edits.

The following is a guide for editing the extracted DSDT. The first thing you will need to do is the required edits so that the DSDT will compile. They are:

1) "Reserved method must return a value"

 Add to the end of _WAK

        Return (Package (0x02)
        {
            0x00,
            0x00
        })
     
2) "Method local variable is not initialized"

 In Scope (\_SI)

Change both:

  Store (Local0, Local0)
 
 To:

 Store (0x00, Local0)

3) "Use of compiler reserved name"

 Replace all _T_ with T_

4) "Effective AML package length is zero"

 Change:

  Name (RPMV, Package (0x00) {})

 To:

  Name (RPMV, Package (Zero) {})

5) "Result is not used, operator has no effect"

 Change:

  Or (0x03, PARM)

 To:

  Or (PARM, 0x03, PARM)

The first required edit is to include Method DTGP for passing configuration parameters to OS X. Next up is renaming device names to follow Apple's conventions. They are renaming all PX40 to LPCB, PX43 to SBUS, all AZAL to HDEF, Device (IDE1) to Device (SATA) and it's sub-device ports from Device (PRIM) to Device (PRT0) and Device (SECD) to Device (PRT1), deleting Device (IDE2) (unused) and finally renaming the USB device names, USBE to EHC1 and USE2 to EHC2

Now that we have all of the correct device names now we need to add some missing information. For the SMBus we need to add the following to Device (SBUS) as a nested sub-device:

                Device (BUS0)
                {
                    Name (_CID, "smbus")
                    Name (_ADR, 0x00)
                    Device (DVL0)
                    {
                        Name (_ADR, 0x57)
                        Name (_CID, "diagsvault")
                        Method (_DSM, 4, NotSerialized)
                        {
                            Store (Package (0x02)
                                {
                                   "address",
                                    0x57
                                }, Local0)
                            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                            Return (Local0)
                        }
                    }
                }

For ALC8xxHDA to work correctly we need to inject into Device (HDEF) codec information. Here is an example of what needs to be added for a board using and an ALC889 codec:

                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x04)
                        {
                            "layout-id",
                            Buffer (0x04)
                            {
                                0x79, 0x03, 0x00, 0x00   // decimal 889
                            },
                            "PinConfigurations",
                            Buffer (Zero)
                            {
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

For other codecs you will need to change the layout-id to match your codec.

There is a problem with Audio break ups that can be corrected in the DSDT. The first is in Device (PIC) remove these two lines:

  IRQNoFlags ()
                {2}

The other fix for audio break ups is in Device (TMR) where we need to change:

                    Method (_CRS, 0, NotSerialized)
                    {
                        If (LGreaterEqual (OSFX, 0x03))
                        {
                            If (HPTF)
                            {
                                Return (ATT6)
                            }
                            Else
                            {
                                Return (ATT5)
                            }
                        }
                        Else
                        {
                            Return (ATT5)
                        }
                    }

To:
                    Method (_CRS, 0, NotSerialized)
                    {
                        Return (ATT6)
                    }

The next fix is to prevent kernel panics in AppleIntelCPUPowerManagement at boot time. This fix is easy; just change Method (_STA, 0, NotSerialized) to Return (0x0F) and to change Method (_CRS, 0, NotSerialized) to Return (ATT3).

The final edit is to allow you to use the power button to put the computer to sleep.  In Device (PWRB) change Name (_HID, EisaId ("PNP0C0C")) to Name (_CID, EisaId ("PNP0C0C")).

If you don't want to bother with these edits, you can download pre-edited DSDTs from the tonymacx86.com DSDT Database.



For discussions on this and other topics, register today at http://www.tonymacx86.com/

Tuesday, July 5, 2011

Creating a Bootable “DOS” USB Stick on a Hackintosh Without Windows or MS-DOS

A lot of manufacturers provide DOS only firmware updaters. If you have a dual boot system with Windows it’s a piece of cake. But the issue is how do you do this on a Hackintosh without Windows installed?  Well I have found a solution, FreeDOS, a free DOS-compatible operating system for IBM-PC compatible systems. 

What you need:
Installation procedure:
  1. Format the USB drive as a MBR/FAT volume
  2. Burn the FreeDOS Base CD
  3. Shut down OS X and disconnect all disk drives
  4. Boot computer while ensuring that Legacy USB support is enabled in the BIOS and USB drive is connected
  5. Boot from FreeDOS Base CD and follow instructions to install. It will install by default to the 1st drive it finds. In this case it’s the USB drive as it’s the only one connected.
  6. Shutdown and reconnect all disk drives.
  7. You now have a bootable “DOS” drive.
This drive is bootable and can be read and written to in OS X. You can copy any DOS based programs on to it and boot from it to run them.
For discussions on this and other topics, register today at tonymacx86.com!