__int64 __fastcall sub_3C80(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
__int64 v4; // rax
__int64 v5; // rcx
__int64 v6; // rdi
__int64 v7; // r8
__int64 result; // rax
__int64 v9; // rdx
__int64 v10; // rcx
__int64 v11; // rdi
__int64 v12; // r8
__int64 v13; // r9
__int64 v14; // rdi
__int64 v15; // rdx
__int64 v16; // rcx
__int64 v17; // r8
__int64 v18; // r9
__int64 v19; // rdx
__int64 v20; // rcx
__int64 v21; // r8
__int64 v22; // r9
int v23; // [rsp+28h] [rbp-30h]
_DWORD v24[6]; // [rsp+40h] [rbp-18h] BYREF
unsigned __int8 v25; // [rsp+70h] [rbp+18h] BYREF
char v26; // [rsp+78h] [rbp+20h] BYREF
LOBYTE(v24[0]) = 0; /*0x3c8c*/
v25 = 0; /*0x3c90*/
v26 = 1; /*0x3c94*/
v4 = qword_9690; /*0x3c98*/
if ( !qword_9690 ) /*0x3ca2*/
{
v6 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_96A8 + 320))(&unk_9460, 0, &qword_9690); /*0x3cc1*/
if ( v6 < 0 ) /*0x3cc7*/
{
result = sub_7F8(v5, a2, v7, a4); /*0x3cc9*/
if ( (_BYTE)result ) /*0x3cd0*/
{
result = sub_804(64); /*0x3cdd*/
if ( (_BYTE)result ) /*0x3ce4*/
return sub_740(64, "[System Inventory] Locate gIpmiTransport Protocol fail. Status - %r\n", v6); /*0x3cf7*/
}
return result; /*0x3cf7*/
}
v4 = qword_9690; /*0x3d01*/
}
LOBYTE(a4) = -85; /*0x3d0d*/
LOBYTE(a2) = 50; /*0x3d1d*/
v11 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, _QWORD, _BYTE, unsigned __int8 *, char *, _DWORD))(v4 + 16))( /*0x3d35*/
v4,
a2,
0,
a4,
0,
0,
&v25,
&v26,
v24[0]);
if ( v11 < 0 || v25 == 1 ) /*0x3d42*/
{
if ( (unsigned __int8)sub_7F8(v10, v9, v12, v13) && (unsigned __int8)sub_804(64) ) /*0x3dcb*/
sub_740(64, "[System Inventory] send gIpmiTransport Protocol Status - %r\n", v11); /*0x3de0*/
result = sub_7F8(v20, v19, v21, v22); /*0x3de5*/
if ( (_BYTE)result ) /*0x3dec*/
{
result = sub_804(64); /*0x3df1*/
if ( (_BYTE)result ) /*0x3df8*/
return sub_740(64, "[System Inventory] Check Current BMC virtual USB status - %x\n", v25); /*0x3e0a*/
}
}
else
{
LOBYTE(v24[0]) = 1; /*0x3d49*/
LOBYTE(v13) = -86; /*0x3d53*/
LOBYTE(v9) = 50; /*0x3d63*/
LOBYTE(v23) = 1; /*0x3d6a*/
v14 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, _DWORD *, int, unsigned __int8 *, char *))(qword_9690 + 16))( /*0x3d8d*/
qword_9690,
v9,
0,
v13,
v24,
v23,
&v25,
&v26);
(*(void (__fastcall **)(__int64))(qword_96A8 + 248))(3000000); /*0x3d90*/
result = sub_7F8(v16, v15, v17, v18); /*0x3d96*/
if ( (_BYTE)result ) /*0x3d9d*/
{
result = sub_804(64); /*0x3da6*/
if ( (_BYTE)result ) /*0x3dad*/
return sub_740(64, "[System Inventory] Disabling BMC USB Interface Status - %r\n", v14); /*0x3db6*/
}
}
return result; /*0x3e14*/
}