1/*++ 2 3Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved 4 5 SPDX-License-Identifier: BSD-2-Clause-Patent 6 7 8 9Module Name: 10 11 INTELGFX.ASL 12 13Abstract: 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 26Method(_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 43Method(_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 192Device(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 253Device(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 307Device(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 366Device(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 427Device(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 487Device(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 547Device(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 607Device(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 667Device(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 749Method(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 789Method(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 832Method(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// 879include("IgdOpRn.ASL") 880