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 IgdOSBCB.ASL 18 19Abstract: 20 21 IGD OpRegion/Software SCI Reference Code for the Baytrail Family. 22 This file contains the system BIOS call back functionality for the 23 OpRegion/Software SCI mechanism. 24 25--*/ 26 27 28Method (SBCB, 0, Serialized) 29{ 30 31 // Supported Callbacks: Sub-function 0 32 33 If (LEqual(GESF, 0x0)) 34 { 35 36 //<TODO> An OEM may support the driver->SBIOS status callbacks, but 37 // the supported callbacks value must be modified. The code that is 38 // executed upon reception of the callbacks must be also be updated 39 // to perform the desired functionality. 40 41 Store(0x00000000, PARM) // No callbacks supported 42 43 If(LEqual(PFLV,FMBL)) 44 { 45 Store(0x000F87FD, PARM) // Mobile 46 } 47 If(LEqual(PFLV,FDTP)) 48 { 49 Store(0x000F87BD, PARM) // Desktop 50 } 51 52 Store(Zero, GESF) // Clear the exit parameter 53 Return(SUCC) // "Success" 54 } 55 56 // BIOS POST Completion: Sub-function 1 57 58 If (LEqual(GESF, 1)) 59 { 60 Store(Zero, GESF) // Clear the exit parameter 61 Store(Zero, PARM) 62 Return(SUCC) // Not supported, but no failure 63 } 64 65 // Pre-Hires Set Mode: Sub-function 3 66 67 If (LEqual(GESF, 3)) 68 { 69 Store(Zero, GESF) // Clear the exit parameter 70 Store(Zero, PARM) 71 Return(SUCC) // Not supported, but no failure 72 } 73 74 // Post-Hires Set Mode: Sub-function 4 75 76 If (LEqual(GESF, 4)) 77 { 78 Store(Zero, GESF) // Clear the exit parameter 79 Store(Zero, PARM) 80 Return(SUCC) // Not supported, but no failure 81 } 82 83 // Display Switch: Sub-function 5 84 85 If (LEqual(GESF, 5)) 86 { 87 Store(Zero, GESF) // Clear the exit parameter 88 Store(Zero, PARM) 89 Return(SUCC) // Not supported, but no failure 90 } 91 92 // Set TV format: Sub-function 6 93 94 If (LEqual(GESF, 6)) 95 { 96 97 //<TODO> If implemented, the input values must be saved into 98 // non-volatile storage for parsing during the next boot. The 99 // following Sample code is Intel validated implementation. 100 101 Store(And(PARM, 0x0F), ITVF) 102 Store(ShiftRight(And(PARM, 0xF0), 4), ITVM) 103 Store(Zero, GESF) // Clear the exit parameter 104 Store(Zero, PARM) 105 Return(SUCC) 106 } 107 108 // Adapter Power State: Sub-function 7 109 110 If (LEqual(GESF, 7)) 111 { 112 113 // Upon notification from driver that the Adapter Power State = D0, 114 // check if previous lid event failed. If it did, retry the lid 115 // event here. 116 If(LEqual(PARM, 0)) 117 { 118 Store(CLID, Local0) 119 If(And(0x80000000,Local0)) 120 { 121 And(CLID, 0x0000000F, CLID) 122 GLID(CLID) 123 } 124 } 125 Store(Zero, GESF) // Clear the exit parameter 126 Store(Zero, PARM) 127 Return(SUCC) // Not supported, but no failure 128 } 129 130 // Display Power State: Sub-function 8 131 132 If (LEqual(GESF, 8)) 133 { 134 Store(Zero, GESF) // Clear the exit parameter 135 Store(Zero, PARM) 136 Return(SUCC) // Not supported, but no failure 137 } 138 139 // Set Boot Display: Sub-function 9 140 141 If (LEqual(GESF, 9)) 142 { 143 144 //<TODO> An OEM may elect to implement this method. In that case, 145 // the input values must be saved into non-volatile storage for 146 // parsing during the next boot. The following Sample code is Intel 147 // validated implementation. 148 149 And(PARM, 0xFF, IBTT) // Save the boot display to NVS 150 Store(Zero, GESF) // Clear the exit parameter 151 Store(Zero, PARM) 152 Return(SUCC) // Reserved, "Critical failure" 153 } 154 155 // Set Panel Details: Sub-function 10 (0Ah) 156 157 If (LEqual(GESF, 10)) 158 { 159 160 //<TODO> An OEM may elect to implement this method. In that case, 161 // the input values must be saved into non-volatile storage for 162 // parsing during the next boot. The following Sample code is Intel 163 // validated implementation. 164 165 // Set the panel-related NVRAM variables based the input from the driver. 166 167 And(PARM, 0xFF, IPSC) 168 169 // Change panel type if a change is requested by the driver (Change if 170 // panel type input is non-zero). Zero=No change requested. 171 172 If(And(ShiftRight(PARM, 8), 0xFF)) 173 { 174 And(ShiftRight(PARM, 8), 0xFF, IPAT) 175 Decrement(IPAT) // 0 = no change, so fit to CMOS map 176 } 177 And(ShiftRight(PARM, 18), 0x3, IBLC) 178 And(ShiftRight(PARM, 20), 0x7, IBIA) 179 Store(Zero, GESF) // Clear the exit parameter 180 Store(Zero, PARM) 181 Return(SUCC) // Success 182 } 183 184 // Set Internal Graphics: Sub-function 11 (0Bh) 185 186 If (LEqual(GESF, 11)) 187 { 188 189 //<TODO> An OEM may elect to implement this method. In that case, 190 // the input values must be saved into non-volatile storage for 191 // parsing during the next boot. The following Sample code is Intel 192 // validated implementation. 193 194 And(ShiftRight(PARM, 1), 1, IF1E) // Program the function 1 option 195 196 // Fixed memory/DVMT memory 197 198 And(ShiftRight(PARM, 17), 0xF, IDMS) // Program DVMT/fixed memory size 199 200 Store(Zero, GESF) // Clear the exit parameter 201 Store(Zero, PARM) 202 Return(SUCC) // Success 203 } 204 205 // Post-Hires to DOS FS: Sub-function 16 (10h) 206 207 If (LEqual(GESF, 16)) 208 { 209 Store(Zero, GESF) // Clear the exit parameter 210 Store(Zero, PARM) 211 Return(SUCC) // Not supported, but no failure 212 } 213 214 // APM Complete: Sub-function 17 (11h) 215 216 If (LEqual(GESF, 17)) 217 { 218 219 Store(ShiftLeft(LIDS, 8), PARM) // Report the lid state 220 Add(PARM, 0x100, PARM) // Adjust the lid state, 0 = Unknown 221 222 Store(Zero, GESF) // Clear the exit parameter 223 Return(SUCC) // Not supported, but no failure 224 } 225 226 // Set Spread Spectrum Clocks: Sub-function 18 (12h) 227 228 If (LEqual(GESF, 18)) 229 { 230 231 //<TODO> An OEM may elect to implement this method. In that case, 232 // the input values must be saved into non-volatile storage for 233 // parsing during the next boot. The following Sample code is Intel 234 // validated implementation. 235 236 If(And(PARM, 1)) 237 { 238 If(LEqual(ShiftRight(PARM, 1), 1)) 239 { 240 Store(1, ISSC) // Enable HW SSC, only for clock 1 241 } 242 Else 243 { 244 Store(Zero, GESF) 245 Return(CRIT) // Failure, as the SSC clock must be 1 246 } 247 } 248 Else 249 { 250 Store(0, ISSC) // Disable SSC 251 } 252 Store(Zero, GESF) // Clear the exit parameter 253 Store(Zero, PARM) 254 Return(SUCC) // Success 255 } 256 257 // Post VBE/PM Callback: Sub-function 19 (13h) 258 259 If (LEqual(GESF, 19)) 260 { 261 Store(Zero, GESF) // Clear the exit parameter 262 Store(Zero, PARM) 263 Return(SUCC) // Not supported, but no failure 264 } 265 266 // Set PAVP Data: Sub-function 20 (14h) 267 268 If (LEqual(GESF, 20)) 269 { 270 And(PARM, 0xF, PAVP) // Store PAVP info 271 Store(Zero, GESF) // Clear the exit parameter 272 Store(Zero, PARM) 273 Return(SUCC) // Success 274 } 275 276 // A call to a reserved "System BIOS callbacks" function was received 277 278 Store(Zero, GESF) // Clear the exit parameter 279 Return(SUCC) // Reserved, "Critical failure" 280} 281