VirtualBox

source: vbox/trunk/src/VBox/Devices/PC/vbox.dsl@ 76077

Last change on this file since 76077 was 74441, checked in by vboxsync, 6 years ago

ACPI: Disable native PCIe capability control in _OSC method to make Windows guests happy (bugref:8973).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 66.0 KB
Line 
1/* $Id: vbox.dsl 74441 2018-09-24 13:00:15Z vboxsync $ */
2/** @file
3 * VirtualBox ACPI
4 */
5
6/*
7 * Copyright (C) 2006-2017 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18DefinitionBlock ("DSDT.aml", "DSDT", 2, "VBOX ", "VBOXBIOS", 2)
19{
20 // Declare debugging ports withing SystemIO
21 OperationRegion(DBG0, SystemIO, 0x3000, 4)
22
23 // Writes to this field Will dump hex char
24 Field (DBG0, ByteAcc, NoLock, Preserve)
25 {
26 DHE1, 8,
27 }
28
29 // Writes to this field Will dump hex word
30 Field (DBG0, WordAcc, NoLock, Preserve)
31 {
32 DHE2, 16,
33 }
34
35 // Writes to this field Will dump hex double word
36 Field (DBG0, DWordAcc, NoLock, Preserve)
37 {
38 DHE4, 32,
39 }
40
41 // Writes to this field will dump ascii char
42 Field (DBG0, ByteAcc, NoLock, Preserve)
43 {
44 Offset (1),
45 DCHR, 8
46 }
47
48 // Shortcuts
49 Method(HEX, 1)
50 {
51 Store (Arg0, DHE1)
52 }
53
54 Method(HEX2, 1)
55 {
56 Store (Arg0, DHE2)
57 }
58
59 Method(HEX4, 1)
60 {
61 Store (Arg0, DHE4)
62 }
63
64 // Code from Microsoft sample
65 // http://www.microsoft.com/whdc/system/pnppwr/powermgmt/_OSI-method.mspx
66
67 //
68 // SLEN(Str) - Returns the length of Str (excluding NULL).
69 //
70 Method(SLEN, 1)
71 {
72 //
73 // Note: The caller must make sure that the argument is a string object.
74 //
75 Store(Arg0, Local0)
76 Return(Sizeof(Local0))
77 }
78
79
80 //
81 // S2BF(Str) - Convert a string object into a buffer object.
82 //
83 Method(S2BF, 1, Serialized)
84 {
85 //
86 // Note: The caller must make sure that the argument is a string object.
87 //
88 // Local0 contains length of string + NULL.
89 //
90 Store(Arg0, Local0)
91 Add(SLEN(Local0), One, Local0)
92 //
93 // Convert the string object into a buffer object.
94 //
95 Name(BUFF, Buffer(Local0) {})
96 Store(Arg0, BUFF)
97 Return(BUFF)
98 }
99
100 //
101 // MIN(Int1, Int2) - Returns the minimum of Int1 or Int2.
102 //
103 //
104 Method(MIN, 2)
105 {
106 //
107 // Note: The caller must make sure that both arguments are integer objects.
108 //
109 If (LLess(Arg0, Arg1))
110 {
111 Return(Arg0)
112 }
113 Else
114 {
115 Return(Arg1)
116 }
117 }
118
119 //
120 // SCMP(Str1, Str2) - Compare Str1 and Str2.
121 // Returns One if Str1 > Str2
122 // Returns Zero if Str1 == Str2
123 // Returns Ones if Str1 < Str2
124 //
125 Method(SCMP, 2)
126 {
127 //
128 // Note: The caller must make sure that both arguments are string objects.
129 //
130 // Local0 is a buffer of Str1.
131 // Local1 is a buffer of Str2.
132 // Local2 is the indexed byte of Str1.
133 // Local3 is the indexed byte of Str2.
134 // Local4 is the index to both Str1 and Str2.
135 // Local5 is the length of Str1.
136 // Local6 is the length of Str2.
137 // Local7 is the minimum of Str1 or Str2 length.
138 //
139
140 Store(Arg0, Local0)
141 Store(S2BF(Local0), Local0)
142
143 Store(S2BF(Arg1), Local1)
144 Store(Zero, Local4)
145
146 Store(SLEN(Arg0), Local5)
147 Store(SLEN(Arg1), Local6)
148 Store(MIN(Local5, Local6), Local7)
149
150 While (LLess(Local4, Local7))
151 {
152 Store(Derefof(Index(Local0, Local4)), Local2)
153 Store(Derefof(Index(Local1, Local4)), Local3)
154 If (LGreater(Local2, Local3))
155 {
156 Return(One)
157 }
158 Else
159 {
160 If (LLess(Local2, Local3))
161 {
162 Return(Ones)
163 }
164 }
165
166 Increment(Local4)
167 }
168
169 If (LLess(Local4, Local5))
170 {
171 Return(One)
172 }
173 Else
174 {
175 If (LLess(Local4, Local6))
176 {
177 Return(Ones)
178 }
179 Else
180 {
181 Return(Zero)
182 }
183 }
184 }
185
186 // Return one if strings match, zero otherwise. Wrapper around SCMP
187 Method (MTCH, 2)
188 {
189 Store(Arg0, Local0)
190 Store(Arg1, Local1)
191 Store(SCMP(Local0, Local1), Local2)
192 Return(LNot(Local2))
193 }
194
195 // Convert ASCII string to buffer and store it's contents (char by
196 // char) into DCHR (thus possibly writing the string to console)
197 Method (\DBG, 1, NotSerialized)
198 {
199 Store(Arg0, Local0)
200 Store(S2BF (Local0), Local1)
201 Store(SizeOf (Local1), Local0)
202 Decrement (Local0)
203 Store(Zero, Local2)
204 While (Local0)
205 {
206 Decrement (Local0)
207 Store (DerefOf (Index (Local1, Local2)), DCHR)
208 Increment (Local2)
209 }
210 }
211
212 // Microsoft Windows version indicator
213 Name(MSWV, Ones)
214
215 //
216 // Return Windows version. Detect non-Microsoft OSes.
217 //
218 // 0 : Not Windows OS
219 // 2 : Windows Me
220 // 3 : Windows 2000 (NT pre-XP)
221 // 4 : Windows XP
222 // 5 : Windows Server 2003
223 // 6 : Windows Vista
224 // 7 : Windows 7
225 // 8 : Windows 8
226 // 9 : Windows 8.1
227 // 10 : Windows 10
228 Method(MSWN, 0, NotSerialized)
229 {
230 If (LNotEqual(MSWV, Ones))
231 {
232 Return(MSWV)
233 }
234
235 Store(0x00, MSWV)
236 DBG("_OS: ")
237 DBG(_OS)
238 DBG("\n")
239
240 // Does OS provide the _OSI method?
241 If (CondRefOf(_OSI))
242 {
243 DBG("_OSI exists\n")
244 // OS returns non-zero value in response to _OSI query if it
245 // supports the interface. Newer Windows releases support older
246 // versions of the ACPI interface.
247 If (_OSI("Windows 2001"))
248 {
249 Store(4, MSWV) // XP
250 }
251 If (_OSI("Windows 2001.1"))
252 {
253 Store(5, MSWV) // Server 2003
254 }
255 If (_OSI("Windows 2006"))
256 {
257 Store(6, MSWV) // Vista
258 }
259 If (_OSI("Windows 2009"))
260 {
261 Store(7, MSWV) // Windows 7
262 }
263 If (_OSI("Windows 2012"))
264 {
265 Store(8, MSWV) // Windows 8
266 }
267 If (_OSI("Windows 2013"))
268 {
269 Store(9, MSWV) // Windows 8.1
270 }
271 If (_OSI("Windows 2015"))
272 {
273 Store(10, MSWV) // Windows 10
274 }
275
276 // This must come last and is a trap. No version of Windows
277 // reports this!
278 If (_OSI("Windows 2006 SP2"))
279 {
280 DBG("Windows 2006 SP2 supported\n")
281 // Not a Microsoft OS
282 Store(0, MSWV)
283 }
284 }
285 Else
286 {
287 // No _OSI, could be older NT or Windows 9x
288 If (MTCH(_OS, "Microsoft Windows NT"))
289 {
290 Store(3, MSWV)
291 }
292 If (MTCH(_OS, "Microsoft WindowsME: Millennium Edition"))
293 {
294 Store(2, MSWV)
295 }
296 }
297
298 // Does OS provide the _REV method?
299 If (CondRefOf(_REV))
300 {
301 DBG("_REV: ")
302 HEX4(_REV)
303
304 // Defeat most Linuxes and other non-Microsoft OSes. Microsoft Windows
305 // up to Server 2003 reports ACPI 1.0 support, Vista up to Windows 10
306 // reports ACPI 2.0 support. Anything pretending to be a Windows OS
307 // with higher ACPI revision support is a fake.
308 If (LAnd(LGreater(MSWV, 0),LGreater(_REV, 2)))
309 {
310 If (LLess(MSWV,8))
311 {
312 DBG("ACPI rev mismatch, not a Microsoft OS\n")
313 Store(0, MSWV)
314 }
315 }
316 }
317
318 DBG("Determined MSWV: ")
319 HEX4(MSWV)
320
321 Return(MSWV)
322 }
323
324 Name(PICM, 0)
325 Method(_PIC, 1)
326 {
327 DBG ("Pic mode: ")
328 HEX4 (Arg0)
329 Store (Arg0, PICM)
330 }
331
332 // Declare indexed registers used for reading configuration information
333 OperationRegion (SYSI, SystemIO, 0x4048, 0x08)
334 Field (SYSI, DwordAcc, NoLock, Preserve)
335 {
336 IDX0, 32,
337 DAT0, 32,
338 }
339
340 IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
341 {
342 MEML, 32, // low-memory length (64KB units)
343 UIOA, 32, // if IO APIC enabled
344 UHPT, 32, // if HPET enabled
345 USMC, 32, // if SMC enabled
346 UFDC, 32, // if floppy controller enabled
347 SL2B, 32, // Serial2 base IO address
348 SL2I, 32, // Serial2 IRQ
349 SL3B, 32, // Serial3 base IO address
350 SL3I, 32, // Serial3 IRQ
351 PMNN, 32, // start of 64-bit prefetch window (64KB units)
352 URTC, 32, // if RTC shown in tables
353 CPUL, 32, // flag of CPU lock state
354 CPUC, 32, // CPU to check lock status
355 CPET, 32, // type of CPU hotplug event
356 CPEV, 32, // id of CPU event targets
357 NICA, 32, // Primary NIC PCI address
358 HDAA, 32, // HDA PCI address
359 PWRS, 32, // power states
360 IOCA, 32, // southbridge IO controller PCI address
361 HBCA, 32, // host bus controller address
362 PCIB, 32, // PCI MCFG base start
363 PCIL, 32, // PCI MCFG length
364 SL0B, 32, // Serial0 base IO address
365 SL0I, 32, // Serial0 IRQ
366 SL1B, 32, // Serial1 base IO address
367 SL1I, 32, // Serial1 IRQ
368 PP0B, 32, // Parallel0 base IO address
369 PP0I, 32, // Parallel0 IRQ
370 PP1B, 32, // Parallel1 base IO address
371 PP1I, 32, // Parallel1 IRQ
372 PMNX, 32, // limit of 64-bit prefetch window (64KB units)
373 Offset (0x80),
374 ININ, 32,
375 Offset (0x200),
376 VAIN, 32,
377 }
378
379 Scope (\_SB)
380 {
381 Method (_INI, 0, NotSerialized)
382 {
383 Store (0xbadc0de, VAIN)
384 DBG ("MEML: ")
385 HEX4 (MEML)
386 DBG ("UIOA: ")
387 HEX4 (UIOA)
388 DBG ("UHPT: ")
389 HEX4 (UHPT)
390 DBG ("USMC: ")
391 HEX4 (USMC)
392 DBG ("UFDC: ")
393 HEX4 (UFDC)
394 DBG ("PMNN: ")
395 HEX4 (PMNN)
396 }
397
398 // PCI PIC IRQ Routing table
399 // Must match pci.c:pci_slot_get_pirq
400 Name (PR00, Package ()
401 {
402/** @todo add devices 0/1 to be complete */
403 Package (0x04) {0x0002FFFF, 0x00, LNKB, 0x00,},
404 Package (0x04) {0x0002FFFF, 0x01, LNKC, 0x00,},
405 Package (0x04) {0x0002FFFF, 0x02, LNKD, 0x00,},
406 Package (0x04) {0x0002FFFF, 0x03, LNKA, 0x00,},
407
408 Package (0x04) {0x0003FFFF, 0x00, LNKC, 0x00,},
409 Package (0x04) {0x0003FFFF, 0x01, LNKD, 0x00,},
410 Package (0x04) {0x0003FFFF, 0x02, LNKA, 0x00,},
411 Package (0x04) {0x0003FFFF, 0x03, LNKB, 0x00,},
412
413 Package (0x04) {0x0004FFFF, 0x00, LNKD, 0x00,},
414 Package (0x04) {0x0004FFFF, 0x01, LNKA, 0x00,},
415 Package (0x04) {0x0004FFFF, 0x02, LNKB, 0x00,},
416 Package (0x04) {0x0004FFFF, 0x03, LNKC, 0x00,},
417
418 Package (0x04) {0x0005FFFF, 0x00, LNKA, 0x00,},
419 Package (0x04) {0x0005FFFF, 0x01, LNKB, 0x00,},
420 Package (0x04) {0x0005FFFF, 0x02, LNKC, 0x00,},
421 Package (0x04) {0x0005FFFF, 0x03, LNKD, 0x00,},
422
423 Package (0x04) {0x0006FFFF, 0x00, LNKB, 0x00,},
424 Package (0x04) {0x0006FFFF, 0x01, LNKC, 0x00,},
425 Package (0x04) {0x0006FFFF, 0x02, LNKD, 0x00,},
426 Package (0x04) {0x0006FFFF, 0x03, LNKA, 0x00,},
427
428 Package (0x04) {0x0007FFFF, 0x00, LNKC, 0x00,},
429 Package (0x04) {0x0007FFFF, 0x01, LNKD, 0x00,},
430 Package (0x04) {0x0007FFFF, 0x02, LNKA, 0x00,},
431 Package (0x04) {0x0007FFFF, 0x03, LNKB, 0x00,},
432
433 Package (0x04) {0x0008FFFF, 0x00, LNKD, 0x00,},
434 Package (0x04) {0x0008FFFF, 0x01, LNKA, 0x00,},
435 Package (0x04) {0x0008FFFF, 0x02, LNKB, 0x00,},
436 Package (0x04) {0x0008FFFF, 0x03, LNKC, 0x00,},
437
438 Package (0x04) {0x0009FFFF, 0x00, LNKA, 0x00,},
439 Package (0x04) {0x0009FFFF, 0x01, LNKB, 0x00,},
440 Package (0x04) {0x0009FFFF, 0x02, LNKC, 0x00,},
441 Package (0x04) {0x0009FFFF, 0x03, LNKD, 0x00,},
442
443 Package (0x04) {0x000AFFFF, 0x00, LNKB, 0x00,},
444 Package (0x04) {0x000AFFFF, 0x01, LNKC, 0x00,},
445 Package (0x04) {0x000AFFFF, 0x02, LNKD, 0x00,},
446 Package (0x04) {0x000AFFFF, 0x03, LNKA, 0x00,},
447
448 Package (0x04) {0x000BFFFF, 0x00, LNKC, 0x00,},
449 Package (0x04) {0x000BFFFF, 0x01, LNKD, 0x00,},
450 Package (0x04) {0x000BFFFF, 0x02, LNKA, 0x00,},
451 Package (0x04) {0x000BFFFF, 0x03, LNKB, 0x00,},
452
453 Package (0x04) {0x000CFFFF, 0x00, LNKD, 0x00,},
454 Package (0x04) {0x000CFFFF, 0x01, LNKA, 0x00,},
455 Package (0x04) {0x000CFFFF, 0x02, LNKB, 0x00,},
456 Package (0x04) {0x000CFFFF, 0x03, LNKC, 0x00,},
457
458 Package (0x04) {0x000DFFFF, 0x00, LNKA, 0x00,},
459 Package (0x04) {0x000DFFFF, 0x01, LNKB, 0x00,},
460 Package (0x04) {0x000DFFFF, 0x02, LNKC, 0x00,},
461 Package (0x04) {0x000DFFFF, 0x03, LNKD, 0x00,},
462
463 Package (0x04) {0x000EFFFF, 0x00, LNKB, 0x00,},
464 Package (0x04) {0x000EFFFF, 0x01, LNKC, 0x00,},
465 Package (0x04) {0x000EFFFF, 0x02, LNKD, 0x00,},
466 Package (0x04) {0x000EFFFF, 0x03, LNKA, 0x00,},
467
468 Package (0x04) {0x000FFFFF, 0x00, LNKC, 0x00,},
469 Package (0x04) {0x000FFFFF, 0x01, LNKD, 0x00,},
470 Package (0x04) {0x000FFFFF, 0x02, LNKA, 0x00,},
471 Package (0x04) {0x000FFFFF, 0x03, LNKB, 0x00,},
472
473 Package (0x04) {0x0010FFFF, 0x00, LNKD, 0x00,},
474 Package (0x04) {0x0010FFFF, 0x01, LNKA, 0x00,},
475 Package (0x04) {0x0010FFFF, 0x02, LNKB, 0x00,},
476 Package (0x04) {0x0010FFFF, 0x03, LNKC, 0x00,},
477
478 Package (0x04) {0x0011FFFF, 0x00, LNKA, 0x00,},
479 Package (0x04) {0x0011FFFF, 0x01, LNKB, 0x00,},
480 Package (0x04) {0x0011FFFF, 0x02, LNKC, 0x00,},
481 Package (0x04) {0x0011FFFF, 0x03, LNKD, 0x00,},
482
483 Package (0x04) {0x0012FFFF, 0x00, LNKB, 0x00,},
484 Package (0x04) {0x0012FFFF, 0x01, LNKC, 0x00,},
485 Package (0x04) {0x0012FFFF, 0x02, LNKD, 0x00,},
486 Package (0x04) {0x0012FFFF, 0x03, LNKA, 0x00,},
487
488 Package (0x04) {0x0013FFFF, 0x00, LNKC, 0x00,},
489 Package (0x04) {0x0013FFFF, 0x01, LNKD, 0x00,},
490 Package (0x04) {0x0013FFFF, 0x02, LNKA, 0x00,},
491 Package (0x04) {0x0013FFFF, 0x03, LNKB, 0x00,},
492
493 Package (0x04) {0x0014FFFF, 0x00, LNKD, 0x00,},
494 Package (0x04) {0x0014FFFF, 0x01, LNKA, 0x00,},
495 Package (0x04) {0x0014FFFF, 0x02, LNKB, 0x00,},
496 Package (0x04) {0x0014FFFF, 0x03, LNKC, 0x00,},
497
498 Package (0x04) {0x0015FFFF, 0x00, LNKA, 0x00,},
499 Package (0x04) {0x0015FFFF, 0x01, LNKB, 0x00,},
500 Package (0x04) {0x0015FFFF, 0x02, LNKC, 0x00,},
501 Package (0x04) {0x0015FFFF, 0x03, LNKD, 0x00,},
502
503 Package (0x04) {0x0016FFFF, 0x00, LNKB, 0x00,},
504 Package (0x04) {0x0016FFFF, 0x01, LNKC, 0x00,},
505 Package (0x04) {0x0016FFFF, 0x02, LNKD, 0x00,},
506 Package (0x04) {0x0016FFFF, 0x03, LNKA, 0x00,},
507
508 Package (0x04) {0x0017FFFF, 0x00, LNKC, 0x00,},
509 Package (0x04) {0x0017FFFF, 0x01, LNKD, 0x00,},
510 Package (0x04) {0x0017FFFF, 0x02, LNKA, 0x00,},
511 Package (0x04) {0x0017FFFF, 0x03, LNKB, 0x00,},
512
513 Package (0x04) {0x0018FFFF, 0x00, LNKD, 0x00,},
514 Package (0x04) {0x0018FFFF, 0x01, LNKA, 0x00,},
515 Package (0x04) {0x0018FFFF, 0x02, LNKB, 0x00,},
516 Package (0x04) {0x0018FFFF, 0x03, LNKC, 0x00,},
517
518 Package (0x04) {0x0019FFFF, 0x00, LNKA, 0x00,},
519 Package (0x04) {0x0019FFFF, 0x01, LNKB, 0x00,},
520 Package (0x04) {0x0019FFFF, 0x02, LNKC, 0x00,},
521 Package (0x04) {0x0019FFFF, 0x03, LNKD, 0x00,},
522
523 Package (0x04) {0x001AFFFF, 0x00, LNKB, 0x00,},
524 Package (0x04) {0x001AFFFF, 0x01, LNKC, 0x00,},
525 Package (0x04) {0x001AFFFF, 0x02, LNKD, 0x00,},
526 Package (0x04) {0x001AFFFF, 0x03, LNKA, 0x00,},
527
528 Package (0x04) {0x001BFFFF, 0x00, LNKC, 0x00,},
529 Package (0x04) {0x001BFFFF, 0x01, LNKD, 0x00,},
530 Package (0x04) {0x001BFFFF, 0x02, LNKA, 0x00,},
531 Package (0x04) {0x001BFFFF, 0x03, LNKB, 0x00,},
532
533 Package (0x04) {0x001CFFFF, 0x00, LNKD, 0x00,},
534 Package (0x04) {0x001CFFFF, 0x01, LNKA, 0x00,},
535 Package (0x04) {0x001CFFFF, 0x02, LNKB, 0x00,},
536 Package (0x04) {0x001CFFFF, 0x03, LNKC, 0x00,},
537
538 Package (0x04) {0x001DFFFF, 0x00, LNKA, 0x00,},
539 Package (0x04) {0x001DFFFF, 0x01, LNKB, 0x00,},
540 Package (0x04) {0x001DFFFF, 0x02, LNKC, 0x00,},
541 Package (0x04) {0x001DFFFF, 0x03, LNKD, 0x00,},
542
543 Package (0x04) {0x001EFFFF, 0x00, LNKB, 0x00,},
544 Package (0x04) {0x001EFFFF, 0x01, LNKC, 0x00,},
545 Package (0x04) {0x001EFFFF, 0x02, LNKD, 0x00,},
546 Package (0x04) {0x001EFFFF, 0x03, LNKA, 0x00,},
547
548 Package (0x04) {0x001FFFFF, 0x00, LNKC, 0x00,},
549 Package (0x04) {0x001FFFFF, 0x01, LNKD, 0x00,},
550 Package (0x04) {0x001FFFFF, 0x02, LNKA, 0x00,},
551 Package (0x04) {0x001FFFFF, 0x03, LNKB, 0x00,}
552 })
553
554 // PCI I/O APIC IRQ Routing table
555 // Must match pci.c:pci_slot_get_acpi_pirq
556 Name (PR01, Package ()
557 {
558/** @todo add devices 0/1 to be complete */
559 Package (0x04) {0x0002FFFF, 0x00, 0x00, 0x12,},
560 Package (0x04) {0x0002FFFF, 0x01, 0x00, 0x13,},
561 Package (0x04) {0x0002FFFF, 0x02, 0x00, 0x14,},
562 Package (0x04) {0x0002FFFF, 0x03, 0x00, 0x15,},
563
564 Package (0x04) {0x0003FFFF, 0x00, 0x00, 0x13,},
565 Package (0x04) {0x0003FFFF, 0x01, 0x00, 0x14,},
566 Package (0x04) {0x0003FFFF, 0x02, 0x00, 0x15,},
567 Package (0x04) {0x0003FFFF, 0x03, 0x00, 0x16,},
568
569 Package (0x04) {0x0004FFFF, 0x00, 0x00, 0x14,},
570 Package (0x04) {0x0004FFFF, 0x01, 0x00, 0x15,},
571 Package (0x04) {0x0004FFFF, 0x02, 0x00, 0x16,},
572 Package (0x04) {0x0004FFFF, 0x03, 0x00, 0x17,},
573
574 Package (0x04) {0x0005FFFF, 0x00, 0x00, 0x15,},
575 Package (0x04) {0x0005FFFF, 0x01, 0x00, 0x16,},
576 Package (0x04) {0x0005FFFF, 0x02, 0x00, 0x17,},
577 Package (0x04) {0x0005FFFF, 0x03, 0x00, 0x10,},
578
579 Package (0x04) {0x0006FFFF, 0x00, 0x00, 0x16,},
580 Package (0x04) {0x0006FFFF, 0x01, 0x00, 0x17,},
581 Package (0x04) {0x0006FFFF, 0x02, 0x00, 0x10,},
582 Package (0x04) {0x0006FFFF, 0x03, 0x00, 0x11,},
583
584 Package (0x04) {0x0007FFFF, 0x00, 0x00, 0x17,},
585 Package (0x04) {0x0007FFFF, 0x01, 0x00, 0x10,},
586 Package (0x04) {0x0007FFFF, 0x02, 0x00, 0x11,},
587 Package (0x04) {0x0007FFFF, 0x03, 0x00, 0x12,},
588
589 Package (0x04) {0x0008FFFF, 0x00, 0x00, 0x10,},
590 Package (0x04) {0x0008FFFF, 0x01, 0x00, 0x11,},
591 Package (0x04) {0x0008FFFF, 0x02, 0x00, 0x12,},
592 Package (0x04) {0x0008FFFF, 0x03, 0x00, 0x13,},
593
594 Package (0x04) {0x0009FFFF, 0x00, 0x00, 0x11,},
595 Package (0x04) {0x0009FFFF, 0x01, 0x00, 0x12,},
596 Package (0x04) {0x0009FFFF, 0x02, 0x00, 0x13,},
597 Package (0x04) {0x0009FFFF, 0x03, 0x00, 0x14,},
598
599 Package (0x04) {0x000AFFFF, 0x00, 0x00, 0x12,},
600 Package (0x04) {0x000AFFFF, 0x01, 0x00, 0x13,},
601 Package (0x04) {0x000AFFFF, 0x02, 0x00, 0x14,},
602 Package (0x04) {0x000AFFFF, 0x03, 0x00, 0x15,},
603
604 Package (0x04) {0x000BFFFF, 0x00, 0x00, 0x13,},
605 Package (0x04) {0x000BFFFF, 0x01, 0x00, 0x14,},
606 Package (0x04) {0x000BFFFF, 0x02, 0x00, 0x15,},
607 Package (0x04) {0x000BFFFF, 0x03, 0x00, 0x16,},
608
609 Package (0x04) {0x000CFFFF, 0x00, 0x00, 0x14,},
610 Package (0x04) {0x000CFFFF, 0x01, 0x00, 0x15,},
611 Package (0x04) {0x000CFFFF, 0x02, 0x00, 0x16,},
612 Package (0x04) {0x000CFFFF, 0x03, 0x00, 0x17,},
613
614 Package (0x04) {0x000DFFFF, 0x00, 0x00, 0x15,},
615 Package (0x04) {0x000DFFFF, 0x01, 0x00, 0x16,},
616 Package (0x04) {0x000DFFFF, 0x02, 0x00, 0x17,},
617 Package (0x04) {0x000DFFFF, 0x03, 0x00, 0x10,},
618
619 Package (0x04) {0x000EFFFF, 0x00, 0x00, 0x16,},
620 Package (0x04) {0x000EFFFF, 0x01, 0x00, 0x17,},
621 Package (0x04) {0x000EFFFF, 0x02, 0x00, 0x10,},
622 Package (0x04) {0x000EFFFF, 0x03, 0x00, 0x11,},
623
624 Package (0x04) {0x000FFFFF, 0x00, 0x00, 0x17,},
625 Package (0x04) {0x000FFFFF, 0x01, 0x00, 0x10,},
626 Package (0x04) {0x000FFFFF, 0x02, 0x00, 0x11,},
627 Package (0x04) {0x000FFFFF, 0x03, 0x00, 0x12,},
628
629 Package (0x04) {0x0010FFFF, 0x00, 0x00, 0x10,},
630 Package (0x04) {0x0010FFFF, 0x01, 0x00, 0x11,},
631 Package (0x04) {0x0010FFFF, 0x02, 0x00, 0x12,},
632 Package (0x04) {0x0010FFFF, 0x03, 0x00, 0x13,},
633
634 Package (0x04) {0x0011FFFF, 0x00, 0x00, 0x11,},
635 Package (0x04) {0x0011FFFF, 0x01, 0x00, 0x12,},
636 Package (0x04) {0x0011FFFF, 0x02, 0x00, 0x13,},
637 Package (0x04) {0x0011FFFF, 0x03, 0x00, 0x14,},
638
639 Package (0x04) {0x0012FFFF, 0x00, 0x00, 0x12,},
640 Package (0x04) {0x0012FFFF, 0x01, 0x00, 0x13,},
641 Package (0x04) {0x0012FFFF, 0x02, 0x00, 0x14,},
642 Package (0x04) {0x0012FFFF, 0x03, 0x00, 0x15,},
643
644 Package (0x04) {0x0013FFFF, 0x00, 0x00, 0x13,},
645 Package (0x04) {0x0013FFFF, 0x01, 0x00, 0x14,},
646 Package (0x04) {0x0013FFFF, 0x02, 0x00, 0x15,},
647 Package (0x04) {0x0013FFFF, 0x03, 0x00, 0x16,},
648
649 Package (0x04) {0x0014FFFF, 0x00, 0x00, 0x14,},
650 Package (0x04) {0x0014FFFF, 0x01, 0x00, 0x15,},
651 Package (0x04) {0x0014FFFF, 0x02, 0x00, 0x16,},
652 Package (0x04) {0x0014FFFF, 0x03, 0x00, 0x17,},
653
654 Package (0x04) {0x0015FFFF, 0x00, 0x00, 0x15,},
655 Package (0x04) {0x0015FFFF, 0x01, 0x00, 0x16,},
656 Package (0x04) {0x0015FFFF, 0x02, 0x00, 0x17,},
657 Package (0x04) {0x0015FFFF, 0x03, 0x00, 0x10,},
658
659 Package (0x04) {0x0016FFFF, 0x00, 0x00, 0x16,},
660 Package (0x04) {0x0016FFFF, 0x01, 0x00, 0x17,},
661 Package (0x04) {0x0016FFFF, 0x02, 0x00, 0x10,},
662 Package (0x04) {0x0016FFFF, 0x03, 0x00, 0x11,},
663
664 Package (0x04) {0x0017FFFF, 0x00, 0x00, 0x17,},
665 Package (0x04) {0x0017FFFF, 0x01, 0x00, 0x10,},
666 Package (0x04) {0x0017FFFF, 0x02, 0x00, 0x11,},
667 Package (0x04) {0x0017FFFF, 0x03, 0x00, 0x12,},
668
669 Package (0x04) {0x0018FFFF, 0x00, 0x00, 0x10,},
670 Package (0x04) {0x0018FFFF, 0x01, 0x00, 0x11,},
671 Package (0x04) {0x0018FFFF, 0x02, 0x00, 0x12,},
672 Package (0x04) {0x0018FFFF, 0x03, 0x00, 0x13,},
673
674 Package (0x04) {0x0019FFFF, 0x00, 0x00, 0x11,},
675 Package (0x04) {0x0019FFFF, 0x01, 0x00, 0x12,},
676 Package (0x04) {0x0019FFFF, 0x02, 0x00, 0x13,},
677 Package (0x04) {0x0019FFFF, 0x03, 0x00, 0x14,},
678
679 Package (0x04) {0x001AFFFF, 0x00, 0x00, 0x12,},
680 Package (0x04) {0x001AFFFF, 0x01, 0x00, 0x13,},
681 Package (0x04) {0x001AFFFF, 0x02, 0x00, 0x14,},
682 Package (0x04) {0x001AFFFF, 0x03, 0x00, 0x15,},
683
684 Package (0x04) {0x001BFFFF, 0x00, 0x00, 0x13,},
685 Package (0x04) {0x001BFFFF, 0x01, 0x00, 0x14,},
686 Package (0x04) {0x001BFFFF, 0x02, 0x00, 0x15,},
687 Package (0x04) {0x001BFFFF, 0x03, 0x00, 0x16,},
688
689 Package (0x04) {0x001CFFFF, 0x00, 0x00, 0x14,},
690 Package (0x04) {0x001CFFFF, 0x01, 0x00, 0x15,},
691 Package (0x04) {0x001CFFFF, 0x02, 0x00, 0x16,},
692 Package (0x04) {0x001CFFFF, 0x03, 0x00, 0x17,},
693
694 Package (0x04) {0x001DFFFF, 0x00, 0x00, 0x15,},
695 Package (0x04) {0x001DFFFF, 0x01, 0x00, 0x16,},
696 Package (0x04) {0x001DFFFF, 0x02, 0x00, 0x17,},
697 Package (0x04) {0x001DFFFF, 0x03, 0x00, 0x10,},
698
699 Package (0x04) {0x001EFFFF, 0x00, 0x00, 0x16,},
700 Package (0x04) {0x001EFFFF, 0x01, 0x00, 0x17,},
701 Package (0x04) {0x001EFFFF, 0x02, 0x00, 0x10,},
702 Package (0x04) {0x001EFFFF, 0x03, 0x00, 0x11,},
703
704 Package (0x04) {0x001FFFFF, 0x00, 0x00, 0x17,},
705 Package (0x04) {0x001FFFFF, 0x01, 0x00, 0x10,},
706 Package (0x04) {0x001FFFFF, 0x02, 0x00, 0x11,},
707 Package (0x04) {0x001FFFFF, 0x03, 0x00, 0x12,}
708 })
709
710 // Possible resource settings for PCI link A
711 Name (PRSA, ResourceTemplate ()
712 {
713 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
714 })
715
716 // Possible resource settings for PCI link B
717 Name (PRSB, ResourceTemplate ()
718 {
719 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
720 })
721
722 // Possible resource settings for PCI link C
723 Name (PRSC, ResourceTemplate ()
724 {
725 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
726 })
727
728 // Possible resource settings for PCI link D
729 Name (PRSD, ResourceTemplate ()
730 {
731 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
732 })
733
734 // PCI bus 0
735 Device (PCI0)
736 {
737
738 Name (_HID, EisaId ("PNP0A03")) // PCI bus PNP id
739 Method(_ADR, 0, NotSerialized) // PCI address
740 {
741 Return (HBCA)
742 }
743 Name (_BBN, 0x00) // base bus address (bus number)
744 Name (_UID, 0x00)
745
746 // Method that returns routing table; also opens PCI to I/O APIC
747 // interrupt routing backdoor by writing 0xdead 0xbeef signature
748 // to ISA bridge config space. See DevPCI.cpp/pciSetIrqInternal().
749 Method (_PRT, 0, NotSerialized)
750 {
751 if (LEqual (LAnd (PICM, UIOA), Zero)) {
752 DBG ("RETURNING PIC\n")
753 Store (0x00, \_SB.PCI0.SBRG.APDE)
754 Store (0x00, \_SB.PCI0.SBRG.APAD)
755 Return (PR00)
756 }
757 else {
758 DBG ("RETURNING APIC\n")
759 Store (0xbe, \_SB.PCI0.SBRG.APDE)
760 Store (0xef, \_SB.PCI0.SBRG.APAD)
761 Return (PR01)
762 }
763 }
764
765 Device (SBRG)
766 {
767 // Address of the southbridge device (PIIX or ICH9)
768 Method(_ADR, 0, NotSerialized)
769 {
770 Return (IOCA)
771 }
772 OperationRegion (PCIC, PCI_Config, 0x00, 0xff)
773
774 Field (PCIC, ByteAcc, NoLock, Preserve)
775 {
776 Offset (0xad),
777 APAD, 8,
778 Offset (0xde),
779 APDE, 8,
780 }
781
782 // PCI MCFG MMIO ranges
783 Device (^PCIE)
784 {
785 Name (_HID, EisaId ("PNP0C02"))
786 Name (_UID, 0x11)
787 Name (CRS, ResourceTemplate ()
788 {
789 Memory32Fixed (ReadOnly,
790 0xdc000000, // Address Base
791 0x4000000, // Address Length
792 _Y13)
793 })
794 Method (_CRS, 0, NotSerialized)
795 {
796 CreateDWordField (CRS, \_SB.PCI0.PCIE._Y13._BAS, BAS1)
797 CreateDWordField (CRS, \_SB.PCI0.PCIE._Y13._LEN, LEN1)
798 Store (PCIB, BAS1)
799 Store (PCIL, LEN1)
800 Return (CRS)
801 }
802 Method (_STA, 0, NotSerialized)
803 {
804 if (LEqual (PCIB, Zero)) {
805 Return (0x00)
806 }
807 else {
808 Return (0x0F)
809 }
810 }
811 }
812
813 // Keyboard device
814 Device (PS2K)
815 {
816 Name (_HID, EisaId ("PNP0303"))
817 Method (_STA, 0, NotSerialized)
818 {
819 Return (0x0F)
820 }
821
822 Name (_CRS, ResourceTemplate ()
823 {
824 IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
825 IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
826 IRQNoFlags () {1}
827 })
828 }
829
830 // DMA Controller
831 Device (DMAC)
832 {
833 Name (_HID, EisaId ("PNP0200"))
834 Name (_CRS, ResourceTemplate ()
835 {
836 IO (Decode16, 0x0000, 0x0000, 0x01, 0x10)
837 IO (Decode16, 0x0080, 0x0080, 0x01, 0x10)
838 IO (Decode16, 0x00C0, 0x00C0, 0x01, 0x20)
839 DMA (Compatibility, BusMaster, Transfer8_16) {4}
840 })
841 }
842
843 // Floppy disk controller
844 Device (FDC0)
845 {
846 Name (_HID, EisaId ("PNP0700"))
847
848 Method (_STA, 0, NotSerialized)
849 {
850 Return (UFDC)
851 }
852
853 // Current resource settings
854 Name (_CRS, ResourceTemplate ()
855 {
856 IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
857 IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
858 IRQNoFlags () {6}
859 DMA (Compatibility, NotBusMaster, Transfer8) {2}
860 })
861
862 // Possible resource settings
863 Name (_PRS, ResourceTemplate ()
864 {
865 IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
866 IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
867 IRQNoFlags () {6}
868 DMA (Compatibility, NotBusMaster, Transfer8) {2}
869 })
870
871 }
872
873 // Mouse device
874 Device (PS2M)
875 {
876 Name (_HID, EisaId ("PNP0F03"))
877 Method (_STA, 0, NotSerialized)
878 {
879 Return (0x0F)
880 }
881
882 Name (_CRS, ResourceTemplate ()
883 {
884 IRQNoFlags () {12}
885 })
886 }
887
888 // Parallel port 0
889 Device (^LPT0)
890 {
891 Name (_HID, EisaId ("PNP0400"))
892 Name (_UID, 0x01)
893 Method (_STA, 0, NotSerialized)
894 {
895 If (LEqual (PP0B, Zero))
896 {
897 Return (0x00)
898 }
899 Else
900 {
901 Return (0x0F)
902 }
903 }
904 Name (CRS, ResourceTemplate ()
905 {
906 IO (Decode16, 0x0378, 0x0378, 0x08, 0x08, _Y18)
907 IRQNoFlags (_Y19) {7}
908 })
909 Method (_CRS, 0, NotSerialized)
910 {
911 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._MIN, PMI0)
912 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._MAX, PMA0)
913 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._ALN, PAL0)
914 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._LEN, PLE0)
915 CreateWordField (CRS, \_SB.PCI0.LPT0._Y19._INT, PIQ0)
916 Store (PP0B, PMI0)
917 Store (PP0B, PMA0)
918 If (LEqual (0x3BC, PP0B)) {
919 Store (0x04, PAL0)
920 Store (0x04, PLE0)
921 }
922 ShiftLeft (0x01, PP0I, PIQ0)
923 Return (CRS)
924 }
925 }
926
927 // Parallel port 1
928 Device (^LPT1)
929 {
930 Name (_HID, EisaId ("PNP0400"))
931 Name (_UID, 0x02)
932 Method (_STA, 0, NotSerialized)
933 {
934 If (LEqual (PP1B, Zero))
935 {
936 Return (0x00)
937 }
938 Else
939 {
940 Return (0x0F)
941 }
942 }
943 Name (CRS, ResourceTemplate ()
944 {
945 IO (Decode16, 0x0278, 0x0278, 0x08, 0x08, _Y20)
946 IRQNoFlags (_Y21) {5}
947 })
948 Method (_CRS, 0, NotSerialized)
949 {
950 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._MIN, PMI1)
951 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._MAX, PMA1)
952 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._ALN, PAL1)
953 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._LEN, PLE1)
954 CreateWordField (CRS, \_SB.PCI0.LPT1._Y21._INT, PIQ1)
955 Store (PP1B, PMI1)
956 Store (PP1B, PMA1)
957 If (LEqual (0x3BC, PP1B)) {
958 Store (0x04, PAL1)
959 Store (0x04, PLE1)
960 }
961 ShiftLeft (0x01, PP1I, PIQ1)
962 Return (CRS)
963 }
964 }
965
966
967 // Serial port 0
968 Device (^SRL0)
969 {
970 Name (_HID, EisaId ("PNP0501"))
971 Name (_UID, 0x01)
972 Method (_STA, 0, NotSerialized)
973 {
974 If (LEqual (SL0B, Zero))
975 {
976 Return (0x00)
977 }
978 Else
979 {
980 Return (0x0F)
981 }
982 }
983 Name (CRS, ResourceTemplate ()
984 {
985 IO (Decode16, 0x03F8, 0x03F8, 0x01, 0x08, _Y14)
986 IRQNoFlags (_Y15) {4}
987 })
988 Method (_CRS, 0, NotSerialized)
989 {
990 CreateWordField (CRS, \_SB.PCI0.SRL0._Y14._MIN, MIN0)
991 CreateWordField (CRS, \_SB.PCI0.SRL0._Y14._MAX, MAX0)
992 CreateWordField (CRS, \_SB.PCI0.SRL0._Y15._INT, IRQ0)
993 Store (SL0B, MIN0)
994 Store (SL0B, MAX0)
995 ShiftLeft (0x01, SL0I, IRQ0)
996 Return (CRS)
997 }
998 }
999
1000 // Serial port 1
1001 Device (^SRL1)
1002 {
1003 Name (_HID, EisaId ("PNP0501"))
1004 Name (_UID, 0x02)
1005 Method (_STA, 0, NotSerialized)
1006 {
1007 If (LEqual (SL1B, Zero))
1008 {
1009 Return (0x00)
1010 }
1011 Else
1012 {
1013 Return (0x0F)
1014 }
1015 }
1016 Name (CRS, ResourceTemplate ()
1017 {
1018 IO (Decode16, 0x02F8, 0x02F8, 0x01, 0x08, _Y16)
1019 IRQNoFlags (_Y17) {3}
1020 })
1021 Method (_CRS, 0, NotSerialized)
1022 {
1023 CreateWordField (CRS, \_SB.PCI0.SRL1._Y16._MIN, MIN1)
1024 CreateWordField (CRS, \_SB.PCI0.SRL1._Y16._MAX, MAX1)
1025 CreateWordField (CRS, \_SB.PCI0.SRL1._Y17._INT, IRQ1)
1026 Store (SL1B, MIN1)
1027 Store (SL1B, MAX1)
1028 ShiftLeft (0x01, SL1I, IRQ1)
1029 Return (CRS)
1030 }
1031 }
1032
1033 // Serial port 2
1034 Device (^SRL2)
1035 {
1036 Name (_HID, EisaId ("PNP0501"))
1037 Name (_UID, 0x03)
1038 Method (_STA, 0, NotSerialized)
1039 {
1040 If (LEqual (SL2B, Zero))
1041 {
1042 Return (0x00)
1043 }
1044 Else
1045 {
1046 Return (0x0F)
1047 }
1048 }
1049 Name (CRS, ResourceTemplate ()
1050 {
1051 IO (Decode16, 0x03E8, 0x03E8, 0x01, 0x08, _Y22)
1052 IRQNoFlags (_Y23) {3}
1053 })
1054 Method (_CRS, 0, NotSerialized)
1055 {
1056 CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MIN, MIN1)
1057 CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MAX, MAX1)
1058 CreateWordField (CRS, \_SB.PCI0.SRL2._Y23._INT, IRQ1)
1059 Store (SL2B, MIN1)
1060 Store (SL2B, MAX1)
1061 ShiftLeft (0x01, SL2I, IRQ1)
1062 Return (CRS)
1063 }
1064 }
1065
1066 // Serial port 3
1067 Device (^SRL3)
1068 {
1069 Name (_HID, EisaId ("PNP0501"))
1070 Name (_UID, 0x04)
1071 Method (_STA, 0, NotSerialized)
1072 {
1073 If (LEqual (SL3B, Zero))
1074 {
1075 Return (0x00)
1076 }
1077 Else
1078 {
1079 Return (0x0F)
1080 }
1081 }
1082 Name (CRS, ResourceTemplate ()
1083 {
1084 IO (Decode16, 0x02E8, 0x02E8, 0x01, 0x08, _Y24)
1085 IRQNoFlags (_Y25) {3}
1086 })
1087 Method (_CRS, 0, NotSerialized)
1088 {
1089 CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MIN, MIN1)
1090 CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MAX, MAX1)
1091 CreateWordField (CRS, \_SB.PCI0.SRL3._Y25._INT, IRQ1)
1092 Store (SL3B, MIN1)
1093 Store (SL3B, MAX1)
1094 ShiftLeft (0x01, SL3I, IRQ1)
1095 Return (CRS)
1096 }
1097 }
1098
1099 // Programmable Interval Timer (i8254)
1100 Device (TIMR)
1101 {
1102 Name (_HID, EisaId ("PNP0100"))
1103 Name (_CRS, ResourceTemplate ()
1104 {
1105 IO (Decode16,
1106 0x0040, // Range Minimum
1107 0x0040, // Range Maximum
1108 0x00, // Alignment
1109 0x04, // Length
1110 )
1111 IO (Decode16,
1112 0x0050, // Range Minimum
1113 0x0050, // Range Maximum
1114 0x10, // Alignment
1115 0x04, // Length
1116 )
1117 })
1118 }
1119
1120 // Programmable Interrupt Controller (i8259)
1121 Device (PIC)
1122 {
1123 Name (_HID, EisaId ("PNP0000"))
1124 Name (_CRS, ResourceTemplate ()
1125 {
1126 IO (Decode16,
1127 0x0020, // Range Minimum
1128 0x0020, // Range Maximum
1129 0x00, // Alignment
1130 0x02, // Length
1131 )
1132 IO (Decode16,
1133 0x00A0, // Range Minimum
1134 0x00A0, // Range Maximum
1135 0x00, // Alignment
1136 0x02, // Length
1137 )
1138 // because in APIC configs PIC connected to pin 0,
1139 // and ISA IRQ0 rerouted to pin 2
1140 IRQNoFlags ()
1141 {2}
1142 })
1143 }
1144
1145
1146 // Real Time Clock and CMOS (MC146818)
1147 Device (RTC)
1148 {
1149 Name (_HID, EisaId ("PNP0B00"))
1150 Name (_CRS, ResourceTemplate ()
1151 {
1152 IO (Decode16,
1153 0x0070, // Range Minimum
1154 0x0070, // Range Maximum
1155 0x01, // Alignment
1156 0x02, // Length
1157 )
1158 })
1159 Method (_STA, 0, NotSerialized)
1160 {
1161 Return (URTC)
1162 }
1163 }
1164
1165 // High Precision Event Timer
1166 Device(HPET)
1167 {
1168 Name (_HID, EISAID("PNP0103"))
1169 Name (_CID, EISAID("PNP0C01"))
1170 Name(_UID, 0)
1171
1172 Method (_STA, 0, NotSerialized)
1173 {
1174 Return(UHPT)
1175 }
1176
1177 Name(CRS, ResourceTemplate()
1178 {
1179 IRQNoFlags ()
1180 {0}
1181 IRQNoFlags ()
1182 {8}
1183 Memory32Fixed (ReadWrite,
1184 0xFED00000, // Address Base
1185 0x00000400 // Address Length
1186 )
1187 })
1188
1189 Method (_CRS, 0, NotSerialized)
1190 {
1191 Return (CRS)
1192 }
1193 }
1194
1195 // System Management Controller
1196 Device (SMC)
1197 {
1198 Name (_HID, EisaId ("APP0001"))
1199 Name (_CID, "smc-napa")
1200
1201 Method (_STA, 0, NotSerialized)
1202 {
1203 Return (USMC)
1204 }
1205 Name (CRS, ResourceTemplate ()
1206 {
1207 IO (Decode16,
1208 0x0300, // Range Minimum
1209 0x0300, // Range Maximum
1210 0x01, // Alignment
1211 0x20) // Length
1212 IRQNoFlags ()
1213 {6}
1214
1215 })
1216 Method (_CRS, 0, NotSerialized)
1217 {
1218 Return (CRS)
1219 }
1220 }
1221 }
1222
1223 // NIC
1224 Device (GIGE)
1225 {
1226 /**
1227 * Generic NIC, according to
1228 * http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/devids.txt
1229 * Needed by some Windows guests.
1230 */
1231 Name (_HID, EisaId ("PNP8390"))
1232
1233 Method(_ADR, 0, NotSerialized)
1234 {
1235 Return (NICA)
1236 }
1237 /* Name (_PRW, Package (0x02)
1238 {
1239 0x09,
1240 0x04
1241 }) */
1242
1243 /* Wake up on LAN? */
1244 /* Method (EWOL, 1, NotSerialized)
1245 {
1246 Return (0x00)
1247 } */
1248
1249 Method (_STA, 0, NotSerialized)
1250 {
1251 if (LEqual (NICA, Zero)) {
1252 Return (0x00)
1253 }
1254 else {
1255 Return (0x0F)
1256 }
1257 }
1258 }
1259
1260 // Graphics device
1261 Device (GFX0)
1262 {
1263 Name (_ADR, 0x00020000)
1264
1265 // Windows releases older than Windows 8 (starting with Windows 2000)
1266 // get confused by this and lose the monitor device node. One of
1267 // the consequences is that color management is not available.
1268 // For Windows 2000 - Windows 7, disable this device (while keeping
1269 // it enabled for non-Microsoft OSes).
1270 Method (_STA, 0, NotSerialized)
1271 {
1272 If (LAnd (LGreater (MSWN(), 0x00), LLess (MSWN(), 0x08)))
1273 {
1274 Return(0x00)
1275 }
1276 Else
1277 {
1278 Return(0x0F)
1279 }
1280 }
1281
1282 Scope (\_GPE)
1283 {
1284 // GPE bit 2 handler
1285 // GPE.2 must be set and SCI raised when
1286 // display information changes.
1287 Method (_L02, 0, NotSerialized)
1288 {
1289 Notify (\_SB.PCI0.GFX0, 0x81)
1290 }
1291 }
1292
1293 Method (_DOS, 1) { }
1294
1295 Method (_DOD, 0, NotSerialized)
1296 {
1297 Return (Package()
1298 {
1299 0x80000100
1300 })
1301 }
1302
1303 Device (VGA)
1304 {
1305 Method (_ADR, 0, Serialized)
1306 {
1307 Return (0x0100)
1308 }
1309 }
1310 }
1311
1312 // HDA Audio card
1313 Device (HDEF)
1314 {
1315 Method(_DSM, 4, NotSerialized)
1316 {
1317 Store (Package (0x04)
1318 {
1319 "layout-id",
1320 Buffer (0x04)
1321 {
1322 /* 04 */ 0x04, 0x00, 0x00, 0x00
1323 },
1324
1325 "PinConfigurations",
1326 Buffer (Zero) {}
1327 }, Local0)
1328 if (LEqual (Arg0, ToUUID("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
1329 {
1330 If (LEqual (Arg1, One))
1331 {
1332 if (LEqual(Arg2, Zero))
1333 {
1334 Store (Buffer (0x01)
1335 {
1336 0x03
1337 }
1338 , Local0)
1339 Return (Local0)
1340 }
1341 if (LEqual(Arg2, One))
1342 {
1343 Return (Local0)
1344 }
1345 }
1346 }
1347 Store (Buffer (0x01)
1348 {
1349 0x0
1350 }
1351 , Local0)
1352 Return (Local0)
1353 }
1354
1355 Method(_ADR, 0, NotSerialized)
1356 {
1357 Return (HDAA)
1358 }
1359
1360 Method (_STA, 0, NotSerialized)
1361 {
1362 if (LEqual (HDAA, Zero)) {
1363 Return (0x00)
1364 }
1365 else {
1366 Return (0x0F)
1367 }
1368 }
1369 }
1370
1371
1372 // Control method battery
1373 Device (BAT0)
1374 {
1375 Name (_HID, EisaId ("PNP0C0A"))
1376 Name (_UID, 0x00)
1377
1378 Scope (\_GPE)
1379 {
1380 // GPE bit 0 handler
1381 // GPE.0 must be set and SCI raised when battery info
1382 // changed. Do NOT re-evaluate _BIF (battery info, never
1383 // changes) but DO re-evaluate _BST (dynamic state). Also
1384 // re-evaluate the AC adapter status.
1385 Method (_L00, 0, NotSerialized)
1386 {
1387 // _BST must be re-evaluated (battery state)
1388 Notify (\_SB.PCI0.BAT0, 0x80)
1389 // _PSR must be re-evaluated (AC adapter status)
1390 Notify (\_SB.PCI0.AC, 0x80)
1391 }
1392 }
1393
1394 OperationRegion (CBAT, SystemIO, 0x4040, 0x08)
1395 Field (CBAT, DwordAcc, NoLock, Preserve)
1396 {
1397 IDX0, 32,
1398 DAT0, 32,
1399 }
1400
1401 IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
1402 {
1403 STAT, 32,
1404 PRAT, 32,
1405 RCAP, 32,
1406 PVOL, 32,
1407
1408 UNIT, 32,
1409 DCAP, 32,
1410 LFCP, 32,
1411 BTEC, 32,
1412 DVOL, 32,
1413 DWRN, 32,
1414 DLOW, 32,
1415 GRN1, 32,
1416 GRN2, 32,
1417
1418 BSTA, 32,
1419 APSR, 32,
1420 }
1421
1422 Method (_STA, 0, NotSerialized)
1423 {
1424 return (BSTA)
1425 }
1426
1427 Name (PBIF, Package ()
1428 {
1429 0x01, // Power unit, 1 - mA
1430 0x7fffffff, // Design capacity
1431 0x7fffffff, // Last full charge capacity
1432 0x00, // Battery technology
1433 0xffffffff, // Design voltage
1434 0x00, // Design capacity of Warning
1435 0x00, // Design capacity of Low
1436 0x04, // Battery capacity granularity 1
1437 0x04, // Battery capacity granularity 2
1438 "1", // Model number
1439 "0", // Serial number
1440 "VBOX", // Battery type
1441 "innotek" // OEM Information
1442 })
1443
1444 Name (PBST, Package () {
1445 0, // Battery state
1446 0x7fffffff, // Battery present rate
1447 0x7fffffff, // Battery remaining capacity
1448 0x7fffffff // Battery present voltage
1449 })
1450
1451 // Battery information
1452 Method (_BIF, 0, NotSerialized)
1453 {
1454 Store (UNIT, Index (PBIF, 0,))
1455 Store (DCAP, Index (PBIF, 1,))
1456 Store (LFCP, Index (PBIF, 2,))
1457 Store (BTEC, Index (PBIF, 3,))
1458 Store (DVOL, Index (PBIF, 4,))
1459 Store (DWRN, Index (PBIF, 5,))
1460 Store (DLOW, Index (PBIF, 6,))
1461 Store (GRN1, Index (PBIF, 7,))
1462 Store (GRN2, Index (PBIF, 8,))
1463
1464 DBG ("_BIF:\n")
1465 HEX4 (DerefOf (Index (PBIF, 0,)))
1466 HEX4 (DerefOf (Index (PBIF, 1,)))
1467 HEX4 (DerefOf (Index (PBIF, 2,)))
1468 HEX4 (DerefOf (Index (PBIF, 3,)))
1469 HEX4 (DerefOf (Index (PBIF, 4,)))
1470 HEX4 (DerefOf (Index (PBIF, 5,)))
1471 HEX4 (DerefOf (Index (PBIF, 6,)))
1472 HEX4 (DerefOf (Index (PBIF, 7,)))
1473 HEX4 (DerefOf (Index (PBIF, 8,)))
1474
1475 return (PBIF)
1476 }
1477
1478 // Battery status
1479 Method (_BST, 0, NotSerialized)
1480 {
1481 Store (STAT, Index (PBST, 0,))
1482 Store (PRAT, Index (PBST, 1,))
1483 Store (RCAP, Index (PBST, 2,))
1484 Store (PVOL, Index (PBST, 3,))
1485/*
1486 DBG ("_BST:\n")
1487 HEX4 (DerefOf (Index (PBST, 0,)))
1488 HEX4 (DerefOf (Index (PBST, 1,)))
1489 HEX4 (DerefOf (Index (PBST, 2,)))
1490 HEX4 (DerefOf (Index (PBST, 3,)))
1491*/
1492 return (PBST)
1493 }
1494 }
1495
1496 Device (AC)
1497 {
1498 Name (_HID, "ACPI0003")
1499 Name (_UID, 0x00)
1500 Name (_PCL, Package (0x01)
1501 {
1502 \_SB
1503 })
1504
1505 Method (_PSR, 0, NotSerialized)
1506 {
1507 // DBG ("_PSR:\n")
1508 // HEX4 (\_SB.PCI0.BAT0.APSR)
1509 return (\_SB.PCI0.BAT0.APSR)
1510 }
1511
1512 Method (_STA, 0, NotSerialized)
1513 {
1514 return (0x0f)
1515 }
1516 }
1517 }
1518 }
1519
1520 Scope (\_SB)
1521 {
1522 Scope (PCI0)
1523 {
1524 // PCI0 current resource settings
1525 Name (CRS, ResourceTemplate ()
1526 {
1527 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
1528 0x0000,
1529 0x0000,
1530 0x00FF,
1531 0x0000,
1532 0x0100)
1533 IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08)
1534 WordIO (ResourceProducer, MinFixed, MaxFixed,
1535 PosDecode, EntireRange,
1536 0x0000,
1537 0x0000,
1538 0x0CF7,
1539 0x0000,
1540 0x0CF8)
1541 WordIO (ResourceProducer, MinFixed, MaxFixed,
1542 PosDecode, EntireRange,
1543 0x0000,
1544 0x0D00,
1545 0xFFFF,
1546 0x0000,
1547 0xF300)
1548
1549 /* Taken from ACPI faq (with some modifications) */
1550 DwordMemory( // descriptor for video RAM behind ISA bus
1551 ResourceProducer, // bit 0 of general flags is 0
1552 PosDecode,
1553 MinFixed, // Range is fixed
1554 MaxFixed, // Range is Fixed
1555 Cacheable,
1556 ReadWrite,
1557 0x00000000, // Granularity
1558 0x000a0000, // Min
1559 0x000bffff, // Max
1560 0x00000000, // Translation
1561 0x00020000 // Range Length
1562 )
1563
1564 DwordMemory( // Consumed-and-produced resource
1565 // (all of low memory space)
1566 ResourceProducer, // bit 0 of general flags is 0
1567 PosDecode, // positive Decode
1568 MinFixed, // Range is fixed
1569 MaxFixed, // Range is fixed
1570 Cacheable,
1571 ReadWrite,
1572 0x00000000, // Granularity
1573 0xe0000000, // Min (calculated dynamically)
1574
1575 0xfdffffff, // Max = 4GB - 32MB
1576 0x00000000, // Translation
1577 0x1e000000, // Range Length (calculated
1578 // dynamically)
1579 , // Optional field left blank
1580 , // Optional field left blank
1581 MEM3 // Name declaration for this
1582 // descriptor
1583 )
1584 })
1585
1586 Name (TOM, ResourceTemplate ()
1587 {
1588 QwordMemory(
1589 ResourceProducer, // bit 0 of general flags is 0
1590 PosDecode, // positive Decode
1591 MinFixed, // Range is fixed
1592 MaxFixed, // Range is fixed
1593 Prefetchable,
1594 ReadWrite,
1595 0x0000000000000000, // _GRA: Granularity.
1596 0x0000000100000000, // _MIN: Min address, def. 4GB, will be overwritten.
1597 0x0000000fffffffff, // _MAX: Max address, def. 64GB-1, will be overwritten.
1598 0x0000000000000000, // _TRA: Translation
1599 0x0000000f00000000, // _LEN: Range length (_MAX-_MIN+1)
1600 , // ResourceSourceIndex: Optional field left blank
1601 , // ResourceSource: Optional field left blank
1602 MEM4 // Name declaration for this descriptor.
1603 )
1604 })
1605
1606 Method (_CRS, 0, NotSerialized)
1607 {
1608 CreateDwordField (CRS, \_SB.PCI0.MEM3._MIN, RAMT)
1609 CreateDwordField (CRS, \_SB.PCI0.MEM3._LEN, RAMR)
1610
1611 Store (MEML, RAMT)
1612 Subtract (0xfe000000, RAMT, RAMR)
1613
1614 if (LNotEqual (PMNN, 0x00000000))
1615 {
1616 // Not for Windows < 7!
1617 If (LOr (LLess (MSWN(), 0x01), LGreater (MSWN(), 0x06)))
1618 {
1619 CreateQwordField (TOM, \_SB.PCI0.MEM4._MIN, TM4N)
1620 CreateQwordField (TOM, \_SB.PCI0.MEM4._MAX, TM4X)
1621 CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4L)
1622
1623 Multiply (PMNN, 0x10000, TM4N) // PMNN in units of 64KB
1624 Subtract (Multiply (PMNX, 0x10000), 1, TM4X) // PMNX in units of 64KB
1625 Add (Subtract (TM4X, TM4N), 1, TM4L) // determine LEN, MAX is already there
1626
1627 ConcatenateResTemplate (CRS, TOM, Local2)
1628
1629 Return (Local2)
1630 }
1631 }
1632
1633 Return (CRS)
1634 }
1635
1636 /* Defined in PCI Firmware Specification 3.0 and ACPI 3.0, with both specs
1637 * referencing each other. The _OSC method must be present to make Linux happy,
1638 * but needs to prevent the OS from taking much control so as to not upset Windows.
1639 * NB: The first DWORD is defined in the ACPI spec but not the PCI FW spec.
1640 */
1641 Method (_OSC, 4)
1642 {
1643 Name(SUPP, 0) // Support field value
1644 Name(CTRL, 0) // Control field value
1645
1646 // Break down the input capabilities buffer into individual DWORDs
1647 CreateDWordField(Arg3, 0, CDW1)
1648 CreateDWordField(Arg3, 4, CDW2)
1649 CreateDWordField(Arg3, 8, CDW3)
1650
1651 If (LEqual (Arg0, ToUUID("33db4d5b-1ff7-401c-9657-7441c03dd766")))
1652 {
1653 // Stash the Support and Control fields
1654 Store(CDW2, SUPP)
1655 Store(CDW3, CTRL)
1656
1657 DBG("_OSC: SUPP=")
1658 HEX4(SUPP)
1659 DBG(" CTRL=")
1660 HEX4(CTRL)
1661 DBG("\n")
1662
1663 // Mask off the PCI Express Capability Structure control
1664 // Not emulated well enough to satisfy Windows (Vista and later)
1665 And(CTRL, 0x0F, CTRL)
1666
1667 // If capabilities were masked, set the Capabilities Masked flag (bit 4)
1668 If (LNotEqual(CDW3, CTRL))
1669 {
1670 Or(CDW1, 0x10, CDW1)
1671 }
1672
1673 // Update the Control field and return
1674 Store(CTRL, CDW3)
1675 Return(Arg3)
1676 }
1677 Else
1678 {
1679 // UUID not known, set Unrecognized UUID flag (bit 2)
1680 Or(CDW1, 0x04, CDW1)
1681 Return(Arg3)
1682 }
1683 }
1684 }
1685 }
1686
1687 Scope (\_SB)
1688 {
1689 // Fields within PIIX3 configuration[0x60..0x63] with
1690 // IRQ mappings
1691 Field (\_SB.PCI0.SBRG.PCIC, ByteAcc, NoLock, Preserve)
1692 {
1693 Offset (0x60),
1694 PIRA, 8,
1695 PIRB, 8,
1696 PIRC, 8,
1697 PIRD, 8
1698 }
1699
1700 Name (BUFA, ResourceTemplate ()
1701 {
1702 IRQ (Level, ActiveLow, Shared) {15}
1703 })
1704 CreateWordField (BUFA, 0x01, ICRS)
1705
1706 // Generic status of IRQ routing entry
1707 Method (LSTA, 1, NotSerialized)
1708 {
1709 And (Arg0, 0x80, Local0)
1710// DBG ("LSTA: ")
1711// HEX (Arg0)
1712 If (Local0)
1713 {
1714 Return (0x09)
1715 }
1716 Else
1717 {
1718 Return (0x0B)
1719 }
1720 }
1721
1722 // Generic "current resource settings" for routing entry
1723 Method (LCRS, 1, NotSerialized)
1724 {
1725 And (Arg0, 0x0F, Local0)
1726 ShiftLeft (0x01, Local0, ICRS)
1727// DBG ("LCRS: ")
1728// HEX (ICRS)
1729 Return (BUFA)
1730 }
1731
1732 // Generic "set resource settings" for routing entry
1733 Method (LSRS, 1, NotSerialized)
1734 {
1735 CreateWordField (Arg0, 0x01, ISRS)
1736 FindSetRightBit (ISRS, Local0)
1737 Return (Decrement (Local0))
1738 }
1739
1740 // Generic "disable" for routing entry
1741 Method (LDIS, 1, NotSerialized)
1742 {
1743 Return (Or (Arg0, 0x80))
1744 }
1745
1746 // Link A
1747 Device (LNKA)
1748 {
1749 Name (_HID, EisaId ("PNP0C0F"))
1750 Name (_UID, 0x01)
1751
1752 // Status
1753 Method (_STA, 0, NotSerialized)
1754 {
1755 DBG ("LNKA._STA\n")
1756 Return (LSTA (PIRA))
1757 }
1758
1759 // Possible resource settings
1760 Method (_PRS, 0, NotSerialized)
1761 {
1762 DBG ("LNKA._PRS\n")
1763 Return (PRSA)
1764 }
1765
1766 // Disable
1767 Method (_DIS, 0, NotSerialized)
1768 {
1769 DBG ("LNKA._DIS\n")
1770 Store (LDIS (PIRA), PIRA)
1771 }
1772
1773 // Current resource settings
1774 Method (_CRS, 0, NotSerialized)
1775 {
1776 DBG ("LNKA._CRS\n")
1777 Return (LCRS (PIRA))
1778 }
1779
1780 // Set resource settings
1781 Method (_SRS, 1, NotSerialized)
1782 {
1783 DBG ("LNKA._SRS: ")
1784 HEX (LSRS (Arg0))
1785 Store (LSRS (Arg0), PIRA)
1786 }
1787 }
1788
1789 // Link B
1790 Device (LNKB)
1791 {
1792 Name (_HID, EisaId ("PNP0C0F"))
1793 Name (_UID, 0x02)
1794 Method (_STA, 0, NotSerialized)
1795 {
1796 // DBG ("LNKB._STA\n")
1797 Return (LSTA (PIRB))
1798 }
1799
1800 Method (_PRS, 0, NotSerialized)
1801 {
1802 // DBG ("LNKB._PRS\n")
1803 Return (PRSB)
1804 }
1805
1806 Method (_DIS, 0, NotSerialized)
1807 {
1808 // DBG ("LNKB._DIS\n")
1809 Store (LDIS (PIRB), PIRB)
1810 }
1811
1812 Method (_CRS, 0, NotSerialized)
1813 {
1814 // DBG ("LNKB._CRS\n")
1815 Return (LCRS (PIRB))
1816 }
1817
1818 Method (_SRS, 1, NotSerialized)
1819 {
1820 DBG ("LNKB._SRS: ")
1821 HEX (LSRS (Arg0))
1822 Store (LSRS (Arg0), PIRB)
1823 }
1824 }
1825
1826 // Link C
1827 Device (LNKC)
1828 {
1829 Name (_HID, EisaId ("PNP0C0F"))
1830 Name (_UID, 0x03)
1831 Method (_STA, 0, NotSerialized)
1832 {
1833 // DBG ("LNKC._STA\n")
1834 Return (LSTA (PIRC))
1835 }
1836
1837 Method (_PRS, 0, NotSerialized)
1838 {
1839 // DBG ("LNKC._PRS\n")
1840 Return (PRSC)
1841 }
1842
1843 Method (_DIS, 0, NotSerialized)
1844 {
1845 // DBG ("LNKC._DIS\n")
1846 Store (LDIS (PIRC), PIRC)
1847 }
1848
1849 Method (_CRS, 0, NotSerialized)
1850 {
1851 // DBG ("LNKC._CRS\n")
1852 Return (LCRS (PIRC))
1853 }
1854
1855 Method (_SRS, 1, NotSerialized)
1856 {
1857 DBG ("LNKC._SRS: ")
1858 HEX (LSRS (Arg0))
1859 Store (LSRS (Arg0), PIRC)
1860 }
1861 }
1862
1863 // Link D
1864 Device (LNKD)
1865 {
1866 Name (_HID, EisaId ("PNP0C0F"))
1867 Name (_UID, 0x04)
1868 Method (_STA, 0, NotSerialized)
1869 {
1870 // DBG ("LNKD._STA\n")
1871 Return (LSTA (PIRD))
1872 }
1873
1874 Method (_PRS, 0, NotSerialized)
1875 {
1876 // DBG ("LNKD._PRS\n")
1877 Return (PRSD)
1878 }
1879
1880 Method (_DIS, 0, NotSerialized)
1881 {
1882 // DBG ("LNKD._DIS\n")
1883 Store (LDIS (PIRA), PIRD)
1884 }
1885
1886 Method (_CRS, 0, NotSerialized)
1887 {
1888 // DBG ("LNKD._CRS\n")
1889 Return (LCRS (PIRD))
1890 }
1891
1892 Method (_SRS, 1, NotSerialized)
1893 {
1894 DBG ("LNKD._SRS: ")
1895 HEX (LSRS (Arg0))
1896 Store (LSRS (Arg0), PIRD)
1897 }
1898 }
1899 }
1900
1901 // Sx states
1902 Name (_S0, Package (2) {
1903 0x00,
1904 0x00,
1905 })
1906
1907 // Shift one by the power state number
1908 If (And(PWRS, ShiftLeft(One,1))) {
1909 Name (_S1, Package (2) {
1910 0x01,
1911 0x01,
1912 })
1913 }
1914
1915 If (And(PWRS, ShiftLeft(One,4))) {
1916 Name (_S4, Package (2) {
1917 0x05,
1918 0x05,
1919 })
1920 }
1921
1922 Name (_S5, Package (2) {
1923 0x05,
1924 0x05,
1925 })
1926
1927 Method (_PTS, 1, NotSerialized)
1928 {
1929 DBG ("Prepare to sleep: ")
1930 HEX (Arg0)
1931 }
1932}
1933
1934/*
1935 * Local Variables:
1936 * comment-start: "//"
1937 * End:
1938 */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette