// 0xffd87eed
{"addr":"0xffd87eed","code":"int sub_FFD87EED()\n{\n int v0; // eax\n int v1; // ebx\n __int16 v2; // bp\n int v3; // eax\n int result; // eax\n char v5; // cl\n _DWORD *v6; // edi\n unsigned int v7; // ebx\n unsigned int v8; // ebx\n int v9; // eax\n int v10; // eax\n int v11; // esi\n int v12; // eax\n int v13; // [esp+14h] [ebp-8h] BYREF\n int v14; // [esp+18h] [ebp-4h]\n\n v0 = sub_FFD8EEB6(); /*0xffd87ef4*/\n v1 = sub_FFD8CD6B(v0); /*0xffd87f00*/\n sub_FFD7F9AF(64, (int)\"(WDT) Readback = 0x%08x\\n\", v1); /*0xffd87f0a*/\n if ( (v1 & 0x4000) != 0 ) /*0xffd87f18*/\n {\n LOBYTE(v14) = 1; /*0xffd87f1c*/\n v2 = (v1 & 0x3FF) + 1; /*0xffd87f27*/\n }\n else\n {\n v14 = 0; /*0xffd87f2e*/\n v2 = 0; /*0xffd87f32*/\n }\n v3 = sub_FFD8AD54(); /*0xffd87f34*/\n result = (*(int (__cdecl **)(int, int, int, int *))(*(_DWORD *)v3 + 52))(v3, 4, 28, &v13); /*0xffd87f45*/\n if ( result >= 0 ) /*0xffd87f4d*/\n {\n v5 = v14; /*0xffd87f5c*/\n v6 = (_DWORD *)(v13 + 8); /*0xffd87f60*/\n *(_DWORD *)(v13 + 8) = unk_FFD97F0C; /*0xffd87f63*/\n *++v6 = unk_FFD97F10; /*0xffd87f64*/\n *++v6 = unk_FFD97F14; /*0xffd87f65*/\n v6[1] = unk_FFD97F18; /*0xffd87f66*/\n *(_BYTE *)(v13 + 26) = v5; /*0xffd87f75*/\n *(_WORD *)(v13 + 24) = v2; /*0xffd87f7c*/\n if ( (v1 & 0x3000000) != 0 ) /*0xffd87f82*/\n {\n sub_FFD7F9AF(0x80000000, (int)\"(WDT) Expiration detected.\\n\", v1); /*0xffd87f8b*/\n v7 = v1 & 0xFC3FFFFF | 0x3800000; /*0xffd87f99*/\n }\n else\n {\n if ( (v1 & 0x400000) == 0 || sub_FFD87E99() ) /*0xffd87fa9*/\n {\n sub_FFD7F9AF(64, (int)\"(WDT) Status OK.\\n\", v1); /*0xffd87fcf*/\n v8 = v1 & 0xFF7FFFFF; /*0xffd87fd7*/\n }\n else\n {\n sub_FFD7F9AF(0x80000000, (int)\"(WDT) Unexpected reset detected and ignored.\\n\"); /*0xffd87fb8*/\n v8 = v1 & 0xFF3FFFFF; /*0xffd87fbf*/\n }\n v7 = v8 | 0x3000000; /*0xffd87fdd*/\n }\n v9 = sub_FFD8EEB6(); /*0xffd87fdf*/\n sub_FFD8CD97(v9, v7); /*0xffd87fe8*/\n sub_FFD7F948(&unk_FFD9816C); /*0xffd87ff2*/\n v10 = sub_FFD7F948(&unk_FFD98144); /*0xffd87ffc*/\n v11 = v10; /*0xffd88001*/\n if ( v10 < 0 ) /*0xffd88005*/\n {\n sub_FFD7F9AF(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v10); /*0xffd8800e*/\n v12 = sub_FFD7F97E(); /*0xffd88016*/\n if ( v12 ) /*0xffd8801d*/\n (*(void (__cdecl **)(const char *, int, const char *))(v12 + 4))( /*0xffd8802e*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\Wdt.c\",\n 216,\n \"!EFI_ERROR (Status)\");\n }\n return v11; /*0xffd88034*/\n }\n return result; /*0xffd88036*/\n}","refs":[{"addr":"0xffd8eeb6","name":"sub_FFD8EEB6"},{"addr":"0xffd8cd6b","name":"sub_FFD8CD6B"},{"addr":"0xffd7f9af","name":"sub_FFD7F9AF"},{"addr":"0xffd945a8","name":"aWdtReadback0x0","string":"(WDT) Readback = 0x%08x\n"},{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd97f0c","name":"unk_FFD97F0C"},{"addr":"0xffd97f10","name":"unk_FFD97F10"},{"addr":"0xffd97f14","name":"unk_FFD97F14"},{"addr":"0xffd97f18","name":"unk_FFD97F18"},{"addr":"0xffd945c4","name":"aWdtExpirationD","string":"(WDT) Expiration detected.\n"},{"addr":"0xffd94610","name":"aWdtStatusOk","string":"(WDT) Status OK.\n"},{"addr":"0xffd945e0","name":"aWdtUnexpectedR","string":"(WDT) Unexpected reset detected and ignored.\n"},{"addr":"0xffd87e99","name":"sub_FFD87E99"},{"addr":"0xffd8cd97","name":"sub_FFD8CD97"},{"addr":"0xffd7f948","name":"sub_FFD7F948"},{"addr":"0xffd9816c","name":"unk_FFD9816C"},{"addr":"0xffd98144","name":"unk_FFD98144"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"sub_FFD7F97E"},{"addr":"0xffd94624","name":"aEHsPurleysktpk_8","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\Wdt.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]}