Introduction

Here I document how I build a working Preboot.dmg for running Mac OS X 10.6 Snow Leopard on a HP xw4600 Workstation[1].

Not everything works out of the box, though. The onboard Broadcom NIC doesn’t work with drivers by Apple. It might be possible to make the vanilla AppleBCM5701Ethernet.kext driver work with the onboard NIC, but that would be quite messy and would probably break when updating the operating system. So I installed a card with RTL8111C chip instead. This ~10€ NIC is auto-detected and works great with Apple drivers. Also onboard audio doesn’t work by default, but I got it working with an alternative driver that is easy to install.

Detailed hardware configuration:

  • HP xw4600 Workstation, BIOS 1.21
  • Intel Core 2 Quad Q9450 processor
  • 4x 1GB Micron 1RX8 PC2-6400E-666-12-F0
  • Club 3D CGNX-GTS866 NVIDIA GeForce 8600 GTS graphics card
  • TP-LINK TG-3468 PCI-Express x1 NIC

Kernel extensions

Besides the mandatory kernel extensions I’m including the PS2 driver ApplePS2Controller.kext. It’s useful if no DSDT patches are applied and thus USB keyboard and mouse aren’t working. See more at Create preboot image for Chameleon bootloader.

DSDT patches

The following patches are needed in order to make USB and sleep work. More about DSDT patching at Create preboot image for Chameleon bootloader.

Enable device data insertion

The USB patch below requires the DTGP method, which is added by this patch.

--- dsdt.dsl.orig      2010-12-02 20:58:39.000000000 +0200
+++ dsdt.dsl       2010-12-02 21:02:16.000000000 +0200
@@ -7394,4 +7394,34 @@
             \OSFG ()
         }
     }
+    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)
+    }
 }

Download patch

IRQ conflicts

By default USB doesn’t work because HPET device is using IRQs that conflict with USB[2]. This patch fixes the issue by removing IRQs from PIC, RTC, and TIME devices and defines IRQs for the HPET device.

--- dsdt.dsl.orig      2010-12-02 20:58:39.000000000 +0200
+++ dsdt.dsl       2010-12-02 21:09:25.000000000 +0200
@@ -2625,8 +2625,6 @@
                     0x00,               // Alignment
                     0x20,               // Length
                     )
-                IRQNoFlags ()
-                    {2}
             })
         }
     }
@@ -2643,8 +2641,6 @@
                     0x00,               // Alignment
                     0x04,               // Length
                     )
-                IRQNoFlags ()
-                    {0}
             })
         }
     }
@@ -2691,8 +2687,6 @@
                     0x00,               // Alignment
                     0x02,               // Length
                     )
-                IRQNoFlags ()
-                    {8}
             })
         }
     }
