VirtualBox

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

Last change on this file since 82941 was 82410, checked in by vboxsync, 5 years ago

ACPI/Main: Report NVMe controller in ACPI tables to convince OS X it's an internal (built-in) device. Largely cosmetic.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 66.7 KB
Line 
1/* $Id: vbox.dsl 82410 2019-12-05 12:06:44Z vboxsync $ */
2/** @file
3 * VirtualBox ACPI
4 */
5
6/*
7 * Copyright (C) 2006-2019 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 NVMA, 32, // Primary NVMe controller PCI address
374 Offset (0x80),
375 ININ, 32,
376 Offset (0x200),
377 VAIN, 32,
378 }
379
380 Scope (\_SB)
381 {
382 Method (_INI, 0, NotSerialized)
383 {
384 Store (0xbadc0de, VAIN)
385 DBG ("MEML: ")
386 HEX4 (MEML)
387 DBG ("UIOA: ")
388 HEX4 (UIOA)
389 DBG ("UHPT: ")
390 HEX4 (UHPT)
391 DBG ("USMC: ")
392 HEX4 (USMC)
393 DBG ("UFDC: ")
394 HEX4 (UFDC)
395 DBG ("PMNN: ")
396 HEX4 (PMNN)
397 }
398
399 // PCI PIC IRQ Routing table
400 // Must match pci.c:pci_slot_get_pirq
401 Name (PR00, Package ()
402 {
403/** @todo add devices 0/1 to be complete */
404 Package (0x04) {0x0002FFFF, 0x00, LNKB, 0x00,},
405 Package (0x04) {0x0002FFFF, 0x01, LNKC, 0x00,},
406 Package (0x04) {0x0002FFFF, 0x02, LNKD, 0x00,},
407 Package (0x04) {0x0002FFFF, 0x03, LNKA, 0x00,},
408
409 Package (0x04) {0x0003FFFF, 0x00, LNKC, 0x00,},
410 Package (0x04) {0x0003FFFF, 0x01, LNKD, 0x00,},
411 Package (0x04) {0x0003FFFF, 0x02, LNKA, 0x00,},
412 Package (0x04) {0x0003FFFF, 0x03, LNKB, 0x00,},
413
414 Package (0x04) {0x0004FFFF, 0x00, LNKD, 0x00,},
415 Package (0x04) {0x0004FFFF, 0x01, LNKA, 0x00,},
416 Package (0x04) {0x0004FFFF, 0x02, LNKB, 0x00,},
417 Package (0x04) {0x0004FFFF, 0x03, LNKC, 0x00,},
418
419 Package (0x04) {0x0005FFFF, 0x00, LNKA, 0x00,},
420 Package (0x04) {0x0005FFFF, 0x01, LNKB, 0x00,},
421 Package (0x04) {0x0005FFFF, 0x02, LNKC, 0x00,},
422 Package (0x04) {0x0005FFFF, 0x03, LNKD, 0x00,},
423
424 Package (0x04) {0x0006FFFF, 0x00, LNKB, 0x00,},
425 Package (0x04) {0x0006FFFF, 0x01, LNKC, 0x00,},
426 Package (0x04) {0x0006FFFF, 0x02, LNKD, 0x00,},
427 Package (0x04) {0x0006FFFF, 0x03, LNKA, 0x00,},
428
429 Package (0x04) {0x0007FFFF, 0x00, LNKC, 0x00,},
430 Package (0x04) {0x0007FFFF, 0x01, LNKD, 0x00,},
431 Package (0x04) {0x0007FFFF, 0x02, LNKA, 0x00,},
432 Package (0x04) {0x0007FFFF, 0x03, LNKB, 0x00,},
433
434 Package (0x04) {0x0008FFFF, 0x00, LNKD, 0x00,},
435 Package (0x04) {0x0008FFFF, 0x01, LNKA, 0x00,},
436 Package (0x04) {0x0008FFFF, 0x02, LNKB, 0x00,},
437 Package (0x04) {0x0008FFFF, 0x03, LNKC, 0x00,},
438
439 Package (0x04) {0x0009FFFF, 0x00, LNKA, 0x00,},
440 Package (0x04) {0x0009FFFF, 0x01, LNKB, 0x00,},
441 Package (0x04) {0x0009FFFF, 0x02, LNKC, 0x00,},
442 Package (0x04) {0x0009FFFF, 0x03, LNKD, 0x00,},
443
444 Package (0x04) {0x000AFFFF, 0x00, LNKB, 0x00,},
445 Package (0x04) {0x000AFFFF, 0x01, LNKC, 0x00,},
446 Package (0x04) {0x000AFFFF, 0x02, LNKD, 0x00,},
447 Package (0x04) {0x000AFFFF, 0x03, LNKA, 0x00,},
448
449 Package (0x04) {0x000BFFFF, 0x00, LNKC, 0x00,},
450 Package (0x04) {0x000BFFFF, 0x01, LNKD, 0x00,},
451 Package (0x04) {0x000BFFFF, 0x02, LNKA, 0x00,},
452 Package (0x04) {0x000BFFFF, 0x03, LNKB, 0x00,},
453
454 Package (0x04) {0x000CFFFF, 0x00, LNKD, 0x00,},
455 Package (0x04) {0x000CFFFF, 0x01, LNKA, 0x00,},
456 Package (0x04) {0x000CFFFF, 0x02, LNKB, 0x00,},
457 Package (0x04) {0x000CFFFF, 0x03, LNKC, 0x00,},
458
459 Package (0x04) {0x000DFFFF, 0x00, LNKA, 0x00,},
460 Package (0x04) {0x000DFFFF, 0x01, LNKB, 0x00,},
461 Package (0x04) {0x000DFFFF, 0x02, LNKC, 0x00,},
462 Package (0x04) {0x000DFFFF, 0x03, LNKD, 0x00,},
463
464 Package (0x04) {0x000EFFFF, 0x00, LNKB, 0x00,},
465 Package (0x04) {0x000EFFFF, 0x01, LNKC, 0x00,},
466 Package (0x04) {0x000EFFFF, 0x02, LNKD, 0x00,},
467 Package (0x04) {0x000EFFFF, 0x03, LNKA, 0x00,},
468
469 Package (0x04) {0x000FFFFF, 0x00, LNKC, 0x00,},
470 Package (0x04) {0x000FFFFF, 0x01, LNKD, 0x00,},
471 Package (0x04) {0x000FFFFF, 0x02, LNKA, 0x00,},
472 Package (0x04) {0x000FFFFF, 0x03, LNKB, 0x00,},
473
474 Package (0x04) {0x0010FFFF, 0x00, LNKD, 0x00,},
475 Package (0x04) {0x0010FFFF, 0x01, LNKA, 0x00,},
476 Package (0x04) {0x0010FFFF, 0x02, LNKB, 0x00,},
477 Package (0x04) {0x0010FFFF, 0x03, LNKC, 0x00,},
478
479 Package (0x04) {0x0011FFFF, 0x00, LNKA, 0x00,},
480 Package (0x04) {0x0011FFFF, 0x01, LNKB, 0x00,},
481 Package (0x04) {0x0011FFFF, 0x02, LNKC, 0x00,},
482 Package (0x04) {0x0011FFFF, 0x03, LNKD, 0x00,},
483
484 Package (0x04) {0x0012FFFF, 0x00, LNKB, 0x00,},
485 Package (0x04) {0x0012FFFF, 0x01, LNKC, 0x00,},
486 Package (0x04) {0x0012FFFF, 0x02, LNKD, 0x00,},
487 Package (0x04) {0x0012FFFF, 0x03, LNKA, 0x00,},
488
489 Package (0x04) {0x0013FFFF, 0x00, LNKC, 0x00,},
490 Package (0x04) {0x0013FFFF, 0x01, LNKD, 0x00,},
491 Package (0x04) {0x0013FFFF, 0x02, LNKA, 0x00,},
492 Package (0x04) {0x0013FFFF, 0x03, LNKB, 0x00,},
493
494 Package (0x04) {0x0014FFFF, 0x00, LNKD, 0x00,},
495 Package (0x04) {0x0014FFFF, 0x01, LNKA, 0x00,},
496 Package (0x04) {0x0014FFFF, 0x02, LNKB, 0x00,},
497 Package (0x04) {0x0014FFFF, 0x03, LNKC, 0x00,},
498
499 Package (0x04) {0x0015FFFF, 0x00, LNKA, 0x00,},
500 Package (0x04) {0x0015FFFF, 0x01, LNKB, 0x00,},
501 Package (0x04) {0x0015FFFF, 0x02, LNKC, 0x00,},
502 Package (0x04) {0x0015FFFF, 0x03, LNKD, 0x00,},
503
504 Package (0x04) {0x0016FFFF, 0x00, LNKB, 0x00,},
505 Package (0x04) {0x0016FFFF, 0x01, LNKC, 0x00,},
506 Package (0x04) {0x0016FFFF, 0x02, LNKD, 0x00,},
507 Package (0x04) {0x0016FFFF, 0x03, LNKA, 0x00,},
508
509 Package (0x04) {0x0017FFFF, 0x00, LNKC, 0x00,},
510 Package (0x04) {0x0017FFFF, 0x01, LNKD, 0x00,},
511 Package (0x04) {0x0017FFFF, 0x02, LNKA, 0x00,},
512 Package (0x04) {0x0017FFFF, 0x03, LNKB, 0x00,},
513
514 Package (0x04) {0x0018FFFF, 0x00, LNKD, 0x00,},
515 Package (0x04) {0x0018FFFF, 0x01, LNKA, 0x00,},
516 Package (0x04) {0x0018FFFF, 0x02, LNKB, 0x00,},
517 Package (0x04) {0x0018FFFF, 0x03, LNKC, 0x00,},
518
519 Package (0x04) {0x0019FFFF, 0x00, LNKA, 0x00,},
520 Package (0x04) {0x0019FFFF, 0x01, LNKB, 0x00,},
521 Package (0x04) {0x0019FFFF, 0x02, LNKC, 0x00,},
522 Package (0x04) {0x0019FFFF, 0x03, LNKD, 0x00,},
523
524 Package (0x04) {0x001AFFFF, 0x00, LNKB, 0x00,},
525 Package (0x04) {0x001AFFFF, 0x01, LNKC, 0x00,},
526 Package (0x04) {0x001AFFFF, 0x02, LNKD, 0x00,},
527 Package (0x04) {0x001AFFFF, 0x03, LNKA, 0x00,},
528
529 Package (0x04) {0x001BFFFF, 0x00, LNKC, 0x00,},
530 Package (0x04) {0x001BFFFF, 0x01, LNKD, 0x00,},
531 Package (0x04) {0x001BFFFF, 0x02, LNKA, 0x00,},
532 Package (0x04) {0x001BFFFF, 0x03, LNKB, 0x00,},
533
534 Package (0x04) {0x001CFFFF, 0x00, LNKD, 0x00,},
535 Package (0x04) {0x001CFFFF, 0x01, LNKA, 0x00,},
536 Package (0x04) {0x001CFFFF, 0x02, LNKB, 0x00,},
537 Package (0x04) {0x001CFFFF, 0x03, LNKC, 0x00,},
538
539 Package (0x04) {0x001DFFFF, 0x00, LNKA, 0x00,},
540 Package (0x04) {0x001DFFFF, 0x01, LNKB, 0x00,},
541 Package (0x04) {0x001DFFFF, 0x02, LNKC, 0x00,},
542 Package (0x04) {0x001DFFFF, 0x03, LNKD, 0x00,},
543
544 Package (0x04) {0x001EFFFF, 0x00, LNKB, 0x00,},
545 Package (0x04) {0x001EFFFF, 0x01, LNKC, 0x00,},
546 Package (0x04) {0x001EFFFF, 0x02, LNKD, 0x00,},
547 Package (0x04) {0x001EFFFF, 0x03, LNKA, 0x00,},
548
549 Package (0x04) {0x001FFFFF, 0x00, LNKC, 0x00,},
550 Package (0x04) {0x001FFFFF, 0x01, LNKD, 0x00,},
551 Package (0x04) {0x001FFFFF, 0x02, LNKA, 0x00,},
552 Package (0x04) {0x001FFFFF, 0x03, LNKB, 0x00,}
553 })
554
555 // PCI I/O APIC IRQ Routing table
556 // Must match pci.c:pci_slot_get_acpi_pirq
557 Name (PR01, Package ()
558 {
559/** @todo add devices 0/1 to be complete */
560 Package (0x04) {0x0002FFFF, 0x00, 0x00, 0x12,},
561 Package (0x04) {0x0002FFFF, 0x01, 0x00, 0x13,},
562 Package (0x04) {0x0002FFFF, 0x02, 0x00, 0x14,},
563 Package (0x04) {0x0002FFFF, 0x03, 0x00, 0x15,},
564
565 Package (0x04) {0x0003FFFF, 0x00, 0x00, 0x13,},
566 Package (0x04) {0x0003FFFF, 0x01, 0x00, 0x14,},
567 Package (0x04) {0x0003FFFF, 0x02, 0x00, 0x15,},
568 Package (0x04) {0x0003FFFF, 0x03, 0x00, 0x16,},
569
570 Package (0x04) {0x0004FFFF, 0x00, 0x00, 0x14,},
571 Package (0x04) {0x0004FFFF, 0x01, 0x00, 0x15,},
572 Package (0x04) {0x0004FFFF, 0x02, 0x00, 0x16,},
573 Package (0x04) {0x0004FFFF, 0x03, 0x00, 0x17,},
574
575 Package (0x04) {0x0005FFFF, 0x00, 0x00, 0x15,},
576 Package (0x04) {0x0005FFFF, 0x01, 0x00, 0x16,},
577 Package (0x04) {0x0005FFFF, 0x02, 0x00, 0x17,},
578 Package (0x04) {0x0005FFFF, 0x03, 0x00, 0x10,},
579
580 Package (0x04) {0x0006FFFF, 0x00, 0x00, 0x16,},
581 Package (0x04) {0x0006FFFF, 0x01, 0x00, 0x17,},
582 Package (0x04) {0x0006FFFF, 0x02, 0x00, 0x10,},
583 Package (0x04) {0x0006FFFF, 0x03, 0x00, 0x11,},
584
585 Package (0x04) {0x0007FFFF, 0x00, 0x00, 0x17,},
586 Package (0x04) {0x0007FFFF, 0x01, 0x00, 0x10,},
587 Package (0x04) {0x0007FFFF, 0x02, 0x00, 0x11,},
588 Package (0x04) {0x0007FFFF, 0x03, 0x00, 0x12,},
589
590 Package (0x04) {0x0008FFFF, 0x00, 0x00, 0x10,},
591 Package (0x04) {0x0008FFFF, 0x01, 0x00, 0x11,},
592 Package (0x04) {0x0008FFFF, 0x02, 0x00, 0x12,},
593 Package (0x04) {0x0008FFFF, 0x03, 0x00, 0x13,},
594
595 Package (0x04) {0x0009FFFF, 0x00, 0x00, 0x11,},
596 Package (0x04) {0x0009FFFF, 0x01, 0x00, 0x12,},
597 Package (0x04) {0x0009FFFF, 0x02, 0x00, 0x13,},
598 Package (0x04) {0x0009FFFF, 0x03, 0x00, 0x14,},
599
600 Package (0x04) {0x000AFFFF, 0x00, 0x00, 0x12,},
601 Package (0x04) {0x000AFFFF, 0x01, 0x00, 0x13,},
602 Package (0x04) {0x000AFFFF, 0x02, 0x00, 0x14,},
603 Package (0x04) {0x000AFFFF, 0x03, 0x00, 0x15,},
604
605 Package (0x04) {0x000BFFFF, 0x00, 0x00, 0x13,},
606 Package (0x04) {0x000BFFFF, 0x01, 0x00, 0x14,},
607 Package (0x04) {0x000BFFFF, 0x02, 0x00, 0x15,},
608 Package (0x04) {0x000BFFFF, 0x03, 0x00, 0x16,},
609
610 Package (0x04) {0x000CFFFF, 0x00, 0x00, 0x14,},
611 Package (0x04) {0x000CFFFF, 0x01, 0x00, 0x15,},
612 Package (0x04) {0x000CFFFF, 0x02, 0x00, 0x16,},
613 Package (0x04) {0x000CFFFF, 0x03, 0x00, 0x17,},
614
615 Package (0x04) {0x000DFFFF, 0x00, 0x00, 0x15,},
616 Package (0x04) {0x000DFFFF, 0x01, 0x00, 0x16,},
617 Package (0x04) {0x000DFFFF, 0x02, 0x00, 0x17,},
618 Package (0x04) {0x000DFFFF, 0x03, 0x00, 0x10,},
619
620 Package (0x04) {0x000EFFFF, 0x00, 0x00, 0x16,},
621 Package (0x04) {0x000EFFFF, 0x01, 0x00, 0x17,},
622 Package (0x04) {0x000EFFFF, 0x02, 0x00, 0x10,},
623 Package (0x04) {0x000EFFFF, 0x03, 0x00, 0x11,},
624
625 Package (0x04) {0x000FFFFF, 0x00, 0x00, 0x17,},
626 Package (0x04) {0x000FFFFF, 0x01, 0x00, 0x10,},
627 Package (0x04) {0x000FFFFF, 0x02, 0x00, 0x11,},
628 Package (0x04) {0x000FFFFF, 0x03, 0x00, 0x12,},
629
630 Package (0x04) {0x0010FFFF, 0x00, 0x00, 0x10,},
631 Package (0x04) {0x0010FFFF, 0x01, 0x00, 0x11,},
632 Package (0x04) {0x0010FFFF, 0x02, 0x00, 0x12,},
633 Package (0x04) {0x0010FFFF, 0x03, 0x00, 0x13,},
634
635 Package (0x04) {0x0011FFFF, 0x00, 0x00, 0x11,},
636 Package (0x04) {0x0011FFFF, 0x01, 0x00, 0x12,},
637 Package (0x04) {0x0011FFFF, 0x02, 0x00, 0x13,},
638 Package (0x04) {0x0011FFFF, 0x03, 0x00, 0x14,},
639
640 Package (0x04) {0x0012FFFF, 0x00, 0x00, 0x12,},
641 Package (0x04) {0x0012FFFF, 0x01, 0x00, 0x13,},
642 Package (0x04) {0x0012FFFF, 0x02, 0x00, 0x14,},
643 Package (0x04) {0x0012FFFF, 0x03, 0x00, 0x15,},
644
645 Package (0x04) {0x0013FFFF, 0x00, 0x00, 0x13,},
646 Package (0x04) {0x0013FFFF, 0x01, 0x00, 0x14,},
647 Package (0x04) {0x0013FFFF, 0x02, 0x00, 0x15,},
648 Package (0x04) {0x0013FFFF, 0x03, 0x00, 0x16,},
649
650 Package (0x04) {0x0014FFFF, 0x00, 0x00, 0x14,},
651 Package (0x04) {0x0014FFFF, 0x01, 0x00, 0x15,},
652 Package (0x04) {0x0014FFFF, 0x02, 0x00, 0x16,},
653 Package (0x04) {0x0014FFFF, 0x03, 0x00, 0x17,},
654
655 Package (0x04) {0x0015FFFF, 0x00, 0x00, 0x15,},
656 Package (0x04) {0x0015FFFF, 0x01, 0x00, 0x16,},
657 Package (0x04) {0x0015FFFF, 0x02, 0x00, 0x17,},
658 Package (0x04) {0x0015FFFF, 0x03, 0x00, 0x10,},
659
660 Package (0x04) {0x0016FFFF, 0x00, 0x00, 0x16,},
661 Package (0x04) {0x0016FFFF, 0x01, 0x00, 0x17,},
662 Package (0x04) {0x0016FFFF, 0x02, 0x00, 0x10,},
663 Package (0x04) {0x0016FFFF, 0x03, 0x00, 0x11,},
664
665 Package (0x04) {0x0017FFFF, 0x00, 0x00, 0x17,},
666 Package (0x04) {0x0017FFFF, 0x01, 0x00, 0x10,},
667 Package (0x04) {0x0017FFFF, 0x02, 0x00, 0x11,},
668 Package (0x04) {0x0017FFFF, 0x03, 0x00, 0x12,},
669
670 Package (0x04) {0x0018FFFF, 0x00, 0x00, 0x10,},
671 Package (0x04) {0x0018FFFF, 0x01, 0x00, 0x11,},
672 Package (0x04) {0x0018FFFF, 0x02, 0x00, 0x12,},
673 Package (0x04) {0x0018FFFF, 0x03, 0x00, 0x13,},
674
675 Package (0x04) {0x0019FFFF, 0x00, 0x00, 0x11,},
676 Package (0x04) {0x0019FFFF, 0x01, 0x00, 0x12,},
677 Package (0x04) {0x0019FFFF, 0x02, 0x00, 0x13,},
678 Package (0x04) {0x0019FFFF, 0x03, 0x00, 0x14,},
679
680 Package (0x04) {0x001AFFFF, 0x00, 0x00, 0x12,},
681 Package (0x04) {0x001AFFFF, 0x01, 0x00, 0x13,},
682 Package (0x04) {0x001AFFFF, 0x02, 0x00, 0x14,},
683 Package (0x04) {0x001AFFFF, 0x03, 0x00, 0x15,},
684
685 Package (0x04) {0x001BFFFF, 0x00, 0x00, 0x13,},
686 Package (0x04) {0x001BFFFF, 0x01, 0x00, 0x14,},
687 Package (0x04) {0x001BFFFF, 0x02, 0x00, 0x15,},
688 Package (0x04) {0x001BFFFF, 0x03, 0x00, 0x16,},
689
690 Package (0x04) {0x001CFFFF, 0x00, 0x00, 0x14,},
691 Package (0x04) {0x001CFFFF, 0x01, 0x00, 0x15,},
692 Package (0x04) {0x001CFFFF, 0x02, 0x00, 0x16,},
693 Package (0x04) {0x001CFFFF, 0x03, 0x00, 0x17,},
694
695 Package (0x04) {0x001DFFFF, 0x00, 0x00, 0x15,},
696 Package (0x04) {0x001DFFFF, 0x01, 0x00, 0x16,},
697 Package (0x04) {0x001DFFFF, 0x02, 0x00, 0x17,},
698 Package (0x04) {0x001DFFFF, 0x03, 0x00, 0x10,},
699
700 Package (0x04) {0x001EFFFF, 0x00, 0x00, 0x16,},
701 Package (0x04) {0x001EFFFF, 0x01, 0x00, 0x17,},
702 Package (0x04) {0x001EFFFF, 0x02, 0x00, 0x10,},
703 Package (0x04) {0x001EFFFF, 0x03, 0x00, 0x11,},
704
705 Package (0x04) {0x001FFFFF, 0x00, 0x00, 0x17,},
706 Package (0x04) {0x001FFFFF, 0x01, 0x00, 0x10,},
707 Package (0x04) {0x001FFFFF, 0x02, 0x00, 0x11,},
708 Package (0x04) {0x001FFFFF, 0x03, 0x00, 0x12,}
709 })
710
711 // Possible resource settings for PCI link A
712 Name (PRSA, ResourceTemplate ()
713 {
714 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
715 })
716
717 // Possible resource settings for PCI link B
718 Name (PRSB, ResourceTemplate ()
719 {
720 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
721 })
722
723 // Possible resource settings for PCI link C
724 Name (PRSC, ResourceTemplate ()
725 {
726 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
727 })
728
729 // Possible resource settings for PCI link D
730 Name (PRSD, ResourceTemplate ()
731 {
732 IRQ (Level, ActiveLow, Shared) {5,9,10,11}
733 })
734
735 // PCI bus 0
736 Device (PCI0)
737 {
738
739 Name (_HID, EisaId ("PNP0A03")) // PCI bus PNP id
740 Method(_ADR, 0, NotSerialized) // PCI address
741 {
742 Return (HBCA)
743 }
744 Name (_BBN, 0x00) // base bus address (bus number)
745 Name (_UID, 0x00)
746
747 // Method that returns routing table; also opens PCI to I/O APIC
748 // interrupt routing backdoor by writing 0xdead 0xbeef signature
749 // to ISA bridge config space. See DevPCI.cpp/pciSetIrqInternal().
750 Method (_PRT, 0, NotSerialized)
751 {
752 if (LEqual (LAnd (PICM, UIOA), Zero)) {
753 DBG ("RETURNING PIC\n")
754 Store (0x00, \_SB.PCI0.SBRG.APDE)
755 Store (0x00, \_SB.PCI0.SBRG.APAD)
756 Return (PR00)
757 }
758 else {
759 DBG ("RETURNING APIC\n")
760 Store (0xbe, \_SB.PCI0.SBRG.APDE)
761 Store (0xef, \_SB.PCI0.SBRG.APAD)
762 Return (PR01)
763 }
764 }
765
766 Device (SBRG)
767 {
768 // Address of the southbridge device (PIIX or ICH9)
769 Method(_ADR, 0, NotSerialized)
770 {
771 Return (IOCA)
772 }
773 OperationRegion (PCIC, PCI_Config, 0x00, 0xff)
774
775 Field (PCIC, ByteAcc, NoLock, Preserve)
776 {
777 Offset (0xad),
778 APAD, 8,
779 Offset (0xde),
780 APDE, 8,
781 }
782
783 // PCI MCFG MMIO ranges
784 Device (^PCIE)
785 {
786 Name (_HID, EisaId ("PNP0C02"))
787 Name (_UID, 0x11)
788 Name (CRS, ResourceTemplate ()
789 {
790 Memory32Fixed (ReadOnly,
791 0xdc000000, // Address Base
792 0x4000000, // Address Length
793 _Y13)
794 })
795 Method (_CRS, 0, NotSerialized)
796 {
797 CreateDWordField (CRS, \_SB.PCI0.PCIE._Y13._BAS, BAS1)
798 CreateDWordField (CRS, \_SB.PCI0.PCIE._Y13._LEN, LEN1)
799 Store (PCIB, BAS1)
800 Store (PCIL, LEN1)
801 Return (CRS)
802 }
803 Method (_STA, 0, NotSerialized)
804 {
805 if (LEqual (PCIB, Zero)) {
806 Return (0x00)
807 }
808 else {
809 Return (0x0F)
810 }
811 }
812 }
813
814 // Keyboard device
815 Device (PS2K)
816 {
817 Name (_HID, EisaId ("PNP0303"))
818 Method (_STA, 0, NotSerialized)
819 {
820 Return (0x0F)
821 }
822
823 Name (_CRS, ResourceTemplate ()
824 {
825 IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
826 IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
827 IRQNoFlags () {1}
828 })
829 }
830
831 // DMA Controller
832 Device (DMAC)
833 {
834 Name (_HID, EisaId ("PNP0200"))
835 Name (_CRS, ResourceTemplate ()
836 {
837 IO (Decode16, 0x0000, 0x0000, 0x01, 0x10)
838 IO (Decode16, 0x0080, 0x0080, 0x01, 0x10)
839 IO (Decode16, 0x00C0, 0x00C0, 0x01, 0x20)
840 DMA (Compatibility, BusMaster, Transfer8_16) {4}
841 })
842 }
843
844 // Floppy disk controller
845 Device (FDC0)
846 {
847 Name (_HID, EisaId ("PNP0700"))
848
849 Method (_STA, 0, NotSerialized)
850 {
851 Return (UFDC)
852 }
853
854 // Current resource settings
855 Name (_CRS, ResourceTemplate ()
856 {
857 IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
858 IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
859 IRQNoFlags () {6}
860 DMA (Compatibility, NotBusMaster, Transfer8) {2}
861 })
862
863 // Possible resource settings
864 Name (_PRS, ResourceTemplate ()
865 {
866 IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
867 IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
868 IRQNoFlags () {6}
869 DMA (Compatibility, NotBusMaster, Transfer8) {2}
870 })
871
872 }
873
874 // Mouse device
875 Device (PS2M)
876 {
877 Name (_HID, EisaId ("PNP0F03"))
878 Method (_STA, 0, NotSerialized)
879 {
880 Return (0x0F)
881 }
882
883 Name (_CRS, ResourceTemplate ()
884 {
885 IRQNoFlags () {12}
886 })
887 }
888
889 // Parallel port 0
890 Device (^LPT0)
891 {
892 Name (_HID, EisaId ("PNP0400"))
893 Name (_UID, 0x01)
894 Method (_STA, 0, NotSerialized)
895 {
896 If (LEqual (PP0B, Zero))
897 {
898 Return (0x00)
899 }
900 Else
901 {
902 Return (0x0F)
903 }
904 }
905 Name (CRS, ResourceTemplate ()
906 {
907 IO (Decode16, 0x0378, 0x0378, 0x08, 0x08, _Y18)
908 IRQNoFlags (_Y19) {7}
909 })
910 Method (_CRS, 0, NotSerialized)
911 {
912 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._MIN, PMI0)
913 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._MAX, PMA0)
914 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._ALN, PAL0)
915 CreateWordField (CRS, \_SB.PCI0.LPT0._Y18._LEN, PLE0)
916 CreateWordField (CRS, \_SB.PCI0.LPT0._Y19._INT, PIQ0)
917 Store (PP0B, PMI0)
918 Store (PP0B, PMA0)
919 If (LEqual (0x3BC, PP0B)) {
920 Store (0x04, PAL0)
921 Store (0x04, PLE0)
922 }
923 ShiftLeft (0x01, PP0I, PIQ0)
924 Return (CRS)
925 }
926 }
927
928 // Parallel port 1
929 Device (^LPT1)
930 {
931 Name (_HID, EisaId ("PNP0400"))
932 Name (_UID, 0x02)
933 Method (_STA, 0, NotSerialized)
934 {
935 If (LEqual (PP1B, Zero))
936 {
937 Return (0x00)
938 }
939 Else
940 {
941 Return (0x0F)
942 }
943 }
944 Name (CRS, ResourceTemplate ()
945 {
946 IO (Decode16, 0x0278, 0x0278, 0x08, 0x08, _Y20)
947 IRQNoFlags (_Y21) {5}
948 })
949 Method (_CRS, 0, NotSerialized)
950 {
951 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._MIN, PMI1)
952 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._MAX, PMA1)
953 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._ALN, PAL1)
954 CreateWordField (CRS, \_SB.PCI0.LPT1._Y20._LEN, PLE1)
955 CreateWordField (CRS, \_SB.PCI0.LPT1._Y21._INT, PIQ1)
956 Store (PP1B, PMI1)
957 Store (PP1B, PMA1)
958 If (LEqual (0x3BC, PP1B)) {
959 Store (0x04, PAL1)
960 Store (0x04, PLE1)
961 }
962 ShiftLeft (0x01, PP1I, PIQ1)
963 Return (CRS)
964 }
965 }
966
967
968 // Serial port 0
969 Device (^SRL0)
970 {
971 Name (_HID, EisaId ("PNP0501"))
972 Name (_UID, 0x01)
973 Method (_STA, 0, NotSerialized)
974 {
975 If (LEqual (SL0B, Zero))
976 {
977 Return (0x00)
978 }
979 Else
980 {
981 Return (0x0F)
982 }
983 }
984 Name (CRS, ResourceTemplate ()
985 {
986 IO (Decode16, 0x03F8, 0x03F8, 0x01, 0x08, _Y14)
987 IRQNoFlags (_Y15) {4}
988 })
989 Method (_CRS, 0, NotSerialized)
990 {
991 CreateWordField (CRS, \_SB.PCI0.SRL0._Y14._MIN, MIN0)
992 CreateWordField (CRS, \_SB.PCI0.SRL0._Y14._MAX, MAX0)
993 CreateWordField (CRS, \_SB.PCI0.SRL0._Y15._INT, IRQ0)
994 Store (SL0B, MIN0)
995 Store (SL0B, MAX0)
996 ShiftLeft (0x01, SL0I, IRQ0)
997 Return (CRS)
998 }
999 }
1000
1001 // Serial port 1
1002 Device (^SRL1)
1003 {
1004 Name (_HID, EisaId ("PNP0501"))
1005 Name (_UID, 0x02)
1006 Method (_STA, 0, NotSerialized)
1007 {
1008 If (LEqual (SL1B, Zero))
1009 {
1010 Return (0x00)
1011 }
1012 Else
1013 {
1014 Return (0x0F)
1015 }
1016 }
1017 Name (CRS, ResourceTemplate ()
1018 {
1019 IO (Decode16, 0x02F8, 0x02F8, 0x01, 0x08, _Y16)
1020 IRQNoFlags (_Y17) {3}
1021 })
1022 Method (_CRS, 0, NotSerialized)
1023 {
1024 CreateWordField (CRS, \_SB.PCI0.SRL1._Y16._MIN, MIN1)
1025 CreateWordField (CRS, \_SB.PCI0.SRL1._Y16._MAX, MAX1)
1026 CreateWordField (CRS, \_SB.PCI0.SRL1._Y17._INT, IRQ1)
1027 Store (SL1B, MIN1)
1028 Store (SL1B, MAX1)
1029 ShiftLeft (0x01, SL1I, IRQ1)
1030 Return (CRS)
1031 }
1032 }
1033
1034 // Serial port 2
1035 Device (^SRL2)
1036 {
1037 Name (_HID, EisaId ("PNP0501"))
1038 Name (_UID, 0x03)
1039 Method (_STA, 0, NotSerialized)
1040 {
1041 If (LEqual (SL2B, Zero))
1042 {
1043 Return (0x00)
1044 }
1045 Else
1046 {
1047 Return (0x0F)
1048 }
1049 }
1050 Name (CRS, ResourceTemplate ()
1051 {
1052 IO (Decode16, 0x03E8, 0x03E8, 0x01, 0x08, _Y22)
1053 IRQNoFlags (_Y23) {3}
1054 })
1055 Method (_CRS, 0, NotSerialized)
1056 {
1057 CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MIN, MIN1)
1058 CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MAX, MAX1)
1059 CreateWordField (CRS, \_SB.PCI0.SRL2._Y23._INT, IRQ1)
1060 Store (SL2B, MIN1)
1061 Store (SL2B, MAX1)
1062 ShiftLeft (0x01, SL2I, IRQ1)
1063 Return (CRS)
1064 }
1065 }
1066
1067 // Serial port 3
1068 Device (^SRL3)
1069 {
1070 Name (_HID, EisaId ("PNP0501"))
1071 Name (_UID, 0x04)
1072 Method (_STA, 0, NotSerialized)
1073 {
1074 If (LEqual (SL3B, Zero))
1075 {
1076 Return (0x00)
1077 }
1078 Else
1079 {
1080 Return (0x0F)
1081 }
1082 }
1083 Name (CRS, ResourceTemplate ()
1084 {
1085 IO (Decode16, 0x02E8, 0x02E8, 0x01, 0x08, _Y24)
1086 IRQNoFlags (_Y25) {3}
1087 })
1088 Method (_CRS, 0, NotSerialized)
1089 {
1090 CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MIN, MIN1)
1091 CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MAX, MAX1)
1092 CreateWordField (CRS, \_SB.PCI0.SRL3._Y25._INT, IRQ1)
1093 Store (SL3B, MIN1)
1094 Store (SL3B, MAX1)
1095 ShiftLeft (0x01, SL3I, IRQ1)
1096 Return (CRS)
1097 }
1098 }
1099
1100 // Programmable Interval Timer (i8254)
1101 Device (TIMR)
1102 {
1103 Name (_HID, EisaId ("PNP0100"))
1104 Name (_CRS, ResourceTemplate ()
1105 {
1106 IO (Decode16,
1107 0x0040, // Range Minimum
1108 0x0040, // Range Maximum
1109 0x00, // Alignment
1110 0x04, // Length
1111 )
1112 IO (Decode16,
1113 0x0050, // Range Minimum
1114 0x0050, // Range Maximum
1115 0x10, // Alignment
1116 0x04, // Length
1117 )
1118 })
1119 }
1120
1121 // Programmable Interrupt Controller (i8259)
1122 Device (PIC)
1123 {
1124 Name (_HID, EisaId ("PNP0000"))
1125 Name (_CRS, ResourceTemplate ()
1126 {
1127 IO (Decode16,
1128 0x0020, // Range Minimum
1129 0x0020, // Range Maximum
1130 0x00, // Alignment
1131 0x02, // Length
1132 )
1133 IO (Decode16,
1134 0x00A0, // Range Minimum
1135 0x00A0, // Range Maximum
1136 0x00, // Alignment
1137 0x02, // Length
1138 )
1139 // because in APIC configs PIC connected to pin 0,
1140 // and ISA IRQ0 rerouted to pin 2
1141 IRQNoFlags ()
1142 {2}
1143 })
1144 }
1145
1146
1147 // Real Time Clock and CMOS (MC146818)
1148 Device (RTC)
1149 {
1150 Name (_HID, EisaId ("PNP0B00"))
1151 Name (_CRS, ResourceTemplate ()
1152 {
1153 IO (Decode16,
1154 0x0070, // Range Minimum
1155 0x0070, // Range Maximum
1156 0x01, // Alignment
1157 0x02, // Length
1158 )
1159 })
1160 Method (_STA, 0, NotSerialized)
1161 {
1162 Return (URTC)
1163 }
1164 }
1165
1166 // High Precision Event Timer
1167 Device(HPET)
1168 {
1169 Name (_HID, EISAID("PNP0103"))
1170 Name (_CID, EISAID("PNP0C01"))
1171 Name(_UID, 0)
1172
1173 Method (_STA, 0, NotSerialized)
1174 {
1175 Return(UHPT)
1176 }
1177
1178 Name(CRS, ResourceTemplate()
1179 {
1180 IRQNoFlags ()
1181 {0}
1182 IRQNoFlags ()
1183 {8}
1184 Memory32Fixed (ReadWrite,
1185 0xFED00000, // Address Base
1186 0x00000400 // Address Length
1187 )
1188 })
1189
1190 Method (_CRS, 0, NotSerialized)
1191 {
1192 Return (CRS)
1193 }
1194 }
1195
1196 // System Management Controller
1197 Device (SMC)
1198 {
1199 Name (_HID, EisaId ("APP0001"))
1200 Name (_CID, "smc-napa")
1201
1202 Method (_STA, 0, NotSerialized)
1203 {
1204 Return (USMC)
1205 }
1206 Name (CRS, ResourceTemplate ()
1207 {
1208 IO (Decode16,
1209 0x0300, // Range Minimum
1210 0x0300, // Range Maximum
1211 0x01, // Alignment
1212 0x20) // Length
1213 IRQNoFlags ()
1214 {6}
1215
1216 })
1217 Method (_CRS, 0, NotSerialized)
1218 {
1219 Return (CRS)
1220 }
1221 }
1222 }
1223
1224 // NVMe controller. Required to convince OS X that
1225 // the controller is an internal (built-in) device.
1226 Device (SSD0)
1227 {
1228 Method(_ADR, 0, NotSerialized)
1229 {
1230 Return (NVMA)
1231 }
1232 Method (_STA, 0, NotSerialized)
1233 {
1234 if (LEqual (NVMA, Zero)) {
1235 Return (0x00)
1236 }
1237 else {
1238 Return (0x0F)
1239 }
1240 }
1241 // Port 0
1242 Device (PRT0)
1243 {
1244 Name (_ADR, 0xffff)
1245 }
1246 }
1247
1248 // NIC
1249 Device (GIGE)
1250 {
1251 /**
1252 * Generic NIC, according to
1253 * http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/devids.txt
1254 * Needed by some Windows guests.
1255 */
1256 Name (_HID, EisaId ("PNP8390"))
1257
1258 Method(_ADR, 0, NotSerialized)
1259 {
1260 Return (NICA)
1261 }
1262 /* Name (_PRW, Package (0x02)
1263 {
1264 0x09,
1265 0x04
1266 }) */
1267
1268 /* Wake up on LAN? */
1269 /* Method (EWOL, 1, NotSerialized)
1270 {
1271 Return (0x00)
1272 } */
1273
1274 Method (_STA, 0, NotSerialized)
1275 {
1276 if (LEqual (NICA, Zero)) {
1277 Return (0x00)
1278 }
1279 else {
1280 Return (0x0F)
1281 }
1282 }
1283 }
1284
1285 // Graphics device
1286 Device (GFX0)
1287 {
1288 Name (_ADR, 0x00020000)
1289
1290 // Windows releases older than Windows 8 (starting with Windows 2000)
1291 // get confused by this and lose the monitor device node. One of
1292 // the consequences is that color management is not available.
1293 // For Windows 2000 - Windows 7, disable this device (while keeping
1294 // it enabled for non-Microsoft OSes).
1295 Method (_STA, 0, NotSerialized)
1296 {
1297 If (LAnd (LGreater (MSWN(), 0x00), LLess (MSWN(), 0x08)))
1298 {
1299 Return(0x00)
1300 }
1301 Else
1302 {
1303 Return(0x0F)
1304 }
1305 }
1306
1307 Scope (\_GPE)
1308 {
1309 // GPE bit 2 handler
1310 // GPE.2 must be set and SCI raised when
1311 // display information changes.
1312 Method (_L02, 0, NotSerialized)
1313 {
1314 Notify (\_SB.PCI0.GFX0, 0x81)
1315 }
1316 }
1317
1318 Method (_DOS, 1) { }
1319
1320 Method (_DOD, 0, NotSerialized)
1321 {
1322 Return (Package()
1323 {
1324 0x80000100
1325 })
1326 }
1327
1328 Device (VGA)
1329 {
1330 Method (_ADR, 0, Serialized)
1331 {
1332 Return (0x0100)
1333 }
1334 }
1335 }
1336
1337 // HDA Audio card
1338 Device (HDEF)
1339 {
1340 Method(_DSM, 4, NotSerialized)
1341 {
1342 Store (Package (0x04)
1343 {
1344 "layout-id",
1345 Buffer (0x04)
1346 {
1347 /* 04 */ 0x04, 0x00, 0x00, 0x00
1348 },
1349
1350 "PinConfigurations",
1351 Buffer (Zero) {}
1352 }, Local0)
1353 if (LEqual (Arg0, ToUUID("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
1354 {
1355 If (LEqual (Arg1, One))
1356 {
1357 if (LEqual(Arg2, Zero))
1358 {
1359 Store (Buffer (0x01)
1360 {
1361 0x03
1362 }
1363 , Local0)
1364 Return (Local0)
1365 }
1366 if (LEqual(Arg2, One))
1367 {
1368 Return (Local0)
1369 }
1370 }
1371 }
1372 Store (Buffer (0x01)
1373 {
1374 0x0
1375 }
1376 , Local0)
1377 Return (Local0)
1378 }
1379
1380 Method(_ADR, 0, NotSerialized)
1381 {
1382 Return (HDAA)
1383 }
1384
1385 Method (_STA, 0, NotSerialized)
1386 {
1387 if (LEqual (HDAA, Zero)) {
1388 Return (0x00)
1389 }
1390 else {
1391 Return (0x0F)
1392 }
1393 }
1394 }
1395
1396
1397 // Control method battery
1398 Device (BAT0)
1399 {
1400 Name (_HID, EisaId ("PNP0C0A"))
1401 Name (_UID, 0x00)
1402
1403 Scope (\_GPE)
1404 {
1405 // GPE bit 0 handler
1406 // GPE.0 must be set and SCI raised when battery info
1407 // changed. Do NOT re-evaluate _BIF (battery info, never
1408 // changes) but DO re-evaluate _BST (dynamic state). Also
1409 // re-evaluate the AC adapter status.
1410 Method (_L00, 0, NotSerialized)
1411 {
1412 // _BST must be re-evaluated (battery state)
1413 Notify (\_SB.PCI0.BAT0, 0x80)
1414 // _PSR must be re-evaluated (AC adapter status)
1415 Notify (\_SB.PCI0.AC, 0x80)
1416 }
1417 }
1418
1419 OperationRegion (CBAT, SystemIO, 0x4040, 0x08)
1420 Field (CBAT, DwordAcc, NoLock, Preserve)
1421 {
1422 IDX0, 32,
1423 DAT0, 32,
1424 }
1425
1426 IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
1427 {
1428 STAT, 32,
1429 PRAT, 32,
1430 RCAP, 32,
1431 PVOL, 32,
1432
1433 UNIT, 32,
1434 DCAP, 32,
1435 LFCP, 32,
1436 BTEC, 32,
1437 DVOL, 32,
1438 DWRN, 32,
1439 DLOW, 32,
1440 GRN1, 32,
1441 GRN2, 32,
1442
1443 BSTA, 32,
1444 APSR, 32,
1445 }
1446
1447 Method (_STA, 0, NotSerialized)
1448 {
1449 return (BSTA)
1450 }
1451
1452 Name (PBIF, Package ()
1453 {
1454 0x01, // Power unit, 1 - mA
1455 0x7fffffff, // Design capacity
1456 0x7fffffff, // Last full charge capacity
1457 0x00, // Battery technology
1458 0xffffffff, // Design voltage
1459 0x00, // Design capacity of Warning
1460 0x00, // Design capacity of Low
1461 0x04, // Battery capacity granularity 1
1462 0x04, // Battery capacity granularity 2
1463 "1", // Model number
1464 "0", // Serial number
1465 "VBOX", // Battery type
1466 "innotek" // OEM Information
1467 })
1468
1469 Name (PBST, Package () {
1470 0, // Battery state
1471 0x7fffffff, // Battery present rate
1472 0x7fffffff, // Battery remaining capacity
1473 0x7fffffff // Battery present voltage
1474 })
1475
1476 // Battery information
1477 Method (_BIF, 0, NotSerialized)
1478 {
1479 Store (UNIT, Index (PBIF, 0,))
1480 Store (DCAP, Index (PBIF, 1,))
1481 Store (LFCP, Index (PBIF, 2,))
1482 Store (BTEC, Index (PBIF, 3,))
1483 Store (DVOL, Index (PBIF, 4,))
1484 Store (DWRN, Index (PBIF, 5,))
1485 Store (DLOW, Index (PBIF, 6,))
1486 Store (GRN1, Index (PBIF, 7,))
1487 Store (GRN2, Index (PBIF, 8,))
1488
1489 DBG ("_BIF:\n")
1490 HEX4 (DerefOf (Index (PBIF, 0,)))
1491 HEX4 (DerefOf (Index (PBIF, 1,)))
1492 HEX4 (DerefOf (Index (PBIF, 2,)))
1493 HEX4 (DerefOf (Index (PBIF, 3,)))
1494 HEX4 (DerefOf (Index (PBIF, 4,)))
1495 HEX4 (DerefOf (Index (PBIF, 5,)))
1496 HEX4 (DerefOf (Index (PBIF, 6,)))
1497 HEX4 (DerefOf (Index (PBIF, 7,)))
1498 HEX4 (DerefOf (Index (PBIF, 8,)))
1499
1500 return (PBIF)
1501 }
1502
1503 // Battery status
1504 Method (_BST, 0, NotSerialized)
1505 {
1506 Store (STAT, Index (PBST, 0,))
1507 Store (PRAT, Index (PBST, 1,))
1508 Store (RCAP, Index (PBST, 2,))
1509 Store (PVOL, Index (PBST, 3,))
1510/*
1511 DBG ("_BST:\n")
1512 HEX4 (DerefOf (Index (PBST, 0,)))
1513 HEX4 (DerefOf (Index (PBST, 1,)))
1514 HEX4 (DerefOf (Index (PBST, 2,)))
1515 HEX4 (DerefOf (Index (PBST, 3,)))
1516*/
1517 return (PBST)
1518 }
1519 }
1520
1521 Device (AC)
1522 {
1523 Name (_HID, "ACPI0003")
1524 Name (_UID, 0x00)
1525 Name (_PCL, Package (0x01)
1526 {
1527 \_SB
1528 })
1529
1530 Method (_PSR, 0, NotSerialized)
1531 {
1532 // DBG ("_PSR:\n")
1533 // HEX4 (\_SB.PCI0.BAT0.APSR)
1534 return (\_SB.PCI0.BAT0.APSR)
1535 }
1536
1537 Method (_STA, 0, NotSerialized)
1538 {
1539 return (0x0f)
1540 }
1541 }
1542 }
1543 }
1544
1545 Scope (\_SB)
1546 {
1547 Scope (PCI0)
1548 {
1549 // PCI0 current resource settings
1550 Name (CRS, ResourceTemplate ()
1551 {
1552 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
1553 0x0000,
1554 0x0000,
1555 0x00FF,
1556 0x0000,
1557 0x0100)
1558 IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08)
1559 WordIO (ResourceProducer, MinFixed, MaxFixed,
1560 PosDecode, EntireRange,
1561 0x0000,
1562 0x0000,
1563 0x0CF7,
1564 0x0000,
1565 0x0CF8)
1566 WordIO (ResourceProducer, MinFixed, MaxFixed,
1567 PosDecode, EntireRange,
1568 0x0000,
1569 0x0D00,
1570 0xFFFF,
1571 0x0000,
1572 0xF300)
1573
1574 /* Taken from ACPI faq (with some modifications) */
1575 DwordMemory( // descriptor for video RAM behind ISA bus
1576 ResourceProducer, // bit 0 of general flags is 0
1577 PosDecode,
1578 MinFixed, // Range is fixed
1579 MaxFixed, // Range is Fixed
1580 Cacheable,
1581 ReadWrite,
1582 0x00000000, // Granularity
1583 0x000a0000, // Min
1584 0x000bffff, // Max
1585 0x00000000, // Translation
1586 0x00020000 // Range Length
1587 )
1588
1589 DwordMemory( // Consumed-and-produced resource
1590 // (all of low memory space)
1591 ResourceProducer, // bit 0 of general flags is 0
1592 PosDecode, // positive Decode
1593 MinFixed, // Range is fixed
1594 MaxFixed, // Range is fixed
1595 Cacheable,
1596 ReadWrite,
1597 0x00000000, // Granularity
1598 0xe0000000, // Min (calculated dynamically)
1599
1600 0xfdffffff, // Max = 4GB - 32MB
1601 0x00000000, // Translation
1602 0x1e000000, // Range Length (calculated
1603 // dynamically)
1604 , // Optional field left blank
1605 , // Optional field left blank
1606 MEM3 // Name declaration for this
1607 // descriptor
1608 )
1609 })
1610
1611 Name (TOM, ResourceTemplate ()
1612 {
1613 QwordMemory(
1614 ResourceProducer, // bit 0 of general flags is 0
1615 PosDecode, // positive Decode
1616 MinFixed, // Range is fixed
1617 MaxFixed, // Range is fixed
1618 Prefetchable,
1619 ReadWrite,
1620 0x0000000000000000, // _GRA: Granularity.
1621 0x0000000100000000, // _MIN: Min address, def. 4GB, will be overwritten.
1622 0x0000000fffffffff, // _MAX: Max address, def. 64GB-1, will be overwritten.
1623 0x0000000000000000, // _TRA: Translation
1624 0x0000000f00000000, // _LEN: Range length (_MAX-_MIN+1)
1625 , // ResourceSourceIndex: Optional field left blank
1626 , // ResourceSource: Optional field left blank
1627 MEM4 // Name declaration for this descriptor.
1628 )
1629 })
1630
1631 Method (_CRS, 0, NotSerialized)
1632 {
1633 CreateDwordField (CRS, \_SB.PCI0.MEM3._MIN, RAMT)
1634 CreateDwordField (CRS, \_SB.PCI0.MEM3._LEN, RAMR)
1635
1636 Store (MEML, RAMT)
1637 Subtract (0xfe000000, RAMT, RAMR)
1638
1639 if (LNotEqual (PMNN, 0x00000000))
1640 {
1641 // Not for Windows < 7!
1642 If (LOr (LLess (MSWN(), 0x01), LGreater (MSWN(), 0x06)))
1643 {
1644 CreateQwordField (TOM, \_SB.PCI0.MEM4._MIN, TM4N)
1645 CreateQwordField (TOM, \_SB.PCI0.MEM4._MAX, TM4X)
1646 CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4L)
1647
1648 Multiply (PMNN, 0x10000, TM4N) // PMNN in units of 64KB
1649 Subtract (Multiply (PMNX, 0x10000), 1, TM4X) // PMNX in units of 64KB
1650 Add (Subtract (TM4X, TM4N), 1, TM4L) // determine LEN, MAX is already there
1651
1652 ConcatenateResTemplate (CRS, TOM, Local2)
1653
1654 Return (Local2)
1655 }
1656 }
1657
1658 Return (CRS)
1659 }
1660
1661 /* Defined in PCI Firmware Specification 3.0 and ACPI 3.0, with both specs
1662 * referencing each other. The _OSC method must be present to make Linux happy,
1663 * but needs to prevent the OS from taking much control so as to not upset Windows.
1664 * NB: The first DWORD is defined in the ACPI spec but not the PCI FW spec.
1665 */
1666 Method (_OSC, 4)
1667 {
1668 Name(SUPP, 0) // Support field value
1669 Name(CTRL, 0) // Control field value
1670
1671 // Break down the input capabilities buffer into individual DWORDs
1672 CreateDWordField(Arg3, 0, CDW1)
1673 CreateDWordField(Arg3, 4, CDW2)
1674 CreateDWordField(Arg3, 8, CDW3)
1675
1676 If (LEqual (Arg0, ToUUID("33db4d5b-1ff7-401c-9657-7441c03dd766")))
1677 {
1678 // Stash the Support and Control fields
1679 Store(CDW2, SUPP)
1680 Store(CDW3, CTRL)
1681
1682 DBG("_OSC: SUPP=")
1683 HEX4(SUPP)
1684 DBG(" CTRL=")
1685 HEX4(CTRL)
1686 DBG("\n")
1687
1688 // Mask off the PCI Express Capability Structure control
1689 // Not emulated well enough to satisfy Windows (Vista and later)
1690 And(CTRL, 0x0F, CTRL)
1691
1692 // If capabilities were masked, set the Capabilities Masked flag (bit 4)
1693 If (LNotEqual(CDW3, CTRL))
1694 {
1695 Or(CDW1, 0x10, CDW1)
1696 }
1697
1698 // Update the Control field and return
1699 Store(CTRL, CDW3)
1700 Return(Arg3)
1701 }
1702 Else
1703 {
1704 // UUID not known, set Unrecognized UUID flag (bit 2)
1705 Or(CDW1, 0x04, CDW1)
1706 Return(Arg3)
1707 }
1708 }
1709 }
1710 }
1711
1712 Scope (\_SB)
1713 {
1714 // Fields within PIIX3 configuration[0x60..0x63] with
1715 // IRQ mappings
1716 Field (\_SB.PCI0.SBRG.PCIC, ByteAcc, NoLock, Preserve)
1717 {
1718 Offset (0x60),
1719 PIRA, 8,
1720 PIRB, 8,
1721 PIRC, 8,
1722 PIRD, 8
1723 }
1724
1725 Name (BUFA, ResourceTemplate ()
1726 {
1727 IRQ (Level, ActiveLow, Shared) {15}
1728 })
1729 CreateWordField (BUFA, 0x01, ICRS)
1730
1731 // Generic status of IRQ routing entry
1732 Method (LSTA, 1, NotSerialized)
1733 {
1734 And (Arg0, 0x80, Local0)
1735// DBG ("LSTA: ")
1736// HEX (Arg0)
1737 If (Local0)
1738 {
1739 Return (0x09)
1740 }
1741 Else
1742 {
1743 Return (0x0B)
1744 }
1745 }
1746
1747 // Generic "current resource settings" for routing entry
1748 Method (LCRS, 1, NotSerialized)
1749 {
1750 And (Arg0, 0x0F, Local0)
1751 ShiftLeft (0x01, Local0, ICRS)
1752// DBG ("LCRS: ")
1753// HEX (ICRS)
1754 Return (BUFA)
1755 }
1756
1757 // Generic "set resource settings" for routing entry
1758 Method (LSRS, 1, NotSerialized)
1759 {
1760 CreateWordField (Arg0, 0x01, ISRS)
1761 FindSetRightBit (ISRS, Local0)
1762 Return (Decrement (Local0))
1763 }
1764
1765 // Generic "disable" for routing entry
1766 Method (LDIS, 1, NotSerialized)
1767 {
1768 Return (Or (Arg0, 0x80))
1769 }
1770
1771 // Link A
1772 Device (LNKA)
1773 {
1774 Name (_HID, EisaId ("PNP0C0F"))
1775 Name (_UID, 0x01)
1776
1777 // Status
1778 Method (_STA, 0, NotSerialized)
1779 {
1780 DBG ("LNKA._STA\n")
1781 Return (LSTA (PIRA))
1782 }
1783
1784 // Possible resource settings
1785 Method (_PRS, 0, NotSerialized)
1786 {
1787 DBG ("LNKA._PRS\n")
1788 Return (PRSA)
1789 }
1790
1791 // Disable
1792 Method (_DIS, 0, NotSerialized)
1793 {
1794 DBG ("LNKA._DIS\n")
1795 Store (LDIS (PIRA), PIRA)
1796 }
1797
1798 // Current resource settings
1799 Method (_CRS, 0, NotSerialized)
1800 {
1801 DBG ("LNKA._CRS\n")
1802 Return (LCRS (PIRA))
1803 }
1804
1805 // Set resource settings
1806 Method (_SRS, 1, NotSerialized)
1807 {
1808 DBG ("LNKA._SRS: ")
1809 HEX (LSRS (Arg0))
1810 Store (LSRS (Arg0), PIRA)
1811 }
1812 }
1813
1814 // Link B
1815 Device (LNKB)
1816 {
1817 Name (_HID, EisaId ("PNP0C0F"))
1818 Name (_UID, 0x02)
1819 Method (_STA, 0, NotSerialized)
1820 {
1821 // DBG ("LNKB._STA\n")
1822 Return (LSTA (PIRB))
1823 }
1824
1825 Method (_PRS, 0, NotSerialized)
1826 {
1827 // DBG ("LNKB._PRS\n")
1828 Return (PRSB)
1829 }
1830
1831 Method (_DIS, 0, NotSerialized)
1832 {
1833 // DBG ("LNKB._DIS\n")
1834 Store (LDIS (PIRB), PIRB)
1835 }
1836
1837 Method (_CRS, 0, NotSerialized)
1838 {
1839 // DBG ("LNKB._CRS\n")
1840 Return (LCRS (PIRB))
1841 }
1842
1843 Method (_SRS, 1, NotSerialized)
1844 {
1845 DBG ("LNKB._SRS: ")
1846 HEX (LSRS (Arg0))
1847 Store (LSRS (Arg0), PIRB)
1848 }
1849 }
1850
1851 // Link C
1852 Device (LNKC)
1853 {
1854 Name (_HID, EisaId ("PNP0C0F"))
1855 Name (_UID, 0x03)
1856 Method (_STA, 0, NotSerialized)
1857 {
1858 // DBG ("LNKC._STA\n")
1859 Return (LSTA (PIRC))
1860 }
1861
1862 Method (_PRS, 0, NotSerialized)
1863 {
1864 // DBG ("LNKC._PRS\n")
1865 Return (PRSC)
1866 }
1867
1868 Method (_DIS, 0, NotSerialized)
1869 {
1870 // DBG ("LNKC._DIS\n")
1871 Store (LDIS (PIRC), PIRC)
1872 }
1873
1874 Method (_CRS, 0, NotSerialized)
1875 {
1876 // DBG ("LNKC._CRS\n")
1877 Return (LCRS (PIRC))
1878 }
1879
1880 Method (_SRS, 1, NotSerialized)
1881 {
1882 DBG ("LNKC._SRS: ")
1883 HEX (LSRS (Arg0))
1884 Store (LSRS (Arg0), PIRC)
1885 }
1886 }
1887
1888 // Link D
1889 Device (LNKD)
1890 {
1891 Name (_HID, EisaId ("PNP0C0F"))
1892 Name (_UID, 0x04)
1893 Method (_STA, 0, NotSerialized)
1894 {
1895 // DBG ("LNKD._STA\n")
1896 Return (LSTA (PIRD))
1897 }
1898
1899 Method (_PRS, 0, NotSerialized)
1900 {
1901 // DBG ("LNKD._PRS\n")
1902 Return (PRSD)
1903 }
1904
1905 Method (_DIS, 0, NotSerialized)
1906 {
1907 // DBG ("LNKD._DIS\n")
1908 Store (LDIS (PIRA), PIRD)
1909 }
1910
1911 Method (_CRS, 0, NotSerialized)
1912 {
1913 // DBG ("LNKD._CRS\n")
1914 Return (LCRS (PIRD))
1915 }
1916
1917 Method (_SRS, 1, NotSerialized)
1918 {
1919 DBG ("LNKD._SRS: ")
1920 HEX (LSRS (Arg0))
1921 Store (LSRS (Arg0), PIRD)
1922 }
1923 }
1924 }
1925
1926 // Sx states
1927 Name (_S0, Package (2) {
1928 0x00,
1929 0x00,
1930 })
1931
1932 // Shift one by the power state number
1933 If (And(PWRS, ShiftLeft(One,1))) {
1934 Name (_S1, Package (2) {
1935 0x01,
1936 0x01,
1937 })
1938 }
1939
1940 If (And(PWRS, ShiftLeft(One,4))) {
1941 Name (_S4, Package (2) {
1942 0x05,
1943 0x05,
1944 })
1945 }
1946
1947 Name (_S5, Package (2) {
1948 0x05,
1949 0x05,
1950 })
1951
1952 Method (_PTS, 1, NotSerialized)
1953 {
1954 DBG ("Prepare to sleep: ")
1955 HEX (Arg0)
1956 }
1957}
1958
1959/*
1960 * Local Variables:
1961 * comment-start: "//"
1962 * End:
1963 */
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