1 /* 2 * Some or all of this work - Copyright (c) 2006 - 2021, Intel Corp. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * Neither the name of Intel Corporation nor the names of its contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 /* 29 * Common use Methods 30 */ 31 /* 32 * Verification of Package 33 * 34 * arg0 - Package 35 * arg1 - size of Package 36 * arg2 - size of pre-initialized area 37 * arg3 - index of area to be written 38 * arg4 - size of area to be written 39 * arg5 - maximal number of pre-initialized elements to be verified 40 * arg6 - maximal number of written elements to be verified 41 */ 42 Method (MD6A, 7, Serialized) 43 { 44 Name (LPN0, 0x00) 45 Name (LPC0, 0x00) 46 /* Writing */ 47 48 If (Arg4) 49 { 50 LPN0 = Arg4 51 LPC0 = Arg3 52 While (LPN0) 53 { 54 TRC0 (Arg0, LPC0, LPC0) 55 Arg0 [LPC0] = LPC0 /* \MD6A.LPC0 */ 56 LPN0-- 57 LPC0++ 58 } 59 } 60 61 /* Verifying pre-initialized area */ 62 63 If ((Arg2 && Arg5)) 64 { 65 If ((Arg2 < Arg5)) 66 { 67 Arg5 = Arg2 68 } 69 70 LPN0 = Arg5 71 LPC0 = 0x00 72 While (LPN0) 73 { 74 Local0 = DerefOf (Arg0 [LPC0]) 75 TRC1 (Arg0, LPC0, Local0) 76 If ((Local0 != LPC0)) 77 { 78 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local0, LPC0) 79 } 80 81 LPN0-- 82 LPC0++ 83 } 84 } 85 86 If (Arg2) 87 { 88 /* First pre-initialized element */ 89 90 Local0 = DerefOf (Arg0 [0x00]) 91 TRC1 (Arg0, 0x00, Local0) 92 If ((Local0 != 0x00)) 93 { 94 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local0, 0x00) 95 } 96 97 /* Last pre-initialized element */ 98 99 Local0 = (Arg2 - 0x01) 100 Local1 = DerefOf (Arg0 [Local0]) 101 TRC1 (Arg0, Local0, Local1) 102 If ((Local1 != Local0)) 103 { 104 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local1, Local0) 105 } 106 107 /* Middle pre-initialized element */ 108 109 Divide (Arg2, 0x02, Local1, Local0) 110 Local1 = DerefOf (Arg0 [Local0]) 111 TRC1 (Arg0, Local0, Local1) 112 If ((Local1 != Local0)) 113 { 114 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local1, Local0) 115 } 116 } 117 118 /* Verifying written area */ 119 120 If ((Arg4 && Arg6)) 121 { 122 If ((Arg4 < Arg6)) 123 { 124 Arg6 = Arg4 125 } 126 127 LPN0 = Arg6 128 LPC0 = Arg3 129 While (LPN0) 130 { 131 Local0 = DerefOf (Arg0 [LPC0]) 132 TRC1 (Arg0, LPC0, Local0) 133 If ((Local0 != LPC0)) 134 { 135 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local0, LPC0) 136 } 137 138 LPN0-- 139 LPC0++ 140 } 141 } 142 143 If (Arg4) 144 { 145 /* First written element */ 146 147 Local0 = DerefOf (Arg0 [Arg3]) 148 TRC1 (Arg0, Arg3, Local0) 149 If ((Local0 != Arg3)) 150 { 151 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local0, Arg3) 152 } 153 154 /* Last written element */ 155 156 Local0 = (Arg3 + Arg4) 157 Local0-- 158 Local1 = DerefOf (Arg0 [Local0]) 159 TRC1 (Arg0, Local0, Local1) 160 If ((Local1 != Local0)) 161 { 162 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local1, Local0) 163 } 164 165 /* Middle written element */ 166 167 Divide (Arg4, 0x02, Local0, Local1) 168 Local0 = (Arg3 + Local1) 169 Local1 = DerefOf (Arg0 [Local0]) 170 TRC1 (Arg0, Local0, Local1) 171 If ((Local1 != Local0)) 172 { 173 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local1, Local0) 174 } 175 } 176 177 /* Check exception on access to the uninitialized element */ 178 179 If ((Arg2 < Arg1)) 180 { 181 If (Arg4) 182 { 183 If ((Arg3 > Arg2)) 184 { 185 /* Just after pre-initialized area */ 186 187 TRC1 (Arg0, Arg2, 0xF0F0F0F0) 188 Store (Arg0 [Arg2], Local0) 189 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 190 Local1 = DerefOf (Local0) 191 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 192 /* Just before written area */ 193 194 Local1 = (Arg3 - 0x01) 195 TRC1 (Arg0, Local1, 0xF0F0F0F0) 196 Store (Arg0 [Local1], Local0) 197 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 198 Local1 = DerefOf (Local0) 199 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 200 } 201 202 /* Just after pre-initialized and written areas */ 203 204 Local7 = (Arg3 + Arg4) 205 If ((Arg2 > Local7)) 206 { 207 Local7 = Arg2 208 } 209 210 If ((Local7 < Arg1)) 211 { 212 TRC1 (Arg0, Local7, 0xF0F0F0F0) 213 Store (Arg0 [Local7], Local0) 214 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 215 Local1 = DerefOf (Local0) 216 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 217 /* Last element of Package */ 218 219 Local1 = (Arg1 - 0x01) 220 TRC1 (Arg0, Local1, 0xF0F0F0F0) 221 Store (Arg0 [Local1], Local0) 222 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 223 Local1 = DerefOf (Local0) 224 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 225 } 226 } 227 Else 228 { 229 /* Just after pre-initialized area */ 230 231 TRC1 (Arg0, Arg2, 0xF0F0F0F0) 232 Store (Arg0 [Arg2], Local0) 233 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 234 Local1 = DerefOf (Local0) 235 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 236 /* Last element of Package */ 237 238 Local1 = (Arg1 - 0x01) 239 TRC1 (Arg0, Local1, 0xF0F0F0F0) 240 Store (Arg0 [Local1], Local0) 241 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 242 Local1 = DerefOf (Local0) 243 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 244 } 245 } 246 247 /* Check exception on out of Package access */ 248 249 TRC1 (Arg0, Arg1, 0xF0F0F0F0) 250 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 251 Local0 = Arg0 [Arg1] 252 CH04 (__METHOD__, 0x00, 0x37, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_PACKAGE_LIMIT */ 253 Local7 = (Arg1 + 0x01) 254 If ((Local7 >= Arg1)) 255 { 256 TRC1 (Arg0, Local7, 0xF0F0F0F0) 257 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 258 Local0 = Arg0 [Local7] 259 CH04 (__METHOD__, 0x00, 0x37, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_PACKAGE_LIMIT */ 260 } 261 262 If ((0xFFFFFFFFFFFFFFFF >= Arg1)) 263 { 264 TRC1 (Arg0, 0xFFFFFFFFFFFFFFFF, 0xF0F0F0F0) 265 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 266 Local0 = Arg0 [0xFFFFFFFFFFFFFFFF] 267 CH04 (__METHOD__, 0x00, 0x37, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_PACKAGE_LIMIT */ 268 } 269 270 /* Check near the maximal bound of a simple Package */ 271 /* (not VarPackage) - 254, 255, 256, 257 elements: */ 272 MD6B (Arg0, Arg1, Arg2, Arg3, Arg4, 0xFE) 273 MD6B (Arg0, Arg1, Arg2, Arg3, Arg4, 0xFF) 274 MD6B (Arg0, Arg1, Arg2, Arg3, Arg4, 0x0100) 275 MD6B (Arg0, Arg1, Arg2, Arg3, Arg4, 0x0101) 276 TRC2 ("The test run up to the end") 277 } 278 279 /* 280 * Verification of Package 281 * 282 * arg0 - Package 283 * arg1 - size of Package 284 * arg2 - size of pre-initialized area 285 * arg3 - index of area to be written 286 * arg4 - size of area to be written 287 * arg5 - index of element of Package to be verified 288 */ 289 Method (MD6B, 6, NotSerialized) 290 { 291 Local7 = 0x00 292 If ((Arg5 < Arg2)) 293 { 294 Local7 = 0x01 295 } 296 ElseIf ((Arg5 >= Arg3)) 297 { 298 Local0 = (Arg3 + Arg4) 299 If ((Arg5 < Local0)) 300 { 301 Local7 = 0x01 302 } 303 } 304 305 If (Local7) 306 { 307 /* Was initialized */ 308 309 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 310 Local0 = DerefOf (Arg0 [Arg5]) 311 TRC1 (Arg0, Arg5, Local0) 312 If ((Local0 != Arg5)) 313 { 314 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local0, Arg5) 315 } 316 317 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 318 } 319 ElseIf ((Arg5 < Arg1)) 320 { 321 /* Check exception on access to the uninitialized element */ 322 323 TRC1 (Arg0, Arg5, 0xF0F0F0F0) 324 Store (Arg0 [Arg5], Local0) 325 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 326 Local1 = DerefOf (Local0) 327 CH04 (__METHOD__, 0x01, 0x33, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_ELEMENT */ 328 } 329 Else 330 { 331 /* Check exception on out of Package access */ 332 333 TRC1 (Arg0, Arg5, 0xF0F0F0F0) 334 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 335 Local0 = Arg0 [Arg5] 336 CH04 (__METHOD__, 0x00, 0x37, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_PACKAGE_LIMIT */ 337 } 338 } 339 340 /* 341 * Check, register errors and reset the global level 342 * execution exception AE_AML_DIVIDE_BY_ZERO caused in 343 * demo-test of bug 162. 344 */ 345 Method (MD7D, 0, NotSerialized) 346 { 347 ID01 = 0x00 348 Local0 = ERRS /* \ERRS */ 349 /* 350 * Slacken expectations: 351 * 352 * - check opcode of the FIRST exception 353 * - number of exceptions NOT GREATER than two 354 */ 355 /* Check opcode of the first exception */ 356 CH04 (__METHOD__, 0x01, 0x38, 0x00, __LINE__, 0x00, 0x00) /* AE_AML_DIVIDE_BY_ZERO */ 357 /* Number of exceptions not greater than two */ 358 359 If ((EXC1 > 0x02)) 360 { 361 ID01 = 0x01 362 } 363 364 /* Reset the number of exceptions */ 365 366 EXC1 = 0x00 367 If ((ERRS != Local0)) 368 { 369 ID01 = 0x01 370 } 371 372 CH03 (__METHOD__, 0x00, __LINE__, 0x00, 0x00) 373 Return (0x01) 374 } 375 376 /* 377 * Check result 378 * arg0 - result 379 * arg1 - expected type of result 380 * arg2 - expected result 381 * arg3 - index of checking 382 * arg4 - index of checking 383 * arg5 - tag, to check the value of object 384 */ 385 Method (MF88, 6, NotSerialized) 386 { 387 Local0 = ObjectType (Arg0) 388 If ((Local0 != Arg1)) 389 { 390 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Local0, Arg1) 391 } 392 393 If (Arg5) 394 { 395 If ((Arg0 != Arg2)) 396 { 397 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, Arg0, Arg2) 398 } 399 } 400 } 401 402 Method (M02A, 0, NotSerialized) 403 { 404 Debug = "Check the error manually and remove call to m02a() when the bug is fixed." 405 ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, 0x00, 0x00) 406 } 407