@@ -7348,6 +7342,10 @@
             Name (_UID, 0x01)
             Name (CRES, ResourceTemplate ()
             {
+                IRQNoFlags ()
+                    {0}
+                IRQNoFlags ()
+                    {8}
                 Memory32Fixed (ReadWrite,
                     0x00000000,         // Address Base
                     0x00000000,         // Address Length

Download patch

USB

This patch fixes USB controller so that sleep works[3].

--- dsdt.dsl.orig      2010-12-03 00:17:14.000000000 +0200
+++ dsdt.dsl       2010-12-03 00:19:10.000000000 +0200
@@ -1797,6 +1797,24 @@
                 {
                     Return (0x03)
                 }
+                Method (_DSM, 4, NotSerialized)
+                {
+                    Store (Package (0x02)
+                        {
+                            "device-id", 
+                            Buffer (0x04)
+                            {
+                                0x34, 0x3A, 0x00, 0x00
+                            },
+                            "AAPL,clock-id",
+                            Buffer (0x01)
+                            {
+                                0x0A
+                            }
+                        }, Local0)
+                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
+                    Return (Local0)
+                }
             }
             Device (USB2)
             {
@@ -1822,6 +1840,24 @@
                 {
                     Return (0x03)
                 }
+                Method (_DSM, 4, NotSerialized)
+                {
+                    Store (Package (0x02)
+                        {
+                            "device-id", 
+                            Buffer (0x04)
+                            {
+                                0x35, 0x3A, 0x00, 0x00
+                            },
+                            "AAPL,clock-id",
+                            Buffer (0x01)
+                            {
+                                0x0A
+                            }
+                        }, Local0)
+                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
+                    Return (Local0)
+                }
             }
             Device (USB3)
             {
@@ -1847,6 +1883,24 @@
                 {
                     Return (0x03)
                 }
+                Method (_DSM, 4, NotSerialized)
+                {
+                    Store (Package (0x02)
+                        {
+                            "device-id", 
+                            Buffer (0x04)
+                            {
+                                0x36, 0x3A, 0x00, 0x00
+                            },
+                            "AAPL,clock-id",
+                            Buffer (0x01)
+                            {
+                                0x0A
+                            }
+                        }, Local0)
+                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
+                    Return (Local0)
+                }
             }
             Device (USB4)
             {
@@ -1872,6 +1926,24 @@
                 {
                     Return (0x03)
                 }
+                Method (_DSM, 4, NotSerialized)
+                {
+                    Store (Package (0x02)
+                        {
+                            "device-id", 
+                            Buffer (0x04)
+                            {
+                                0x37, 0x3A, 0x00, 0x00
+                            },
+                            "AAPL,clock-id",
+                            Buffer (0x01)
+                            {
+                                0x0A
+                            }
+                        }, Local0)
+                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
+                    Return (Local0)
+                }
             }
             Device (USB5)
             {
@@ -1897,6 +1969,24 @@
                 {
                     Return (0x03)
                 }
+                Method (_DSM, 4, NotSerialized)
+                {
+                    Store (Package (0x02)
+                        {
+                            "device-id", 
+                            Buffer (0x04)
+                            {
+                                0x38, 0x3A, 0x00, 0x00
+                            },
+                            "AAPL,clock-id",
+                            Buffer (0x01)
+                            {
+                                0x0A
+                            }
+                        }, Local0)
+                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
+                    Return (Local0)
+                }
             }
             Device (USB6)
             {
@@ -1922,6 +2012,24 @@
                 {
                     Return (0x03)
                 }
+                Method (_DSM, 4, NotSerialized)
+                {
+                    Store (Package (0x02)
+                        {
+                            "device-id", 
+                            Buffer (0x04)
+                            {
+                                0x39, 0x3A, 0x00, 0x00
+                            },
+                            "AAPL,clock-id",
+                            Buffer (0x01)
+                            {
+                                0x0A
+                            }
+                        }, Local0)
+                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
+                    Return (Local0)
+                }
             }
             Device (EUS1)
             {

Download patch

Audio

I used VoodooHDA[4] driver to get the onboard audio work. Installer package VoodooHDA-2.7.2.pkg.zip was used.

SMBIOS

I use the following smbios.plist.

<?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>SMserial</key>
    <string>WRKDA2FSDMN</string>
    <key>SMbiosvendor</key>
    <string>HP</string>
    <key>SMbiosversion</key>
    <string>1.21 Rev. a</string>
    <key>SMbiosdate</key>
    <string>02/19/2010</string>
    <key>SMmanufacturer</key>
    <string>HP</string>
    <key>SMproductname</key>
    <string>xw4600</string>
    <key>SMmemtype</key>
    <string>19</string>
    <key>SMmemspeed</key>
    <string>800</string>
    <key>SMmemmanufacter</key>
    <string>Micron</string>
    <key>SMmempart_1</key>
    <string>1RX8 PC2-6400E-666-12-F0</string>
    <key>SMmempart_2</key>
    <string>1RX8 PC2-6400E-666-12-F0</string>
    <key>SMmempart_3</key>
    <string>1RX8 PC2-6400E-666-12-F0</string>
    <key>SMmempart_4</key>
    <string>1RX8 PC2-6400E-666-12-F0</string>
</dict>
</plist>

Boot configuration

This is the com.apple.Boot.plist for the machine.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Kernel</key>
    <string>mach_kernel</string>
    <key>Kernel Flags</key>
    <string></string>
    <key>GraphicsEnabler</key>
    <string>Yes</string>
    <key>Legacy Logo</key>
    <string>Yes</string>
    <key>Quiet Boot</key>
    <string>Yes</string>
    <key>GUI</key>
    <string>No</string>
    <key>Scan Single Drive</key>
    <string>Yes</string>
</dict>
</plist>

References

Can you post the patched DSDT.aml please? trying to do this exact same PC and having issues…

Thanks!

Comment by Anonymous 2011-05-26T18:21:18 EEST
Send a message to tj at solitudo.net so I’ll send you the DSDT binary by email
Comment by tj 2011-05-27T09:39:31 EEST

Hi I sent an email requesting the aml file but have not received anything yet. Please can you send it on or post a link here.

Many Thanks Plasma

Comment by Plasma 2011-06-16T19:55:45 EEST

Still awaiting a download link either on here or via email??

Plasma

Comment by Plasma 2011-08-08T19:11:29 EEST

Hi,

i’m trying to install osx 10.8, but lan doesn’t work.

Do you know the name of the lan chipset i have to install ?

thx

Comment by perco 2013-06-01T08:07:32 EEST

Hi,

i’m trying to install osx 10.8, but lan doesn’t work.

Do you know the name of the lan chipset i have to install ?

thx

Comment by perco 2013-06-01T08:12:32 EEST

Can you send me the binary too?

Kind regards

Comment by Zooiit 2014-09-17T17:42:29 EEST