Skip to content

Instantly share code, notes, and snippets.

@mschiu77
Created May 5, 2021 10:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mschiu77/05b9b8ff3ba795f11dd467660952f6e5 to your computer and use it in GitHub Desktop.
Save mschiu77/05b9b8ff3ba795f11dd467660952f6e5 to your computer and use it in GitHub Desktop.
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20190509 (64-bit version)
* Copyright (c) 2000 - 2019 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of ssdt7.dat, Wed May 5 06:49:17 2021
*
* Original Table Header:
* Signature "SSDT"
* Length 0x0000B27E (45694)
* Revision 0x02
* Checksum 0xDC
* OEM ID "INTEL "
* OEM Table ID "TcssSsdt"
* OEM Revision 0x00001000 (4096)
* Compiler ID "INTL"
* Compiler Version 0x20191018 (538513432)
*/
DefinitionBlock ("", "SSDT", 2, "INTEL ", "TcssSsdt", 0x00001000)
{
External (_SB_.PC00, DeviceObj)
External (_SB_.PC00.GFX0, DeviceObj)
External (_SB_.PC00.GMHB, MethodObj) // 0 Arguments
External (_SB_.PC00.GPCB, MethodObj) // 0 Arguments
External (_SB_.PC01, DeviceObj)
External (ADBG, MethodObj) // 1 Arguments
External (CPWE, UnknownObj)
External (CPWS, UnknownObj)
External (CSFR, UnknownObj)
External (DME0, UnknownObj)
External (DME1, UnknownObj)
External (DUWS, UnknownObj)
External (ECR1, UnknownObj)
External (GPRW, MethodObj) // 2 Arguments
External (IMRY, UnknownObj)
External (ITM0, UnknownObj)
External (ITM1, UnknownObj)
External (LTE0, UnknownObj)
External (LTE1, UnknownObj)
External (LTE2, UnknownObj)
External (LTE3, UnknownObj)
External (OTHC, UnknownObj)
External (P2PS, UnknownObj)
External (PCIC, MethodObj) // 1 Arguments
External (PCID, MethodObj) // 4 Arguments
External (PDI0, UnknownObj)
External (PDI1, UnknownObj)
External (PICM, UnknownObj)
External (PNS0, UnknownObj)
External (PNS1, UnknownObj)
External (PNS2, UnknownObj)
External (PNS3, UnknownObj)
External (PSL0, UnknownObj)
External (PSL1, UnknownObj)
External (PSL2, UnknownObj)
External (PSL3, UnknownObj)
External (TCDS, UnknownObj)
External (TCIR, UnknownObj)
External (TCIT, UnknownObj)
External (TDCE, UnknownObj)
External (THCE, UnknownObj)
External (TIVS, UnknownObj)
External (TPA0, UnknownObj)
External (TPA1, UnknownObj)
External (TPA2, UnknownObj)
External (TPA3, UnknownObj)
External (TRE0, UnknownObj)
External (TRE1, UnknownObj)
External (TRE2, UnknownObj)
External (TRE3, UnknownObj)
External (TRTD, UnknownObj)
External (XDAT, MethodObj) // 0 Arguments
Name (ITNB, 0x63CEA000)
Name (ITNL, 0x0012)
OperationRegion (ITNV, SystemMemory, ITNB, ITNL)
Field (ITNV, AnyAcc, Lock, Preserve)
{
ITSP, 8,
IDM0, 8,
IDM1, 8,
ITCP, 8,
IT0E, 8,
IT1E, 8,
IT2E, 8,
IT3E, 8,
IORB, 8,
ITRT, 8,
ITRE, 16,
ITIM, 8,
ITFP, 16,
ITCT, 16,
ITVD, 8
}
If (ITRT)
{
Scope (\_SB.PC00.GFX0)
{
Name (_S3D, 0x03) // _S3D: S3 Device State
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
}
}
}
Scope (\_SB)
{
Name (C2PW, Zero)
Method (C2PM, 4, Serialized)
{
Switch (ToInteger (Arg3))
{
Case (Zero)
{
Local0 = "Tcss iTbt Pcie 0 RP 0"
}
Case (One)
{
Local0 = "Tcss iTbt Pcie 0 RP 1"
}
Case (0x02)
{
Local0 = "Tcss iTbt Pcie 0 RP 2"
}
Case (0x03)
{
Local0 = "Tcss iTbt Pcie 0 RP 3"
}
Case (0x04)
{
Local0 = "Tcss xHci"
}
Case (0x05)
{
Local0 = "Tcss xDci"
}
Case (0x06)
{
Local0 = "Tcss Dma 0"
}
Case (0x07)
{
Local0 = "Tcss Dma 1"
}
Case (0x08)
{
Local0 = "Tcss iTbt Pcie 1 RP 0"
}
Case (0x09)
{
Local0 = "Tcss iTbt Pcie 1 RP 1"
}
Case (0x0A)
{
Local0 = "Tcss iTbt Pcie 1 RP 2"
}
Case (0x0B)
{
Local0 = "Tcss iTbt Pcie 1 RP 3"
}
Default
{
Return (Zero)
}
}
Local1 = Zero
Local1 = (One << ToInteger (Arg3))
ADBG (Concatenate ("Local1 = ", ToHexString (Local1)))
ADBG (Concatenate ("Before CPU to PCH Wake capability configuration Start from ", Local0))
ADBG (Concatenate (Local0, Concatenate (" Cpu Wake Status = ", ToHexString (CPWS))))
ADBG (Concatenate (Local0, Concatenate (" Cpu Wake Enable = ", ToHexString (CPWE))))
ADBG (Concatenate (Local0, Concatenate (" Cpu To Pch Wake Value = ", ToHexString (C2PW))))
ADBG (Concatenate ("C2PM ", Local0))
If ((Arg0 && Arg1))
{
If ((CPWE == Zero))
{
If (CPWS)
{
CPWS = One
}
CPWE = One
}
If (((C2PW & Local1) == Zero))
{
C2PW |= Local1
}
ADBG (Concatenate (Local0, " Sx EnWak"))
}
ElseIf ((Arg0 || Arg2))
{
If ((CPWE == Zero))
{
If (CPWS)
{
CPWS = One
}
CPWE = One
}
If (((C2PW & Local1) == Zero))
{
C2PW |= Local1
}
ADBG (Concatenate (Local0, " D3 En Wak"))
}
Else
{
If (((C2PW & Local1) != Zero))
{
C2PW &= ~Local1
}
If (((CPWE != Zero) && (C2PW == Zero)))
{
CPWE = Zero
}
ADBG (Concatenate (Local0, " DisWak"))
}
ADBG (Concatenate ("After CPU to PCH Wake capability configuration End from ", Local0))
ADBG (Concatenate (Local0, Concatenate (" Cpu Wake Status = ", ToHexString (CPWS))))
ADBG (Concatenate (Local0, Concatenate (" Cpu Wake Enable = ", ToHexString (CPWE))))
ADBG (Concatenate (Local0, Concatenate (" Cpu To Pch Wake Value = ", ToHexString (C2PW))))
Return (Zero)
}
}
Scope (\_SB.PC00)
{
OperationRegion (MBAR, SystemMemory, (\_SB.PC00.GMHB () + 0x7100), 0x1000)
Field (MBAR, ByteAcc, NoLock, Preserve)
{
Offset (0x10),
RBAR, 64
}
OperationRegion (PBAR, SystemMemory, (\_SB.PC00.GMHB () + 0x5DA0), 0x08)
Field (PBAR, DWordAcc, NoLock, Preserve)
{
PMBD, 32,
PMBC, 8,
PSCM, 8,
, 15,
PMBR, 1
}
Method (PMBY, 0, NotSerialized)
{
Local0 = Zero
While ((PMBR && (Local0 < 0x000493E0)))
{
Local0++
Stall (One)
}
If ((Local0 == 0x000493E0))
{
Return (0xFF)
}
Return (Zero)
}
Method (DSGS, 0, NotSerialized)
{
If ((PMBY () == Zero))
{
PMBC = 0x15
PSCM = Zero
PMBR = One
If ((PMBY () == Zero))
{
Local0 = PMBD /* \_SB_.PC00.PMBD */
Local1 = PMBC /* \_SB_.PC00.PMBC */
Stall (0x0A)
If (((Local0 != PMBD) || (Local1 != PMBC)))
{
Return (0xFF)
}
Return (Local0)
}
Else
{
Return (0xFE)
}
}
Else
{
Return (0xFE)
}
}
Method (DSCR, 1, NotSerialized)
{
If ((Arg0 > One))
{
Return (0xFD)
}
If ((PMBY () == Zero))
{
PMBC = 0x15
PSCM = One
PMBD = Arg0
PMBR = One
If ((PMBY () == Zero))
{
Local0 = PMBD /* \_SB_.PC00.PMBD */
Local1 = PMBC /* \_SB_.PC00.PMBC */
Stall (0x0A)
If (((Local0 != PMBD) || (Local1 != PMBC)))
{
Return (0xFF)
}
Local0 = Zero
While (((DSGS () & 0x02) && (Local0 < 0x64)))
{
Stall (0x64)
Local0++
}
If ((Local0 == 0x64))
{
Return (0xFE)
}
Else
{
Return (Zero)
}
}
Else
{
Return (0xFE)
}
}
Else
{
Return (0xFE)
}
}
Method (IOMA, 0, NotSerialized)
{
Return ((^RBAR & 0xFFFFFFFFFFFFFFFE))
}
Method (PIDS, 0, NotSerialized)
{
Return (0x00C10000)
}
OperationRegion (IOMR, SystemMemory, (IOMA () + PIDS ()), 0x0100)
Field (IOMR, DWordAcc, NoLock, Preserve)
{
Offset (0x40),
, 15,
TD3C, 1,
TACK, 1,
DPOF, 1,
Offset (0x70),
IMCD, 32,
IMDA, 32
}
Method (IMMD, 1, NotSerialized)
{
IMDA = Arg0
ADBG (Concatenate ("IMMD :: ", ToHexString (IMDA)))
Return (Zero)
}
Method (IMMC, 5, Serialized)
{
Name (OPTS, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00 // ....
})
CreateByteField (OPTS, Zero, CMST)
CreateByteField (OPTS, One, RTB1)
IMMD (Arg4)
Local1 = Arg3
Local1 <<= 0x08
Local1 += Arg2
Local1 <<= 0x08
Local1 += Arg0
IMCD = Local1
ADBG (Concatenate ("Set IMMC Command ", ToHexString (IMCD)))
IMCD |= 0x80000000
ADBG (Concatenate ("Set IMMC Run Bit ", ToHexString (IMCD)))
Local0 = Arg1
ADBG (Concatenate ("IMMC Delay ", ToHexString (Local0)))
While ((((IMCD & 0x80000000) != Zero) && (Local0 !=
Zero)))
{
Sleep (One)
Local0--
}
Switch (ToInteger (Arg0))
{
Case (0x02)
{
ADBG ("GEM_SB_TRAN_CMD")
Return (Zero)
}
Case (0x03)
{
ADBG ("IOM_BIOS_MBX_GET_HPD_COUNT")
If (((IMCD & 0x80000000) != Zero))
{
ADBG ("Timeout!")
ADBG (Concatenate ("IOM MB CMD Reg ", ToHexString (IMCD)))
ADBG (Concatenate ("IOM MB DATA Reg ", ToHexString (IMDA)))
CMST = One
Return (OPTS) /* \_SB_.PC00.IMMC.OPTS */
}
ElseIf (((IMCD & 0xFF) != Zero))
{
ADBG ("Completion Code Fail")
ADBG (Concatenate ("IOM MB CMD Reg ", ToHexString (IMCD)))
CMST = One
}
Else
{
ADBG ("Passed")
ADBG (Concatenate ("IOM MB CMD Reg :: ", ToHexString (IMCD)))
ADBG (Concatenate ("IOM MB DATA Reg :: ", ToHexString (IMDA)))
ADBG (Concatenate ("Arg2 is Port Number :: ", ToHexString (Arg2)))
CMST = Zero
RTB1 = IMDA /* \_SB_.PC00.IMDA */
}
Return (OPTS) /* \_SB_.PC00.IMMC.OPTS */
}
Case (Package (0x02)
{
0x06,
0x08
}
)
{
Switch (ToInteger (Arg0))
{
Case (0x06)
{
ADBG ("IOM_BIOS_MBX_DEC_HPD_COUNT:")
}
Case (0x08)
{
ADBG ("IOM_BIOS_DPIN_SWITCH_CMD:")
}
Default
{
ADBG ("UnKnownType")
CMST = One
Return (OPTS) /* \_SB_.PC00.IMMC.OPTS */
}
}
RTB1 = Zero
If (((IMCD & 0x80000000) != Zero))
{
ADBG ("Timeout!")
CMST = One
}
ElseIf (((IMCD & 0xFF) != Zero))
{
ADBG ("Completion Code Fail")
ADBG (Concatenate ("IOM MB CMD Reg ", ToHexString (IMCD)))
CMST = One
RTB1 = IMDA /* \_SB_.PC00.IMDA */
}
Else
{
ADBG ("Passed")
CMST = Zero
}
Return (OPTS) /* \_SB_.PC00.IMMC.OPTS */
}
Default
{
ADBG ("UnKnownType")
CMST = One
Return (OPTS) /* \_SB_.PC00.IMMC.OPTS */
}
}
}
Method (DPFC, 0, NotSerialized)
{
Name (OPTS, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00 // ....
})
CreateByteField (OPTS, Zero, CMST)
CreateByteField (OPTS, One, RTB1)
Sleep (PDI0)
OPTS = \_SB.PC00.IMMC (0x08, PDI1, Zero, Zero, Zero)
Return (OPTS) /* \_SB_.PC00.DPFC.OPTS */
}
Name (CTP0, Zero)
Name (CTP1, Zero)
Method (TG0N, 0, NotSerialized)
{
ADBG ("TG0N Start")
ADBG (Concatenate ("DMA0 VDID -", ToHexString (\_SB.PC00.TDM0.VDID)))
ADBG (Concatenate ("DMA0 PMST -", ToHexString (\_SB.PC00.TDM0.PMST)))
ADBG (Concatenate ("DMA0 PMEE -", ToHexString (\_SB.PC00.TDM0.PMEE)))
ADBG (Concatenate ("DMA0 PMES -", ToHexString (\_SB.PC00.TDM0.PMES)))
ADBG (Concatenate ("DMA0 STAT -", ToHexString (\_SB.PC00.TDM0.STAT)))
If ((\_SB.PC00.TDM0.VDID != 0xFFFFFFFF))
{
If ((\_SB.PC00.TDM0.STAT == Zero))
{
\_SB.PC00.TDM0.D3CX ()
ADBG ("Let\'s bring TBT RPs out of D3Cold")
If (CondRefOf (\_SB.PC01))
{
If ((\_SB.PC01.TRP0.VDID != 0xFFFFFFFF))
{
\_SB.PC01.TRP0.D3CX ()
}
If ((\_SB.PC01.TRP1.VDID != 0xFFFFFFFF))
{
\_SB.PC01.TRP1.D3CX ()
}
}
Else
{
If ((\_SB.PC00.TRP0.VDID != 0xFFFFFFFF))
{
\_SB.PC00.TRP0.D3CX ()
}
If ((\_SB.PC00.TRP1.VDID != 0xFFFFFFFF))
{
\_SB.PC00.TRP1.D3CX ()
Local0 = One
}
}
If ((\_SB.PC00.TDM0.ALCT == One))
{
If ((CTP0 == One))
{
If ((ITCT != Zero))
{
\_SB.PC00.TDM0.CNTP ()
\_SB.PC00.TDM0.WACT = One
CTP0 = Zero
}
}
\_SB.PC00.TDM0.ALCT = Zero
}
}
Else
{
ADBG ("Drop TG0N due to it is already exit D3 cold")
}
Sleep (ITRE)
}
ADBG ("TG0N End")
}
Method (TG0F, 0, NotSerialized)
{
ADBG ("TG0F Start")
ADBG (Concatenate ("DMA0 VDID -", ToHexString (\_SB.PC00.TDM0.VDID)))
ADBG (Concatenate ("DMA0 PMST -", ToHexString (\_SB.PC00.TDM0.PMST)))
ADBG (Concatenate ("DMA0 PMEE -", ToHexString (\_SB.PC00.TDM0.PMEE)))
ADBG (Concatenate ("DMA0 PMES -", ToHexString (\_SB.PC00.TDM0.PMES)))
ADBG (Concatenate ("DMA0 STAT -", ToHexString (\_SB.PC00.TDM0.STAT)))
If ((\_SB.PC00.TDM0.VDID != 0xFFFFFFFF))
{
If ((\_SB.PC00.TDM0.STAT == One))
{
\_SB.PC00.TDM0.D3CE ()
ADBG ("Let\'s push TBT RPs to D3Cold together")
If (CondRefOf (\_SB.PC01))
{
If ((\_SB.PC01.TRP0.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC01.TRP0.PDSX -", ToHexString (\_SB.PC01.TRP0.PDSX)))
If ((\_SB.PC01.TRP0.PDSX == One))
{
CTP0 = One
}
\_SB.PC01.TRP0.D3CE ()
}
If ((\_SB.PC01.TRP1.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC01.TRP1.PDSX -", ToHexString (\_SB.PC01.TRP1.PDSX)))
If ((\_SB.PC01.TRP1.PDSX == One))
{
CTP0 = One
}
\_SB.PC01.TRP1.D3CE ()
}
}
Else
{
If ((\_SB.PC00.TRP0.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC00.TRP0.PDSX -", ToHexString (\_SB.PC00.TRP0.PDSX)))
If ((\_SB.PC00.TRP0.PDSX == One))
{
CTP0 = One
}
\_SB.PC00.TRP0.D3CE ()
}
If ((\_SB.PC00.TRP1.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC00.TRP1.PDSX -", ToHexString (\_SB.PC00.TRP1.PDSX)))
If ((\_SB.PC00.TRP1.PDSX == One))
{
CTP0 = One
}
\_SB.PC00.TRP1.D3CE ()
}
}
}
}
ADBG ("TG0F End")
}
Method (TG1N, 0, NotSerialized)
{
ADBG ("TG1N Start")
ADBG (Concatenate ("DMA1 VDID -", ToHexString (\_SB.PC00.TDM1.VDID)))
ADBG (Concatenate ("DMA1 PMST -", ToHexString (\_SB.PC00.TDM1.PMST)))
ADBG (Concatenate ("DMA1 PMEE -", ToHexString (\_SB.PC00.TDM1.PMEE)))
ADBG (Concatenate ("DMA1 PMES -", ToHexString (\_SB.PC00.TDM1.PMES)))
ADBG (Concatenate ("DMA1 STAT -", ToHexString (\_SB.PC00.TDM1.STAT)))
If ((\_SB.PC00.TDM1.VDID != 0xFFFFFFFF))
{
If ((\_SB.PC00.TDM1.STAT == Zero))
{
\_SB.PC00.TDM1.D3CX ()
ADBG ("Let\'s bring TBT RPs out of D3Cold")
If (CondRefOf (\_SB.PC01))
{
If ((\_SB.PC01.TRP2.VDID != 0xFFFFFFFF))
{
\_SB.PC01.TRP2.D3CX ()
}
If ((\_SB.PC01.TRP3.VDID != 0xFFFFFFFF))
{
\_SB.PC01.TRP3.D3CX ()
}
}
Else
{
If ((\_SB.PC00.TRP2.VDID != 0xFFFFFFFF))
{
\_SB.PC00.TRP2.D3CX ()
}
If ((\_SB.PC00.TRP3.VDID != 0xFFFFFFFF))
{
\_SB.PC00.TRP3.D3CX ()
}
}
If ((\_SB.PC00.TDM1.ALCT == One))
{
If ((CTP1 == One))
{
If ((ITCT != Zero))
{
\_SB.PC00.TDM1.CNTP ()
\_SB.PC00.TDM1.WACT = One
CTP1 = Zero
}
}
\_SB.PC00.TDM1.ALCT = Zero
}
}
Else
{
ADBG ("Drop TG1N due to it is already exit D3 cold")
}
Sleep (ITRE)
}
ADBG ("TG1N End")
}
Method (TG1F, 0, NotSerialized)
{
ADBG ("TG1F Start")
ADBG (Concatenate ("DMA1 VDID -", ToHexString (\_SB.PC00.TDM1.VDID)))
ADBG (Concatenate ("DMA1 PMST -", ToHexString (\_SB.PC00.TDM1.PMST)))
ADBG (Concatenate ("DMA1 PMEE -", ToHexString (\_SB.PC00.TDM1.PMEE)))
ADBG (Concatenate ("DMA1 PMES -", ToHexString (\_SB.PC00.TDM1.PMES)))
ADBG (Concatenate ("DMA1 STAT -", ToHexString (\_SB.PC00.TDM1.STAT)))
If ((\_SB.PC00.TDM1.VDID != 0xFFFFFFFF))
{
If ((\_SB.PC00.TDM1.STAT == One))
{
\_SB.PC00.TDM1.D3CE ()
ADBG ("Let\'s push TBT RPs to D3Cold together")
If (CondRefOf (\_SB.PC01))
{
If ((\_SB.PC01.TRP2.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC01.TRP2.PDSX -", ToHexString (\_SB.PC01.TRP2.PDSX)))
If ((\_SB.PC01.TRP2.PDSX == One))
{
CTP1 = One
}
\_SB.PC01.TRP2.D3CE ()
}
If ((\_SB.PC01.TRP3.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC01.TRP3.PDSX -", ToHexString (\_SB.PC01.TRP3.PDSX)))
If ((\_SB.PC01.TRP3.PDSX == One))
{
CTP1 = One
}
\_SB.PC01.TRP3.D3CE ()
}
}
Else
{
If ((\_SB.PC00.TRP2.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC00.TRP2.PDSX -", ToHexString (\_SB.PC00.TRP2.PDSX)))
If ((\_SB.PC00.TRP2.PDSX == One))
{
CTP1 = One
}
\_SB.PC00.TRP2.D3CE ()
}
If ((\_SB.PC00.TRP3.VDID != 0xFFFFFFFF))
{
ADBG (Concatenate ("PC00.TRP3.PDSX -", ToHexString (\_SB.PC00.TRP3.PDSX)))
If ((\_SB.PC00.TRP3.PDSX == One))
{
CTP1 = One
}
\_SB.PC00.TRP3.D3CE ()
}
}
}
}
ADBG ("TG1F End")
}
If (ITRT)
{
PowerResource (TBT0, 0x05, 0x0001)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("DMA0 D3C STAT -", ToHexString (\_SB.PC00.TDM0.STAT)))
Return (\_SB.PC00.TDM0.STAT)
}
Method (_ON, 0, NotSerialized) // _ON_: Power On
{
ADBG ("TBT0 Group ON Start")
If (ITIM)
{
TG0N ()
}
Else
{
ADBG ("TBT IMR is not valid")
}
ADBG ("TBT0 Group ON End")
}
Method (_OFF, 0, NotSerialized) // _OFF: Power Off
{
ADBG ("TBT0 Group OFF Start")
If (ITIM)
{
ADBG (Concatenate ("Skip D3C entry? ", ToHexString (\_SB.PC00.TDM0.SD3C)))
If ((\_SB.PC00.TDM0.SD3C == Zero))
{
TG0F ()
}
}
Else
{
ADBG ("TBT IMR is not valid")
}
ADBG ("TBT0 Group OFF End")
}
}
PowerResource (TBT1, 0x05, 0x0001)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("DMA1 D3C STAT -", ToHexString (\_SB.PC00.TDM1.STAT)))
Return (\_SB.PC00.TDM1.STAT)
}
Method (_ON, 0, NotSerialized) // _ON_: Power On
{
ADBG ("TBT1 Group ON Start")
If (ITIM)
{
TG1N ()
}
Else
{
ADBG ("TBT IMR is not valid")
}
ADBG ("TBT1 Group ON End")
}
Method (_OFF, 0, NotSerialized) // _OFF: Power Off
{
ADBG ("TBT1 Group OFF Start")
If (ITIM)
{
ADBG (Concatenate ("Skip D3C entry? ", ToHexString (\_SB.PC00.TDM1.SD3C)))
If ((\_SB.PC00.TDM1.SD3C == Zero))
{
TG1F ()
}
}
Else
{
ADBG ("TBT IMR is not valid")
}
ADBG ("TBT1 Group OFF End")
}
}
}
If (TRTD)
{
Method (TCON, 0, NotSerialized)
{
ADBG ("TCSS ON")
ADBG ("TCON")
If ((TD3C == One))
{
ADBG (Concatenate ("TACK before D3 cold exit -", ToHexString (TACK)))
TD3C = Zero
Local0 = Zero
While (((TACK != Zero) && (Local0 < 0x64)))
{
Sleep (One)
Local0++
}
ADBG (Concatenate ("TACK after D3 cold exit -", ToHexString (TACK)))
ADBG (Concatenate ("Time for wait TACK - ", ToHexString (Local0)))
If ((Local0 == 0x64))
{
ADBG ("Error: Timeout occurred")
}
Else
{
ADBG ("D3Cold Exit")
Local0 = Zero
While ((\_SB.PC00.TXHC.VDID == 0xFFFFFFFF))
{
If ((DSGS () == One))
{
DSCR (Zero)
}
ADBG (Concatenate ("TXHC VDID -", ToHexString (\_SB.PC00.TXHC.VDID)))
Local0++
If ((Local0 == 0x05))
{
ADBG ("pCode mailbox command failed")
Break
}
}
If (((TDCE == One) && (IMRY == One)))
{
ADBG ("IOM.D3.TDCE")
\_SB.PC00.TXDC.SINT (TCIT, TCIR)
ADBG ("IOM.D3.TDCE Done")
}
}
}
Else
{
ADBG ("Drop TCON due to it is already exit D3 cold")
Return (Zero)
}
ADBG ("TCSS ON End")
}
Method (TCOF, 0, NotSerialized)
{
ADBG ("TCSS OFF Start")
ADBG ("TCOF")
ADBG (Concatenate ("DMA0 Skip D3C entry? ", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("DMA1 Skip D3C entry? ", ToHexString (\_SB.PC00.TDM1.SD3C)))
ADBG (Concatenate ("XHCI Skip D3C entry? ", ToHexString (\_SB.PC00.TXHC.SD3C)))
If (((\_SB.PC00.TXHC.SD3C != Zero) || ((\_SB.PC00.TDM0.SD3C != Zero) ||
(\_SB.PC00.TDM1.SD3C != Zero))))
{
Return (Zero)
}
Local0 = Zero
While ((\_SB.PC00.TXHC.VDID != 0xFFFFFFFF))
{
If ((DSGS () == Zero))
{
DSCR (One)
}
ADBG (Concatenate ("TXHC VDID -", ToHexString (\_SB.PC00.TXHC.VDID)))
Local0++
If ((Local0 == 0x05))
{
ADBG ("pCode mailbox command failed")
Break
}
}
ADBG ("D3Cold Entry")
TD3C = One
ADBG (Concatenate ("IOM D3Cold -", ToHexString (TD3C)))
ADBG ("TCSS OFF End")
}
PowerResource (D3C, 0x05, 0x0000)
{
Name (STAT, One)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS D3C STAT -", ToHexString (STAT)))
Return (STAT) /* \_SB_.PC00.D3C_.STAT */
}
Method (_ON, 0, NotSerialized) // _ON_: Power On
{
\_SB.PC00.TCON ()
STAT = One
}
Method (_OFF, 0, NotSerialized) // _OFF: Power Off
{
\_SB.PC00.TCOF ()
STAT = Zero
}
}
}
Device (TXHC)
{
Name (_ADR, 0x000D0000) // _ADR: Address
Name (_DDN, "ICL North XHCI controller") // _DDN: DOS Device Name
Name (_STR, Unicode ("ICL North XHCI controller")) // _STR: Description String
Name (DCPM, 0x04)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS xHCI _STA", ToHexString (THCE)))
If ((THCE == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR & 0x07)
Local1 = ((_ADR >> 0x10) & 0x1F)
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
Local3 = (\_SB.PC00.GPCB () + Local2)
ADBG (Concatenate ("CPU XHCI PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (TRTD)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
Name (SD3C, Zero)
If (TRTD)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
Return (Package (0x01)
{
\_SB.PC00.D3C
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
Return (Package (0x01)
{
\_SB.PC00.D3C
})
}
}
OperationRegion (XPRT, SystemMemory, BASE (), 0x0100)
Field (XPRT, ByteAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x74),
D0D3, 2,
Offset (0x75),
PMEE, 1,
, 6,
PMES, 1
}
Name (XFLT, Zero)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
ADBG ("XHCI _DSM")
If (PCIC (Arg0))
{
Return (PCID (Arg0, Arg1, Arg2, Arg3))
}
Return (Buffer (One)
{
0x00 // .
})
}
Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized) // _S4D: S4 Device State
{
Return (0x03)
}
Method (_S3W, 0, NotSerialized) // _S3W: S3 Device Wake State
{
Return (0x03)
}
Method (_S4W, 0, NotSerialized) // _S4W: S4 Device Wake State
{
Return (0x03)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x6D, DUWS))
}
Else
{
Return (GPRW (0x6D, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG ("TCSS XHCI _DSW")
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
ADBG (Concatenate ("Arg2 -", ToHexString (Arg2)))
C2PM (Arg0, Arg1, Arg2, DCPM)
SD3C = Arg1
ADBG (Concatenate ("SD3C -", ToHexString (SD3C)))
}
Device (RHUB)
{
Name (_ADR, Zero) // _ADR: Address
Method (TPLD, 2, Serialized)
{
Name (PCKG, Package (0x01)
{
Buffer (0x10){}
})
CreateField (DerefOf (PCKG [Zero]), Zero, 0x07, REV)
REV = One
CreateField (DerefOf (PCKG [Zero]), 0x40, One, VISI)
VISI = Arg0
CreateField (DerefOf (PCKG [Zero]), 0x57, 0x08, GPOS)
GPOS = Arg1
CreateField (DerefOf (PCKG [Zero]), 0x4A, 0x04, SHAP)
SHAP = One
CreateField (DerefOf (PCKG [Zero]), 0x20, 0x10, WID)
WID = 0x08
CreateField (DerefOf (PCKG [Zero]), 0x30, 0x10, HGT)
HGT = 0x03
Return (PCKG) /* \_SB_.PC00.TXHC.RHUB.TPLD.PCKG */
}
Method (TUPC, 2, Serialized)
{
Name (PCKG, Package (0x04)
{
One,
Zero,
Zero,
Zero
})
PCKG [Zero] = Arg0
PCKG [One] = Arg1
Return (PCKG) /* \_SB_.PC00.TXHC.RHUB.TUPC.PCKG */
}
Device (HS01)
{
Name (_ADR, One) // _ADR: Address
}
Device (SS01)
{
Name (_ADR, 0x02) // _ADR: Address
}
Device (SS02)
{
Name (_ADR, 0x03) // _ADR: Address
}
Device (SS03)
{
Name (_ADR, 0x04) // _ADR: Address
}
Device (SS04)
{
Name (_ADR, 0x05) // _ADR: Address
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG ("TCSS RHUB XHCI PS0")
}
Method (_PS2, 0, Serialized) // _PS2: Power State 2
{
ADBG ("TCSS RHUB XHCI PS2")
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG ("TCSS RHUB XHCI PS3")
}
}
}
If ((TDCE == One))
{
Device (TXDC)
{
Name (_ADR, 0x000D0001) // _ADR: Address
Name (_DDN, "ICL North XDCI controller") // _DDN: DOS Device Name
Name (_STR, Unicode ("ICL North XDCI controller")) // _STR: Description String
Name (DCPM, 0x05)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS xDCI _STA", ToHexString (TDCE)))
If ((TDCE == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (SINT, 2, Serialized)
{
ADBG ("xDCI.SINT")
If ((IMRY == One))
{
Local0 = (Arg0 << 0x08)
Local1 = (Arg1 << 0x14)
Local0 += Local1
ADBG (Concatenate ("TCSS xDCI SINT", ToHexString (Local0)))
IMMC (0x02, Zero, One, Zero, Local0)
}
Else
{
ADBG ("IOM not ready")
}
ADBG ("xDCI.SINT Done")
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
Return (0x03)
}
OperationRegion (XDCS, PCI_Config, Zero, 0x0100)
Field (XDCS, DWordAcc, NoLock, Preserve)
{
DVID, 16,
Offset (0x10),
XDCB, 64
}
Field (XDCS, ByteAcc, NoLock, Preserve)
{
Offset (0x84),
D0I3, 2
}
Method (XDBA, 0, NotSerialized)
{
Return ((^XDCB & 0xFFFFFFFFFFFFFF00))
}
OperationRegion (XDMM, SystemMemory, XDBA (), 0x00110000)
Field (XDMM, WordAcc, NoLock, Preserve)
{
Offset (0xC110),
GCTL, 32,
Offset (0x10F810),
Offset (0x10F811),
U2CP, 2,
U3CP, 2,
Offset (0x10F818),
PUPS, 2,
, 1,
PURC, 1,
Offset (0x10F81A),
Offset (0x10F81C),
, 3,
UXPE, 2,
Offset (0x10F81E)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If (PCIC (Arg0))
{
Return (PCID (Arg0, Arg1, Arg2, Arg3))
}
ADBG ("TXDC DSM")
If ((Arg0 == ToUUID ("732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511")))
{
If ((Arg1 == One))
{
Method (SPPT, 2, Serialized)
{
ADBG ("TXDC Set PMU Power State")
Local1 = Arg0
Local2 = Arg1
If ((Local1 == Zero))
{
ADBG ("TXDC PMU D0")
UXPE = Zero
Local0 = Zero
While ((Local0 < 0x0A))
{
Stall (0x64)
Local0++
}
PUPS = Zero
Local0 = Zero
While ((Local0 < 0x07D0))
{
Stall (0x64)
If (((U2CP == Zero) && (U3CP == Zero)))
{
Break
}
Local0++
}
If ((U2CP != Zero))
{
ADBG ("TXDC U2 not in D0")
}
If ((U3CP != Zero))
{
ADBG ("TXDC U3 not in D0")
}
Return (Zero)
}
If ((Local1 == 0x03))
{
ADBG ("TXDC PMU D3")
If ((U2CP != Zero))
{
ADBG ("TXDC U2 not in D0")
}
If ((U3CP != Zero))
{
ADBG ("TXDC U3 not in D0")
}
PUPS = 0x03
Local0 = Zero
While ((Local0 < 0x07D0))
{
Stall (0x64)
If (((U2CP == 0x03) && (U3CP == 0x03)))
{
Break
}
Local0++
}
If ((U2CP != 0x03))
{
ADBG ("TXDC U2 not in D3")
}
If ((U3CP != 0x03))
{
ADBG ("TXDC U3 not in D3")
}
UXPE = Local2
Return (Zero)
}
Return (Zero)
}
Switch (ToInteger (Arg2))
{
Case (Zero)
{
ADBG ("TXDC Fn0")
Return (Buffer (0x02)
{
0xF3, 0x03 // ..
})
}
Case (One)
{
ADBG ("TXDC Fn1")
Return (One)
}
Case (0x04)
{
ADBG ("TXDC Fn4")
Local1 = DerefOf (Arg3 [Zero])
ADBG (Local1)
SPPT (Local1, Zero)
}
Case (0x05)
{
ADBG ("TXDC Fn5")
If (CondRefOf (XDAT))
{
If ((XDAT () == One))
{
ADBG ("USB Attach")
Notify (\_SB.PC00.TXDC, 0x80) // Status Change
}
Else
{
ADBG ("USB Detach")
Notify (\_SB.PC00.TXDC, 0x81) // Information Change
}
}
Return (Zero)
}
Case (0x06)
{
ADBG ("TXDC Fn6")
If ((OTHC == Zero))
{
CSFR = One
Local0 = Zero
While ((Local0 < 0x64))
{
If ((CSFR == Zero))
{
Break
}
Sleep (One)
}
}
Return (Zero)
}
Case (0x07)
{
ADBG ("TXDC Fn7")
Local0 = PUPS /* \_SB_.PC00.TXDC.PUPS */
Return (Local0)
}
Case (0x08)
{
ADBG ("TXDC Fn8")
Return (One)
}
Case (0x09)
{
ADBG ("TXDC Fn9")
Local1 = (TCDS & 0xFFF80000)
Local1 >>= 0x13
ADBG (Concatenate ("CPU XDCI: Func9 Return Val = ", ToHexString (Local1)))
Return (Local1)
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x04))
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
C2PM (Arg0, Arg1, Arg2, DCPM)
}
}
}
Device (TDM0)
{
Name (_ADR, 0x000D0002) // _ADR: Address
Name (_DDN, "ICL TBT DMA0 controller") // _DDN: DOS Device Name
Name (_STR, Unicode ("ICL TBT DMA0 controller")) // _STR: Description String
Name (DUID, Zero)
Name (DCPM, 0x06)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS DMA0 _STA", ToHexString (DME0)))
If ((DME0 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (BASE, 0, NotSerialized)
{
Local0 = (\_SB.PC00.GPCB () + 0x0006A000)
ADBG (Concatenate ("TDM0 MMIO Address", ToHexString (Local0)))
Return (Local0)
}
OperationRegion (DPME, SystemMemory, BASE (), 0x0100)
Field (DPME, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x84),
PMST, 2,
Offset (0x85),
PMEE, 1,
, 6,
PMES, 1,
Offset (0xFC),
DD3E, 1,
DFPE, 1,
Offset (0xFF),
DMAD, 8
}
Name (STAT, One)
Name (ALCT, Zero)
Name (WACT, Zero)
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT DMA PS0 Start, DUID -", ToHexString (DUID)))
ADBG (Concatenate ("DMA VDID -", ToHexString (VDID)))
ADBG (Concatenate ("PMST -", ToHexString (PMST)))
ADBG (Concatenate ("PMEE -", ToHexString (PMEE)))
ADBG (Concatenate ("PMES -", ToHexString (PMES)))
If ((WACT == One))
{
WACT = 0x02
WFCC (ITCT)
WACT = Zero
}
ElseIf ((WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT DMA PS0 End, DUID -", ToHexString (DUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT DMA PS3 Start, DUID -", ToHexString (DUID)))
ADBG (Concatenate ("DMA VDID -", ToHexString (VDID)))
ADBG (Concatenate ("PMST -", ToHexString (PMST)))
ADBG (Concatenate ("PMEE -", ToHexString (PMEE)))
ADBG (Concatenate ("PMES -", ToHexString (PMES)))
ADBG (Concatenate ("TBT DMA PS3 End, DUID -", ToHexString (DUID)))
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
ADBG ("TDMA S0W")
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If ((DUID == Zero))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If ((DUID == Zero))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If ((DUID == Zero))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If ((DUID == Zero))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (D3CX, 0, Serialized)
{
ADBG ("Disable DMA RTD3 bit")
ADBG (Concatenate ("DUID -", ToHexString (DUID)))
DD3E = Zero
STAT = One
}
Method (D3CE, 0, Serialized)
{
ADBG ("Enable DMA RTD3 bit")
ADBG (Concatenate ("DUID -", ToHexString (DUID)))
DD3E = One
STAT = Zero
ALCT = One
}
Name (SD3C, Zero)
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS DMA _DSW DUID -", ToHexString (DUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
SD3C = Arg1
ADBG (Concatenate ("SD3C -", ToHexString (SD3C)))
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x04))
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG (Concatenate ("TBT _DSD IMR_VALID =", ToHexString (ITIM)))
ADBG (Concatenate ("TBT _DSD WAKE_SUPPORTED =", ToHexString (TIVS)))
If (ITIM)
{
If (TIVS)
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
One
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
One
}
}
})
}
Else
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
One
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
Zero
}
}
})
}
}
ElseIf (TIVS)
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
Zero
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
One
}
}
})
}
Else
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
Zero
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
Zero
}
}
})
}
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("197db5e0-f095-4f33-b915-71dd70833e55")))
{
If ((Arg2 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x07 // .
})
}
Else
{
Return (Buffer (One)
{
0x01 // .
})
}
}
If ((Arg2 == One))
{
Name (PCPN, Buffer (One)
{
0x00 // .
})
CreateBitField (PCPN, Zero, PCP0)
CreateBitField (PCPN, One, PCP1)
If ((DUID == Zero))
{
If ((TRE0 == One))
{
PCP0 = One
}
If ((TRE1 == One))
{
PCP1 = One
}
}
Else
{
If ((TRE2 == One))
{
PCP0 = One
}
If ((TRE3 == One))
{
PCP1 = One
}
}
Return (PCPN) /* \_SB_.PC00.TDM0._DSM.PCPN */
}
If ((Arg2 == 0x02))
{
Name (TCAP, Buffer (One)
{
0x00 // .
})
CreateBitField (TCAP, Zero, IMRV)
CreateBitField (TCAP, One, WAKE)
CreateBitField (TCAP, 0x02, TVDS)
If (ITIM)
{
IMRV = One
}
If (TIVS)
{
WAKE = One
}
If (ITVD)
{
TVDS = One
}
Return (TCAP) /* \_SB_.PC00.TDM0._DSM.TCAP */
}
}
ElseIf ((Arg0 == Buffer (0x10)
{
/* 0000 */ 0x32, 0x52, 0x42, 0x1B, 0x4C, 0x15, 0x34, 0x4F, // 2RB.L.4O
/* 0008 */ 0x7B, 0x9E, 0xB6, 0x5C, 0x94, 0x64, 0x94, 0xA3 // {..\.d..
}))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
ADBG (Concatenate ("TBT DMA _DSM DUID:", ToHexString (DUID)))
Switch (Arg1)
{
Case (One)
{
Return (Buffer (One)
{
0x03 // .
})
}
}
ADBG ("return buffer 0x00")
Return (Buffer (One)
{
0x00 // .
})
}
Case (One)
{
ADBG (Concatenate ("TBT DMA _DSM Func 1 DUID:", ToHexString (DUID)))
If ((DUID == One))
{
ADBG (Concatenate ("ITM1:", ToHexString (ITM1)))
Return (ITM1) /* External reference */
}
Else
{
ADBG (Concatenate ("ITM0:", ToHexString (ITM0)))
Return (ITM0) /* External reference */
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Field (DPME, DWordAcc, NoLock, Preserve)
{
Offset (0xC8),
, 31,
INFR, 1,
Offset (0xEC),
TB2P, 32,
P2TB, 32
}
Method (ITMB, 1, Serialized)
{
Local0 = (Arg0 | One)
P2TB = Local0
}
Method (WFCC, 1, Serialized)
{
WTBS (Arg0)
P2TB = Zero
WTBC (Arg0)
}
Method (WTBS, 1, Serialized)
{
Local0 = Arg0
While ((Local0 > Zero))
{
If ((TB2P & One))
{
Break
}
Local0--
Sleep (One)
}
}
Method (WTBC, 1, Serialized)
{
Local0 = Arg0
While ((Local0 > Zero))
{
If (((TB2P & One) != One))
{
Break
}
Local0--
Sleep (One)
}
}
Method (CNTP, 0, Serialized)
{
Local0 = Zero
If ((DFPE == Zero))
{
DMAD = 0x22
DFPE = One
While (((INFR == Zero) && (Local0 < ITFP)))
{
Sleep (One)
Local0++
}
}
If ((Local0 != ITFP))
{
ITMB (0x3E)
}
}
}
Device (TDM1)
{
Name (_ADR, 0x000D0003) // _ADR: Address
Name (_DDN, "ICL TBT DMA1 controller") // _DDN: DOS Device Name
Name (_STR, Unicode ("ICL TBT DMA1 controller")) // _STR: Description String
Name (DUID, One)
Name (DCPM, 0x07)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS DMA1 _STA", ToHexString (DME1)))
If ((DME1 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (BASE, 0, NotSerialized)
{
Local0 = (\_SB.PC00.GPCB () + 0x0006B000)
ADBG (Concatenate ("TDM1 MMIO Address", ToHexString (Local0)))
Return (Local0)
}
OperationRegion (DPME, SystemMemory, BASE (), 0x0100)
Field (DPME, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x84),
PMST, 2,
Offset (0x85),
PMEE, 1,
, 6,
PMES, 1,
Offset (0xFC),
DD3E, 1,
DFPE, 1,
Offset (0xFF),
DMAD, 8
}
Name (STAT, One)
Name (ALCT, Zero)
Name (WACT, Zero)
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT DMA PS0 Start, DUID -", ToHexString (DUID)))
ADBG (Concatenate ("DMA VDID -", ToHexString (VDID)))
ADBG (Concatenate ("PMST -", ToHexString (PMST)))
ADBG (Concatenate ("PMEE -", ToHexString (PMEE)))
ADBG (Concatenate ("PMES -", ToHexString (PMES)))
If ((WACT == One))
{
WACT = 0x02
WFCC (ITCT)
WACT = Zero
}
ElseIf ((WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT DMA PS0 End, DUID -", ToHexString (DUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT DMA PS3 Start, DUID -", ToHexString (DUID)))
ADBG (Concatenate ("DMA VDID -", ToHexString (VDID)))
ADBG (Concatenate ("PMST -", ToHexString (PMST)))
ADBG (Concatenate ("PMEE -", ToHexString (PMEE)))
ADBG (Concatenate ("PMES -", ToHexString (PMES)))
ADBG (Concatenate ("TBT DMA PS3 End, DUID -", ToHexString (DUID)))
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
ADBG ("TDMA S0W")
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If ((DUID == Zero))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If ((DUID == Zero))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If ((DUID == Zero))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If ((DUID == Zero))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (D3CX, 0, Serialized)
{
ADBG ("Disable DMA RTD3 bit")
ADBG (Concatenate ("DUID -", ToHexString (DUID)))
DD3E = Zero
STAT = One
}
Method (D3CE, 0, Serialized)
{
ADBG ("Enable DMA RTD3 bit")
ADBG (Concatenate ("DUID -", ToHexString (DUID)))
DD3E = One
STAT = Zero
ALCT = One
}
Name (SD3C, Zero)
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS DMA _DSW DUID -", ToHexString (DUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
SD3C = Arg1
ADBG (Concatenate ("SD3C -", ToHexString (SD3C)))
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x04))
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG (Concatenate ("TBT _DSD IMR_VALID =", ToHexString (ITIM)))
ADBG (Concatenate ("TBT _DSD WAKE_SUPPORTED =", ToHexString (TIVS)))
If (ITIM)
{
If (TIVS)
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
One
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
One
}
}
})
}
Else
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
One
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
Zero
}
}
})
}
}
ElseIf (TIVS)
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
Zero
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
One
}
}
})
}
Else
{
Return (Package (0x04)
{
ToUUID ("c44d002f-69f9-4e7d-a904-a7baabdf43f7"),
Package (0x01)
{
Package (0x02)
{
"IMR_VALID",
Zero
}
},
ToUUID ("6c501103-c189-4296-ba72-9bf5a26ebe5d"),
Package (0x01)
{
Package (0x02)
{
"WAKE_SUPPORTED",
Zero
}
}
})
}
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("197db5e0-f095-4f33-b915-71dd70833e55")))
{
If ((Arg2 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x07 // .
})
}
Else
{
Return (Buffer (One)
{
0x01 // .
})
}
}
If ((Arg2 == One))
{
Name (PCPN, Buffer (One)
{
0x00 // .
})
CreateBitField (PCPN, Zero, PCP0)
CreateBitField (PCPN, One, PCP1)
If ((DUID == Zero))
{
If ((TRE0 == One))
{
PCP0 = One
}
If ((TRE1 == One))
{
PCP1 = One
}
}
Else
{
If ((TRE2 == One))
{
PCP0 = One
}
If ((TRE3 == One))
{
PCP1 = One
}
}
Return (PCPN) /* \_SB_.PC00.TDM1._DSM.PCPN */
}
If ((Arg2 == 0x02))
{
Name (TCAP, Buffer (One)
{
0x00 // .
})
CreateBitField (TCAP, Zero, IMRV)
CreateBitField (TCAP, One, WAKE)
CreateBitField (TCAP, 0x02, TVDS)
If (ITIM)
{
IMRV = One
}
If (TIVS)
{
WAKE = One
}
If (ITVD)
{
TVDS = One
}
Return (TCAP) /* \_SB_.PC00.TDM1._DSM.TCAP */
}
}
ElseIf ((Arg0 == Buffer (0x10)
{
/* 0000 */ 0x32, 0x52, 0x42, 0x1B, 0x4C, 0x15, 0x34, 0x4F, // 2RB.L.4O
/* 0008 */ 0x7B, 0x9E, 0xB6, 0x5C, 0x94, 0x64, 0x94, 0xA3 // {..\.d..
}))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
ADBG (Concatenate ("TBT DMA _DSM DUID:", ToHexString (DUID)))
Switch (Arg1)
{
Case (One)
{
Return (Buffer (One)
{
0x03 // .
})
}
}
ADBG ("return buffer 0x00")
Return (Buffer (One)
{
0x00 // .
})
}
Case (One)
{
ADBG (Concatenate ("TBT DMA _DSM Func 1 DUID:", ToHexString (DUID)))
If ((DUID == One))
{
ADBG (Concatenate ("ITM1:", ToHexString (ITM1)))
Return (ITM1) /* External reference */
}
Else
{
ADBG (Concatenate ("ITM0:", ToHexString (ITM0)))
Return (ITM0) /* External reference */
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Field (DPME, DWordAcc, NoLock, Preserve)
{
Offset (0xC8),
, 31,
INFR, 1,
Offset (0xEC),
TB2P, 32,
P2TB, 32
}
Method (ITMB, 1, Serialized)
{
Local0 = (Arg0 | One)
P2TB = Local0
}
Method (WFCC, 1, Serialized)
{
WTBS (Arg0)
P2TB = Zero
WTBC (Arg0)
}
Method (WTBS, 1, Serialized)
{
Local0 = Arg0
While ((Local0 > Zero))
{
If ((TB2P & One))
{
Break
}
Local0--
Sleep (One)
}
}
Method (WTBC, 1, Serialized)
{
Local0 = Arg0
While ((Local0 > Zero))
{
If (((TB2P & One) != One))
{
Break
}
Local0--
Sleep (One)
}
}
Method (CNTP, 0, Serialized)
{
Local0 = Zero
If ((DFPE == Zero))
{
DMAD = 0x22
DFPE = One
While (((INFR == Zero) && (Local0 < ITFP)))
{
Sleep (One)
Local0++
}
}
If ((Local0 != ITFP))
{
ITMB (0x3E)
}
}
}
}
If (CondRefOf (\_SB.PC01))
{
Scope (\_SB.PC01)
{
Device (TRP0)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA0 != Zero))
{
Return (TPA0) /* External reference */
}
Else
{
Return (0x00070000)
}
}
Name (TUID, Zero)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, 0x08)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP0 _STA", ToHexString (TRE0)))
If ((TRE0 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE0 /* External reference */
LMSL = PSL0 /* External reference */
LNSL = PNS0 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC01.TRP0._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC01.TRP0.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC01.TRP0.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC01.TRP0.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC01.TRP0.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC01.TRP0.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC01.TRP0.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC01.TRP0.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC01.TRP0.AR01 */
}
}
Return (PD01) /* \_SB_.PC01.TRP0.PD01 */
}
}
Device (TRP1)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA1 != Zero))
{
Return (TPA1) /* External reference */
}
Else
{
Return (0x00070001)
}
}
Name (TUID, One)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, 0x09)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP1 _STA", ToHexString (TRE1)))
If ((TRE1 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE1 /* External reference */
LMSL = PSL1 /* External reference */
LNSL = PNS1 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC01.TRP1._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC01.TRP1.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC01.TRP1.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC01.TRP1.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC01.TRP1.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC01.TRP1.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC01.TRP1.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC01.TRP1.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC01.TRP1.AR01 */
}
}
Return (PD01) /* \_SB_.PC01.TRP1.PD01 */
}
}
Device (TRP2)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA2 != Zero))
{
Return (TPA2) /* External reference */
}
Else
{
Return (0x00070002)
}
}
Name (TUID, 0x02)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, 0x0A)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP2 _STA", ToHexString (TRE2)))
If ((TRE2 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE2 /* External reference */
LMSL = PSL2 /* External reference */
LNSL = PNS2 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC01.TRP2._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC01.TRP2.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC01.TRP2.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC01.TRP2.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC01.TRP2.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC01.TRP2.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC01.TRP2.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC01.TRP2.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC01.TRP2.AR01 */
}
}
Return (PD01) /* \_SB_.PC01.TRP2.PD01 */
}
}
Device (TRP3)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA3 != Zero))
{
Return (TPA3) /* External reference */
}
Else
{
Return (0x00070003)
}
}
Name (TUID, 0x03)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, 0x0B)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP3 _STA", ToHexString (TRE3)))
If ((TRE3 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE3 /* External reference */
LMSL = PSL3 /* External reference */
LNSL = PNS3 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC01.TRP3._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC01.TRP3.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC01.TRP3.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC01.TRP3.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC01.TRP3.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC01.TRP3.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC01.TRP3.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC01.TRP3.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC01.TRP3.AR01 */
}
}
Return (PD01) /* \_SB_.PC01.TRP3.PD01 */
}
}
}
}
Else
{
Scope (\_SB.PC00)
{
Device (TRP0)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA0 != Zero))
{
Return (TPA0) /* External reference */
}
Else
{
Return (0x00070000)
}
}
Name (TUID, Zero)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, Zero)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP0 _STA", ToHexString (TRE0)))
If ((TRE0 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE0 /* External reference */
LMSL = PSL0 /* External reference */
LNSL = PNS0 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC00.TRP0._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC00.TRP0.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC00.TRP0.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC00.TRP0.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC00.TRP0.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC00.TRP0.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC00.TRP0.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC00.TRP0.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC00.TRP0.AR01 */
}
}
Return (PD01) /* \_SB_.PC00.TRP0.PD01 */
}
}
Device (TRP1)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA1 != Zero))
{
Return (TPA1) /* External reference */
}
Else
{
Return (0x00070001)
}
}
Name (TUID, One)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, One)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP1 _STA", ToHexString (TRE1)))
If ((TRE1 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE1 /* External reference */
LMSL = PSL1 /* External reference */
LNSL = PNS1 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC00.TRP1._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC00.TRP1.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC00.TRP1.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC00.TRP1.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC00.TRP1.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC00.TRP1.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC00.TRP1.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC00.TRP1.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC00.TRP1.AR01 */
}
}
Return (PD01) /* \_SB_.PC00.TRP1.PD01 */
}
}
Device (TRP2)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA2 != Zero))
{
Return (TPA2) /* External reference */
}
Else
{
Return (0x00070002)
}
}
Name (TUID, 0x02)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, 0x02)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP2 _STA", ToHexString (TRE2)))
If ((TRE2 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE2 /* External reference */
LMSL = PSL2 /* External reference */
LNSL = PNS2 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC00.TRP2._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC00.TRP2.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC00.TRP2.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC00.TRP2.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC00.TRP2.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC00.TRP2.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC00.TRP2.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC00.TRP2.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC00.TRP2.AR01 */
}
}
Return (PD01) /* \_SB_.PC00.TRP2.PD01 */
}
}
Device (TRP3)
{
Method (_ADR, 0, NotSerialized) // _ADR: Address
{
If ((TPA3 != Zero))
{
Return (TPA3) /* External reference */
}
Else
{
Return (0x00070003)
}
}
Name (TUID, 0x03)
Name (LTEN, Zero)
Name (LMSL, 0x88C8)
Name (LNSL, 0x88C8)
Name (DCPM, 0x03)
Method (_STA, 0, NotSerialized) // _STA: Status
{
ADBG (Concatenate ("TCSS RP3 _STA", ToHexString (TRE3)))
If ((TRE3 == One))
{
Return (0x0F)
}
Return (Zero)
}
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
LTEN = LTE3 /* External reference */
LMSL = PSL3 /* External reference */
LNSL = PNS3 /* External reference */
}
Method (BASE, 0, NotSerialized)
{
Local0 = (_ADR () & 0x07)
Local1 = ((_ADR () >> 0x10) & 0x1F)
ADBG (Concatenate ("BASE of ITBT Port", ToHexString (TUID)))
Local2 = ((Local0 << 0x0C) + (Local1 << 0x0F))
If (CondRefOf (\_SB.PC01))
{
Local3 = (\_SB.PC00.GPCB () + 0x10000000)
Local3 += Local2
}
Else
{
Local3 = (\_SB.PC00.GPCB () + Local2)
}
ADBG (Concatenate ("PCIe MMIO Address", ToHexString (Local3)))
Return (Local3)
}
OperationRegion (PXCS, SystemMemory, BASE (), 0x0800)
Field (PXCS, AnyAcc, NoLock, Preserve)
{
VDID, 32,
Offset (0x50),
L0SE, 1,
, 3,
LDIS, 1,
Offset (0x51),
Offset (0x52),
, 13,
LASX, 1,
Offset (0x5A),
ABPX, 1,
, 2,
PDCX, 1,
, 2,
PDSX, 1,
Offset (0x5B),
DLSC, 1,
Offset (0x60),
Offset (0x62),
PSPX, 1,
Offset (0xA4),
D3HT, 2,
Offset (0xD8),
, 30,
HPEX, 1,
PMEX, 1,
Offset (0xE2),
, 2,
L23E, 1,
L23R, 1,
Offset (0x420),
, 30,
DPGE, 1,
Offset (0x5BC),
, 3,
RPER, 1,
RPFE, 1
}
Field (PXCS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0xDC),
, 30,
HPSX, 1,
PMSX, 1
}
Name (LTRV, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Name (OPTS, Buffer (0x02)
{
0x00, 0x00 // ..
})
CreateBitField (OPTS, Zero, FUN0)
CreateBitField (OPTS, 0x05, FUN5)
CreateBitField (OPTS, 0x06, FUN6)
CreateBitField (OPTS, 0x08, FUN8)
CreateBitField (OPTS, 0x09, FUN9)
FUN0 = One
FUN5 = IORB /* \IORB */
If ((LTEN == One))
{
FUN6 = One
}
If ((Arg1 >= 0x02))
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
FUN8 = One
FUN9 = One
}
}
}
}
ADBG (Concatenate ("TBT RP OPTS -", ToHexString (OPTS)))
Return (OPTS) /* \_SB_.PC00.TRP3._DSM.OPTS */
}
Case (0x05)
{
If ((Arg1 >= One))
{
Return (One)
}
}
Case (0x06)
{
If ((Arg1 >= 0x02))
{
LTRV [Zero] = ((LMSL >> 0x0A) & 0x07)
LTRV [One] = (LMSL & 0x03FF)
LTRV [0x02] = ((LNSL >> 0x0A) & 0x07)
LTRV [0x03] = (LNSL & 0x03FF)
Return (LTRV) /* \_SB_.PC00.TRP3.LTRV */
}
}
Case (0x08)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (One)
}
}
}
}
Case (0x09)
{
If (CondRefOf (ECR1))
{
If ((ECR1 == One))
{
If ((Arg1 >= 0x03))
{
Return (Package (0x05)
{
0xC350,
Ones,
Ones,
0xC350,
Ones
})
}
}
}
}
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Device (PXSX)
{
Name (_ADR, Zero) // _ADR: Address
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x69, 0x04))
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
ADBG (Concatenate ("TCSS RP _DSW TUID -", ToHexString (TUID)))
ADBG (Concatenate ("Arg0 -", ToHexString (Arg0)))
ADBG (Concatenate ("Arg1 -", ToHexString (Arg1)))
\_SB.PC00.TDM0.SD3C = Arg1
\_SB.PC00.TDM1.SD3C = Arg1
ADBG (Concatenate ("TDM0 SD3C -", ToHexString (\_SB.PC00.TDM0.SD3C)))
ADBG (Concatenate ("TDM1 SD3C -", ToHexString (\_SB.PC00.TDM1.SD3C)))
C2PM (Arg0, Arg1, Arg2, DCPM)
}
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
If (CondRefOf (DUWS))
{
Return (GPRW (0x69, DUWS))
}
Else
{
Return (GPRW (0x69, 0x04))
}
}
Method (HPEV, 0, Serialized)
{
If (((VDID != 0xFFFFFFFF) && HPSX))
{
ADBG (Concatenate ("HotPlug Event Start for ITBT Port - ", ToHexString (TUID)))
If (((PDCX == One) && (DLSC == One)))
{
PDCX = One
HPSX = One
Notify (^, Zero) // Bus Check
}
Else
{
HPSX = One
}
ADBG (Concatenate ("HotPlug Event End for ITBT Port - ", ToHexString (TUID)))
}
}
Name (STAT, One)
Method (D3CX, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdExit Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
ADBG (Concatenate ("VDID -", ToHexString (VDID)))
If ((STAT == One))
{
Return (Zero)
}
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = Zero
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = Zero
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
L23R = One
Local0 = Zero
Local1 = L23R /* \_SB_.PC00.TRP3.L23R */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23R /* \_SB_.PC00.TRP3.L23R */
}
ADBG (Concatenate ("L23R -", ToHexString (L23R)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = One
Local0 = Zero
Local1 = LASX /* \_SB_.PC00.TRP3.LASX */
While ((Local1 == Zero))
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = LASX /* \_SB_.PC00.TRP3.LASX */
}
ADBG (Concatenate ("LASX -", ToHexString (LASX)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
ADBG ("TBT RP D3ColdExit End")
}
Method (D3CE, 0, Serialized)
{
ADBG (Concatenate ("TBT RP D3ColdEntry Start TUID -", ToHexString (TUID)))
ADBG (Concatenate ("RP STAT -", ToHexString (STAT)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
If ((STAT == Zero))
{
Return (Zero)
}
L23E = One
Local0 = Zero
Local1 = L23E /* \_SB_.PC00.TRP3.L23E */
While (Local1)
{
If ((Local0 > 0x14))
{
Break
}
Sleep (0x05)
Local0++
Local1 = L23E /* \_SB_.PC00.TRP3.L23E */
}
ADBG (Concatenate ("L23E -", ToHexString (L23E)))
ADBG (Concatenate ("Loop -", ToHexString (Local0)))
STAT = Zero
ADBG (Concatenate ("Original RPFE -", ToHexString (RPFE)))
RPFE = One
ADBG (Concatenate ("RPFE -", ToHexString (RPFE)))
ADBG (Concatenate ("Original RPER -", ToHexString (RPER)))
RPER = One
ADBG (Concatenate ("RPER -", ToHexString (RPER)))
ADBG (Concatenate ("TBT RP D3ColdEntry End TUID -", ToHexString (TUID)))
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG (Concatenate ("TBT _PS0 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
HPEV ()
If ((HPEX == One))
{
ADBG ("Disable Hot Plug SCI")
HPEX = Zero
}
HPME ()
If ((PMEX == One))
{
ADBG ("Disable PME SCI")
PMEX = Zero
}
Sleep (0x64)
If (((TUID == Zero) || (TUID == One)))
{
If ((\_SB.PC00.TDM0.WACT == One))
{
\_SB.PC00.TDM0.WACT = 0x02
\_SB.PC00.TDM0.WFCC (ITCT)
\_SB.PC00.TDM0.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM0.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM0.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
}
ElseIf ((\_SB.PC00.TDM1.WACT == One))
{
\_SB.PC00.TDM1.WACT = 0x02
\_SB.PC00.TDM1.WFCC (ITCT)
\_SB.PC00.TDM1.WACT = Zero
}
ElseIf ((\_SB.PC00.TDM1.WACT == 0x02))
{
ADBG ("Wait until other _PS0 get response")
While ((\_SB.PC00.TDM1.WACT != Zero))
{
Sleep (0x05)
}
ADBG ("Other _PS0 got response")
}
ADBG (Concatenate ("TBT _PS0 End RP ", ToHexString (TUID)))
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG (Concatenate ("TBT _PS3 Start RP ", ToHexString (TUID)))
ADBG (Concatenate ("TBT RP VDID -", ToHexString (VDID)))
CHKH ()
If ((HPEX == Zero))
{
ADBG ("Enable Hot Plug SCI")
HPEX = One
HPEV ()
}
If ((PMEX == Zero))
{
ADBG ("Enable PME SCI")
PMEX = One
HPME ()
}
ADBG (Concatenate ("TBT _PS3 End RP ", ToHexString (TUID)))
}
Method (CHKH, 0, NotSerialized)
{
If ((PDCX == One))
{
If ((DLSC == Zero))
{
PDCX = One
}
}
}
Method (_DSD, 0, NotSerialized) // _DSD: Device-Specific Data
{
ADBG ("TBT RP _DSD")
Return (Package (0x04)
{
ToUUID ("6211e2c0-58a3-4af3-90e1-927a4e0c55a4"),
Package (0x01)
{
Package (0x02)
{
"HotPlugSupportInD3",
One
}
},
ToUUID ("efcc06cc-73ac-4bc3-bff0-76143807c389"),
Package (0x02)
{
Package (0x02)
{
"ExternalFacingPort",
One
},
Package (0x02)
{
"UID",
TUID
}
}
})
}
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (ITRT)
{
Return (0x04)
}
Else
{
Return (0x03)
}
}
If (ITRT)
{
Method (_PR0, 0, NotSerialized) // _PR0: Power Resources for D0
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
If (TRTD)
{
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT0
})
}
Else
{
Return (Package (0x02)
{
\_SB.PC00.D3C,
\_SB.PC00.TBT1
})
}
}
If (((TUID == Zero) || (TUID == One)))
{
Return (Package (0x01)
{
\_SB.PC00.TBT0
})
}
Return (Package (0x01)
{
\_SB.PC00.TBT1
})
}
}
Method (HPME, 0, Serialized)
{
ADBG ("TBT HPME")
If (((VDID != 0xFFFFFFFF) && (PMSX == One)))
{
ADBG ("TBT RP exists")
Notify (PXSX, 0x02) // Device Wake
PMSX = One
PSPX = One
Return (One)
}
Return (Zero)
}
Name (PD01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x0A
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x0B
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x0B
}
})
Name (AR01, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (CondRefOf (PICM))
{
If (PICM)
{
Return (AR01) /* \_SB_.PC00.TRP3.AR01 */
}
}
Return (PD01) /* \_SB_.PC00.TRP3.PD01 */
}
}
}
}
Scope (\_SB)
{
Method (TCWK, 1, NotSerialized)
{
If (((Arg0 == 0x03) || (Arg0 == 0x04)))
{
If (CondRefOf (\_SB.PC01))
{
If ((\_SB.PC01.TRP0.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC01.TRP0, Zero) // Bus Check
}
If ((\_SB.PC01.TRP1.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC01.TRP1, Zero) // Bus Check
}
If ((\_SB.PC01.TRP2.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC01.TRP2, Zero) // Bus Check
}
If ((\_SB.PC01.TRP3.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC01.TRP3, Zero) // Bus Check
}
}
Else
{
If ((\_SB.PC00.TRP0.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC00.TRP0, Zero) // Bus Check
}
If ((\_SB.PC00.TRP1.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC00.TRP1, Zero) // Bus Check
}
If ((\_SB.PC00.TRP2.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC00.TRP2, Zero) // Bus Check
}
If ((\_SB.PC00.TRP3.VDID != 0xFFFFFFFF))
{
Notify (\_SB.PC00.TRP3, Zero) // Bus Check
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment