int __fastcall TraceHubInitialize(char a1)
{
  int v2; // esi
  int result; // eax
  unsigned int v4; // [esp+Ch] [ebp-4h] BYREF

  DebugPrint(64, (int)"TraceHubInitialize() - Start\n"); /*0xffd7fd84*/
  sub_FFD8C909(&v4); /*0xffd7fd8c*/
  *(_BYTE *)(v4 + 1488) = 0; /*0xffd7fd9b*/
  v2 = sub_FFD8CBBA(0, 31, 7); /*0xffd7fdb0*/
  if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v2) == 0xFFFF ) /*0xffd7fdc1*/
    return DebugPrint(64, (int)"TraceHubInitialize() - End. TraceHub device is not present \n"); /*0xffd7fdc8*/
  if ( (*(_DWORD *)(v2 + 4) & 2) != 0 ) /*0xffd7fdd2*/
  {
    DebugPrint(64, (int)"TraceHubInitialize() - End. Early init done already \n"); /*0xffd7fdda*/
    DebugPrint(64, (int)"TraceHubInitialize() - FW_LBAR  = 0x%08x\n", *(_DWORD *)(v2 + 112)); /*0xffd7fde9*/
    DebugPrint(64, (int)"TraceHubInitialize() - MTB_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 16)); /*0xffd7fdfb*/
    DebugPrint(64, (int)"TraceHubInitialize() - SW_LBAR  = 0x%08x\n", *(_DWORD *)(v2 + 24)); /*0xffd7fe0d*/
    result = MEMORY[0xFE1000E0]; /*0xffd7fe1a*/
    if ( (MEMORY[0xFE1000E0] & 0x1000000) != 0 ) /*0xffd7fe21*/
      return DebugPrint(64, (int)"TraceHubInitialize() - Trace Hub enabled due to SCRPD0.24\n"); /*0xffd7fe2c*/
  }
  else
  {
    DebugPrint(64, (int)"TraceHubInitialize() - Setting MTB_BAR\n"); /*0xffd7fe37*/
    *(_DWORD *)(v2 + 16) = -32505856; /*0xffd7fe3e*/
    *(_DWORD *)(v2 + 20) = 0; /*0xffd7fe47*/
    *(_BYTE *)(v2 + 4) |= 2u; /*0xffd7fe4f*/
    if ( (MEMORY[0xFE1000E0] & 0x1000000) != 0 || a1 ) /*0xffd7fe62*/
    {
      MEMORY[0xFE1000CC] = 357000000; /*0xffd7fe91*/
      *(_BYTE *)(v2 + 4) = 0; /*0xffd7fe9c*/
      DebugPrint(64, (int)"TraceHubInitialize() - Setting SW_BAR\n"); /*0xffd7fe9f*/
      *(_DWORD *)(v2 + 24) = -31457280; /*0xffd7fea9*/
      *(_DWORD *)(v2 + 28) = 0; /*0xffd7feb1*/
      DebugPrint(64, (int)"TraceHubInitialize() - Setting FW_BAR\n"); /*0xffd7feb8*/
      SetTraceHubFwBar(); /*0xffd7febd*/
      DebugPrint(64, (int)"TraceHubInitialize() - Enabling MSE and BME\n"); /*0xffd7fec8*/
      *(_BYTE *)(v2 + 4) |= 6u; /*0xffd7fed8*/
      DebugPrint(64, (int)"TraceHubInitialize () Assigned BARs:\n"); /*0xffd7fedb*/
      DebugPrint(64, (int)"TraceHubInitialize () FW_LBAR  = 0x%08x\n", *(_DWORD *)(v2 + 112)); /*0xffd7feea*/
      DebugPrint(64, (int)"TraceHubInitialize () MTB_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 16)); /*0xffd7fefc*/
      DebugPrint(64, (int)"TraceHubInitialize () SW_LBAR  = 0x%08x\n", *(_DWORD *)(v2 + 24)); /*0xffd7ff0e*/
      return DebugPrint(64, (int)"TraceHubInitialize () - End\n"); /*0xffd7ff1c*/
    }
    else
    {
      *(_BYTE *)(v2 + 4) = 0; /*0xffd7fe6a*/
      DebugPrint(64, (int)"TraceHubInitialize() - Clearing MTB_BAR\n"); /*0xffd7fe6d*/
      *(_DWORD *)(v2 + 16) = 0; /*0xffd7fe78*/
      return DebugPrint( /*0xffd7fe7f*/
               64,
               (int)"TraceHubInitialize() - End. STT disconnected and Trace Hub requested to be disable\n");
    }
  }
  return result; /*0xffd7ff23*/
}
