// 0xffd80210
{"addr":"0xffd80210","code":"int sub_FFD80210()\n{\n int v0; // eax\n int v1; // eax\n unsigned __int8 *v2; // esi\n int v3; // edi\n unsigned int i; // ebp\n unsigned int v5; // ecx\n unsigned int v6; // edx\n unsigned int v7; // ebx\n unsigned __int8 v8; // cl\n unsigned int v9; // ebx\n int v10; // ebx\n unsigned int v11; // eax\n int result; // eax\n int v13; // [esp+0h] [ebp-24h] BYREF\n int v14; // [esp+4h] [ebp-20h]\n int v15; // [esp+8h] [ebp-1Ch]\n _DWORD *v16; // [esp+Ch] [ebp-18h] BYREF\n int n10; // [esp+10h] [ebp-14h]\n int v18; // [esp+14h] [ebp-10h] BYREF\n int v19; // [esp+18h] [ebp-Ch] BYREF\n unsigned int v20; // [esp+1Ch] [ebp-8h]\n unsigned int v21; // [esp+20h] [ebp-4h]\n\n v13 = 0; /*0xffd80213*/\n v0 = sub_FFD8AD54(); /*0xffd80217*/\n if ( (*(int (__cdecl **)(int, int, _DWORD **))(*(_DWORD *)v0 + 76))(v0, 4, &v16) ) /*0xffd80226*/\n {\n v1 = sub_FFD7F97E(); /*0xffd80230*/\n if ( v1 ) /*0xffd80237*/\n (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffd80248*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 456,\n \"Status == 0\");\n }\n *v16 = 0; /*0xffd80255*/\n v2 = (unsigned __int8 *)&unk_FFD980CC; /*0xffd80258*/\n v15 = 0; /*0xffd8025d*/\n n10 = 10; /*0xffd80263*/\n do\n {\n v3 = 0; /*0xffd8026b*/\n for ( i = 0; i < 0xC00; i += 512 )\n {\n v5 = 0; /*0xffd80272*/\n v6 = i + *((_DWORD *)v2 + 2); /*0xffd80274*/\n v14 = 0; /*0xffd80276*/\n v21 = v6; /*0xffd8027a*/\n if ( v2[v3 + 1] )\n {\n while ( 1 ) /*0xffd80288*/\n {\n v7 = v5; /*0xffd80288*/\n v8 = *v2; /*0xffd8028e*/\n v9 = v6 + 32 * v7; /*0xffd80294*/\n v20 = v9; /*0xffd8029b*/\n sub_FFD8C2A0(v8, v9, 4, &v18); /*0xffd8029f*/\n sub_FFD8C2A0(*v2, v9, 4, &v19); /*0xffd802b0*/\n v10 = v18; /*0xffd802b5*/\n if ( v18 == v19 ) /*0xffd802c0*/\n {\n v13 = v18; /*0xffd802dd*/\n }\n else\n {\n sub_FFD8C2A0(*v2, v20, 4, &v13); /*0xffd802d0*/\n v10 = v13; /*0xffd802d5*/\n }\n if ( v10 ) /*0xffd802e3*/\n break; /*0xffd802e3*/\n v11 = v2[v3 + 1]; /*0xffd802e9*/\n v5 = v14 + 1; /*0xffd802ee*/\n v6 = v21; /*0xffd802ef*/\n v14 = v5; /*0xffd802f3*/\n if ( v5 >= v11 ) /*0xffd802f9*/\n goto LABEL_14; /*0xffd802f9*/\n }\n *v16 |= (v10 & 7) << v15; /*0xffd80311*/\n sub_FFD7F9AF(0x80000000, (int)\"ERROR: Internal fabric error detected!! \");\n sub_FFD7F9AF( /*0xffd80331*/\n 0x80000000,\n (int)\"PSF PID:0x%x, RSx/PortGroup:0x%x, Port:0x%x, Channel:0, error bits:0x%x\\n\",\n *v2,\n v3,\n v14,\n v10);\n }\nLABEL_14:\n ++v3; /*0xffd8033f*/\n }\n v15 += 3; /*0xffd8034c*/\n v2 += 12; /*0xffd80351*/\n --n10; /*0xffd80354*/\n }\n while ( n10 );\n result = sub_FFD8CFB4(&unk_FFD97F6C, 4); /*0xffd8036a*/\n if ( !result ) /*0xffd80376*/\n {\n result = sub_FFD7F97E(); /*0xffd80378*/\n if ( result ) /*0xffd8037f*/\n return (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffd80390*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 504,\n \"HobPtr != 0\");\n }\n return result; /*0xffd80396*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd7f97e","name":"sub_FFD7F97E"},{"addr":"0xffd91f24","name":"aEHsPurleysktpk_1","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c"},{"addr":"0xffd9204c","name":"aStatus0","string":"Status == 0"},{"addr":"0xffd980cc","name":"unk_FFD980CC"},{"addr":"0xffd8c2a0","name":"sub_FFD8C2A0"},{"addr":"0xffd7f9af","name":"sub_FFD7F9AF"},{"addr":"0xffd92058","name":"aErrorInternalF","string":"ERROR: Internal fabric error detected!! "},{"addr":"0xffd92084","name":"aPsfPid0xXRsxPo","string":"PSF PID:0x%x, RSx/PortGroup:0x%x, Port:0x%x, Channel:0, error bits:0x%x\n"},{"addr":"0xffd8cfb4","name":"sub_FFD8CFB4"},{"addr":"0xffd97f6c","name":"unk_FFD97F6C"},{"addr":"0xffd920d0","name":"aHobptr0","string":"HobPtr != 0"}]}