]> git.proxmox.com Git - qemu.git/blob - hw/acpi-dsdt.dsl
audio endianness API changes (malc)
[qemu.git] / hw / acpi-dsdt.dsl
1 /*
2 * 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 "QEMU", // OEMID
24 "QEMUDSDT", // TABLE ID
25 0x1 // OEM Revision
26 )
27 {
28 Scope (\)
29 {
30 /* CMOS memory access */
31 OperationRegion (CMS, SystemIO, 0x70, 0x02)
32 Field (CMS, ByteAcc, NoLock, Preserve)
33 {
34 CMSI, 8,
35 CMSD, 8
36 }
37 Method (CMRD, 1, NotSerialized)
38 {
39 Store (Arg0, CMSI)
40 Store (CMSD, Local0)
41 Return (Local0)
42 }
43
44 /* Debug Output */
45 OperationRegion (DBG, SystemIO, 0xb044, 0x04)
46 Field (DBG, DWordAcc, NoLock, Preserve)
47 {
48 DBGL, 32,
49 }
50 }
51
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
65 // PCI Slot 0
66 Package() {0x0000ffff, 0, LNKD, 0},
67 Package() {0x0000ffff, 1, LNKA, 0},
68 Package() {0x0000ffff, 2, LNKB, 0},
69 Package() {0x0000ffff, 3, LNKC, 0},
70
71 // PCI Slot 1
72 Package() {0x0001ffff, 0, LNKA, 0},
73 Package() {0x0001ffff, 1, LNKB, 0},
74 Package() {0x0001ffff, 2, LNKC, 0},
75 Package() {0x0001ffff, 3, LNKD, 0},
76
77 // PCI Slot 2
78 Package() {0x0002ffff, 0, LNKB, 0},
79 Package() {0x0002ffff, 1, LNKC, 0},
80 Package() {0x0002ffff, 2, LNKD, 0},
81 Package() {0x0002ffff, 3, LNKA, 0},
82
83 // PCI Slot 3
84 Package() {0x0003ffff, 0, LNKC, 0},
85 Package() {0x0003ffff, 1, LNKD, 0},
86 Package() {0x0003ffff, 2, LNKA, 0},
87 Package() {0x0003ffff, 3, LNKB, 0},
88
89 // PCI Slot 4
90 Package() {0x0004ffff, 0, LNKD, 0},
91 Package() {0x0004ffff, 1, LNKA, 0},
92 Package() {0x0004ffff, 2, LNKB, 0},
93 Package() {0x0004ffff, 3, LNKC, 0},
94
95 // PCI Slot 5
96 Package() {0x0005ffff, 0, LNKA, 0},
97 Package() {0x0005ffff, 1, LNKB, 0},
98 Package() {0x0005ffff, 2, LNKC, 0},
99 Package() {0x0005ffff, 3, LNKD, 0},
100 })
101
102 Method (_CRS, 0, NotSerialized)
103 {
104 Name (MEMP, ResourceTemplate ()
105 {
106 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
107 0x0000, // Address Space Granularity
108 0x0000, // Address Range Minimum
109 0x00FF, // Address Range Maximum
110 0x0000, // Address Translation Offset
111 0x0100, // Address Length
112 ,, )
113 IO (Decode16,
114 0x0CF8, // Address Range Minimum
115 0x0CF8, // Address Range Maximum
116 0x01, // Address Alignment
117 0x08, // Address Length
118 )
119 WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
120 0x0000, // Address Space Granularity
121 0x0000, // Address Range Minimum
122 0x0CF7, // Address Range Maximum
123 0x0000, // Address Translation Offset
124 0x0CF8, // Address Length
125 ,, , TypeStatic)
126 WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
127 0x0000, // Address Space Granularity
128 0x0D00, // Address Range Minimum
129 0xFFFF, // Address Range Maximum
130 0x0000, // Address Translation Offset
131 0xF300, // Address Length
132 ,, , TypeStatic)
133 DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
134 0x00000000, // Address Space Granularity
135 0x000A0000, // Address Range Minimum
136 0x000BFFFF, // Address Range Maximum
137 0x00000000, // Address Translation Offset
138 0x00020000, // Address Length
139 ,, , AddressRangeMemory, TypeStatic)
140 DWordMemory (ResourceProducer, PosDecode, MinNotFixed, MaxFixed, NonCacheable, ReadWrite,
141 0x00000000, // Address Space Granularity
142 0x00000000, // Address Range Minimum
143 0xFEBFFFFF, // Address Range Maximum
144 0x00000000, // Address Translation Offset
145 0x00000000, // Address Length
146 ,, MEMF, AddressRangeMemory, TypeStatic)
147 })
148 CreateDWordField (MEMP, \_SB.PCI0._CRS.MEMF._MIN, PMIN)
149 CreateDWordField (MEMP, \_SB.PCI0._CRS.MEMF._MAX, PMAX)
150 CreateDWordField (MEMP, \_SB.PCI0._CRS.MEMF._LEN, PLEN)
151 /* compute available RAM */
152 Add(CMRD(0x34), ShiftLeft(CMRD(0x35), 8), Local0)
153 ShiftLeft(Local0, 16, Local0)
154 Add(Local0, 0x1000000, Local0)
155 /* update field of last region */
156 Store(Local0, PMIN)
157 Subtract (PMAX, PMIN, PLEN)
158 Increment (PLEN)
159 Return (MEMP)
160 }
161 }
162 }
163
164 Scope(\_SB.PCI0) {
165
166 /* PIIX3 ISA bridge */
167 Device (ISA) {
168 Name (_ADR, 0x00010000)
169
170 /* PIIX PCI to ISA irq remapping */
171 OperationRegion (P40C, PCI_Config, 0x60, 0x04)
172
173
174 /* Keyboard seems to be important for WinXP install */
175 Device (KBD)
176 {
177 Name (_HID, EisaId ("PNP0303"))
178 Method (_STA, 0, NotSerialized)
179 {
180 Return (0x0f)
181 }
182
183 Method (_CRS, 0, NotSerialized)
184 {
185 Name (TMP, ResourceTemplate ()
186 {
187 IO (Decode16,
188 0x0060, // Address Range Minimum
189 0x0060, // Address Range Maximum
190 0x01, // Address Alignment
191 0x01, // Address Length
192 )
193 IO (Decode16,
194 0x0064, // Address Range Minimum
195 0x0064, // Address Range Maximum
196 0x01, // Address Alignment
197 0x01, // Address Length
198 )
199 IRQNoFlags ()
200 {1}
201 })
202 Return (TMP)
203 }
204 }
205
206 /* PS/2 mouse */
207 Device (MOU)
208 {
209 Name (_HID, EisaId ("PNP0F13"))
210 Method (_STA, 0, NotSerialized)
211 {
212 Return (0x0f)
213 }
214
215 Method (_CRS, 0, NotSerialized)
216 {
217 Name (TMP, ResourceTemplate ()
218 {
219 IRQNoFlags () {12}
220 })
221 Return (TMP)
222 }
223 }
224
225 /* PS/2 floppy controller */
226 Device (FDC0)
227 {
228 Name (_HID, EisaId ("PNP0700"))
229 Method (_STA, 0, NotSerialized)
230 {
231 Return (0x0F)
232 }
233 Method (_CRS, 0, NotSerialized)
234 {
235 Name (BUF0, ResourceTemplate ()
236 {
237 IO (Decode16, 0x03F2, 0x03F2, 0x00, 0x04)
238 IO (Decode16, 0x03F7, 0x03F7, 0x00, 0x01)
239 IRQNoFlags () {6}
240 DMA (Compatibility, NotBusMaster, Transfer8) {2}
241 })
242 Return (BUF0)
243 }
244 }
245
246 /* Parallel port */
247 Device (LPT)
248 {
249 Name (_HID, EisaId ("PNP0400"))
250 Method (_STA, 0, NotSerialized)
251 {
252 Store (\_SB.PCI0.PX13.DRSA, Local0)
253 And (Local0, 0x80000000, Local0)
254 If (LEqual (Local0, 0))
255 {
256 Return (0x00)
257 }
258 Else
259 {
260 Return (0x0F)
261 }
262 }
263 Method (_CRS, 0, NotSerialized)
264 {
265 Name (BUF0, ResourceTemplate ()
266 {
267 IO (Decode16, 0x0378, 0x0378, 0x08, 0x08)
268 IRQNoFlags () {7}
269 })
270 Return (BUF0)
271 }
272 }
273
274 /* Serial Ports */
275 Device (COM1)
276 {
277 Name (_HID, EisaId ("PNP0501"))
278 Name (_UID, 0x01)
279 Method (_STA, 0, NotSerialized)
280 {
281 Store (\_SB.PCI0.PX13.DRSC, Local0)
282 And (Local0, 0x08000000, Local0)
283 If (LEqual (Local0, 0))
284 {
285 Return (0x00)
286 }
287 Else
288 {
289 Return (0x0F)
290 }
291 }
292 Method (_CRS, 0, NotSerialized)
293 {
294 Name (BUF0, ResourceTemplate ()
295 {
296 IO (Decode16, 0x03F8, 0x03F8, 0x00, 0x08)
297 IRQNoFlags () {4}
298 })
299 Return (BUF0)
300 }
301 }
302
303 Device (COM2)
304 {
305 Name (_HID, EisaId ("PNP0501"))
306 Name (_UID, 0x02)
307 Method (_STA, 0, NotSerialized)
308 {
309 Store (\_SB.PCI0.PX13.DRSC, Local0)
310 And (Local0, 0x80000000, Local0)
311 If (LEqual (Local0, 0))
312 {
313 Return (0x00)
314 }
315 Else
316 {
317 Return (0x0F)
318 }
319 }
320 Method (_CRS, 0, NotSerialized)
321 {
322 Name (BUF0, ResourceTemplate ()
323 {
324 IO (Decode16, 0x02F8, 0x02F8, 0x00, 0x08)
325 IRQNoFlags () {3}
326 })
327 Return (BUF0)
328 }
329 }
330 }
331
332 /* PIIX4 PM */
333 Device (PX13) {
334 Name (_ADR, 0x00010003)
335
336 OperationRegion (P13C, PCI_Config, 0x5c, 0x24)
337 Field (P13C, DWordAcc, NoLock, Preserve)
338 {
339 DRSA, 32,
340 DRSB, 32,
341 DRSC, 32,
342 DRSE, 32,
343 DRSF, 32,
344 DRSG, 32,
345 DRSH, 32,
346 DRSI, 32,
347 DRSJ, 32
348 }
349 }
350 }
351
352 /* PCI IRQs */
353 Scope(\_SB) {
354 Field (\_SB.PCI0.ISA.P40C, ByteAcc, NoLock, Preserve)
355 {
356 PRQ0, 8,
357 PRQ1, 8,
358 PRQ2, 8,
359 PRQ3, 8
360 }
361
362 Device(LNKA){
363 Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
364 Name(_UID, 1)
365 Name(_PRS, ResourceTemplate(){
366 IRQ (Level, ActiveLow, Shared)
367 {3,4,5,6,7,9,10,11,12}
368 })
369 Method (_STA, 0, NotSerialized)
370 {
371 Store (0x0B, Local0)
372 If (And (0x80, PRQ0, Local1))
373 {
374 Store (0x09, Local0)
375 }
376 Return (Local0)
377 }
378 Method (_DIS, 0, NotSerialized)
379 {
380 Or (PRQ0, 0x80, PRQ0)
381 }
382 Method (_CRS, 0, NotSerialized)
383 {
384 Name (PRR0, ResourceTemplate ()
385 {
386 IRQ (Level, ActiveLow, Shared)
387 {1}
388 })
389 CreateWordField (PRR0, 0x01, TMP)
390 Store (PRQ0, Local0)
391 If (LLess (Local0, 0x80))
392 {
393 ShiftLeft (One, Local0, TMP)
394 }
395 Else
396 {
397 Store (Zero, TMP)
398 }
399 Return (PRR0)
400 }
401 Method (_SRS, 1, NotSerialized)
402 {
403 CreateWordField (Arg0, 0x01, TMP)
404 FindSetRightBit (TMP, Local0)
405 Decrement (Local0)
406 Store (Local0, PRQ0)
407 }
408 }
409 Device(LNKB){
410 Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
411 Name(_UID, 2)
412 Name(_PRS, ResourceTemplate(){
413 IRQ (Level, ActiveLow, Shared)
414 {3,4,5,6,7,9,10,11,12}
415 })
416 Method (_STA, 0, NotSerialized)
417 {
418 Store (0x0B, Local0)
419 If (And (0x80, PRQ1, Local1))
420 {
421 Store (0x09, Local0)
422 }
423 Return (Local0)
424 }
425 Method (_DIS, 0, NotSerialized)
426 {
427 Or (PRQ1, 0x80, PRQ1)
428 }
429 Method (_CRS, 0, NotSerialized)
430 {
431 Name (PRR0, ResourceTemplate ()
432 {
433 IRQ (Level, ActiveLow, Shared)
434 {1}
435 })
436 CreateWordField (PRR0, 0x01, TMP)
437 Store (PRQ1, Local0)
438 If (LLess (Local0, 0x80))
439 {
440 ShiftLeft (One, Local0, TMP)
441 }
442 Else
443 {
444 Store (Zero, TMP)
445 }
446 Return (PRR0)
447 }
448 Method (_SRS, 1, NotSerialized)
449 {
450 CreateWordField (Arg0, 0x01, TMP)
451 FindSetRightBit (TMP, Local0)
452 Decrement (Local0)
453 Store (Local0, PRQ1)
454 }
455 }
456 Device(LNKC){
457 Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
458 Name(_UID, 3)
459 Name(_PRS, ResourceTemplate(){
460 IRQ (Level, ActiveLow, Shared)
461 {3,4,5,6,7,9,10,11,12}
462 })
463 Method (_STA, 0, NotSerialized)
464 {
465 Store (0x0B, Local0)
466 If (And (0x80, PRQ2, Local1))
467 {
468 Store (0x09, Local0)
469 }
470 Return (Local0)
471 }
472 Method (_DIS, 0, NotSerialized)
473 {
474 Or (PRQ2, 0x80, PRQ2)
475 }
476 Method (_CRS, 0, NotSerialized)
477 {
478 Name (PRR0, ResourceTemplate ()
479 {
480 IRQ (Level, ActiveLow, Shared)
481 {1}
482 })
483 CreateWordField (PRR0, 0x01, TMP)
484 Store (PRQ2, Local0)
485 If (LLess (Local0, 0x80))
486 {
487 ShiftLeft (One, Local0, TMP)
488 }
489 Else
490 {
491 Store (Zero, TMP)
492 }
493 Return (PRR0)
494 }
495 Method (_SRS, 1, NotSerialized)
496 {
497 CreateWordField (Arg0, 0x01, TMP)
498 FindSetRightBit (TMP, Local0)
499 Decrement (Local0)
500 Store (Local0, PRQ2)
501 }
502 }
503 Device(LNKD){
504 Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link
505 Name(_UID, 4)
506 Name(_PRS, ResourceTemplate(){
507 IRQ (Level, ActiveLow, Shared)
508 {3,4,5,6,7,9,10,11,12}
509 })
510 Method (_STA, 0, NotSerialized)
511 {
512 Store (0x0B, Local0)
513 If (And (0x80, PRQ3, Local1))
514 {
515 Store (0x09, Local0)
516 }
517 Return (Local0)
518 }
519 Method (_DIS, 0, NotSerialized)
520 {
521 Or (PRQ3, 0x80, PRQ3)
522 }
523 Method (_CRS, 0, NotSerialized)
524 {
525 Name (PRR0, ResourceTemplate ()
526 {
527 IRQ (Level, ActiveLow, Shared)
528 {1}
529 })
530 CreateWordField (PRR0, 0x01, TMP)
531 Store (PRQ3, Local0)
532 If (LLess (Local0, 0x80))
533 {
534 ShiftLeft (One, Local0, TMP)
535 }
536 Else
537 {
538 Store (Zero, TMP)
539 }
540 Return (PRR0)
541 }
542 Method (_SRS, 1, NotSerialized)
543 {
544 CreateWordField (Arg0, 0x01, TMP)
545 FindSetRightBit (TMP, Local0)
546 Decrement (Local0)
547 Store (Local0, PRQ3)
548 }
549 }
550 }
551
552 /* S5 = power off state */
553 Name (_S5, Package (4) {
554 0x00, // PM1a_CNT.SLP_TYP
555 0x00, // PM2a_CNT.SLP_TYP
556 0x00, // reserved
557 0x00, // reserved
558 })
559 }