/* SPDX-License-Identifier: GPL-2.0-only */ /* * PIRQ routing control is in PCR ITSS region. * * Due to what appears to be an ACPI interpreter bug we do not use * the PCRB() method here as it may not be defined yet because the method * definition depends on the order of the include files in pch.asl. * * https://bugs.acpica.org/show_bug.cgi?id=1201 */ OperationRegion (ITSS, SystemMemory, PCR_ITSS_PIRQA_ROUT + CONFIG_PCR_BASE_ADDRESS + (PID_ITSS << PCR_PORTID_SHIFT), 8) Field (ITSS, ByteAcc, NoLock, Preserve) { PIRA, 8, /* PIRQA Routing Control */ PIRB, 8, /* PIRQB Routing Control */ PIRC, 8, /* PIRQC Routing Control */ PIRD, 8, /* PIRQD Routing Control */ PIRE, 8, /* PIRQE Routing Control */ PIRF, 8, /* PIRQF Routing Control */ PIRG, 8, /* PIRQG Routing Control */ PIRH, 8, /* PIRQH Routing Control */ } Name (IREN, 0x80) /* Interrupt Routing Enable */ Name (IREM, 0x0f) /* Interrupt Routing Mask */ Device (LNKA) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 1) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRA & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRA = Local0 } Method (_STA, 0, Serialized) { If (^^PIRA & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRA |= ^^IREN } } Device (LNKB) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 2) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRB & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRB = Local0 } Method (_STA, 0, Serialized) { If (^^PIRB & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRB |= ^^IREN } } Device (LNKC) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 3) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRC & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRC = Local0 } Method (_STA, 0, Serialized) { If (^^PIRC & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRC |= ^^IREN } } Device (LNKD) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 4) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRD & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRD = Local0 } Method (_STA, 0, Serialized) { If (^^PIRD & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRD |= ^^IREN } } Device (LNKE) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 5) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRE & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRE = Local0 } Method (_STA, 0, Serialized) { If (^^PIRE & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRE |= ^^IREN } } Device (LNKF) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 6) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRF & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRF = Local0 } Method (_STA, 0, Serialized) { If (^^PIRF & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRF |= ^^IREN } } Device (LNKG) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 7) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRG & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRG = Local0 } Method (_STA, 0, Serialized) { If (^^PIRG & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRG |= ^^IREN } } Device (LNKH) { Name (_HID, EISAID ("PNP0C0F")) Name (_UID, 8) Name (_PRS, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) { 3, 4, 5, 6, 10, 11, 12, 14, 15 } }) Method (_CRS, 0, Serialized) { Name (RTLA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared) {} }) CreateWordField (RTLA, 1, IRQ0) IRQ0 = 0 /* Set the bit from PIRQ Routing Register */ IRQ0 = 1 << (^^PIRH & ^^IREM) Return (RTLA) } Method (_SRS, 1, Serialized) { CreateWordField (Arg0, 1, IRQ0) FindSetRightBit (IRQ0, Local0) Local0-- ^^PIRH = Local0 } Method (_STA, 0, Serialized) { If (^^PIRH & ^^IREN) { Return (0x9) } Else { Return (0xb) } } Method (_DIS, 0, Serialized) { ^^PIRH |= ^^IREN } }