Laboratorio DSDT
Ciao a tutti!
Reinserisco questa mia vecchia guida sulle patch applicate al DSDT della P6T Deluxe
Do per scontato che abbiate familiarita' con iasl e tools vari BIOS ecc.
Gli strumenti che utilizzo sono:
- Windows
- Leopard 10.5.x o Leopard Snow 10.6.x
- iasl per Windows (iasl-win-20090903.zip)
- Lavalys EVEREST Corporate Edition (Vi serve per Dumpare le tabelle ACPI Windows)
- MMTOOL (Estrarre/Inserire la tabella DSDT nel BIOS Windows)
- DSDTSE (Raccolta di FIX da aggiungere/modificare sul nostro DSDT.dsl per OSX)
datasheet:
x58-320838.pdf
http://www.intel.com...heet/320838.pdf
x58-320839.pdf
http://www.intel.com...date/320839.pdf
ICH9R-316972.pdf
http://www.intel.com...heet/316972.pdf
ICH10-319973.pdf
http://www.intel.com...heet/319973.pdf
ICH10-319974.pdf
http://www.intel.com...date/319974.pdf
ACPI Specification 3.0a
http://www.acpi.info/spec30b.htm
ACPI Specification 4.0
http://www.acpi.info.../ACPIspec40.pdf
Incomincicamo:
Estraiamo il DSDT lo decompiliamo con iasl -d acpi_apic.bin (io l'ho estratto con Everest in Windows)
Otterremo un file con estensione .dsl
Ora passiamo il file ottenuto al pacher, avremo questo risultato
[size=1] Intel ACPI Component Architecture
ASL Optimizing Compiler version 20090903 [Sep 3 2009]
Copyright � 2000 - 2009 Intel Corporation
Supports ACPI Specification Revision 4.0
./dsdt_fixed.txt 11939: Method (VGET, 1, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (VGET)
./dsdt_fixed.txt 11984: Method (TGET, 1, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (TGET)
./dsdt_fixed.txt 12046: Method (FGET, 1, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (FGET)
./dsdt_fixed.txt 12082: Store (VGET (Local0), Local1)
Warning 1092 - ^ Called method may not always return a value
./dsdt_fixed.txt 12124: Store (TGET (Local0), Local1)
Warning 1092 - ^ Called method may not always return a value
./dsdt_fixed.txt 12157: Store (FGET (Local0), Local1)
Warning 1092 - ^ Called method may not always return a value
ASL Input: ./dsdt_fixed.txt - 12894 lines, 424300 bytes, 5699 keywords
AML Output: ./DSDT.aml - 46506 bytes, 1142 named objects, 4557 executable opcodes
Compilation complete. 0 Errors, 6 Warnings, 0 Remarks, 73 Optimizations[/size]
Uhummm 6 avvisi... facciamo i perfezionisti e andiamo a googgolare e troviamo come correggere questi
warnings
Fatta la dovuta ricerca ho scoperto che devo aggiungere
[size=1]Return (Zero)[/size]
Apriamo il nostro file con un editor di testo e con la funzione di ricerca ci spostiamo nelle varie zone del file
Cerchiamo all'interno del file la parola VGET
PRIMA
[size=1]...
Method (VGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWV0 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWV3 ())
}
If (LEqual (Arg0, 0x02))
{
Return (^^SIOR.HWV4 ())
}
If (LEqual (Arg0, 0x03))
{
Return (^^SIOR.HWV1 ())
}
}
...[/size]
DOPO
[size=1]...
Method (VGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWV0 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWV3 ())
}
If (LEqual (Arg0, 0x02))
{
Return (^^SIOR.HWV4 ())
}
If (LEqual (Arg0, 0x03))
{
Return (^^SIOR.HWV1 ())
}
Return (Zero)
}
...[/size]
Cerchiamo la parola TGET
PRIMA
[size=1]...
Method (TGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWT1 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWT0 ())
}
}
...[/size]
DOPO
[size=1]...
Method (TGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWT1 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWT0 ())
}
Return (Zero)
}
...[/size]
Cerchiamo la parola FGET
PRIMA
[size=1]...
Method (FGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWF1 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWF0 ())
}
If (LEqual (Arg0, 0x02))
{
Return (^^SIOR.HWF3 ())
}
If (LEqual (Arg0, 0x03))
{
Return (^^SIOR.HWF4 ())
}
If (LEqual (Arg0, 0x04))
{
Return (^^SIOR.HWF2 ())
}
}
...[/size]
DOPO
[size=1]...
Method (FGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWF1 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWF0 ())
}
If (LEqual (Arg0, 0x02))
{
Return (^^SIOR.HWF3 ())
}
If (LEqual (Arg0, 0x03))
{
Return (^^SIOR.HWF4 ())
}
If (LEqual (Arg0, 0x04))
{
Return (^^SIOR.HWF2 ())
}
Return (Zero)
}
...[/size]
Aggiungiamo un'altra fix
La FIX riguarda l'eliminazione delle linee ALIAS nella parte riguardante i processori.
(ho anche rinominato la parte dell'intestazione... acpi_dsdt.aml in DSDT.aml)
PRIMA
[size=1]...
DefinitionBlock ("acpi_dsdt.aml", "DSDT", 1, "A1087", "A1087001", 0x00000001)
{
Scope (_PR)
{
Processor (P001, 0x01, 0x00000810, 0x06) {}
Alias (P001, CPU1)
Processor (P002, 0x02, 0x00000000, 0x00) {}
Alias (P002, CPU2)
Processor (P003, 0x03, 0x00000000, 0x00) {}
Alias (P003, CPU3)
Processor (P004, 0x04, 0x00000000, 0x00) {}
Alias (P004, CPU4)
Processor (P005, 0x05, 0x00000000, 0x00) {}
Alias (P005, CPU5)
Processor (P006, 0x06, 0x00000000, 0x00) {}
Alias (P006, CPU6)
Processor (P007, 0x07, 0x00000000, 0x00) {}
Alias (P007, CPU7)
Processor (P008, 0x08, 0x00000000, 0x00) {}
Alias (P008, CPU8)
Processor (P009, 0x09, 0x00000000, 0x00) {}
Alias (P009, CPU9)
Processor (P010, 0x0A, 0x00000000, 0x00) {}
Processor (P011, 0x0B, 0x00000000, 0x00) {}
Processor (P012, 0x0C, 0x00000000, 0x00) {}
Processor (P013, 0x0D, 0x00000000, 0x00) {}
Processor (P014, 0x0E, 0x00000000, 0x00) {}
Processor (P015, 0x0F, 0x00000000, 0x00) {}
Processor (P016, 0x10, 0x00000000, 0x00) {}
}
...[/size]
DOPO
[size=1]...
DefinitionBlock ("DSDT.aml", "DSDT", 1, "A1087", "A1087001", 0x00000001)
{
Scope (_PR)
{
Processor (P001, 0x01, 0x00000810, 0x06) {}
Processor (P002, 0x02, 0x00000000, 0x00) {}
Processor (P003, 0x03, 0x00000000, 0x00) {}
Processor (P004, 0x04, 0x00000000, 0x00) {}
Processor (P005, 0x05, 0x00000000, 0x00) {}
Processor (P006, 0x06, 0x00000000, 0x00) {}
Processor (P007, 0x07, 0x00000000, 0x00) {}
Processor (P008, 0x08, 0x00000000, 0x00) {}
Processor (P009, 0x09, 0x00000000, 0x00) {}
Processor (P010, 0x0A, 0x00000000, 0x00) {}
Processor (P011, 0x0B, 0x00000000, 0x00) {}
Processor (P012, 0x0C, 0x00000000, 0x00) {}
Processor (P013, 0x0D, 0x00000000, 0x00) {}
Processor (P014, 0x0E, 0x00000000, 0x00) {}
Processor (P015, 0x0F, 0x00000000, 0x00) {}
Processor (P016, 0x10, 0x00000000, 0x00) {}
}
...[/size]
Bene ora ritorniamo al terminale e ripetiamo la compilazione
[size=1]./DSDT\ Patcher Debug/DSDT.dsl[/size]
[size=1] Intel ACPI Component Architecture
ASL Optimizing Compiler version 20090903 [Sep 3 2009]
Copyright © 2000 - 2009 Intel Corporation
Supports ACPI Specification Revision 4.0
ASL Input: ./dsdt_fixed.txt - 12897 lines, 424376 bytes, 5702 keywords
AML Output: ./DSDT.aml - 46512 bytes, 1142 named objects, 4560 executable opcodes
Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 73 Optimizations[/size]
Perfetto era il risultato che volevamo...:-)
Ora prendiamo il file dsdt_fixed.txt che si trova dentro la cartella Debug della cartella DSDT_Patcher
Ovvero il file DSDT_Patcher/Debug/dsdt_fixed.txt (sara' questo il file che contiene le ultime fix applicate).
Da questo punto avrete (se compilato) un DSDT.aml funzionante e senza warnings o errori.
FACOLTATIVO E MOLTO RISCHIOSO
Io ho personalmente inserito il file appena creato direttamente nel BIOS della mia scheda madre con lo strumento MMTOOL in Windows
ho scelto di inserirlo con queste poche fix, perche' aggiungendo troppi cambiamenti rischiamo che Windows si rifiuti avviarsi con
un messaggio che ci invita a contattare il produttore della nostra scheda e aggiornare il BIOS blablabla... non conforme agli standar ACPI 4.blablabla...
Quindi se scegliete questa possibilita' tenete in conto di non esagerare con l'aggiunta di FIX direttamente nel DSDT del BIOS.
Direte... Che vantaggi ho a inserire questo file direttamente nel BIOS?
Il vantaggio che avete sara' ad esempio quello di avviare Leopard o Snow direttamente con i 4 cuori e l'Hyper attivi,
E se vogliamo fare i fighi sappiamo che abbiamo una tabella DSDT all'interno della nostra macchina ripulita e senza errori.
MA RIBADISCO E' UNA OPERAZIONE DELICATA E NON E' OBBLIGATORIA
Ma andiamo avanti e aggiungiamo a manina altri FIX, io per comodita' (Anche dovuto ai TOOLS che uso) mi sono spostato in ambiente WINDOWS ma nessuno vi vieta di continuare su Leo.
Vi do un consiglio... quando aggiungete una FIX salvate le modifiche fatte (Anche una copia del file .dsl funzionante), eprovate a fare la compliazione per vedere se sono presenti errori.
DTGP Questa non e' una fix ma una parte di codice che useremo per injectare altro codice all'interno del nostro DSDT
Io l'ho inserito immediatamente dopo la prima parentesi graffa di apertura dopo l'intestazione
PRIMA
[size=1]...
DefinitionBlock ("DSDT.aml", "DSDT", 1, "A1087", "A1087001", 0x00000001)
{
Scope (_PR)
{
Processor (P001, 0x01, 0x00000810, 0x06) {}
...[/size]
DOPO
[size=1]...
DefinitionBlock ("DSDT.aml", "DSDT", 1, "APPLE", "MacPro", 0x00010001)
{
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, 0x00000810, 0x06) {}
...[/size]
Piccola verifica
[size=1]Microsoft Windows [Versione 5.2.3790]
© Copyright 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator\Desktop\iasl>iasl.exe dsdt.dsl
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20090903 [Sep 3 2009]
Copyright © 2000 - 2009 Intel Corporation
Supports ACPI Specification Revision 4.0
ASL Input: dsdt.dsl - 12931 lines, 412332 bytes, 5716 keywords
AML Output: DSDT.aml - 46576 bytes, 1143 named objects, 4573 executable opcodes
Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 73 Optimizations
C:\Documents and Settings\Administrator\Desktop\iasl>[/size]
Ok tutto bene.
Continuiamo.
HDEF FIX(Ci servira' per l'audio)
Questa fix l'ho inserita giusto prima del Device (HPET)
PRIMA
[size=1]...
Divide (Local0, Local1, Local1, Local0)
Return (Local0)
}
}
}
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
...[/size]
DOPO
[size=1]...
Divide (Local0, Local1, Local1, Local0)
Return (Local0)
}
}
}
Device (HDEF)
{
Name (_ADR, 0x001B0000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"subsystem-id",
Buffer (0x04)
{
0xA0, 0x00, 0x00, 0x00
},
"subsystem-vendor-id",
Buffer (0x04)
{
0x6B, 0x10, 0x00, 0x00
},
"layout-id",
Buffer (0x04)
{
0x0C, 0x00, 0x00, 0x00
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
...[/size]
SATA (Intel ESB2 AHCI )
Con questa FIX avremo i dispositivi SATA
come Intel ESB2 AHCI e i dischi verranno visti come interni.
Cerchiamo il Device (SATA)
PRIMA
[size=1]...
Device (SATA)
{
Name (_ADR, 0x001F0002)
Name (^NATA, Package (0x01)
{
0x001F0002
})
Name (\FZTF, Buffer (0x07)
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5
})
Name (REGF, One)
Method (_REG, 2, NotSerialized)
{
If (LEqual (Arg0, 0x02))
{
Store (Arg1, REGF)
}
}
Name (TIM0, Package (0x08)
{
...[/size]
DOPO
[size=1]...
Device (SATA)
{
Name (_ADR, 0x001F0002)
Name (^NATA, Package (0x01)
{
0x001F0002
})
Name (\FZTF, Buffer (0x07)
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5
})
Name (REGF, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x81, 0x26, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Method (_REG, 2, NotSerialized)
{
If (LEqual (Arg0, 0x02))
{
Store (Arg1, REGF)
}
}
Name (TIM0, Package (0x08)
{
...[/size]
Slow SATA issue FIX (Ringraziamenti a THe KiNG)
Questa FIX richiede di editare 4 Device che sono
(HPET) (RTC0) (TMR) (PIC)
Cerchiamo il Device (HPET)
PRIMA
[size=1]...
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (CRS, ResourceTemplate ()
{
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y0F)
})
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_STA, 0, NotSerialized)
{
If (LEqual (OSFL (), Zero))
{
If (HPTE)
{
Return (0x0F)
}
}
Else
{
If (HPTE)
{
Return (0x0B)
}
}
Return (Zero)
}
Method (_CRS, 0, NotSerialized)
{
CreateDWordField (CRS, \_SB.PCI0.SBRG.HPET._Y0F._BAS, HPT)
Multiply (HPTS, 0x1000, Local0)
Add (Local0, 0xFED00000, HPT)
Return (CRS)
}
}
...[/size]
DOPO
[size=1]...
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (CRS, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y0F)
})
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_STA, 0, NotSerialized)
{
If (LEqual (OSFL (), Zero))
{
If (HPTE)
{
Return (0x0F)
}
}
Else
{
If (HPTE)
{
Return (0x0B)
}
}
Return (Zero)
}
Method (_CRS, 0, NotSerialized)
{
CreateDWordField (CRS, \_SB.PCI0.SBRG.HPET._Y0F._BAS, HPT)
Multiply (HPTS, 0x1000, Local0)
Add (Local0, 0xFED00000, HPT)
Return (CRS)
}
}
...[/size]
Cerchiamo Device (RTC0)
PRIMA
[size=1]...
Device (RTC0)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x00, // Alignment
0x02, // Length
)
IRQNoFlags ()
{8}
})
}
...[/size]
DOPO
[size=1]...
Device (RTC0)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x00, // Alignment
0x02, // Length
)
})
}
...[/size]
Cerchiamo Device (TMR)
PRIMA
[size=1]...
Device (TMR)
{
Name (_HID, EisaId ("PNP0100"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0040, // Range Minimum
0x0040, // Range Maximum
0x00, // Alignment
0x04, // Length
)
IRQNoFlags ()
{0}
})
}
...[/size]
DOPO
[size=1]...
Device (TMR)
{
Name (_HID, EisaId ("PNP0100"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0040, // Range Minimum
0x0040, // Range Maximum
0x01, // Alignment
0x04, // Length
)
IO (Decode16,
0x0050, // Range Minimum
0x0050, // Range Maximum
0x01, // Alignment
0x04, // Length
)
})
}
...[/size]
Appartenente sempre alla stessa FIX
Ora cerchiamo il Device (PIC)
PRIMA
[size=1]...
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}
})
}
...[/size]
DOPO
[size=1]...
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
)
})
}
...[/size]
UHCI/EHCI Built-in FIX
Ad aggiungere questa fix dobbiamo stare molto attenti.
Potete tranquillamente copiare ed incollare l'unica "USB" che non dobbiamo toccare ha l'ADDRESS 0x001D0003
Nel mio caso corrisponde al Device (USB5)
PRIMA
[size=1]...
Device (USB0)
{
Name (_ADR, 0x001D0000)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x03, 0x04))
}
}
Device (USB1)
{
Name (_ADR, 0x001D0001)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x04, 0x04))
}
}
Device (USB2)
{
Name (_ADR, 0x001D0002)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x0C, 0x04))
}
}
Device (USB5)
{
Name (_ADR, 0x001D0003)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x20, 0x04))
}
}
Device (EUSB)
{
Name (_ADR, 0x001D0007)
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x0D, 0x04))
}
}
Device (USB3)
{
Name (_ADR, 0x001A0000)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x0E, 0x04))
}
}
Device (USB4)
{
Name (_ADR, 0x001A0001)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x05, 0x04))
}
}
Device (USB6)
{
Name (_ADR, 0x001A0002)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x20, 0x04))
}
}
Device (USBE)
{
Name (_ADR, 0x001A0007)
Device (RHUB)
{
Name (_ADR, Zero)
Device (PRT5)
{
Name (_ADR, 0x05)
Name (_UPC, Package (0x04)
{
0xFF,
Zero,
Zero,
Zero
})
Name (_PLD, Buffer (0x10)
{
/* 0000 */ 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
})
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x0D, 0x04))
}
}
...[/size]
DOPO
[size=1]...
Device (USB0)
{
Name (_ADR, 0x001D0000)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
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)
}
Name (_PRW, Package (0x02)
{
0x03,
0x03
})
}
Device (USB1)
{
Name (_ADR, 0x001D0001)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
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)
}
Name (_PRW, Package (0x02)
{
0x04,
0x03
})
}
Device (USB2)
{
Name (_ADR, 0x001D0002)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
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)
}
Name (_PRW, Package (0x02)
{
0x0C,
0x03
})
}
Device (USB5)
{
Name (_ADR, 0x001D0003)
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2,
Offset (0x01)
}
Method (_S3D, 0, NotSerialized)
{
If (LOr (LEqual (OSFL (), One), LEqual (OSFL (), 0x02)))
{
Return (0x02)
}
Else
{
Return (0x03)
}
}
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, USBW)
}
Else
{
Store (Zero, USBW)
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x20, 0x04))
}
}
Device (EUSB)
{
Name (_ADR, 0x001A0007)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0f)
{
"device-id",
Buffer (0x04)
{
0x3A, 0x3A, 0x00, 0x00
},
"AAPL,clock-id",
Buffer (One)
{
0x0a
},
"built-in",
Buffer ()
{
0x00
},
"device_type",
Buffer (0x05)
{
"EHCI"
},
"AAPL,current-available",
0x04B0,
"AAPL,current-extra",
0x02BC,
"AAPL,current-in-sleep",
0x03E8,
Buffer (0x01)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (USB3)
{
Name (_ADR, 0x001A0000)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
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)
}
Name (_PRW, Package (0x02)
{
0x0E,
0x03
})
}
Device (USB4)
{
Name (_ADR, 0x001A0001)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
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)
}
Name (_PRW, Package (0x02)
{
0x05,
0x03
})
}
Device (USB6)
{
Name (_ADR, 0x001A0002)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
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)
}
Name (_PRW, Package (0x02)
{
0x20,
0x03
})
}
Device (USBE)
{
Name (_ADR, 0x001A0007)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0f)
{
"device-id",
Buffer (0x04)
{
0x3C, 0x3A, 0x00, 0x00
},
"AAPL,clock-id",
Buffer (One)
{
0x0a
},
"built-in",
Buffer ()
{
0x00
},
"device_type",
Buffer (0x05)
{
"EHCI"
},
"AAPL,current-available",
0x04B0,
"AAPL,current-extra",
0x02BC,
"AAPL,current-in-sleep",
0x03E8,
Buffer (0x01)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
...[/size]
[size=1]HO ELIMINATO DA QUESTA GUIDA LA FIX IN QUANTO NON NECESSARIA OSX RICONOSCE LE PORTE USB COME BUILT-IN LASCIO LA TABELLA SOTTOSTANTE COME RIFERIMENTO
Device (USB0)
Name (_ADR, 0x001D0000)
0x34, 0x3A, 0x00, 0x00
B00 D1D F00: 8086-3A34: Intel 82801JB ICH10 - USB Universal Host Controller
Device (USB1)
Name (_ADR, 0x001D0001)
0x35, 0x3A, 0x00, 0x00
B00 D1D F01: 8086-3A35: Intel 82801JB ICH10 - USB Universal Host Controller
Device (USB2)
Name (_ADR, 0x001D0002)
0x36, 0x3A, 0x00, 0x00
B00 D1D F02: 8086-3A36: Intel 82801JB ICH10 - USB Universal Host Controller
Device (USB5)
Name (_ADR, 0x001D0003)
Device (EUSB)
Name (_ADR, 0x001D0007)
0x3A, 0x3A, 0x00, 0x00
B00 D1D F07: 8086-3A3A: Intel 82801JB ICH10 - USB2 Enhanced Host Controller
Device (USB3)
Name (_ADR, 0x001A0000)
0x37, 0x3A, 0x00, 0x00
B00 D1A F00: 8086-3A37: Intel 82801JB ICH10 - USB Universal Host Controller
Device (USB4)
Name (_ADR, 0x001A0001)
0x38, 0x3A, 0x00, 0x00
B00 D1A F01: 8086-3A38: Intel 82801JB ICH10 - USB Universal Host Controller
Device (USB6)
Name (_ADR, 0x001A0002)
0x39, 0x3A, 0x00, 0x00
B00 D1A F02: 8086-3A39: Intel 82801JB ICH10 - USB Universal Host Controller
Device (USBE)
Name (_ADR, 0x001A0007)
0x3C, 0x3A, 0x00, 0x00
B00 D1A F07: 8086-3A3C: Intel 82801JB ICH10 - USB2 Enhanced Host Controller[/size]
Time Machine/Ethernet Buil-in/Device GIGE FIX (Grazie a Krabuzu)
Questa e' la fix che preferisco... Time machine funziona benissimo
La P6T ha 2 LAN integrate, quindi il metodo lo inseriremo 2 volte,
Sbirciando con IORegistryExplorer ho visto che le mie LAN sono associate al Device P0P6@1C,2 e P0P9@1C,5
Ovvero P0P6 e P0P9
PRIMA
[size=1]...
Device (P0P6)
{
Name (_ADR, 0x001C0002)
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x09, 0x04))
}
Method (_PRT, 0, NotSerialized)
{
If (PICM)
{
Return (AR06)
}
Return (PR06)
}
}
... parte del codice .... parte del codice ....
Device (P0P9)
{
Name (_ADR, 0x001C0005)
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x09, 0x04))
}
Method (_PRT, 0, NotSerialized)
{
If (PICM)
{
Return (AR09)
}
Return (PR09)
}
}
...[/size]
DOPO
[size=1]...
Device (P0P6)
{
Name (_ADR, 0x001C0002)
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x09, 0x04))
}
Method (_PRT, 0, NotSerialized)
{
If (PICM)
{
Return (AR06)
}
Return (PR06)
}
Device (ETH0)
{
Name (_ADR, Zero)
OperationRegion (GPIO, SystemIO, 0x0800, 0x06)
Field (GPIO, ByteAcc, NoLock, Preserve)
{
GO01, 8,
GO02, 8,
GO03, 8,
GO04, 8,
GO05, 8,
GP9, 1
}
Name (_PRW, Package (0x02)
{
0x09,
0x03
})
Method (EWOL, 1, NotSerialized)
{
If (LEqual (Arg0, One))
{
Or (GP9, One, GP9)
}
Else
{
And (GP9, Zero, GP9)
}
If (LEqual (Arg0, GP9))
{
Return (Zero)
}
Else
{
Return (One)
}
}
}
}
... parte del codice .... parte del codice ....
Device (P0P9)
{
Name (_ADR, 0x001C0005)
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x09, 0x04))
}
Method (_PRT, 0, NotSerialized)
{
If (PICM)
{
Return (AR09)
}
Return (PR09)
}
Device (ETH1)
{
Name (_ADR, Zero)
OperationRegion (GPIO, SystemIO, 0x0800, 0x06)
Field (GPIO, ByteAcc, NoLock, Preserve)
{
GO01, 8,
GO02, 8,
GO03, 8,
GO04, 8,
GO05, 8,
GP9, 1
}
Name (_PRW, Package (0x02)
{
0x09,
0x03
})
Method (EWOL, 1, NotSerialized)
{
If (LEqual (Arg0, One))
{
Or (GP9, One, GP9)
}
Else
{
And (GP9, Zero, GP9)
}
If (LEqual (Arg0, GP9))
{
Return (Zero)
}
Else
{
Return (One)
}
}
}
}
...[/size]
OSYS FIX questa FIX consiste nell'aggiungere il riconoscimento del Sistema operativo Darwin (OSX)
(Ringraziamenti vanno a UgoKind.)
PRIMA
[size=1]...
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)
}
}
Else
{
If (MCTH (_OS, "Microsoft Windows NT"))
{
Store (0x12, Local0)
}
Else
{
If (MCTH (_OS, "Microsoft WindowsME: Millennium Edition"))
{
Store (0x11, Local0)
}
If (MCTH (_OS, "Linux"))
{
Store (One, Local0)
}
}
}
Return (Local0)
}
...[/size]
DOPO
[size=1]...
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)
}
}
Else
{
If (MCTH (_OS, "Microsoft Windows NT"))
{
Store (0x12, Local0)
}
Else
{
If (MCTH (_OS, "Microsoft WindowsME: Millennium Edition"))
{
Store (0x11, Local0)
}
If (MCTH (_OS, "Linux"))
{
Store (One, Local0)
}
}
}
...[/size]
prova DSDT920 3.3