]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/AcpiTables/Dsdt.asl
12a4f142afad7f394aa95f7c45e7933c384b3020
[mirror_edk2.git] / OvmfPkg / AcpiTables / Dsdt.asl
1 /** @file
2 Contains root level name space objects for the platform
3
4 Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are
6 licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF ", 4) {
16 //
17 // System Sleep States
18 //
19 // We build S3 and S4 with GetSuspendStates() in
20 // "OvmfPkg/AcpiPlatformDxe/Qemu.c".
21 //
22 Name (\_S0, Package () {5, 0, 0, 0}) // Working
23 Name (\_S5, Package () {0, 0, 0, 0}) // Soft Off
24
25 //
26 // System Bus
27 //
28 Scope (\_SB) {
29 //
30 // PCI Root Bridge
31 //
32 Device (PCI0) {
33 Name (_HID, EISAID ("PNP0A03"))
34 Name (_ADR, 0x00000000)
35 Name (_BBN, 0x00)
36 Name (_UID, 0x00)
37
38 //
39 // BUS, I/O, and MMIO resources
40 //
41 Name (CRES, ResourceTemplate () {
42 WORDBusNumber ( // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
43 ResourceProducer, // bit 0 of general flags is 1
44 MinFixed, // Range is fixed
45 MaxFixed, // Range is fixed
46 PosDecode, // PosDecode
47 0x0000, // Granularity
48 0x0000, // Min
49 0x00FF, // Max
50 0x0000, // Translation
51 0x0100 // Range Length = Max-Min+1
52 )
53
54 IO (Decode16, 0xCF8, 0xCF8, 0x01, 0x08) //Consumed resource (0xCF8-0xCFF)
55
56 WORDIO ( // Consumed-and-produced resource (all I/O below CF8)
57 ResourceProducer, // bit 0 of general flags is 0
58 MinFixed, // Range is fixed
59 MaxFixed, // Range is fixed
60 PosDecode,
61 EntireRange,
62 0x0000, // Granularity
63 0x0000, // Min
64 0x0CF7, // Max
65 0x0000, // Translation
66 0x0CF8 // Range Length
67 )
68
69 WORDIO ( // Consumed-and-produced resource (all I/O above CFF)
70 ResourceProducer, // bit 0 of general flags is 0
71 MinFixed, // Range is fixed
72 MaxFixed, // Range is fixed
73 PosDecode,
74 EntireRange,
75 0x0000, // Granularity
76 0x0D00, // Min
77 0xFFFF, // Max
78 0x0000, // Translation
79 0xF300 // Range Length
80 )
81
82 DWORDMEMORY ( // Descriptor for legacy VGA video RAM
83 ResourceProducer, // bit 0 of general flags is 0
84 PosDecode,
85 MinFixed, // Range is fixed
86 MaxFixed, // Range is Fixed
87 Cacheable,
88 ReadWrite,
89 0x00000000, // Granularity
90 0x000A0000, // Min
91 0x000BFFFF, // Max
92 0x00000000, // Translation
93 0x00020000 // Range Length
94 )
95
96 DWORDMEMORY ( // Descriptor for 32-bit MMIO
97 ResourceProducer, // bit 0 of general flags is 0
98 PosDecode,
99 MinFixed, // Range is fixed
100 MaxFixed, // Range is Fixed
101 NonCacheable,
102 ReadWrite,
103 0x00000000, // Granularity
104 0xF8000000, // Min
105 0xFFFBFFFF, // Max
106 0x00000000, // Translation
107 0x07FC0000, // Range Length
108 , // ResourceSourceIndex
109 , // ResourceSource
110 PW32 // DescriptorName
111 )
112 })
113
114 Name (CR64, ResourceTemplate () {
115 QWordMemory ( // Descriptor for 64-bit MMIO
116 ResourceProducer, // bit 0 of general flags is 0
117 PosDecode,
118 MinFixed, // Range is fixed
119 MaxFixed, // Range is Fixed
120 Cacheable,
121 ReadWrite,
122 0x00000000, // Granularity
123 0x8000000000, // Min
124 0xFFFFFFFFFF, // Max
125 0x00000000, // Translation
126 0x8000000000, // Range Length
127 , // ResourceSourceIndex
128 , // ResourceSource
129 PW64 // DescriptorName
130 )
131 })
132
133 Method (_CRS, 0) {
134 //
135 // see the FIRMWARE_DATA structure in "OvmfPkg/AcpiPlatformDxe/Qemu.c"
136 //
137 External (FWDT, OpRegionObj)
138 Field(FWDT, QWordAcc, NoLock, Preserve) {
139 P0S, 64, // PciWindow32.Base
140 P0E, 64, // PciWindow32.End
141 P0L, 64, // PciWindow32.Length
142 P1S, 64, // PciWindow64.Base
143 P1E, 64, // PciWindow64.End
144 P1L, 64 // PciWindow64.Length
145 }
146 Field(FWDT, DWordAcc, NoLock, Preserve) {
147 P0SL, 32, // PciWindow32.Base, low 32 bits
148 P0SH, 32, // PciWindow32.Base, high 32 bits
149 P0EL, 32, // PciWindow32.End, low 32 bits
150 P0EH, 32, // PciWindow32.End, high 32 bits
151 P0LL, 32, // PciWindow32.Length, low 32 bits
152 P0LH, 32, // PciWindow32.Length, high 32 bits
153 P1SL, 32, // PciWindow64.Base, low 32 bits
154 P1SH, 32, // PciWindow64.Base, high 32 bits
155 P1EL, 32, // PciWindow64.End, low 32 bits
156 P1EH, 32, // PciWindow64.End, high 32 bits
157 P1LL, 32, // PciWindow64.Length, low 32 bits
158 P1LH, 32 // PciWindow64.Length, high 32 bits
159 }
160
161 //
162 // fixup 32-bit PCI IO window
163 //
164 CreateDWordField (CRES, \_SB.PCI0.PW32._MIN, PS32)
165 CreateDWordField (CRES, \_SB.PCI0.PW32._MAX, PE32)
166 CreateDWordField (CRES, \_SB.PCI0.PW32._LEN, PL32)
167 Store (P0SL, PS32)
168 Store (P0EL, PE32)
169 Store (P0LL, PL32)
170
171 If (LAnd (LEqual (P1SL, 0x00), LEqual (P1SH, 0x00))) {
172 Return (CRES)
173 } Else {
174 //
175 // fixup 64-bit PCI IO window
176 //
177 CreateQWordField (CR64, \_SB.PCI0.PW64._MIN, PS64)
178 CreateQWordField (CR64, \_SB.PCI0.PW64._MAX, PE64)
179 CreateQWordField (CR64, \_SB.PCI0.PW64._LEN, PL64)
180 Store (P1S, PS64)
181 Store (P1E, PE64)
182 Store (P1L, PL64)
183
184 //
185 // add window and return result
186 //
187 ConcatenateResTemplate (CRES, CR64, Local0)
188 Return (Local0)
189 }
190 }
191
192 //
193 // PCI Interrupt Routing Table - PIC Mode Only
194 //
195 Method (_PRT, 0, NotSerialized) {
196 Return (
197 Package () {
198 //
199 // Bus 0; Devices 0 to 15
200 //
201 Package () {0x0000FFFF, 0x00, \_SB.PCI0.LPC.LNKD, 0x00},
202 Package () {0x0000FFFF, 0x01, \_SB.PCI0.LPC.LNKA, 0x00},
203 Package () {0x0000FFFF, 0x02, \_SB.PCI0.LPC.LNKB, 0x00},
204 Package () {0x0000FFFF, 0x03, \_SB.PCI0.LPC.LNKC, 0x00},
205
206 Package () {0x0001FFFF, 0x00, 0x00, 0x09},
207 //
208 // list of IRQs occupied thus far: 9
209 //
210 Package () {0x0001FFFF, 0x01, \_SB.PCI0.LPC.LNKB, 0x00},
211 Package () {0x0001FFFF, 0x02, \_SB.PCI0.LPC.LNKC, 0x00},
212 Package () {0x0001FFFF, 0x03, \_SB.PCI0.LPC.LNKD, 0x00},
213
214 Package () {0x0002FFFF, 0x00, \_SB.PCI0.LPC.LNKB, 0x00},
215 Package () {0x0002FFFF, 0x01, \_SB.PCI0.LPC.LNKC, 0x00},
216 Package () {0x0002FFFF, 0x02, \_SB.PCI0.LPC.LNKD, 0x00},
217 Package () {0x0002FFFF, 0x03, \_SB.PCI0.LPC.LNKA, 0x00},
218
219 Package () {0x0003FFFF, 0x00, \_SB.PCI0.LPC.LNKC, 0x00},
220 Package () {0x0003FFFF, 0x01, \_SB.PCI0.LPC.LNKD, 0x00},
221 Package () {0x0003FFFF, 0x02, \_SB.PCI0.LPC.LNKA, 0x00},
222 Package () {0x0003FFFF, 0x03, \_SB.PCI0.LPC.LNKB, 0x00},
223
224 Package () {0x0004FFFF, 0x00, \_SB.PCI0.LPC.LNKD, 0x00},
225 Package () {0x0004FFFF, 0x01, \_SB.PCI0.LPC.LNKA, 0x00},
226 Package () {0x0004FFFF, 0x02, \_SB.PCI0.LPC.LNKB, 0x00},
227 Package () {0x0004FFFF, 0x03, \_SB.PCI0.LPC.LNKC, 0x00},
228
229 Package () {0x0005FFFF, 0x00, \_SB.PCI0.LPC.LNKA, 0x00},
230 Package () {0x0005FFFF, 0x01, \_SB.PCI0.LPC.LNKB, 0x00},
231 Package () {0x0005FFFF, 0x02, \_SB.PCI0.LPC.LNKC, 0x00},
232 Package () {0x0005FFFF, 0x03, \_SB.PCI0.LPC.LNKD, 0x00},
233
234 Package () {0x0006FFFF, 0x00, \_SB.PCI0.LPC.LNKB, 0x00},
235 Package () {0x0006FFFF, 0x01, \_SB.PCI0.LPC.LNKC, 0x00},
236 Package () {0x0006FFFF, 0x02, \_SB.PCI0.LPC.LNKD, 0x00},
237 Package () {0x0006FFFF, 0x03, \_SB.PCI0.LPC.LNKA, 0x00},
238
239 Package () {0x0007FFFF, 0x00, \_SB.PCI0.LPC.LNKC, 0x00},
240 Package () {0x0007FFFF, 0x01, \_SB.PCI0.LPC.LNKD, 0x00},
241 Package () {0x0007FFFF, 0x02, \_SB.PCI0.LPC.LNKA, 0x00},
242 Package () {0x0007FFFF, 0x03, \_SB.PCI0.LPC.LNKB, 0x00},
243
244 Package () {0x0008FFFF, 0x00, \_SB.PCI0.LPC.LNKD, 0x00},
245 Package () {0x0008FFFF, 0x01, \_SB.PCI0.LPC.LNKA, 0x00},
246 Package () {0x0008FFFF, 0x02, \_SB.PCI0.LPC.LNKB, 0x00},
247 Package () {0x0008FFFF, 0x03, \_SB.PCI0.LPC.LNKC, 0x00},
248
249 Package () {0x0009FFFF, 0x00, \_SB.PCI0.LPC.LNKA, 0x00},
250 Package () {0x0009FFFF, 0x01, \_SB.PCI0.LPC.LNKB, 0x00},
251 Package () {0x0009FFFF, 0x02, \_SB.PCI0.LPC.LNKC, 0x00},
252 Package () {0x0009FFFF, 0x03, \_SB.PCI0.LPC.LNKD, 0x00},
253
254 Package () {0x000AFFFF, 0x00, \_SB.PCI0.LPC.LNKB, 0x00},
255 Package () {0x000AFFFF, 0x01, \_SB.PCI0.LPC.LNKC, 0x00},
256 Package () {0x000AFFFF, 0x02, \_SB.PCI0.LPC.LNKD, 0x00},
257 Package () {0x000AFFFF, 0x03, \_SB.PCI0.LPC.LNKA, 0x00},
258
259 Package () {0x000BFFFF, 0x00, \_SB.PCI0.LPC.LNKC, 0x00},
260 Package () {0x000BFFFF, 0x01, \_SB.PCI0.LPC.LNKD, 0x00},
261 Package () {0x000BFFFF, 0x02, \_SB.PCI0.LPC.LNKA, 0x00},
262 Package () {0x000BFFFF, 0x03, \_SB.PCI0.LPC.LNKB, 0x00},
263
264 Package () {0x000CFFFF, 0x00, \_SB.PCI0.LPC.LNKD, 0x00},
265 Package () {0x000CFFFF, 0x01, \_SB.PCI0.LPC.LNKA, 0x00},
266 Package () {0x000CFFFF, 0x02, \_SB.PCI0.LPC.LNKB, 0x00},
267 Package () {0x000CFFFF, 0x03, \_SB.PCI0.LPC.LNKC, 0x00},
268
269 Package () {0x000DFFFF, 0x00, \_SB.PCI0.LPC.LNKA, 0x00},
270 Package () {0x000DFFFF, 0x01, \_SB.PCI0.LPC.LNKB, 0x00},
271 Package () {0x000DFFFF, 0x02, \_SB.PCI0.LPC.LNKC, 0x00},
272 Package () {0x000DFFFF, 0x03, \_SB.PCI0.LPC.LNKD, 0x00},
273
274 Package () {0x000EFFFF, 0x00, \_SB.PCI0.LPC.LNKB, 0x00},
275 Package () {0x000EFFFF, 0x01, \_SB.PCI0.LPC.LNKC, 0x00},
276 Package () {0x000EFFFF, 0x02, \_SB.PCI0.LPC.LNKD, 0x00},
277 Package () {0x000EFFFF, 0x03, \_SB.PCI0.LPC.LNKA, 0x00},
278
279 Package () {0x000FFFFF, 0x00, \_SB.PCI0.LPC.LNKC, 0x00},
280 Package () {0x000FFFFF, 0x01, \_SB.PCI0.LPC.LNKD, 0x00},
281 Package () {0x000FFFFF, 0x02, \_SB.PCI0.LPC.LNKA, 0x00},
282 Package () {0x000FFFFF, 0x03, \_SB.PCI0.LPC.LNKB, 0x00}
283 }
284 )
285 }
286
287 //
288 // PCI to ISA Bridge (Bus 0, Device 1, Function 0)
289 // "Low Pin Count"
290 //
291 Device (LPC) {
292 Name (_ADR, 0x00010000)
293
294 //
295 // PCI Interrupt Routing Configuration Registers, PIRQRC[A:D]
296 //
297 OperationRegion (PRR0, PCI_Config, 0x60, 0x04)
298 Field (PRR0, ANYACC, NOLOCK, PRESERVE) {
299 PIRA, 8,
300 PIRB, 8,
301 PIRC, 8,
302 PIRD, 8
303 }
304
305 //
306 // _STA method for LNKA, LNKB, LNKC, LNKD
307 // Arg0[in]: value of PIRA / PIRB / PIRC / PIRD
308 //
309 Method (PSTA, 1, NotSerialized) {
310 If (And (Arg0, 0x80)) { // disable-bit set?
311 Return (0x9) // "device present" | "functioning properly"
312 } Else {
313 Return (0xB) // same | "enabled and decoding resources"
314 }
315 }
316
317 //
318 // _CRS method for LNKA, LNKB, LNKC, LNKD
319 // Arg0[in]: value of PIRA / PIRB / PIRC / PIRD
320 //
321 Method (PCRS, 1, NotSerialized) {
322 //
323 // create temporary buffer with an Extended Interrupt Descriptor
324 // whose single vector defaults to zero
325 //
326 Name (BUF0, ResourceTemplate () {
327 Interrupt (ResourceConsumer, Level, ActiveHigh, Shared){0}
328 }
329 )
330
331 //
332 // define reference to first interrupt vector in buffer
333 //
334 CreateDWordField (BUF0, 0x05, IRQW)
335
336 //
337 // If the disable-bit is clear, overwrite the default zero vector
338 // with the value in Arg0 (ie. PIRQRC[A:D]). Reserved bits are read
339 // as 0.
340 //
341 If (LNot (And (Arg0, 0x80))) {
342 Store (Arg0, IRQW)
343 }
344 Return (BUF0)
345 }
346
347 //
348 // _PRS resource for LNKA, LNKB, LNKC, LNKD
349 //
350 Name (PPRS, ResourceTemplate () {
351 Interrupt (ResourceConsumer, Level, ActiveHigh, Shared) {5, 10, 11}
352 //
353 // list of IRQs occupied thus far: 9, 5, 10, 11
354 //
355 })
356
357 //
358 // PCI IRQ Link A
359 //
360 Device (LNKA) {
361 Name (_HID, EISAID("PNP0C0F"))
362 Name (_UID, 1)
363
364 Method (_STA, 0, NotSerialized) { Return (PSTA (PIRA)) }
365 Method (_DIS, 0, NotSerialized) {
366 Or (PIRA, 0x80, PIRA) // set disable-bit
367 }
368 Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRA)) }
369 Method (_PRS, 0, NotSerialized) { Return (PPRS) }
370 Method (_SRS, 1, NotSerialized) {
371 CreateDWordField (Arg0, 0x05, IRQW)
372 Store (IRQW, PIRA)
373 }
374 }
375
376 //
377 // PCI IRQ Link B
378 //
379 Device (LNKB) {
380 Name (_HID, EISAID("PNP0C0F"))
381 Name (_UID, 2)
382
383 Method (_STA, 0, NotSerialized) { Return (PSTA (PIRB)) }
384 Method (_DIS, 0, NotSerialized) {
385 Or (PIRB, 0x80, PIRB) // set disable-bit
386 }
387 Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRB)) }
388 Method (_PRS, 0, NotSerialized) { Return (PPRS) }
389 Method (_SRS, 1, NotSerialized) {
390 CreateDWordField (Arg0, 0x05, IRQW)
391 Store (IRQW, PIRB)
392 }
393 }
394
395 //
396 // PCI IRQ Link C
397 //
398 Device (LNKC) {
399 Name (_HID, EISAID("PNP0C0F"))
400 Name (_UID, 3)
401
402 Method (_STA, 0, NotSerialized) { Return (PSTA (PIRC)) }
403 Method (_DIS, 0, NotSerialized) {
404 Or (PIRC, 0x80, PIRC) // set disable-bit
405 }
406 Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRC)) }
407 Method (_PRS, 0, NotSerialized) { Return (PPRS) }
408 Method (_SRS, 1, NotSerialized) {
409 CreateDWordField (Arg0, 0x05, IRQW)
410 Store (IRQW, PIRC)
411 }
412 }
413
414 //
415 // PCI IRQ Link D
416 //
417 Device (LNKD) {
418 Name (_HID, EISAID("PNP0C0F"))
419 Name (_UID, 4)
420
421 Method (_STA, 0, NotSerialized) { Return (PSTA (PIRD)) }
422 Method (_DIS, 0, NotSerialized) {
423 Or (PIRD, 0x80, PIRD) // set disable-bit
424 }
425 Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRD)) }
426 Method (_PRS, 0, NotSerialized) { Return (PPRS) }
427 Method (_SRS, 1, NotSerialized) {
428 CreateDWordField (Arg0, 0x05, IRQW)
429 Store (IRQW, PIRD)
430 }
431 }
432
433 //
434 // Programmable Interrupt Controller (PIC)
435 //
436 Device(PIC) {
437 Name (_HID, EISAID ("PNP0000"))
438 Name (_CRS, ResourceTemplate () {
439 IO (Decode16, 0x020, 0x020, 0x00, 0x02)
440 IO (Decode16, 0x0A0, 0x0A0, 0x00, 0x02)
441 IO (Decode16, 0x4D0, 0x4D0, 0x00, 0x02)
442 IRQNoFlags () {2}
443 //
444 // list of IRQs occupied thus far: 9, 5, 10, 11, 2
445 //
446 })
447 }
448
449 //
450 // ISA DMA
451 //
452 Device (DMAC) {
453 Name (_HID, EISAID ("PNP0200"))
454 Name (_CRS, ResourceTemplate () {
455 IO (Decode16, 0x00, 0x00, 0, 0x10)
456 IO (Decode16, 0x81, 0x81, 0, 0x03)
457 IO (Decode16, 0x87, 0x87, 0, 0x01)
458 IO (Decode16, 0x89, 0x89, 0, 0x03)
459 IO (Decode16, 0x8f, 0x8f, 0, 0x01)
460 IO (Decode16, 0xc0, 0xc0, 0, 0x20)
461 DMA (Compatibility, NotBusMaster, Transfer8) {4}
462 })
463 }
464
465 //
466 // 8254 Timer
467 //
468 Device(TMR) {
469 Name(_HID,EISAID("PNP0100"))
470 Name(_CRS, ResourceTemplate () {
471 IO (Decode16, 0x40, 0x40, 0x00, 0x04)
472 IRQNoFlags () {0}
473 //
474 // list of IRQs occupied thus far: 9, 5, 10, 11, 2, 0
475 //
476 })
477 }
478
479 //
480 // Real Time Clock
481 //
482 Device (RTC) {
483 Name (_HID, EISAID ("PNP0B00"))
484 Name (_CRS, ResourceTemplate () {
485 IO (Decode16, 0x70, 0x70, 0x00, 0x02)
486 IRQNoFlags () {8}
487 //
488 // list of IRQs occupied thus far: 9, 5, 10, 11, 2, 0, 8
489 //
490 })
491 }
492
493 //
494 // PCAT Speaker
495 //
496 Device(SPKR) {
497 Name (_HID, EISAID("PNP0800"))
498 Name (_CRS, ResourceTemplate () {
499 IO (Decode16, 0x61, 0x61, 0x01, 0x01)
500 })
501 }
502
503 //
504 // Floating Point Coprocessor
505 //
506 Device(FPU) {
507 Name (_HID, EISAID("PNP0C04"))
508 Name (_CRS, ResourceTemplate () {
509 IO (Decode16, 0xF0, 0xF0, 0x00, 0x10)
510 IRQNoFlags () {13}
511 //
512 // list of IRQs occupied thus far: 9, 5, 10, 11, 2, 0, 8, 13
513 //
514 })
515 }
516
517 //
518 // Generic motherboard devices and pieces that don't fit anywhere else
519 //
520 Device(XTRA) {
521 Name (_HID, EISAID ("PNP0C02"))
522 Name (_UID, 0x01)
523 Name (_CRS, ResourceTemplate () {
524 IO (Decode16, 0x010, 0x010, 0x00, 0x10)
525 IO (Decode16, 0x022, 0x022, 0x00, 0x1E)
526 IO (Decode16, 0x044, 0x044, 0x00, 0x1C)
527 IO (Decode16, 0x062, 0x062, 0x00, 0x02)
528 IO (Decode16, 0x065, 0x065, 0x00, 0x0B)
529 IO (Decode16, 0x072, 0x072, 0x00, 0x0E)
530 IO (Decode16, 0x080, 0x080, 0x00, 0x01)
531 IO (Decode16, 0x084, 0x084, 0x00, 0x03)
532 IO (Decode16, 0x088, 0x088, 0x00, 0x01)
533 IO (Decode16, 0x08c, 0x08c, 0x00, 0x03)
534 IO (Decode16, 0x090, 0x090, 0x00, 0x10)
535 IO (Decode16, 0x0A2, 0x0A2, 0x00, 0x1E)
536 IO (Decode16, 0x0E0, 0x0E0, 0x00, 0x10)
537 IO (Decode16, 0x1E0, 0x1E0, 0x00, 0x10)
538 IO (Decode16, 0x160, 0x160, 0x00, 0x10)
539 IO (Decode16, 0x278, 0x278, 0x00, 0x08)
540 IO (Decode16, 0x370, 0x370, 0x00, 0x02)
541 IO (Decode16, 0x378, 0x378, 0x00, 0x08)
542 IO (Decode16, 0x402, 0x402, 0x00, 0x01) // QEMU debug console, should use FixedPcdGet16 (PcdDebugIoPort)
543 IO (Decode16, 0x440, 0x440, 0x00, 0x10)
544 IO (Decode16, 0x678, 0x678, 0x00, 0x08)
545 IO (Decode16, 0x778, 0x778, 0x00, 0x08)
546 IO (Decode16, 0xafe0, 0xafe0, 0x00, 0x04) // QEMU GPE0 BLK
547 IO (Decode16, 0xb000, 0xb000, 0x00, 0x40) // PMBLK1
548 Memory32Fixed (ReadOnly, 0xFEC00000, 0x1000) // IO APIC
549 Memory32Fixed (ReadOnly, 0xFEE00000, 0x100000) // LAPIC
550 })
551 }
552
553 //
554 // PS/2 Keyboard and PC/AT Enhanced Keyboard 101/102
555 //
556 Device (PS2K) {
557 Name (_HID, EISAID ("PNP0303"))
558 Name (_CID, EISAID ("PNP030B"))
559 Name(_CRS,ResourceTemplate() {
560 IO (Decode16, 0x60, 0x60, 0x00, 0x01)
561 IO (Decode16, 0x64, 0x64, 0x00, 0x01)
562 IRQNoFlags () {1}
563 //
564 // list of IRQs occupied thus far: 9, 5, 10, 11, 2, 0, 8, 13, 1
565 //
566 })
567 }
568
569 //
570 // PS/2 Mouse and Microsoft Mouse
571 //
572 Device (PS2M) { // PS/2 stype mouse port
573 Name (_HID, EISAID ("PNP0F03"))
574 Name (_CID, EISAID ("PNP0F13"))
575 Name (_CRS, ResourceTemplate() {
576 IRQNoFlags () {12}
577 //
578 // list of IRQs occupied thus far:
579 // 9, 5, 10, 11, 2, 0, 8, 13, 1, 12
580 //
581 })
582 }
583
584 //
585 // UART Serial Port - COM1
586 //
587 Device (UAR1) {
588 Name (_HID, EISAID ("PNP0501"))
589 Name (_DDN, "COM1")
590 Name (_UID, 0x01)
591 Name(_CRS,ResourceTemplate() {
592 IO (Decode16, 0x3F8, 0x3F8, 0x01, 0x08)
593 IRQ (Edge, ActiveHigh, Exclusive, ) {4}
594 //
595 // list of IRQs occupied thus far:
596 // 9, 5, 10, 11, 2, 0, 8, 13, 1, 12, 4
597 //
598 })
599 }
600
601 //
602 // UART Serial Port - COM2
603 //
604 Device (UAR2) {
605 Name (_HID, EISAID ("PNP0501"))
606 Name (_DDN, "COM2")
607 Name (_UID, 0x02)
608 Name(_CRS,ResourceTemplate() {
609 IO (Decode16, 0x2F8, 0x2F8, 0x01, 0x08)
610 IRQ (Edge, ActiveHigh, Exclusive, ) {3}
611 //
612 // list of IRQs occupied thus far:
613 // 9, 5, 10, 11, 2, 0, 8, 13, 1, 12, 4, 3
614 //
615 })
616 }
617
618 //
619 // Floppy Disk Controller
620 //
621 Device (FDC) {
622 Name (_HID, EISAID ("PNP0700"))
623 Name (_CRS,ResourceTemplate() {
624 IO (Decode16, 0x3F0, 0x3F0, 0x01, 0x06)
625 IO (Decode16, 0x3F7, 0x3F7, 0x01, 0x01)
626 IRQNoFlags () {6}
627 //
628 // list of IRQs occupied thus far:
629 // 9, 5, 10, 11, 2, 0, 8, 13, 1, 12, 4, 3, 6
630 //
631 DMA (Compatibility, NotBusMaster, Transfer8) {2}
632 })
633 }
634
635 //
636 // parallel port -- no DMA for now
637 //
638 Device (PAR1) {
639 Name (_HID, EISAID ("PNP0400"))
640 Name (_DDN, "LPT1")
641 Name (_UID, 0x01)
642 Name(_CRS, ResourceTemplate() {
643 IO (Decode16, 0x0378, 0x0378, 0x00, 0x08)
644 IRQNoFlags () {7}
645 //
646 // list of IRQs occupied thus far:
647 // 9, 5, 10, 11, 2, 0, 8, 13, 1, 12, 4, 3, 6, 7
648 // in order:
649 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
650 //
651 })
652 }
653 }
654 }
655 }
656 }