MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / FIXSATA

Function FIXSATA

rEFIt_UEFI/Platform/FixBiosDsdt.cpp:4504–4591  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4502//CHAR8 DevSATA0[] = {0x80, 0x26, 0x00, 0x00};
4503
4504UINT32 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);

Callers 1

FixBiosDsdtFunction · 0.85

Calls 15

CmpAdrFunction · 0.85
devFindFunction · 0.85
get_sizeFunction · 0.85
FindMethodFunction · 0.85
move_dataFunction · 0.85
CorrectOutersFunction · 0.85
aml_create_nodeFunction · 0.85
aml_add_methodFunction · 0.85
aml_add_storeFunction · 0.85
aml_add_packageFunction · 0.85
aml_add_stringFunction · 0.85
aml_add_byte_bufferFunction · 0.85

Tested by

no test coverage detected