1/* 2 * Access to elements of combined objects (Device) 3 */ 4Name(z167, 167) 5 6/* 7 * Named Integer i000 8 */ 9 10/* 11 * Simple, 3-level 12 */ 13 14Method(dv00) 15{ 16 Name(ts, "dv00") 17 Device(d000) { 18 Name(i000, 0x00000001) 19 } 20 21 Method(m001, 1) 22 { 23 Method(m002, 1) 24 { 25 Method(m003, 1) 26 { 27 Return (0xabcd0000) 28 } 29 Return (Add(arg0, m003(arg0))) 30 } 31 Return (Add(arg0, m002(arg0))) 32 } 33 Store(Add(d000.i000, m001(d000.i000)), Local0) 34 if (LNotEqual(Local0, 0xabcd0003)) { 35 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0003) 36 } 37} 38 39Method(dvf0) 40{ 41 Name(ts, "dvf0") 42 Device(d000) { 43 Name(i000, 0x00000001) 44 } 45 46 Method(m001) 47 { 48 Method(m002) 49 { 50 Method(m003) 51 { 52 Return (0xabcd0000) 53 } 54 Return (Add(^^d000.i000, m003())) 55 } 56 Return (Add(^d000.i000, m002())) 57 } 58 59 Store(Add(d000.i000, m001()), Local0) 60 if (LNotEqual(Local0, 0xabcd0003)) { 61 err(ts, z163, __LINE__, 0, 0, Local0, 0xabcd0003) 62 } 63} 64 65Method(dvf1) 66{ 67 Name(ts, "dvf1") 68 Device(d000) { 69 Name(i000, 0x00000001) 70 } 71 72 Method(m001) 73 { 74 Method(m002) 75 { 76 Method(m003) 77 { 78 Return (0xabcd0000) 79 } 80 Return (Add(^^^dvf1.d000.i000, m003())) 81 } 82 Return (Add(^^dvf1.d000.i000, m002())) 83 } 84 85 Store(Add(^dvf1.d000.i000, m001()), Local0) 86 if (LNotEqual(Local0, 0xabcd0003)) { 87 err(ts, z163, __LINE__, 0, 0, Local0, 0xabcd0003) 88 } 89} 90 91/* 92 * 8-level 93 * added writing into i000: 94 * Store(0x00040000, i000) 95 */ 96Method(dv01, 1) 97{ 98 Name(ts, "dv01") 99 Name(i000, 0x00000001) 100 Name(i001, 0) 101 Name(p000, Package() {1,2,3,4}) 102 103 Store(arg0, i001) 104 105 Method(m001) 106 { 107 Method(m002) 108 { 109 Method(m003) 110 { 111 Method(m004) 112 { 113 Method(m005) 114 { 115 Method(m006) 116 { 117 Method(m007) 118 { 119 Method(m008) 120 { 121 if (i001) 122 { 123 CopyObject(p000, i000) 124 } 125 Return (0) 126 } 127 Store(0x80000000, i000) 128 Return (Add(i000, m008())) 129 } 130 Store(0x07000000, i000) 131 Return (Add(i000, m007())) 132 } 133 Store(0x00600000, i000) 134 Return (Add(i000, m006())) 135 } 136 Store(0x00050000, i000) 137 Return (Add(i000, m005())) 138 } 139 Store(0x00004000, i000) 140 Return (Add(i000, m004())) 141 } 142 Store(0x00000300, i000) 143 Return (Add(i000, m003())) 144 } 145 Store(0x00000020, i000) 146 Return (Add(i000, m002())) 147 } 148 Store(Add(i000, m001()), Local0) 149 150 if (LNotEqual(Local0, 0x87654321)) { 151 err(ts, z167, __LINE__, 0, 0, Local0, 0x87654321) 152 } 153 154 if (LNotEqual(i000, 0x80000000)) { 155 err(ts, z167, __LINE__, 0, 0, i000, 0x80000000) 156 } 157} 158 159/* 160 * Recurcive execution of m001: 161 * Add(i000, m001(), Local0) 162 */ 163Method(dv02) 164{ 165 Name(ts, "dv02") 166 Name(i000, 0x00100000) 167 Name(i001, 0) 168 169 Method(m001) 170 { 171 /* 172 * Because of the stack overflow issues on MS the number 173 * of repetitions was changed from 100 to 11 here. 174 */ 175 if (LLess(i001, 11)) { 176 Increment(i000) 177 Increment(i001) 178 Add(i000, m001(), Local0) 179 Return (Local0) 180 } 181 Return (0) 182 } 183 Store(Add(i000, m001()), Local0) 184 185 if (LNotEqual(Local0, 0x00c00042)) { 186 err(ts, z167, __LINE__, 0, 0, Local0, 0x00c00042) 187 } 188 189 if (LNotEqual(i000, 0x0010000b)) { 190 err(ts, z167, __LINE__, 0, 0, i000, 0x0010000b) 191 } 192} 193 194/* 195 * Local instead of i000 (in in01) 196 */ 197Method(dv03, 1) 198{ 199 Name(ts, "dv03") 200 Name(i001, 0) 201 Name(p000, Package() {1,2,3,4}) 202 203 Store(arg0, i001) 204 205 Store(0x00000001, Local7) 206 207 Method(m001) 208 { 209 Method(m002) 210 { 211 Method(m003) 212 { 213 Method(m004) 214 { 215 Method(m005) 216 { 217 Method(m006) 218 { 219 Method(m007) 220 { 221 Method(m008) 222 { 223 if (i001) 224 { 225 CopyObject(p000, Local7) 226 } 227 Return (0) 228 } 229 Store(0x80000000, Local7) 230 Return (Add(Local7, m008())) 231 } 232 Store(0x07000000, Local7) 233 Return (Add(Local7, m007())) 234 } 235 Store(0x00600000, Local7) 236 Return (Add(Local7, m006())) 237 } 238 Store(0x00050000, Local7) 239 Return (Add(Local7, m005())) 240 } 241 Store(0x00004000, Local7) 242 Return (Add(Local7, m004())) 243 } 244 Store(0x00000300, Local7) 245 Return (Add(Local7, m003())) 246 } 247 Store(0x00000020, Local7) 248 Return (Add(Local7, m002())) 249 } 250 Store(Add(Local7, m001()), Local0) 251 252 if (LNotEqual(Local0, 0x87654321)) { 253 err(ts, z167, __LINE__, 0, 0, Local0, 0x87654321) 254 } 255 256 if (LNotEqual(Local7, 1)) { 257 err(ts, z167, __LINE__, 0, 0, Local7, 1) 258 } 259} 260 261/* 262 * Arg instead of i000 (in in01) 263 * 264 * see ns_0100.asl 265 */ 266 267/* 268 * 8-level 269 * added writing into i000: 270 * Store(0x00040000, i000) 271 * 272 * dv01 +: 273 * m00X are passed with i000 274 * argX inside m00X is rewritten 275 */ 276Method(dv04) 277{ 278 Name(ts, "dv04") 279 Name(i000, 0x00000001) 280 Name(i001, 0) 281 Name(p000, Package() {1,2,3,4}) 282 283 Method(m001, 2) 284 { 285 Method(m002, 2) 286 { 287 Method(m003, 2) 288 { 289 Method(m004, 2) 290 { 291 Method(m005, 2) 292 { 293 Method(m006, 2) 294 { 295 Method(m007, 2) 296 { 297 /* 298 * ====================== >>>>>>>> 299 * Sometimes, after I added a big group of 300 * 'If' operators, this fragment of code causes 301 * break of execution on MS. But, namely -- 302 * sometimes! To investigate the reason I 303 * commented part by part of it to find 304 * workable code, then un-commented it 305 * part by part too. 306 * It entire initial code 307 * started working on MS again! 308 */ 309 /* 310 Method(m008, 2) 311 { 312 if (i001) 313 { 314 CopyObject(p000, i000) 315 } 316 Store(0x10000008, arg0) 317 Return (0) 318 } 319 Store(0x80000000, i000) 320 Store(0x10000007, arg0) 321 Return (Add(i000, m008(i000, arg0))) 322 */ 323 /* 324 * ====================== <<<<<<<< 325 */ 326 327 Store(0x80000000, i000) 328 Store(0x10000007, arg0) 329 Add(i000, 0, Local0) 330 331 Return (Local0) 332 } 333 Store(0x07000000, i000) 334 Store(0x10000006, arg0) 335 Return (Add(i000, m007(i000, arg0))) 336 } 337 Store(0x00600000, i000) 338 Store(0x10000005, arg0) 339 Return (Add(i000, m006(i000, arg0))) 340 } 341 Store(0x00050000, i000) 342 Store(0x10000004, arg0) 343 Return (Add(i000, m005(i000, arg0))) 344 } 345 if (LNotEqual(arg0, 0x00000300)) { 346 err(ts, z167, __LINE__, 0, 0, arg0, 0x00000300) 347 } 348 if (LNotEqual(arg1, 0x10000001)) { 349 err(ts, z167, __LINE__, 0, 0, arg1, 0x10000001) 350 } 351 Store(0x00004000, i000) 352 Store(0x10000003, arg0) 353 Return (Add(i000, m004(i000, arg0))) 354 } 355 if (LNotEqual(arg0, 0x00000020)) { 356 err(ts, z167, __LINE__, 0, 0, arg0, 0x00000020) 357 } 358 if (LNotEqual(i000, 0x00000020)) { 359 err(ts, z167, __LINE__, 0, 0, i000, 0x00000020) 360 } 361 Store(0x10000002, arg0) 362 if (LNotEqual(i000, 0x00000020)) { 363 err(ts, z167, __LINE__, 0, 0, i000, 0x00000020) 364 } 365 if (LNotEqual(arg0, 0x10000002)) { 366 err(ts, z167, __LINE__, 0, 0, arg0, 0x10000002) 367 } 368 Store(0x00000300, i000) 369 if (LNotEqual(i000, 0x00000300)) { 370 err(ts, z167, __LINE__, 0, 0, i000, 0x00000300) 371 } 372 if (LNotEqual(arg0, 0x10000002)) { 373 err(ts, z167, __LINE__, 0, 0, arg0, 0x10000002) 374 } 375 if (LNotEqual(arg1, 0x10000001)) { 376 err(ts, z167, __LINE__, 0, 0, arg1, 0x10000001) 377 } 378 Store(0x10000002, arg0) 379 Store(0x00000300, i000) 380 Return (Add(i000, m003(i000, arg1))) 381 } 382 if (LNotEqual(arg0, 0x00000001)) { 383 err(ts, z167, __LINE__, 0, 0, arg0, 0x00000001) 384 } 385 if (LNotEqual(i000, 0x00000001)) { 386 err(ts, z167, __LINE__, 0, 0, i000, 0x00000001) 387 } 388 Store(0x10000001, arg0) 389 if (LNotEqual(i000, 0x00000001)) { 390 err(ts, z167, __LINE__, 0, 0, i000, 0x00000001) 391 } 392 if (LNotEqual(arg0, 0x10000001)) { 393 err(ts, z167, __LINE__, 0, 0, arg0, 0x10000001) 394 } 395 Store(0x00000020, i000) 396 if (LNotEqual(i000, 0x00000020)) { 397 err(ts, z167, __LINE__, 0, 0, i000, 0x00000020) 398 } 399 if (LNotEqual(arg0, 0x10000001)) { 400 err(ts, z167, __LINE__, 0, 0, arg0, 0x10000001) 401 } 402 if (LNotEqual(arg1, 0x10000000)) { 403 err(ts, z167, __LINE__, 0, 0, arg1, 0x10000000) 404 } 405 Store(0x10000001, arg0) 406 Store(0x00000020, i000) 407 Return (Add(i000, m002(i000, arg0))) 408 } 409 Store(Add(i000, m001(i000, 0x10000000)), Local0) 410 411 if (LNotEqual(Local0, 0x87654321)) { 412 err(ts, z167, __LINE__, 0, 0, Local0, 0x87654321) 413 } 414 415 if (LNotEqual(i000, 0x80000000)) { 416 err(ts, z167, __LINE__, 0, 0, i000, 0x80000000) 417 } 418} 419 420/* 421 * Note: now the checkings are so that dv05 succeeds on MS. 422 */ 423Method(dv05) 424{ 425 Name(ts, "dv05") 426 427 Name(i000, 0xabcd0000) 428 Name(s000, "qwrtyu0003") 429 Name(b000, Buffer() {0xb0,0xb1,0xb2,0xb3,0xb4}) 430 Name(p000, Package() {0xabcd0001, 0xabcd0002, 0xabcd0003}) 431 Event(e000) 432 Mutex(mx00, 0) 433 Method(mmm0) { 434 Name(im00, 0xabcd0004) 435 Name(sm00, "qwertyui") 436 // Return ( "qwertyui" ) 437 } 438 Method(mmm1) { 439 Name(im00, 0xabcd0004) 440 Name(sm00, "qwertyui") 441 // Return ( 0xabcd0004 ) 442 Return ( "qwertyui" ) 443 } 444 Device(d000) { Name(id00, 0xabcd0005) } 445 ThermalZone(tz00) { Name(itz0, 0xabcd0006) } 446 Processor(pr00, 0, 0xFFFFFFFF, 0) { Name(ipr0, 0xabcd0007) } 447 PowerResource(pw00, 1, 0) { Name(ipw0, 0xabcd0008) } 448 OperationRegion(r000, SystemMemory, 0x100, 0x100) 449 450 Name(b001, Buffer() {0xa0,0xa1,0xa2,0xa3,0xa4}) 451 CreateField(b001, 0, 8, bf00) 452 453 OperationRegion(r001, SystemMemory, 0x100, 0x100) 454 Field(r001, ByteAcc, NoLock, Preserve) {f000,32, f001,32, f002,32, f003,32} 455 BankField(r001, f001, 0, ByteAcc, NoLock, Preserve) {bnk0,32} 456 IndexField(f002, f003, ByteAcc, NoLock, Preserve) {if00,32, if01,32} 457 458 Method(m001, 2) 459 { 460 Store(ObjectType(arg0), Local0) 461 if (LNotEqual(Local0, arg1)) { 462 err(ts, z167, __LINE__, 0, 0, Local0, arg1) 463 } 464 Return (5) 465 } 466 467 CH03(ts, z167, 0x000, __LINE__, 0) 468 469 Store(Add(DerefOf(Index(p000, 0)), m001(i000, c009)), Local0) 470 if (LNotEqual(Local0, 0xabcd0006)) { 471 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 472 } 473 Store(Add(DerefOf(Index(p000, 0)), m001(s000, c00a)), Local0) 474 if (LNotEqual(Local0, 0xabcd0006)) { 475 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 476 } 477 Store(Add(DerefOf(Index(p000, 0)), m001(b000, c00b)), Local0) 478 if (LNotEqual(Local0, 0xabcd0006)) { 479 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 480 } 481 Store(Add(DerefOf(Index(p000, 0)), m001(p000, c00c)), Local0) 482 if (LNotEqual(Local0, 0xabcd0006)) { 483 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 484 } 485 Store(Add(DerefOf(Index(p000, 0)), m001(e000, c00f)), Local0) 486 if (LNotEqual(Local0, 0xabcd0006)) { 487 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 488 } 489 Store(Add(DerefOf(Index(p000, 0)), m001(mx00, c011)), Local0) 490 if (LNotEqual(Local0, 0xabcd0006)) { 491 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 492 } 493 Store(Add(DerefOf(Index(p000, 0)), m001(mmm0, c008)), Local0) 494 if (LNotEqual(Local0, 0xabcd0006)) { 495 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 496 } 497 Store(Add(DerefOf(Index(p000, 0)), m001(mmm1, c00a)), Local0) 498 if (LNotEqual(Local0, 0xabcd0006)) { 499 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 500 } 501 Store(Add(DerefOf(Index(p000, 0)), m001(d000, c00e)), Local0) 502 if (LNotEqual(Local0, 0xabcd0006)) { 503 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 504 } 505 Store(Add(DerefOf(Index(p000, 0)), m001(tz00, c015)), Local0) 506 if (LNotEqual(Local0, 0xabcd0006)) { 507 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 508 } 509 Store(Add(DerefOf(Index(p000, 0)), m001(pr00, c014)), Local0) 510 if (LNotEqual(Local0, 0xabcd0006)) { 511 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 512 } 513 Store(Add(DerefOf(Index(p000, 0)), m001(pw00, c013)), Local0) 514 if (LNotEqual(Local0, 0xabcd0006)) { 515 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 516 } 517 Store(Add(DerefOf(Index(p000, 0)), m001(r000, c012)), Local0) 518 if (LNotEqual(Local0, 0xabcd0006)) { 519 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 520 } 521 Store(Add(DerefOf(Index(p000, 0)), m001(bf00, c00b)), Local0) 522 if (LNotEqual(Local0, 0xabcd0006)) { 523 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 524 } 525 Store(Add(DerefOf(Index(p000, 0)), m001(f000, c009)), Local0) 526 if (LNotEqual(Local0, 0xabcd0006)) { 527 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 528 } 529 Store(Add(DerefOf(Index(p000, 0)), m001(bnk0, c009)), Local0) 530 if (LNotEqual(Local0, 0xabcd0006)) { 531 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 532 } 533 Store(Add(DerefOf(Index(p000, 0)), m001(if00, c009)), Local0) 534 if (LNotEqual(Local0, 0xabcd0006)) { 535 err(ts, z167, __LINE__, 0, 0, Local0, 0xabcd0006) 536 } 537 538 CH03(ts, z167, 0x000, __LINE__, 0) 539} 540 541Method(dv06) 542{ 543 Name(ts, "dv06") 544 Name(i000, 0xabcd0000) 545 546 Store(ObjectType(i000), Local0) 547 if (LNotEqual(Local0, c009)) { 548 err(ts, z167, __LINE__, 0, 0, Local0, c009) 549 } 550} 551 552Method(dev0) 553{ 554 SRMT("dv00") 555 dv00() 556 557 SRMT("dvf0") 558 dvf0() 559 SRMT("dvf1") 560 dvf1() 561 562 SRMT("dv01-0") 563 dv01(0) 564 SRMT("dv02") 565 dv02() 566 SRMT("dv03-0") 567 dv03(0) 568 SRMT("dv04") 569 dv04() 570 SRMT("dv05") 571 if (LAnd(fix1, chk3)) { 572 /* 573 * It breaks MS while re-booting, 574 * for ACPICA it causes exception 575 * and breaks path. 576 */ 577 dv05() 578 } else { 579 BLCK() 580 } 581 SRMT("dv06") 582 dv06() 583} 584