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

Function AddHDEF

rEFIt_UEFI/Platform/FixBiosDsdt.cpp:3744–3859  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3742}
3743
3744UINT32 AddHDEF (UINT8 *dsdt, UINT32 len, const XString8& OSVersion)
3745{
3746 UINT32 i, k;
3747 UINT32 PCIADR, PCISIZE = 0;
3748 INT32 sizeoffset;
3749 UINT32 HDAADR = 0, Size;
3750 AML_CHUNK* root;
3751// AML_CHUNK* met, *met2;
3752 AML_CHUNK* device;
3753// AML_CHUNK* pack;
3754 CHAR8 *hdef;
3755
3756 PCIADR = GetPciDevice(dsdt, len);
3757 if (PCIADR) {
3758 PCISIZE = get_size(dsdt, PCIADR);
3759 }
3760 if (!PCISIZE) return len; //what is the bad DSDT ?!
3761 DBG("Start HDA Fix\n");
3762// len = DeleteDevice("AZAL", dsdt, len);
3763
3764 // HDA Address
3765 for (i=0x20; len >= 10 && i < len - 10; i++) {
3766 if (HDAADR1 != 0x00000000 && HDAFIX &&
3767 CmpAdr(dsdt, i, HDAADR1)) {
3768 HDAADR = devFind(dsdt, i);
3769 if (!HDAADR) {
3770 continue;
3771 }
3772
3773 // BridgeSize = get_size(dsdt, HDAADR);
3774 device_name[4] = (__typeof_am__(device_name[4]))AllocateZeroPool(5);
3775 CopyMem(device_name[4], dsdt+i, 4);
3776 DBG("found HDA device NAME(_ADR,0x%08X) And Name is %s\n",
3777 HDAADR1, device_name[4]);
3778 ReplaceName(dsdt, len, device_name[4], "HDEF");
3779 HDAFIX = FALSE;
3780 break;
3781 } // End HDA
3782 }
3783
3784 if (HDAADR) { // bridge or device
3785 i = HDAADR;
3786 Size = get_size(dsdt, i);
3787 k = FindMethod(dsdt + i, Size, "_DSM");
3788 if (k != 0) {
3789 k += i;
3790 Size = get_size(dsdt, k);
3791 sizeoffset = - 1 - Size;
3792 len = move_data(k - 1, dsdt, len, sizeoffset);
3793 len = CorrectOuters(dsdt, len, k - 2, sizeoffset);
3794 DBG("_DSM in HDA already exists, dropped\n");
3795 }
3796 }
3797
3798 root = aml_create_node(NULL);
3799 if (HDAFIX) {
3800 MsgLog("Start Add Device HDEF\n");
3801 device = aml_add_device(root, "HDEF");

Callers 1

FixBiosDsdtFunction · 0.85

Calls 15

GetPciDeviceFunction · 0.85
get_sizeFunction · 0.85
CmpAdrFunction · 0.85
devFindFunction · 0.85
ReplaceNameFunction · 0.85
FindMethodFunction · 0.85
move_dataFunction · 0.85
CorrectOutersFunction · 0.85
aml_create_nodeFunction · 0.85
aml_add_deviceFunction · 0.85
aml_add_nameFunction · 0.85
aml_add_dwordFunction · 0.85

Tested by

no test coverage detected