/** @file Copyright (c) 2013-2015 Intel Corporation. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which 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. **/ // Interrupts can be DEB8=all except 13,8,6,2,1,0 #ifndef PCIIRQ_ASI #define PCIIRQ_ASI OperationRegion(PRR0, PCI_Config, 0x60, 0x08) Field(PRR0, ANYACC, NOLOCK, PRESERVE) { PIRA, 8, PIRB, 8, PIRC, 8, PIRD, 8, PIRE, 8, PIRF, 8, PIRG, 8, PIRH, 8 } Device(LNKA) // PCI IRQ link A { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 1) Method(_STA,0,NotSerialized) { If(And(PIRA, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRA, 0x80, PIRA) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRA, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRA,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0) // Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } store(Local0, PIRA) } // End of _SRS Method } Device(LNKB) // PCI IRQ link B { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 2) Method(_STA,0,NotSerialized) { If(And(PIRB, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRB, 0x80,PIRB) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRB, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRB,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0) // Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } Store(Local0, PIRB) } // End of _SRS Method } Device(LNKC) // PCI IRQ link C { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 3) Method(_STA,0,NotSerialized) { If(And(PIRC, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRC, 0x80,PIRC) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRC, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRC,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0) // Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } Store(Local0, PIRC) } // End of _SRS Method } Device(LNKD) // PCI IRQ link D { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 4) Method(_STA,0,NotSerialized) { If(And(PIRD, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRD, 0x80,PIRD) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRD, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRD,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0)// Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } Store(Local0, PIRD) } // End of _SRS Method } Device(LNKE) // PCI IRQ link E { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 5) Method(_STA,0,NotSerialized) { If(And(PIRE, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRE, 0x80, PIRE) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRE, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRE,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0) // Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } store(Local0, PIRE) } // End of _SRS Method } Device(LNKF) // PCI IRQ link F { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 6) Method(_STA,0,NotSerialized) { If(And(PIRF, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRB, 0x80,PIRF) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRF, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRF,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0) // Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } Store(Local0, PIRF) } // End of _SRS Method } Device(LNKG) // PCI IRQ link G { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 7) Method(_STA,0,NotSerialized) { If(And(PIRG, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRG, 0x80,PIRG) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRG, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRG,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0) // Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } Store(Local0, PIRG) } // End of _SRS Method } Device(LNKH) // PCI IRQ link H { Name(_HID,EISAID("PNP0C0F")) Name(_UID, 8) Method(_STA,0,NotSerialized) { If(And(PIRH, 0x80)) { Return(0x9) } Else { Return(0xB) } // Don't display } Method(_DIS,0,NotSerialized) { Or(PIRH, 0x80,PIRH) } Method(_CRS,0,Serialized) { Name(BUF0, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){0}}) // Define references to buffer elements CreateWordField (BUF0, 0x01, IRQW) // IRQ low // Write current settings into IRQ descriptor If (And(PIRH, 0x80)) { Store(Zero, Local0) } Else { Store(One,Local0) } // Shift 1 by value in register 70 ShiftLeft(Local0,And(PIRH,0x0F),IRQW) // Save in buffer Return(BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}}) Method(_SRS,1,NotSerialized) { CreateWordField (ARG0, 0x01, IRQW) // IRQ low FindSetRightBit(IRQW,Local0)// Set IRQ If (LNotEqual(IRQW,Zero)) { And(Local0, 0x7F,Local0) Decrement(Local0) } Else { Or(Local0, 0x80,Local0) } Store(Local0, PIRH) } // End of _SRS Method } #endif