blob: ba29228ad3179e08aa28d3f042133894fffa0642 [file] [log] [blame]
Jens Rottmann73d49652013-02-28 09:56:20 +01001/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright (C) 2011 Advanced Micro Devices, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20/* DefinitionBlock Statement */
21DefinitionBlock (
22 "DSDT.AML", /* Output filename */
23 "DSDT", /* Signature */
24 0x02, /* DSDT Revision, needs to be 2 for 64bit */
25 "AMD ", /* OEMID */
26 "COREBOOT", /* TABLE ID */
27 0x00010001 /* OEM Revision */
28 )
29{ /* Start of ASL file */
30 /* #include <arch/i386/acpi/debug.asl> */ /* Include global debug methods if needed */
31
32 /* Data to be patched by the BIOS during POST */
33 /* FIXME the patching is not done yet! */
34 /* Memory related values */
35 Name(LOMH, 0x0) /* Start of unused memory in C0000-E0000 range */
36 Name(PBAD, 0x0) /* Address of BIOS area (If TOM2 != 0, Addr >> 16) */
37 Name(PBLN, 0x0) /* Length of BIOS area */
38
39 Name(PCBA, CONFIG_MMCONF_BASE_ADDRESS) /* Base address of PCIe config space */
40 Name(HPBA, 0xFED00000) /* Base address of HPET table */
41
42 Name(SSFG, 0x0D) /* S1 support: bit 0, S2 Support: bit 1, etc. S0 & S5 assumed */
43
44 /* USB overcurrent mapping pins. */
45 Name(UOM0, 0)
46 Name(UOM1, 2)
47 Name(UOM2, 0)
48 Name(UOM3, 7)
49 Name(UOM4, 2)
50 Name(UOM5, 2)
51 Name(UOM6, 6)
52 Name(UOM7, 2)
53 Name(UOM8, 6)
54 Name(UOM9, 6)
55
56 /* Some global data */
57 Name(OSTP, 3) /* Assume nothing. WinXp = 1, Vista = 2, Linux = 3, WinCE = 4 */
58 Name(OSV, Ones) /* Assume nothing */
59 Name(PMOD, One) /* Assume APIC */
60
61 /*
62 * Processor Object
63 *
64 */
65 Scope (\_PR) { /* define processor scope */
66 Processor(
67 C000, /* name space name, align with BLDCFG_PROCESSOR_SCOPE_NAME[01] */
68 0, /* Unique number for this processor */
69 0x810, /* PBLK system I/O address !hardcoded! */
70 0x06 /* PBLKLEN for boot processor */
71 ) {
72 }
73
74 Processor(
75 C001, /* name space name */
76 1, /* Unique number for this processor */
77 0x810, /* PBLK system I/O address !hardcoded! */
78 0x06 /* PBLKLEN for boot processor */
79 ) {
80 }
81 Processor(
82 C002, /* name space name */
83 2, /* Unique number for this processor */
84 0x810, /* PBLK system I/O address !hardcoded! */
85 0x06 /* PBLKLEN for boot processor */
86 ) {
87 }
88 Processor(
89 C003, /* name space name */
90 3, /* Unique number for this processor */
91 0x810, /* PBLK system I/O address !hardcoded! */
92 0x06 /* PBLKLEN for boot processor */
93 ) {
94 }
95 } /* End _PR scope */
96
97 /* PIC IRQ mapping registers, C00h-C01h. */
98 OperationRegion(PRQM, SystemIO, 0x00000C00, 0x00000002)
99 Field(PRQM, ByteAcc, NoLock, Preserve) {
100 PRQI, 0x00000008,
101 PRQD, 0x00000008, /* Offset: 1h */
102 }
103 IndexField(PRQI, PRQD, ByteAcc, NoLock, Preserve) {
104 PIRA, 0x00000008, /* Index 0 */
105 PIRB, 0x00000008, /* Index 1 */
106 PIRC, 0x00000008, /* Index 2 */
107 PIRD, 0x00000008, /* Index 3 */
108 PIRE, 0x00000008, /* Index 4 */
109 PIRF, 0x00000008, /* Index 5 */
110 PIRG, 0x00000008, /* Index 6 */
111 PIRH, 0x00000008, /* Index 7 */
112 }
113
114 /* PCI Error control register */
115 OperationRegion(PERC, SystemIO, 0x00000C14, 0x00000001)
116 Field(PERC, ByteAcc, NoLock, Preserve) {
117 SENS, 0x00000001,
118 PENS, 0x00000001,
119 SENE, 0x00000001,
120 PENE, 0x00000001,
121 }
122
123 /* Client Management index/data registers */
124 OperationRegion(CMT, SystemIO, 0x00000C50, 0x00000002)
125 Field(CMT, ByteAcc, NoLock, Preserve) {
126 CMTI, 8,
127 /* Client Management Data register */
128 G64E, 1,
129 G64O, 1,
130 G32O, 2,
131 , 2,
132 GPSL, 2,
133 }
134
135 /* GPM Port register */
136 OperationRegion(GPT, SystemIO, 0x00000C52, 0x00000001)
137 Field(GPT, ByteAcc, NoLock, Preserve) {
138 GPB0,1,
139 GPB1,1,
140 GPB2,1,
141 GPB3,1,
142 GPB4,1,
143 GPB5,1,
144 GPB6,1,
145 GPB7,1,
146 }
147
148 /* Flash ROM program enable register */
149 OperationRegion(FRE, SystemIO, 0x00000C6F, 0x00000001)
150 Field(FRE, ByteAcc, NoLock, Preserve) {
151 , 0x00000006,
152 FLRE, 0x00000001,
153 }
154
155 /* PM2 index/data registers */
156 OperationRegion(PM2R, SystemIO, 0x00000CD0, 0x00000002)
157 Field(PM2R, ByteAcc, NoLock, Preserve) {
158 PM2I, 0x00000008,
159 PM2D, 0x00000008,
160 }
161
162 /* Power Management I/O registers, TODO:PMIO is quite different in SB800. */
163 OperationRegion(PIOR, SystemIO, 0x00000CD6, 0x00000002)
164 Field(PIOR, ByteAcc, NoLock, Preserve) {
165 PIOI, 0x00000008,
166 PIOD, 0x00000008,
167 }
168 IndexField (PIOI, PIOD, ByteAcc, NoLock, Preserve) {
169 Offset(0x00), /* MiscControl */
170 , 1,
171 T1EE, 1,
172 T2EE, 1,
173 Offset(0x01), /* MiscStatus */
174 , 1,
175 T1E, 1,
176 T2E, 1,
177 Offset(0x04), /* SmiWakeUpEventEnable3 */
178 , 7,
179 SSEN, 1,
180 Offset(0x07), /* SmiWakeUpEventStatus3 */
181 , 7,
182 CSSM, 1,
183 Offset(0x10), /* AcpiEnable */
184 , 6,
185 PWDE, 1,
186 Offset(0x1C), /* ProgramIoEnable */
187 , 3,
188 MKME, 1,
189 IO3E, 1,
190 IO2E, 1,
191 IO1E, 1,
192 IO0E, 1,
193 Offset(0x1D), /* IOMonitorStatus */
194 , 3,
195 MKMS, 1,
196 IO3S, 1,
197 IO2S, 1,
198 IO1S, 1,
199 IO0S,1,
200 Offset(0x20), /* AcpiPmEvtBlk. TODO: should be 0x60 */
201 APEB, 16,
202 Offset(0x36), /* GEvtLevelConfig */
203 , 6,
204 ELC6, 1,
205 ELC7, 1,
206 Offset(0x37), /* GPMLevelConfig0 */
207 , 3,
208 PLC0, 1,
209 PLC1, 1,
210 PLC2, 1,
211 PLC3, 1,
212 PLC8, 1,
213 Offset(0x38), /* GPMLevelConfig1 */
214 , 1,
215 PLC4, 1,
216 PLC5, 1,
217 , 1,
218 PLC6, 1,
219 PLC7, 1,
220 Offset(0x3B), /* PMEStatus1 */
221 GP0S, 1,
222 GM4S, 1,
223 GM5S, 1,
224 APS, 1,
225 GM6S, 1,
226 GM7S, 1,
227 GP2S, 1,
228 STSS, 1,
229 Offset(0x55), /* SoftPciRst */
230 SPRE, 1,
231 , 1,
232 , 1,
233 PNAT, 1,
234 PWMK, 1,
235 PWNS, 1,
236
237 /* Offset(0x61), */ /* Options_1 */
238 /* ,7, */
239 /* R617,1, */
240
241 Offset(0x65), /* UsbPMControl */
242 , 4,
243 URRE, 1,
244 Offset(0x68), /* MiscEnable68 */
245 , 3,
246 TMTE, 1,
247 , 1,
248 Offset(0x92), /* GEVENTIN */
249 , 7,
250 E7IS, 1,
251 Offset(0x96), /* GPM98IN */
252 G8IS, 1,
253 G9IS, 1,
254 Offset(0x9A), /* EnhanceControl */
255 ,7,
256 HPDE, 1,
257 Offset(0xA8), /* PIO7654Enable */
258 IO4E, 1,
259 IO5E, 1,
260 IO6E, 1,
261 IO7E, 1,
262 Offset(0xA9), /* PIO7654Status */
263 IO4S, 1,
264 IO5S, 1,
265 IO6S, 1,
266 IO7S, 1,
267 }
268
269 /* PM1 Event Block
270 * First word is PM1_Status, Second word is PM1_Enable
271 */
272 OperationRegion(P1EB, SystemIO, APEB, 0x04)
273 Field(P1EB, ByteAcc, NoLock, Preserve) {
274 TMST, 1,
275 , 3,
276 BMST, 1,
277 GBST, 1,
278 Offset(0x01),
279 PBST, 1,
280 , 1,
281 RTST, 1,
282 , 3,
283 PWST, 1,
284 SPWS, 1,
285 Offset(0x02),
286 TMEN, 1,
287 , 4,
288 GBEN, 1,
289 Offset(0x03),
290 PBEN, 1,
291 , 1,
292 RTEN, 1,
293 , 3,
294 PWDA, 1,
295 }
296
297 Scope(\_SB) {
298 /* PCIe Configuration Space for 16 busses */
299 OperationRegion(PCFG, SystemMemory, PCBA, 0x01000000) /* Each bus consumes 1MB */
300 Field(PCFG, ByteAcc, NoLock, Preserve) {
301 /* Byte offsets are computed using the following technique:
302 * ((bus number + 1) * ((device number * 8) * 4096)) + register offset
303 * The 8 comes from 8 functions per device, and 4096 bytes per function config space
304 */
305 Offset(0x00088024), /* Byte offset to SATA register 24h - Bus 0, Device 17, Function 0 */
306 STB5, 32,
307 Offset(0x00098042), /* Byte offset to OHCI0 register 42h - Bus 0, Device 19, Function 0 */
308 PT0D, 1,
309 PT1D, 1,
310 PT2D, 1,
311 PT3D, 1,
312 PT4D, 1,
313 PT5D, 1,
314 PT6D, 1,
315 PT7D, 1,
316 PT8D, 1,
317 PT9D, 1,
318 Offset(0x000A0004), /* Byte offset to SMBUS register 4h - Bus 0, Device 20, Function 0 */
319 SBIE, 1,
320 SBME, 1,
321 Offset(0x000A0008), /* Byte offset to SMBUS register 8h - Bus 0, Device 20, Function 0 */
322 SBRI, 8,
323 Offset(0x000A0014), /* Byte offset to SMBUS register 14h - Bus 0, Device 20, Function 0 */
324 SBB1, 32,
325 Offset(0x000A0078), /* Byte offset to SMBUS register 78h - Bus 0, Device 20, Function 0 */
326 ,14,
327 P92E, 1, /* Port92 decode enable */
328 }
329
330 OperationRegion(SB5, SystemMemory, STB5, 0x1000)
331 Field(SB5, AnyAcc, NoLock, Preserve){
332 /* Port 0 */
333 Offset(0x120), /* Port 0 Task file status */
334 P0ER, 1,
335 , 2,
336 P0DQ, 1,
337 , 3,
338 P0BY, 1,
339 Offset(0x128), /* Port 0 Serial ATA status */
340 P0DD, 4,
341 , 4,
342 P0IS, 4,
343 Offset(0x12C), /* Port 0 Serial ATA control */
344 P0DI, 4,
345 Offset(0x130), /* Port 0 Serial ATA error */
346 , 16,
347 P0PR, 1,
348
349 /* Port 1 */
350 offset(0x1A0), /* Port 1 Task file status */
351 P1ER, 1,
352 , 2,
353 P1DQ, 1,
354 , 3,
355 P1BY, 1,
356 Offset(0x1A8), /* Port 1 Serial ATA status */
357 P1DD, 4,
358 , 4,
359 P1IS, 4,
360 Offset(0x1AC), /* Port 1 Serial ATA control */
361 P1DI, 4,
362 Offset(0x1B0), /* Port 1 Serial ATA error */
363 , 16,
364 P1PR, 1,
365
366 /* Port 2 */
367 Offset(0x220), /* Port 2 Task file status */
368 P2ER, 1,
369 , 2,
370 P2DQ, 1,
371 , 3,
372 P2BY, 1,
373 Offset(0x228), /* Port 2 Serial ATA status */
374 P2DD, 4,
375 , 4,
376 P2IS, 4,
377 Offset(0x22C), /* Port 2 Serial ATA control */
378 P2DI, 4,
379 Offset(0x230), /* Port 2 Serial ATA error */
380 , 16,
381 P2PR, 1,
382
383 /* Port 3 */
384 Offset(0x2A0), /* Port 3 Task file status */
385 P3ER, 1,
386 , 2,
387 P3DQ, 1,
388 , 3,
389 P3BY, 1,
390 Offset(0x2A8), /* Port 3 Serial ATA status */
391 P3DD, 4,
392 , 4,
393 P3IS, 4,
394 Offset(0x2AC), /* Port 3 Serial ATA control */
395 P3DI, 4,
396 Offset(0x2B0), /* Port 3 Serial ATA error */
397 , 16,
398 P3PR, 1,
399 }
400 }
401
402
403 #include "acpi/routing.asl"
404
405 Scope(\_SB) {
406
407 Method(CkOT, 0){
408
409 if(LNotEqual(OSTP, Ones)) {Return(OSTP)} /* OS version was already detected */
410
411 if(CondRefOf(\_OSI,Local1))
412 {
413 Store(1, OSTP) /* Assume some form of XP */
414 if (\_OSI("Windows 2006")) /* Vista */
415 {
416 Store(2, OSTP)
417 }
418 } else {
419 If(WCMP(\_OS,"Linux")) {
420 Store(3, OSTP) /* Linux */
421 } Else {
422 Store(4, OSTP) /* Gotta be WinCE */
423 }
424 }
425 Return(OSTP)
426 }
427
428 Method(_PIC, 0x01, NotSerialized)
429 {
430 If (Arg0)
431 {
432 \_SB.CIRQ()
433 }
434 Store(Arg0, PMOD)
435 }
436 Method(CIRQ, 0x00, NotSerialized){
437 Store(0, PIRA)
438 Store(0, PIRB)
439 Store(0, PIRC)
440 Store(0, PIRD)
441 Store(0, PIRE)
442 Store(0, PIRF)
443 Store(0, PIRG)
444 Store(0, PIRH)
445 }
446
447 Name(IRQB, ResourceTemplate(){
448 IRQ(Level,ActiveLow,Shared){15}
449 })
450
451 Name(IRQP, ResourceTemplate(){
452 IRQ(Level,ActiveLow,Exclusive){3, 4, 5, 7, 10, 11, 12, 15}
453 })
454
455 Name(PITF, ResourceTemplate(){
456 IRQ(Level,ActiveLow,Exclusive){9}
457 })
458
459 Device(INTA) {
460 Name(_HID, EISAID("PNP0C0F"))
461 Name(_UID, 1)
462
463 Method(_STA, 0) {
464 if (PIRA) {
465 Return(0x0B) /* sata is invisible */
466 } else {
467 Return(0x09) /* sata is disabled */
468 }
469 } /* End Method(_SB.INTA._STA) */
470
471 Method(_DIS ,0) {
472 /* DBGO("\\_SB\\LNKA\\_DIS\n") */
473 Store(0, PIRA)
474 } /* End Method(_SB.INTA._DIS) */
475
476 Method(_PRS ,0) {
477 /* DBGO("\\_SB\\LNKA\\_PRS\n") */
478 Return(IRQP)
479 } /* Method(_SB.INTA._PRS) */
480
481 Method(_CRS ,0) {
482 /* DBGO("\\_SB\\LNKA\\_CRS\n") */
483 CreateWordField(IRQB, 0x1, IRQN)
484 ShiftLeft(1, PIRA, IRQN)
485 Return(IRQB)
486 } /* Method(_SB.INTA._CRS) */
487
488 Method(_SRS, 1) {
489 /* DBGO("\\_SB\\LNKA\\_CRS\n") */
490 CreateWordField(ARG0, 1, IRQM)
491
492 /* Use lowest available IRQ */
493 FindSetRightBit(IRQM, Local0)
494 if (Local0) {
495 Decrement(Local0)
496 }
497 Store(Local0, PIRA)
498 } /* End Method(_SB.INTA._SRS) */
499 } /* End Device(INTA) */
500
501 Device(INTB) {
502 Name(_HID, EISAID("PNP0C0F"))
503 Name(_UID, 2)
504
505 Method(_STA, 0) {
506 if (PIRB) {
507 Return(0x0B) /* sata is invisible */
508 } else {
509 Return(0x09) /* sata is disabled */
510 }
511 } /* End Method(_SB.INTB._STA) */
512
513 Method(_DIS ,0) {
514 /* DBGO("\\_SB\\LNKB\\_DIS\n") */
515 Store(0, PIRB)
516 } /* End Method(_SB.INTB._DIS) */
517
518 Method(_PRS ,0) {
519 /* DBGO("\\_SB\\LNKB\\_PRS\n") */
520 Return(IRQP)
521 } /* Method(_SB.INTB._PRS) */
522
523 Method(_CRS ,0) {
524 /* DBGO("\\_SB\\LNKB\\_CRS\n") */
525 CreateWordField(IRQB, 0x1, IRQN)
526 ShiftLeft(1, PIRB, IRQN)
527 Return(IRQB)
528 } /* Method(_SB.INTB._CRS) */
529
530 Method(_SRS, 1) {
531 /* DBGO("\\_SB\\LNKB\\_CRS\n") */
532 CreateWordField(ARG0, 1, IRQM)
533
534 /* Use lowest available IRQ */
535 FindSetRightBit(IRQM, Local0)
536 if (Local0) {
537 Decrement(Local0)
538 }
539 Store(Local0, PIRB)
540 } /* End Method(_SB.INTB._SRS) */
541 } /* End Device(INTB) */
542
543 Device(INTC) {
544 Name(_HID, EISAID("PNP0C0F"))
545 Name(_UID, 3)
546
547 Method(_STA, 0) {
548 if (PIRC) {
549 Return(0x0B) /* sata is invisible */
550 } else {
551 Return(0x09) /* sata is disabled */
552 }
553 } /* End Method(_SB.INTC._STA) */
554
555 Method(_DIS ,0) {
556 /* DBGO("\\_SB\\LNKC\\_DIS\n") */
557 Store(0, PIRC)
558 } /* End Method(_SB.INTC._DIS) */
559
560 Method(_PRS ,0) {
561 /* DBGO("\\_SB\\LNKC\\_PRS\n") */
562 Return(IRQP)
563 } /* Method(_SB.INTC._PRS) */
564
565 Method(_CRS ,0) {
566 /* DBGO("\\_SB\\LNKC\\_CRS\n") */
567 CreateWordField(IRQB, 0x1, IRQN)
568 ShiftLeft(1, PIRC, IRQN)
569 Return(IRQB)
570 } /* Method(_SB.INTC._CRS) */
571
572 Method(_SRS, 1) {
573 /* DBGO("\\_SB\\LNKC\\_CRS\n") */
574 CreateWordField(ARG0, 1, IRQM)
575
576 /* Use lowest available IRQ */
577 FindSetRightBit(IRQM, Local0)
578 if (Local0) {
579 Decrement(Local0)
580 }
581 Store(Local0, PIRC)
582 } /* End Method(_SB.INTC._SRS) */
583 } /* End Device(INTC) */
584
585 Device(INTD) {
586 Name(_HID, EISAID("PNP0C0F"))
587 Name(_UID, 4)
588
589 Method(_STA, 0) {
590 if (PIRD) {
591 Return(0x0B) /* sata is invisible */
592 } else {
593 Return(0x09) /* sata is disabled */
594 }
595 } /* End Method(_SB.INTD._STA) */
596
597 Method(_DIS ,0) {
598 /* DBGO("\\_SB\\LNKD\\_DIS\n") */
599 Store(0, PIRD)
600 } /* End Method(_SB.INTD._DIS) */
601
602 Method(_PRS ,0) {
603 /* DBGO("\\_SB\\LNKD\\_PRS\n") */
604 Return(IRQP)
605 } /* Method(_SB.INTD._PRS) */
606
607 Method(_CRS ,0) {
608 /* DBGO("\\_SB\\LNKD\\_CRS\n") */
609 CreateWordField(IRQB, 0x1, IRQN)
610 ShiftLeft(1, PIRD, IRQN)
611 Return(IRQB)
612 } /* Method(_SB.INTD._CRS) */
613
614 Method(_SRS, 1) {
615 /* DBGO("\\_SB\\LNKD\\_CRS\n") */
616 CreateWordField(ARG0, 1, IRQM)
617
618 /* Use lowest available IRQ */
619 FindSetRightBit(IRQM, Local0)
620 if (Local0) {
621 Decrement(Local0)
622 }
623 Store(Local0, PIRD)
624 } /* End Method(_SB.INTD._SRS) */
625 } /* End Device(INTD) */
626
627 Device(INTE) {
628 Name(_HID, EISAID("PNP0C0F"))
629 Name(_UID, 5)
630
631 Method(_STA, 0) {
632 if (PIRE) {
633 Return(0x0B) /* sata is invisible */
634 } else {
635 Return(0x09) /* sata is disabled */
636 }
637 } /* End Method(_SB.INTE._STA) */
638
639 Method(_DIS ,0) {
640 /* DBGO("\\_SB\\LNKE\\_DIS\n") */
641 Store(0, PIRE)
642 } /* End Method(_SB.INTE._DIS) */
643
644 Method(_PRS ,0) {
645 /* DBGO("\\_SB\\LNKE\\_PRS\n") */
646 Return(IRQP)
647 } /* Method(_SB.INTE._PRS) */
648
649 Method(_CRS ,0) {
650 /* DBGO("\\_SB\\LNKE\\_CRS\n") */
651 CreateWordField(IRQB, 0x1, IRQN)
652 ShiftLeft(1, PIRE, IRQN)
653 Return(IRQB)
654 } /* Method(_SB.INTE._CRS) */
655
656 Method(_SRS, 1) {
657 /* DBGO("\\_SB\\LNKE\\_CRS\n") */
658 CreateWordField(ARG0, 1, IRQM)
659
660 /* Use lowest available IRQ */
661 FindSetRightBit(IRQM, Local0)
662 if (Local0) {
663 Decrement(Local0)
664 }
665 Store(Local0, PIRE)
666 } /* End Method(_SB.INTE._SRS) */
667 } /* End Device(INTE) */
668
669 Device(INTF) {
670 Name(_HID, EISAID("PNP0C0F"))
671 Name(_UID, 6)
672
673 Method(_STA, 0) {
674 if (PIRF) {
675 Return(0x0B) /* sata is invisible */
676 } else {
677 Return(0x09) /* sata is disabled */
678 }
679 } /* End Method(_SB.INTF._STA) */
680
681 Method(_DIS ,0) {
682 /* DBGO("\\_SB\\LNKF\\_DIS\n") */
683 Store(0, PIRF)
684 } /* End Method(_SB.INTF._DIS) */
685
686 Method(_PRS ,0) {
687 /* DBGO("\\_SB\\LNKF\\_PRS\n") */
688 Return(PITF)
689 } /* Method(_SB.INTF._PRS) */
690
691 Method(_CRS ,0) {
692 /* DBGO("\\_SB\\LNKF\\_CRS\n") */
693 CreateWordField(IRQB, 0x1, IRQN)
694 ShiftLeft(1, PIRF, IRQN)
695 Return(IRQB)
696 } /* Method(_SB.INTF._CRS) */
697
698 Method(_SRS, 1) {
699 /* DBGO("\\_SB\\LNKF\\_CRS\n") */
700 CreateWordField(ARG0, 1, IRQM)
701
702 /* Use lowest available IRQ */
703 FindSetRightBit(IRQM, Local0)
704 if (Local0) {
705 Decrement(Local0)
706 }
707 Store(Local0, PIRF)
708 } /* End Method(_SB.INTF._SRS) */
709 } /* End Device(INTF) */
710
711 Device(INTG) {
712 Name(_HID, EISAID("PNP0C0F"))
713 Name(_UID, 7)
714
715 Method(_STA, 0) {
716 if (PIRG) {
717 Return(0x0B) /* sata is invisible */
718 } else {
719 Return(0x09) /* sata is disabled */
720 }
721 } /* End Method(_SB.INTG._STA) */
722
723 Method(_DIS ,0) {
724 /* DBGO("\\_SB\\LNKG\\_DIS\n") */
725 Store(0, PIRG)
726 } /* End Method(_SB.INTG._DIS) */
727
728 Method(_PRS ,0) {
729 /* DBGO("\\_SB\\LNKG\\_PRS\n") */
730 Return(IRQP)
731 } /* Method(_SB.INTG._CRS) */
732
733 Method(_CRS ,0) {
734 /* DBGO("\\_SB\\LNKG\\_CRS\n") */
735 CreateWordField(IRQB, 0x1, IRQN)
736 ShiftLeft(1, PIRG, IRQN)
737 Return(IRQB)
738 } /* Method(_SB.INTG._CRS) */
739
740 Method(_SRS, 1) {
741 /* DBGO("\\_SB\\LNKG\\_CRS\n") */
742 CreateWordField(ARG0, 1, IRQM)
743
744 /* Use lowest available IRQ */
745 FindSetRightBit(IRQM, Local0)
746 if (Local0) {
747 Decrement(Local0)
748 }
749 Store(Local0, PIRG)
750 } /* End Method(_SB.INTG._SRS) */
751 } /* End Device(INTG) */
752
753 Device(INTH) {
754 Name(_HID, EISAID("PNP0C0F"))
755 Name(_UID, 8)
756
757 Method(_STA, 0) {
758 if (PIRH) {
759 Return(0x0B) /* sata is invisible */
760 } else {
761 Return(0x09) /* sata is disabled */
762 }
763 } /* End Method(_SB.INTH._STA) */
764
765 Method(_DIS ,0) {
766 /* DBGO("\\_SB\\LNKH\\_DIS\n") */
767 Store(0, PIRH)
768 } /* End Method(_SB.INTH._DIS) */
769
770 Method(_PRS ,0) {
771 /* DBGO("\\_SB\\LNKH\\_PRS\n") */
772 Return(IRQP)
773 } /* Method(_SB.INTH._CRS) */
774
775 Method(_CRS ,0) {
776 /* DBGO("\\_SB\\LNKH\\_CRS\n") */
777 CreateWordField(IRQB, 0x1, IRQN)
778 ShiftLeft(1, PIRH, IRQN)
779 Return(IRQB)
780 } /* Method(_SB.INTH._CRS) */
781
782 Method(_SRS, 1) {
783 /* DBGO("\\_SB\\LNKH\\_CRS\n") */
784 CreateWordField(ARG0, 1, IRQM)
785
786 /* Use lowest available IRQ */
787 FindSetRightBit(IRQM, Local0)
788 if (Local0) {
789 Decrement(Local0)
790 }
791 Store(Local0, PIRH)
792 } /* End Method(_SB.INTH._SRS) */
793 } /* End Device(INTH) */
794
795 } /* End Scope(_SB) */
796
797
798 /* Supported sleep states: */
799 Name(\_S0, Package () {0x00, 0x00, 0x00, 0x00} ) /* (S0) - working state */
800
801 If (LAnd(SSFG, 0x01)) {
802 Name(\_S1, Package () {0x01, 0x01, 0x00, 0x00} ) /* (S1) - sleeping w/CPU context */
803 }
804 If (LAnd(SSFG, 0x02)) {
805 Name(\_S2, Package () {0x02, 0x02, 0x00, 0x00} ) /* (S2) - "light" Suspend to RAM */
806 }
807 If (LAnd(SSFG, 0x04)) {
808 Name(\_S3, Package () {0x03, 0x03, 0x00, 0x00} ) /* (S3) - Suspend to RAM */
809 }
810 If (LAnd(SSFG, 0x08)) {
811 Name(\_S4, Package () {0x04, 0x04, 0x00, 0x00} ) /* (S4) - Suspend to Disk */
812 }
813
814 Name(\_S5, Package () {0x05, 0x05, 0x00, 0x00} ) /* (S5) - Soft Off */
815
816 Name(\_SB.CSPS ,0) /* Current Sleep State (S0, S1, S2, S3, S4, S5) */
817 Name(CSMS, 0) /* Current System State */
818
819 /* Wake status package */
820 Name(WKST,Package(){Zero, Zero})
821
822 /*
823 * \_PTS - Prepare to Sleep method
824 *
825 * Entry:
826 * Arg0=The value of the sleeping state S1=1, S2=2, etc
827 *
828 * Exit:
829 * -none-
830 *
831 * The _PTS control method is executed at the beginning of the sleep process
832 * for S1-S5. The sleeping value is passed to the _PTS control method. This
833 * control method may be executed a relatively long time before entering the
834 * sleep state and the OS may abort the operation without notification to
835 * the ACPI driver. This method cannot modify the configuration or power
836 * state of any device in the system.
837 */
838 Method(\_PTS, 1) {
839 /* DBGO("\\_PTS\n") */
840 /* DBGO("From S0 to S") */
841 /* DBGO(Arg0) */
842 /* DBGO("\n") */
843
844 /* Don't allow PCIRST# to reset USB */
845 if (LEqual(Arg0,3)){
846 Store(0,URRE)
847 }
848
849 /* Clear sleep SMI status flag and enable sleep SMI trap. */
850 /*Store(One, CSSM)
851 Store(One, SSEN)*/
852
853 /* On older chips, clear PciExpWakeDisEn */
854 /*if (LLessEqual(\_SB.SBRI, 0x13)) {
855 * Store(0,\_SB.PWDE)
856 *}
857 */
858
859 /* Clear wake status structure. */
860 Store(0, Index(WKST,0))
861 Store(0, Index(WKST,1))
862 } /* End Method(\_PTS) */
863
864 /*
865 * The following method results in a "not a valid reserved NameSeg"
866 * warning so I have commented it out for the duration. It isn't
867 * used, so it could be removed.
868 *
869 *
870 * \_GTS OEM Going To Sleep method
871 *
872 * Entry:
873 * Arg0=The value of the sleeping state S1=1, S2=2
874 *
875 * Exit:
876 * -none-
877 *
878 * Method(\_GTS, 1) {
879 * DBGO("\\_GTS\n")
880 * DBGO("From S0 to S")
881 * DBGO(Arg0)
882 * DBGO("\n")
883 * }
884 */
885
886 /*
887 * \_BFS OEM Back From Sleep method
888 *
889 * Entry:
890 * Arg0=The value of the sleeping state S1=1, S2=2
891 *
892 * Exit:
893 * -none-
894 */
895 Method(\_BFS, 1) {
896 /* DBGO("\\_BFS\n") */
897 /* DBGO("From S") */
898 /* DBGO(Arg0) */
899 /* DBGO(" to S0\n") */
900 }
901
902 /*
903 * \_WAK System Wake method
904 *
905 * Entry:
906 * Arg0=The value of the sleeping state S1=1, S2=2
907 *
908 * Exit:
909 * Return package of 2 DWords
910 * Dword 1 - Status
911 * 0x00000000 wake succeeded
912 * 0x00000001 Wake was signaled but failed due to lack of power
913 * 0x00000002 Wake was signaled but failed due to thermal condition
914 * Dword 2 - Power Supply state
915 * if non-zero the effective S-state the power supply entered
916 */
917 Method(\_WAK, 1) {
918 /* DBGO("\\_WAK\n") */
919 /* DBGO("From S") */
920 /* DBGO(Arg0) */
921 /* DBGO(" to S0\n") */
922
923 /* Re-enable HPET */
924 Store(1,HPDE)
925
926 /* Restore PCIRST# so it resets USB */
927 if (LEqual(Arg0,3)){
928 Store(1,URRE)
929 }
930
931 /* Arbitrarily clear PciExpWakeStatus */
932 Store(PWST, PWST)
933
934 /* if(DeRefOf(Index(WKST,0))) {
935 * Store(0, Index(WKST,1))
936 * } else {
937 * Store(Arg0, Index(WKST,1))
938 * }
939 */
940 Return(WKST)
941 } /* End Method(\_WAK) */
942
943 Scope(\_GPE) { /* Start Scope GPE */
944 /* General event 0 */
945 /* Method(_L00) {
946 * DBGO("\\_GPE\\_L00\n")
947 * }
948 */
949
950 /* General event 1 */
951 /* Method(_L01) {
952 * DBGO("\\_GPE\\_L00\n")
953 * }
954 */
955
956 /* General event 2 */
957 /* Method(_L02) {
958 * DBGO("\\_GPE\\_L00\n")
959 * }
960 */
961
962 /* General event 3 */
963 Method(_L03) {
964 /* DBGO("\\_GPE\\_L00\n") */
965 Notify(\_SB.PWRB, 0x02) /* NOTIFY_DEVICE_WAKE */
966 }
967
968 /* General event 4 */
969 /* Method(_L04) {
970 * DBGO("\\_GPE\\_L00\n")
971 * }
972 */
973
974 /* General event 5 */
975 /* Method(_L05) {
976 * DBGO("\\_GPE\\_L00\n")
977 * }
978 */
979
980 /* General event 6 - Used for GPM6, moved to USB.asl */
981 /* Method(_L06) {
982 * DBGO("\\_GPE\\_L00\n")
983 * }
984 */
985
986 /* General event 7 - Used for GPM7, moved to USB.asl */
987 /* Method(_L07) {
988 * DBGO("\\_GPE\\_L07\n")
989 * }
990 */
991
992 /* Legacy PM event */
993 Method(_L08) {
994 /* DBGO("\\_GPE\\_L08\n") */
995 }
996
997 /* Temp warning (TWarn) event */
998 Method(_L09) {
999 /* DBGO("\\_GPE\\_L09\n") */
1000 /* Notify (\_TZ.TZ00, 0x80) */
1001 }
1002
1003 /* Reserved */
1004 /* Method(_L0A) {
1005 * DBGO("\\_GPE\\_L0A\n")
1006 * }
1007 */
1008
1009 /* USB controller PME# */
1010 Method(_L0B) {
1011 /* DBGO("\\_GPE\\_L0B\n") */
1012 Notify(\_SB.PCI0.UOH1, 0x02) /* NOTIFY_DEVICE_WAKE */
1013 Notify(\_SB.PCI0.UOH2, 0x02) /* NOTIFY_DEVICE_WAKE */
1014 Notify(\_SB.PCI0.UOH3, 0x02) /* NOTIFY_DEVICE_WAKE */
1015 Notify(\_SB.PCI0.UOH4, 0x02) /* NOTIFY_DEVICE_WAKE */
1016 Notify(\_SB.PCI0.UOH5, 0x02) /* NOTIFY_DEVICE_WAKE */
1017 Notify(\_SB.PCI0.UOH6, 0x02) /* NOTIFY_DEVICE_WAKE */
1018 Notify(\_SB.PCI0.UEH1, 0x02) /* NOTIFY_DEVICE_WAKE */
1019 Notify(\_SB.PWRB, 0x02) /* NOTIFY_DEVICE_WAKE */
1020 }
1021
1022 /* AC97 controller PME# */
1023 /* Method(_L0C) {
1024 * DBGO("\\_GPE\\_L0C\n")
1025 * }
1026 */
1027
1028 /* OtherTherm PME# */
1029 /* Method(_L0D) {
1030 * DBGO("\\_GPE\\_L0D\n")
1031 * }
1032 */
1033
1034 /* GPM9 SCI event - Moved to USB.asl */
1035 /* Method(_L0E) {
1036 * DBGO("\\_GPE\\_L0E\n")
1037 * }
1038 */
1039
1040 /* PCIe HotPlug event */
1041 /* Method(_L0F) {
1042 * DBGO("\\_GPE\\_L0F\n")
1043 * }
1044 */
1045
1046 /* ExtEvent0 SCI event */
1047 Method(_L10) {
1048 /* DBGO("\\_GPE\\_L10\n") */
1049 }
1050
1051
1052 /* ExtEvent1 SCI event */
1053 Method(_L11) {
1054 /* DBGO("\\_GPE\\_L11\n") */
1055 }
1056
1057 /* PCIe PME# event */
1058 /* Method(_L12) {
1059 * DBGO("\\_GPE\\_L12\n")
1060 * }
1061 */
1062
1063 /* GPM0 SCI event - Moved to USB.asl */
1064 /* Method(_L13) {
1065 * DBGO("\\_GPE\\_L13\n")
1066 * }
1067 */
1068
1069 /* GPM1 SCI event - Moved to USB.asl */
1070 /* Method(_L14) {
1071 * DBGO("\\_GPE\\_L14\n")
1072 * }
1073 */
1074
1075 /* GPM2 SCI event - Moved to USB.asl */
1076 /* Method(_L15) {
1077 * DBGO("\\_GPE\\_L15\n")
1078 * }
1079 */
1080
1081 /* GPM3 SCI event - Moved to USB.asl */
1082 /* Method(_L16) {
1083 * DBGO("\\_GPE\\_L16\n")
1084 * }
1085 */
1086
1087 /* GPM8 SCI event - Moved to USB.asl */
1088 /* Method(_L17) {
1089 * DBGO("\\_GPE\\_L17\n")
1090 * }
1091 */
1092
1093 /* GPIO0 or GEvent8 event */
1094 Method(_L18) {
1095 /* DBGO("\\_GPE\\_L18\n") */
1096 Notify(\_SB.PCI0.PBR2, 0x02) /* NOTIFY_DEVICE_WAKE */
1097 Notify(\_SB.PCI0.PBR4, 0x02) /* NOTIFY_DEVICE_WAKE */
1098 Notify(\_SB.PCI0.PBR5, 0x02) /* NOTIFY_DEVICE_WAKE */
1099 Notify(\_SB.PCI0.PBR6, 0x02) /* NOTIFY_DEVICE_WAKE */
1100 Notify(\_SB.PCI0.PBR7, 0x02) /* NOTIFY_DEVICE_WAKE */
1101 Notify(\_SB.PWRB, 0x02) /* NOTIFY_DEVICE_WAKE */
1102 }
1103
1104 /* GPM4 SCI event - Moved to USB.asl */
1105 /* Method(_L19) {
1106 * DBGO("\\_GPE\\_L19\n")
1107 * }
1108 */
1109
1110 /* GPM5 SCI event - Moved to USB.asl */
1111 /* Method(_L1A) {
1112 * DBGO("\\_GPE\\_L1A\n")
1113 * }
1114 */
1115
1116 /* Azalia SCI event */
1117 Method(_L1B) {
1118 /* DBGO("\\_GPE\\_L1B\n") */
1119 Notify(\_SB.PCI0.AZHD, 0x02) /* NOTIFY_DEVICE_WAKE */
1120 Notify(\_SB.PWRB, 0x02) /* NOTIFY_DEVICE_WAKE */
1121 }
1122
1123 /* GPM6 SCI event - Reassigned to _L06 */
1124 /* Method(_L1C) {
1125 * DBGO("\\_GPE\\_L1C\n")
1126 * }
1127 */
1128
1129 /* GPM7 SCI event - Reassigned to _L07 */
1130 /* Method(_L1D) {
1131 * DBGO("\\_GPE\\_L1D\n")
1132 * }
1133 */
1134
1135 /* GPIO2 or GPIO66 SCI event */
1136 /* Method(_L1E) {
1137 * DBGO("\\_GPE\\_L1E\n")
1138 * }
1139 */
1140
1141 /* SATA SCI event - Moved to sata.asl */
1142 /* Method(_L1F) {
1143 * DBGO("\\_GPE\\_L1F\n")
1144 * }
1145 */
1146
1147 } /* End Scope GPE */
1148
1149 #include "acpi/usb.asl"
1150
1151 /* South Bridge */
1152 Scope(\_SB) { /* Start \_SB scope */
1153 #include <arch/x86/acpi/globutil.asl> /* global utility methods expected within the \_SB scope */
1154
1155 /* _SB.PCI0 */
1156 /* Note: Only need HID on Primary Bus */
1157 Device(PCI0) {
1158 External (TOM1)
1159 External (TOM2)
Mike Loptien061c6642013-03-15 13:24:53 -06001160 Name(_HID, EISAID("PNP0A08")) /* PCI Express Root Bridge */
1161 Name(_CID, EISAID("PNP0A03")) /* PCI Root Bridge */
Jens Rottmann73d49652013-02-28 09:56:20 +01001162 Name(_ADR, 0x00180000) /* Dev# = BSP Dev#, Func# = 0 */
Mike Loptien061c6642013-03-15 13:24:53 -06001163
1164 /* Operating System Capabilities Method */
1165 Method(_OSC,4)
1166 { /* Check for proper PCI/PCIe UUID */
1167 If(LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766")))
1168 {
1169 /* Let OS control everything */
1170 Return (Arg3)
1171 }
1172 }
1173
Jens Rottmann73d49652013-02-28 09:56:20 +01001174 Method(_BBN, 0) { /* Bus number = 0 */
1175 Return(0)
1176 }
1177 Method(_STA, 0) {
1178 /* DBGO("\\_SB\\PCI0\\_STA\n") */
1179 Return(0x0B) /* Status is visible */
1180 }
1181
1182 Method(_PRT,0) {
1183 If(PMOD){ Return(APR0) } /* APIC mode */
1184 Return (PR0) /* PIC Mode */
1185 } /* end _PRT */
1186
1187 /* Describe the Northbridge devices */
1188 Device(AMRT) {
1189 Name(_ADR, 0x00000000)
1190 } /* end AMRT */
1191
1192 /* The internal GFX bridge */
1193 Device(AGPB) {
1194 Name(_ADR, 0x00010000)
1195 Name(_PRW, Package() {0x18, 4})
1196 Method(_PRT,0) {
1197 Return (APR1)
1198 }
1199 } /* end AGPB */
1200
1201 /* The external GFX bridge */
1202 Device(PBR2) {
1203 Name(_ADR, 0x00020000)
1204 Name(_PRW, Package() {0x18, 4})
1205 Method(_PRT,0) {
1206 If(PMOD){ Return(APS2) } /* APIC mode */
1207 Return (PS2) /* PIC Mode */
1208 } /* end _PRT */
1209 } /* end PBR2 */
1210
1211 /* Dev3 is also an external GFX bridge, not used in Herring */
1212
1213 Device(PBR4) {
1214 Name(_ADR, 0x00040000)
1215 Name(_PRW, Package() {0x18, 4})
1216 Method(_PRT,0) {
1217 If(PMOD){ Return(APS4) } /* APIC mode */
1218 Return (PS4) /* PIC Mode */
1219 } /* end _PRT */
1220 } /* end PBR4 */
1221
1222 Device(PBR5) {
1223 Name(_ADR, 0x00050000)
1224 Name(_PRW, Package() {0x18, 4})
1225 Method(_PRT,0) {
1226 If(PMOD){ Return(APS5) } /* APIC mode */
1227 Return (PS5) /* PIC Mode */
1228 } /* end _PRT */
1229 } /* end PBR5 */
1230
1231 Device(PBR6) {
1232 Name(_ADR, 0x00060000)
1233 Name(_PRW, Package() {0x18, 4})
1234 Method(_PRT,0) {
1235 If(PMOD){ Return(APS6) } /* APIC mode */
1236 Return (PS6) /* PIC Mode */
1237 } /* end _PRT */
1238 } /* end PBR6 */
1239
1240 /* The onboard EtherNet chip */
1241 Device(PBR7) {
1242 Name(_ADR, 0x00070000)
1243 Name(_PRW, Package() {0x18, 4})
1244 Method(_PRT,0) {
1245 If(PMOD){ Return(APS7) } /* APIC mode */
1246 Return (PS7) /* PIC Mode */
1247 } /* end _PRT */
1248 } /* end PBR7 */
1249
1250 /* GPP */
1251 Device(PBR9) {
1252 Name(_ADR, 0x00090000)
1253 Name(_PRW, Package() {0x18, 4})
1254 Method(_PRT,0) {
1255 If(PMOD){ Return(APS9) } /* APIC mode */
1256 Return (PS9) /* PIC Mode */
1257 } /* end _PRT */
1258 } /* end PBR9 */
1259
1260 Device(PBRa) {
1261 Name(_ADR, 0x000A0000)
1262 Name(_PRW, Package() {0x18, 4})
1263 Method(_PRT,0) {
1264 If(PMOD){ Return(APSa) } /* APIC mode */
1265 Return (PSa) /* PIC Mode */
1266 } /* end _PRT */
1267 } /* end PBRa */
1268
1269 Device(PE20) {
1270 Name(_ADR, 0x00150000)
1271 Name(_PRW, Package() {0x18, 4})
1272 Method(_PRT,0) {
1273 If(PMOD){ Return(APE0) } /* APIC mode */
1274 Return (PE0) /* PIC Mode */
1275 } /* end _PRT */
1276 } /* end PE20 */
1277 Device(PE21) {
1278 Name(_ADR, 0x00150001)
1279 Name(_PRW, Package() {0x18, 4})
1280 Method(_PRT,0) {
1281 If(PMOD){ Return(APE1) } /* APIC mode */
1282 Return (PE1) /* PIC Mode */
1283 } /* end _PRT */
1284 } /* end PE21 */
1285 Device(PE22) {
1286 Name(_ADR, 0x00150002)
1287 Name(_PRW, Package() {0x18, 4})
1288 Method(_PRT,0) {
1289 If(PMOD){ Return(APE2) } /* APIC mode */
1290 Return (APE2) /* PIC Mode */
1291 } /* end _PRT */
1292 } /* end PE22 */
1293 Device(PE23) {
1294 Name(_ADR, 0x00150003)
1295 Name(_PRW, Package() {0x18, 4})
1296 Method(_PRT,0) {
1297 If(PMOD){ Return(APE3) } /* APIC mode */
1298 Return (PE3) /* PIC Mode */
1299 } /* end _PRT */
1300 } /* end PE23 */
1301
1302 /* PCI slot 1, 2, 3 */
1303 Device(PIBR) {
1304 Name(_ADR, 0x00140004)
1305 Name(_PRW, Package() {0x18, 4})
1306
1307 Method(_PRT, 0) {
1308 Return (PCIB)
1309 }
1310 }
1311
1312 /* Describe the Southbridge devices */
1313 Device(STCR) {
1314 Name(_ADR, 0x00110000)
1315 #include "acpi/sata.asl"
1316 } /* end STCR */
1317
1318 Device(UOH1) {
1319 Name(_ADR, 0x00120000)
1320 Name(_PRW, Package() {0x0B, 3})
1321 } /* end UOH1 */
1322
1323 Device(UOH2) {
1324 Name(_ADR, 0x00120002)
1325 Name(_PRW, Package() {0x0B, 3})
1326 } /* end UOH2 */
1327
1328 Device(UOH3) {
1329 Name(_ADR, 0x00130000)
1330 Name(_PRW, Package() {0x0B, 3})
1331 } /* end UOH3 */
1332
1333 Device(UOH4) {
1334 Name(_ADR, 0x00130002)
1335 Name(_PRW, Package() {0x0B, 3})
1336 } /* end UOH4 */
1337
1338 Device(UOH5) {
1339 Name(_ADR, 0x00160000)
1340 Name(_PRW, Package() {0x0B, 3})
1341 } /* end UOH5 */
1342
1343 Device(UOH6) {
1344 Name(_ADR, 0x00160002)
1345 Name(_PRW, Package() {0x0B, 3})
1346 } /* end UOH5 */
1347
1348 Device(UEH1) {
1349 Name(_ADR, 0x00140005)
1350 Name(_PRW, Package() {0x0B, 3})
1351 } /* end UEH1 */
1352
1353 Device(SBUS) {
1354 Name(_ADR, 0x00140000)
1355 } /* end SBUS */
1356
1357 /* Primary (and only) IDE channel */
1358 Device(IDEC) {
1359 Name(_ADR, 0x00140001)
1360 #include "acpi/ide.asl"
1361 } /* end IDEC */
1362
1363 Device(AZHD) {
1364 Name(_ADR, 0x00140002)
1365 OperationRegion(AZPD, PCI_Config, 0x00, 0x100)
1366 Field(AZPD, AnyAcc, NoLock, Preserve) {
1367 offset (0x42),
1368 NSDI, 1,
1369 NSDO, 1,
1370 NSEN, 1,
1371 offset (0x44),
1372 IPCR, 4,
1373 offset (0x54),
1374 PWST, 2,
1375 , 6,
1376 PMEB, 1,
1377 , 6,
1378 PMST, 1,
1379 offset (0x62),
1380 MMCR, 1,
1381 offset (0x64),
1382 MMLA, 32,
1383 offset (0x68),
1384 MMHA, 32,
1385 offset (0x6C),
1386 MMDT, 16,
1387 }
1388
1389 Method(_INI) {
1390 If(LEqual(OSTP,3)){ /* If we are running Linux */
1391 Store(zero, NSEN)
1392 Store(one, NSDO)
1393 Store(one, NSDI)
1394 }
1395 }
1396 } /* end AZHD */
1397
1398 Device(LIBR) {
1399 Name(_ADR, 0x00140003)
1400 /* Method(_INI) {
1401 * DBGO("\\_SB\\PCI0\\LpcIsaBr\\_INI\n")
1402 } */ /* End Method(_SB.SBRDG._INI) */
1403
1404 /* Real Time Clock Device */
1405 Device(RTC0) {
1406 Name(_HID, EISAID("PNP0B00")) /* AT Real Time Clock (not PIIX4 compatible) */
1407 Name(_CRS, ResourceTemplate() {
1408 IRQNoFlags(){8}
1409 IO(Decode16,0x0070, 0x0070, 0, 2)
1410 /* IO(Decode16,0x0070, 0x0070, 0, 4) */
1411 })
1412 } /* End Device(_SB.PCI0.LpcIsaBr.RTC0) */
1413
1414 Device(TMR) { /* Timer */
1415 Name(_HID,EISAID("PNP0100")) /* System Timer */
1416 Name(_CRS, ResourceTemplate() {
1417 IRQNoFlags(){0}
1418 IO(Decode16, 0x0040, 0x0040, 0, 4)
1419 /* IO(Decode16, 0x0048, 0x0048, 0, 4) */
1420 })
1421 } /* End Device(_SB.PCI0.LpcIsaBr.TMR) */
1422
1423 Device(SPKR) { /* Speaker */
1424 Name(_HID,EISAID("PNP0800")) /* AT style speaker */
1425 Name(_CRS, ResourceTemplate() {
1426 IO(Decode16, 0x0061, 0x0061, 0, 1)
1427 })
1428 } /* End Device(_SB.PCI0.LpcIsaBr.SPKR) */
1429
1430 Device(PIC) {
1431 Name(_HID,EISAID("PNP0000")) /* AT Interrupt Controller */
1432 Name(_CRS, ResourceTemplate() {
1433 IRQNoFlags(){2}
1434 IO(Decode16,0x0020, 0x0020, 0, 2)
1435 IO(Decode16,0x00A0, 0x00A0, 0, 2)
1436 /* IO(Decode16, 0x00D0, 0x00D0, 0x10, 0x02) */
1437 /* IO(Decode16, 0x04D0, 0x04D0, 0x10, 0x02) */
1438 })
1439 } /* End Device(_SB.PCI0.LpcIsaBr.PIC) */
1440
1441 Device(MAD) { /* 8257 DMA */
1442 Name(_HID,EISAID("PNP0200")) /* Hardware Device ID */
1443 Name(_CRS, ResourceTemplate() {
1444 DMA(Compatibility,BusMaster,Transfer8){4}
1445 IO(Decode16, 0x0000, 0x0000, 0x10, 0x10)
1446 IO(Decode16, 0x0081, 0x0081, 0x01, 0x03)
1447 IO(Decode16, 0x0087, 0x0087, 0x01, 0x01)
1448 IO(Decode16, 0x0089, 0x0089, 0x01, 0x03)
1449 IO(Decode16, 0x008F, 0x008F, 0x01, 0x01)
1450 IO(Decode16, 0x00C0, 0x00C0, 0x10, 0x20)
1451 }) /* End Name(_SB.PCI0.LpcIsaBr.MAD._CRS) */
1452 } /* End Device(_SB.PCI0.LpcIsaBr.MAD) */
1453
1454 Device(COPR) {
1455 Name(_HID,EISAID("PNP0C04")) /* Math Coprocessor */
1456 Name(_CRS, ResourceTemplate() {
1457 IO(Decode16, 0x00F0, 0x00F0, 0, 0x10)
1458 IRQNoFlags(){13}
1459 })
1460 } /* End Device(_SB.PCI0.LpcIsaBr.COPR) */
1461#if 0
1462 Device(HPTM) {
1463 Name(_HID,EISAID("PNP0103"))
1464 Name(CRS,ResourceTemplate() {
1465 Memory32Fixed(ReadOnly,0xFED00000, 0x00000400, HPT) /* 1kb reserved space */
1466 })
1467 Method(_STA, 0) {
1468 Return(0x0F) /* sata is visible */
1469 }
1470 Method(_CRS, 0) {
1471 CreateDwordField(CRS, ^HPT._BAS, HPBA)
1472 Store(HPBA, HPBA)
1473 Return(CRS)
1474 }
1475 } /* End Device(_SB.PCI0.LpcIsaBr.COPR) */
1476#endif
Jens Rottmann23d13b12013-02-28 10:24:20 +01001477 #include "acpi/superio.asl"
Jens Rottmann73d49652013-02-28 09:56:20 +01001478 } /* end LIBR */
1479
1480 Device(HPBR) {
1481 Name(_ADR, 0x00140004)
1482 } /* end HostPciBr */
1483
1484 Device(ACAD) {
1485 Name(_ADR, 0x00140005)
1486 } /* end Ac97audio */
1487
1488 Device(ACMD) {
1489 Name(_ADR, 0x00140006)
1490 } /* end Ac97modem */
1491
1492 Name(CRES, ResourceTemplate() {
Mike Loptien42ad2002013-03-15 13:05:59 -06001493 /* Set the Bus number and Secondary Bus number for the PCI0 device
1494 * The Secondary bus range for PCI0 lets the system
1495 * know what bus values are allowed on the downstream
1496 * side of this PCI bus if there is a PCI-PCI bridge.
1497 * PCI busses can have 256 secondary busses which
1498 * range from [0-0xFF] but they do not need to be
1499 * sequential.
1500 */
1501 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
1502 0x0000, /* address granularity */
1503 0x0000, /* range minimum */
1504 0x00FF, /* range maximum */
1505 0x0000, /* translation */
1506 0x0100, /* length */
1507 ,, PSB0) /* ResourceSourceIndex, ResourceSource, DescriptorName */
1508
Jens Rottmann23d13b12013-02-28 10:24:20 +01001509 IO(Decode16, 0x004E, 0x004E, 1, 2) /* SIO config regs */
1510 IO(Decode16, 0x0E00, 0x0E00, 1, 0x80) /* SIO runtime regs */
Jens Rottmann73d49652013-02-28 09:56:20 +01001511 IO(Decode16, 0x0CF8, 0x0CF8, 1, 8)
1512
1513 WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
1514 0x0000, /* address granularity */
1515 0x0000, /* range minimum */
1516 0x0CF7, /* range maximum */
1517 0x0000, /* translation */
1518 0x0CF8 /* length */
1519 )
1520
1521 WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
1522 0x0000, /* address granularity */
1523 0x0D00, /* range minimum */
1524 0xFFFF, /* range maximum */
1525 0x0000, /* translation */
1526 0xF300 /* length */
1527 )
1528
1529 Memory32Fixed(READONLY, 0x000A0000, 0x00020000, VGAM) /* VGA memory space */
1530#if 0
1531 Memory32Fixed(READONLY, 0x000C0000, 0x00020000, EMM1) /* Assume C0000-E0000 empty */
1532 Memory32Fixed(READONLY, 0x000E0000, 0x00020000, RDBS) /* BIOS ROM area */
1533
1534 /* DRAM Memory from 1MB to TopMem */
1535 Memory32Fixed(READWRITE, 0x00100000, 0, DMLO) /* 1MB to TopMem */
1536
1537 /* BIOS space just below 4GB */
1538 DWORDMemory(
1539 ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
1540 0x00, /* Granularity */
1541 0x00000000, /* Min */
1542 0x00000000, /* Max */
1543 0x00000000, /* Translation */
1544 0x00000001, /* Max-Min, RLEN */
1545 ,,
1546 PCBM
1547 )
1548
1549 /* DRAM memory from 4GB to TopMem2 */
1550 QWORDMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
1551 0x00000000, /* Granularity */
1552 0x00000000, /* Min */
1553 0x00000000, /* Max */
1554 0x00000000, /* Translation */
1555 0x00000001, /* Max-Min, RLEN */
1556 ,,
1557 DMHI
1558 )
1559
1560 /* BIOS space just below 16EB */
1561 QWORDMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
1562 0x00000000, /* Granularity */
1563 0x00000000, /* Min */
1564 0x00000000, /* Max */
1565 0x00000000, /* Translation */
1566 0x00000001, /* Max-Min, RLEN */
1567 ,,
1568 PEBM
1569 )
1570#endif
1571 /* memory space for PCI BARs below 4GB */
1572 Memory32Fixed(ReadOnly, 0x00000000, 0x00000000, MMIO)
1573 }) /* End Name(_SB.PCI0.CRES) */
1574
1575 Method(_CRS, 0) {
1576 /* DBGO("\\_SB\\PCI0\\_CRS\n") */
1577#if 0
1578 CreateDWordField(CRES, ^EMM1._BAS, EM1B)
1579 CreateDWordField(CRES, ^EMM1._LEN, EM1L)
1580 CreateDWordField(CRES, ^DMLO._BAS, DMLB)
1581 CreateDWordField(CRES, ^DMLO._LEN, DMLL)
1582 CreateDWordField(CRES, ^PCBM._MIN, PBMB)
1583 CreateDWordField(CRES, ^PCBM._LEN, PBML)
1584
1585 CreateQWordField(CRES, ^DMHI._MIN, DMHB)
1586 CreateQWordField(CRES, ^DMHI._LEN, DMHL)
1587 CreateQWordField(CRES, ^PEBM._MIN, EBMB)
1588 CreateQWordField(CRES, ^PEBM._LEN, EBML)
1589
1590 If(LGreater(LOMH, 0xC0000)){
1591 Store(0xC0000, EM1B) /* Hole above C0000 and below E0000 */
1592 Subtract(LOMH, 0xC0000, EM1L) /* subtract start, assumes allocation from C0000 going up */
1593 }
1594
1595 /* Set size of memory from 1MB to TopMem */
1596 Subtract(TOM1, 0x100000, DMLL)
1597
1598 /*
1599 * If(LNotEqual(TOM2, 0x00000000)){
1600 * Store(0x100000000,DMHB) DRAM from 4GB to TopMem2
1601 * Subtract(TOM2, 0x100000000, DMHL)
1602 * }
1603 */
1604
1605 /* If there is no memory above 4GB, put the BIOS just below 4GB */
1606 If(LEqual(TOM2, 0x00000000)){
1607 Store(PBAD,PBMB) /* Reserve the "BIOS" space */
1608 Store(PBLN,PBML)
1609 }
1610 Else { /* Otherwise, put the BIOS just below 16EB */
1611 ShiftLeft(PBAD,16,EBMB) /* Reserve the "BIOS" space */
1612 Store(PBLN,EBML)
1613 }
1614#endif
1615 CreateDWordField(CRES, ^MMIO._BAS, MM1B)
1616 CreateDWordField(CRES, ^MMIO._LEN, MM1L)
1617 /*
1618 * Declare memory between TOM1 and 4GB as available
1619 * for PCI MMIO.
1620 * Use ShiftLeft to avoid 64bit constant (for XP).
1621 * This will work even if the OS does 32bit arithmetic, as
1622 * 32bit (0x00000000 - TOM1) will wrap and give the same
1623 * result as 64bit (0x100000000 - TOM1).
1624 */
1625 Store(TOM1, MM1B)
1626 ShiftLeft(0x10000000, 4, Local0)
1627 Subtract(Local0, TOM1, Local0)
1628 Store(Local0, MM1L)
1629
1630 Return(CRES) /* note to change the Name buffer */
1631 } /* end of Method(_SB.PCI0._CRS) */
1632
1633 /*
1634 *
1635 * FIRST METHOD CALLED UPON BOOT
1636 *
1637 * 1. If debugging, print current OS and ACPI interpreter.
1638 * 2. Get PCI Interrupt routing from ACPI VSM, this
1639 * value is based on user choice in BIOS setup.
1640 */
1641 Method(_INI, 0) {
1642 /* DBGO("\\_SB\\_INI\n") */
1643 /* DBGO(" DSDT.ASL code from ") */
1644 /* DBGO(__DATE__) */
1645 /* DBGO(" ") */
1646 /* DBGO(__TIME__) */
1647 /* DBGO("\n Sleep states supported: ") */
1648 /* DBGO("\n") */
1649 /* DBGO(" \\_OS=") */
1650 /* DBGO(\_OS) */
1651 /* DBGO("\n \\_REV=") */
1652 /* DBGO(\_REV) */
1653 /* DBGO("\n") */
1654
1655 /* Determine the OS we're running on */
1656 CkOT()
1657
1658 /* On older chips, clear PciExpWakeDisEn */
1659 /*if (LLessEqual(\SBRI, 0x13)) {
1660 * Store(0,\PWDE)
1661 * }
1662 */
1663 } /* End Method(_SB._INI) */
1664 } /* End Device(PCI0) */
1665
1666 Device(PWRB) { /* Start Power button device */
1667 Name(_HID, EISAID("PNP0C0C"))
1668 Name(_UID, 0xAA)
1669 Name(_PRW, Package () {3, 0x04}) /* wake from S1-S4 */
1670 Name(_STA, 0x0B) /* sata is invisible */
1671 }
1672 } /* End \_SB scope */
1673
1674 Scope(\_SI) {
1675 Method(_SST, 1) {
1676 /* DBGO("\\_SI\\_SST\n") */
1677 /* DBGO(" New Indicator state: ") */
1678 /* DBGO(Arg0) */
1679 /* DBGO("\n") */
1680 }
1681 } /* End Scope SI */
1682#if 0
1683 /* SMBUS Support */
1684 Mutex (SBX0, 0x00)
1685 OperationRegion (SMB0, SystemIO, 0xB00, 0x0C)
1686 Field (SMB0, ByteAcc, NoLock, Preserve) {
1687 HSTS, 8, /* SMBUS status */
1688 SSTS, 8, /* SMBUS slave status */
1689 HCNT, 8, /* SMBUS control */
1690 HCMD, 8, /* SMBUS host cmd */
1691 HADD, 8, /* SMBUS address */
1692 DAT0, 8, /* SMBUS data0 */
1693 DAT1, 8, /* SMBUS data1 */
1694 BLKD, 8, /* SMBUS block data */
1695 SCNT, 8, /* SMBUS slave control */
1696 SCMD, 8, /* SMBUS shaow cmd */
1697 SEVT, 8, /* SMBUS slave event */
1698 SDAT, 8 /* SMBUS slave data */
1699 }
1700
1701 Method (WCLR, 0, NotSerialized) { /* clear SMBUS status register */
1702 Store (0x1E, HSTS)
1703 Store (0xFA, Local0)
1704 While (LAnd (LNotEqual (And (HSTS, 0x1E), Zero), LGreater (Local0, Zero))) {
1705 Stall (0x64)
1706 Decrement (Local0)
1707 }
1708
1709 Return (Local0)
1710 }
1711
1712 Method (SWTC, 1, NotSerialized) {
1713 Store (Arg0, Local0)
1714 Store (0x07, Local2)
1715 Store (One, Local1)
1716 While (LEqual (Local1, One)) {
1717 Store (And (HSTS, 0x1E), Local3)
1718 If (LNotEqual (Local3, Zero)) { /* read sucess */
1719 If (LEqual (Local3, 0x02)) {
1720 Store (Zero, Local2)
1721 }
1722
1723 Store (Zero, Local1)
1724 }
1725 Else {
1726 If (LLess (Local0, 0x0A)) { /* read failure */
1727 Store (0x10, Local2)
1728 Store (Zero, Local1)
1729 }
1730 Else {
1731 Sleep (0x0A) /* 10 ms, try again */
1732 Subtract (Local0, 0x0A, Local0)
1733 }
1734 }
1735 }
1736
1737 Return (Local2)
1738 }
1739
1740 Method (SMBR, 3, NotSerialized) {
1741 Store (0x07, Local0)
1742 If (LEqual (Acquire (SBX0, 0xFFFF), Zero)) {
1743 Store (WCLR (), Local0) /* clear SMBUS status register before read data */
1744 If (LEqual (Local0, Zero)) {
1745 Release (SBX0)
1746 Return (0x0)
1747 }
1748
1749 Store (0x1F, HSTS)
1750 Store (Or (ShiftLeft (Arg1, One), One), HADD)
1751 Store (Arg2, HCMD)
1752 If (LEqual (Arg0, 0x07)) {
1753 Store (0x48, HCNT) /* read byte */
1754 }
1755
1756 Store (SWTC (0x03E8), Local1) /* 1000 ms */
1757 If (LEqual (Local1, Zero)) {
1758 If (LEqual (Arg0, 0x07)) {
1759 Store (DAT0, Local0)
1760 }
1761 }
1762 Else {
1763 Store (Local1, Local0)
1764 }
1765
1766 Release (SBX0)
1767 }
1768
1769 /* DBGO("the value of SMBusData0 register ") */
1770 /* DBGO(Arg2) */
1771 /* DBGO(" is ") */
1772 /* DBGO(Local0) */
1773 /* DBGO("\n") */
1774
1775 Return (Local0)
1776 }
1777
1778 /* THERMAL */
1779 Scope(\_TZ) {
1780 Name (KELV, 2732)
1781 Name (THOT, 800)
1782 Name (TCRT, 850)
1783
1784 ThermalZone(TZ00) {
1785 Method(_AC0,0) { /* Active Cooling 0 (0=highest fan speed) */
1786 /* DBGO("\\_TZ\\TZ00\\_AC0\n") */
1787 Return(Add(0, 2730))
1788 }
1789 Method(_AL0,0) { /* Returns package of cooling device to turn on */
1790 /* DBGO("\\_TZ\\TZ00\\_AL0\n") */
1791 Return(Package() {\_TZ.TZ00.FAN0})
1792 }
1793 Device (FAN0) {
1794 Name(_HID, EISAID("PNP0C0B"))
1795 Name(_PR0, Package() {PFN0})
1796 }
1797
1798 PowerResource(PFN0,0,0) {
1799 Method(_STA) {
1800 Store(0xF,Local0)
1801 Return(Local0)
1802 }
1803 Method(_ON) {
1804 /* DBGO("\\_TZ\\TZ00\\FAN0 _ON\n") */
1805 }
1806 Method(_OFF) {
1807 /* DBGO("\\_TZ\\TZ00\\FAN0 _OFF\n") */
1808 }
1809 }
1810
1811 Method(_HOT,0) { /* return hot temp in tenths degree Kelvin */
1812 /* DBGO("\\_TZ\\TZ00\\_HOT\n") */
1813 Return (Add (THOT, KELV))
1814 }
1815 Method(_CRT,0) { /* return critical temp in tenths degree Kelvin */
1816 /* DBGO("\\_TZ\\TZ00\\_CRT\n") */
1817 Return (Add (TCRT, KELV))
1818 }
1819 Method(_TMP,0) { /* return current temp of this zone */
1820 Store (SMBR (0x07, 0x4C,, 0x00), Local0)
1821 If (LGreater (Local0, 0x10)) {
1822 Store (Local0, Local1)
1823 }
1824 Else {
1825 Add (Local0, THOT, Local0)
1826 Return (Add (400, KELV))
1827 }
1828
1829 Store (SMBR (0x07, 0x4C, 0x01), Local0)
1830 /* only the two MSBs in the external temperature low byte are used, resolution 0.25. We ignore it */
1831 /* Store (SMBR (0x07, 0x4C, 0x10), Local2) */
1832 If (LGreater (Local0, 0x10)) {
1833 If (LGreater (Local0, Local1)) {
1834 Store (Local0, Local1)
1835 }
1836
1837 Multiply (Local1, 10, Local1)
1838 Return (Add (Local1, KELV))
1839 }
1840 Else {
1841 Add (Local0, THOT, Local0)
1842 Return (Add (400 , KELV))
1843 }
1844 } /* end of _TMP */
1845 } /* end of TZ00 */
1846 }
1847#endif
1848}
1849/* End of ASL file */