xref: /rk3399_rockchip-uboot/arch/x86/include/asm/acpi/irqlinks.asl (revision dc557e9a1fe00ca9d884bd88feef5bebf23fede4)
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