]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELGFX.ASL
a2ba3985681032d8e19a2f7db25fee3c28bd810b
[mirror_edk2.git] / Vlv2DeviceRefCodePkg / AcpiTablesPCAT / INTELGFX.ASL
1 /*++
2
3 Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7
8
9 Module Name:
10
11 INTELGFX.ASL
12
13 Abstract:
14
15 IGD OpRegion/Software ACPI Reference Code for the Baytrail Family.
16
17 --*/
18
19 // Enable/Disable Output Switching. In WIN2K/WINXP, _DOS = 0 will
20 // get called during initialization to prepare for an ACPI Display
21 // Switch Event. During an ACPI Display Switch, the OS will call
22 // _DOS = 2 immediately after a Notify=0x80 to temporarily disable
23 // all Display Switching. After ACPI Display Switching is complete,
24 // the OS will call _DOS = 0 to re-enable ACPI Display Switching.
25
26 Method(_DOS,1)
27 {
28 // Store Display Switching and LCD brightness BIOS control bit
29 Store(And(Arg0,7),DSEN)
30 }
31
32 // Enumerate the Display Environment. This method will return
33 // valid addresses for all display device encoders present in the
34 // system. The Miniport Driver will reject the addresses for every
35 // encoder that does not have an attached display device. After
36 // enumeration is complete, the OS will call the _DGS methods
37 // during a display switch only for the addresses accepted by the
38 // Miniport Driver. For hot-insertion and removal of display
39 // devices, a re-enumeration notification will be required so the
40 // address of the newly present display device will be accepted by
41 // the Miniport Driver.
42
43 Method(_DOD, 0, Serialized)
44 {
45 Store(0, NDID)
46 If(LNotEqual(DIDL, Zero))
47 {
48 Store(SDDL(DIDL),DID1)
49 }
50 If(LNotEqual(DDL2, Zero))
51 {
52 Store(SDDL(DDL2),DID2)
53 }
54 If(LNotEqual(DDL3, Zero))
55 {
56 Store(SDDL(DDL3),DID3)
57 }
58 If(LNotEqual(DDL4, Zero))
59 {
60 Store(SDDL(DDL4),DID4)
61 }
62 If(LNotEqual(DDL5, Zero))
63 {
64 Store(SDDL(DDL5),DID5)
65 }
66
67 // TODO - This level of flexibility is not needed for a true
68 // OEM design. Simply determine the greatest number of
69 // encoders the platform will suppport then remove all
70 // return packages beyond that value. Note that for
71 // current silicon, the maximum number of encoders
72 // possible is 5.
73
74 If(LEqual(NDID,1))
75 {
76 If (LNOTEqual (ISPD, 0))
77 {
78 Name(TMP0,Package() {0xFFFFFFFF,0xFFFFFFFF})
79 Store(Or(0x10000,DID1),Index(TMP0,0))
80 //Add ISP device to GFX0
81 Store(0x00020F38, Index(TMP0,1))
82 Return(TMP0)
83 } Else
84 {
85 Name(TMP1,Package() {0xFFFFFFFF})
86 Store(Or(0x10000,DID1),Index(TMP1,0))
87 Return(TMP1)
88 }
89 }
90
91 If(LEqual(NDID,2))
92 {
93 If (LNOTEqual (ISPD, 0))
94 {
95 Name(TMP2,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
96 Store(Or(0x10000,DID1),Index(TMP2,0))
97 Store(Or(0x10000,DID2),Index(TMP2,1))
98 //Add ISP device to GFX0
99 Store(0x00020F38, Index(TMP2,2))
100 Return(TMP2)
101 } Else
102 {
103 Name(TMP3,Package() {0xFFFFFFFF, 0xFFFFFFFF})
104 Store(Or(0x10000,DID1),Index(TMP3,0))
105 Store(Or(0x10000,DID2),Index(TMP3,1))
106 Return(TMP3)
107 }
108 }
109
110 If(LEqual(NDID,3))
111 {
112 If (LNOTEqual (ISPD, 0))
113 {
114 Name(TMP4,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF})
115 Store(Or(0x10000,DID1),Index(TMP4,0))
116 Store(Or(0x10000,DID2),Index(TMP4,1))
117 Store(Or(0x10000,DID3),Index(TMP4,2))
118 //Add ISP device to GFX0
119 Store(0x00020F38, Index(TMP4,3))
120 Return(TMP4)
121 } Else
122 {
123 Name(TMP5,Package() {0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF})
124 Store(Or(0x10000,DID1),Index(TMP5,0))
125 Store(Or(0x10000,DID2),Index(TMP5,1))
126 Store(Or(0x10000,DID3),Index(TMP5,2))
127 Return(TMP5)
128 }
129 }
130
131 If(LEqual(NDID,4))
132 {
133 If (LNOTEqual (ISPD, 0))
134 {
135 Name(TMP6,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
136 Store(Or(0x10000,DID1),Index(TMP6,0))
137 Store(Or(0x10000,DID2),Index(TMP6,1))
138 Store(Or(0x10000,DID3),Index(TMP6,2))
139 Store(Or(0x10000,DID4),Index(TMP6,3))
140 //Add ISP device to GFX0
141 Store(0x00020F38, Index(TMP6,4))
142 Return(TMP6)
143 } Else
144 {
145 Name(TMP7,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
146 Store(Or(0x10000,DID1),Index(TMP7,0))
147 Store(Or(0x10000,DID2),Index(TMP7,1))
148 Store(Or(0x10000,DID3),Index(TMP7,2))
149 Store(Or(0x10000,DID4),Index(TMP7,3))
150 Return(TMP7)
151 }
152 }
153
154 If(LGreater(NDID,4))
155 {
156 If (LNOTEqual (ISPD, 0))
157 {
158 Name(TMP8,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
159 Store(Or(0x10000,DID1),Index(TMP8,0))
160 Store(Or(0x10000,DID2),Index(TMP8,1))
161 Store(Or(0x10000,DID3),Index(TMP8,2))
162 Store(Or(0x10000,DID4),Index(TMP8,3))
163 Store(Or(0x10000,DID5),Index(TMP8,4))
164 //Add ISP device to GFX0
165 Store(0x00020F38, Index(TMP8,5))
166 Return(TMP8)
167 } Else
168 {
169 Name(TMP9,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
170 Store(Or(0x10000,DID1),Index(TMP9,0))
171 Store(Or(0x10000,DID2),Index(TMP9,1))
172 Store(Or(0x10000,DID3),Index(TMP9,2))
173 Store(Or(0x10000,DID4),Index(TMP9,3))
174 Store(Or(0x10000,DID5),Index(TMP9,4))
175 Return(TMP9)
176 }
177 }
178
179 // If nothing else, return Unknown LFP.
180 // (Prevents compiler warning.)
181
182 //Add ISP device to GFX0
183 If (LNOTEqual (ISPD, 0))
184 {
185 Return(Package() {0x00000400, 0x00020F38})
186 } Else
187 {
188 Return(Package() {0x00000400})
189 }
190 }
191
192 Device(DD01)
193 {
194
195 // Return Unique ID.
196
197 Method(_ADR,0,Serialized)
198 {
199 If(LEqual(And(0x0F00,DID1),0x400))
200 {
201 Store(0x1, EDPV)
202 Store(DID1, DIDX)
203 Return(1)
204 }
205 If(LEqual(DID1,0))
206 {
207 Return(1)
208 }
209 Else
210 {
211 Return(And(0xFFFF,DID1))
212 }
213 }
214
215 // Return the Current Status.
216
217 Method(_DCS,0)
218 {
219 Return(CDDS(DID1))
220 }
221
222 // Query Graphics State (active or inactive).
223
224 Method(_DGS,0)
225 {
226 Return(NDDS(DID1))
227 }
228
229 // Device Set State.
230
231 // _DSS Table:
232 //
233 // BIT31 BIT30 Execution
234 // 0 0 Don't implement.
235 // 0 1 Cache change. Nothing to Implement.
236 // 1 0 Don't Implement.
237 // 1 1 Display Switch Complete. Implement.
238
239 Method(_DSS,1)
240 {
241 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
242 {
243
244 // State change was performed by the
245 // Video Drivers. Simply update the
246 // New State.
247
248 Store(NSTE,CSTE)
249 }
250 }
251 }
252
253 Device(DD02)
254 {
255
256 // Return Unique ID.
257
258 Method(_ADR,0,Serialized)
259 {
260 If(LEqual(And(0x0F00,DID2),0x400))
261 {
262 Store(0x2, EDPV)
263 Store(DID2, DIDX)
264 Return(2)
265 }
266 If(LEqual(DID2,0))
267 {
268 Return(2)
269 }
270 Else
271 {
272 Return(And(0xFFFF,DID2))
273 }
274 }
275
276 // Return the Current Status.
277
278 Method(_DCS,0)
279 {
280 Return(CDDS(DID2))
281 }
282
283 // Query Graphics State (active or inactive).
284
285 Method(_DGS,0)
286 {
287 // Return the Next State.
288 Return(NDDS(DID2))
289 }
290
291 // Device Set State. (See table above.)
292
293 Method(_DSS,1)
294 {
295 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
296 {
297
298 // State change was performed by the
299 // Video Drivers. Simply update the
300 // New State.
301
302 Store(NSTE,CSTE)
303 }
304 }
305 }
306
307 Device(DD03)
308 {
309
310 // Return Unique ID.
311
312 Method(_ADR,0,Serialized)
313 {
314 If(LEqual(And(0x0F00,DID3),0x400))
315 {
316 Store(0x3, EDPV)
317 Store(DID3, DIDX)
318 Return(3)
319 }
320 If(LEqual(DID3,0))
321 {
322 Return(3)
323 }
324 Else
325 {
326 Return(And(0xFFFF,DID3))
327 }
328 }
329
330 // Return the Current Status.
331
332 Method(_DCS,0)
333 {
334 If(LEqual(DID3,0))
335 {
336 Return(0x0B)
337 }
338 Else
339 {
340 Return(CDDS(DID3))
341 }
342 }
343
344 // Query Graphics State (active or inactive).
345
346 Method(_DGS,0)
347 {
348 Return(NDDS(DID3))
349 }
350
351 // Device Set State. (See table above.)
352
353 Method(_DSS,1)
354 {
355 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
356 {
357 // State change was performed by the
358 // Video Drivers. Simply update the
359 // New State.
360
361 Store(NSTE,CSTE)
362 }
363 }
364 }
365
366 Device(DD04)
367 {
368
369 // Return Unique ID.
370
371 Method(_ADR,0,Serialized)
372 {
373 If(LEqual(And(0x0F00,DID4),0x400))
374 {
375 Store(0x4, EDPV)
376 Store(DID4, DIDX)
377 Return(4)
378 }
379 If(LEqual(DID4,0))
380 {
381 Return(4)
382 }
383 Else
384 {
385 Return(And(0xFFFF,DID4))
386 }
387 }
388
389 // Return the Current Status.
390
391 Method(_DCS,0)
392 {
393 If(LEqual(DID4,0))
394 {
395 Return(0x0B)
396 }
397 Else
398 {
399 Return(CDDS(DID4))
400 }
401 }
402
403 // Query Graphics State (active or inactive).
404
405 Method(_DGS,0)
406 {
407 Return(NDDS(DID4))
408 }
409
410 // Device Set State. (See table above.)
411
412 Method(_DSS,1)
413 {
414 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
415 {
416
417 // State change was performed by the
418 // Video Drivers. Simply update the
419 // New State.
420
421 Store(NSTE,CSTE)
422 }
423 }
424 }
425
426
427 Device(DD05)
428 {
429
430 // Return Unique ID.
431
432 Method(_ADR,0,Serialized)
433 {
434 If(LEqual(And(0x0F00,DID5),0x400))
435 {
436 Store(0x5, EDPV)
437 Store(DID5, DIDX)
438 Return(5)
439 }
440 If(LEqual(DID5,0))
441 {
442 Return(5)
443 }
444 Else
445 {
446 Return(And(0xFFFF,DID5))
447 }
448 }
449
450 // Return the Current Status.
451
452 Method(_DCS,0)
453 {
454 If(LEqual(DID5,0))
455 {
456 Return(0x0B)
457 }
458 Else
459 {
460 Return(CDDS(DID5))
461 }
462 }
463
464 // Query Graphics State (active or inactive).
465
466 Method(_DGS,0)
467 {
468 Return(NDDS(DID5))
469 }
470
471 // Device Set State. (See table above.)
472
473 Method(_DSS,1)
474 {
475 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
476 {
477 // State change was performed by the
478 // Video Drivers. Simply update the
479 // New State.
480
481 Store(NSTE,CSTE)
482 }
483 }
484 }
485
486
487 Device(DD06)
488 {
489
490 // Return Unique ID.
491
492 Method(_ADR,0,Serialized)
493 {
494 If(LEqual(And(0x0F00,DID6),0x400))
495 {
496 Store(0x6, EDPV)
497 Store(DID6, DIDX)
498 Return(6)
499 }
500 If(LEqual(DID6,0))
501 {
502 Return(6)
503 }
504 Else
505 {
506 Return(And(0xFFFF,DID6))
507 }
508 }
509
510 // Return the Current Status.
511
512 Method(_DCS,0)
513 {
514 If(LEqual(DID6,0))
515 {
516 Return(0x0B)
517 }
518 Else
519 {
520 Return(CDDS(DID6))
521 }
522 }
523
524 // Query Graphics State (active or inactive).
525
526 Method(_DGS,0)
527 {
528 Return(NDDS(DID6))
529 }
530
531 // Device Set State. (See table above.)
532
533 Method(_DSS,1)
534 {
535 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
536 {
537 // State change was performed by the
538 // Video Drivers. Simply update the
539 // New State.
540
541 Store(NSTE,CSTE)
542 }
543 }
544 }
545
546
547 Device(DD07)
548 {
549
550 // Return Unique ID.
551
552 Method(_ADR,0,Serialized)
553 {
554 If(LEqual(And(0x0F00,DID7),0x400))
555 {
556 Store(0x7, EDPV)
557 Store(DID7, DIDX)
558 Return(7)
559 }
560 If(LEqual(DID7,0))
561 {
562 Return(7)
563 }
564 Else
565 {
566 Return(And(0xFFFF,DID7))
567 }
568 }
569
570 // Return the Current Status.
571
572 Method(_DCS,0)
573 {
574 If(LEqual(DID7,0))
575 {
576 Return(0x0B)
577 }
578 Else
579 {
580 Return(CDDS(DID7))
581 }
582 }
583
584 // Query Graphics State (active or inactive).
585
586 Method(_DGS,0)
587 {
588 Return(NDDS(DID7))
589 }
590
591 // Device Set State. (See table above.)
592
593 Method(_DSS,1)
594 {
595 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
596 {
597 // State change was performed by the
598 // Video Drivers. Simply update the
599 // New State.
600
601 Store(NSTE,CSTE)
602 }
603 }
604 }
605
606
607 Device(DD08)
608 {
609
610 // Return Unique ID.
611
612 Method(_ADR,0,Serialized)
613 {
614 If(LEqual(And(0x0F00,DID8),0x400))
615 {
616 Store(0x8, EDPV)
617 Store(DID8, DIDX)
618 Return(8)
619 }
620 If(LEqual(DID8,0))
621 {
622 Return(8)
623 }
624 Else
625 {
626 Return(And(0xFFFF,DID8))
627 }
628 }
629
630 // Return the Current Status.
631
632 Method(_DCS,0)
633 {
634 If(LEqual(DID8,0))
635 {
636 Return(0x0B)
637 }
638 Else
639 {
640 Return(CDDS(DID8))
641 }
642 }
643
644 // Query Graphics State (active or inactive).
645
646 Method(_DGS,0)
647 {
648 Return(NDDS(DID8))
649 }
650
651 // Device Set State. (See table above.)
652
653 Method(_DSS,1)
654 {
655 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
656 {
657 // State change was performed by the
658 // Video Drivers. Simply update the
659 // New State.
660
661 Store(NSTE,CSTE)
662 }
663 }
664 }
665
666 //device for eDP
667 Device(DD1F)
668 {
669 // Return Unique ID.
670
671 Method(_ADR,0,Serialized)
672 {
673 If(LEqual(EDPV, 0x0))
674 {
675 Return(0x1F)
676 }
677 Else
678 {
679 Return(And(0xFFFF,DIDX))
680 }
681 }
682
683 // Return the Current Status.
684
685 Method(_DCS,0)
686 {
687 If(LEqual(EDPV, 0x0))
688 {
689 Return(0x00)
690 }
691 Else
692 {
693 Return(CDDS(DIDX))
694 }
695 }
696
697 // Query Graphics State (active or inactive).
698
699 Method(_DGS,0)
700 {
701 Return(NDDS(DIDX))
702 }
703
704 // Device Set State. (See table above.)
705
706 Method(_DSS,1)
707 {
708 If(LEqual(And(Arg0,0xC0000000),0xC0000000))
709 {
710 // State change was performed by the
711 // Video Drivers. Simply update the
712 // New State.
713 Store(NSTE,CSTE)
714 }
715 }
716 // Query List of Brightness Control Levels Supported.
717
718 Method(_BCL,0)
719 {
720 // List of supported brightness levels in the following sequence.
721
722 // Level when machine has full power.
723 // Level when machine is on batteries.
724 // Other supported levels.
725 Return(Package() {80, 50, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100})
726 }
727
728 // Set the Brightness Level.
729
730 Method (_BCM,1)
731 {
732 // Set the requested level if it is between 0 and 100%.
733
734 If(LAnd(LGreaterEqual(Arg0,0),LLessEqual(Arg0,100)))
735 {
736 \_SB.PCI0.GFX0.AINT(1, Arg0)
737 Store(Arg0,BRTL) // Store Brightness Level.
738 }
739 }
740
741 // Brightness Query Current level.
742
743 Method (_BQC,0)
744 {
745 Return(BRTL)
746 }
747 }
748
749 Method(SDDL,1)
750 {
751 Increment(NDID)
752 Store(And(Arg0,0xF0F),Local0)
753 Or(0x80000000,Local0, Local1)
754 If(LEqual(DIDL,Local0))
755 {
756 Return(Local1)
757 }
758 If(LEqual(DDL2,Local0))
759 {
760 Return(Local1)
761 }
762 If(LEqual(DDL3,Local0))
763 {
764 Return(Local1)
765 }
766 If(LEqual(DDL4,Local0))
767 {
768 Return(Local1)
769 }
770 If(LEqual(DDL5,Local0))
771 {
772 Return(Local1)
773 }
774 If(LEqual(DDL6,Local0))
775 {
776 Return(Local1)
777 }
778 If(LEqual(DDL7,Local0))
779 {
780 Return(Local1)
781 }
782 If(LEqual(DDL8,Local0))
783 {
784 Return(Local1)
785 }
786 Return(0)
787 }
788
789 Method(CDDS,1)
790 {
791 Store(And(Arg0,0xF0F),Local0)
792
793 If(LEqual(0, Local0))
794 {
795 Return(0x1D)
796 }
797 If(LEqual(CADL, Local0))
798 {
799 Return(0x1F)
800 }
801 If(LEqual(CAL2, Local0))
802 {
803 Return(0x1F)
804 }
805 If(LEqual(CAL3, Local0))
806 {
807 Return(0x1F)
808 }
809 If(LEqual(CAL4, Local0))
810 {
811 Return(0x1F)
812 }
813 If(LEqual(CAL5, Local0))
814 {
815 Return(0x1F)
816 }
817 If(LEqual(CAL6, Local0))
818 {
819 Return(0x1F)
820 }
821 If(LEqual(CAL7, Local0))
822 {
823 Return(0x1F)
824 }
825 If(LEqual(CAL8, Local0))
826 {
827 Return(0x1F)
828 }
829 Return(0x1D)
830 }
831
832 Method(NDDS,1)
833 {
834 Store(And(Arg0,0xF0F),Local0)
835
836 If(LEqual(0, Local0))
837 {
838 Return(0)
839 }
840 If(LEqual(NADL, Local0))
841 {
842 Return(1)
843 }
844 If(LEqual(NDL2, Local0))
845 {
846 Return(1)
847 }
848 If(LEqual(NDL3, Local0))
849 {
850 Return(1)
851 }
852 If(LEqual(NDL4, Local0))
853 {
854 Return(1)
855 }
856 If(LEqual(NDL5, Local0))
857 {
858 Return(1)
859 }
860 If(LEqual(NDL6, Local0))
861 {
862 Return(1)
863 }
864 If(LEqual(NDL7, Local0))
865 {
866 Return(1)
867 }
868 If(LEqual(NDL8, Local0))
869 {
870 Return(1)
871 }
872 Return(0)
873 }
874
875 //
876 // Include IGD OpRegion/Software SCI interrupt handler which is use by
877 // the graphics drivers to request data from system BIOS.
878 //
879 include("IgdOpRn.ASL")