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