]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/Ssdt/CpuPm.asl
Vlv2DeviceRefCodePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / Vlv2DeviceRefCodePkg / ValleyView2Soc / CPU / PowerManagement / AcpiTables / Ssdt / CpuPm.asl
1 /*-----------------------------------------------------------------------------
2
3
4 Intel Silvermont Processor Power Management BIOS Reference Code
5
6 Copyright (c) 2006 - 2014, Intel Corporation
7
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10
11 Filename: CPUPM.ASL
12
13 Revision: Refer to Readme
14
15 Date: Refer to Readme
16 -------------------------------------------------------------------------------
17
18 This Processor Power Management BIOS Source Code is furnished under license
19 and may only be used or copied in accordance with the terms of the license.
20 The information in this document is furnished for informational use only, is
21 subject to change without notice, and should not be construed as a commitment
22 by Intel Corporation. Intel Corporation assumes no responsibility or liability
23 for any errors or inaccuracies that may appear in this document or any
24 software that may be provided in association with this document.
25
26 Except as permitted by such license, no part of this document may be
27 reproduced, stored in a retrieval system, or transmitted in any form or by
28 any means without the express written consent of Intel Corporation.
29
30 WARNING: You are authorized and licensed to install and use this BIOS code
31 ONLY on an IST PC. This utility may damage any system that does not
32 meet these requirements.
33
34 An IST PC is a computer which
35 (1) Is capable of seamlessly and automatically transitioning among
36 multiple performance states (potentially operating at different
37 efficiency ratings) based upon power source changes, END user
38 preference, processor performance demand, and thermal conditions; and
39 (2) Includes an Intel Pentium II processors, Intel Pentium III
40 processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
41 Processor-M, Intel Pentium M Processor, or any other future Intel
42 processors that incorporates the capability to transition between
43 different performance states by altering some, or any combination of,
44 the following processor attributes: core voltage, core frequency, bus
45 frequency, number of processor cores available, or any other attribute
46 that changes the efficiency (instructions/unit time-power) at which the
47 processor operates.
48 -------------------------------------------------------------------------------
49
50 NOTES:
51 (1) <TODO> - Except for the SSDT package, the objects in this ASL code
52 may be moved to the DSDT. It is kept separate in this reference package
53 for ease of distribution only.
54 ------------------------------------------------------------------------------*/
55
56 DefinitionBlock (
57 "CPUPM.aml",
58 "SSDT",
59 0x01,
60 "PmRef",
61 "CpuPm",
62 0x3000
63 )
64 {
65 External(\_PR.CPU0, DeviceObj)
66 External(\_PR.CPU1, DeviceObj)
67 External(\_PR.CPU2, DeviceObj)
68 External(\_PR.CPU3, DeviceObj)
69 External(SMIF)
70
71 Scope(\)
72 {
73
74 // Package of pointers to SSDT's
75 //
76 // First column is SSDT name, used for debug only.
77 // (First column must be EXACTLY eight characters.)
78 // Second column is physical address.
79 // Third column is table length.
80 //
81 // IF modifying this file, see warnings listed in ppminit.asm.
82 //
83 Name(SSDT,Package()
84 {
85 "CPU0IST ", 0x80000000, 0x80000000,
86 "APIST ", 0x80000000, 0x80000000,
87 "CPU0CST ", 0x80000000, 0x80000000,
88 "APCST ", 0x80000000, 0x80000000
89 })
90
91 //
92 // Note: See PpmBiosInit in PPMINIT.ASM for a definition of
93 // the PpmFlags mirrored in CFGD.
94 //
95 Name(CFGD, 0x80000000)
96
97 Name(\PDC0,0x80000000) // CPU0 _PDC Flags.
98 Name(\PDC1,0x80000000) // CPU1 _PDC Flags.
99 Name(\PDC2,0x80000000) // CPU2 _PDC Flags.
100 Name(\PDC3,0x80000000) // CPU3 _PDC Flags.
101 Name(\SDTL,0x00) // Loaded SSDT Flags.
102 }
103
104 Scope(\_PR.CPU0)
105 {
106 //
107 // Define handles for opregions (used by load.)
108 //
109 Name(HI0,0) // Handle to CPU0IST
110 Name(HC0,0) // Handle to CPU0CST
111
112 Method(_PDC,1)
113 {
114 //
115 // Check and extract the _PDC information.
116 //
117 Store(CPDC(Arg0), Local0)
118 //
119 // Save the capability information and load tables as needed.
120 //
121 GCAP(Local0)
122 //
123 // Return status.
124 //
125 //Return (Local0)
126 }
127
128 Method(_OSC, 4)
129 {
130 //
131 // Check and extract the _OSC information.
132 //
133 Store(COSC(Arg0, Arg1, Arg2, Arg3), Local0)
134 //
135 // Save the capability information and load tables as needed.
136 //
137 GCAP(Local0)
138 //
139 // Return status.
140 //
141 Return (Local0)
142 }
143
144 //
145 // Implement a generic Method to check _PDC information which may be called
146 // by any of the processor scopes. (The use of _PDC is deprecated in ACPI 3.
147 // in favor of _OSC. However, for backwards compatibility, _PDC may be
148 // implemented using _OSC as follows:)
149 //
150 Method(CPDC,1)
151 {
152 CreateDwordField (Arg0, 0, REVS)
153 CreateDwordField (Arg0, 4, SIZE)
154
155 //
156 // Local0 = Number of bytes for Arg0
157 //
158 Store (SizeOf (Arg0), Local0)
159
160 //
161 // Local1 = Number of Capabilities bytes in Arg0
162 //
163 Store (Subtract (Local0, 8), Local1)
164
165 //
166 // TEMP = Temporary field holding Capability DWORDs
167 //
168 CreateField (Arg0, 64, Multiply (Local1, 8), TEMP)
169
170 //
171 // Create the Status (STAT) buffer with the first DWORD = 0
172 // This is required as per ACPI 3.0 Spec which says the
173 // first DWORD is used to return errors defined by _OSC.
174 //
175 Name (STS0, Buffer () {0x00, 0x00, 0x00, 0x00})
176
177 //
178 // Concatenate the _PDC capabilities bytes to the STS0 Buffer
179 // and store them in a local variable for calling OSC
180 //
181 Concatenate (STS0, TEMP, Local2)
182
183 Return(COSC (ToUUID("4077A616-290C-47BE-9EBD-D87058713953"), REVS, SIZE, Local2))
184 }
185
186 //
187 // Implement a generic Method to check _OSC information which may be called
188 // by any of the processor scopes.
189 //
190 Method(COSC, 4)
191 {
192 //
193 // Point to Status DWORD in the Arg3 buffer (STATUS)
194 //
195 CreateDWordField(Arg3, 0, STS0)
196 //
197 // Point to Caps DWORDs of the Arg3 buffer (CAPABILITIES)
198 //
199 CreateDwordField(Arg3, 4, CAP0)
200
201 //
202 // _OSC needs to validate the UUID and Revision.
203 //
204 // IF Unrecognized UUID
205 // Return Unrecognized UUID _OSC Failure
206 // IF Unsupported Revision
207 // Return Unsupported Revision _OSC Failure
208 //
209 // STS0[0] = Reserved
210 // STS0[1] = _OSC Failure
211 // STS0[2] = Unrecognized UUID
212 // STS0[3] = Unsupported Revision
213 // STS0[4] = Capabilities masked
214 //
215 // Note: The comparison method used is necessary due to
216 // limitations of certain OSes which cannot perform direct
217 // buffer comparisons.
218 //
219 // Create a set of "Input" UUID fields.
220 //
221 CreateDwordField(Arg0, 0x0, IID0)
222 CreateDwordField(Arg0, 0x4, IID1)
223 CreateDwordField(Arg0, 0x8, IID2)
224 CreateDwordField(Arg0, 0xC, IID3)
225 //
226 // Create a set of "Expected" UUID fields.
227 //
228 Name(UID0, ToUUID("4077A616-290C-47BE-9EBD-D87058713953"))
229 CreateDwordField(UID0, 0x0, EID0)
230 CreateDwordField(UID0, 0x4, EID1)
231 CreateDwordField(UID0, 0x8, EID2)
232 CreateDwordField(UID0, 0xC, EID3)
233 //
234 // Verify the input UUID matches the expected UUID.
235 //
236 If(LNot(LAnd(LAnd(LEqual(IID0, EID0),LEqual(IID1, EID1)),LAnd(LEqual(IID2, EID2),LEqual(IID3, EID3)))))
237 {
238 //
239 // Return Unrecognized UUID _OSC Failure
240 //
241 Store (0x6, STS0)
242 Return (Arg3)
243 }
244
245 If(LNot(LEqual(Arg1,1)))
246 {
247 //
248 // Return Unsupported Revision _OSC Failure
249 //
250 Store (0xA, STS0)
251 Return (Arg3)
252 }
253
254 Return (Arg3)
255 }
256
257 //
258 // Get the capability information and load appropriate tables as needed.
259 //
260 Method(GCAP, 1)
261 {
262
263 // Point to Status DWORD in the Arg0 buffer (STATUS)
264 CreateDWordField(Arg0, 0, STS0)
265
266 // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
267 CreateDwordField(Arg0, 4, CAP0)
268
269 //
270 // If the UUID was unrecognized or the _OSC revision was unsupported,
271 // return without updating capabilities.
272 //
273 If(LOr(LEqual(STS0,0x6),LEqual(STS0,0xA)))
274 {
275 Return()
276 }
277
278 //
279 // Check if this is a query (BIT0 of Status = 1).
280 // If so, mask off the bits we support and return.
281 //
282 if (And(STS0, 1))
283 {
284 And(CAP0, 0xBFF, CAP0)
285 Return()
286 }
287
288 //
289 // Store result of PDC. (We clear out the MSB, which was just
290 // used as a placeholder for the compiler; and then "OR" the
291 // value in case we get multiple calls, each of which only
292 // reports partial support.)
293 //
294 Or(And(PDC0, 0x7FFFFFFF), CAP0, PDC0)
295
296 //
297 // Check IF the IST SSDTs should be loaded.
298 //
299 // CFGD[0] = GV3 Capable/Enabled
300 //
301 If(And(CFGD,0x01))
302 {
303 //
304 // Load the IST SSDTs if:
305 // (1) CMP capable and enabled.
306 // (2) Driver supports P-States in MP configurations
307 // (3) Driver supports direct HW P-State control
308 // (4) SSDT is not already loaded
309 //
310 // CFGD[24] = Two or more cores enabled
311 // PDCx[3] = OS supports C1 and P-states in MP systems
312 // PDCx[0] = OS supports direct access of the perf MSR
313 // SDTL[0] = CPU0 IST SSDT Loaded
314 //
315 If(LAnd(LAnd(And(CFGD,0x01000000),LEqual(And(PDC0, 0x0009), 0x0009)),LNot(And(SDTL,0x01))))
316 {
317 //
318 // Flag the IST SSDT as loaded for CPU0
319 //
320 Or(SDTL, 0x01, SDTL)
321
322 OperationRegion(IST0,SystemMemory,DeRefOf(Index(SSDT,1)),DeRefOf(Index(SSDT,2)))
323 Load(IST0, HI0) // Dynamically load the CPU0IST SSDT
324 }
325 }
326
327 //
328 // Check IF the CST SSDTs should be loaded.
329 //
330 // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
331 //
332 If(And(CFGD,0x82))
333 {
334 //
335 // Load the CST SSDTs if:
336 // (1) CMP capable/enabled
337 // (2) Driver supports multi-processor configurations
338 // (3) CPU0 CST ISDT is not already loaded
339 //
340 // CFGD[24] = Two or more cores enabled
341 // PDCx[3] = OS supports C1 and P-states in MP systems
342 // PDCx[4] = OS supports ind. C2/C3 in MP systems
343 // SDTL[1] = CPU0 CST SSDT Loaded
344 //
345 If(LAnd(LAnd(And(CFGD,0x01000000),And(PDC0,0x0018)),LNot(And(SDTL,0x02))))
346 {
347 //
348 // Flag the CST SSDT as loaded for CPU0
349 //
350 Or(SDTL, 0x02, SDTL)
351
352 OperationRegion(CST0,SystemMemory,DeRefOf(Index(SSDT,7)),DeRefOf(Index(SSDT,8)))
353 Load(CST0, HC0) // Dynamically load the CPU0CST SSDT
354 }
355 }
356
357 Return ()
358 }
359 }
360
361
362 Scope(\_PR.CPU1)
363 {
364 //
365 // Define handles for opregions (used by load.)
366 //
367 Name(HI1,0) // Handle to APIST
368 Name(HC1,0) // Handle to APCST
369
370 Method(_PDC,1)
371 {
372 //
373 // Refer to \_PR.CPU0._PDC for description.
374 //
375 Store(\_PR.CPU0.CPDC(Arg0), Local0)
376 GCAP(Local0)
377 //Return (Local0)
378 }
379
380 Method(_OSC, 4)
381 {
382 //
383 // Refer to \_PR.CPU0._OSC for description.
384 //
385 Store(\_PR.CPU0.COSC(Arg0, Arg1, Arg2, Arg3), Local0)
386 GCAP(Local0)
387 Return (Local0)
388 }
389
390 //
391 // Get the capability information and load appropriate tables as needed.
392 //
393 Method(GCAP, 1)
394 {
395 //
396 // Point to Status DWORD in the Arg0 buffer (STATUS)
397 //
398 CreateDWordField(Arg0, 0, STS1)
399 //
400 // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
401 //
402 CreateDwordField(Arg0, 4, CAP1)
403 //
404 // If the UUID was unrecognized or the _OSC revision was unsupported,
405 // return without updating capabilities.
406 //
407 If(LOr(LEqual(STS1,0x6),LEqual(STS1,0xA)))
408 {
409 Return()
410 }
411
412 //
413 // Check if this is a query (BIT0 of Status = 1).
414 // If so, mask off the bits we support and return.
415 //
416 if (And(STS1, 1))
417 {
418 And(CAP1, 0xBFF, CAP1)
419 Return()
420 }
421
422 //
423 // Store result of PDC. (We clear out the MSB, which was just
424 // used as a placeholder for the compiler; and then "OR" the
425 // value in case we get multiple calls, each of which only
426 // reports partial support.)
427 //
428 Or(And(PDC1, 0x7FFFFFFF), CAP1, PDC1)
429
430 //
431 // Attempt to dynamically load the IST SSDTs if:
432 // (1) Driver supports P-States in MP configurations
433 // (2) Driver supports direct HW P-State control
434 //
435 // PDCx[3] = OS supports C1 and P-states in MP systems
436 // PDCx[0] = OS supports direct access of the perf MSR
437 //
438 If(LEqual(And(PDC0, 0x0009), 0x0009))
439 {
440 APPT()
441 }
442
443 //
444 // Load the CST SSDTs if:
445 // (1) Driver supports multi-processor configurations
446 //
447 // PDCx[3] = OS supports C1 and P-states in MP systems
448 // PDCx[4] = OS supports ind. C2/C3 in MP systems
449 //
450 If(And(PDC0,0x0018))
451 {
452 APCT()
453 }
454
455 Return()
456 }
457
458 //
459 // Dynamically load the CST SSDTs if:
460 // (1) C-States are enabled
461 // (2) SSDT is not already loaded
462 //
463 // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
464 // SDTL[5] = AP CST SSDT Loaded
465 //
466 Method(APCT,0)
467 {
468 If(LAnd(And(CFGD,0x82),LNot(And(SDTL,0x20))))
469 {
470 //
471 // Flag the CST SSDT as loaded for the AP's
472 //
473 Or(SDTL, 0x20, SDTL)
474 //
475 // Dynamically load the APCST SSDT
476 //
477 OperationRegion(CST1,SystemMemory,DeRefOf(Index(SSDT,10)),DeRefOf(Index(SSDT,11)))
478 Load(CST1, HC1)
479 }
480 }
481
482 //
483 // Dynamically load the IST SSDTs if:
484 // (1) If GV3 capable and enabled
485 // (2) SSDT is not already loaded
486 //
487 // CFGD[0] = GV3 Capable/Enabled
488 // SDTL[4] = AP IST SSDT Loaded
489 //
490 Method(APPT,0)
491 {
492 If(LAnd(And(CFGD,0x01),LNot(And(SDTL,0x10))))
493 {
494 //
495 // Flag the IST SSDT as loaded for CPU0
496 //
497 Or(SDTL, 0x10, SDTL)
498
499 OperationRegion(IST1,SystemMemory,DeRefOf(Index(SSDT,4)),DeRefOf(Index(SSDT,5)))
500 Load(IST1, HI1) // Dynamically load the CPU1IST SSDT
501 }
502 }
503 } // End CPU1
504
505 Scope(\_PR.CPU2)
506 {
507 //
508 // Define handles for opregions (used by load.)
509 //
510 Name(HI1,0) // Handle to APIST
511 Name(HC1,0) // Handle to APCST
512
513 Method(_PDC,1)
514 {
515 //
516 // Refer to \_PR.CPU0._PDC for description.
517 //
518 Store(\_PR.CPU0.CPDC(Arg0), Local0)
519 GCAP(Local0)
520 //Return (Local0)
521 }
522
523 Method(_OSC, 4)
524 {
525 //
526 // Refer to \_PR.CPU0._OSC for description.
527 //
528 Store(\_PR.CPU0.COSC(Arg0, Arg1, Arg2, Arg3), Local0)
529 GCAP(Local0)
530 Return (Local0)
531 }
532
533 //
534 // Get the capability information and load appropriate tables as needed.
535 //
536 Method(GCAP, 1)
537 {
538 //
539 // Point to Status DWORD in the Arg0 buffer (STATUS)
540 //
541 CreateDWordField(Arg0, 0, STS1)
542 //
543 // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
544 //
545 CreateDwordField(Arg0, 4, CAP1)
546 //
547 // If the UUID was unrecognized or the _OSC revision was unsupported,
548 // return without updating capabilities.
549 //
550 If(LOr(LEqual(STS1,0x6),LEqual(STS1,0xA)))
551 {
552 Return()
553 }
554
555 //
556 // Check if this is a query (BIT0 of Status = 1).
557 // If so, mask off the bits we support and return.
558 //
559 if (And(STS1, 1))
560 {
561 And(CAP1, 0xBFF, CAP1)
562 Return()
563 }
564
565 //
566 // Store result of PDC. (We clear out the MSB, which was just
567 // used as a placeholder for the compiler; and then "OR" the
568 // value in case we get multiple calls, each of which only
569 // reports partial support.)
570 //
571 Or(And(PDC1, 0x7FFFFFFF), CAP1, PDC1)
572
573 //
574 // Attempt to dynamically load the IST SSDTs if:
575 // (1) Driver supports P-States in MP configurations
576 // (2) Driver supports direct HW P-State control
577 //
578 // PDCx[3] = OS supports C1 and P-states in MP systems
579 // PDCx[0] = OS supports direct access of the perf MSR
580 //
581 If(LEqual(And(PDC0, 0x0009), 0x0009))
582 {
583 APPT()
584 }
585
586 //
587 // Load the CST SSDTs if:
588 // (1) Driver supports multi-processor configurations
589 //
590 // PDCx[3] = OS supports C1 and P-states in MP systems
591 // PDCx[4] = OS supports ind. C2/C3 in MP systems
592 //
593 If(And(PDC0,0x0018))
594 {
595 APCT()
596 }
597
598 Return()
599 }
600
601 //
602 // Dynamically load the CST SSDTs if:
603 // (1) C-States are enabled
604 // (2) SSDT is not already loaded
605 //
606 // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
607 // SDTL[5] = AP CST SSDT Loaded
608 //
609 Method(APCT,0)
610 {
611 If(LAnd(And(CFGD,0x82),LNot(And(SDTL,0x20))))
612 {
613 //
614 // Flag the CST SSDT as loaded for the AP's
615 //
616 Or(SDTL, 0x20, SDTL)
617 //
618 // Dynamically load the APCST SSDT
619 //
620 OperationRegion(CST1,SystemMemory,DeRefOf(Index(SSDT,10)),DeRefOf(Index(SSDT,11)))
621 Load(CST1, HC1)
622 }
623 }
624
625 //
626 // Dynamically load the IST SSDTs if:
627 // (1) If GV3 capable and enabled
628 // (2) SSDT is not already loaded
629 //
630 // CFGD[0] = GV3 Capable/Enabled
631 // SDTL[4] = AP IST SSDT Loaded
632 //
633 Method(APPT,0)
634 {
635 If(LAnd(And(CFGD,0x01),LNot(And(SDTL,0x10))))
636 {
637 //
638 // Flag the IST SSDT as loaded for CPU0
639 //
640 Or(SDTL, 0x10, SDTL)
641
642 OperationRegion(IST1,SystemMemory,DeRefOf(Index(SSDT,4)),DeRefOf(Index(SSDT,5)))
643 Load(IST1, HI1) // Dynamically load the CPU1IST SSDT
644 }
645 }
646 } // End CPU1
647
648 Scope(\_PR.CPU3)
649 {
650 //
651 // Define handles for opregions (used by load.)
652 //
653 Name(HI1,0) // Handle to APIST
654 Name(HC1,0) // Handle to APCST
655
656 Method(_PDC,1)
657 {
658 //
659 // Refer to \_PR.CPU0._PDC for description.
660 //
661 Store(\_PR.CPU0.CPDC(Arg0), Local0)
662 GCAP(Local0)
663 //Return (Local0)
664 }
665
666 Method(_OSC, 4)
667 {
668 //
669 // Refer to \_PR.CPU0._OSC for description.
670 //
671 Store(\_PR.CPU0.COSC(Arg0, Arg1, Arg2, Arg3), Local0)
672 GCAP(Local0)
673 Return (Local0)
674 }
675
676 //
677 // Get the capability information and load appropriate tables as needed.
678 //
679 Method(GCAP, 1)
680 {
681 //
682 // Point to Status DWORD in the Arg0 buffer (STATUS)
683 //
684 CreateDWordField(Arg0, 0, STS1)
685 //
686 // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
687 //
688 CreateDwordField(Arg0, 4, CAP1)
689 //
690 // If the UUID was unrecognized or the _OSC revision was unsupported,
691 // return without updating capabilities.
692 //
693 If(LOr(LEqual(STS1,0x6),LEqual(STS1,0xA)))
694 {
695 Return()
696 }
697
698 //
699 // Check if this is a query (BIT0 of Status = 1).
700 // If so, mask off the bits we support and return.
701 //
702 if (And(STS1, 1))
703 {
704 And(CAP1, 0xBFF, CAP1)
705 Return()
706 }
707
708 //
709 // Store result of PDC. (We clear out the MSB, which was just
710 // used as a placeholder for the compiler; and then "OR" the
711 // value in case we get multiple calls, each of which only
712 // reports partial support.)
713 //
714 Or(And(PDC1, 0x7FFFFFFF), CAP1, PDC1)
715
716 //
717 // Attempt to dynamically load the IST SSDTs if:
718 // (1) Driver supports P-States in MP configurations
719 // (2) Driver supports direct HW P-State control
720 //
721 // PDCx[3] = OS supports C1 and P-states in MP systems
722 // PDCx[0] = OS supports direct access of the perf MSR
723 //
724 If(LEqual(And(PDC0, 0x0009), 0x0009))
725 {
726 APPT()
727 }
728
729 //
730 // Load the CST SSDTs if:
731 // (1) Driver supports multi-processor configurations
732 //
733 // PDCx[3] = OS supports C1 and P-states in MP systems
734 // PDCx[4] = OS supports ind. C2/C3 in MP systems
735 //
736 If(And(PDC0,0x0018))
737 {
738 APCT()
739 }
740
741 Return()
742 }
743
744 //
745 // Dynamically load the CST SSDTs if:
746 // (1) C-States are enabled
747 // (2) SSDT is not already loaded
748 //
749 // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
750 // SDTL[5] = AP CST SSDT Loaded
751 //
752 Method(APCT,0)
753 {
754 If(LAnd(And(CFGD,0x82),LNot(And(SDTL,0x20))))
755 {
756 //
757 // Flag the CST SSDT as loaded for the AP's
758 //
759 Or(SDTL, 0x20, SDTL)
760 //
761 // Dynamically load the APCST SSDT
762 //
763 OperationRegion(CST1,SystemMemory,DeRefOf(Index(SSDT,10)),DeRefOf(Index(SSDT,11)))
764 Load(CST1, HC1)
765 }
766 }
767
768 //
769 // Dynamically load the IST SSDTs if:
770 // (1) If GV3 capable and enabled
771 // (2) SSDT is not already loaded
772 //
773 // CFGD[0] = GV3 Capable/Enabled
774 // SDTL[4] = AP IST SSDT Loaded
775 //
776 Method(APPT,0)
777 {
778 If(LAnd(And(CFGD,0x01),LNot(And(SDTL,0x10))))
779 {
780 //
781 // Flag the IST SSDT as loaded for CPU0
782 //
783 Or(SDTL, 0x10, SDTL)
784
785 OperationRegion(IST1,SystemMemory,DeRefOf(Index(SSDT,4)),DeRefOf(Index(SSDT,5)))
786 Load(IST1, HI1) // Dynamically load the CPU1IST SSDT
787 }
788 }
789 } // End CPU3
790 } // End of Definition Block
791
792
793