David Wei | 3cbfba0 | 2015-01-12 09:37:20 +0000 | [diff] [blame] | 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 | IgdOSBCB.ASL
|
| 18 |
|
| 19 | Abstract:
|
| 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 |
|
| 28 | Method (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 | }
|