#Maintained by: RehabMan for: Laptop Patches #usb_7-series-multiplex.txt # Originally Maintained by: PJALM for: PJALM Intel7 at: Thu Aug 15 09:07:46 UTC 2013 # Intel z77 USB2/USB3 Multiplexing Fix # USB3 patches in thanks to SJ_Underwater and Mieze # Code optimizations thanks to RehabMan and PikeRAlpha # Further optimizations by RehabMan 2013-10-14 # # Note: These patches are often not universal. If your DSDT is substantially # different, you may need to tweak them or refer to the various # guides for XHC patching to implement it correctly for your # board. # # Fix method _OSC into method label _OSC parent_label PCI0 remove_entry; into device label PCI0 parent_label _SB insert begin Method (_OSC, 4, Serialized)\n {\n Store (Arg3, Local0)\n CreateDWordField (Local0, Zero, CDW1)\n CreateDWordField (Local0, 0x04, CDW2)\n CreateDWordField (Local0, 0x08, CDW3)\n //was: Store (CDW2, SUPP)\n Store (CDW3, Local3) //was: Store (CDW3, CTRL))\n If (LAnd (LEqual (Arg0, GUID), NEXP))\n {\n If (Not (And (CDW1, One)))\n {\n If (And (Local3, 0x02)) //was: And (CTRL, 0x02)\n {\n NHPG ()\n }\n If (And (Local3, 0x04)) //was: And (CTRL, 0x04)\n {\n NPME ()\n }\n }\n If (LNotEqual (Arg1, One))\n {\n Or (CDW1, 0x08, CDW1)\n }\n If (LNotEqual (CDW3, Local3)) //was: LNotEqual (CDW3, CTRL)\n {\n Or (CDW1, 0x10, CDW1)\n }\n Store (Local3, CDW3) //was: Store(CTRL, CDW3)\n Store (Local3, OSCC) //was: Store(CTRL, OSCC)\n }\n Else\n {\n Or (CDW1, 0x04, CDW1)\n }\n Return (Local0)\n }\n end; # Fix EHC1 into device label PR11 code_regex Name\s\(MUXS[^)]+\) remove_matched; into device label PR11 parent_label PR01 insert begin Name (MUXS, "XHCA") end; into device label PR12 code_regex Name\s\(MUXS[^)]+\) remove_matched; into device label PR12 parent_label PR01 insert begin Name (MUXS, "XHCB") end; into device label PR13 code_regex Name\s\(MUXS[^)]+\) remove_matched; into device label PR13 parent_label PR01 insert begin Name (MUXS, "XHCC") end; into device label PR18 code_regex Name\s\(MUXS[^)]+\) remove_matched; into device label PR18 parent_label PR01 insert begin Name (MUXS, "XHCD") end; into method label XHCA parent_label EHC1 remove_entry; into method label XHCB parent_label EHC1 remove_entry; into method label XHCC parent_label EHC1 remove_entry; into method label XHCD parent_label EHC1 remove_entry; into method label EHCA parent_label EHC1 remove_entry; into method label EHCB parent_label EHC1 remove_entry; into method label EHCC parent_label EHC1 remove_entry; into method label EHCD parent_label EHC1 remove_entry; into method label XHCN parent_label EHC1 remove_entry; into device label EHC1 code_regex Name\s\(XHCN,\sOne\) remove_matched; into device label EHC1 insert begin Name (XHCN, One)\n Method (XHCA, 0, NotSerialized) { Store (1, ^^XHC1.PAHC) }\n Method (XHCB, 0, NotSerialized) { Store (1, ^^XHC1.PBHC) }\n Method (XHCC, 0, NotSerialized) { Store (1, ^^XHC1.PCHC) }\n Method (XHCD, 0, NotSerialized) { Store (1, ^^XHC1.PDHC) }\n Method (EHCA, 0, NotSerialized) { Store (0, ^^XHC1.PAHC) }\n Method (EHCB, 0, NotSerialized) { Store (0, ^^XHC1.PBHC) }\n Method (EHCC, 0, NotSerialized) { Store (0, ^^XHC1.PCHC) }\n Method (EHCD, 0, NotSerialized) { Store (0, ^^XHC1.PDHC) }\n end; # Fix EHC2 into method label XHCN parent_label EHC2 remove_entry; into device label EHC2 code_regex Name\s\(XHCN,\sOne\) remove_matched; into device label EHC2 insert begin Name (XHCN, One)\n end; # Fix XHC1 into device label XHC set_label begin XHC1 end; into_all all code_regex XHC(?=\W) replaceall_matched begin XHC1 end; into method label _WAK code_regex \_SB.PCI0.XHC1.XWAK replace_matched begin _SB.PCI0.XHC1._INI end; # Rewrite XHC/XHC1 device into device label XHC1 replace_content begin Name (_ADR, 0x00140000)\n Name (_S3D, 0x02)\n Name (_S4D, 0x02)\n Name (XRST, Zero)\n \n OperationRegion (XPRT, PCI_Config, 0x74, 0x10)\n Field (XPRT, DWordAcc, NoLock, Preserve)\n {\n Offset (0x01),\n PMEE, 1,\n , 6,\n PMES, 1\n }\n \n OperationRegion (XH1C, PCI_Config, 0xD0, 0x10)\n Field (XH1C, ByteAcc, NoLock, Preserve)\n {\n PAHC, 1,\n PBHC, 1,\n PCHC, 1,\n PDHC, 1,\n Offset (0x08),\n PASS, 1,\n PBSS, 1,\n PCSS, 1,\n PDSS, 1\n }\n \n OperationRegion (XHC2, PCI_Config, 0x44, 0x04)\n Field (XHC2, ByteAcc, NoLock, Preserve)\n {\n Offset (0x01),\n MIAI, 2\n }\n \n Method (_INI, 0, NotSerialized)\n {\n Store (Zero, MIAI)\n }\n \n Device (RHUB)\n {\n Name (_ADR, Zero)\n Name (UPCP, Package() { 0xFF, 0x03, Zero, Zero })\n Device (PRT1)\n {\n Name (_ADR, One)\n Alias (UPCP, _UPC)\n Name (_PLD, Package()\n {\n Buffer()\n {\n 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x69, 0x0C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00\n }\n })\n Name (MUXS, "EHCA")\n }\n Device (PRT2)\n {\n Name (_ADR, 0x02)\n Alias (UPCP, _UPC)\n Name (_PLD, Package()\n {\n Buffer()\n {\n 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x69, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00\n }\n })\n Name (MUXS, "EHCB")\n }\n Device (PRT3)\n {\n Name (_ADR, 0x03)\n Alias (UPCP, _UPC)\n Name (_PLD, Package()\n {\n Buffer()\n {\n 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x69, 0x0C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00\n }\n })\n Name (MUXS, "EHCC")\n }\n Device (PRT4)\n {\n Name (_ADR, 0x04)\n Alias (UPCP, _UPC)\n Name (_PLD, Package()\n {\n Buffer()\n {\n 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x69, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00\n }\n })\n Name (MUXS, "EHCD")\n }\n }\n \n Method (_DSM, 4, NotSerialized)\n {\n If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n Return (Package()\n {\n "AAPL,clock-id", Buffer() { 0x02 },\n "built-in", Buffer() { 0x00 },\n "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n "AAPL,current-available", 2100,\n "AAPL,current-extra", 2200,\n "AAPL,current-extra-in-sleep", 1600,\n "AAPL,device-internal", 0x02,\n "AAPL,max-port-current-in-sleep", 2100,\n })\n }\n \n Method (_PRW, 0, NotSerialized) { Return (GPRW (0x0D, 0x04)) }\n // alternate for above\n //Method (_PRW, 0, NotSerialized) { Return (Package() { 0x0D, 0x04 }) }\n Method (XHCA, 0, NotSerialized) { Store (One, PAHC) }\n Method (XHCB, 0, NotSerialized) { Store (One, PBHC) }\n Method (XHCC, 0, NotSerialized) { Store (One, PCHC) }\n Method (XHCD, 0, NotSerialized) { Store (One, PDHC) }\n Method (EHCA, 0, NotSerialized) { Store (Zero, PAHC) }\n Method (EHCB, 0, NotSerialized) { Store (Zero, PBHC) }\n Method (EHCC, 0, NotSerialized) { Store (Zero, PCHC) }\n Method (EHCD, 0, NotSerialized) { Store (Zero, PDHC) }\n end;