blob: 3f7518c76efcfe06a485e0bf3649314149f4fa6c [file] [log] [blame]
Angel Pons182dbde2020-04-02 23:49:05 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Tobias Diedriche87c38e2010-11-27 09:40:16 +00002
3Field (\_SB.PCI0.LPCB.PCIC, AnyAcc, NoLock, Preserve)
4{
5 Offset (0x60), // Interrupt Routing Registers
6 PRTA, 8,
7 PRTB, 8,
8 PRTC, 8,
9 PRTD, 8,
10}
11
12Name(IRQB, ResourceTemplate(){
13 IRQ(Level,ActiveLow,Shared){15}
14})
15
16Name(IRQP, ResourceTemplate(){
17 IRQ(Level,ActiveLow,Exclusive){3, 4, 5, 6, 7, 10, 11, 12}
18})
19
20/* adapted from ma78gm/dsdt.asl */
21#define PCI_INTX_DEV(intx, pinx, uid) \
22Device(intx) { \
23 Name(_HID, EISAID("PNP0C0F")) \
24 Name(_UID, uid) \
25 \
26 Method(_STA, 0) { \
27 If (And(pinx, 0x80)) { \
28 Return(0x09) \
29 } \
30 Return(0x0B) \
31 } \
32 \
33 Method(_DIS ,0) { \
Felix Singer2f308d42022-12-12 04:49:46 +010034 pinx = 0x80 \
Tobias Diedriche87c38e2010-11-27 09:40:16 +000035 } \
36 \
37 Method(_PRS ,0) { \
38 Return(IRQP) \
39 } \
40 \
41 Method(_CRS ,0) { \
42 CreateWordField(IRQB, 1, IRQN) \
Felix Singer3c9291b2022-12-16 02:43:56 +010043 IRQN = 1 << And(pinx, 0x0f) \
Tobias Diedriche87c38e2010-11-27 09:40:16 +000044 Return(IRQB) \
45 } \
46 \
47 Method(_SRS, 1) { \
48 CreateWordField(ARG0, 1, IRQM) \
49 \
50 /* Use lowest available IRQ */ \
51 FindSetRightBit(IRQM, Local0) \
52 if (Local0) { \
Felix Singer40bc82f2021-12-31 14:09:48 +010053 Local0-- \
Tobias Diedriche87c38e2010-11-27 09:40:16 +000054 } \
Felix Singer2f308d42022-12-12 04:49:46 +010055 pinx = Local0 \
Tobias Diedriche87c38e2010-11-27 09:40:16 +000056 } \
57} \
58
59PCI_INTX_DEV(LNKA, PRTA, 1)
60PCI_INTX_DEV(LNKB, PRTB, 2)
61PCI_INTX_DEV(LNKC, PRTC, 3)
62PCI_INTX_DEV(LNKD, PRTD, 4)