int PchFabricErrorCheck()
{
  int v0; // eax
  int v1; // eax
  unsigned __int8 *v2; // esi
  int v3; // edi
  unsigned int i; // ebp
  unsigned int v5; // ecx
  unsigned int v6; // edx
  unsigned int v7; // ebx
  unsigned __int8 v8; // cl
  unsigned int v9; // ebx
  int v10; // ebx
  unsigned int v11; // eax
  int result; // eax
  int v13; // [esp+0h] [ebp-24h] BYREF
  int v14; // [esp+4h] [ebp-20h]
  int v15; // [esp+8h] [ebp-1Ch]
  _DWORD *v16; // [esp+Ch] [ebp-18h] BYREF
  int n10; // [esp+10h] [ebp-14h]
  int v18; // [esp+14h] [ebp-10h] BYREF
  int v19; // [esp+18h] [ebp-Ch] BYREF
  unsigned int v20; // [esp+1Ch] [ebp-8h]
  unsigned int v21; // [esp+20h] [ebp-4h]

  v13 = 0; /*0xffd80213*/
  v0 = sub_FFD8AD54(); /*0xffd80217*/
  if ( (*(int (__cdecl **)(int, int, _DWORD **))(*(_DWORD *)v0 + 76))(v0, 4, &v16) ) /*0xffd80226*/
  {
    v1 = GetReportStatusCodePpi(); /*0xffd80230*/
    if ( v1 ) /*0xffd80237*/
      (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffd80248*/
        "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c",
        456,
        "Status == 0");
  }
  *v16 = 0; /*0xffd80255*/
  v2 = (unsigned __int8 *)&unk_FFD980CC; /*0xffd80258*/
  v15 = 0; /*0xffd8025d*/
  n10 = 10; /*0xffd80263*/
  do
  {
    v3 = 0; /*0xffd8026b*/
    for ( i = 0; i < 0xC00; i += 512 )
    {
      v5 = 0; /*0xffd80272*/
      v6 = i + *((_DWORD *)v2 + 2); /*0xffd80274*/
      v14 = 0; /*0xffd80276*/
      v21 = v6; /*0xffd8027a*/
      if ( v2[v3 + 1] )
      {
        while ( 1 ) /*0xffd80288*/
        {
          v7 = v5; /*0xffd80288*/
          v8 = *v2; /*0xffd8028e*/
          v9 = v6 + 32 * v7; /*0xffd80294*/
          v20 = v9; /*0xffd8029b*/
          sub_FFD8C2A0(v8, v9, 4, &v18); /*0xffd8029f*/
          sub_FFD8C2A0(*v2, v9, 4, &v19); /*0xffd802b0*/
          v10 = v18; /*0xffd802b5*/
          if ( v18 == v19 ) /*0xffd802c0*/
          {
            v13 = v18; /*0xffd802dd*/
          }
          else
          {
            sub_FFD8C2A0(*v2, v20, 4, &v13); /*0xffd802d0*/
            v10 = v13; /*0xffd802d5*/
          }
          if ( v10 ) /*0xffd802e3*/
            break; /*0xffd802e3*/
          v11 = v2[v3 + 1]; /*0xffd802e9*/
          v5 = v14 + 1; /*0xffd802ee*/
          v6 = v21; /*0xffd802ef*/
          v14 = v5; /*0xffd802f3*/
          if ( v5 >= v11 ) /*0xffd802f9*/
            goto LABEL_14; /*0xffd802f9*/
        }
        *v16 |= (v10 & 7) << v15; /*0xffd80311*/
        DebugPrint(0x80000000, (int)"ERROR: Internal fabric error detected!! ");
        DebugPrint( /*0xffd80331*/
          0x80000000,
          (int)"PSF PID:0x%x, RSx/PortGroup:0x%x, Port:0x%x, Channel:0, error bits:0x%x\n",
          *v2,
          v3,
          v14,
          v10);
      }
LABEL_14:
      ++v3; /*0xffd8033f*/
    }
    v15 += 3; /*0xffd8034c*/
    v2 += 12; /*0xffd80351*/
    --n10; /*0xffd80354*/
  }
  while ( n10 );
  result = sub_FFD8CFB4(&unk_FFD97F6C, 4); /*0xffd8036a*/
  if ( !result ) /*0xffd80376*/
  {
    result = GetReportStatusCodePpi(); /*0xffd80378*/
    if ( result ) /*0xffd8037f*/
      return (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffd80390*/
               "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c",
               504,
               "HobPtr != 0");
  }
  return result; /*0xffd80396*/
}
