Haswell DSDT excerpt:
Scope (_SB.PCI0.XHC.RHUB.HS01)
{
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
If (!PRTE (_ADR))
{
Return (UPCN) /* \_SB_.PCI0.XHC_.RHUB.UPCN */
}
Return (UPC3) /* \_SB_.PCI0.XHC_.RHUB.UPC3 */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
If (!PRTE (_ADR))
{
Return (PLDN) /* \_SB_.PCI0.XHC_.RHUB.PLDN */
}
Return (PLD1) /* \_SB_.PCI0.XHC_.RHUB.PLD1 */
}
}
_PLD()
calls PRTE(_ADR)
to determine if the port should be enabled.
Method (PRTE, 1, Serialized)
{
Name (_T_2, Zero) // _T_x: Emitted by ASL Compiler
Name (_T_1, Zero) // _T_x: Emitted by ASL Compiler
Name (_T_0, Zero) // _T_x: Emitted by ASL Compiler
If ((Arg0 <= XHPC))
{
If ((PCHV () == LPTH))
{
While (One)
{
_T_0 = Arg0
If ((_T_0 == One))
{
Return ((PR2 & One))
}
ElseIf ((_T_0 == 0x02))
{
Return ((PR2 & 0x02))
}
ElseIf ((_T_0 == 0x03))
{
Return ((PR2 & 0x04))
}
ElseIf ((_T_0 == 0x04))
{
Return ((PR2 & 0x08))
}
ElseIf ((_T_0 == 0x05))
{
Return ((PR2 & 0x0100))
}
ElseIf ((_T_0 == 0x06))
{
Return ((PR2 & 0x0200))
}
ElseIf ((_T_0 == 0x07))
{
Return ((PR2 & 0x0400))
}
ElseIf ((_T_0 == 0x08))
{
Return ((PR2 & 0x0800))
}
ElseIf ((_T_0 == 0x09))
{
Return ((PR2 & 0x10))
}
ElseIf ((_T_0 == 0x0A))
{
Return ((PR2 & 0x20))
}
ElseIf ((_T_0 == 0x0B))
{
Return ((PR2 & 0x1000))
}
ElseIf ((_T_0 == 0x0C))
{
Return ((PR2 & 0x2000))
}
ElseIf ((_T_0 == 0x0D))
{
Return ((PR2 & 0x40))
}
ElseIf ((_T_0 == 0x0E))
{
Return ((PR2 & 0x80))
}
Else
{
Return (Zero)
}
Break
}
}
Else
{
While (One)
{
_T_1 = Arg0
If ((_T_1 == One))
{
Return ((PR2 & One))
}
ElseIf ((_T_1 == 0x02))
{
Return ((PR2 & 0x02))
}
ElseIf ((_T_1 == 0x03))
{
Return ((PR2 & 0x04))
}
ElseIf ((_T_1 == 0x04))
{
Return ((PR2 & 0x08))
}
ElseIf ((_T_1 == 0x05))
{
Return ((PR2 & 0x10))
}
ElseIf ((_T_1 == 0x06))
{
Return ((PR2 & 0x20))
}
ElseIf ((_T_1 == 0x07))
{
Return ((PR2 & 0x40))
}
ElseIf ((_T_1 == 0x08))
{
Return ((PR2 & 0x80))
}
ElseIf ((_T_1 == 0x09))
{
Return ((PR2 & 0x0100))
}
ElseIf ((_T_1 == 0x0A))
{
Return ((PR2 & 0x0200))
}
Else
{
Return (Zero)
}
Break
}
}
}
If (((Arg0 == (XHPC + One)) && (XRPC == One)))
{
If ((PCHV () == LPTH))
{
Return ((PR2 & 0x4000))
}
If ((PCHV () == LPTL))
{
Return ((PR2 & 0x0100))
}
If ((PCHV () == WPTL))
{
Return ((PR2 & 0x0400))
}
}
If ((Arg0 >= XSPA))
{
Local0 = (Arg0 - XSPA) /* \XSPA */
While (One)
{
_T_2 = Local0
If ((_T_2 == Zero))
{
Return ((PR3 & One))
}
ElseIf ((_T_2 == One))
{
Return ((PR3 & 0x02))
}
ElseIf ((_T_2 == 0x02))
{
Return ((PR3 & 0x04))
}
ElseIf ((_T_2 == 0x03))
{
Return ((PR3 & 0x08))
}
ElseIf ((_T_2 == 0x04))
{
Return ((PR3 & 0x10))
}
ElseIf ((_T_2 == 0x05))
{
Return ((PR3 & 0x20))
}
Else
{
Return (Zero)
}
Break
}
}
Return (Zero)
}