|
|
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 */
1.1.1.4 root 31: OperationRegion (DBG, SystemIO, 0x0402, 0x01)
32: Field (DBG, ByteAcc, NoLock, Preserve)
1.1 root 33: {
1.1.1.4 root 34: DBGB, 8,
1.1 root 35: }
36:
1.1.1.4 root 37: /* Debug method - use this method to send output to the QEMU
38: * BIOS debug port. This method handles strings, integers,
39: * and buffers. For example: DBUG("abc") DBUG(0x123) */
40: Method(DBUG, 1) {
41: ToHexString(Arg0, Local0)
42: ToBuffer(Local0, Local0)
43: Subtract(SizeOf(Local0), 1, Local1)
44: Store(Zero, Local2)
45: While (LLess(Local2, Local1)) {
46: Store(DerefOf(Index(Local0, Local2)), DBGB)
47: Increment(Local2)
48: }
49: Store(0x0A, DBGB)
50: }
51: }
1.1 root 52:
53: /* PCI Bus definition */
54: Scope(\_SB) {
55: Device(PCI0) {
56: Name (_HID, EisaId ("PNP0A03"))
57: Name (_ADR, 0x00)
58: Name (_UID, 1)
59: Name(_PRT, Package() {
60: /* PCI IRQ routing table, example from ACPI 2.0a specification,
61: section 6.2.8.1 */
62: /* Note: we provide the same info as the PCI routing
63: table of the Bochs BIOS */
64: #define prt_slot(nr, lnk0, lnk1, lnk2, lnk3) \
65: Package() { nr##ffff, 0, lnk0, 0 }, \
66: Package() { nr##ffff, 1, lnk1, 0 }, \
67: Package() { nr##ffff, 2, lnk2, 0 }, \
68: Package() { nr##ffff, 3, lnk3, 0 }
69:
70: #define prt_slot0(nr) prt_slot(nr, LNKD, LNKA, LNKB, LNKC)
71: #define prt_slot1(nr) prt_slot(nr, LNKA, LNKB, LNKC, LNKD)
72: #define prt_slot2(nr) prt_slot(nr, LNKB, LNKC, LNKD, LNKA)
73: #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB)
74: prt_slot0(0x0000),
1.1.1.2 root 75: /* Device 1 is power mgmt device, and can only use irq 9 */
1.1.1.3 root 76: Package() { 0x0001ffff, 0, LNKS, 0 },
1.1.1.2 root 77: Package() { 0x0001ffff, 1, LNKB, 0 },
78: Package() { 0x0001ffff, 2, LNKC, 0 },
79: Package() { 0x0001ffff, 3, LNKD, 0 },
1.1 root 80: prt_slot2(0x0002),
81: prt_slot3(0x0003),
82: prt_slot0(0x0004),
83: prt_slot1(0x0005),
84: prt_slot2(0x0006),
85: prt_slot3(0x0007),
86: prt_slot0(0x0008),
87: prt_slot1(0x0009),
88: prt_slot2(0x000a),
89: prt_slot3(0x000b),
90: prt_slot0(0x000c),
91: prt_slot1(0x000d),
92: prt_slot2(0x000e),
93: prt_slot3(0x000f),
94: prt_slot0(0x0010),
95: prt_slot1(0x0011),
96: prt_slot2(0x0012),
97: prt_slot3(0x0013),
98: prt_slot0(0x0014),
99: prt_slot1(0x0015),
100: prt_slot2(0x0016),
101: prt_slot3(0x0017),
102: prt_slot0(0x0018),
103: prt_slot1(0x0019),
104: prt_slot2(0x001a),
105: prt_slot3(0x001b),
106: prt_slot0(0x001c),
107: prt_slot1(0x001d),
108: prt_slot2(0x001e),
109: prt_slot3(0x001f),
110: })
111:
112: OperationRegion(PCST, SystemIO, 0xae00, 0x08)
113: Field (PCST, DWordAcc, NoLock, WriteAsZeros)
114: {
115: PCIU, 32,
116: PCID, 32,
117: }
118:
119: OperationRegion(SEJ, SystemIO, 0xae08, 0x04)
120: Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
121: {
122: B0EJ, 32,
123: }
124:
1.1.1.4 root 125: OperationRegion(RMVC, SystemIO, 0xae0c, 0x04)
126: Field(RMVC, DWordAcc, NoLock, WriteAsZeros)
127: {
128: PCRM, 32,
129: }
130:
1.1 root 131: #define hotplug_slot(name, nr) \
132: Device (S##name) { \
133: Name (_ADR, nr##0000) \
134: Method (_EJ0,1) { \
135: Store(ShiftLeft(1, nr), B0EJ) \
136: Return (0x0) \
137: } \
138: Name (_SUN, name) \
139: }
140:
141: hotplug_slot(1, 0x0001)
142: hotplug_slot(2, 0x0002)
143: hotplug_slot(3, 0x0003)
144: hotplug_slot(4, 0x0004)
145: hotplug_slot(5, 0x0005)
146: hotplug_slot(6, 0x0006)
147: hotplug_slot(7, 0x0007)
148: hotplug_slot(8, 0x0008)
149: hotplug_slot(9, 0x0009)
150: hotplug_slot(10, 0x000a)
151: hotplug_slot(11, 0x000b)
152: hotplug_slot(12, 0x000c)
153: hotplug_slot(13, 0x000d)
154: hotplug_slot(14, 0x000e)
155: hotplug_slot(15, 0x000f)
156: hotplug_slot(16, 0x0010)
157: hotplug_slot(17, 0x0011)
158: hotplug_slot(18, 0x0012)
159: hotplug_slot(19, 0x0013)
160: hotplug_slot(20, 0x0014)
161: hotplug_slot(21, 0x0015)
162: hotplug_slot(22, 0x0016)
163: hotplug_slot(23, 0x0017)
164: hotplug_slot(24, 0x0018)
165: hotplug_slot(25, 0x0019)
166: hotplug_slot(26, 0x001a)
167: hotplug_slot(27, 0x001b)
168: hotplug_slot(28, 0x001c)
169: hotplug_slot(29, 0x001d)
170: hotplug_slot(30, 0x001e)
171: hotplug_slot(31, 0x001f)
172:
173: Name (_CRS, ResourceTemplate ()
174: {
175: WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
176: 0x0000, // Address Space Granularity
177: 0x0000, // Address Range Minimum
178: 0x00FF, // Address Range Maximum
179: 0x0000, // Address Translation Offset
180: 0x0100, // Address Length
181: ,, )
182: IO (Decode16,
183: 0x0CF8, // Address Range Minimum
184: 0x0CF8, // Address Range Maximum
185: 0x01, // Address Alignment
186: 0x08, // Address Length
187: )
188: WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
189: 0x0000, // Address Space Granularity
190: 0x0000, // Address Range Minimum
191: 0x0CF7, // Address Range Maximum
192: 0x0000, // Address Translation Offset
193: 0x0CF8, // Address Length
194: ,, , TypeStatic)
195: WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
196: 0x0000, // Address Space Granularity
197: 0x0D00, // Address Range Minimum
198: 0xFFFF, // Address Range Maximum
199: 0x0000, // Address Translation Offset
200: 0xF300, // Address Length
201: ,, , TypeStatic)
202: DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
203: 0x00000000, // Address Space Granularity
204: 0x000A0000, // Address Range Minimum
205: 0x000BFFFF, // Address Range Maximum
206: 0x00000000, // Address Translation Offset
207: 0x00020000, // Address Length
208: ,, , AddressRangeMemory, TypeStatic)
209: DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
210: 0x00000000, // Address Space Granularity
211: 0xE0000000, // Address Range Minimum
212: 0xFEBFFFFF, // Address Range Maximum
213: 0x00000000, // Address Translation Offset
214: 0x1EC00000, // Address Length
215: ,, , AddressRangeMemory, TypeStatic)
216: })
217: }
218:
219: Device(HPET) {
220: Name(_HID, EISAID("PNP0103"))
221: Name(_UID, 0)
222: Method (_STA, 0, NotSerialized) {
223: Return(0x0F)
224: }
225: Name(_CRS, ResourceTemplate() {
226: DWordMemory(
227: ResourceConsumer, PosDecode, MinFixed, MaxFixed,
228: NonCacheable, ReadWrite,
229: 0x00000000,
230: 0xFED00000,
231: 0xFED003FF,
232: 0x00000000,
233: 0x00000400 /* 1K memory: FED00000 - FED003FF */
234: )
235: })
236: }
237: }
238:
239: Scope(\_SB.PCI0) {
240: Device (VGA) {
241: Name (_ADR, 0x00020000)
1.1.1.5 ! root 242: OperationRegion(PCIC, PCI_Config, Zero, 0x4)
! 243: Field(PCIC, DWordAcc, NoLock, Preserve) {
! 244: VEND, 32
! 245: }
1.1 root 246: Method (_S1D, 0, NotSerialized)
247: {
248: Return (0x00)
249: }
250: Method (_S2D, 0, NotSerialized)
251: {
252: Return (0x00)
253: }
254: Method (_S3D, 0, NotSerialized)
255: {
1.1.1.5 ! root 256: If (LEqual(VEND, 0x1001b36)) {
! 257: Return (0x03) // QXL
! 258: } Else {
! 259: Return (0x00)
! 260: }
1.1 root 261: }
1.1.1.4 root 262: Method(_RMV) { Return (0x00) }
1.1 root 263: }
264:
265: /* PIIX3 ISA bridge */
266: Device (ISA) {
267: Name (_ADR, 0x00010000)
1.1.1.4 root 268: Method(_RMV) { Return (0x00) }
269:
1.1 root 270:
271: /* PIIX PCI to ISA irq remapping */
272: OperationRegion (P40C, PCI_Config, 0x60, 0x04)
273:
274: /* Real-time clock */
275: Device (RTC)
276: {
277: Name (_HID, EisaId ("PNP0B00"))
278: Name (_CRS, ResourceTemplate ()
279: {
280: IO (Decode16, 0x0070, 0x0070, 0x10, 0x02)
281: IRQNoFlags () {8}
282: IO (Decode16, 0x0072, 0x0072, 0x02, 0x06)
283: })
284: }
285:
286: /* Keyboard seems to be important for WinXP install */
287: Device (KBD)
288: {
289: Name (_HID, EisaId ("PNP0303"))
290: Method (_STA, 0, NotSerialized)
291: {
292: Return (0x0f)
293: }
294:
295: Method (_CRS, 0, NotSerialized)
296: {
297: Name (TMP, ResourceTemplate ()
298: {
299: IO (Decode16,
300: 0x0060, // Address Range Minimum
301: 0x0060, // Address Range Maximum
302: 0x01, // Address Alignment
303: 0x01, // Address Length
304: )
305: IO (Decode16,
306: 0x0064, // Address Range Minimum
307: 0x0064, // Address Range Maximum
308: 0x01, // Address Alignment
309: 0x01, // Address Length
310: )
311: IRQNoFlags ()
312: {1}
313: })
314: Return (TMP)
315: }
316: }
317:
318: /* PS/2 mouse */
319: Device (MOU)
320: {
321: Name (_HID, EisaId ("PNP0F13"))
322: Method (_STA, 0, NotSerialized)
323: {
324: Return (0x0f)
325: }
326:
327: Method (_CRS, 0, NotSerialized)
328: {
329: Name (TMP, ResourceTemplate ()
330: {
331: IRQNoFlags () {12}
332: })
333: Return (TMP)
334: }
335: }
336:
337: /* PS/2 floppy controller */
338: Device (FDC0)
339: {
340: Name (_HID, EisaId ("PNP0700"))
341: Method (_STA, 0, NotSerialized)
342: {
343: Return (0x0F)
344: }
345: Method (_CRS, 0, NotSerialized)
346: {
347: Name (BUF0, ResourceTemplate ()
348: {
349: IO (Decode16, 0x03F2, 0x03F2, 0x00, 0x04)
350: IO (Decode16, 0x03F7, 0x03F7, 0x00, 0x01)
351: IRQNoFlags () {6}
352: DMA (Compatibility, NotBusMaster, Transfer8) {2}
353: })
354: Return (BUF0)
355: }
356: }
357:
358: /* Parallel port */
359: Device (LPT)
360: {
361: Name (_HID, EisaId ("PNP0400"))
362: Method (_STA, 0, NotSerialized)
363: {
364: Store (\_SB.PCI0.PX13.DRSA, Local0)
365: And (Local0, 0x80000000, Local0)
366: If (LEqual (Local0, 0))
367: {
368: Return (0x00)
369: }
370: Else
371: {
372: Return (0x0F)
373: }
374: }
375: Method (_CRS, 0, NotSerialized)
376: {
377: Name (BUF0, ResourceTemplate ()
378: {
379: IO (Decode16, 0x0378, 0x0378, 0x08, 0x08)
380: IRQNoFlags () {7}
381: })
382: Return (BUF0)
383: }
384: }
385:
386: /* Serial Ports */
387: Device (COM1)
388: {
389: Name (_HID, EisaId ("PNP0501"))
390: Name (_UID, 0x01)
391: Method (_STA, 0, NotSerialized)
392: {
393: Store (\_SB.PCI0.PX13.DRSC, Local0)
394: And (Local0, 0x08000000, Local0)
395: If (LEqual (Local0, 0))
396: {
397: Return (0x00)
398: }
399: Else
400: {
401: Return (0x0F)
402: }
403: }
404: Method (_CRS, 0, NotSerialized)
405: {
406: Name (BUF0, ResourceTemplate ()
407: {
408: IO (Decode16, 0x03F8, 0x03F8, 0x00, 0x08)
409: IRQNoFlags () {4}
410: })
411: Return (BUF0)
412: }
413: }
414:
415: Device (COM2)
416: {
417: Name (_HID, EisaId ("PNP0501"))
418: Name (_UID, 0x02)
419: Method (_STA, 0, NotSerialized)
420: {
421: Store (\_SB.PCI0.PX13.DRSC, Local0)
422: And (Local0, 0x80000000, Local0)
423: If (LEqual (Local0, 0))
424: {
425: Return (0x00)
426: }
427: Else
428: {
429: Return (0x0F)
430: }
431: }
432: Method (_CRS, 0, NotSerialized)
433: {
434: Name (BUF0, ResourceTemplate ()
435: {
436: IO (Decode16, 0x02F8, 0x02F8, 0x00, 0x08)
437: IRQNoFlags () {3}
438: })
439: Return (BUF0)
440: }
441: }
442: }
443:
444: /* PIIX4 PM */
445: Device (PX13) {
446: Name (_ADR, 0x00010003)
447:
448: OperationRegion (P13C, PCI_Config, 0x5c, 0x24)
449: Field (P13C, DWordAcc, NoLock, Preserve)
450: {
451: DRSA, 32,
452: DRSB, 32,
453: DRSC, 32,
454: DRSE, 32,
455: DRSF, 32,
456: DRSG, 32,
457: DRSH, 32,
458: DRSI, 32,
459: DRSJ, 32
460: }
461: }
1.1.1.4 root 462:
463: #define gen_pci_device(name, nr) \
464: Device(SL##name) { \
465: Name (_ADR, nr##0000) \
466: Method (_RMV) { \
467: If (And(\_SB.PCI0.PCRM, ShiftLeft(1, nr))) { \
468: Return (0x1) \
469: } \
470: Return (0x0) \
471: } \
472: Name (_SUN, name) \
473: }
474:
475: /* VGA (slot 1) and ISA bus (slot 2) defined above */
476: gen_pci_device(3, 0x0003)
477: gen_pci_device(4, 0x0004)
478: gen_pci_device(5, 0x0005)
479: gen_pci_device(6, 0x0006)
480: gen_pci_device(7, 0x0007)
481: gen_pci_device(8, 0x0008)
482: gen_pci_device(9, 0x0009)
483: gen_pci_device(10, 0x000a)
484: gen_pci_device(11, 0x000b)
485: gen_pci_device(12, 0x000c)
486: gen_pci_device(13, 0x000d)
487: gen_pci_device(14, 0x000e)
488: gen_pci_device(15, 0x000f)
489: gen_pci_device(16, 0x0010)
490: gen_pci_device(17, 0x0011)
491: gen_pci_device(18, 0x0012)
492: gen_pci_device(19, 0x0013)
493: gen_pci_device(20, 0x0014)
494: gen_pci_device(21, 0x0015)
495: gen_pci_device(22, 0x0016)
496: gen_pci_device(23, 0x0017)
497: gen_pci_device(24, 0x0018)
498: gen_pci_device(25, 0x0019)
499: gen_pci_device(26, 0x001a)
500: gen_pci_device(27, 0x001b)
501: gen_pci_device(28, 0x001c)
502: gen_pci_device(29, 0x001d)
503: gen_pci_device(30, 0x001e)
504: gen_pci_device(31, 0x001f)
1.1 root 505: }
506:
507: /* PCI IRQs */
508: Scope(\_SB) {
509: Field (\_SB.PCI0.ISA.P40C, ByteAcc, NoLock, Preserve)
510: {
511: PRQ0, 8,
512: PRQ1, 8,
513: PRQ2, 8,
514: PRQ3, 8
515: }
516:
517: Device(LNKA){
518: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
519: Name(_UID, 1)
520: Name(_PRS, ResourceTemplate(){
521: Interrupt (, Level, ActiveHigh, Shared)
522: { 5, 10, 11 }
523: })
524: Method (_STA, 0, NotSerialized)
525: {
526: Store (0x0B, Local0)
527: If (And (0x80, PRQ0, Local1))
528: {
529: Store (0x09, Local0)
530: }
531: Return (Local0)
532: }
533: Method (_DIS, 0, NotSerialized)
534: {
535: Or (PRQ0, 0x80, PRQ0)
536: }
537: Method (_CRS, 0, NotSerialized)
538: {
539: Name (PRR0, ResourceTemplate ()
540: {
541: Interrupt (, Level, ActiveHigh, Shared)
542: {1}
543: })
544: CreateDWordField (PRR0, 0x05, TMP)
545: Store (PRQ0, Local0)
546: If (LLess (Local0, 0x80))
547: {
548: Store (Local0, TMP)
549: }
550: Else
551: {
552: Store (Zero, TMP)
553: }
554: Return (PRR0)
555: }
556: Method (_SRS, 1, NotSerialized)
557: {
558: CreateDWordField (Arg0, 0x05, TMP)
559: Store (TMP, PRQ0)
560: }
561: }
562: Device(LNKB){
563: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
564: Name(_UID, 2)
565: Name(_PRS, ResourceTemplate(){
566: Interrupt (, Level, ActiveHigh, Shared)
567: { 5, 10, 11 }
568: })
569: Method (_STA, 0, NotSerialized)
570: {
571: Store (0x0B, Local0)
572: If (And (0x80, PRQ1, Local1))
573: {
574: Store (0x09, Local0)
575: }
576: Return (Local0)
577: }
578: Method (_DIS, 0, NotSerialized)
579: {
580: Or (PRQ1, 0x80, PRQ1)
581: }
582: Method (_CRS, 0, NotSerialized)
583: {
584: Name (PRR0, ResourceTemplate ()
585: {
586: Interrupt (, Level, ActiveHigh, Shared)
587: {1}
588: })
589: CreateDWordField (PRR0, 0x05, TMP)
590: Store (PRQ1, Local0)
591: If (LLess (Local0, 0x80))
592: {
593: Store (Local0, TMP)
594: }
595: Else
596: {
597: Store (Zero, TMP)
598: }
599: Return (PRR0)
600: }
601: Method (_SRS, 1, NotSerialized)
602: {
603: CreateDWordField (Arg0, 0x05, TMP)
604: Store (TMP, PRQ1)
605: }
606: }
607: Device(LNKC){
608: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
609: Name(_UID, 3)
610: Name(_PRS, ResourceTemplate(){
611: Interrupt (, Level, ActiveHigh, Shared)
612: { 5, 10, 11 }
613: })
614: Method (_STA, 0, NotSerialized)
615: {
616: Store (0x0B, Local0)
617: If (And (0x80, PRQ2, Local1))
618: {
619: Store (0x09, Local0)
620: }
621: Return (Local0)
622: }
623: Method (_DIS, 0, NotSerialized)
624: {
625: Or (PRQ2, 0x80, PRQ2)
626: }
627: Method (_CRS, 0, NotSerialized)
628: {
629: Name (PRR0, ResourceTemplate ()
630: {
631: Interrupt (, Level, ActiveHigh, Shared)
632: {1}
633: })
634: CreateDWordField (PRR0, 0x05, TMP)
635: Store (PRQ2, Local0)
636: If (LLess (Local0, 0x80))
637: {
638: Store (Local0, TMP)
639: }
640: Else
641: {
642: Store (Zero, TMP)
643: }
644: Return (PRR0)
645: }
646: Method (_SRS, 1, NotSerialized)
647: {
648: CreateDWordField (Arg0, 0x05, TMP)
649: Store (TMP, PRQ2)
650: }
651: }
652: Device(LNKD){
653: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
654: Name(_UID, 4)
655: Name(_PRS, ResourceTemplate(){
656: Interrupt (, Level, ActiveHigh, Shared)
657: { 5, 10, 11 }
658: })
659: Method (_STA, 0, NotSerialized)
660: {
661: Store (0x0B, Local0)
662: If (And (0x80, PRQ3, Local1))
663: {
664: Store (0x09, Local0)
665: }
666: Return (Local0)
667: }
668: Method (_DIS, 0, NotSerialized)
669: {
670: Or (PRQ3, 0x80, PRQ3)
671: }
672: Method (_CRS, 0, NotSerialized)
673: {
674: Name (PRR0, ResourceTemplate ()
675: {
676: Interrupt (, Level, ActiveHigh, Shared)
677: {1}
678: })
679: CreateDWordField (PRR0, 0x05, TMP)
680: Store (PRQ3, Local0)
681: If (LLess (Local0, 0x80))
682: {
683: Store (Local0, TMP)
684: }
685: Else
686: {
687: Store (Zero, TMP)
688: }
689: Return (PRR0)
690: }
691: Method (_SRS, 1, NotSerialized)
692: {
693: CreateDWordField (Arg0, 0x05, TMP)
694: Store (TMP, PRQ3)
695: }
696: }
1.1.1.3 root 697: Device(LNKS){
698: Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
699: Name(_UID, 5)
700: Name(_PRS, ResourceTemplate(){
701: Interrupt (, Level, ActiveHigh, Shared)
702: { 9 }
703: })
704: Method (_STA, 0, NotSerialized)
705: {
706: Store (0x0B, Local0)
707: If (And (0x80, PRQ0, Local1))
708: {
709: Store (0x09, Local0)
710: }
711: Return (Local0)
712: }
713: Method (_DIS, 0, NotSerialized)
714: {
715: Or (PRQ0, 0x80, PRQ0)
716: }
717: Method (_CRS, 0, NotSerialized)
718: {
719: Name (PRR0, ResourceTemplate ()
720: {
721: Interrupt (, Level, ActiveHigh, Shared)
722: {9}
723: })
724: CreateDWordField (PRR0, 0x05, TMP)
725: Store (PRQ0, Local0)
726: If (LLess (Local0, 0x80))
727: {
728: Store (Local0, TMP)
729: }
730: Else
731: {
732: Store (Zero, TMP)
733: }
734: Return (PRR0)
735: }
736: }
1.1 root 737: }
738:
739: /*
740: * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes:
741: * must match piix4 emulation.
742: */
743: Name (\_S3, Package (0x04)
744: {
745: 0x01, /* PM1a_CNT.SLP_TYP */
746: 0x01, /* PM1b_CNT.SLP_TYP */
747: Zero, /* reserved */
748: Zero /* reserved */
749: })
750: Name (\_S4, Package (0x04)
751: {
752: Zero, /* PM1a_CNT.SLP_TYP */
753: Zero, /* PM1b_CNT.SLP_TYP */
754: Zero, /* reserved */
755: Zero /* reserved */
756: })
757: Name (\_S5, Package (0x04)
758: {
759: Zero, /* PM1a_CNT.SLP_TYP */
760: Zero, /* PM1b_CNT.SLP_TYP */
761: Zero, /* reserved */
762: Zero /* reserved */
763: })
764:
1.1.1.3 root 765: /* CPU hotplug */
766: Scope(\_SB) {
767: /* Objects filled in by run-time generated SSDT */
768: External(NTFY, MethodObj)
769: External(CPON, PkgObj)
770:
771: /* Methods called by run-time generated SSDT Processor objects */
772: Method (CPMA, 1, NotSerialized) {
773: // _MAT method - create an madt apic buffer
774: // Local0 = CPON flag for this cpu
775: Store(DerefOf(Index(CPON, Arg0)), Local0)
776: // Local1 = Buffer (in madt apic form) to return
777: Store(Buffer(8) {0x00, 0x08, 0x00, 0x00, 0x00, 0, 0, 0}, Local1)
778: // Update the processor id, lapic id, and enable/disable status
779: Store(Arg0, Index(Local1, 2))
780: Store(Arg0, Index(Local1, 3))
781: Store(Local0, Index(Local1, 4))
782: Return (Local1)
783: }
784: Method (CPST, 1, NotSerialized) {
785: // _STA method - return ON status of cpu
786: // Local0 = CPON flag for this cpu
787: Store(DerefOf(Index(CPON, Arg0)), Local0)
788: If (Local0) { Return(0xF) } Else { Return(0x0) }
789: }
790: Method (CPEJ, 2, NotSerialized) {
791: // _EJ0 method - eject callback
792: Sleep(200)
793: }
794:
795: /* CPU hotplug notify method */
796: OperationRegion(PRST, SystemIO, 0xaf00, 32)
797: Field (PRST, ByteAcc, NoLock, Preserve)
798: {
799: PRS, 256
800: }
801: Method(PRSC, 0) {
802: // Local5 = active cpu bitmap
803: Store (PRS, Local5)
804: // Local2 = last read byte from bitmap
805: Store (Zero, Local2)
806: // Local0 = cpuid iterator
807: Store (Zero, Local0)
808: While (LLess(Local0, SizeOf(CPON))) {
809: // Local1 = CPON flag for this cpu
810: Store(DerefOf(Index(CPON, Local0)), Local1)
811: If (And(Local0, 0x07)) {
812: // Shift down previously read bitmap byte
813: ShiftRight(Local2, 1, Local2)
814: } Else {
815: // Read next byte from cpu bitmap
816: Store(DerefOf(Index(Local5, ShiftRight(Local0, 3))), Local2)
817: }
818: // Local3 = active state for this cpu
819: Store(And(Local2, 1), Local3)
820:
821: If (LNotEqual(Local1, Local3)) {
822: // State change - update CPON with new state
823: Store(Local3, Index(CPON, Local0))
824: // Do CPU notify
825: If (LEqual(Local3, 1)) {
826: NTFY(Local0, 1)
827: } Else {
828: NTFY(Local0, 3)
829: }
830: }
831: Increment(Local0)
832: }
833: Return(One)
834: }
835: }
836:
1.1 root 837: Scope (\_GPE)
838: {
839: Name(_HID, "ACPI0006")
840:
841: Method(_L00) {
842: Return(0x01)
843: }
844:
845: #define gen_pci_hotplug(nr) \
846: If (And(\_SB.PCI0.PCIU, ShiftLeft(1, nr))) { \
847: Notify(\_SB.PCI0.S##nr, 1) \
848: } \
849: If (And(\_SB.PCI0.PCID, ShiftLeft(1, nr))) { \
850: Notify(\_SB.PCI0.S##nr, 3) \
851: }
852:
853: Method(_L01) {
854: gen_pci_hotplug(1)
855: gen_pci_hotplug(2)
856: gen_pci_hotplug(3)
857: gen_pci_hotplug(4)
858: gen_pci_hotplug(5)
859: gen_pci_hotplug(6)
860: gen_pci_hotplug(7)
861: gen_pci_hotplug(8)
862: gen_pci_hotplug(9)
863: gen_pci_hotplug(10)
864: gen_pci_hotplug(11)
865: gen_pci_hotplug(12)
866: gen_pci_hotplug(13)
867: gen_pci_hotplug(14)
868: gen_pci_hotplug(15)
869: gen_pci_hotplug(16)
870: gen_pci_hotplug(17)
871: gen_pci_hotplug(18)
872: gen_pci_hotplug(19)
873: gen_pci_hotplug(20)
874: gen_pci_hotplug(21)
875: gen_pci_hotplug(22)
876: gen_pci_hotplug(23)
877: gen_pci_hotplug(24)
878: gen_pci_hotplug(25)
879: gen_pci_hotplug(26)
880: gen_pci_hotplug(27)
881: gen_pci_hotplug(28)
882: gen_pci_hotplug(29)
883: gen_pci_hotplug(30)
884: gen_pci_hotplug(31)
885:
886: Return (0x01)
887:
888: }
889: Method(_L02) {
1.1.1.3 root 890: // CPU hotplug event
891: Return(\_SB.PRSC())
1.1 root 892: }
893: Method(_L03) {
894: Return(0x01)
895: }
896: Method(_L04) {
897: Return(0x01)
898: }
899: Method(_L05) {
900: Return(0x01)
901: }
902: Method(_L06) {
903: Return(0x01)
904: }
905: Method(_L07) {
906: Return(0x01)
907: }
908: Method(_L08) {
909: Return(0x01)
910: }
911: Method(_L09) {
912: Return(0x01)
913: }
914: Method(_L0A) {
915: Return(0x01)
916: }
917: Method(_L0B) {
918: Return(0x01)
919: }
920: Method(_L0C) {
921: Return(0x01)
922: }
923: Method(_L0D) {
924: Return(0x01)
925: }
926: Method(_L0E) {
927: Return(0x01)
928: }
929: Method(_L0F) {
930: Return(0x01)
931: }
932: }
933:
934: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.