• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* SPDX-License-Identifier: GPL-2.0-only */
2
3/* SMSC SIO10N268 */
4
5Device (SIO1)
6{
7	Name (_HID, EISAID("PNP0A05"))
8	Name (_UID, 1)
9
10	OperationRegion(SIOR, SystemIO, 0x4e, 0x02)
11	Field (SIOR, ByteAcc, Nolock, Preserve)
12	{
13		INDX,	8,
14		DATA,	8
15	}
16
17	Mutex (SIOM, 0x00)
18
19	Method (READ, 3)
20	{
21		Acquire (SIOM, 0xffff)
22		If (Arg0 == 0) {
23			INDX = 0x55
24			INDX = Arg1
25			Local1 = DATA
26			INDX = 0xaa
27		}
28		Local1 &= Arg2
29		Release(SIOM)
30		Return(Local1)
31	}
32
33	Method (WRIT, 3)
34	{
35		Acquire (SIOM, 0xffff)
36		If (Arg0 == 0) {
37			INDX = 0x55
38			INDX = Arg1
39			DATA = Arg2
40			INDX = 0xaa
41		}
42		Release(SIOM)
43	}
44
45	Device (UAR1)
46	{
47		Name(_HID, EISAID("PNP0501"))
48		Name(_UID, 1)
49		Name(_DDN, "COM1")
50		Name(_PRW, Package() { 0x08, 0x03 })
51
52		/* Device Status */
53		Method (_STA, 0)
54		{
55			Acquire (SIOM, 0xffff)
56
57			// Is the hardware enabled?
58			Local0 = READ (0, 0x24, 0xff)
59			If (Local0 == 0) {
60				Return (0xd)
61			} Else {
62				// Power Enabled?
63				Local0 = READ (0, 0x02, 0x08)
64				If (Local0 == 0) {
65					Return (0x0d)
66				} Else {
67					Return (0x0f)
68				}
69			}
70		}
71
72		/* Device Disable */
73		Method (_DIS, 0)
74		{
75			WRIT(0, 0x24, 0x00)
76
77			Local0 = READ (0, 0x28, 0x0f)
78			WRIT(0, 0x28, Local0)
79
80			Local0 = READ (0, 0x02, 0xff)
81			Local1 = ~0x08
82			Local0 &= Local1
83			WRIT(0, 0x02, Local0)
84		}
85
86		/* Possible Resource Settings */
87		Name(_PRS, ResourceTemplate() {
88			StartDependentFn(0, 1) {
89				IO(Decode16, 0x3f8, 0x3f8, 0x8, 0x8)
90				IRQNoFlags() { 4 }
91			} EndDependentFn()
92		})
93
94		/* Current Resource Settings */
95		Method(_CRS, 0, Serialized)
96		{
97			Name(NONE, ResourceTemplate() {
98				IO(Decode16, 0x000, 0x000, 0x0, 0x1)
99				IRQNoFlags() { }
100			})
101
102			Name(RSRC, ResourceTemplate() {
103				IO(Decode16, 0x3f8, 0x3f8, 0x8, 0x8, _IOA)
104				IRQNoFlags(_IRA) { 4 }
105			})
106
107			Local0 = (_STA () & 0x02)
108			If (Local0 == 0) {
109				Return(NONE)
110			}
111
112			CreateWordField(RSRC,
113				\_SB.PCI0.LPCB.SIO1.UAR1._CRS._IOA._MIN, IOMN)
114			CreateWordField(RSRC,
115				\_SB.PCI0.LPCB.SIO1.UAR1._CRS._IOA._MAX, IOMX)
116			CreateWordField(RSRC,
117				\_SB.PCI0.LPCB.SIO1.UAR1._CRS._IRA._INT, IRQ)
118
119			/* I/O Base */
120			Local0 = READ (0, 0x24, 0xfe)
121			Local0 <<= 2
122			IOMN = Local0
123			IOMX = Local0
124
125			/* Interrupt */
126			Local0 = READ (0, 0x28, 0xf0)
127			Local0 >>= 4
128			IRQ = 1 << Local0
129			Return(RSRC)
130		}
131
132		/* Set Resource Settings */
133		Method(_SRS, 1)
134		{
135			CreateByteField(Arg0, 0x02, IOLO)
136			CreateByteField(Arg0, 0x03, IOHI)
137			CreateByteField(Arg0, 0x09, IRQL)
138
139			WRIT(0, 0x24, 0)
140			FindSetRightBit(IRQL, Local0)
141			Local0--
142			Local0 <<= 4
143
144			Local1 = READ (0, 0x28, 0x0f)
145			Local0 |= Local1
146			WRIT(0, 0x28, Local0)
147
148			Local0 = IOLO
149			Local0 >>= 2
150			Local0 &= 0xfe
151
152			Local1 = IOHI
153			Local1 <<= 6
154			Local0 |= Local1
155			WRIT(0, 0x24, Local0)
156
157			Local0 = READ (0, 0x02, 0xff)
158			Local0 |= 0x08
159			WRIT(0, 0x02, Local0)
160
161			Local0 = READ (0, 0x07, 0xff)
162			Local1 = ~0x40
163			Local0 &= Local1
164			WRIT(0, 0x07, Local0)
165		}
166
167
168		/* D0 state - Line drivers are on */
169		Method (_PS0, 0)
170		{
171			Local0 = READ (0, 0x02, 0xff)
172			Local0 |= 0x08
173			WRIT(0, 0x02, Local0)
174
175			Local0 = READ (0, 0x07, 0xff)
176			Local1 = ~0x40
177			Local0 &= Local1
178			WRIT(0, 0x07, Local0)
179		}
180
181		/* D3 State - Line drivers are off */
182		Method(_PS3, 0)
183		{
184			Local0 = READ (0, 0x02, 0xff)
185			Local1 = ~0x08
186			Local0 &= Local1
187			WRIT(0, 0x02, Local0)
188		}
189	}
190
191	Device (UAR2)
192	{
193		Name(_HID, EISAID("PNP0501"))
194		Name(_UID, 2)
195		Name(_DDN, "COM2")
196		Name(_PRW, Package() { 0x08, 0x03 })
197
198		/* Device Status */
199		Method (_STA, 0)
200		{
201			/* IRDA? */
202			Local0 = READ(0, 0x0c, 0x38)
203			If (Local0 != 0) {
204				Return (0)
205			}
206
207			// Is the hardware enabled?
208			Local0 = READ (0, 0x25, 0xff)
209			If (Local0 == 0) {
210				Return (0xd)
211			} Else {
212				// Power Enabled?
213				Local0 = READ (0, 0x02, 0x80)
214				If (Local0 == 0) {
215					Return (0x0d)
216				} Else {
217					Return (0x0f)
218				}
219			}
220		}
221
222		/* Device Disable */
223		Method (_DIS, 0)
224		{
225			WRIT(0, 0x25, 0x00)
226
227			Local0 = READ (0, 0x28, 0xf0)
228			WRIT(0, 0x28, Local0)
229
230			Local0 = READ (0, 0x02, 0xff)
231			Local1 = ~0x80
232			Local0 &= Local1
233			WRIT(0, 0x02, Local0)
234		}
235
236		/* Possible Resource Settings */
237		Name(_PRS, ResourceTemplate() {
238			StartDependentFn(0, 1) {
239				IO(Decode16, 0x2f8, 0x2f8, 0x8, 0x8)
240				IRQNoFlags() { 3 }
241			} EndDependentFn()
242		})
243
244		/* Current Resource Settings */
245		Method(_CRS, 0, Serialized)
246		{
247			Name(NONE, ResourceTemplate() {
248				IO(Decode16, 0x000, 0x000, 0x0, 0x1)
249				IRQNoFlags() { }
250			})
251
252			Name(RSRC, ResourceTemplate() {
253				IO(Decode16, 0x2f8, 0x2f8, 0x8, 0x8, _IOB)
254				IRQNoFlags(_IRB) { 3 }
255			})
256
257			Local0 = _STA () & 0x02
258			If (Local0 == 0) {
259				Return(NONE)
260			}
261
262			CreateWordField(RSRC,
263				\_SB.PCI0.LPCB.SIO1.UAR2._CRS._IOB._MIN, IOMN)
264			CreateWordField(RSRC,
265				\_SB.PCI0.LPCB.SIO1.UAR2._CRS._IOB._MAX, IOMX)
266			CreateWordField(RSRC,
267				\_SB.PCI0.LPCB.SIO1.UAR2._CRS._IRB._INT, IRQ)
268
269			/* I/O Base */
270			Local0 = READ (0, 0x25, 0xfe)
271			Local0 <<= 2
272			IOMN = Local0
273			IOMX = Local0
274
275			/* Interrupt */
276			Local0 = READ (0, 0x28, 0x0f)
277			Local0 >>= 4
278			IRQ = 1 << Local0
279			Return(RSRC)
280		}
281
282		/* Set Resource Settings */
283		Method(_SRS, 1)
284		{
285			CreateByteField(Arg0, 0x02, IOLO)
286			CreateByteField(Arg0, 0x03, IOHI)
287			CreateByteField(Arg0, 0x09, IRQL)
288
289			WRIT(0, 0x25, 0)
290			FindSetRightBit(IRQL, Local0)
291			Local0--
292
293			Local1 = READ (0x00, 0x28, 0xf0)
294			Local0 |= Local1
295			WRIT(0, 0x28, Local0)
296
297			Local0 = IOLO
298			Local0 >>= 2
299			Local0 &= 0xfe
300
301			Local1 = IOHI
302			Local1 <<= 6
303			Local0 |= Local1
304			WRIT(0, 0x25, Local0)
305
306			Local0 = READ (0, 0x0c, 0xff)
307			Local1 = ~0x38
308			Local0 &= Local1
309			WRIT(0, 0x0c, Local0)
310
311			Local0 = READ (0, 0x02, 0xff)
312			Local0 |= 0x80
313			WRIT(0, 0x02, Local0)
314
315			Local0 = READ (0, 0x07, 0xff)
316			Local1 = ~0x20
317			Local0 &= Local1
318			WRIT(0, 0x07, Local0)
319		}
320
321		/* D0 state - Line drivers are on */
322		Method (_PS0, 0)
323		{
324			Local0 = READ (0, 0x02, 0xff)
325			Local0 |= 0x80
326			WRIT(0, 0x02, Local0)
327
328			Local0 = READ (0, 0x07, 0xff)
329			Local1 = ~0x20
330			Local0 &= Local1
331			WRIT(0, 0x07, Local0)
332		}
333
334		/* D3 State - Line drivers are off */
335		Method(_PS3, 0)
336		{
337			Local0 = READ (0, 0x02, 0xff)
338			Local1 = ~0x80
339			Local0 &= Local1
340			WRIT(0, 0x02, Local0)
341		}
342	}
343
344	Device (UAR3)
345	{
346		Name(_HID, EISAID("PNP0501"))
347		Name(_UID, 3)
348		Name(_DDN, "COM3")
349		Name(_PRW, Package() { 0x08, 0x03 })
350
351		/* Device Status */
352		Method (_STA, 0)
353		{
354			Acquire (SIOM, 0xffff)
355
356			// Is the hardware enabled?
357			Local0 = READ (0, 0x1b, 0xff)
358			If (Local0 == 0) {
359				Return (0xd)
360			} Else {
361				// Power Enabled?
362				Local0 = READ (0, 0x02, 0x02)
363				If (Local0 == 0) {
364					Return (0x0d)
365				} Else {
366					Return (0x0f)
367				}
368			}
369		}
370
371		/* Device Disable */
372		Method (_DIS, 0)
373		{
374			WRIT(0, 0x1b, 0x00)
375
376			Local0 = READ (0, 0x1d, 0x0f)
377			WRIT(0, 0x1d, Local0)
378
379			Local0 = READ (0, 0x02, 0xff)
380			Local1 = ~0x02
381			Local0 &= Local1
382			WRIT(0, 0x02, Local0)
383		}
384
385		/* Possible Resource Settings */
386		Name(_PRS, ResourceTemplate() {
387			StartDependentFn(0, 1) {
388				IO(Decode16, 0x3e8, 0x3e8, 0x8, 0x8)
389				IRQNoFlags() { 5 }
390			} EndDependentFn()
391		})
392
393		/* Current Resource Settings */
394		Method(_CRS, 0, Serialized)
395		{
396			Name(NONE, ResourceTemplate() {
397				IO(Decode16, 0x000, 0x000, 0x0, 0x1)
398				IRQNoFlags() { }
399			})
400
401			Name(RSRC, ResourceTemplate() {
402				IO(Decode16, 0x3e8, 0x3e8, 0x8, 0x8, _IOA)
403				IRQNoFlags(_IRA) { 5 }
404			})
405
406			Local0 = _STA () & 0x02
407			If (Local0 == 0) {
408				Return(NONE)
409			}
410
411			CreateWordField(RSRC,
412				\_SB.PCI0.LPCB.SIO1.UAR3._CRS._IOA._MIN, IOMN)
413			CreateWordField(RSRC,
414				\_SB.PCI0.LPCB.SIO1.UAR3._CRS._IOA._MAX, IOMX)
415			CreateWordField(RSRC,
416				\_SB.PCI0.LPCB.SIO1.UAR3._CRS._IRA._INT, IRQ)
417
418			/* I/O Base */
419			Local0 = READ (0x00, 0x1b, 0xfe)
420			Local0 <<= 2
421			IOMN = Local0
422			IOMX = Local0
423
424			/* Interrupt */
425			Local0 = READ (0, 0x1d, 0xf0)
426			Local0 >>= 4
427			IRQ = 1 << Local0
428			Return(RSRC)
429		}
430
431		/* Set Resource Settings */
432		Method(_SRS, 1)
433		{
434			CreateByteField(Arg0, 0x02, IOLO)
435			CreateByteField(Arg0, 0x03, IOHI)
436			CreateByteField(Arg0, 0x09, IRQL)
437
438			WRIT(0, 0x1b, 0)
439			FindSetRightBit(IRQL, Local0)
440			Local0--
441			Local0 <<= 4
442
443			Local1 = READ (0, 0x1d, 0x0f)
444			Local0 |= Local1
445			WRIT(0, 0x1d, Local0)
446
447			Local0 = IOLO
448			Local0 >>= 2
449			Local0 &= 0xfe
450
451			Local1 = IOHI
452			Local1 <<= 6
453			Local0 |= Local1
454			WRIT(0, 0x1b, Local0)
455
456			Local0 = READ (0, 0x02, 0xff)
457			Local0 |= 0x02
458			WRIT(0, 0x02, Local0)
459
460			Local0 = READ (0, 0x07, 0xff)
461			Local1 = ~0x04
462			Local0 &= Local1
463			WRIT(0, 0x07, Local0)
464		}
465
466
467		/* D0 state - Line drivers are on */
468		Method (_PS0, 0)
469		{
470			Local0 = READ (0, 0x02, 0xff)
471			Local0 |= 0x02
472			WRIT(0, 0x02, Local0)
473
474			Local0 = READ (0, 0x07, 0xff)
475			Local1 = ~0x04
476			Local0 &= Local1
477			WRIT(0, 0x07, Local0)
478		}
479
480		/* D3 State - Line drivers are off */
481		Method(_PS3, 0)
482		{
483			Local0 = READ (0, 0x02, 0xff)
484			Local1 = ~0x02
485			Local0 &= Local1
486			WRIT(0, 0x02, Local0)
487		}
488	}
489
490
491	Device (UAR4)
492	{
493		Name(_HID, EISAID("PNP0501"))
494		Name(_UID, 4)
495		Name(_DDN, "COM4")
496		Name(_PRW, Package() { 0x08, 0x03 })
497
498		/* Device Status */
499		Method (_STA, 0)
500		{
501			Acquire (SIOM, 0xffff)
502
503			// Is the hardware enabled?
504			Local0 = READ (0, 0x1c, 0xff)
505			If (Local0 == 0) {
506				Return (0xd)
507			} Else {
508				// Power Enabled?
509				Local0 = READ (0, 0x02, 0x04)
510				If (Local0 == 0) {
511					Return (0x0d)
512				} Else {
513					Return (0x0f)
514				}
515			}
516		}
517
518		/* Device Disable */
519		Method (_DIS, 0)
520		{
521			WRIT(0, 0x1c, 0x00)
522
523			Local0 = READ (0, 0x1d, 0x0f)
524			WRIT(0, 0x1d, Local0)
525
526			Local0 = READ (0, 0x02, 0xff)
527			Local1 = ~0x04
528			Local0 &= Local1
529			WRIT(0, 0x02, Local0)
530		}
531
532		/* Possible Resource Settings */
533		Name(_PRS, ResourceTemplate() {
534			StartDependentFn(0, 1) {
535				IO(Decode16, 0x2e8, 0x2e8, 0x8, 0x8)
536				IRQNoFlags() { 11 }
537			} EndDependentFn()
538		})
539
540		/* Current Resource Settings */
541		Method(_CRS, 0, Serialized)
542		{
543			Name(NONE, ResourceTemplate() {
544				IO(Decode16, 0x000, 0x000, 0x0, 0x1)
545				IRQNoFlags() { }
546			})
547
548			Name(RSRC, ResourceTemplate() {
549				IO(Decode16, 0x2e8, 0x2e8, 0x8, 0x8, _IOA)
550				IRQNoFlags(_IRA) { 11 }
551			})
552
553			Local0 = _STA () & 0x02
554			If (Local0 == 0) {
555				Return(NONE)
556			}
557
558			CreateWordField(RSRC,
559				\_SB.PCI0.LPCB.SIO1.UAR4._CRS._IOA._MIN, IOMN)
560			CreateWordField(RSRC,
561				\_SB.PCI0.LPCB.SIO1.UAR4._CRS._IOA._MAX, IOMX)
562			CreateWordField(RSRC,
563				\_SB.PCI0.LPCB.SIO1.UAR4._CRS._IRA._INT, IRQ)
564
565			/* I/O Base */
566			Local0 = READ (0, 0x1c, 0xfe)
567			Local0 <<= 2
568			IOMN = Local0
569			IOMX = Local0
570
571			/* Interrupt */
572			Local0 = READ (0, 0x1d, 0xf0)
573			Local0 >>= 4
574			IRQ = 1 << Local0
575			Return(RSRC)
576		}
577
578		/* Set Resource Settings */
579		Method(_SRS, 1)
580		{
581			CreateByteField(Arg0, 0x02, IOLO)
582			CreateByteField(Arg0, 0x03, IOHI)
583			CreateByteField(Arg0, 0x09, IRQL)
584
585			WRIT(0, 0x1c, 0)
586			FindSetRightBit(IRQL, Local0)
587			Local0--
588			Local0 <<= 4
589
590			Local1 = READ (0x00, 0x1d, 0x0f)
591			Local0 |= Local1
592			WRIT(0, 0x1d, Local0)
593
594			Local0 = IOLO
595			Local0 >>= 2
596			Local0 &= 0xfe
597
598			Local1 = IOHI
599			Local1 <<= 6
600			Local0 |= Local1
601			WRIT(0, 0x1c, Local0)
602
603			Local0 = READ (0, 0x02, 0xff)
604			Local0 |= 0x04
605			WRIT(0, 0x02, Local0)
606
607			Local0 = READ (0, 0x07, 0xff)
608			Local1 = ~0x08
609			Local0 &= Local1
610			WRIT(0, 0x07, Local0)
611		}
612
613
614		/* D0 state - Line drivers are on */
615		Method (_PS0, 0)
616		{
617			Local0 = READ (0, 0x02, 0xff)
618			Local0 |= 0x04
619			WRIT(0, 0x02, Local0)
620
621			Local0 = READ (0, 0x07, 0xff)
622			Local1 = ~0x08
623			Local0 &= Local1
624			WRIT(0, 0x07, Local0)
625		}
626
627		/* D3 State - Line drivers are off */
628		Method(_PS3, 0)
629		{
630			Local0 = READ (0, 0x02, 0xff)
631			Local1 = ~0x04
632			Local0 &= Local1
633			WRIT(0, 0x02, Local0)
634		}
635	}
636
637}
638