| 4502 | //CHAR8 DevSATA0[] = {0x80, 0x26, 0x00, 0x00}; |
| 4503 | |
| 4504 | UINT32 FIXSATA (UINT8 *dsdt, UINT32 len) |
| 4505 | { |
| 4506 | UINT32 i, k; |
| 4507 | UINT32 SATAADR = 0, BridgeSize = 0, Size; |
| 4508 | INT32 sizeoffset; |
| 4509 | AML_CHUNK* root; |
| 4510 | AML_CHUNK* met, *met2; |
| 4511 | AML_CHUNK* pack; |
| 4512 | CHAR8 *sata; |
| 4513 | UINT32 FakeID; |
| 4514 | UINT32 FakeVen; |
| 4515 | |
| 4516 | if (gSettings.FakeSATA) { |
| 4517 | FakeID = gSettings.FakeSATA >> 16; |
| 4518 | FakeVen = gSettings.FakeSATA & 0xFFFF; |
| 4519 | } |
| 4520 | |
| 4521 | if (!SATAADR1) return len; |
| 4522 | |
| 4523 | for (i=0x20; len >= 10 && i < len - 10; i++) { |
| 4524 | if (CmpAdr(dsdt, i, SATAADR1)) { |
| 4525 | // DBG("Found SATAAHCIADR1=%X at %X\n", SATAAHCIADR1, j); |
| 4526 | SATAADR = devFind(dsdt, i); |
| 4527 | if (!SATAADR) { |
| 4528 | continue; |
| 4529 | } |
| 4530 | BridgeSize = get_size(dsdt, SATAADR); |
| 4531 | if (BridgeSize) break; |
| 4532 | } // End IDE |
| 4533 | } |
| 4534 | if (!BridgeSize) return len; |
| 4535 | if (SATAADR) { // bridge or device |
| 4536 | i = SATAADR; |
| 4537 | Size = get_size(dsdt, i); |
| 4538 | k = FindMethod(dsdt + i, Size, "_DSM"); |
| 4539 | if (k != 0) { |
| 4540 | k += i; |
| 4541 | Size = get_size(dsdt, k); |
| 4542 | sizeoffset = - 1 - Size; |
| 4543 | len = move_data(k - 1, dsdt, len, sizeoffset); |
| 4544 | len = CorrectOuters(dsdt, len, k - 2, sizeoffset); |
| 4545 | DBG("_DSM in SATA already exists, dropped\n"); |
| 4546 | } |
| 4547 | } |
| 4548 | |
| 4549 | DBG("Start SATA Fix\n"); |
| 4550 | |
| 4551 | root = aml_create_node(NULL); |
| 4552 | // add Method(_DSM,4,NotSerialized) |
| 4553 | if (gSettings.FakeSATA || !gSettings.NoDefaultProperties) { |
| 4554 | met = aml_add_method(root, "_DSM", 4); |
| 4555 | met2 = aml_add_store(met); |
| 4556 | pack = aml_add_package(met2); |
| 4557 | if (gSettings.FakeSATA) { |
| 4558 | aml_add_string(pack, "device-id"); |
| 4559 | aml_add_byte_buffer(pack, (UINT8*)&FakeID, 4); |
| 4560 | aml_add_string(pack, "vendor-id"); |
| 4561 | aml_add_byte_buffer(pack, (UINT8*)&FakeVen, 4); |
no test coverage detected