1 /*++ 2 3 Copyright (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 15 Module Name: 16 17 IgdOpRn.ASL 18 19 Abstract: 20 21 IGD OpRegion/Software SCI Reference Code for the Baytrail Family. 22 This file contains the interrupt handler code for the Integrated 23 Graphics Device (IGD) OpRegion/Software SCI mechanism. 24 25 --*/ 26 27 28 //NOTES: 29 // 30 // (1) The code contained in this file inherits the scope in which it 31 // was included. So BIOS developers must be sure to include this 32 // file in the scope associated with the graphics device 33 // (ex. \_SB.PCI0.GFX0). 34 // (2) Create a _L06 method under the GPE scope to handle the event 35 // generated by the graphics driver. The _L06 method must call 36 // the GSCI method in this file. 37 // (3) The MCHP operation region assumes that _ADR and _BBN names 38 // corresponding to bus 0, device0, function 0 have been declared 39 // under the PCI0 scope. 40 // (4) Before the first execution of the GSCI method, the base address 41 // of the GMCH SCI OpRegion must be programmed where the driver can 42 // access it. A 32bit scratch register at 0xFC in the IGD PCI 43 // configuration space (B0/D2/F0/R0FCh) is used for this purpose. 44 45 // Define an OperationRegion to cover the GMCH PCI configuration space as 46 // described in the IGD OpRegion specificiation. 47 48 // Define an OperationRegion to cover the IGD PCI configuration space as 49 // described in the IGD OpRegion specificiation. 50 51 OperationRegion(IGDP, PCI_Config,0x00,0x100) 52 Field(IGDP, AnyAcc, NoLock, Preserve) 53 { 54 Offset(0x10), // GTTMMADR 55 MADR, 32, 56 Offset(0x50), // GMCH Graphics Control Register 57 , 1, 58 GIVD, 1, // IGD VGA disable bit 59 , 1, 60 GUMA, 5, // Stolen memory size 61 , 8, 62 Offset(0x54), 63 , 4, 64 GMFN, 1, // Gfx function 1 enable 65 , 27, 66 Offset(0x5C), // Stolen Memory Base Address 67 GSTM, 32, 68 Offset(0xE0), // Reg 0xE8, SWSCI control register 69 GSSE, 1, // Graphics SCI event (1=event pending) 70 GSSB, 14, // Graphics SCI scratchpad bits 71 GSES, 1, // Graphics event select (1=SCI) 72 Offset(0xE4), 73 ASLE, 8, // Reg 0xE4, ASLE interrupt register 74 , 24, // Only use first byte of ASLE reg 75 Offset(0xFC), 76 ASLS, 32, // Reg 0xFC, Address of the IGD OpRegion 77 } 78 79 Method (MCHK, 0, Serialized) 80 { 81 82 If (LNotEqual (MADR, 0xFFFFFFFF)) 83 { 84 OperationRegion(IGMM,SystemMemory,MADR,0x3000) 85 Field(IGMM,AnyAcc, NoLock, Preserve) 86 { 87 Offset(0X20C8), 88 , 4, 89 DCFE, 4, // DISPLAY_CLOCK_FREQUENCY_ENCODING 90 } 91 } 92 } 93 94 95 // Define an OperationRegion to cover the IGD OpRegion layout. 96 97 OperationRegion(IGDM, SystemMemory, ASLB, 0x2000) 98 Field(IGDM, AnyAcc, NoLock, Preserve) 99 { 100 101 // OpRegion Header 102 103 SIGN, 128, // Signature-"IntelGraphicsMem" 104 SIZE, 32, // OpRegion Size 105 OVER, 32, // OpRegion Version 106 SVER, 256, // System BIOS Version 107 VVER, 128, // VBIOS Version 108 GVER, 128, // Driver version 109 MBOX, 32, // Mailboxes supported 110 DMOD, 32, // Driver Model 111 PCON, 32, // 96, Platform Configuration 112 113 // OpRegion Mailbox 1 (Public ACPI Methods) 114 // Note: Mailbox 1 is normally reserved for desktop platforms. 115 116 Offset(0x100), 117 DRDY, 32, // Driver readiness (ACPI notification) 118 CSTS, 32, // Notification status 119 CEVT, 32, // Current event 120 Offset(0x120), 121 DIDL, 32, // Supported display device ID list 122 DDL2, 32, // Allows for 8 devices 123 DDL3, 32, 124 DDL4, 32, 125 DDL5, 32, 126 DDL6, 32, 127 DDL7, 32, 128 DDL8, 32, 129 CPDL, 32, // Currently present display list 130 CPL2, 32, // Allows for 8 devices 131 CPL3, 32, 132 CPL4, 32, 133 CPL5, 32, 134 CPL6, 32, 135 CPL7, 32, 136 CPL8, 32, 137 CAD1, 32, // Currently active display list 138 CAL2, 32, // Allows for 8 devices 139 CAL3, 32, 140 CAL4, 32, 141 CAL5, 32, 142 CAL6, 32, 143 CAL7, 32, 144 CAL8, 32, 145 NADL, 32, // Next active display list 146 NDL2, 32, // Allows for 8 devices 147 NDL3, 32, 148 NDL4, 32, 149 NDL5, 32, 150 NDL6, 32, 151 NDL7, 32, 152 NDL8, 32, 153 ASLP, 32, // ASL sleep timeout 154 TIDX, 32, // Toggle table index 155 CHPD, 32, // Current hot plug enable indicator 156 CLID, 32, // Current lid state indicator 157 CDCK, 32, // Current docking state indicator 158 SXSW, 32, // Display switch notify on resume 159 EVTS, 32, // Events supported by ASL (diag only) 160 CNOT, 32, // Current OS notifications (diag only) 161 NRDY, 32, 162 163 // OpRegion Mailbox 2 (Software SCI Interface) 164 165 Offset(0x200), // SCIC 166 SCIE, 1, // SCI entry bit (1=call unserviced) 167 GEFC, 4, // Entry function code 168 GXFC, 3, // Exit result 169 GESF, 8, // Entry/exit sub-function/parameter 170 , 16, // SCIC[31:16] reserved 171 Offset(0x204), // PARM 172 PARM, 32, // PARM register (extra parameters) 173 DSLP, 32, // Driver sleep time out 174 175 // OpRegion Mailbox 3 (BIOS to Driver Notification) 176 // Note: Mailbox 3 is normally reserved for desktop platforms. 177 178 Offset(0x300), 179 ARDY, 32, // Driver readiness (power conservation) 180 ASLC, 32, // ASLE interrupt command/status 181 TCHE, 32, // Technology enabled indicator 182 ALSI, 32, // Current ALS illuminance reading 183 BCLP, 32, // Backlight brightness 184 PFIT, 32, // Panel fitting state or request 185 CBLV, 32, // Current brightness level 186 BCLM, 320, // Backlight brightness level duty cycle mapping table 187 CPFM, 32, // Current panel fitting mode 188 EPFM, 32, // Enabled panel fitting modes 189 PLUT, 592, // Optional. 74-byte Panel LUT Table 190 PFMB, 32, // Optional. PWM Frequency and Minimum Brightness 191 CCDV, 32, // Optional. Gamma, Brightness, Contrast values. 192 PCFT, 32, // Optional. Power Conservation Features 193 194 Offset(0x3B6), 195 STAT, 32, // Status register 196 197 // OpRegion Mailbox 4 (VBT) 198 199 Offset(0x400), 200 GVD1, 0xC000, // 6K bytes maximum VBT image 201 202 // OpRegion Mailbox 5 (BIOS to Driver Notification Extension) 203 204 Offset(0x1C00), 205 PHED, 32, // Panel Header 206 BDDC, 2048, // Panel EDID (Max 256 bytes) 207 208 } 209 210 211 212 // Convert boot display type into a port mask. 213 214 Name (DBTB, Package() 215 { 216 0x0000, // Automatic 217 0x0007, // Port-0 : Integrated CRT 218 0x0038, // Port-1 : DVO-A, or Integrated LVDS 219 0x01C0, // Port-2 : SDVO-B, or SDVO-B/C 220 0x0E00, // Port-3 : SDVO-C 221 0x003F, // [CRT + DVO-A / Integrated LVDS] 222 0x01C7, // [CRT + SDVO-B] or [CRT + SDVO-B/C] 223 0x0E07, // [CRT + SDVO-C] 224 0x01F8, // [DVO-A / Integrated LVDS + SDVO-B] 225 0x0E38, // [DVO-A / Integrated LVDS + SDVO-C] 226 0x0FC0, // [SDVO-B + SDVO-C] 227 0x0000, // Reserved 228 0x0000, // Reserved 229 0x0000, // Reserved 230 0x0000, // Reserved 231 0x0000, // Reserved 232 0x7000, // Port-4: Integrated TV 233 0x7007, // [Integrated TV + CRT] 234 0x7038, // [Integrated TV + LVDS] 235 0x71C0, // [Integrated TV + DVOB] 236 0x7E00 // [Integrated TV + DVOC] 237 }) 238 239 // Core display clock value table. 240 241 Name (CDCT, Package() 242 { 243 Package() {160}, 244 Package() {200}, 245 Package() {267}, 246 Package() {320}, 247 Package() {356}, 248 Package() {400}, 249 }) 250 251 // Defined exit result values: 252 253 Name (SUCC, 1) // Exit result: Success 254 Name (NVLD, 2) // Exit result: Invalid parameter 255 Name (CRIT, 4) // Exit result: Critical failure 256 Name (NCRT, 6) // Exit result: Non-critical failure 257 258 259 /************************************************************************; 260 ;* 261 ;* Name: GSCI 262 ;* 263 ;* Description: Handles an SCI generated by the graphics driver. The 264 ;* PARM and SCIC input fields are parsed to determine the 265 ;* functionality requested by the driver. GBDA or SBCB 266 ;* is called based on the input data in SCIC. 267 ;* 268 ;* Usage: The method must be called in response to a GPE 06 event 269 ;* which will be generated by the graphics driver. 270 ;* Ex: Method(\_GPE._L06) {Return(\_SB.PCI0.GFX0.GSCI())} 271 ;* 272 ;* Input: PARM and SCIC are indirect inputs 273 ;* 274 ;* Output: PARM and SIC are indirect outputs 275 ;* 276 ;* References: GBDA (Get BIOS Data method), SBCB (System BIOS Callback 277 ;* method) 278 ;* 279 ;************************************************************************/ 280 281 Method (GSCI, 0, Serialized) 282 { 283 Include("IgdOGBDA.ASL") // "Get BIOS Data" Functions 284 Include("IgdOSBCB.ASL") // "System BIOS CallBacks" 285 286 If (LEqual(GEFC, 4)) 287 { 288 Store(GBDA(), GXFC) // Process Get BIOS Data functions 289 } 290 291 If (LEqual(GEFC, 6)) 292 { 293 Store(SBCB(), GXFC) // Process BIOS Callback functions 294 } 295 296 Store(0, GEFC) // Wipe out the entry function code 297 Store(1, SCIS) // Clear the GUNIT SCI status bit in PCH ACPI I/O space. 298 Store(0, GSSE) // Clear the SCI generation bit in PCI space. 299 Store(0, SCIE) // Clr SCI serviced bit to signal completion 300 301 Return(Zero) 302 } 303 304 // Include MOBLFEAT.ASL for mobile systems only. Remove for desktop. 305 Include("IgdOMOBF.ASL") // IGD SCI mobile features 306