1*0d71511aSBin Meng/* 2*0d71511aSBin Meng * Copyright (C) 2007-2009 coresystems GmbH 3*0d71511aSBin Meng * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com> 4*0d71511aSBin Meng * 5*0d71511aSBin Meng * Modified from coreboot src/soc/intel/baytrail/acpi/irqlinks.asl 6*0d71511aSBin Meng * 7*0d71511aSBin Meng * SPDX-License-Identifier: GPL-2.0+ 8*0d71511aSBin Meng */ 9*0d71511aSBin Meng 10*0d71511aSBin Meng/* 11*0d71511aSBin Meng * Intel chipset PIRQ routing control ASL description 12*0d71511aSBin Meng * 13*0d71511aSBin Meng * The programming interface is common to most Intel chipsets. But the PRTx 14*0d71511aSBin Meng * registers may be mapped to different blocks. Some chipsets map them to LPC 15*0d71511aSBin Meng * device (00:1f:00) PCI configuration space (like TunnelCreek, Quark), while 16*0d71511aSBin Meng * some newer Atom SoCs (like BayTrail, Braswell) map them to Intel Legacy 17*0d71511aSBin Meng * Block (ILB) memory space. 18*0d71511aSBin Meng * 19*0d71511aSBin Meng * This file defines 8 PCI IRQ link devices which corresponds to 8 PIRQ lines 20*0d71511aSBin Meng * PIRQ A/B/C/D/E/F/G/H. To incorperate this file, the PRTx registers must be 21*0d71511aSBin Meng * defined somewhere else in the platform's ASL files. 22*0d71511aSBin Meng */ 23*0d71511aSBin Meng 24*0d71511aSBin MengDevice (LNKA) 25*0d71511aSBin Meng{ 26*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 27*0d71511aSBin Meng Name(_UID, 1) 28*0d71511aSBin Meng 29*0d71511aSBin Meng /* Disable method */ 30*0d71511aSBin Meng Method(_DIS, 0, Serialized) 31*0d71511aSBin Meng { 32*0d71511aSBin Meng Store(0x80, PRTA) 33*0d71511aSBin Meng } 34*0d71511aSBin Meng 35*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 36*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 37*0d71511aSBin Meng { 38*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 39*0d71511aSBin Meng }) 40*0d71511aSBin Meng 41*0d71511aSBin Meng /* Current Resource Settings for this link */ 42*0d71511aSBin Meng Method(_CRS, 0, Serialized) 43*0d71511aSBin Meng { 44*0d71511aSBin Meng Name(RTLA, ResourceTemplate() 45*0d71511aSBin Meng { 46*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 47*0d71511aSBin Meng }) 48*0d71511aSBin Meng CreateWordField(RTLA, 1, IRQ0) 49*0d71511aSBin Meng 50*0d71511aSBin Meng /* Clear the WordField */ 51*0d71511aSBin Meng Store(Zero, IRQ0) 52*0d71511aSBin Meng 53*0d71511aSBin Meng /* Set the bit from PRTA */ 54*0d71511aSBin Meng ShiftLeft(1, And(PRTA, 0x0f), IRQ0) 55*0d71511aSBin Meng 56*0d71511aSBin Meng Return (RTLA) 57*0d71511aSBin Meng } 58*0d71511aSBin Meng 59*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 60*0d71511aSBin Meng Method(_SRS, 1, Serialized) 61*0d71511aSBin Meng { 62*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 63*0d71511aSBin Meng 64*0d71511aSBin Meng /* Which bit is set? */ 65*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 66*0d71511aSBin Meng 67*0d71511aSBin Meng Decrement(Local0) 68*0d71511aSBin Meng Store(Local0, PRTA) 69*0d71511aSBin Meng } 70*0d71511aSBin Meng 71*0d71511aSBin Meng /* Status */ 72*0d71511aSBin Meng Method(_STA, 0, Serialized) 73*0d71511aSBin Meng { 74*0d71511aSBin Meng If (And(PRTA, 0x80)) { 75*0d71511aSBin Meng Return (STA_DISABLED) 76*0d71511aSBin Meng } Else { 77*0d71511aSBin Meng Return (STA_INVISIBLE) 78*0d71511aSBin Meng } 79*0d71511aSBin Meng } 80*0d71511aSBin Meng} 81*0d71511aSBin Meng 82*0d71511aSBin MengDevice (LNKB) 83*0d71511aSBin Meng{ 84*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 85*0d71511aSBin Meng Name(_UID, 2) 86*0d71511aSBin Meng 87*0d71511aSBin Meng /* Disable method */ 88*0d71511aSBin Meng Method(_DIS, 0, Serialized) 89*0d71511aSBin Meng { 90*0d71511aSBin Meng Store(0x80, PRTB) 91*0d71511aSBin Meng } 92*0d71511aSBin Meng 93*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 94*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 95*0d71511aSBin Meng { 96*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 97*0d71511aSBin Meng }) 98*0d71511aSBin Meng 99*0d71511aSBin Meng /* Current Resource Settings for this link */ 100*0d71511aSBin Meng Method(_CRS, 0, Serialized) 101*0d71511aSBin Meng { 102*0d71511aSBin Meng Name(RTLB, ResourceTemplate() 103*0d71511aSBin Meng { 104*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 105*0d71511aSBin Meng }) 106*0d71511aSBin Meng CreateWordField(RTLB, 1, IRQ0) 107*0d71511aSBin Meng 108*0d71511aSBin Meng /* Clear the WordField */ 109*0d71511aSBin Meng Store(Zero, IRQ0) 110*0d71511aSBin Meng 111*0d71511aSBin Meng /* Set the bit from PRTB */ 112*0d71511aSBin Meng ShiftLeft(1, And(PRTB, 0x0f), IRQ0) 113*0d71511aSBin Meng 114*0d71511aSBin Meng Return (RTLB) 115*0d71511aSBin Meng } 116*0d71511aSBin Meng 117*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 118*0d71511aSBin Meng Method(_SRS, 1, Serialized) 119*0d71511aSBin Meng { 120*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 121*0d71511aSBin Meng 122*0d71511aSBin Meng /* Which bit is set? */ 123*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 124*0d71511aSBin Meng 125*0d71511aSBin Meng Decrement(Local0) 126*0d71511aSBin Meng Store(Local0, PRTB) 127*0d71511aSBin Meng } 128*0d71511aSBin Meng 129*0d71511aSBin Meng /* Status */ 130*0d71511aSBin Meng Method(_STA, 0, Serialized) 131*0d71511aSBin Meng { 132*0d71511aSBin Meng If (And(PRTB, 0x80)) { 133*0d71511aSBin Meng Return (STA_DISABLED) 134*0d71511aSBin Meng } Else { 135*0d71511aSBin Meng Return (STA_INVISIBLE) 136*0d71511aSBin Meng } 137*0d71511aSBin Meng } 138*0d71511aSBin Meng} 139*0d71511aSBin Meng 140*0d71511aSBin MengDevice (LNKC) 141*0d71511aSBin Meng{ 142*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 143*0d71511aSBin Meng Name(_UID, 3) 144*0d71511aSBin Meng 145*0d71511aSBin Meng /* Disable method */ 146*0d71511aSBin Meng Method(_DIS, 0, Serialized) 147*0d71511aSBin Meng { 148*0d71511aSBin Meng Store(0x80, PRTC) 149*0d71511aSBin Meng } 150*0d71511aSBin Meng 151*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 152*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 153*0d71511aSBin Meng { 154*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 155*0d71511aSBin Meng }) 156*0d71511aSBin Meng 157*0d71511aSBin Meng /* Current Resource Settings for this link */ 158*0d71511aSBin Meng Method(_CRS, 0, Serialized) 159*0d71511aSBin Meng { 160*0d71511aSBin Meng Name(RTLC, ResourceTemplate() 161*0d71511aSBin Meng { 162*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 163*0d71511aSBin Meng }) 164*0d71511aSBin Meng CreateWordField(RTLC, 1, IRQ0) 165*0d71511aSBin Meng 166*0d71511aSBin Meng /* Clear the WordField */ 167*0d71511aSBin Meng Store(Zero, IRQ0) 168*0d71511aSBin Meng 169*0d71511aSBin Meng /* Set the bit from PRTC */ 170*0d71511aSBin Meng ShiftLeft(1, And(PRTC, 0x0f), IRQ0) 171*0d71511aSBin Meng 172*0d71511aSBin Meng Return (RTLC) 173*0d71511aSBin Meng } 174*0d71511aSBin Meng 175*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 176*0d71511aSBin Meng Method(_SRS, 1, Serialized) 177*0d71511aSBin Meng { 178*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 179*0d71511aSBin Meng 180*0d71511aSBin Meng /* Which bit is set? */ 181*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 182*0d71511aSBin Meng 183*0d71511aSBin Meng Decrement(Local0) 184*0d71511aSBin Meng Store(Local0, PRTC) 185*0d71511aSBin Meng } 186*0d71511aSBin Meng 187*0d71511aSBin Meng /* Status */ 188*0d71511aSBin Meng Method(_STA, 0, Serialized) 189*0d71511aSBin Meng { 190*0d71511aSBin Meng If (And(PRTC, 0x80)) { 191*0d71511aSBin Meng Return (STA_DISABLED) 192*0d71511aSBin Meng } Else { 193*0d71511aSBin Meng Return (STA_INVISIBLE) 194*0d71511aSBin Meng } 195*0d71511aSBin Meng } 196*0d71511aSBin Meng} 197*0d71511aSBin Meng 198*0d71511aSBin MengDevice (LNKD) 199*0d71511aSBin Meng{ 200*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 201*0d71511aSBin Meng Name(_UID, 4) 202*0d71511aSBin Meng 203*0d71511aSBin Meng /* Disable method */ 204*0d71511aSBin Meng Method(_DIS, 0, Serialized) 205*0d71511aSBin Meng { 206*0d71511aSBin Meng Store(0x80, PRTD) 207*0d71511aSBin Meng } 208*0d71511aSBin Meng 209*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 210*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 211*0d71511aSBin Meng { 212*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 213*0d71511aSBin Meng }) 214*0d71511aSBin Meng 215*0d71511aSBin Meng /* Current Resource Settings for this link */ 216*0d71511aSBin Meng Method(_CRS, 0, Serialized) 217*0d71511aSBin Meng { 218*0d71511aSBin Meng Name(RTLD, ResourceTemplate() 219*0d71511aSBin Meng { 220*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 221*0d71511aSBin Meng }) 222*0d71511aSBin Meng CreateWordField(RTLD, 1, IRQ0) 223*0d71511aSBin Meng 224*0d71511aSBin Meng /* Clear the WordField */ 225*0d71511aSBin Meng Store(Zero, IRQ0) 226*0d71511aSBin Meng 227*0d71511aSBin Meng /* Set the bit from PRTD */ 228*0d71511aSBin Meng ShiftLeft(1, And(PRTD, 0x0f), IRQ0) 229*0d71511aSBin Meng 230*0d71511aSBin Meng Return (RTLD) 231*0d71511aSBin Meng } 232*0d71511aSBin Meng 233*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 234*0d71511aSBin Meng Method(_SRS, 1, Serialized) 235*0d71511aSBin Meng { 236*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 237*0d71511aSBin Meng 238*0d71511aSBin Meng /* Which bit is set? */ 239*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 240*0d71511aSBin Meng 241*0d71511aSBin Meng Decrement(Local0) 242*0d71511aSBin Meng Store(Local0, PRTD) 243*0d71511aSBin Meng } 244*0d71511aSBin Meng 245*0d71511aSBin Meng /* Status */ 246*0d71511aSBin Meng Method(_STA, 0, Serialized) 247*0d71511aSBin Meng { 248*0d71511aSBin Meng If (And(PRTD, 0x80)) { 249*0d71511aSBin Meng Return (STA_DISABLED) 250*0d71511aSBin Meng } Else { 251*0d71511aSBin Meng Return (STA_INVISIBLE) 252*0d71511aSBin Meng } 253*0d71511aSBin Meng } 254*0d71511aSBin Meng} 255*0d71511aSBin Meng 256*0d71511aSBin MengDevice (LNKE) 257*0d71511aSBin Meng{ 258*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 259*0d71511aSBin Meng Name(_UID, 5) 260*0d71511aSBin Meng 261*0d71511aSBin Meng /* Disable method */ 262*0d71511aSBin Meng Method(_DIS, 0, Serialized) 263*0d71511aSBin Meng { 264*0d71511aSBin Meng Store(0x80, PRTE) 265*0d71511aSBin Meng } 266*0d71511aSBin Meng 267*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 268*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 269*0d71511aSBin Meng { 270*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 271*0d71511aSBin Meng }) 272*0d71511aSBin Meng 273*0d71511aSBin Meng /* Current Resource Settings for this link */ 274*0d71511aSBin Meng Method(_CRS, 0, Serialized) 275*0d71511aSBin Meng { 276*0d71511aSBin Meng Name(RTLE, ResourceTemplate() 277*0d71511aSBin Meng { 278*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 279*0d71511aSBin Meng }) 280*0d71511aSBin Meng CreateWordField(RTLE, 1, IRQ0) 281*0d71511aSBin Meng 282*0d71511aSBin Meng /* Clear the WordField */ 283*0d71511aSBin Meng Store(Zero, IRQ0) 284*0d71511aSBin Meng 285*0d71511aSBin Meng /* Set the bit from PRTE */ 286*0d71511aSBin Meng ShiftLeft(1, And(PRTE, 0x0f), IRQ0) 287*0d71511aSBin Meng 288*0d71511aSBin Meng Return (RTLE) 289*0d71511aSBin Meng } 290*0d71511aSBin Meng 291*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 292*0d71511aSBin Meng Method(_SRS, 1, Serialized) 293*0d71511aSBin Meng { 294*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 295*0d71511aSBin Meng 296*0d71511aSBin Meng /* Which bit is set? */ 297*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 298*0d71511aSBin Meng 299*0d71511aSBin Meng Decrement(Local0) 300*0d71511aSBin Meng Store(Local0, PRTE) 301*0d71511aSBin Meng } 302*0d71511aSBin Meng 303*0d71511aSBin Meng /* Status */ 304*0d71511aSBin Meng Method(_STA, 0, Serialized) 305*0d71511aSBin Meng { 306*0d71511aSBin Meng If (And(PRTE, 0x80)) { 307*0d71511aSBin Meng Return (STA_DISABLED) 308*0d71511aSBin Meng } Else { 309*0d71511aSBin Meng Return (STA_INVISIBLE) 310*0d71511aSBin Meng } 311*0d71511aSBin Meng } 312*0d71511aSBin Meng} 313*0d71511aSBin Meng 314*0d71511aSBin MengDevice (LNKF) 315*0d71511aSBin Meng{ 316*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 317*0d71511aSBin Meng Name(_UID, 6) 318*0d71511aSBin Meng 319*0d71511aSBin Meng /* Disable method */ 320*0d71511aSBin Meng Method(_DIS, 0, Serialized) 321*0d71511aSBin Meng { 322*0d71511aSBin Meng Store(0x80, PRTF) 323*0d71511aSBin Meng } 324*0d71511aSBin Meng 325*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 326*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 327*0d71511aSBin Meng { 328*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 329*0d71511aSBin Meng }) 330*0d71511aSBin Meng 331*0d71511aSBin Meng /* Current Resource Settings for this link */ 332*0d71511aSBin Meng Method(_CRS, 0, Serialized) 333*0d71511aSBin Meng { 334*0d71511aSBin Meng Name(RTLF, ResourceTemplate() 335*0d71511aSBin Meng { 336*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 337*0d71511aSBin Meng }) 338*0d71511aSBin Meng CreateWordField(RTLF, 1, IRQ0) 339*0d71511aSBin Meng 340*0d71511aSBin Meng /* Clear the WordField */ 341*0d71511aSBin Meng Store(Zero, IRQ0) 342*0d71511aSBin Meng 343*0d71511aSBin Meng /* Set the bit from PRTF */ 344*0d71511aSBin Meng ShiftLeft(1, And(PRTF, 0x0f), IRQ0) 345*0d71511aSBin Meng 346*0d71511aSBin Meng Return (RTLF) 347*0d71511aSBin Meng } 348*0d71511aSBin Meng 349*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 350*0d71511aSBin Meng Method(_SRS, 1, Serialized) 351*0d71511aSBin Meng { 352*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 353*0d71511aSBin Meng 354*0d71511aSBin Meng /* Which bit is set? */ 355*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 356*0d71511aSBin Meng 357*0d71511aSBin Meng Decrement(Local0) 358*0d71511aSBin Meng Store(Local0, PRTF) 359*0d71511aSBin Meng } 360*0d71511aSBin Meng 361*0d71511aSBin Meng /* Status */ 362*0d71511aSBin Meng Method(_STA, 0, Serialized) 363*0d71511aSBin Meng { 364*0d71511aSBin Meng If (And(PRTF, 0x80)) { 365*0d71511aSBin Meng Return (STA_DISABLED) 366*0d71511aSBin Meng } Else { 367*0d71511aSBin Meng Return (STA_INVISIBLE) 368*0d71511aSBin Meng } 369*0d71511aSBin Meng } 370*0d71511aSBin Meng} 371*0d71511aSBin Meng 372*0d71511aSBin MengDevice (LNKG) 373*0d71511aSBin Meng{ 374*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 375*0d71511aSBin Meng Name(_UID, 7) 376*0d71511aSBin Meng 377*0d71511aSBin Meng /* Disable method */ 378*0d71511aSBin Meng Method(_DIS, 0, Serialized) 379*0d71511aSBin Meng { 380*0d71511aSBin Meng Store(0x80, PRTG) 381*0d71511aSBin Meng } 382*0d71511aSBin Meng 383*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 384*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 385*0d71511aSBin Meng { 386*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 387*0d71511aSBin Meng }) 388*0d71511aSBin Meng 389*0d71511aSBin Meng /* Current Resource Settings for this link */ 390*0d71511aSBin Meng Method(_CRS, 0, Serialized) 391*0d71511aSBin Meng { 392*0d71511aSBin Meng Name(RTLG, ResourceTemplate() 393*0d71511aSBin Meng { 394*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 395*0d71511aSBin Meng }) 396*0d71511aSBin Meng CreateWordField(RTLG, 1, IRQ0) 397*0d71511aSBin Meng 398*0d71511aSBin Meng /* Clear the WordField */ 399*0d71511aSBin Meng Store(Zero, IRQ0) 400*0d71511aSBin Meng 401*0d71511aSBin Meng /* Set the bit from PRTG */ 402*0d71511aSBin Meng ShiftLeft(1, And(PRTG, 0x0f), IRQ0) 403*0d71511aSBin Meng 404*0d71511aSBin Meng Return (RTLG) 405*0d71511aSBin Meng } 406*0d71511aSBin Meng 407*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 408*0d71511aSBin Meng Method(_SRS, 1, Serialized) 409*0d71511aSBin Meng { 410*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 411*0d71511aSBin Meng 412*0d71511aSBin Meng /* Which bit is set? */ 413*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 414*0d71511aSBin Meng 415*0d71511aSBin Meng Decrement(Local0) 416*0d71511aSBin Meng Store(Local0, PRTG) 417*0d71511aSBin Meng } 418*0d71511aSBin Meng 419*0d71511aSBin Meng /* Status */ 420*0d71511aSBin Meng Method(_STA, 0, Serialized) 421*0d71511aSBin Meng { 422*0d71511aSBin Meng If (And(PRTG, 0x80)) { 423*0d71511aSBin Meng Return (STA_DISABLED) 424*0d71511aSBin Meng } Else { 425*0d71511aSBin Meng Return (STA_INVISIBLE) 426*0d71511aSBin Meng } 427*0d71511aSBin Meng } 428*0d71511aSBin Meng} 429*0d71511aSBin Meng 430*0d71511aSBin MengDevice (LNKH) 431*0d71511aSBin Meng{ 432*0d71511aSBin Meng Name(_HID, EISAID("PNP0C0F")) 433*0d71511aSBin Meng Name(_UID, 8) 434*0d71511aSBin Meng 435*0d71511aSBin Meng /* Disable method */ 436*0d71511aSBin Meng Method(_DIS, 0, Serialized) 437*0d71511aSBin Meng { 438*0d71511aSBin Meng Store(0x80, PRTH) 439*0d71511aSBin Meng } 440*0d71511aSBin Meng 441*0d71511aSBin Meng /* Possible Resource Settings for this Link */ 442*0d71511aSBin Meng Name(_PRS, ResourceTemplate() 443*0d71511aSBin Meng { 444*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 } 445*0d71511aSBin Meng }) 446*0d71511aSBin Meng 447*0d71511aSBin Meng /* Current Resource Settings for this link */ 448*0d71511aSBin Meng Method(_CRS, 0, Serialized) 449*0d71511aSBin Meng { 450*0d71511aSBin Meng Name(RTLH, ResourceTemplate() 451*0d71511aSBin Meng { 452*0d71511aSBin Meng IRQ(Level, ActiveLow, Shared) {} 453*0d71511aSBin Meng }) 454*0d71511aSBin Meng CreateWordField(RTLH, 1, IRQ0) 455*0d71511aSBin Meng 456*0d71511aSBin Meng /* Clear the WordField */ 457*0d71511aSBin Meng Store(Zero, IRQ0) 458*0d71511aSBin Meng 459*0d71511aSBin Meng /* Set the bit from PRTH */ 460*0d71511aSBin Meng ShiftLeft(1, And(PRTH, 0x0f), IRQ0) 461*0d71511aSBin Meng 462*0d71511aSBin Meng Return (RTLH) 463*0d71511aSBin Meng } 464*0d71511aSBin Meng 465*0d71511aSBin Meng /* Set Resource Setting for this IRQ link */ 466*0d71511aSBin Meng Method(_SRS, 1, Serialized) 467*0d71511aSBin Meng { 468*0d71511aSBin Meng CreateWordField(Arg0, 1, IRQ0) 469*0d71511aSBin Meng 470*0d71511aSBin Meng /* Which bit is set? */ 471*0d71511aSBin Meng FindSetRightBit(IRQ0, Local0) 472*0d71511aSBin Meng 473*0d71511aSBin Meng Decrement(Local0) 474*0d71511aSBin Meng Store(Local0, PRTH) 475*0d71511aSBin Meng } 476*0d71511aSBin Meng 477*0d71511aSBin Meng /* Status */ 478*0d71511aSBin Meng Method(_STA, 0, Serialized) 479*0d71511aSBin Meng { 480*0d71511aSBin Meng If (And(PRTH, 0x80)) { 481*0d71511aSBin Meng Return (STA_DISABLED) 482*0d71511aSBin Meng } Else { 483*0d71511aSBin Meng Return (STA_INVISIBLE) 484*0d71511aSBin Meng } 485*0d71511aSBin Meng } 486*0d71511aSBin Meng} 487