Risolto il problema della modalità sleep in Snow Leopard
Dopo l’istallazione di snow leopard sul mio PC basato sulla motherboard Gigabyte GA-EP35C-DS3R, il mio hackintosh funziona bene… ma non al 100%. Se si cerca di usare la funzione sleep (STOP sul menu della mela) si vede spegnere alcune periferiche (tra cui gli HD) ma il PC non si riuscirà a spegnere tutto, in particolare si sentono ancora le ventole girare e non si spegne il led di alimentazione. Inoltre NON E’ POSSIBILE RIACCENDERE CORRETTAMENTE SNOW LEOPARD muovendo il mouse o premendo un tasto da tastiera, unica possibilità è un riavvio brutale con il pulsante de reset.
Da quello che ho letto in giro su forum e googlate varie sembra essere un problema di gestione dell’alimentazione degli HUB USB da parte del sistema operativo, questo accade perchè nativamente Snow Leopard non gestisce il controller ICH9R, tuttavia gestisce il suo fratello maggiore ICH10R. Il trucco per risolvere questo dettaglio sulla mia GA-EP35C-DS3R consiste nel far credere al sistema operativo di avere (solo per quel che riguarda gli HUB USB) un ICH10R, patchando a dovere il file DSDT.aml.
Questo problema non è bloccante, si sopravvive anche senza usare la modalità sleep, ma è veramente utile per non aspettare i tempi di riavvio e sopratutto quando si vuole congelare tutte le finestre allo stato attuale per riprendere poi dal punto in cui ci si trovava. Finalmente la soluzione l’ho trovata.
Mi sono ispirato a questa guida: http://www.insanelymac.com/forum/index.php?showtopic=168014
- procurarsi l’ultima versione dell’editor per DSDT a questo link: http://www.osx86.es/?p=610 (attenzione: se avete cambiato il percorso della cartella utente sulla vostra istallazione di SL questo programma può avere delle difficoltà di funzionamento, consiglio di ripristinare il percorso originale oppure utilizzare una istallazione di SL vergine)
- caricare l’attuale file DSDT che si trova sotto /Extra/DSDT.aml
- verificare che compili correttamente (in caso contrario non saprei cosa consigliare)
- ricercare la sezione che inizia con Device (USB0)
- come già spiegato il trucco è di assegnare dei device-id dell’ICH10R al posto di quelli dell’ICH9R
- i device id delle USB dell’ICH9R sono questi (dovreste verificare che corrispondono a quelli presenti dall’interrogazione dell’hardware con il programma IORegistryExplorer, se non corrispondono questa guida non fa per voi)
UHCI 1: 1D 2934 UHCI 2: 1D,1 2935 UHCI 3: 1D,2 2936 UHCI 4: 1A 2937 UHCI 5: 1A,1 2938 UHCI 6: 1A,2 2939
- i device id delle USB dell’ICH10R che dovremmo considerare nella patch in questione:
UHCI 1: 1D 3a34 UHCI 2: 1D,1 3a35 UHCI 3: 1D,2 3a36 UHCI 4: 1A 3a37 UHCI 5: 1A,1 3a38 UHCI 6: 1A,2 3a39
- i buffers sono scritti in notazione “back-wards”, per esempio il device-id per USB0 (che è “3a34″) deve essere scritto come “0×34, 0x3A, 0×00, 0×00″
- per ogni USB0,1,2,3,4,5 andare ad aggiungere in fondo alla sezione Device (USBx) (prima della chiusura della parentesi graffa) questo codice:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x34, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
…sostituendo adeguatamente il devide-id per ciascuna delle 6 USB HUB
- si dovrebbe ottenere un risultato simile a questo:
Device (USB0)
{
Name (_ADR, 0x001D0000)
[...]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x34, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (USB1)
{
Name (_ADR, 0x001D0001)
[...]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x35, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (USB2)
{
Name (_ADR, 0x001D0002)
[...]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x36, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (USB3)
{
Name (_ADR, 0x001A0000)
[...]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x37, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (USB4)
{
Name (_ADR, 0x001A0001)
[...]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x38, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (USB5)
{
Name (_ADR, 0x001A0002)
[...]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x39, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
- salvate e compilate il file, ottenendo il nuovo DSDT.aml
- sostituite il nuovo DSDT.aml dentro la cartella /Extra
- riavviare e verificare quindi il corretto funzionamento della funzione STOP
Altre persone che testimoniano che questa procedura funziona sono su questo thread: http://ihackintosh.org/forum/index.php?topic=13353.0