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