/** @file Copyright (c) 2018, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License that accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php. THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ // Use this information when determining the Possible IRQs that can be // used in a given system. // // The following IRQs are always in use by legacy devices: // 0 = System Timer // 2 = 8259 PIC // 8 = RTC // 9 = SCI Interrupt (It may be used, we choose not to) // 13 = Co-processor Error // // The following may be in use by legacy devices: // 1 = If using PS/2 Keyboard // 3 = If COMx Port Enabled and IRQ = 3 // 4 = If COMx Port Enabled and IRQ = 4 // 5 = If LPT Port Enabled and IRQ = 5 // 6 = If FDC Enabled // 7 = If LPT Port Enabled and IRQ = 7 // 12 = If using PS/2 Mouse // 14 = Primary IDE (If populated and in Compatibility Mode) // 15 = Secondary IDE (If populated and in Compatibility Mode) // // The following will never be in use by legacy devices: // 10 = Assign to PARC, PCRC, PERC, PGRC // 11 = Assign to PBRC, PDRC, PFRC, PHRC Device(LNKA) // PARC Routing Resource { Name(_HID,EISAID("PNP0C0F")) // PCI Interrupt Link Device Name(_UID,1) // Unique to other Link Devices // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PARC,0x80,\_SB.PARC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSA) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLA,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLA,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PARC,0x0F),IRQ0) Return(RTLA) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PARC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PARC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKB) // PBRC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,2) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PBRC,0x80,\_SB.PBRC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSB) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLB,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLB,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PBRC,0x0F),IRQ0) Return(RTLB) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in. CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it, FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PBRC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PBRC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKC) // PCRC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,3) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PCRC,0x80,\_SB.PCRC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSC) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLC,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLC,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PCRC,0x0F),IRQ0) Return(RTLC) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in. CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it, FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PCRC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PCRC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKD) // PDRC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,4) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PDRC,0x80,\_SB.PDRC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSD) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLD,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLD,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PDRC,0x0F),IRQ0) Return(RTLD) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in. CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it, FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PDRC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PDRC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKE) // PERC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,5) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PERC,0x80,\_SB.PERC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSE) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLE,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLE,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PERC,0x0F),IRQ0) Return(RTLE) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PERC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PERC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKF) // PFRC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,6) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PFRC,0x80,\_SB.PFRC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSF) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLF,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLF,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PFRC,0x0F),IRQ0) Return(RTLF) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in. CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it, FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PFRC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PFRC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKG) // PGRC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,7) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PGRC,0x80,\_SB.PGRC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSG) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLG,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLG,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PGRC,0x0F),IRQ0) Return(RTLG) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in. CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it, FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PGRC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PGRC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } } Device(LNKH) // PHRC Routing Resource { Name(_HID,EISAID("PNP0C0F")) Name(_UID,8) // Disable the PCI IRQ. Method(_DIS,0,Serialized) { Or(\_SB.PHRC,0x80,\_SB.PHRC) } // Possible IRQ Resource Setting. Method (_PRS, 0, Serialized) { return (PRSH) } // Current IRQ Resource Setting. Method(_CRS,0,Serialized) { Name(RTLH,ResourceTemplate() { IRQ(Level,ActiveLow,Shared) {} }) // Point to specific byte. CreateWordField(RTLH,1,IRQ0) // Zero out IRQ mask bits 0-15 Store(Zero,IRQ0) ShiftLeft(1,And(\_SB.PHRC,0x0F),IRQ0) Return(RTLH) } // Set IRQ Resource Setting. Method(_SRS,1,Serialized) { // Point to the specific byte passed in. CreateWordField(Arg0,1,IRQ0) // Determine the IRQ bit to set and store it, FindSetRightBit(IRQ0,Local0) Decrement(Local0) Store(Local0,\_SB.PHRC) } // PCI IRQ Status. Method(_STA,0,Serialized) { If(And(\_SB.PHRC,0x80)) { Return(0x0009) } Else { Return(0x000B) } } }