| 3506 | } |
| 3507 | |
| 3508 | UINT32 AddIMEI (UINT8 *dsdt, UINT32 len) |
| 3509 | { |
| 3510 | UINT32 i, k = 0; |
| 3511 | UINT32 PCIADR, PCISIZE = 0; |
| 3512 | INT32 sizeoffset; |
| 3513 | AML_CHUNK *root; |
| 3514 | AML_CHUNK *device; |
| 3515 | AML_CHUNK *met, *met2; |
| 3516 | AML_CHUNK *pack; |
| 3517 | CHAR8 *imei; |
| 3518 | UINT32 FakeID; |
| 3519 | UINT32 FakeVen; |
| 3520 | |
| 3521 | if (gSettings.FakeIMEI) { |
| 3522 | FakeID = gSettings.FakeIMEI >> 16; |
| 3523 | FakeVen = gSettings.FakeIMEI & 0xFFFF; |
| 3524 | } |
| 3525 | |
| 3526 | PCIADR = GetPciDevice(dsdt, len); |
| 3527 | if (PCIADR) { |
| 3528 | PCISIZE = get_size(dsdt, PCIADR); |
| 3529 | } |
| 3530 | if (!PCISIZE) { |
| 3531 | // DBG("wrong PCI0 address, patch IMEI will not be applied\n"); |
| 3532 | return len; |
| 3533 | } |
| 3534 | // Find Device IMEI |
| 3535 | if (IMEIADR1) { |
| 3536 | for (i=0x20; len >= 10 && i < len - 10; i++) { |
| 3537 | if (CmpAdr(dsdt, i, IMEIADR1)) { |
| 3538 | k = devFind(dsdt, i); |
| 3539 | if (k) { |
| 3540 | MsgLog("device (IMEI) found at %X, don't add!\n", k); |
| 3541 | // break; |
| 3542 | return len; |
| 3543 | } |
| 3544 | } |
| 3545 | } |
| 3546 | } |
| 3547 | //Find Device IMEI by name |
| 3548 | for (i=0x20; len >= 10 && i < len - 10; i++) { |
| 3549 | k = CmpDev(dsdt, i, "IMEI"); |
| 3550 | if (k != 0) { |
| 3551 | MsgLog("device name (IMEI) found at %X, don't add!\n", k); |
| 3552 | return len; |
| 3553 | } |
| 3554 | } |
| 3555 | |
| 3556 | MsgLog("Start Add IMEI\n"); |
| 3557 | root = aml_create_node(NULL); |
| 3558 | device = aml_add_device(root, "IMEI"); |
| 3559 | aml_add_name(device, "_ADR"); |
| 3560 | aml_add_dword(device, IMEIADR1); |
| 3561 | // add Method(_DSM,4,NotSerialized) |
| 3562 | if (gSettings.FakeIMEI) { |
| 3563 | met = aml_add_method(device, "_DSM", 4); |
| 3564 | met2 = aml_add_store(met); |
| 3565 | pack = aml_add_package(met2); |
no test coverage detected