/* * This file is part of the coreboot project. * * Copyright (C) 2007-2009 coresystems GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; version 2 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ OperationRegion (PRR0, PCI_Config, 0x00, 0x100) Field (PRR0, AnyAcc, NoLock, Preserve) { Offset(0x60), PIRA, 8, PIRB, 8, PIRC, 8, PIRD, 8, Offset(0x68), 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, Save in buffer // ShiftLeft (Local0,And (PIRA,0x0F),IRQW) // Save in buffer Return (BUF0) // Return Buf0 } // End of _CRS method Name (_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0,And (PIRB,0x0F),IRQW) // Save in buffer Return (BUF0) // Return Buf0 } // End of _CRS method Name (_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0,And (PIRC,0x0F),IRQW) Return (BUF0) } // End of _CRS method Name (_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0, And (PIRD,0x0F), IRQW) Return (BUF0) // Return Buf0 } // End of _CRS method Name (_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0, And (PIRE,0x0F), IRQW) Return (BUF0) // Return Buf0 } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0, And (PIRF, 0x0F),IRQW) Return (BUF0) } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0,And(PIRG,0x0F),IRQW) Return (BUF0) } // End of _CRS method Name (_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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, Save in buffer // ShiftLeft (Local0,And(PIRH,0x0F),IRQW) Return (BUF0) } // End of _CRS method Name(_PRS, ResourceTemplate() {IRQ(Level,ActiveLow,Shared){3,4,5,6,7,9,10,11,12,14,15}}) 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) } }