InfiniteMac OSx86

InfiniteMac OSx86 (http://infinitemac.com/forum.php)
-   10.X (http://infinitemac.com/forumdisplay.php?f=36)
-   -   Asus K50IN (http://infinitemac.com/showthread.php?t=4409)

man_of_the_oak 08-21-2011 11:41 PM

What is left is to get rid of 42 warnings and one remark. Let's have a look at the warnings:

Code:

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  2980:                    Method (ADVD, 0, NotSerialized)
Warning  1088 -                                                              Not all control paths return a value ^  (ADVD)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5709:                            If (LOr (MP0P (Local6), MP1P (Local6)))
Warning  1093 -                                                                Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5709:                            If (LOr (MP0P (Local6), MP1P (Local6)))
Warning  1093 -                                                                Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5711:                                Multiply (MCRS (Local6), 0x08000000, BF0F)
Warning  1093 -                                                                    Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5713:                                If (MPCR (Local6))
Warning  1093 -                                                              Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5715:                                    If (MP0P (Local6))
Warning  1093 -                                                                  Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5717:                                        If (MP1P (Local6))
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5728:                                If (MP0P (Local6))
Warning  1093 -                                                              Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5730:                                    Store (MP0N (Local6), Local5)
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5734:                                    If (MP1P (Local6))
Warning  1093 -                                                                  Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5736:                                        Store (MP1N (Local6), Local5)
Warning  1093 -                                                                          Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5740:                                If (LGreater (BNKN, MCDB (Local5)))
Warning  1093 -                                                                        Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5742:                                    Store (MCDB (Local5), BNKN)
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5745:                                If (LLess (BNKX, MCDB (Local5)))
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5747:                                    Store (MCDB (Local5), BNKX)
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5750:                                If (LGreater (COLN, MCDC (Local5)))
Warning  1093 -                                                                        Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5752:                                    Store (MCDC (Local5), COLN)
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5755:                                If (LLess (COLX, MCDC (Local5)))
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5757:                                    Store (MCDC (Local5), COLX)
Warning  1093 -                                                                      Called method may not always return a value ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5798:            Method (MP0P, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MP0P)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5826:            Method (MP1P, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MP1P)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5854:            Method (MPCR, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MPCR)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5882:            Method (MP0N, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MP0N)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5910:            Method (MP1N, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MP1N)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5938:            Method (MCRB, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MCRB)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5966:            Method (MCRS, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MCRS)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  5994:            Method (MCDB, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MCDB)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  6017:            Method (MCDC, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (MCDC)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  6295:            Method (WMNV, 3, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (WMNV)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7136:            Acquire (MUTE, 0x03E8)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7150:            Acquire (MUTE, 0x03E8)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7165:            Acquire (MUTE, 0x03E8)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7180:            Acquire (MUTE, 0x0FFF)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7194:            Acquire (MUTE, 0x03E8)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7209:            Acquire (MUTE, 0x03E8)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  7224:            Acquire (MUTE, 0x03E8)
Warning  1105 -                                      Result is not used, possible operator timeout will be missed ^

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  8970:            Return (One)
Warning  1128 -                                                Reserved method should not return a value ^  (_Q0E)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  9001:            Return (One)
Warning  1128 -                                                Reserved method should not return a value ^  (_Q0F)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  10256:            Method (GMLE, 1, Serialized)
Warning  1088 -                                                      Not all control paths return a value ^  (GMLE)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  10269:            Method (SMLE, 1, Serialized)
Warning  1088 -                                                      Not all control paths return a value ^  (SMLE)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  10289:            Method (WLLC, 1, NotSerialized)
Warning  1088 -                                                      Not all control paths return a value ^  (WLLC)

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  10946:                Return (\_SB.PCI0.IXVE.IGPU.ADVD ())
Warning  1093 -                                                                      Called method may not always return a value ^

Firstly, we have to take care of all Not all control paths return a value warnings. I will show you an example which is clear enough to give you an idea on how to work with the rest.

Code:

Method (MP0P, 1, NotSerialized)
            {
                If (LEqual (Arg0, Zero))
                {
                    Return (P0P0)
                }

                If (LEqual (Arg0, One))
                {
                    Return (P0P1)
                }

                If (LEqual (Arg0, 0x02))
                {
                    Return (P0P2)
                }

                If (LEqual (Arg0, 0x03))
                {
                    Return (P0P3)
                }

                If (LEqual (Arg0, 0x04))
                {
                    Return (P0P4)
                }
            }

In general - at the end of the part where warning occurs, we have to add "Return (Zero)":

Code:

Method (MP0P, 1, NotSerialized)
            {
                If (LEqual (Arg0, Zero))
                {
                    Return (P0P0)
                }

                If (LEqual (Arg0, One))
                {
                    Return (P0P1)
                }

                If (LEqual (Arg0, 0x02))
                {
                    Return (P0P2)
                }

                If (LEqual (Arg0, 0x03))
                {
                    Return (P0P3)
                }

                If (LEqual (Arg0, 0x04))
                {
                    Return (P0P4)
                }
                    Return (Zero)
            }

When we are done with all warnings of this type, we go straight to "Reserved method should not return a value". Again - I am going to show you an example:

Code:

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl  8970:            Return (One)
Warning  1128 -                                                Reserved method should not return a value ^  (_Q0E)

Code:

Return (One)
One of my warnings is connected with this line. It's obvious that we simply have to remove it. It's the easiest way to return nothing :p

To finish with all warnings we also have to take care of these:

Code:

Acquire (MUTE, 0x03E8)
Warning  1105 -                            Result is not used, possible operator timeout will be missed ^

The fix is very easy (again!). Simply change all Acquire (MUTE, 0x03E8) to Acquire (MUTE, 0xFFFF).

If you are still reading this, you must be a pedant-type, just like me... let's move to remark then :p

Code:

/Users/man_of_the_oak/Desktop/Asus K50IN/Brudactwo/DSDT_K50IN_K50IN000.dsl    159:        Name (_T_0, Zero)
Remark  5111 -                                                      Use of compiler reserved name ^  (_T_0)

Find all "_T_0" within whole DSDT and replace them to "T_0". Congrats! Your DSDT should compile with this result:

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks

4. DSDT modifying

DTGP method

Before:

Code:

(...)
DefinitionBlock ("DSDT.aml", "DSDT", 1, "K50IN", "K50IN000", 0x00000000)
{
    Scope (_PR)
    {
        Processor (P001, 0x01, 0x00004010, 0x06) {}
        Alias (P001, CPU0)
    }

    Scope (_PR)
    {
        Processor (P002, 0x02, 0x00004010, 0x06) {}
        Alias (P002, CPU1)
    }

    Scope (_PR)
    {
        Processor (P003, 0x03, 0x00004010, 0x06) {}
        Alias (P003, CPU2)
    }
 (...)

After:

Code:

(...)
DefinitionBlock ("DSDT.aml", "DSDT", 1, "K50IN", "K50IN000", 0x00000000)
{
    Method (DTGP, 5, NotSerialized)
    {
        If (LEqual (Arg0, Buffer (0x10)
                {
                    /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
                    /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
                }))
        {
            If (LEqual (Arg1, One))
            {
                If (LEqual (Arg2, Zero))
                {
                    Store (Buffer (One)
                        {
                            0x03
                        }, Arg4)
                    Return (One)
                }

                If (LEqual (Arg2, One))
                {
                    Return (One)
                }
            }
        }

        Store (Buffer (One)
            {
                0x00
            }, Arg4)
        Return (Zero)
    }
    Scope (_PR)
    {
        Processor (P001, 0x01, 0x00004010, 0x06) {}
        Alias (P001, CPU0)
    }

    Scope (_PR)
    {
        Processor (P002, 0x02, 0x00004010, 0x06) {}
        Alias (P002, CPU1)
    }

    Scope (_PR)
    {
        Processor (P003, 0x03, 0x00004010, 0x06) {}
        Alias (P003, CPU2)
    } (...)

Deleting Aliases:

Before:

Code:

(...)
Scope (_PR)
    {
        Processor (P001, 0x01, 0x00004010, 0x06) {}
        Alias (P001, CPU0)
    }

    Scope (_PR)
    {
        Processor (P002, 0x02, 0x00004010, 0x06) {}
        Alias (P002, CPU1)
    }

    Scope (_PR)
    {
        Processor (P003, 0x03, 0x00004010, 0x06) {}
        Alias (P003, CPU2)
    }

    Scope (_PR)
    {
        Processor (P004, 0x04, 0x00004010, 0x06) {}
        Alias (P004, CPU3)
    }
(...)

After:

Code:

(...)
Scope (_PR)
    {
        Processor (P001, 0x01, 0x00004010, 0x06) {}
        Processor (P002, 0x02, 0x00004010, 0x06) {}
        Processor (P003, 0x03, 0x00004010, 0x06) {}
        Processor (P004, 0x04, 0x00004010, 0x06) {}
    }(...)

We also have to change CPU0->P001, CPU1->P002, CPU2->P003 and CPU3->P004 within whole DSDT!

OS detection

Before:

Code:

(...)
Method (OSYS, 0, NotSerialized)
    {
        Store (0x10, Local0)
        If (CondRefOf (_OSI, Local1))
        {
            If (_OSI ("Windows 2000"))
            {
                Store (0x12, Local0)
            }

            If (_OSI ("Windows 2001"))
            {
                Store (0x13, Local0)
            }

            If (_OSI ("Windows 2001 SP1"))
            {
                Store (0x13, Local0)
            }

            If (_OSI ("Windows 2001 SP2"))
            {
                Store (0x13, Local0)
            }

            If (_OSI ("Windows 2001.1"))
            {
                Store (0x14, Local0)
            }

            If (_OSI ("Windows 2001.1 SP1"))
            {
                Store (0x14, Local0)
            }

            If (_OSI ("Windows 2006"))
            {
                Store (0x15, Local0)
            }
        }(...)

After:

Code:

(...)
Method (OSYS, 0, NotSerialized)
    {
        Store (0x10, Local0)
        If (CondRefOf (_OSI, Local1))
        {
            If (_OSI ("Windows 2000"))
            {
                Store (0x12, Local0)
            }

            If (_OSI ("Windows 2001"))
            {
                Store (0x13, Local0)
            }

            If (_OSI ("Windows 2001 SP1"))
            {
                Store (0x13, Local0)
            }

            If (_OSI ("Windows 2001 SP2"))
            {
                Store (0x13, Local0)
            }

            If (_OSI ("Windows 2001.1"))
            {
                Store (0x14, Local0)
            }

            If (_OSI ("Windows 2001.1 SP1"))
            {
                Store (0x14, Local0)
            }

            If (_OSI ("Windows 2006"))
            {
                Store (0x15, Local0)
            }
           
            If (_OSI ("Darwin"))
            {
                Store (0x15, Local0)
            }
        }(...)


man_of_the_oak 08-21-2011 11:51 PM

PIC

Before:

Code:

(...)
Device (PIC)
                {
                    Name (_HID, EisaId ("PNP0000"))
                    Name (_CRS, ResourceTemplate ()
                    {
                        IO (Decode16,
                            0x0020,            // Range Minimum
                            0x0020,            // Range Maximum
                            0x00,              // Alignment
                            0x02,              // Length
                            )
                        IO (Decode16,
                            0x00A0,            // Range Minimum
                            0x00A0,            // Range Maximum
                            0x00,              // Alignment
                            0x02,              // Length
                            )
                        IRQNoFlags ()
                            {2}
                    })
                }(...)

After:

Code:

(...)
Device (PIC)
                {
                    Name (_HID, EisaId ("PNP0000"))
                    Name (_CRS, ResourceTemplate ()
                    {
                        IO (Decode16,
                            0x0020,            // Range Minimum
                            0x0020,            // Range Maximum
                            0x00,              // Alignment
                            0x02,              // Length
                            )
                        IO (Decode16,
                            0x00A0,            // Range Minimum
                            0x00A0,            // Range Maximum
                            0x00,              // Alignment
                            0x02,              // Length
                            )
                    })
                }(...)

Enabling SMBus

Before:

Code:

(...)
Device (SMB0)
            {
                Name (_ADR, 0x00030002)
                OperationRegion (SMAD, PCI_Config, 0x20, 0x08)
                Field (SMAD, DWordAcc, NoLock, Preserve)
                {
                    SB1,    32,
                    SB2,    32
                }

                OperationRegion (SMCF, PCI_Config, 0x48, 0x10)
                Field (SMCF, DWordAcc, NoLock, Preserve)
                {
                    SMPM,  4,
                    SMT1,  28,
                    SMT2,  32
                }(...)

After:

Code:

(...)
Device (SMB0)
            {
                Name (_ADR, 0x00030002)
                Device (BUS0)
                {
                    Name (_CID, "smbus")
                    Name (_ADR, Zero)
                    Device (DVL0)
                    {
                        Name (_ADR, 0x57)
                        Name (_CID, "diagsvault")
                    }
                }

                OperationRegion (SMAD, PCI_Config, 0x20, 0x08)
                Field (SMAD, DWordAcc, NoLock, Preserve)
                {
                    SB1,    32,
                    SB2,    32
                }

                OperationRegion (SMCF, PCI_Config, 0x48, 0x10)
                Field (SMCF, DWordAcc, NoLock, Preserve)
                {
                    SMPM,  4,
                    SMT1,  28,
                    SMT2,  32
                }(...)

Audio injection

Before:

Code:

(...)
Device (HDAC)
            {
                Name (_ADR, 0x00080000)
                Name (SCID, Zero)
                Name (SACW, Zero)
                Method (_PS0, 0, NotSerialized)
                {
                    If (SCID)
                    {
                        Store (Zero, PMDS)
                        Store (Zero, PMEN)
                        Store (SCID, CDID)
                        Store (SACW, AOCW)
                    }
                }

                Method (_PS3, 0, NotSerialized)
                {
                    Store (AOCW, SACW)
                    Store (CDID, SCID)
                    Store (One, PMST)
                    Store (0x03, PMDS)
                    Store (One, PMEN)
                }(...)

After:

Code:

(...)
Device (HDEF)
            {
                Name (_ADR, 0x00080000)
                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x08)
                        {
                            "subsystem-id",
                            Buffer (0x04)
                            {
                                0xF3, 0x16, 0x00, 0x00
                            },

                            "subsystem-vendor-id",
                            Buffer (0x04)
                            {
                                0x43, 0x10, 0x00, 0x00
                            },

                            "layout-id",
                            Buffer (0x04)
                            {
                                0x0C, 0x00, 0x00, 0x00
                            },

                            "PinConfigurations",
                            Buffer (Zero) {}
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }
                Name (SCID, Zero)
                Name (SACW, Zero)
                Method (_PS0, 0, NotSerialized)
                {
                    If (SCID)
                    {
                        Store (Zero, PMDS)
                        Store (Zero, PMEN)
                        Store (SCID, CDID)
                        Store (SACW, AOCW)
                    }
                }

                Method (_PS3, 0, NotSerialized)
                {
                    Store (AOCW, SACW)
                    Store (CDID, SCID)
                    Store (One, PMST)
                    Store (0x03, PMDS)
                    Store (One, PMEN)
                }(...)

Cosmetic fix injecting graphics card information (without it in System Profiler it will be called "Unknown", new Chameleon version fixes the problem but it doesn't show RAM information properly, so I'd rather use the one from my archive and add this fix to DSDT):

Before:

Code:

(...)
Name (DONE, Zero)
                    Name (DOSF, One)
                    Name (BRNC, Zero)
                    Method (_INI, 0, NotSerialized)
                    {
                        GETD ()
                    }

                    Method (_DOS, 1, NotSerialized)
                    {
                        And (Arg0, 0x03, DOSF)
                        Store (ShiftRight (Arg0, 0x02), BRNC)
                        And (BRNC, One, BRNC)
                    }(...)

After:

Code:

(...)
Name (DONE, Zero)
                    Name (DOSF, One)
                    Name (BRNC, Zero)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package ()
                            {
                                "@0,compatible",
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                },

                                "@0,device_type",
                                Buffer (0x08)
                                {
                                    "display"
                                },

                                "@0,name",
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-A"
                                },

                                "@1,compatible",
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                },

                                "@1,device_type",
                                Buffer (0x08)
                                {
                                    "display"
                                },

                                "@1,name",
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-B"
                                },

                                "device_type",
                                Buffer (0x0C)
                                {
                                    "NVDA,Parent"
                                },

                                "model",
                                Buffer ()
                                {
                                    "NVIDIA GeForce G102M"
                                },

                                "rom-revision",
                                Buffer ()
                                {
                                    "62.79.78.00.06"
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                    Method (_INI, 0, NotSerialized)
                    {
                        GETD ()
                    }

                    Method (_DOS, 1, NotSerialized)
                    {
                        And (Arg0, 0x03, DOSF)
                        Store (ShiftRight (Arg0, 0x02), BRNC)
                        And (BRNC, One, BRNC)
                    }(...)

Time Machine fix

Before:

Code:

(...)
Device (P0P6)
            {
                Name (_ADR, 0x00150000)
                Method (_PRW, 0, NotSerialized)
                {
                    Return (GPRW (0x11, 0x04))
                }(...)

After:

Code:

(...)
Device (P0P6)
            {
                Name (_ADR, 0x00150000)
                Device (LAN)
                {
                    Name (_ADR, Zero)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x04)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                    0x01
                                },
                                  "name",
                                Buffer (0x24)
                                {
                                      "Realtek RTL8111/8168B PCI-E Gigabit"
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
               
                Method (_PRW, 0, NotSerialized)
                {
                    Return (GPRW (0x11, 0x04))
                }(...)

OS detection 2

Before:

Code:

(...)
Method (MSOS, 0, NotSerialized)
        {
            If (CondRefOf (_OSI, Local0))
            {
                If (_OSI ("Windows 2001"))
                {
                    Store (OSXP, OSFG)
                }

                If (_OSI ("Windows 2001 SP1"))
                {
                    Store (OSXP, OSFG)
                }

                If (_OSI ("Windows 2001 SP2"))
                {
                    Store (OSXP, OSFG)
                }

                If (_OSI ("Windows 2006"))
                {
                    Store (OSVT, OSFG)
                }

                If (_OSI ("Linux"))
                {
                    Store (OSEG, OSFG)
                }

                If (_OSI ("Windows 2009"))
                {
                    Store (OSW7, OSFG)
                }

                Return (OSFG)
            }(...)

After:

Code:

(...)
Method (MSOS, 0, NotSerialized)
        {
            If (CondRefOf (_OSI, Local0))
            {
                If (_OSI ("Windows 2001"))
                {
                    Store (OSXP, OSFG)
                }

                If (_OSI ("Windows 2001 SP1"))
                {
                    Store (OSXP, OSFG)
                }

                If (_OSI ("Windows 2001 SP2"))
                {
                    Store (OSXP, OSFG)
                }

                If (_OSI ("Windows 2006"))
                {
                    Store (OSVT, OSFG)
                }
               
                If (_OSI ("Darwin"))
                {
                    Store (OSVT, OSFG)
                }

                If (_OSI ("Linux"))
                {
                    Store (OSEG, OSFG)
                }

                If (_OSI ("Windows 2009"))
                {
                    Store (OSW7, OSFG)
                }

                Return (OSFG)
            }(...)

LID sleep fix (enables sleep after closing lid):

Before:

Code:

(...)
Device (LID)
        {
            Name (_HID, EisaId ("PNP0C0D"))
            Method (_LID, 0, NotSerialized)
            {
                Store (One, Local0)
                ^^PCI0.SBRG.EC0.DL9F ()
                Store (^^PCI0.SBRG.EC0.RPIN (0x06), Local0)
                ^^PCI0.SBRG.EC0.DL9F ()
                If (LEqual (Local0, Ones))
                {
                    Store (One, Local0)
                }

                Return (Local0)
            }
        }(...)

After:

Code:

(...)
Device (LID)
        {
            Name (_HID, EisaId ("PNP0C0D"))
            Name (LIDS, One)
            Method (_LID, 0, NotSerialized)
            {
                Store (^^PCI0.SBRG.EC0.RPIN (0x06), LIDS)
                XOr (LIDS, One, Local0)
                If (Local0)
                {
                    Notify (SLPB, 0x80)
                }

                Return (LIDS)
            }
        }(...)

WLAN injection

Before:

Code:

(...)
Device (P0P7)
            {
                Name (_ADR, 0x00160000)
                Method (_PRW, 0, NotSerialized)
                {
                    Return (GPRW (0x11, 0x04))
                }

                Method (_PRT, 0, NotSerialized)
                {
                    If (PICM)
                    {
                        Return (AR07)
                    }

                    Return (PR07)
                }
            }(...)

After:

Code:

(...)
Device (P0P7)
            {
                Name (_ADR, 0x00160000)
                Method (_PRW, 0, NotSerialized)
                {
                    Return (GPRW (0x11, 0x04))
                }

                Device (ARPT)
                {
                    Name (_ADR, Zero)
                    Name (_PRW, Package (0x02)
                    {
                        0x0B,
                        0x05
                    })
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x0C)
                            {
                                "AAPL,slot-name",
                                Buffer (0x08)
                                {
                                    "AirPort"
                                },

                                "device-id",
                                Unicode ("*"),
                                "device_type",
                                Buffer (0x08)
                                {
                                    "AirPort"
                                },

                                "model",
                                Buffer (0x34)
                                {
                                    "Atheros 9285 8802.11 b/g/n Wireless Network Adapter"
                                },

                                "subsystem-id",
                                Buffer (0x04)
                                {
                                    0x89, 0x10, 0x00, 0x00
                                },

                                "subsystem-vendor-id",
                                Buffer (0x04)
                                {
                                    0x3B, 0x1A, 0x00, 0x00
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }

                Method (_PRT, 0, NotSerialized)
                {
                    If (PICM)
                    {
                        Return (AR07)
                    }

                    Return (PR07)
                }
            }(...)

In my DSDT, I have also renamed the following names to look it more like in MacBook Pro's. I have to remind you that it isn't like: replace all from XX->XY. APIC isn't the same as PIC e.g.!:

PIC -> IPIC
DMAD -> DMAC
TMR -> TIMR
RTC0 -> RTC
COPR -> MATH
OMSC -> LDRC
SBRG -> LPCB
USB0 -> OHC1
USB2 -> EHC1
RHUB -> HUB1

flip360 08-22-2011 12:03 AM

NICELY DONE man_of_the_oak, Congrats :) cant find the archive with the files?
also can i extract my fresh DSDT with DSDTSE in OSX?

Cheers

man_of_the_oak 08-22-2011 12:14 AM

5. Post-configuration part II

So... we've got our own DSDT, let's use some of its potential and delete NullCPUPowerManagement from our Extra finally.
In the main directory of Extra (where smbios.plist is) paste compiled DSDT with .aml extension. Then we put my audio fix - LegacyHDA_ALC662-v.1 and AnyCardReader to Extra/KextStore.

The next step is replacing 3 files in System/Library/Extensions (one of them is a cosmetic fix - after updating to 10.6.8, our controller is no longer identified as MCP79 AHCI even though the part regarding MCP79 is exactly the same in AppleAHCIPort 10.6.7 and 10.6.8 (our dev id is still there...), I wasn't able to find any other way to fix the issue than replacing new AppleAHCIPort to the one from Mac OS X 10.6.7... well... I am not a real fan of rollbacks but when there is no alternative and the system isn't going to be updated anymore...):

AppleAHCIPort, AppleHDA, IOAudioFamily

Why do we have to replace AppleHDA? Unfortunately, after waking up from sleep - our audio was broken... patched IOAudioFamily fixes the problem but it isn't developed since Mac OS X 10.6.2 and it doesn't work not only with Mac OS X 10.6.8 (what is obvious since AppleHDA has got a new structure) but also with 10.6.7. I am not able to create an update to this kext so we have to use older AppleHDA until I learn how to do this or someone else creates one.

Finally, we can make our bootloader look nicer. Paste my Themes folder to Extra and use Kext Wizard to rebuild cache, fix permissions etc. (in general - check all options). Be patient - it takes a while!

Reboot with -v flag to know if something goes wrong - it's the last time you have to see this ugly screen, I promise :p

6. Fixing "Your device or computer could not be verified. Contact support for assistance" error while logging into App Store

It occurs when your WLAN in on en0 instead of LAN. To fix this we have to delete NetworkInterfaces.plist from:

/Library/Preferences/SystemConfiguration

Then we have to reboot, go to network preferences and delete both inferfaces. Re-add them in this order:

- Ethernet
- AirPort

7. Fixing a problem with webcam

As you've probably observed - our webcam is working OOTB but the video is upside down. iGlasses provides an easy fix to this. After installing, simply turn on PhotoBooth and use "Rotate" option to set the video into proper position, then click on "Default" to load this setting automatically.

This app works with most applications I know, for example: Skype, Messenger for Mac or PhotoBooth.

8. Creating shortcuts without Fn

Unfortunately, we can't use Fn keys on Mac OS X. Thanks to ControllerMate we are able to create our own shortcuts to system functions. I am going to show you how to create such on example of volume control:

After first run, we will see a window like the one below:


Check "Start Page", then in "Palette" windows, on the right side of the screen, find "Apple Keyboard":


Double click on its icon, you will see a list like this:


After we press any key on our keyboard, a "diode" near this key on the list is going to blink. In this example we are going to set our volume control keys this way:

F9 - mute
F10 - volume down
F11 - volume up

Before we do so, we have to make sure that none of the keys is being used by system (for example - F12 is a default shortcut for ejecting CD/DVD, that's why I had to leave it, even though on our keyboard, it's a part of Fn for volume control).
We can check it in "System preferences->Keyboard->Shortcuts". Uncheck all shortcuts connected with F9, F10 and F11:


Then, go back to ControllerMate and drag every key (F9, F10 and F11) from "Palette to the main window of the app.

The next step is to choose "Windows->Keystrokes Palette". From this window, drag all three icons representing volume control to the main window of ControllerMate.


All that is left is to create the shortcuts finally. We do so by dragging OFF icon from key to its function. Final effect of my work with this app is visible below:


Choose "File->Save" and quit the application - shortcuts should be working now :) (ControllerMate doesn't have to work all the time, it has its own helper app that runs in background)

man_of_the_oak 08-22-2011 12:42 AM

9. Express your gratitude by writing a few words on effects of working with this tutorial ;)


Needed files:

Code:

http://dl.dropbox.com/u/20095030/asus_k50in_data.zip

flip360 08-22-2011 12:55 AM

very nice and detailed tutorial :) Thanks buddy :)
how do we put this on first page?
one thing though i checked with the dsdt from Ronovar and i am able to shutdown properly with 10.6.8 and Lion
we have to generate a dsdt for ourselves, right cause i dont see any in your files archive? :)

cheers

man_of_the_oak 08-22-2011 01:04 AM

Quote:

Originally Posted by flip360 (Post 55003)
very nice and detailed tutorial :) how do we put this on first page?
one thing though i checked with the dsdt from Ronovar and i am able to shutdown properly with 10.6.8

cheers

Thanks! I hope you will make some use of it :) About putting on the first page... I have no idea :$ Maybe you can put links to each post there? Better than nothing...

I would do it this way:



btw. You should be able to shutdown without anything more than adding "Darwin" to OS detection ;) + Yes, you have to create you own DSDT. Simply follow the tutorial, it's everything there~

binhpv 08-22-2011 02:59 AM

Quote:

Originally Posted by man_of_the_oak (Post 55004)
Thanks! I hope you will make some use of it :) About putting on the first page... I have no idea :$ Maybe you can put links to each post there? Better than nothing...

I would do it this way:



btw. You should be able to shutdown without anything more than adding "Darwin" to OS detection ;) + Yes, you have to create you own DSDT. Simply follow the tutorial, it's everything there~


So this tuto is for installing 10.6.8 and not Lion ???

man_of_the_oak 08-22-2011 10:11 AM

Yup, I don't care about Lion since it's buggy as for now. Anyway, if you create DSDT thanks to this tutorial and take the rest of kexts - everything but battery status is going to work under Lion.

flip360 08-22-2011 10:57 AM

man_of_the_oak is right, Lion is buggy atm and the procedure goes for lion install also :)

Cheers