Home | History | Annotate | Download | only in Dsdt
      1 /** @file
      2 
      3 Copyright (c) 2013-2015 Intel Corporation.
      4 
      5 This program and the accompanying materials
      6 are licensed and made available under the terms and conditions of the BSD License
      7 which accompanies this distribution.  The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 
     16 // Interrupts can be DEB8=all except 13,8,6,2,1,0
     17 
     18 #ifndef PCIIRQ_ASI
     19 #define PCIIRQ_ASI
     20 
     21 OperationRegion(PRR0, PCI_Config, 0x60, 0x08)
     22 Field(PRR0, ANYACC, NOLOCK, PRESERVE)
     23 {
     24     PIRA, 8,
     25     PIRB, 8,
     26     PIRC, 8,
     27     PIRD, 8,
     28     PIRE, 8,
     29     PIRF, 8,
     30     PIRG, 8,
     31     PIRH, 8
     32 }
     33 
     34 Device(LNKA)            // PCI IRQ link A
     35 {
     36     Name(_HID,EISAID("PNP0C0F"))
     37 
     38     Name(_UID, 1)
     39 
     40     Method(_STA,0,NotSerialized)
     41     {
     42         If(And(PIRA, 0x80))
     43         {
     44           Return(0x9)
     45         }
     46         Else
     47         {
     48           Return(0xB)
     49         }    // Don't display
     50     }
     51 
     52     Method(_DIS,0,NotSerialized)
     53     {
     54         Or(PIRA, 0x80, PIRA)
     55     }
     56 
     57     Method(_CRS,0,Serialized)
     58     {
     59         Name(BUF0,
     60             ResourceTemplate()
     61             {IRQ(Level,ActiveLow,Shared){0}})
     62 
     63                                 // Define references to buffer elements
     64         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
     65                                 // Write current settings into IRQ descriptor
     66         If (And(PIRA, 0x80))
     67         {
     68             Store(Zero, Local0)
     69         }
     70         Else
     71         {
     72             Store(One,Local0)
     73         }
     74                                                     // Shift 1 by value in register 70
     75         ShiftLeft(Local0,And(PIRA,0x0F),IRQW)       // Save in buffer
     76         Return(BUF0)                                // Return Buf0
     77     }                                               // End of _CRS method
     78 
     79     Name(_PRS,
     80         ResourceTemplate()
     81         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
     82 
     83     Method(_SRS,1,NotSerialized)
     84     {
     85         CreateWordField (ARG0, 0x01, IRQW)  // IRQ low
     86 
     87         FindSetRightBit(IRQW,Local0)          // Set IRQ
     88         If (LNotEqual(IRQW,Zero))
     89         {
     90             And(Local0, 0x7F,Local0)
     91             Decrement(Local0)
     92         }
     93         Else
     94         {
     95             Or(Local0, 0x80,Local0)
     96         }
     97         store(Local0, PIRA)
     98     }                                                  // End of _SRS Method
     99 }
    100 
    101 Device(LNKB)            // PCI IRQ link B
    102 {
    103     Name(_HID,EISAID("PNP0C0F"))
    104 
    105     Name(_UID, 2)
    106 
    107     Method(_STA,0,NotSerialized)
    108     {
    109         If(And(PIRB, 0x80))
    110         {
    111           Return(0x9)
    112         }
    113         Else
    114         {
    115           Return(0xB)
    116         }    // Don't display
    117     }
    118 
    119     Method(_DIS,0,NotSerialized)
    120     {
    121         Or(PIRB, 0x80,PIRB)
    122     }
    123 
    124     Method(_CRS,0,Serialized)
    125     {
    126         Name(BUF0,
    127             ResourceTemplate()
    128             {IRQ(Level,ActiveLow,Shared){0}})
    129                                             // Define references to buffer elements
    130         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    131                                             // Write current settings into IRQ descriptor
    132         If (And(PIRB, 0x80))
    133         {
    134             Store(Zero, Local0)
    135         }
    136         Else
    137         {
    138                 Store(One,Local0)
    139         }
    140                                                // Shift 1 by value in register 70
    141         ShiftLeft(Local0,And(PIRB,0x0F),IRQW)  // Save in buffer
    142         Return(BUF0)                           // Return Buf0
    143     }                                          // End of _CRS method
    144 
    145     Name(_PRS,
    146         ResourceTemplate()
    147         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    148 
    149     Method(_SRS,1,NotSerialized)
    150     {
    151         CreateWordField (ARG0, 0x01, IRQW)      // IRQ low
    152 
    153         FindSetRightBit(IRQW,Local0)            // Set IRQ
    154         If (LNotEqual(IRQW,Zero))
    155         {
    156             And(Local0, 0x7F,Local0)
    157             Decrement(Local0)
    158         }
    159         Else
    160         {
    161             Or(Local0, 0x80,Local0)
    162         }
    163         Store(Local0, PIRB)
    164     }                                           // End of _SRS Method
    165 }
    166 
    167 Device(LNKC)                                    // PCI IRQ link C
    168 {
    169     Name(_HID,EISAID("PNP0C0F"))
    170 
    171     Name(_UID, 3)
    172 
    173     Method(_STA,0,NotSerialized)
    174     {
    175         If(And(PIRC, 0x80))
    176         {
    177           Return(0x9)
    178         }
    179         Else
    180         {
    181           Return(0xB)
    182         }    // Don't display
    183     }
    184 
    185     Method(_DIS,0,NotSerialized)
    186     {
    187         Or(PIRC, 0x80,PIRC)
    188     }
    189 
    190     Method(_CRS,0,Serialized)
    191     {
    192         Name(BUF0,
    193             ResourceTemplate()
    194             {IRQ(Level,ActiveLow,Shared){0}})
    195                                             // Define references to buffer elements
    196         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    197                                             // Write current settings into IRQ descriptor
    198         If (And(PIRC, 0x80))
    199         {
    200             Store(Zero, Local0)
    201         }
    202         Else
    203         {
    204             Store(One,Local0)
    205         }                                      // Shift 1 by value in register 70
    206         ShiftLeft(Local0,And(PIRC,0x0F),IRQW)  // Save in buffer
    207         Return(BUF0)                           // Return Buf0
    208     }                                          // End of _CRS method
    209 
    210     Name(_PRS,
    211         ResourceTemplate()
    212         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    213 
    214     Method(_SRS,1,NotSerialized)
    215     {
    216         CreateWordField (ARG0, 0x01, IRQW)  // IRQ low
    217 
    218         FindSetRightBit(IRQW,Local0)        // Set IRQ
    219         If (LNotEqual(IRQW,Zero))
    220         {
    221             And(Local0, 0x7F,Local0)
    222             Decrement(Local0)
    223         }
    224         Else {
    225             Or(Local0, 0x80,Local0)
    226         }
    227         Store(Local0, PIRC)
    228     }                                               // End of _SRS Method
    229 }
    230 
    231 Device(LNKD)                                        // PCI IRQ link D
    232 {
    233     Name(_HID,EISAID("PNP0C0F"))
    234 
    235     Name(_UID, 4)
    236 
    237     Method(_STA,0,NotSerialized)
    238     {
    239         If(And(PIRD, 0x80))
    240         {
    241           Return(0x9)
    242         }
    243         Else
    244         {
    245           Return(0xB)
    246         }    // Don't display
    247     }
    248 
    249     Method(_DIS,0,NotSerialized)
    250     {
    251         Or(PIRD, 0x80,PIRD)
    252     }
    253 
    254     Method(_CRS,0,Serialized)
    255     {
    256         Name(BUF0,
    257             ResourceTemplate()
    258             {IRQ(Level,ActiveLow,Shared){0}})
    259         // Define references to buffer elements
    260         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    261         // Write current settings into IRQ descriptor
    262         If (And(PIRD, 0x80))
    263         {
    264             Store(Zero, Local0)
    265         }
    266         Else
    267         {
    268             Store(One,Local0)
    269         }  // Shift 1 by value in register 70
    270         ShiftLeft(Local0,And(PIRD,0x0F),IRQW)  // Save in buffer
    271         Return(BUF0)        // Return Buf0
    272     }                  // End of _CRS method
    273 
    274     Name(_PRS,
    275         ResourceTemplate()
    276         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    277 
    278     Method(_SRS,1,NotSerialized)
    279     {
    280         CreateWordField (ARG0, 0x01, IRQW)  // IRQ low
    281 
    282         FindSetRightBit(IRQW,Local0)// Set IRQ
    283         If (LNotEqual(IRQW,Zero))
    284         {
    285             And(Local0, 0x7F,Local0)
    286             Decrement(Local0)
    287         }
    288         Else
    289         {
    290             Or(Local0, 0x80,Local0)
    291         }
    292         Store(Local0, PIRD)
    293     }                  // End of _SRS Method
    294 }
    295 
    296 Device(LNKE)           // PCI IRQ link E
    297 {
    298     Name(_HID,EISAID("PNP0C0F"))
    299 
    300     Name(_UID, 5)
    301 
    302     Method(_STA,0,NotSerialized)
    303     {
    304         If(And(PIRE, 0x80))
    305         {
    306           Return(0x9)
    307         }
    308         Else
    309         {
    310           Return(0xB)
    311         }    // Don't display
    312     }
    313 
    314     Method(_DIS,0,NotSerialized)
    315     {
    316         Or(PIRE, 0x80, PIRE)
    317     }
    318 
    319     Method(_CRS,0,Serialized)
    320     {
    321         Name(BUF0,
    322             ResourceTemplate()
    323             {IRQ(Level,ActiveLow,Shared){0}})
    324 
    325                                 // Define references to buffer elements
    326         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    327                                 // Write current settings into IRQ descriptor
    328         If (And(PIRE, 0x80))
    329         {
    330             Store(Zero, Local0)
    331         }
    332         Else
    333         {
    334             Store(One,Local0)
    335         }
    336                                                     // Shift 1 by value in register 70
    337         ShiftLeft(Local0,And(PIRE,0x0F),IRQW)       // Save in buffer
    338         Return(BUF0)                                // Return Buf0
    339     }                                               // End of _CRS method
    340 
    341     Name(_PRS,
    342         ResourceTemplate()
    343         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    344 
    345     Method(_SRS,1,NotSerialized)
    346     {
    347         CreateWordField (ARG0, 0x01, IRQW)  // IRQ low
    348 
    349         FindSetRightBit(IRQW,Local0)          // Set IRQ
    350         If (LNotEqual(IRQW,Zero))
    351         {
    352             And(Local0, 0x7F,Local0)
    353             Decrement(Local0)
    354         }
    355         Else
    356         {
    357             Or(Local0, 0x80,Local0)
    358         }
    359         store(Local0, PIRE)
    360     }                                                  // End of _SRS Method
    361 }
    362 
    363 Device(LNKF)            // PCI IRQ link F
    364 {
    365     Name(_HID,EISAID("PNP0C0F"))
    366 
    367     Name(_UID, 6)
    368 
    369     Method(_STA,0,NotSerialized)
    370     {
    371         If(And(PIRF, 0x80))
    372         {
    373           Return(0x9)
    374         }
    375         Else
    376         {
    377           Return(0xB)
    378         }    // Don't display
    379     }
    380 
    381     Method(_DIS,0,NotSerialized)
    382     {
    383         Or(PIRB, 0x80,PIRF)
    384     }
    385 
    386     Method(_CRS,0,Serialized)
    387     {
    388         Name(BUF0,
    389             ResourceTemplate()
    390             {IRQ(Level,ActiveLow,Shared){0}})
    391                                             // Define references to buffer elements
    392         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    393                                             // Write current settings into IRQ descriptor
    394         If (And(PIRF, 0x80))
    395         {
    396             Store(Zero, Local0)
    397         }
    398         Else
    399         {
    400                 Store(One,Local0)
    401         }
    402                                                // Shift 1 by value in register 70
    403         ShiftLeft(Local0,And(PIRF,0x0F),IRQW)  // Save in buffer
    404         Return(BUF0)                           // Return Buf0
    405     }                                          // End of _CRS method
    406 
    407     Name(_PRS,
    408         ResourceTemplate()
    409         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    410 
    411     Method(_SRS,1,NotSerialized)
    412     {
    413         CreateWordField (ARG0, 0x01, IRQW)      // IRQ low
    414 
    415         FindSetRightBit(IRQW,Local0)            // Set IRQ
    416         If (LNotEqual(IRQW,Zero))
    417         {
    418             And(Local0, 0x7F,Local0)
    419             Decrement(Local0)
    420         }
    421         Else
    422         {
    423             Or(Local0, 0x80,Local0)
    424         }
    425         Store(Local0, PIRF)
    426     }                                                   // End of _SRS Method
    427 }
    428 
    429 Device(LNKG)                                            // PCI IRQ link G
    430 {
    431     Name(_HID,EISAID("PNP0C0F"))
    432 
    433     Name(_UID, 7)
    434 
    435     Method(_STA,0,NotSerialized)
    436     {
    437         If(And(PIRG, 0x80))
    438         {
    439           Return(0x9)
    440         }
    441         Else
    442         {
    443           Return(0xB)
    444         }    // Don't display
    445     }
    446 
    447     Method(_DIS,0,NotSerialized)
    448     {
    449         Or(PIRG, 0x80,PIRG)
    450     }
    451 
    452     Method(_CRS,0,Serialized)
    453     {
    454         Name(BUF0,
    455             ResourceTemplate()
    456             {IRQ(Level,ActiveLow,Shared){0}})
    457                                             // Define references to buffer elements
    458         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    459                                             // Write current settings into IRQ descriptor
    460         If (And(PIRG, 0x80))
    461         {
    462             Store(Zero, Local0)
    463         }
    464         Else
    465         {
    466             Store(One,Local0)
    467         }                                      // Shift 1 by value in register 70
    468         ShiftLeft(Local0,And(PIRG,0x0F),IRQW)  // Save in buffer
    469         Return(BUF0)                           // Return Buf0
    470     }                                          // End of _CRS method
    471 
    472     Name(_PRS,
    473         ResourceTemplate()
    474         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    475 
    476     Method(_SRS,1,NotSerialized)
    477     {
    478         CreateWordField (ARG0, 0x01, IRQW)  // IRQ low
    479 
    480         FindSetRightBit(IRQW,Local0)          // Set IRQ
    481         If (LNotEqual(IRQW,Zero))
    482         {
    483             And(Local0, 0x7F,Local0)
    484             Decrement(Local0)
    485         }
    486         Else {
    487             Or(Local0, 0x80,Local0)
    488         }
    489         Store(Local0, PIRG)
    490     }                                               // End of _SRS Method
    491 }
    492 
    493 Device(LNKH)                                        // PCI IRQ link H
    494 {
    495     Name(_HID,EISAID("PNP0C0F"))
    496 
    497     Name(_UID, 8)
    498 
    499     Method(_STA,0,NotSerialized)
    500     {
    501         If(And(PIRH, 0x80))
    502         {
    503           Return(0x9)
    504         }
    505         Else
    506         {
    507           Return(0xB)
    508         }    // Don't display
    509     }
    510 
    511     Method(_DIS,0,NotSerialized)
    512     {
    513         Or(PIRH, 0x80,PIRH)
    514     }
    515 
    516     Method(_CRS,0,Serialized)
    517     {
    518         Name(BUF0,
    519             ResourceTemplate()
    520             {IRQ(Level,ActiveLow,Shared){0}})
    521         // Define references to buffer elements
    522         CreateWordField (BUF0, 0x01, IRQW)  // IRQ low
    523         // Write current settings into IRQ descriptor
    524         If (And(PIRH, 0x80))
    525         {
    526             Store(Zero, Local0)
    527         }
    528         Else
    529         {
    530             Store(One,Local0)
    531         }  // Shift 1 by value in register 70
    532         ShiftLeft(Local0,And(PIRH,0x0F),IRQW)  // Save in buffer
    533         Return(BUF0)   // Return Buf0
    534     }                  // End of _CRS method
    535 
    536     Name(_PRS,
    537         ResourceTemplate()
    538         {IRQ(Level,ActiveLow,Shared){12,11,10,9,7,5,4,3}})
    539 
    540     Method(_SRS,1,NotSerialized)
    541     {
    542         CreateWordField (ARG0, 0x01, IRQW)  // IRQ low
    543 
    544         FindSetRightBit(IRQW,Local0)// Set IRQ
    545         If (LNotEqual(IRQW,Zero))
    546         {
    547             And(Local0, 0x7F,Local0)
    548             Decrement(Local0)
    549         }
    550         Else
    551         {
    552             Or(Local0, 0x80,Local0)
    553         }
    554         Store(Local0, PIRH)
    555     }                  // End of _SRS Method
    556 }
    557 
    558 #endif
    559