Newer
Older
AMI-Aptio-BIOS-Reversed / UefiCpuPkg / PiSmmCommunication / PiSmmCommunicationPei / PiSmmCommunicationPei.c
@Ajax Dong Ajax Dong 2 days ago 6 KB Recovering names (cleanups)
#include <Uefi.h>
#include <PiPei.h>

void *CopyMem(char *dst, char *src, unsigned int count)
{
  unsigned int count_1;
  char         *dst_1;
  char         *src_1;

  count_1 = count;
  if (src < dst && &src[count - 1] >= dst) {
    src_1 = &src[count - 1];
    dst_1 = &dst[count - 1];
  } else {
    count_1 = count & 3;
    qmemcpy(dst, src, 4 * (count >> 2));
    src_1 = &src[4 * (count >> 2)];
    dst_1 = &dst[4 * (count >> 2)];
  }

  qmemcpy(dst_1, src_1, count_1);
  return dst;
}

void *SetMem(void *buf, unsigned int count, char value)
{
  memset(buf, value, count);
  return buf;
}

int fn_addr(int a1, int a2, int a3, int a4)
{
  do {
    *(_DWORD *)(a1 + 8 * a2 - 8) = a3;
    *(_DWORD *)(a1 + 8 * a2-- - 4) = a4;
  } while (a2);

  return a1;
}

void *SetMem32(void *buf, unsigned int count, int value)
{
  memset32(buf, value, count);
  return buf;
}

EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  return PiSmmCommunicationPeiModuleEntryPoint();
}

int InitCommunicationContext(void)
{
  _DWORD   *v2;
  _DWORD   *v3;
  unsigned int v4;
  int      i_1;
  int      v6;
  int      j;
  int      v9;
  unsigned int v10;
  int      v11;
  int      i;

  v3 = v2;
  if (0) {
    DebugPrint(64, "InitCommunicationContext - SmmConfigurationTable: %x\n", v2[23]);
    DebugPrint(64, "InitCommunicationContext - NumberOfTableEntries: %x\n", v3[22]);
    v10 = v3[22];
    i_1 = v3[23];
    v11 = 0;
    if (v10) {
      for (i = i_1; !sub_FFE33012(i, (int)&unk_FFE337C0); i += 20) {
        if (++v11 >= v10)
          return 0;
      }
      v9 = 20 * v11;
      return *(_DWORD *)(v9 + i_1 + 16);
    }
    return 0;
  }

  DebugPrint(64, "InitCommunicationContext - SmmConfigurationTable: %x\n", v2[40]);
  DebugPrint(64, "InitCommunicationContext - NumberOfTableEntries: %x\n", v3[38]);
  v4 = v3[38];
  i_1 = v3[40];
  v6 = 0;
  if (!v4)
    return 0;
  for (j = i_1; !sub_FFE33012(j, (int)&unk_FFE337C0); j += 24) {
    if (++v6 >= v4)
      return 0;
  }
  v9 = 24 * v6;
  return *(_DWORD *)(v9 + i_1 + 16);
}

char *InitCommunicationContext_1(void)
{
  _WORD *v0;
  int    v1;
  int   *p_n1397574995;
  void  *v3;
  char  *src;
  int    v5;
  char  *dst;
  int    v7;

  v0 = sub_FFE32ED1(&unk_FFE337A0);
  if (!v0) {
    v1 = sub_FFE32DA5();
    if (v1)
      (*(void (**)(const char *, int, const char *))(v1 + 4))(
        "e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
        250,
        "GuidHob != ((void *) 0)");
  }
  p_n1397574995 = (int *)*((_DWORD *)v0 + 8);
  DebugPrint(64, "InitCommunicationContext - SmmS3ResumeState: %x\n", p_n1397574995);
  DebugPrint(64, "InitCommunicationContext - Smst: %x\n", *(int *)((char *)p_n1397574995 + 90));
  src = (char *)sub_FFE329BA(*p_n1397574995, p_n1397574995[1]);
  if (!src) {
    v5 = sub_FFE32DA5();
    if (v5)
      (*(void (**)(const char *, int, const char *))(v5 + 4))(
        "e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
        262,
        "SmmCommunicationContext != ((void *) 0)");
  }
  dst = (char *)sub_FFE32F54(v3);
  if (!dst) {
    v7 = sub_FFE32DA5();
    if (v7)
      (*(void (**)(const char *, int, const char *))(v7 + 4))(
        "e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
        180,
        "Hob.Raw");
  }
  return sub_FFE32F72(dst, src, 0x10u);
}

