VirtualBox

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

Last change on this file since 69301 was 69301, checked in by vboxsync, 7 years ago

Devices/PC: scm updates

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 63.9 KB
Line 
1/* $Id: vbox.dsl 69301 2017-10-25 13:39:08Z 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._Y19._INT, PIQ0)
914 Store (PP0B, PMI0)
915 Store (PP0B, PMA0)
916 ShiftLeft (0x01, PP0I, PIQ0)
917 Return (CRS)
918 }
919 }
920
921 // Parallel port 1
922 Device (^LPT1)
923 {
924 Name (_HID, EisaId ("PNP0400"))
925 Name (_UID, 0x02)
926 Method (_STA, 0, NotSerialized)
927 {
928 If (LEqual (PP1B, Zero))
929 {
930 Return (0x00)
931 }
932 Else
933 {
934 Return (0x0F)
935 }
936 }
937 Name (CRS, ResourceTemplate ()
938 {
939 IO (Decode16, 0x0278, 0x0278, 0x08, 0x08, _Y20)
940 IRQNoFlags (_Y21) {5}
941 })
942 Method (_CRS, 0, NotSerialized)
943 {
944 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._MIN, PMI1)
945 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._MAX, PMA1)
946 CreateWordField (CRS, \_SB.PCI0.LPT1._Y21._INT, PIQ1)
947 Store (PP1B, PMI1)
948 Store (PP1B, PMA1)
949 ShiftLeft (0x01, PP1I, PIQ1)
950 Return (CRS)
951 }
952 }
953
954
955 // Serial port 0
956 Device (^SRL0)
957 {
958 Name (_HID, EisaId ("PNP0501"))
959 Name (_UID, 0x01)
960 Method (_STA, 0, NotSerialized)
961 {
962 If (LEqual (SL0B, Zero))
963 {
964 Return (0x00)
965 }
966 Else
967 {
968 Return (0x0F)
969 }
970 }
971 Name (CRS, ResourceTemplate ()
972 {
973 IO (Decode16, 0x03F8, 0x03F8, 0x01, 0x08, _Y14)
974 IRQNoFlags (_Y15) {4}
975 })
976 Method (_CRS, 0, NotSerialized)
977 {
978 CreateWordField (CRS, \_SB.PCI0.SRL0._Y14._MIN, MIN0)
979 CreateWordField (CRS, \_SB.PCI0.SRL0._Y14._MAX, MAX0)
980 CreateWordField (CRS, \_SB.PCI0.SRL0._Y15._INT, IRQ0)
981 Store (SL0B, MIN0)
982 Store (SL0B, MAX0)
983 ShiftLeft (0x01, SL0I, IRQ0)
984 Return (CRS)
985 }
986 }
987
988 // Serial port 1
989 Device (^SRL1)
990 {
991 Name (_HID, EisaId ("PNP0501"))
992 Name (_UID, 0x02)
993 Method (_STA, 0, NotSerialized)
994 {
995 If (LEqual (SL1B, Zero))
996 {
997 Return (0x00)
998 }
999 Else
1000 {
1001 Return (0x0F)
1002 }
1003 }
1004 Name (CRS, ResourceTemplate ()
1005 {
1006 IO (Decode16, 0x02F8, 0x02F8, 0x01, 0x08, _Y16)
1007 IRQNoFlags (_Y17) {3}
1008 })
1009 Method (_CRS, 0, NotSerialized)
1010 {
1011 CreateWordField (CRS, \_SB.PCI0.SRL1._Y16._MIN, MIN1)
1012 CreateWordField (CRS, \_SB.PCI0.SRL1._Y16._MAX, MAX1)
1013 CreateWordField (CRS, \_SB.PCI0.SRL1._Y17._INT, IRQ1)
1014 Store (SL1B, MIN1)
1015 Store (SL1B, MAX1)
1016 ShiftLeft (0x01, SL1I, IRQ1)
1017 Return (CRS)
1018 }
1019 }
1020
1021 // Serial port 2
1022 Device (^SRL2)
1023 {
1024 Name (_HID, EisaId ("PNP0501"))
1025 Name (_UID, 0x03)
1026 Method (_STA, 0, NotSerialized)
1027 {
1028 If (LEqual (SL2B, Zero))
1029 {
1030 Return (0x00)
1031 }
1032 Else
1033 {
1034 Return (0x0F)
1035 }
1036 }
1037 Name (CRS, ResourceTemplate ()
1038 {
1039 IO (Decode16, 0x03E8, 0x03E8, 0x01, 0x08, _Y22)
1040 IRQNoFlags (_Y23) {3}
1041 })
1042 Method (_CRS, 0, NotSerialized)
1043 {
1044 CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MIN, MIN1)
1045 CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MAX, MAX1)
1046 CreateWordField (CRS, \_SB.PCI0.SRL2._Y23._INT, IRQ1)
1047 Store (SL2B, MIN1)
1048 Store (SL2B, MAX1)
1049 ShiftLeft (0x01, SL2I, IRQ1)
1050 Return (CRS)
1051 }
1052 }
1053
1054 // Serial port 3
1055 Device (^SRL3)
1056 {
1057 Name (_HID, EisaId ("PNP0501"))
1058 Name (_UID, 0x04)
1059 Method (_STA, 0, NotSerialized)
1060 {
1061 If (LEqual (SL3B, Zero))
1062 {
1063 Return (0x00)
1064 }
1065 Else
1066 {
1067 Return (0x0F)
1068 }
1069 }
1070 Name (CRS, ResourceTemplate ()
1071 {
1072 IO (Decode16, 0x02E8, 0x02E8, 0x01, 0x08, _Y24)
1073 IRQNoFlags (_Y25) {3}
1074 })
1075 Method (_CRS, 0, NotSerialized)
1076 {
1077 CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MIN, MIN1)
1078 CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MAX, MAX1)
1079 CreateWordField (CRS, \_SB.PCI0.SRL3._Y25._INT, IRQ1)
1080 Store (SL3B, MIN1)
1081 Store (SL3B, MAX1)
1082 ShiftLeft (0x01, SL3I, IRQ1)
1083 Return (CRS)
1084 }
1085 }
1086
1087 // Programmable Interval Timer (i8254)
1088 Device (TIMR)
1089 {
1090 Name (_HID, EisaId ("PNP0100"))
1091 Name (_CRS, ResourceTemplate ()
1092 {
1093 IO (Decode16,
1094 0x0040, // Range Minimum
1095 0x0040, // Range Maximum
1096 0x00, // Alignment
1097 0x04, // Length
1098 )
1099 IO (Decode16,
1100 0x0050, // Range Minimum
1101 0x0050, // Range Maximum
1102 0x10, // Alignment
1103 0x04, // Length
1104 )
1105 })
1106 }
1107
1108 // Programmable Interrupt Controller (i8259)
1109 Device (PIC)
1110 {
1111 Name (_HID, EisaId ("PNP0000"))
1112 Name (_CRS, ResourceTemplate ()
1113 {
1114 IO (Decode16,
1115 0x0020, // Range Minimum
1116 0x0020, // Range Maximum
1117 0x00, // Alignment
1118 0x02, // Length
1119 )
1120 IO (Decode16,
1121 0x00A0, // Range Minimum
1122 0x00A0, // Range Maximum
1123 0x00, // Alignment
1124 0x02, // Length
1125 )
1126 // because in APIC configs PIC connected to pin 0,
1127 // and ISA IRQ0 rerouted to pin 2
1128 IRQNoFlags ()
1129 {2}
1130 })
1131 }
1132
1133
1134 // Real Time Clock and CMOS (MC146818)
1135 Device (RTC)
1136 {
1137 Name (_HID, EisaId ("PNP0B00"))
1138 Name (_CRS, ResourceTemplate ()
1139 {
1140 IO (Decode16,
1141 0x0070, // Range Minimum
1142 0x0070, // Range Maximum
1143 0x01, // Alignment
1144 0x02, // Length
1145 )
1146 })
1147 Method (_STA, 0, NotSerialized)
1148 {
1149 Return (URTC)
1150 }
1151 }
1152
1153 // High Precision Event Timer
1154 Device(HPET)
1155 {
1156 Name (_HID, EISAID("PNP0103"))
1157 Name (_CID, EISAID("PNP0C01"))
1158 Name(_UID, 0)
1159
1160 Method (_STA, 0, NotSerialized)
1161 {
1162 Return(UHPT)
1163 }
1164
1165 Name(CRS, ResourceTemplate()
1166 {
1167 IRQNoFlags ()
1168 {0}
1169 IRQNoFlags ()
1170 {8}
1171 Memory32Fixed (ReadWrite,
1172 0xFED00000, // Address Base
1173 0x00000400 // Address Length
1174 )
1175 })
1176
1177 Method (_CRS, 0, NotSerialized)
1178 {
1179 Return (CRS)
1180 }
1181 }
1182
1183 // System Management Controller
1184 Device (SMC)
1185 {
1186 Name (_HID, EisaId ("APP0001"))
1187 Name (_CID, "smc-napa")
1188
1189 Method (_STA, 0, NotSerialized)
1190 {
1191 Return (USMC)
1192 }
1193 Name (CRS, ResourceTemplate ()
1194 {
1195 IO (Decode16,
1196 0x0300, // Range Minimum
1197 0x0300, // Range Maximum
1198 0x01, // Alignment
1199 0x20) // Length
1200 IRQNoFlags ()
1201 {6}
1202
1203 })
1204 Method (_CRS, 0, NotSerialized)
1205 {
1206 Return (CRS)
1207 }
1208 }
1209 }
1210
1211 // NIC
1212 Device (GIGE)
1213 {
1214 /**
1215 * Generic NIC, according to
1216 * http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/devids.txt
1217 * Needed by some Windows guests.
1218 */
1219 Name (_HID, EisaId ("PNP8390"))
1220
1221 Method(_ADR, 0, NotSerialized)
1222 {
1223 Return (NICA)
1224 }
1225 /* Name (_PRW, Package (0x02)
1226 {
1227 0x09,
1228 0x04
1229 }) */
1230
1231 /* Wake up on LAN? */
1232 /* Method (EWOL, 1, NotSerialized)
1233 {
1234 Return (0x00)
1235 } */
1236
1237 Method (_STA, 0, NotSerialized)
1238 {
1239 if (LEqual (NICA, Zero)) {
1240 Return (0x00)
1241 }
1242 else {
1243 Return (0x0F)
1244 }
1245 }
1246 }
1247
1248 // Graphics device
1249 Device (GFX0)
1250 {
1251 Name (_ADR, 0x00020000)
1252
1253 // Windows releases older than Windows 8 (starting with Windows 2000)
1254 // get confused by this and lose the monitor device node. One of
1255 // the consequences is that color management is not available.
1256 // For Windows 2000 - Windows 7, disable this device (while keeping
1257 // it enabled for non-Microsoft OSes).
1258 Method (_STA, 0, NotSerialized)
1259 {
1260 If (LAnd (LGreater (MSWN(), 0x00), LLess (MSWN(), 0x08)))
1261 {
1262 Return(0x00)
1263 }
1264 Else
1265 {
1266 Return(0x0F)
1267 }
1268 }
1269
1270 Scope (\_GPE)
1271 {
1272 // GPE bit 2 handler
1273 // GPE.2 must be set and SCI raised when
1274 // display information changes.
1275 Method (_L02, 0, NotSerialized)
1276 {
1277 Notify (\_SB.PCI0.GFX0, 0x81)
1278 }
1279 }
1280
1281 Method (_DOS, 1) { }
1282
1283 Method (_DOD, 0, NotSerialized)
1284 {
1285 Return (Package()
1286 {
1287 0x80000100
1288 })
1289 }
1290
1291 Device (VGA)
1292 {
1293 Method (_ADR, 0, Serialized)
1294 {
1295 Return (0x0100)
1296 }
1297 }
1298 }
1299
1300 // HDA Audio card
1301 Device (HDEF)
1302 {
1303 Method(_DSM, 4, NotSerialized)
1304 {
1305 Store (Package (0x04)
1306 {
1307 "layout-id",
1308 Buffer (0x04)
1309 {
1310 /* 04 */ 0x04, 0x00, 0x00, 0x00
1311 },
1312
1313 "PinConfigurations",
1314 Buffer (Zero) {}
1315 }, Local0)
1316 if (LEqual (Arg0, ToUUID("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
1317 {
1318 If (LEqual (Arg1, One))
1319 {
1320 if (LEqual(Arg2, Zero))
1321 {
1322 Store (Buffer (0x01)
1323 {
1324 0x03
1325 }
1326 , Local0)
1327 Return (Local0)
1328 }
1329 if (LEqual(Arg2, One))
1330 {
1331 Return (Local0)
1332 }
1333 }
1334 }
1335 Store (Buffer (0x01)
1336 {
1337 0x0
1338 }
1339 , Local0)
1340 Return (Local0)
1341 }
1342
1343 Method(_ADR, 0, NotSerialized)
1344 {
1345 Return (HDAA)
1346 }
1347
1348 Method (_STA, 0, NotSerialized)
1349 {
1350 if (LEqual (HDAA, Zero)) {
1351 Return (0x00)
1352 }
1353 else {
1354 Return (0x0F)
1355 }
1356 }
1357 }
1358
1359
1360 // Control method battery
1361 Device (BAT0)
1362 {
1363 Name (_HID, EisaId ("PNP0C0A"))
1364 Name (_UID, 0x00)
1365
1366 Scope (\_GPE)
1367 {
1368 // GPE bit 0 handler
1369 // GPE.0 must be set and SCI raised when battery info
1370 // changed. Do NOT re-evaluate _BIF (battery info, never
1371 // changes) but DO re-evaluate _BST (dynamic state). Also
1372 // re-evaluate the AC adapter status.
1373 Method (_L00, 0, NotSerialized)
1374 {
1375 // _BST must be re-evaluated (battery state)
1376 Notify (\_SB.PCI0.BAT0, 0x80)
1377 // _PSR must be re-evaluated (AC adapter status)
1378 Notify (\_SB.PCI0.AC, 0x80)
1379 }
1380 }
1381
1382 OperationRegion (CBAT, SystemIO, 0x4040, 0x08)
1383 Field (CBAT, DwordAcc, NoLock, Preserve)
1384 {
1385 IDX0, 32,
1386 DAT0, 32,
1387 }
1388
1389 IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
1390 {
1391 STAT, 32,
1392 PRAT, 32,
1393 RCAP, 32,
1394 PVOL, 32,
1395
1396 UNIT, 32,
1397 DCAP, 32,
1398 LFCP, 32,
1399 BTEC, 32,
1400 DVOL, 32,
1401 DWRN, 32,
1402 DLOW, 32,
1403 GRN1, 32,
1404 GRN2, 32,
1405
1406 BSTA, 32,
1407 APSR, 32,
1408 }
1409
1410 Method (_STA, 0, NotSerialized)
1411 {
1412 return (BSTA)
1413 }
1414
1415 Name (PBIF, Package ()
1416 {
1417 0x01, // Power unit, 1 - mA
1418 0x7fffffff, // Design capacity
1419 0x7fffffff, // Last full charge capacity
1420 0x00, // Battery technology
1421 0xffffffff, // Design voltage
1422 0x00, // Design capacity of Warning
1423 0x00, // Design capacity of Low
1424 0x04, // Battery capacity granularity 1
1425 0x04, // Battery capacity granularity 2
1426 "1", // Model number
1427 "0", // Serial number
1428 "VBOX", // Battery type
1429 "innotek" // OEM Information
1430 })
1431
1432 Name (PBST, Package () {
1433 0, // Battery state
1434 0x7fffffff, // Battery present rate
1435 0x7fffffff, // Battery remaining capacity
1436 0x7fffffff // Battery present voltage
1437 })
1438
1439 // Battery information
1440 Method (_BIF, 0, NotSerialized)
1441 {
1442 Store (UNIT, Index (PBIF, 0,))
1443 Store (DCAP, Index (PBIF, 1,))
1444 Store (LFCP, Index (PBIF, 2,))
1445 Store (BTEC, Index (PBIF, 3,))
1446 Store (DVOL, Index (PBIF, 4,))
1447 Store (DWRN, Index (PBIF, 5,))
1448 Store (DLOW, Index (PBIF, 6,))
1449 Store (GRN1, Index (PBIF, 7,))
1450 Store (GRN2, Index (PBIF, 8,))
1451
1452 DBG ("_BIF:\n")
1453 HEX4 (DerefOf (Index (PBIF, 0,)))
1454 HEX4 (DerefOf (Index (PBIF, 1,)))
1455 HEX4 (DerefOf (Index (PBIF, 2,)))
1456 HEX4 (DerefOf (Index (PBIF, 3,)))
1457 HEX4 (DerefOf (Index (PBIF, 4,)))
1458 HEX4 (DerefOf (Index (PBIF, 5,)))
1459 HEX4 (DerefOf (Index (PBIF, 6,)))
1460 HEX4 (DerefOf (Index (PBIF, 7,)))
1461 HEX4 (DerefOf (Index (PBIF, 8,)))
1462
1463 return (PBIF)
1464 }
1465
1466 // Battery status
1467 Method (_BST, 0, NotSerialized)
1468 {
1469 Store (STAT, Index (PBST, 0,))
1470 Store (PRAT, Index (PBST, 1,))
1471 Store (RCAP, Index (PBST, 2,))
1472 Store (PVOL, Index (PBST, 3,))
1473/*
1474 DBG ("_BST:\n")
1475 HEX4 (DerefOf (Index (PBST, 0,)))
1476 HEX4 (DerefOf (Index (PBST, 1,)))
1477 HEX4 (DerefOf (Index (PBST, 2,)))
1478 HEX4 (DerefOf (Index (PBST, 3,)))
1479*/
1480 return (PBST)
1481 }
1482 }
1483
1484 Device (AC)
1485 {
1486 Name (_HID, "ACPI0003")
1487 Name (_UID, 0x00)
1488 Name (_PCL, Package (0x01)
1489 {
1490 \_SB
1491 })
1492
1493 Method (_PSR, 0, NotSerialized)
1494 {
1495 // DBG ("_PSR:\n")
1496 // HEX4 (\_SB.PCI0.BAT0.APSR)
1497 return (\_SB.PCI0.BAT0.APSR)
1498 }
1499
1500 Method (_STA, 0, NotSerialized)
1501 {
1502 return (0x0f)
1503 }
1504 }
1505 }
1506 }
1507
1508 Scope (\_SB)
1509 {
1510 Scope (PCI0)
1511 {
1512 // PCI0 current resource settings
1513 Name (CRS, ResourceTemplate ()
1514 {
1515 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
1516 0x0000,
1517 0x0000,
1518 0x00FF,
1519 0x0000,
1520 0x0100)
1521 IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08)
1522 WordIO (ResourceProducer, MinFixed, MaxFixed,
1523 PosDecode, EntireRange,
1524 0x0000,
1525 0x0000,
1526 0x0CF7,
1527 0x0000,
1528 0x0CF8)
1529 WordIO (ResourceProducer, MinFixed, MaxFixed,
1530 PosDecode, EntireRange,
1531 0x0000,
1532 0x0D00,
1533 0xFFFF,
1534 0x0000,
1535 0xF300)
1536
1537 /* Taken from ACPI faq (with some modifications) */
1538 DwordMemory( // descriptor for video RAM behind ISA bus
1539 ResourceProducer, // bit 0 of general flags is 0
1540 PosDecode,
1541 MinFixed, // Range is fixed
1542 MaxFixed, // Range is Fixed
1543 Cacheable,
1544 ReadWrite,
1545 0x00000000, // Granularity
1546 0x000a0000, // Min
1547 0x000bffff, // Max
1548 0x00000000, // Translation
1549 0x00020000 // Range Length
1550 )
1551
1552 DwordMemory( // Consumed-and-produced resource
1553 // (all of low memory space)
1554 ResourceProducer, // bit 0 of general flags is 0
1555 PosDecode, // positive Decode
1556 MinFixed, // Range is fixed
1557 MaxFixed, // Range is fixed
1558 Cacheable,
1559 ReadWrite,
1560 0x00000000, // Granularity
1561 0xe0000000, // Min (calculated dynamically)
1562
1563 0xfdffffff, // Max = 4GB - 32MB
1564 0x00000000, // Translation
1565 0x1e000000, // Range Length (calculated
1566 // dynamically)
1567 , // Optional field left blank
1568 , // Optional field left blank
1569 MEM3 // Name declaration for this
1570 // descriptor
1571 )
1572 })
1573
1574 Name (TOM, ResourceTemplate ()
1575 {
1576 QwordMemory(
1577 ResourceProducer, // bit 0 of general flags is 0
1578 PosDecode, // positive Decode
1579 MinFixed, // Range is fixed
1580 MaxFixed, // Range is fixed
1581 Prefetchable,
1582 ReadWrite,
1583 0x0000000000000000, // _GRA: Granularity.
1584 0x0000000100000000, // _MIN: Min address, def. 4GB, will be overwritten.
1585 0x0000000fffffffff, // _MAX: Max address, def. 64GB-1, will be overwritten.
1586 0x0000000000000000, // _TRA: Translation
1587 0x0000000f00000000, // _LEN: Range length (_MAX-_MIN+1)
1588 , // ResourceSourceIndex: Optional field left blank
1589 , // ResourceSource: Optional field left blank
1590 MEM4 // Name declaration for this descriptor.
1591 )
1592 })
1593
1594 Method (_CRS, 0, NotSerialized)
1595 {
1596 CreateDwordField (CRS, \_SB.PCI0.MEM3._MIN, RAMT)
1597 CreateDwordField (CRS, \_SB.PCI0.MEM3._LEN, RAMR)
1598
1599 Store (MEML, RAMT)
1600 Subtract (0xfe000000, RAMT, RAMR)
1601
1602 if (LNotEqual (PMNN, 0x00000000))
1603 {
1604 // Not for Windows < 7!
1605 If (LOr (LLess (MSWN(), 0x01), LGreater (MSWN(), 0x06)))
1606 {
1607 CreateQwordField (TOM, \_SB.PCI0.MEM4._MIN, TM4N)
1608 CreateQwordField (TOM, \_SB.PCI0.MEM4._MAX, TM4X)
1609 CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4L)
1610
1611 Multiply (PMNN, 0x10000, TM4N) // PMNN in units of 64KB
1612 Subtract (Multiply (PMNX, 0x10000), 1, TM4X) // PMNX in units of 64KB
1613 Add (Subtract (TM4X, TM4N), 1, TM4L) // determine LEN, MAX is already there
1614
1615 ConcatenateResTemplate (CRS, TOM, Local2)
1616
1617 Return (Local2)
1618 }
1619 }
1620
1621 Return (CRS)
1622 }
1623
1624 Method (_OSC, 4)
1625 {
1626 If (LEqual (Arg0, ToUUID("33db4d5b-1ff7-401c-9657-7441c03dd766")))
1627 {
1628 // OS controls everything.
1629 Return (Arg3)
1630 }
1631 Else
1632 {
1633 // UUID not known
1634 CreateDWordField(Arg3, 0, CDW1)
1635 Or(CDW1, 4, CDW1)
1636 Return (Arg3)
1637 }
1638 }
1639 }
1640 }
1641
1642 Scope (\_SB)
1643 {
1644 // Fields within PIIX3 configuration[0x60..0x63] with
1645 // IRQ mappings
1646 Field (\_SB.PCI0.SBRG.PCIC, ByteAcc, NoLock, Preserve)
1647 {
1648 Offset (0x60),
1649 PIRA, 8,
1650 PIRB, 8,
1651 PIRC, 8,
1652 PIRD, 8
1653 }
1654
1655 Name (BUFA, ResourceTemplate ()
1656 {
1657 IRQ (Level, ActiveLow, Shared) {15}
1658 })
1659 CreateWordField (BUFA, 0x01, ICRS)
1660
1661 // Generic status of IRQ routing entry
1662 Method (LSTA, 1, NotSerialized)
1663 {
1664 And (Arg0, 0x80, Local0)
1665// DBG ("LSTA: ")
1666// HEX (Arg0)
1667 If (Local0)
1668 {
1669 Return (0x09)
1670 }
1671 Else
1672 {
1673 Return (0x0B)
1674 }
1675 }
1676
1677 // Generic "current resource settings" for routing entry
1678 Method (LCRS, 1, NotSerialized)
1679 {
1680 And (Arg0, 0x0F, Local0)
1681 ShiftLeft (0x01, Local0, ICRS)
1682// DBG ("LCRS: ")
1683// HEX (ICRS)
1684 Return (BUFA)
1685 }
1686
1687 // Generic "set resource settings" for routing entry
1688 Method (LSRS, 1, NotSerialized)
1689 {
1690 CreateWordField (Arg0, 0x01, ISRS)
1691 FindSetRightBit (ISRS, Local0)
1692 Return (Decrement (Local0))
1693 }
1694
1695 // Generic "disable" for routing entry
1696 Method (LDIS, 1, NotSerialized)
1697 {
1698 Return (Or (Arg0, 0x80))
1699 }
1700
1701 // Link A
1702 Device (LNKA)
1703 {
1704 Name (_HID, EisaId ("PNP0C0F"))
1705 Name (_UID, 0x01)
1706
1707 // Status
1708 Method (_STA, 0, NotSerialized)
1709 {
1710 DBG ("LNKA._STA\n")
1711 Return (LSTA (PIRA))
1712 }
1713
1714 // Possible resource settings
1715 Method (_PRS, 0, NotSerialized)
1716 {
1717 DBG ("LNKA._PRS\n")
1718 Return (PRSA)
1719 }
1720
1721 // Disable
1722 Method (_DIS, 0, NotSerialized)
1723 {
1724 DBG ("LNKA._DIS\n")
1725 Store (LDIS (PIRA), PIRA)
1726 }
1727
1728 // Current resource settings
1729 Method (_CRS, 0, NotSerialized)
1730 {
1731 DBG ("LNKA._CRS\n")
1732 Return (LCRS (PIRA))
1733 }
1734
1735 // Set resource settings
1736 Method (_SRS, 1, NotSerialized)
1737 {
1738 DBG ("LNKA._SRS: ")
1739 HEX (LSRS (Arg0))
1740 Store (LSRS (Arg0), PIRA)
1741 }
1742 }
1743
1744 // Link B
1745 Device (LNKB)
1746 {
1747 Name (_HID, EisaId ("PNP0C0F"))
1748 Name (_UID, 0x02)
1749 Method (_STA, 0, NotSerialized)
1750 {
1751 // DBG ("LNKB._STA\n")
1752 Return (LSTA (PIRB))
1753 }
1754
1755 Method (_PRS, 0, NotSerialized)
1756 {
1757 // DBG ("LNKB._PRS\n")
1758 Return (PRSB)
1759 }
1760
1761 Method (_DIS, 0, NotSerialized)
1762 {
1763 // DBG ("LNKB._DIS\n")
1764 Store (LDIS (PIRB), PIRB)
1765 }
1766
1767 Method (_CRS, 0, NotSerialized)
1768 {
1769 // DBG ("LNKB._CRS\n")
1770 Return (LCRS (PIRB))
1771 }
1772
1773 Method (_SRS, 1, NotSerialized)
1774 {
1775 DBG ("LNKB._SRS: ")
1776 HEX (LSRS (Arg0))
1777 Store (LSRS (Arg0), PIRB)
1778 }
1779 }
1780
1781 // Link C
1782 Device (LNKC)
1783 {
1784 Name (_HID, EisaId ("PNP0C0F"))
1785 Name (_UID, 0x03)
1786 Method (_STA, 0, NotSerialized)
1787 {
1788 // DBG ("LNKC._STA\n")
1789 Return (LSTA (PIRC))
1790 }
1791
1792 Method (_PRS, 0, NotSerialized)
1793 {
1794 // DBG ("LNKC._PRS\n")
1795 Return (PRSC)
1796 }
1797
1798 Method (_DIS, 0, NotSerialized)
1799 {
1800 // DBG ("LNKC._DIS\n")
1801 Store (LDIS (PIRC), PIRC)
1802 }
1803
1804 Method (_CRS, 0, NotSerialized)
1805 {
1806 // DBG ("LNKC._CRS\n")
1807 Return (LCRS (PIRC))
1808 }
1809
1810 Method (_SRS, 1, NotSerialized)
1811 {
1812 DBG ("LNKC._SRS: ")
1813 HEX (LSRS (Arg0))
1814 Store (LSRS (Arg0), PIRC)
1815 }
1816 }
1817
1818 // Link D
1819 Device (LNKD)
1820 {
1821 Name (_HID, EisaId ("PNP0C0F"))
1822 Name (_UID, 0x04)
1823 Method (_STA, 0, NotSerialized)
1824 {
1825 // DBG ("LNKD._STA\n")
1826 Return (LSTA (PIRD))
1827 }
1828
1829 Method (_PRS, 0, NotSerialized)
1830 {
1831 // DBG ("LNKD._PRS\n")
1832 Return (PRSD)
1833 }
1834
1835 Method (_DIS, 0, NotSerialized)
1836 {
1837 // DBG ("LNKD._DIS\n")
1838 Store (LDIS (PIRA), PIRD)
1839 }
1840
1841 Method (_CRS, 0, NotSerialized)
1842 {
1843 // DBG ("LNKD._CRS\n")
1844 Return (LCRS (PIRD))
1845 }
1846
1847 Method (_SRS, 1, NotSerialized)
1848 {
1849 DBG ("LNKD._SRS: ")
1850 HEX (LSRS (Arg0))
1851 Store (LSRS (Arg0), PIRD)
1852 }
1853 }
1854 }
1855
1856 // Sx states
1857 Name (_S0, Package (2) {
1858 0x00,
1859 0x00,
1860 })
1861
1862 // Shift one by the power state number
1863 If (And(PWRS, ShiftLeft(One,1))) {
1864 Name (_S1, Package (2) {
1865 0x01,
1866 0x01,
1867 })
1868 }
1869
1870 If (And(PWRS, ShiftLeft(One,4))) {
1871 Name (_S4, Package (2) {
1872 0x05,
1873 0x05,
1874 })
1875 }
1876
1877 Name (_S5, Package (2) {
1878 0x05,
1879 0x05,
1880 })
1881
1882 Method (_PTS, 1, NotSerialized)
1883 {
1884 DBG ("Prepare to sleep: ")
1885 HEX (Arg0)
1886 }
1887}
1888
1889/*
1890 * Local Variables:
1891 * comment-start: "//"
1892 * End:
1893 */
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