/* SPDX-License-Identifier: GPL-2.0-only */

Device (LNKA)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 1)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTA = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 10, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLA, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLA, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTA */
		IRQ0 = 1 << (PRTA & 0x0f)

		Return (RTLA)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTA = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTA & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKB)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 2)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTB = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 11, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLB, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLB, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTB */
		IRQ0 = 1 << (PRTB & 0x0f)

		Return (RTLB)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTB = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTB & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKC)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 3)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTC = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 10, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLC, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLC, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTC */
		IRQ0 = 1 << (PRTC & 0x0f)

		Return (RTLC)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTC = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTC & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKD)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 4)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTD = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 11, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLD, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLD, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTD */
		IRQ0 = 1 << (PRTD & 0x0f)

		Return (RTLD)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTD = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTD & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKE)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 5)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTE = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 10, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLE, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLE, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTE */
		IRQ0 = 1 << (PRTE & 0x0f)

		Return (RTLE)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTE = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTE & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKF)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 6)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTF = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 11, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLF, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLF, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTF */
		IRQ0 = 1 << (PRTF & 0x0f)

		Return (RTLF)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTF = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTF & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKG)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 7)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTG = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 10, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLG, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLG, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTG */
		IRQ0 = 1 << (PRTG & 0x0f)

		Return (RTLG)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTG = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTG & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}

Device (LNKH)
{
	Name (_HID, EISAID("PNP0C0F"))
	Name (_UID, 8)

	/* Disable method */
	Method (_DIS, 0, Serialized)
	{
		PRTH = 0x80
	}

	/* Possible Resource Settings for this Link */
	Name (_PRS, ResourceTemplate()
	{
		IRQ(Level, ActiveLow, Shared)
			{ 3, 4, 5, 6, 7, 11, 12, 14, 15 }
	})

	/* Current Resource Settings for this link */
	Method (_CRS, 0, Serialized)
	{
		Name (RTLH, ResourceTemplate()
		{
			IRQ(Level, ActiveLow, Shared) {}
		})
		CreateWordField(RTLH, 1, IRQ0)

		/* Clear the WordField */
		IRQ0 = 0

		/* Set the bit from PRTH */
		IRQ0 = 1 << (PRTH & 0x0f)

		Return (RTLH)
	}

	/* Set Resource Setting for this IRQ link */
	Method (_SRS, 1, Serialized)
	{
		CreateWordField(Arg0, 1, IRQ0)

		/* Which bit is set? */
		FindSetRightBit(IRQ0, Local0)

		Local0--
		PRTH = Local0
	}

	/* Status */
	Method (_STA, 0, Serialized)
	{
		If (PRTH & 0x80) {
			Return (0x9)
		} Else {
			Return (0xb)
		}
	}
}