EFI_STATUS PiSmmCommunicationPeiCommunicate(int a1, int a2)
{
  int     v3;
  int     v4;
  _WORD  *v5;
  int     v6;
  _DWORD  *v7;
  int     v8;
  int     v9;
  int     v10;
  _DWORD  *v11;
  int   (**v12)(int, _DWORD, _BYTE *, int *, _DWORD, _DWORD);
  char    v13;
  int   (**v14)(int, _DWORD, char *, int *, _DWORD, _DWORD);
  int     v15;
  int     v16;

  DebugPrint(64, "PiSmmCommunicationPei Communicate Enter\n");
  if (!a2)
    return -2147483646;
  v3 = sub_FFE330D1();
  if ((*(int (**)(int, void *, _DWORD, _DWORD, int (***)(int, _DWORD, char *, int *, _DWORD, _DWORD)))(*(_DWORD *)v3 + 32))(
        v3, &unk_FFE337B0, 0, 0, &v14) < 0)
    return -2147483629;
  v4 = sub_FFE330D1();
  if ((*(int (**)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v4 + 32))(v4, &unk_FFE33780, 0, 0, &v15) < 0)
    return -2147483629;
  if (!*(_BYTE *)(v15 + 16)) {
    DebugPrint(64, "PiSmmCommunicationPei LockState - %x\n", 0);
    return -2147483629;
  }
  v5 = sub_FFE32ED1(&unk_FFE337C0);
  if (!v5) {
    v6 = sub_FFE32DA5();
    if (v6)
      (*(void (**)(const char *, int, const char *))(v6 + 4))(
        "e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
        155,
        "GuidHob != ((void *) 0)");
  }
  DebugPrint(
    64,
    "PiSmmCommunicationPei BufferPtrAddress - 0x%016lx, BufferPtr: 0x%016lx\n",
    *((_DWORD *)v5 + 8),
    *((_DWORD *)v5 + 9));
  v7 = (_DWORD *)*((_DWORD *)v5 + 8);
  *v7 = a2;
  v7[1] = 0;
  DebugPrint(64, "PiSmmCommunicationPei CommBuffer - %x\n", a2);
  v13 = *((_BYTE *)v5 + 28);
  v16 = 1;
  v12 = v14;
  v8 = sub_FFE330D1();
  v9 = (*v14)(v8, v12, &v13, &v16, 0, 0);
  if (v9 < 0) {
    DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9);
    v10 = sub_FFE32DA5();
    if (v10)
      (*(void (**)(const char *, int, const char *))(v10 + 4))(
        "e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
        357,
        "!EFI_ERROR (Status)");
  }
  v11 = (_DWORD *)*((_DWORD *)v5 + 8);
  *v11 = 0;
  v11[1] = 0;
  DebugPrint(64, "PiSmmCommunicationPei Communicate Exit\n");
  return 0;
}

EFI_STATUS PiSmmCommunicationPeiModuleEntryPoint(void)
{
  int    v0;
  int    v1;
  int    v2;
  int    v4;
  int    v5;
  int    v6;
  unsigned __int8 v7;
  int    v8;
  int    v9;
  int    v10;
  int    v11;
  int    n17;
  int    v13;

  v0 = sub_FFE330D1();
  v1 = (*(int (**)(int, int *))(*(_DWORD *)v0 + 40))(v0, &n17);
  if (v1 < 0) {
    DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v1);
    v2 = sub_FFE32DA5();
    if (v2)
      (*(void (**)(const char *, int, const char *))(v2 + 4))(
        "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c",
        216,
        "!EFI_ERROR (Status)");
  }
  if (n17 != 17)
    return -2147483645;
  v4 = sub_FFE330D1();
  v5 = 0;
  if ((*(int (**)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v4 + 32))(v4, &unk_FFE33780, 0, 0, &v13) < 0)
    return -2147483629;
  v6 = v13;
  v7 = *(_BYTE *)(v13 + 16);
  if (v7) {
    DebugPrint(64, "PiSmmCommunicationPei LockState - %x\n", v7);
    return -2147483633;
  }
  while (1) {
    v11 = v6;
    v8 = sub_FFE330D1();
    v9 = (*(int (**)(int, int, int))v13)(v8, v11, v5++);
    if (v9 < 0)
      break;
    v6 = v13;
  }
  InitCommunicationContext_1();
  v10 = sub_FFE330D1();
  (*(void (**)(int, void *))(*(_DWORD *)v10 + 24))(v10, &unk_FFE337D0);
  return 0;
}