|
|
1.1 root 1: /*
2: * Bochs/QEMU ACPI DSDT ASL definition
3: *
4: * Copyright (c) 2006 Fabrice Bellard
5: *
6: * This library is free software; you can redistribute it and/or
7: * modify it under the terms of the GNU Lesser General Public
8: * License version 2 as published by the Free Software Foundation.
9: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this library; if not, write to the Free Software
17: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18: */
19: DefinitionBlock (
20: "acpi-dsdt.aml", // Output Filename
21: "DSDT", // Signature
22: 0x01, // DSDT Compliance Revision
23: "BXPC", // OEMID
24: "BXDSDT", // TABLE ID
25: 0x1 // OEM Revision
26: )
27: {
28: Scope (\)
29: {
30: /* Debug Output */
31: OperationRegion (DBG, SystemIO, 0xb044, 0x04)
32: Field (DBG, DWordAcc, NoLock, Preserve)
33: {
34: DBGL, 32,
35: }
36: }
37:
38:
39: /* PCI Bus definition */
40: Scope(\_SB) {
41: Device(PCI0) {
42: Name (_HID, EisaId ("PNP0A03"))
43: Name (_ADR, 0x00)
44: Name (_UID, 1)
45: Name(_PRT, Package() {
46: /* PCI IRQ routing table, example from ACPI 2.0a specification,
47: section 6.2.8.1 */
48: /* Note: we provide the same info as the PCI routing
49: table of the Bochs BIOS */
50: #define prt_slot(nr, lnk0, lnk1, lnk2, lnk3) \
51: Package() { nr##ffff, 0, lnk0, 0 }, \
52: Package() { nr##ffff, 1, lnk1, 0 }, \
53: Package() { nr##ffff, 2, lnk2, 0 }, \
54: Package() { nr##ffff, 3, lnk3, 0 }
55:
56: #define prt_slot0(nr) prt_slot(nr, LNKD, LNKA, LNKB, LNKC)
57: #define prt_slot1(nr) prt_slot(nr, LNKA, LNKB, LNKC, LNKD)
58: #define prt_slot2(nr) prt_slot(nr, LNKB, LNKC, LNKD, LNKA)
59: #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB)
60: prt_slot0(0x0000),
61: prt_slot1(0x0001),
62: prt_slot2(0x0002),
63: prt_slot3(0x0003),
64: prt_slot0(0x0004),
65: prt_slot1(0x0005),
66: prt_slot2(0x0006),
67: prt_slot3(0x0007),
68: prt_slot0(0x0008),
69: prt_slot1(0x0009),
70: prt_slot2(0x000a),
71: prt_slot3(0x000b),
72: prt_slot0(0x000c),
73: prt_slot1(0x000d),
74: prt_slot2(0x000e),
75: prt_slot3(0x000f),
76: prt_slot0(0x0010),
77: prt_slot1(0x0011),
78: prt_slot2(0x0012),
79: prt_slot3(0x0013),
80: prt_slot0(0x0014),
81: prt_slot1(0x0015),
82: prt_slot2(0x0016),
83: prt_slot3(0x0017),
84: prt_slot0(0x0018),
85: prt_slot1(0x0019),
86: prt_slot2(0x001a),
87: prt_slot3(0x001b),
88: prt_slot0(0x001c),
89: prt_slot1(0x001d),
90: prt_slot2(0x001e),
91: prt_slot3(0x001f),
92: })
93:
94: OperationRegion(PCST, SystemIO, 0xae00, 0x08)
95: Field (PCST, DWordAcc, NoLock, WriteAsZeros)
96: {
97: PCIU, 32,
98: PCID, 32,
99: }
100:
101: OperationRegion(SEJ, SystemIO, 0xae08, 0x04)
102: Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
103: {
104: B0EJ, 32,
105: }
106:
107: #define hotplug_slot(name, nr) \
108: Device (S##name) { \
109: Name (_ADR, nr##0000) \
110: Method (_EJ0,1) { \
111: Store(ShiftLeft(1, nr), B0EJ) \
112: Return (0x0) \
113: } \
114: Name (_SUN, name) \
115: }
116:
117: hotplug_slot(1, 0x0001)
118: hotplug_slot(2, 0x0002)
119: hotplug_slot(3, 0x0003)
120: hotplug_slot(4, 0x0004)
121: hotplug_slot(5, 0x0005)
122: hotplug_slot(6, 0x0006)
123: hotplug_slot(7, 0x0007)
124: hotplug_slot(8, 0x0008)
125: hotplug_slot(9, 0x0009)
126: hotplug_slot(10, 0x000a)
127: hotplug_slot(11, 0x000b)
128: hotplug_slot(12, 0x000c)
129: hotplug_slot(13, 0x000d)
130: hotplug_slot(14, 0x000e)
131: hotplug_slot(15, 0x000f)
132: hotplug_slot(16, 0x0010)
133: hotplug_slot(17, 0x0011)
134: hotplug_slot(18, 0x0012)
135: hotplug_slot(19, 0x0013)
136: hotplug_slot(20, 0x0014)
137: hotplug_slot(21, 0x0015)
138: hotplug_slot(22, 0x0016)
139: hotplug_slot(23, 0x0017)
140: hotplug_slot(24, 0x0018)
141: hotplug_slot(25, 0x0019)
142: hotplug_slot(26, 0x001a)
143: hotplug_slot(27, 0x001b)
144: hotplug_slot(28, 0x001c)
145: hotplug_slot(29, 0x001d)
146: hotplug_slot(30, 0x001e)
147: hotplug_slot(31, 0x001f)
148:
149: Name (_CRS, ResourceTemplate ()
150: {
151: WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
152: 0x0000, // Address Space Granularity
153: 0x0000, // Address Range Minimum
154: 0x00FF, // Address Range Maximum
155: 0x0000, // Address Translation Offset
156: 0x0100, // Address Length
157: ,, )
158: IO (Decode16,
159: 0x0CF8, // Address Range Minimum
160: 0x0CF8, // Address Range Maximum
161: 0x01, // Address Alignment
162: 0x08, // Address Length
163: )
164: WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
165: 0x0000, // Address Space Granularity
166: 0x0000, // Address Range Minimum
167: 0x0CF7, // Address Range Maximum
168: 0x0000, // Address Translation Offset
169: 0x0CF8, // Address Length
170: ,, , TypeStatic)
171: WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
172: 0x0000, // Address Space Granularity
173: 0x0D00, // Address Range Minimum
174: 0xFFFF, // Address Range Maximum
175: 0x0000, // Address Translation Offset
176: 0xF300, // Address Length
177: ,, , TypeStatic)
178: DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
179: 0x00000000, // Address Space Granularity
180: 0x000A0000, // Address Range Minimum
181: 0x000BFFFF, // Address Range Maximum
182: 0x00000000, // Address Translation Offset
183: 0x00020000, // Address Length
184: ,, , AddressRangeMemory, TypeStatic)
185: DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
186: 0x00000000, // Address Space Granularity
187: 0xE0000000, // Address Range Minimum
188: 0xFEBFFFFF, // Address Range Maximum
189: 0x00000000, // Address Translation Offset
190: 0x1EC00000, // Address Length
191: ,, , AddressRangeMemory, TypeStatic)
192: })
193: }
194:
195: Device(HPET) {
196: Name(_HID, EISAID("PNP0103"))
197: Name(_UID, 0)
198: Method (_STA, 0, NotSerialized) {
199: Return(0x0F)
200: }
201: Name(_CRS, ResourceTemplate() {
202: DWordMemory(
203: ResourceConsumer, PosDecode, MinFixed, MaxFixed,
204: NonCacheable, ReadWrite,
205: 0x00000000,
206: 0xFED00000,
207: 0xFED003FF,
208: 0x00000000,
209: 0x00000400 /* 1K memory: FED00000 - FED003FF */
210: )
211: })
212: }
213: }
214:
215: Scope(\_SB.PCI0) {
216: Device (VGA) {
217: Name (_ADR, 0x00020000)
218: Method (_S1D, 0, NotSerialized)
219: {
220: Return (0x00)
221: }
222: Method (_S2D, 0, NotSerialized)
223: {
224: Return (0x00)
225: }
226: Method (_S3D, 0, NotSerialized)
227: {
228: Return (0x00)
229: }
230: }
231:
232: /* PIIX3 ISA bridge */
233: Device (ISA) {
234: Name (_ADR, 0x00010000)
235:
236: /* PIIX PCI to ISA irq remapping */
237: OperationRegion (P40C, PCI_Config, 0x60, 0x04)
238:
239: /* Real-time clock */
240: Device (RTC)
241: {
242: Name (_HID, EisaId ("PNP0B00"))
243: Name (_CRS, ResourceTemplate ()
244: {
245: IO (Decode16, 0x0070, 0x0070, 0x10, 0x02)
246: IRQNoFlags () {8}
247: IO (Decode16, 0x0072, 0x0072, 0x02, 0x06)
248: })
249: }
250:
251: /* Keyboard seems to be important for WinXP install */
252: Device (KBD)
253: {
254: Name (_HID, EisaId ("PNP0303"))
255: Method (_STA, 0, NotSerialized)
256: {
257: Return (0x0f)
258: }
259:
260: Method (_CRS, 0, NotSerialized)
261: {
262: Name (TMP, ResourceTemplate ()
263: {
264: IO (Decode16,
265: 0x0060, // Address Range Minimum
266: 0x0060, // Address Range Maximum
267: 0x01, // Address Alignment
268: 0x01, // Address Length
269: )
270: IO (Decode16,
271: 0x0064, // Address Range Minimum
272: 0x0064, // Address Range Maximum
273: 0x01, // Address Alignment
274: 0x01, // Address Length
275: )
276: IRQNoFlags ()
277: {1}
278: })
279: Return (TMP)
280: }
281: }
282:
283: /* PS/2 mouse */
284: Device (MOU)
285: {
286: Name (_HID, EisaId ("PNP0F13"))
287: Method (_STA, 0, NotSerialized)
288: {
289: Return (0x0f)
290: }
291:
292: Method (_CRS, 0, NotSerialized)
293: {
294: Name (TMP, ResourceTemplate ()
295: {
296: IRQNoFlags () {12}
297: })
298: Return (TMP)
299: }
300: }
301:
302: /* PS/2 floppy controller */
303: Device (FDC0)
304: {
305: Name (_HID, EisaId ("PNP0700"))
306: Method (_STA, 0, NotSerialized)
307: {
308: Return (0x0F)
309: }
310: Method (_CRS, 0, NotSerialized)
311: {
312: Name (BUF0, ResourceTemplate ()
313: {
314: IO (Decode16, 0x03F2, 0x03F2, 0x00, 0x04)
315: IO (Decode16, 0x03F7, 0x03F7, 0x00, 0x01)
316: IRQNoFlags () {6}
317: DMA (Compatibility, NotBusMaster, Transfer8) {2}
318: })
319: Return (BUF0)
320: }
321: }
322:
323: /* Parallel port */
324: Device (LPT)
325: {
326: Name (_HID, EisaId ("PNP0400"))
327: Method (_STA, 0, NotSerialized)
328: {
329: Store (\_SB.PCI0.PX13.DRSA, Local0)
330: And (Local0, 0x80000000, Local0)
331: If (LEqual (Local0, 0))
332: {
333: Return (0x00)
334: }
335: Else
336: {
337: Return (0x0F)
338: }
339: }
340: Method (_CRS, 0, NotSerialized)
341: {
342: Name (BUF0, ResourceTemplate ()
343: {
344: IO (Decode16, 0x0378, 0x0378, 0x08, 0x08)
345: IRQNoFlags () {7}
346: })
347: Return (BUF0)
348: }
349: }
350:
351: /* Serial Ports */
352: Device (COM1)
353: {
354: Name (_HID, EisaId ("PNP0501"))
355: Name (_UID, 0x01)
356: Method (_STA, 0, NotSerialized)
357: {
358: Store (\_SB.PCI0.PX13.DRSC, Local0)
359: And (Local0, 0x08000000, Local0)
360: If (LEqual (Local0, 0))
361: {
362: Return (0x00)
363: }
364: Else
365: {
366: Return (0x0F)
367: }
368: }
369: Method (_CRS, 0, NotSerialized)
370: {
371: Name (BUF0, ResourceTemplate ()
372: {
373: IO (Decode16, 0x03F8, 0x03F8, 0x00, 0x08)
374: IRQNoFlags () {4}
375: })
376: Return (BUF0)
377: }
378: }
379:
380: Device (COM2)
381: {
382: Name (_HID, EisaId ("PNP0501"))
383: Name (_UID, 0x02)
384: Method (_STA, 0, NotSerialized)
385: {
386: Store (\_SB.PCI0.PX13.DRSC, Local0)
387: And (Local0, 0x80000000, Local0)
388: If (LEqual (Local0, 0))
389: {
390: Return (0x00)
391: }
392: Else
393: {
394: Return (0x0F)
395: }
396: }
397: Method (_CRS, 0, NotSerialized)
398: {
399: Name (BUF0, ResourceTemplate ()
400: {
401: IO (Decode16, 0x02F8, 0x02F8, 0x00, 0x08)
402: IRQNoFlags () {3}
403: })
404: Return (BUF0)
405: }
406: }
407: }
408:
409: /* PIIX4 PM */
410: Device (PX13) {
411: Name (_ADR, 0x00010003)
412:
413: OperationRegion (P13C, PCI_Config, 0x5c, 0x24)
414: Field (P13C, DWordAcc, NoLock, Preserve)
415: {
416: DRSA, 32,
417: DRSB, 32,
418: DRSC, 32,
419: DRSE, 32,
420: DRSF, 32,
421: DRSG, 32,
422: DRSH, 32,
423: DRSI, 32,
424: DRSJ, 32
425: }
426: }
427: }
428:
429: /* PCI IRQs */
430: Scope(\_SB) {
431: Field (\_SB.PCI0.ISA.P40C, ByteAcc, NoLock, Preserve)
432: {
433: PRQ0, 8,
434: PRQ1, 8,
435: PRQ2, 8,
436: PRQ3, 8
437: }
438:
439: Device(LNKA){
440: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
441: Name(_UID, 1)
442: Name(_PRS, ResourceTemplate(){
443: Interrupt (, Level, ActiveHigh, Shared)
444: { 5, 10, 11 }
445: })
446: Method (_STA, 0, NotSerialized)
447: {
448: Store (0x0B, Local0)
449: If (And (0x80, PRQ0, Local1))
450: {
451: Store (0x09, Local0)
452: }
453: Return (Local0)
454: }
455: Method (_DIS, 0, NotSerialized)
456: {
457: Or (PRQ0, 0x80, PRQ0)
458: }
459: Method (_CRS, 0, NotSerialized)
460: {
461: Name (PRR0, ResourceTemplate ()
462: {
463: Interrupt (, Level, ActiveHigh, Shared)
464: {1}
465: })
466: CreateDWordField (PRR0, 0x05, TMP)
467: Store (PRQ0, Local0)
468: If (LLess (Local0, 0x80))
469: {
470: Store (Local0, TMP)
471: }
472: Else
473: {
474: Store (Zero, TMP)
475: }
476: Return (PRR0)
477: }
478: Method (_SRS, 1, NotSerialized)
479: {
480: CreateDWordField (Arg0, 0x05, TMP)
481: Store (TMP, PRQ0)
482: }
483: }
484: Device(LNKB){
485: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
486: Name(_UID, 2)
487: Name(_PRS, ResourceTemplate(){
488: Interrupt (, Level, ActiveHigh, Shared)
489: { 5, 10, 11 }
490: })
491: Method (_STA, 0, NotSerialized)
492: {
493: Store (0x0B, Local0)
494: If (And (0x80, PRQ1, Local1))
495: {
496: Store (0x09, Local0)
497: }
498: Return (Local0)
499: }
500: Method (_DIS, 0, NotSerialized)
501: {
502: Or (PRQ1, 0x80, PRQ1)
503: }
504: Method (_CRS, 0, NotSerialized)
505: {
506: Name (PRR0, ResourceTemplate ()
507: {
508: Interrupt (, Level, ActiveHigh, Shared)
509: {1}
510: })
511: CreateDWordField (PRR0, 0x05, TMP)
512: Store (PRQ1, Local0)
513: If (LLess (Local0, 0x80))
514: {
515: Store (Local0, TMP)
516: }
517: Else
518: {
519: Store (Zero, TMP)
520: }
521: Return (PRR0)
522: }
523: Method (_SRS, 1, NotSerialized)
524: {
525: CreateDWordField (Arg0, 0x05, TMP)
526: Store (TMP, PRQ1)
527: }
528: }
529: Device(LNKC){
530: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
531: Name(_UID, 3)
532: Name(_PRS, ResourceTemplate(){
533: Interrupt (, Level, ActiveHigh, Shared)
534: { 5, 10, 11 }
535: })
536: Method (_STA, 0, NotSerialized)
537: {
538: Store (0x0B, Local0)
539: If (And (0x80, PRQ2, Local1))
540: {
541: Store (0x09, Local0)
542: }
543: Return (Local0)
544: }
545: Method (_DIS, 0, NotSerialized)
546: {
547: Or (PRQ2, 0x80, PRQ2)
548: }
549: Method (_CRS, 0, NotSerialized)
550: {
551: Name (PRR0, ResourceTemplate ()
552: {
553: Interrupt (, Level, ActiveHigh, Shared)
554: {1}
555: })
556: CreateDWordField (PRR0, 0x05, TMP)
557: Store (PRQ2, Local0)
558: If (LLess (Local0, 0x80))
559: {
560: Store (Local0, TMP)
561: }
562: Else
563: {
564: Store (Zero, TMP)
565: }
566: Return (PRR0)
567: }
568: Method (_SRS, 1, NotSerialized)
569: {
570: CreateDWordField (Arg0, 0x05, TMP)
571: Store (TMP, PRQ2)
572: }
573: }
574: Device(LNKD){
575: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
576: Name(_UID, 4)
577: Name(_PRS, ResourceTemplate(){
578: Interrupt (, Level, ActiveHigh, Shared)
579: { 5, 10, 11 }
580: })
581: Method (_STA, 0, NotSerialized)
582: {
583: Store (0x0B, Local0)
584: If (And (0x80, PRQ3, Local1))
585: {
586: Store (0x09, Local0)
587: }
588: Return (Local0)
589: }
590: Method (_DIS, 0, NotSerialized)
591: {
592: Or (PRQ3, 0x80, PRQ3)
593: }
594: Method (_CRS, 0, NotSerialized)
595: {
596: Name (PRR0, ResourceTemplate ()
597: {
598: Interrupt (, Level, ActiveHigh, Shared)
599: {1}
600: })
601: CreateDWordField (PRR0, 0x05, TMP)
602: Store (PRQ3, Local0)
603: If (LLess (Local0, 0x80))
604: {
605: Store (Local0, TMP)
606: }
607: Else
608: {
609: Store (Zero, TMP)
610: }
611: Return (PRR0)
612: }
613: Method (_SRS, 1, NotSerialized)
614: {
615: CreateDWordField (Arg0, 0x05, TMP)
616: Store (TMP, PRQ3)
617: }
618: }
619: }
620:
621: /*
622: * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes:
623: * must match piix4 emulation.
624: */
625: Name (\_S3, Package (0x04)
626: {
627: 0x01, /* PM1a_CNT.SLP_TYP */
628: 0x01, /* PM1b_CNT.SLP_TYP */
629: Zero, /* reserved */
630: Zero /* reserved */
631: })
632: Name (\_S4, Package (0x04)
633: {
634: Zero, /* PM1a_CNT.SLP_TYP */
635: Zero, /* PM1b_CNT.SLP_TYP */
636: Zero, /* reserved */
637: Zero /* reserved */
638: })
639: Name (\_S5, Package (0x04)
640: {
641: Zero, /* PM1a_CNT.SLP_TYP */
642: Zero, /* PM1b_CNT.SLP_TYP */
643: Zero, /* reserved */
644: Zero /* reserved */
645: })
646:
647: Scope (\_GPE)
648: {
649: Name(_HID, "ACPI0006")
650:
651: Method(_L00) {
652: Return(0x01)
653: }
654:
655: #define gen_pci_hotplug(nr) \
656: If (And(\_SB.PCI0.PCIU, ShiftLeft(1, nr))) { \
657: Notify(\_SB.PCI0.S##nr, 1) \
658: } \
659: If (And(\_SB.PCI0.PCID, ShiftLeft(1, nr))) { \
660: Notify(\_SB.PCI0.S##nr, 3) \
661: }
662:
663: Method(_L01) {
664: gen_pci_hotplug(1)
665: gen_pci_hotplug(2)
666: gen_pci_hotplug(3)
667: gen_pci_hotplug(4)
668: gen_pci_hotplug(5)
669: gen_pci_hotplug(6)
670: gen_pci_hotplug(7)
671: gen_pci_hotplug(8)
672: gen_pci_hotplug(9)
673: gen_pci_hotplug(10)
674: gen_pci_hotplug(11)
675: gen_pci_hotplug(12)
676: gen_pci_hotplug(13)
677: gen_pci_hotplug(14)
678: gen_pci_hotplug(15)
679: gen_pci_hotplug(16)
680: gen_pci_hotplug(17)
681: gen_pci_hotplug(18)
682: gen_pci_hotplug(19)
683: gen_pci_hotplug(20)
684: gen_pci_hotplug(21)
685: gen_pci_hotplug(22)
686: gen_pci_hotplug(23)
687: gen_pci_hotplug(24)
688: gen_pci_hotplug(25)
689: gen_pci_hotplug(26)
690: gen_pci_hotplug(27)
691: gen_pci_hotplug(28)
692: gen_pci_hotplug(29)
693: gen_pci_hotplug(30)
694: gen_pci_hotplug(31)
695:
696: Return (0x01)
697:
698: }
699: Method(_L02) {
700: Return(0x01)
701: }
702: Method(_L03) {
703: Return(0x01)
704: }
705: Method(_L04) {
706: Return(0x01)
707: }
708: Method(_L05) {
709: Return(0x01)
710: }
711: Method(_L06) {
712: Return(0x01)
713: }
714: Method(_L07) {
715: Return(0x01)
716: }
717: Method(_L08) {
718: Return(0x01)
719: }
720: Method(_L09) {
721: Return(0x01)
722: }
723: Method(_L0A) {
724: Return(0x01)
725: }
726: Method(_L0B) {
727: Return(0x01)
728: }
729: Method(_L0C) {
730: Return(0x01)
731: }
732: Method(_L0D) {
733: Return(0x01)
734: }
735: Method(_L0E) {
736: Return(0x01)
737: }
738: Method(_L0F) {
739: Return(0x01)
740: }
741: }
742:
743: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.