Newer
Older
AMI-Aptio-BIOS-Reversed / LenovoServerPkg / SetupDefaults / SetupDefaultLoad / SetupDefaultLoadBmc.c
@Ajax Dong Ajax Dong 2 days ago 4 KB Recovering names (cleanups)
char __fastcall SendBmcCommand(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
  __int64 v4; // rax
  __int64 v6; // rax
  char v7; // cl
  char n3; // [rsp+50h] [rbp+8h] BYREF
  char v9; // [rsp+58h] [rbp+10h] BYREF
  char n2; // [rsp+60h] [rbp+18h] BYREF

  v4 = qword_7920; /*0x7d0*/
  if ( !qword_7920 ) /*0x7da*/
  {
    if ( (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_79B8 + 320))(&unk_7450, 0, &qword_7920) < 0 ) /*0x7fc*/
    {
      qword_7920 = 0; /*0x7fe*/
      return 85; /*0x80b*/
    }
    v4 = qword_7920; /*0x80d*/
  }
  n2 = 2; /*0x819*/
  LOBYTE(a4) = 69; /*0x823*/
  n3 = 3; /*0x82b*/
  LOBYTE(a2) = 46; /*0x847*/
  v6 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, char *, char, char *, char *))(v4 + 16))( /*0x84c*/
         v4,
         a2,
         0,
         a4,
         &n2,
         1,
         &v9,
         &n3);
  v7 = v9; /*0x84f*/
  if ( v6 < 0 ) /*0x85c*/
    return 85; /*0x85c*/
  return v7; /*0x861*/
}

__int64 __fastcall SendBmcByteCommand(char a1, _BYTE *a2, __int64 a3, __int64 a4)
{
  __int64 v4; // rax
  _BYTE *v5; // rbx
  __int64 result; // rax
  _BYTE v8[24]; // [rsp+40h] [rbp-18h] BYREF
  char n3; // [rsp+70h] [rbp+18h] BYREF
  char v10; // [rsp+78h] [rbp+20h] BYREF

  v4 = qword_7920; /*0x872*/
  v5 = a2; /*0x879*/
  if ( !qword_7920 ) /*0x882*/
  {
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_79B8 + 320))(&unk_7450, 0, &qword_7920); /*0x89b*/
    if ( result < 0 ) /*0x8a4*/
    {
      qword_7920 = 0; /*0x8a6*/
      return result; /*0x8ae*/
    }
    v4 = qword_7920; /*0x8b0*/
  }
  v8[0] = a1; /*0x8bc*/
  LOBYTE(a4) = 44; /*0x8c6*/
  n3 = 3; /*0x8ce*/
  LOBYTE(a2) = 46; /*0x8ea*/
  result = (*(__int64 (__fastcall **)(__int64, _BYTE *, _QWORD, __int64, _BYTE *, char, char *, char *))(v4 + 16))( /*0x8ef*/
             v4,
             a2,
             0,
             a4,
             v8,
             1,
             &v10,
             &n3);
  if ( result >= 0 ) /*0x8f5*/
  {
    *v5 = v10; /*0x8fb*/
    return 0; /*0x8fd*/
  }
  return result; /*0x904*/
}

__int64 __fastcall SendBmcTwoByteCommand(char a1, __int64 a2, __int64 a3, __int64 a4)
{
  __int64 v4; // rax
  char v5; // bl
  __int64 result; // rax
  _BYTE v8[24]; // [rsp+40h] [rbp-18h] BYREF
  char n3; // [rsp+70h] [rbp+18h] BYREF
  char v10; // [rsp+78h] [rbp+20h] BYREF

  v4 = qword_7920; /*0x916*/
  v5 = a2; /*0x91d*/
  if ( !qword_7920 ) /*0x925*/
  {
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_79B8 + 320))(&unk_7450, 0, &qword_7920); /*0x93e*/
    if ( result < 0 ) /*0x947*/
    {
      qword_7920 = 0; /*0x949*/
      return result; /*0x951*/
    }
    v4 = qword_7920; /*0x953*/
  }
  v8[0] = a1; /*0x95f*/
  LOBYTE(a4) = 43; /*0x969*/
  v8[1] = v5; /*0x971*/
  LOBYTE(a2) = 46; /*0x98c*/
  n3 = 3; /*0x991*/
  return (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, _BYTE *, char, char *, char *))(v4 + 16))( /*0x99e*/
           v4,
           a2,
           0,
           a4,
           v8,
           2,
           &v10,
           &n3);
}

__int64 __fastcall SendBmcMultiByteCommand(char *a1, __int64 a2, __int64 a3, __int64 a4)
{
  __int64 v4; // r10
  __int64 result; // rax
  unsigned __int8 v7; // di
  int v8; // [rsp+28h] [rbp-20h]
  char v9; // [rsp+58h] [rbp+10h] BYREF
  char v10; // [rsp+60h] [rbp+18h] BYREF
  char v11; // [rsp+68h] [rbp+20h] BYREF
  unsigned __int8 v12; // [rsp+69h] [rbp+21h]
  char v13; // [rsp+6Ah] [rbp+22h]
  char v14; // [rsp+6Bh] [rbp+23h]

  v4 = qword_7920; /*0x9ae*/
  result = 0; /*0x9b5*/
  if ( !qword_7920 ) /*0x9bd*/
  {
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_79B8 + 320))(&unk_7450, 0, &qword_7920); /*0x9d6*/
    if ( result < 0 ) /*0x9df*/
    {
      qword_7920 = 0; /*0x9e1*/
      return result; /*0x9e1*/
    }
    v4 = qword_7920; /*0x9f4*/
  }
  v7 = 0; /*0x9fb*/
  if ( a1[1] ) /*0x9fe*/
  {
    while ( 1 ) /*0xa06*/
    {
      LOBYTE(a4) = 18; /*0xa06*/
      v11 = *a1; /*0xa09*/
      LOBYTE(a2) = 56; /*0xa14*/
      v12 = v7; /*0xa16*/
      v14 = 0; /*0xa1b*/
      v9 = 1; /*0xa20*/
      v13 = a1[v7 + 2]; /*0xa42*/
      LOBYTE(v8) = 4; /*0xa49*/
      result = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, char *, int, char *, char *))(v4 + 16))( /*0xa53*/
                 v4,
                 a2,
                 0,
                 a4,
                 &v11,
                 v8,
                 &v10,
                 &v9);
      if ( ++v7 >= (unsigned __int8)a1[1] ) /*0xa5e*/
        break; /*0xa5e*/
      v4 = qword_7920; /*0xa60*/
    }
  }
  return result; /*0x9ee*/
}