/*
*4A43824B-4AA0-4F7F-9A4B-0C2102191361.c
*4A43824B-4AA0-4F7F-9A4B-0C2102191361 PEI module decompiled from IDA
*/
#include "4A43824B-4AA0-4F7F-9A4B-0C2102191361.h"
// RtkUsbUndiUnload @ 0x2a0
// attributes: thunk __int64 RtkUsbUndiUnload(__int64 a1)
{
return RtkUsbUndiStopChildren(a1);
}
// _ModuleEntryPoint @ 0x2a8 EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
double Status; // xmm3_8 EFI_BOOT_SERVICES *BootServices; // r9 __int64 Protocol; // rax __int64 v7; // rdx __int64 v8; // r8 __int64 v10; // [rsp+30h] [rbp+8h] BYREF qword_E300 = (__int64)ImageHandle; /*0x2b8*/
if ( !ImageHandle ) /*0x2c2*/
RtkUsbUndiAssert( /*0x2d5*/
(__int64)aFUefiEdk2Mdepk, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c"
51,
(__int64)aGimagehandleVo, // "gImageHandle != ((void *) 0)"
Status); // "gImageHandle != ((void *) 0)"
qword_E2F0 = (__int64)SystemTable; /*0x2da*/
if ( !SystemTable ) /*0x2e4*/
RtkUsbUndiAssert( /*0x2f7*/
(__int64)aFUefiEdk2Mdepk, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c"
57,
(__int64)aGstVoid0, // "gST != ((void *) 0)"
Status); // "gST != ((void *) 0)"
BootServices = SystemTable->BootServices; /*0x2fc*/
qword_E2F8 = (__int64)BootServices; /*0x300*/
if ( !BootServices ) /*0x30a*/
{
RtkUsbUndiAssert( /*0x31e*/
(__int64)aFUefiEdk2Mdepk, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c"
63,
(__int64)aGbsVoid0, // "gBS != ((void *) 0)"
Status); // "gBS != ((void *) 0)"
BootServices = (EFI_BOOT_SERVICES *)qword_E2F8; /*0x323*/
}
qword_E308 = (__int64)SystemTable->RuntimeServices; /*0x32e*/
if ( !qword_E308 ) /*0x338*/
{
RtkUsbUndiAssert( /*0x34b*/
(__int64)aFUefiEdk2Mdepk_0, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c"
47,
(__int64)aGrtVoid0, // "gRT != ((void *) 0)"
Status); // "gRT != ((void *) 0)"
BootServices = (EFI_BOOT_SERVICES *)qword_E2F8; /*0x350*/
}
Protocol = ((__int64 ( *)(EFI_HANDLE, void *, __int64 *))BootServices->HandleProtocol)( /*0x366*/
ImageHandle,
&unk_BB00,
&v10);
if ( Protocol < 0 ) /*0x370*/
{
RtkUsbUndiDebugPrint( /*0x381*/
0x80000000,
nASSERT_EFI_ERROR__Status____r__n, // "\nASSERT_EFI_ERROR (Status = %r)\n"
Protocol);
RtkUsbUndiAssert( /*0x399*/
(__int64)aFUefiEdk2Mdepk_1, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDriverEntryPoint\\DriverEntryPoint.c"
126,
(__int64)aEfiErrorStatus, // "!EFI_ERROR (Status)"
Status); // "!EFI_ERROR (Status)"
}
*(_QWORD *)(v10 + 88) = RtkUsbUndiUnload; /*0x3aa*/
return RtkUsbUndiDriverEntryPoint((__int64)ImageHandle, v7, v8, Status); /*0x3bb*/
}
// RtkUsbUndiDriverEntryPoint @ 0x3c4 __int64 RtkUsbUndiDriverEntryPoint(__int64 ImageHandle, __int64 a2, __int64 a3, double a4)
{
__int64 v4; // rax __int64 Result; // rbx MEMORY[0xBBA0] = ImageHandle; /*0x3d1*/
MEMORY[0xBBA8] = ImageHandle; /*0x3d8*/
v4 = (*(__int64 ( **)(__int64 *, void *, __int64 ( **)(), _QWORD))(qword_E2F8 + 328))( /*0x3f7*/
&MEMORY[0xBBA8],
&unk_BB60,
off_BB80,
0);
Result = v4; /*0x3fd*/
if ( v4 >= 0 ) /*0x403*/
return (*(__int64 ( **)(__int64 *, void *, __int64 ( **)(), void *, __int64 ( **)(), void *, _QWORD, _QWORD))(qword_E2F8 + 328))( /*0x486*/
&MEMORY[0xBBA8],
&unk_BB70,
&off_BD10,
&unk_BB10,
&off_BD28,
&unk_BB30,
&off_CE68,
0);
RtkUsbUndiDebugPrint( /*0x414*/
0x80000000,
nASSERT_EFI_ERROR__Status____r__n, // "\nASSERT_EFI_ERROR (Status = %r)\n"
v4);
RtkUsbUndiAssert( /*0x42c*/
(__int64)MEMORY[0xDAC0], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiDriverModel.c"
68,
(__int64)aEfiErrorStatus, // "!EFI_ERROR (Status)"
a4); // "!EFI_ERROR (Status)"
return Result; /*0x48c*/
}
// RtkUsbUndiDriverBindingSupported @ 0x494 __int64 RtkUsbUndiDriverBindingSupported(__int64 a1, __int64 a2, __int64 a3, double a4)
{
unsigned __int8 Index; // si __int64 result; // rax __int64 v8; // r8 __int64 Result; // rbx __int64 v10; // [rsp+30h] [rbp-28h] BYREF _BYTE v11[8]; // [rsp+38h] [rbp-20h] BYREF __int16 v12; // [rsp+40h] [rbp-18h]
__int16 v13; // [rsp+42h] [rbp-16h]
__int64 i; // [rsp+78h] [rbp+20h] BYREF Index = 0; /*0x4c3*/
result = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 6, &i); /*0x4c6*/
if ( result >= 0 ) /*0x4cc*/
{
RtkUsbUndiZeroMem(i, 6u, v8, a4); /*0x4d9*/
result = (*(__int64 ( **)(__int64, void *, _QWORD, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x503*/
a2,
&unk_BB40,
0,
*(_QWORD *)(a1 + 40),
a2,
4);
if ( result >= 0 ) /*0x50c*/
{
result = (*(__int64 ( **)(__int64, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x539*/
a2,
&unk_BB50,
&v10,
*(_QWORD *)(a1 + 40),
a2,
16);
if ( result >= 0 ) /*0x542*/
{
Result = (*(__int64 ( **)(__int64, _BYTE *))(v10 + 48))(v10, v11); /*0x558*/
if ( Result >= 0 ) /*0x55e*/
{
Result = 0x8000000000000003uLL; /*0x56a*/
while ( v12 != *((_WORD *)&unk_BBB0 + 8 *Index) || v13 != *((_WORD *)&unk_BBB0 + 8 *Index + 1) ) /*0x58f*/
{
if ( *((_WORD *)&unk_BBB0 + 8 *Index) == 0xFFFF ) /*0x59c*/
goto LABEL_11; /*0x59c*/
++Index; /*0x59e*/
}
Result = 0; /*0x5aa*/
*(_WORD *)(i + 4) = *((_WORD *)&unk_BBB0 + 8 *Index + 2); /*0x5b7*/
}
LABEL_11:
(*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0x5bb*/
a2,
&unk_BB50,
*(_QWORD *)(a1 + 40),
a2);
return Result; /*0x5d9*/
}
}
}
return result; /*0x5eb*/
}
// RtkUsbUndiDriverBindingStart @ 0x5f4 __int64 RtkUsbUndiDriverBindingStart(__int64 a1, __int64 controllerHandle_1, __int64 a3, double a4)
{
__int64 result; // rax __int64 inited; // rbx __int64 zeroArg1; // r8 __int64 i_3; // rcx __int64 zeroArg2; // r8 __int16 checksumLen; // ax char checksumVal; // dl _BYTE *i; // r8 __int64 i_4; // rcx __int64 spinArg; // r8 __int64 protoInterface; // rcx __int64 protoOut; // [rsp+40h] [rbp-10h] BYREF __int64 protoOut2; // [rsp+48h] [rbp-8h] BYREF __int64 i_1; // [rsp+80h] [rbp+30h] BYREF __int64 controllerHandle; // [rsp+88h] [rbp+38h] BYREF __int64 i_2; // [rsp+98h] [rbp+48h] BYREF controllerHandle = controllerHandle_1; /*0x5f4*/
result = (*(__int64 ( **)(__int64, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x632*/
controllerHandle_1,
&unk_BB50,
&protoOut2,
*(_QWORD *)(a1 + 40),
controllerHandle_1,
16);
if ( result >= 0 ) /*0x63d*/
{
inited = (*(__int64 ( **)(__int64, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x670*/
controllerHandle,
&unk_BB40,
&protoOut,
*(_QWORD *)(a1 + 40),
controllerHandle,
16);
if ( inited < 0 ) /*0x676*/
{
LABEL_26:
(*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xaac*/
controllerHandle,
&unk_BB50,
*(_QWORD *)(a1 + 40),
controllerHandle);
return inited; /*0xacb*/
}
inited = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 5896, &i_1); /*0x696*/
if ( inited < 0 ) /*0x69c*/
{
LABEL_25:
(*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xa8d*/
controllerHandle,
&unk_BB40,
*(_QWORD *)(a1 + 40),
controllerHandle);
goto LABEL_26; /*0xaa6*/
}
RtkUsbUndiZeroMem(i_1, 0x1708u, zeroArg1, a4); /*0x6a9*/
i_3 = MEMORY[0xE2E8]; /*0x6ae*/
i_2 = 0; /*0x6b5*/
if ( !MEMORY[0xE2E8] ) /*0x6bc*/
{
inited = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 96, &i_2); /*0x6da*/
if ( inited < 0 ) /*0x6e0*/
{
LABEL_24:
(*(void ( **)(__int64))(qword_E2F8 + 72))(i_1); /*0xa7f*/
goto LABEL_25; /*0xa8a*/
}
RtkUsbUndiZeroMem(i_2, 0x60u, zeroArg2, a4); /*0x6ed*/
i_3 = i_2; /*0x6f2*/
if ( (i_2 & 0xF) != 0 ) /*0x6f9*/
i_3 = i_2 + 8; /*0x6fb*/
*(_DWORD *)(i_3 + 4) = 131104; /*0x6ff*/
*(_DWORD *)i_3 = 1163415585; /*0x70d*/
*(_QWORD *)(i_3 + 16) = RtkUsbUndiInterruptCallback; /*0x713*/
*(_WORD *)(i_3 + 8) = 4099; /*0x717*/
*(_BYTE *)(i_3 + 11) = 0; /*0x71d*/
*(_DWORD *)(i_3 + 12) = 1073792506; /*0x721*/
*(_DWORD *)(i_3 + 24) = 0x1000000; /*0x728*/
*(_DWORD *)(i_3 + 28) = 1380533072; /*0x72f*/
checksumLen = *(unsigned __int8 *)(i_3 + 4); /*0x736*/
MEMORY[0xE2E8] = i_3; /*0x73a*/
checksumVal = 0; /*0x741*/
for ( i = (_BYTE *)i_3; checksumLen; --checksumLen ) /*0x74a*/
checksumVal += *i++; /*0x74c*/
*(_BYTE *)(i_3 + 5) -= checksumVal; /*0x75e*/
}
*(_QWORD *)(i_1 + 368) = i_3; /*0x765*/
*(_WORD *)(i_1 + 396) = *(unsigned __int8 *)(i_3 + 7); /*0x774*/
RtkUsbUndiInitSpinlock2(i_1 + 424); /*0x786*/
*(_QWORD *)(i_1 + 16) = *(_QWORD *)(a1 + 40); /*0x793*/
*(_QWORD *)(i_1 + 8) = controllerHandle; /*0x79f*/
*(_QWORD *)(i_1 + 24) = protoOut; /*0x7ab*/
*(_BYTE *)(i_1 + 346) = 0; /*0x7ba*/
*(_QWORD *)(i_1 + 5296) = protoOut2; /*0x7c9*/
i_4 = i_1; /*0x7d0*/
qword_E920[*(unsigned __int16 *)(i_1 + 396)] = i_1; /*0x7db*/
*(_QWORD *)(i_4 + 408) = protoOut; /*0x7e3*/
inited = RtkUsbUndiInitSpinlock(i_1 + 424, (__int64)qword_E920, spinArg, a4); /*0x7fa*/
if ( !inited ) /*0x800*/
{
inited = RtkUsbUndiInitHardware((_QWORD *)(i_1 + 416), *(_BYTE **)(i_1 + 408), i_1 + 424, a4); /*0x824*/
*(_BYTE *)(i_1 + 5812) = 0; /*0x82b*/
if ( inited >= 0 ) /*0x835*/
{
inited = RtkUsbUndiInitPhy(i_1 + 424); /*0x84b*/
if ( inited >= 0 ) /*0x851*/
{
RtkUsbUndiSetupInterrupt(i_1); /*0x85b*/
*(_DWORD *)(i_1 + 4936) = 1; /*0x86b*/
*(_BYTE *)(i_1 + 4944) = 0; /*0x87c*/
*(_QWORD *)i_1 = 1768189557; /*0x88a*/
*(_QWORD *)(i_1 + 360) = 65537; /*0x895*/
*(_BYTE *)(i_1 + 392) = 1; /*0x8a4*/
*(_BYTE *)(i_1 + 393) = 3; /*0x8af*/
*(_BYTE *)(i_1 + 394) = 16; /*0x8ba*/
*(_DWORD *)(i_1 + 384) = 0; /*0x8c5*/
*(_QWORD *)(i_1 + 376) = 0; /*0x8cf*/
*(_BYTE *)(i_1 + 395) = 1; /*0x8da*/
*(_BYTE *)(i_1 + 388) = 85; /*0x8e5*/
*(_BYTE *)(i_1 + 389) = 78; /*0x8f0*/
*(_BYTE *)(i_1 + 390) = 68; /*0x8fb*/
*(_BYTE *)(i_1 + 391) = 73; /*0x906*/
*(_QWORD *)(i_1 + 400) = 0; /*0x911*/
*(_QWORD *)(i_1 + 5888) = i_1 + 360; /*0x923*/
inited = (*(__int64 ( **)(__int64 *, void *, __int64, _QWORD))(qword_E2F8 + 328))( /*0x946*/
&controllerHandle,
&unk_BD00,
i_1 + 5888,
0);
if ( inited >= 0 ) /*0x94c*/
{
inited = (*(__int64 ( **)(__int64, void *, __int64, void *, _QWORD, void *, __int64, _QWORD))(qword_E2F8 + 328))( /*0x9a1*/
i_1 + 400,
&unk_BB20,
i_1 + 360,
&unk_BB40,
*(_QWORD *)(i_1 + 416),
&unk_BD00,
i_1 + 5888,
0);
if ( inited >= 0 ) /*0x9a7*/
{
if ( qword_E2E0 ) /*0x9b7*/
inited = (*(__int64 (**)(void))(qword_E2F8 + 72))(); /*0x9c3*/
if ( inited >= 0 ) /*0x9c9*/
{
if ( (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))( /*0x9fb*/
4,
16LL * *(unsigned __int8 *)(MEMORY[0xE2E8] + 7) + 8,
&qword_E2E0) >= 0 )
{
(*(void ( **)(__int64, void *, __int64 *, _QWORD, _QWORD, int))(qword_E2F8 + 280))( /*0xb07*/
controllerHandle,
&unk_BB50,
&protoOut2,
*(_QWORD *)(a1 + 40),
*(_QWORD *)(i_1 + 400),
8);
return 0; /*0xb0d*/
}
inited = (*(__int64 ( **)(__int64, void *, __int64, void *, _QWORD, _QWORD))(qword_E2F8 + 336))( /*0xa3b*/
i_1 + 400,
&unk_BB20,
i_1 + 360,
&unk_BB40,
*(_QWORD *)(i_1 + 416),
0);
}
}
}
protoInterface = *(_QWORD *)(i_1 + 416); /*0xa50*/
qword_E920[*(unsigned __int16 *)(i_1 + 396)] = 0; /*0xa57*/
(*(void ( **)(__int64))(qword_E2F8 + 72))(protoInterface); /*0xa62*/
}
}
}
RtkUsbUndiInitSpinlock2(0); /*0xa67*/
if ( i_2 ) /*0xa73*/
(*(void (**)(void))(qword_E2F8 + 72))(); /*0xa7c*/
goto LABEL_24; /*0xa7c*/
}
return result; /*0xace*/
}
// RtkUsbUndiDriverBindingStop @ 0xb14 __int64 RtkUsbUndiDriverBindingStop(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
double v4; // xmm3_8 unsigned __int64 Index; // rsi char v11; // r12 __int64 v12; // rbx __int64 v13; // r13 _BYTE v14[16]; // [rsp+40h] [rbp-38h] BYREF __int64 v15; // [rsp+90h] [rbp+18h] BYREF if ( !a3 ) /*0xb3f*/
{
RtkUsbUndiInitSpinlock2(0); /*0xb43*/
(*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xb60*/
a2,
&unk_BB40,
*(_QWORD *)(a1 + 40),
a2);
return (*(__int64 ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xb84*/
a2,
&unk_BB50,
*(_QWORD *)(a1 + 40),
a2);
}
Index = 0; /*0xb89*/
v11 = 1; /*0xb8b*/
do /*0xda7*/
{
if ( (*(__int64 ( **)(_QWORD, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0xbcb*/
*(_QWORD *)(a4 + 8 *Index),
&unk_BB20,
&v15,
*(_QWORD *)(a1 + 40),
a2,
2) < 0 )
goto LABEL_15; /*0xbcb*/
v12 = v15 - 360; /*0xbd9*/
if ( *(_QWORD *)(v15 - 360) != 1768189557 ) /*0xbe7*/
{
RtkUsbUndiAssert( /*0xbfc*/
(__int64)MEMORY[0xD328], // "f:\\uefi\\edk2\\OptionRomPkg\\SRC\\RtUefiUsbEDK2\\Init.c"
756,
(__int64)MEMORY[0xD310], // "CR has Bad Signature"
v4); // "CR has Bad Signature"
v12 = v15; /*0xc01*/
}
(*(void ( **)(__int64, void *, _QWORD, _QWORD))(qword_E2F8 + 288))( /*0xc22*/
a2,
&unk_BB50,
*(_QWORD *)(a1 + 40),
*(_QWORD *)(a4 + 8 *Index));
if ( (*(__int64 ( **)(_QWORD, void *, _QWORD, void *, __int64, void *, __int64, _QWORD))(qword_E2F8 + 336))( /*0xc7e*/
*(_QWORD *)(a4 + 8 *Index),
&unk_BB40,
*(_QWORD *)(v12 + 416),
&unk_BB20,
v12 + 360,
&unk_BD00,
v12 + 5888,
0) < 0 )
{
(*(void ( **)(__int64, void *, _BYTE *, _QWORD, _QWORD, int))(qword_E2F8 + 280))( /*0xca8*/
a2,
&unk_BB50,
v14,
*(_QWORD *)(a1 + 40),
*(_QWORD *)(a4 + 8 *Index),
8);
goto LABEL_16; /*0xcae*/
}
v13 = (*(__int64 ( **)(__int64, void *, __int64, _QWORD))(qword_E2F8 + 336))(a2, &unk_BD00, v12 + 5888, 0); /*0xccd*/
if ( v13 >= 0 ) /*0xcd3*/
{
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 528)); /*0xd1a*/
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 536)); /*0xd2b*/
if ( *(_BYTE *)(v12 + 5850) ) /*0xd2e*/
{
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 568)); /*0xd45*/
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 576)); /*0xd56*/
}
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 544)); /*0xd67*/
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 560)); /*0xd78*/
(*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 416)); /*0xd89*/
(*(void ( **)(__int64))(qword_E2F8 + 72))(v12); /*0xd96*/
}
else
{
(*(void ( **)(__int64, void *, _BYTE *, _QWORD, _QWORD, int))(qword_E2F8 + 280))( /*0xd00*/
a2,
&unk_BB50,
v14,
*(_QWORD *)(a1 + 40),
*(_QWORD *)(a4 + 8 *Index),
8);
}
if ( v13 < 0 ) /*0xd9c*/
LABEL_15:
v11 = 0; /*0xd9e*/
LABEL_16:
++Index; /*0xda1*/
}
while ( Index < a3 ); /*0xda7*/
if ( v11 ) /*0xdb0*/
return 0; /*0xdbe*/
else return 0x8000000000000007uLL; /*0xdb2*/
}
// RtkUsbUndiStallHelper @ 0xde0 __int64 RtkUsbUndiStallHelper(__int64 a1, unsigned int a2)
{
return (*(__int64 ( **)(_QWORD))(qword_E2F8 + 248))(a2);
}
// RtkUsbUndiInitHardware @ 0xdf0 signed __int64 RtkUsbUndiInitHardware(_QWORD *a1, _BYTE *i, __int64 n0x8000, double a4)
{
__int16 v6; // ax int n24592; // eax int n20480; // ecx __int64 v10; // rdx __int64 v11; // r8 __int64 v12; // rdx __int64 v13; // r8 signed __int64 result; // rax __int64 v15; // r8 __int64 v16; // rdx __int64 v17; // r8 _BYTE *i_1; // rbx _BYTE *j; // rcx __int64 v20; // rdx __int64 v21; // r8 unsigned __int16 Index; // di _BYTE *v23; // rcx _BYTE ia[32]; // [rsp+40h] [rbp-29h] BYREF int i_; // [rsp+60h] [rbp-9h] BYREF char v26; // [rsp+64h] [rbp-5h] BYREF unsigned int n24592_1; // [rsp+E0h] [rbp+77h] BYREF _BYTE *v28; // [rsp+E8h] [rbp+7Fh] BYREF
*(_QWORD *)(n0x8000 + 4928) = RtkUsbUndiStallHelper; /*0xe19*/
*(_WORD *)(n0x8000 + 80) = *(_WORD *)(n0x8000 + 5114); /*0xe2b*/
v6 = *(_WORD *)(n0x8000 + 5116); /*0xe30*/
*(_QWORD *)(n0x8000 + 4936) = 0; /*0xe43*/
*(_WORD *)(n0x8000 + 82) = v6; /*0xe4a*/
*(_QWORD *)(n0x8000 + 4944) = 0; /*0xe4f*/
*(_QWORD *)(n0x8000 + 4960) = 0; /*0xe56*/
*(_QWORD *)(n0x8000 + 4968) = 0; /*0xe5d*/
*(_QWORD *)(n0x8000 + 4976) = 0; /*0xe64*/
*(_QWORD *)(n0x8000 + 4952) = 0; /*0xe6b*/
*(_BYTE *)(n0x8000 + 4498) = 49; /*0xe72*/
*(_QWORD *)(n0x8000 + 4864) = n0x8000; /*0xe7a*/
RtkUsbUndiZeroMem((__int64)ia, 0x20u, n0x8000, a4); /*0xe81*/
*(_DWORD *)(n0x8000 + 5000) = 0; /*0xeb0*/
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &n24592_1, 2) < 0 ) /*0xebf*/
return 0x8000000000000007uLL; /*0xebf*/
n24592 = HIWORD(n24592_1) & 0x7CF0; /*0xecd*/
n20480 = HIWORD(n24592_1) & 0x7000; /*0xed2*/
n24592_1 = n24592; /*0xed8*/
switch ( n24592 ) /*0xee0*/
{
case 19456: /*0xee0*/
*(_DWORD *)(n0x8000 + 5000) = 2; /*0xee2*/
break;
case 19472: /*0xee0*/
*(_DWORD *)(n0x8000 + 5000) = 3; /*0xef2*/
break;
case 18432: /*0xee0*/
*(_DWORD *)(n0x8000 + 5000) = 4; /*0xf05*/
break;
}
if ( n20480 == 20480 ) /*0xf17*/
{
switch ( n24592 ) /*0xf1e*/
{
case 23552: /*0xf1e*/
*(_DWORD *)(n0x8000 + 5000) = 6; /*0xf20*/
goto LABEL_21; /*0xf26*/
case 23568: /*0xf1e*/
*(_DWORD *)(n0x8000 + 5000) = 7; /*0xf2f*/
goto LABEL_21; /*0xf39*/
case 23584: /*0xf1e*/
*(_DWORD *)(n0x8000 + 5000) = 8; /*0xf42*/
goto LABEL_21; /*0xf4c*/
case 23600: /*0xf1e*/
*(_DWORD *)(n0x8000 + 5000) = 9; /*0xf55*/
break;
}
}
if ( n24592 == 24576 ) /*0xf64*/
{
*(_DWORD *)(n0x8000 + 5000) = 10; /*0xf66*/
}
else if ( n24592 == 24592 ) /*0xf77*/
{
*(_DWORD *)(n0x8000 + 5000) = 11; /*0xf79*/
}
LABEL_21:
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55320, 0, 0, &n24592_1, 2); /*0xf83*/
*(_WORD *)(n0x8000 + 5004) = HIWORD(n24592_1) & 0xFEF0; /*0xfb8*/
if ( !*(_DWORD *)(n0x8000 + 5000) ) /*0xfc6*/
return 0x8000000000000007uLL; /*0x10dc*/
RtkUsbUndiNicTypeInit(n0x8000); /*0xfcf*/
RtkUsbUndiPhyReset(n0x8000, v10, v11, a4); /*0xfd7*/
if ( *(_BYTE *)(n0x8000 + 5427) == 1 ) /*0xfe3*/
*(_BYTE *)(n0x8000 + 5447) = RtkUsbUndiGetMacFromAcpi(n0x8000, v12, v13, a4); /*0xfed*/
result = RtkUsbUndiPhyGetStatus(n0x8000); /*0xff6*/
if ( result >= 0 ) /*0xffe*/
{
RtkUsbUndiCopyMem(ia, (_BYTE *)(n0x8000 + 252), 6, a4); /*0x1012*/
*(_QWORD *)(n0x8000 + 4928) = 0; /*0x1024*/
*(_QWORD *)(n0x8000 + 4952) = 0; /*0x102b*/
RtkUsbUndiZeroMem((__int64)&i_, 0x25u, v15, a4); /*0x1032*/
RtkUsbUndiCopyMem(&v26, ia, 32, a4); /*0x1044*/
i_ = 2427651; /*0x1049*/
i_1 = i; /*0x1050*/
for ( j = i; !RtkUsbUndiAsciiStrToUint64((__int64)j, v16, v17, a4); j = i_1 ) /*0x1053*/
i_1 = (_BYTE *)RtkUsbUndiHexChar((__int64)i_1, v20, v21, a4); /*0x1060*/
Index = (_WORD)i_1 - (_WORD)i; /*0x1079*/
result = (*(__int64 ( **)(__int64, _QWORD, _BYTE **))(qword_E2F8 + 64))( /*0x1089*/
4,
(unsigned __int16)((_WORD)i_1 - (_WORD)i + 41),
&v28);
if ( !result ) /*0x108f*/
{
v23 = v28; /*0x1091*/
*a1 = v28; /*0x1098*/
if ( Index ) /*0x109e*/
{
RtkUsbUndiCopyMem(v23, i, Index, a4); /*0x10a6*/
v23 = v28; /*0x10ab*/
}
v28 = &v23[Index]; /*0x10b9*/
RtkUsbUndiCopyMem(v28, &i_, 37, a4); /*0x10bd*/
v28 += 37; /*0x10cf*/
RtkUsbUndiCopyMem(v28, i_1, 4, a4); /*0x10d3*/
return 0; /*0x10d8*/
}
}
return result; /*0x10ee*/
}
// RtkUsbUndiStopChildren @ 0x1104 __int64 RtkUsbUndiStopChildren(__int64 a1)
{
__int64 result; // rax unsigned __int64 i_3; // rax unsigned __int64 i; // rbx unsigned __int64 i_2; // rbx __int64 v6; // [rsp+30h] [rbp-20h] BYREF __int64 v7; // [rsp+38h] [rbp-18h] BYREF __int64 v8; // [rsp+40h] [rbp-10h] BYREF __int64 v9; // [rsp+78h] [rbp+28h] BYREF unsigned __int64 i_1; // [rsp+80h] [rbp+30h] BYREF __int64 v11; // [rsp+88h] [rbp+38h] BYREF result = (*(__int64 ( **)(_QWORD, _QWORD, _QWORD, unsigned __int64 *, __int64 *))(qword_E2F8 + 312))( /*0x112d*/
0,
0,
0,
&i_1,
&v9);
if ( result >= 0 ) /*0x1136*/
{
i_3 = i_1; /*0x113c*/
for ( i = 0; i < i_1; ++i ) /*0x1145*/
{
(*(void ( **)(_QWORD, __int64, _QWORD))(qword_E2F8 + 272))(*(_QWORD *)(v9 + 8 *i), a1, 0); /*0x115c*/
i_3 = i_1; /*0x1162*/
}
i_2 = 0; /*0x116e*/
if ( i_3 ) /*0x1173*/
{
do /*0x128e*/
{
if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x11aa*/
*(_QWORD *)(v9 + 8 *i_2),
&unk_BB60,
&v11) >= 0
&& *(_QWORD *)(v11 + 32) == a1 )
{
(*(void ( **)(__int64, void *))(qword_E2F8 + 144))(a1, &unk_BB60); /*0x11c1*/
if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x11ea*/
*(_QWORD *)(v9 + 8 *i_2),
&unk_BB70,
&v6) >= 0 )
(*(void ( **)(__int64, void *, __int64))(qword_E2F8 + 144))(a1, &unk_BB70, v6); /*0x1201*/
if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x122a*/
*(_QWORD *)(v9 + 8 *i_2),
&unk_BB10,
&v7) >= 0 )
(*(void ( **)(__int64, void *, __int64))(qword_E2F8 + 144))(a1, &unk_BB10, v7); /*0x1241*/
if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x126a*/
*(_QWORD *)(v9 + 8 *i_2),
&unk_BB30,
&v8) >= 0 )
(*(void ( **)(__int64, void *, __int64))(qword_E2F8 + 144))(a1, &unk_BB30, v8); /*0x1281*/
}
++i_2; /*0x1287*/
}
while ( i_2 < i_1 ); /*0x128e*/
}
if ( v9 ) /*0x129b*/
(*(void (**)(void))(qword_E2F8 + 72))(); /*0x12a4*/
return 0; /*0x12a7*/
}
return result; /*0x12a9*/
}
// RtkUsbUndiInitSpinlock @ 0x12b4 __int64 RtkUsbUndiInitSpinlock(__int64 a1, __int64 a2, __int64 spinArg, double a4)
{
__int64 result; // rax __int64 v6; // rdx unsigned __int8 v7; // bp char v8; // r15 char v9; // r14 char v10; // r12 unsigned __int8 Index; // si __int64 Result; // rdi char v13; // [rsp+50h] [rbp+8h] BYREF char v14; // [rsp+52h] [rbp+Ah]
char v15; // [rsp+53h] [rbp+Bh]
result = (*(__int64 ( **)(_QWORD, __int64, __int64))(*(_QWORD *)(a1 + 4872) + 48LL))( /*0x12e4*/
*(_QWORD *)(a1 + 4872),
a1 + 5106,
spinArg);
if ( result >= 0 ) /*0x12ea*/
{
result = (*(__int64 ( **)(_QWORD, __int64))(*(_QWORD *)(a1 + 4872) + 64LL))( /*0x1301*/
*(_QWORD *)(a1 + 4872),
a1 + 5124);
if ( result >= 0 ) /*0x1307*/
{
v7 = *(_BYTE *)(a1 + 5128); /*0x130d*/
v8 = 0; /*0x1314*/
v9 = 0; /*0x1317*/
v10 = 0; /*0x131a*/
Index = 0; /*0x131d*/
if ( !v7 ) /*0x132d*/
goto LABEL_13; /*0x132d*/
do /*0x13b2*/
{
LOBYTE(v6) = Index; /*0x133f*/
Result = (*(__int64 ( **)(_QWORD, __int64, char *))(*(_QWORD *)(a1 + 4872) + 72LL))( /*0x1348*/
*(_QWORD *)(a1 + 4872),
v6,
&v13);
if ( Result >= 0 ) /*0x134e*/
{
if ( (v15 & 3) == 2 ) /*0x1358*/
{
if ( v14 >= 0 ) /*0x136a*/
{
RtkUsbUndiCopyMem((_BYTE *)(a1 + 4887), &v13, 7, a4); /*0x1384*/
v9 = 1; /*0x1389*/
}
else
{
RtkUsbUndiCopyMem((_BYTE *)(a1 + 4880), &v13, 7, a4); /*0x1373*/
v10 = 1; /*0x1378*/
}
}
else if ( (v15 & 3) == 3 ) /*0x1390*/
{
RtkUsbUndiCopyMem((_BYTE *)(a1 + 5133), &v13, 7, a4); /*0x13a4*/
v8 = 1; /*0x13a9*/
}
}
++Index; /*0x13ac*/
}
while ( Index < v7 ); /*0x13b2*/
if ( !v9 ) /*0x13bb*/
LABEL_13:
Result = 0x800000000000000EuLL; /*0x13bd*/
if ( !v10 ) /*0x13c3*/
Result = 0x800000000000000EuLL; /*0x13c3*/
if ( !v8 ) /*0x13ca*/
return 0x800000000000000EuLL; /*0x13ca*/
return Result; /*0x13ce*/
}
}
return result; /*0x13e0*/
}
// RtkUsbUndiUsbSetConfig @ 0x13f0 unsigned __int64 RtkUsbUndiUsbSetConfig(__int64 ( **a1)(), _DWORD *eng, _QWORD *a3)
{
if ( eng ) /*0x13fa*/
// "eng;en" /*0x141e*/
return RtkUsbUndiAsciiStrToUint64Wrap( /*0x141e*/
eng,
a1[2],
(__int64)&off_BD40,
a3,
a1 == (__int64 ( **)())&off_BD10);
else return 0x8000000000000002uLL; /*0x1425*/
}
// RtkUsbUndiUsbClaimInterface @ 0x1434 unsigned __int64 RtkUsbUndiUsbClaimInterface(
__int64 ( **a1)(),
__int64 a2,
__int64 a3,
_DWORD *eng,
_QWORD *a5)
{
double v5; // xmm3_8 __int64 v11; // r14 __int64 v12; // rax __int64 v13; // rax _BYTE v14[40]; // [rsp+30h] [rbp-28h] BYREF __int64 v15; // [rsp+70h] [rbp+18h] BYREF if ( !a3 ) /*0x1455*/
return 0x8000000000000003uLL; /*0x1455*/
v11 = MEMORY[0xBBA8]; /*0x1466*/
v12 = (*(__int64 ( **)(__int64, void *, _BYTE *, __int64, __int64, int))(qword_E2F8 + 280))( /*0x1493*/
a2,
&unk_BB50,
v14,
MEMORY[0xBBA8],
a2,
16);
if ( v12 >= 0 ) /*0x149c*/
{
(*(void ( **)(__int64, void *, __int64, __int64))(qword_E2F8 + 288))(a2, &unk_BB50, v11, a2); /*0x14b5*/
return 0x8000000000000003uLL; /*0x1461*/
}
if ( v12 != 0x8000000000000014uLL /*0x14ff*/
|| (*(__int64 ( **)(__int64, void *, __int64 *, __int64, __int64, int))(qword_E2F8 + 280))(
a3,
&unk_BB20,
&v15,
MEMORY[0xBBA8],
a3,
2) < 0 )
{
return 0x8000000000000003uLL; /*0x14ff*/
}
v13 = v15 - 360; /*0x150a*/
if ( *(_QWORD *)(v15 - 360) != 1768189557 ) /*0x1517*/
{
RtkUsbUndiAssert( /*0x152c*/
(__int64)MEMORY[0xD3E8], // "f:\\uefi\\edk2\\OptionRomPkg\\SRC\\RtUefiUsbEDK2\\ComponentName.c"
267,
(__int64)MEMORY[0xD310], // "CR has Bad Signature"
v5); // "CR has Bad Signature"
v13 = v15; /*0x1531*/
}
if ( eng ) /*0x1540*/
return RtkUsbUndiAsciiStrToUint64Wrap( /*0x1562*/
eng,
a1[2],
*(_QWORD *)(v13 + 5880),
a5,
a1 == (__int64 ( **)())&off_BD10);
else return 0x8000000000000002uLL; /*0x1569*/
}
// RtkUsbUndiSetupInterrupt @ 0x1588 __int64 RtkUsbUndiSetupInterrupt(__int64 i)
{
__int16 v1; // ax __int64 Index; // rdx __int64 Index; // rcx _WORD *Realtek_USB_Ethernet_Controller_1; // rdi _WORD *Realtek_USB_Ethernet_Controller; // r9 v1 = word_BD60[0]; /*0x1592*/
Index = 0; /*0x159f*/
if ( word_BD60[0] == -1 ) /*0x15a8*/
{
LABEL_7:
*(_QWORD *)(i + 352) = 0; /*0x15ea*/
*(_QWORD *)(i + 5880) = 0; /*0x15f2*/
RtkUsbUndiAsciiStrDecimalToUint64( /*0x161b*/
MEMORY[0xD3AC], // "eng"
eng, // "eng"
(char ***)(i + 5880),
Realtek_USB_Ethernet_Controller, // "Realtek USB Ethernet Controller"
1);
Realtek_USB_Ethernet_Controller = Realtek_USB_Ethernet_Controller;// "Realtek USB Ethernet Controller" /*0x1620*/
}
else
{
Index = 0; /*0x15aa*/
while ( 1 ) /*0x15b3*/
{
if ( *(_WORD *)(i + 504) == v1 && *(_WORD *)(i + 506) == word_BD60[Index + 1] ) /*0x15c9*/
{
Realtek_USB_Ethernet_Controller_1 = *(_WORD **)&word_BD60[Index + 4]; /*0x15cb*/
if ( Realtek_USB_Ethernet_Controller_1 ) /*0x15d3*/
break; /*0x15d3*/
}
++Index; /*0x15d5*/
Index = 8 *Index; /*0x15db*/
v1 = word_BD60[8 *Index]; /*0x15df*/
if ( v1 == -1 ) /*0x15e8*/
goto LABEL_7; /*0x15e8*/
}
*(_QWORD *)(i + 5880) = 0; /*0x1651*/
*(_QWORD *)(i + 352) = Realtek_USB_Ethernet_Controller_1; /*0x1659*/
RtkUsbUndiAsciiStrDecimalToUint64( /*0x167d*/
MEMORY[0xD3AC], // "eng"
eng, // "eng"
(char ***)(i + 5880),
Realtek_USB_Ethernet_Controller_1,
1);
Realtek_USB_Ethernet_Controller = Realtek_USB_Ethernet_Controller_1; /*0x1682*/
}
// "en"
return RtkUsbUndiAsciiStrDecimalToUint64( /*0x164b*/
MEMORY[0xD3A8], // "en"
eng_0, // "en"
(char ***)(i + 5880),
Realtek_USB_Ethernet_Controller,
0);
}
// RtkSnpStart @ 0x1688 __int64 RtkSnpStart(__int64 a1, _WORD *a2)
{
*(_WORD *)(a1 + 26) |= *a2 | 0xC000; /*0x1695*/
*(_WORD *)(a1 + 24) = 0; /*0x169b*/
return 0; /*0x169f*/
}
// RtkSnpStop @ 0x16a0 void RtkSnpStop(__int64 a1, __int64 a2)
{
__int64 *v2; // r8 __int64 v3; // rax __int64 v4; // rax __int64 v5; // rax if ( *(_WORD *)a2 ) /*0x16a3*/
{
*(_DWORD *)(a1 + 24) = -2147483643; /*0x16a9*/
}
else if ( ((*(_WORD *)(a1 + 4) - 32) & 0xFFDF) != 0 ) /*0x16c3*/
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x16c5*/
}
else
{
v2 = *(__int64 **)(a1 + 8); /*0x16d4*/
v3 = *v2; /*0x16d8*/
if ( *(_BYTE *)(a2 + 4498) == 48 ) /*0x16db*/
{
*(_QWORD *)(a2 + 4896) = v3; /*0x16dd*/
*(_QWORD *)(a2 + 4904) = v2[2]; /*0x16e8*/
v4 = v2[1]; /*0x16ef*/
*(_QWORD *)(a2 + 4920) = 0; /*0x16f3*/
*(_QWORD *)(a2 + 4952) = 0; /*0x16fa*/
*(_QWORD *)(a2 + 4864) = a2; /*0x1701*/
*(_QWORD *)(a2 + 4912) = v4; /*0x1708*/
}
else
{
*(_QWORD *)(a2 + 4928) = v3; /*0x1711*/
*(_QWORD *)(a2 + 4936) = 0; /*0x1718*/
v5 = v2[1]; /*0x171f*/
*(_QWORD *)(a2 + 4952) = 0; /*0x1723*/
*(_QWORD *)(a2 + 4960) = 0; /*0x172a*/
*(_QWORD *)(a2 + 4968) = 0; /*0x1731*/
*(_QWORD *)(a2 + 4944) = v5; /*0x1738*/
*(_QWORD *)(a2 + 4976) = 0; /*0x173f*/
*(_QWORD *)(a2 + 4864) = v2[7]; /*0x174a*/
}
*(_WORD *)a2 = 1; /*0x1756*/
*(_DWORD *)(a1 + 24) = -1073741824; /*0x1759*/
}
}
// RtkSnpInitialize @ 0x1764 void RtkSnpInitialize(__int64 a1, __int64 a2)
{
if ( *(_WORD *)a2 == 2 ) /*0x1768*/
{
*(_DWORD *)(a1 + 24) = -2147483641; /*0x176a*/
}
else
{
*(_QWORD *)(a2 + 4896) = 0; /*0x1775*/
*(_QWORD *)(a2 + 4904) = 0; /*0x177c*/
*(_QWORD *)(a2 + 4912) = 0; /*0x1783*/
*(_QWORD *)(a2 + 4928) = 0; /*0x178a*/
*(_QWORD *)(a2 + 4936) = 0; /*0x1791*/
*(_QWORD *)(a2 + 4944) = 0; /*0x1798*/
*(_QWORD *)(a2 + 4960) = 0; /*0x179f*/
*(_QWORD *)(a2 + 4968) = 0; /*0x17a6*/
*(_QWORD *)(a2 + 4976) = 0; /*0x17ad*/
*(_WORD *)a2 = 0; /*0x17b4*/
*(_DWORD *)(a1 + 24) = -1073741824; /*0x17b8*/
}
}
// RtkSnpReset @ 0x17c0 __int64 RtkSnpReset(__int64 a1)
{
__int64 result; // rax result = *(_QWORD *)(a1 + 16); /*0x17c0*/
*(_DWORD *)result = 0; /*0x17c7*/
*(_DWORD *)(result + 4) = 1500; /*0x17ca*/
*(_DWORD *)(result + 8) = 10; /*0x17d1*/
*(_QWORD *)(result + 12) = 100; /*0x17d8*/
*(_QWORD *)(result + 20) = 0; /*0x17e0*/
*(_DWORD *)(result + 28) = 917504; /*0x17e4*/
*(_DWORD *)(result + 32) = 524294; /*0x17eb*/
*(_DWORD *)(result + 36) = 100663792; /*0x17f2*/
*(_DWORD *)(result + 40) = 100664320; /*0x17f9*/
*(_WORD *)(result + 44) = 769; /*0x1800*/
*(_BYTE *)(result + 46) = 0; /*0x1806*/
*(_WORD *)(a1 + 26) |= 3u; /*0x180a*/
return result; /*0x180f*/
}
// RtkSnpShutdown @ 0x1810 _DWORD *RtkSnpShutdown(__int64 a1)
{
_DWORD *result; // rax result = *(_DWORD **)(a1 + 16); /*0x1810*/
*result = 1380078421; /*0x1814*/
*(_DWORD *)(a1 + 24) = -1073741824; /*0x181a*/
return result; /*0x1821*/
}
// RtkSnpReceiveFilters @ 0x1824 void RtkSnpReceiveFilters(__int64 a1, __int64 n0x8000, __int64 paddingArg2, double a4)
{
bool v6; // bp __int64 v7; // rcx _DWORD *v8; // rbx bool v9; // [rsp+50h] [rbp+8h] BYREF unsigned int v10; // [rsp+60h] [rbp+18h] BYREF v6 = 0; /*0x1847*/
v9 = 0; /*0x184a*/
if ( *(_WORD *)(a1 + 2) < 2u ) /*0x1854*/
{
if ( *(_WORD *)n0x8000 == 2 ) /*0x1866*/
{
*(_DWORD *)(a1 + 24) = -2147483640; /*0x1868*/
}
else
{
v7 = *(_QWORD *)(a1 + 8); /*0x1874*/
v8 = *(_DWORD **)(a1 + 16); /*0x1878*/
*(_BYTE *)(n0x8000 + 4462) = *(_WORD *)(a1 + 2) != 1; /*0x188a*/
*(_WORD *)(n0x8000 + 4458) = *(_WORD *)(v7 + 12); /*0x1894*/
*(_BYTE *)(n0x8000 + 4460) = *(_BYTE *)(v7 + 24); /*0x189e*/
*(_BYTE *)(n0x8000 + 4463) = *(_BYTE *)(v7 + 25); /*0x18aa*/
*(_WORD *)(a1 + 24) = RtkUsbUndiPhyConfigureEx(n0x8000, n0x8000, paddingArg2, a4); /*0x18b5*/
*v8 = 0; /*0x18b9*/
v8[1] = 100663792; /*0x18bc*/
v8[2] = 100664320; /*0x18c3*/
if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x18ca*/
{
RtkUsbUndiCheckLinkStatus(n0x8000, &v9, &v10); /*0x18e0*/
v6 = v9; /*0x18e5*/
}
if ( !*(_BYTE *)(n0x8000 + 4462) || v6 ) /*0x18f6*/
{
*(_DWORD *)(a1 + 24) = -1073741824; /*0x1905*/
*(_WORD *)n0x8000 = 2; /*0x190c*/
}
else
{
*(_DWORD *)(a1 + 24) = -2147483642; /*0x18f8*/
*(_WORD *)n0x8000 = 1; /*0x18ff*/
}
}
}
else
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x1856*/
}
}
// RtkSnpStationAddress @ 0x1928 __int64 RtkSnpStationAddress(__int64 a1, __int64 n0x8000, __int64 paddingArg2, double a4)
{
__int16 v6; // bx __int64 result; // rax if ( *(_WORD *)(a1 + 2) < 3u ) /*0x1942*/
{
v6 = *(_WORD *)(a1 + 2); /*0x194d*/
RtkUsbUndiWaitForNvram(n0x8000, n0x8000, paddingArg2, a4); /*0x1954*/
RtkUsbUndiConfigurePhy(n0x8000); /*0x195c*/
if ( (v6 & 2) == 0 ) /*0x1964*/
{
RtkUsbUndiPhyRegsConfig2(n0x8000, *(_WORD *)(n0x8000 + 4496), 0, 0); /*0x1976*/
*(_WORD *)(n0x8000 + 4496) &= ~4u; /*0x1980*/
}
result = RtkUsbUndiPhyFullInit(n0x8000); /*0x198a*/
*(_DWORD *)(a1 + 24) = -1073741824; /*0x198f*/
}
else
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x1944*/
}
return result; /*0x19a0*/
}
// RtkSnpStatistics @ 0x19a8 __int64 RtkSnpStatistics(__int64 a1, __int64 n0x8000, __int64 a3, double a4)
{
__int64 n0x8000_1; // rbx __int64 v6; // rax __int64 paddingArg1; // rdx __int64 paddingArg2; // r8 __int64 n0x8000_2; // [rsp+30h] [rbp-18h]
char v11; // [rsp+50h] [rbp+8h] BYREF n0x8000_1 = n0x8000; /*0x19c0*/
if ( *(_BYTE *)(n0x8000 + 5393) ) /*0x19c6*/
{
v6 = *(_QWORD *)(n0x8000 + 4872); /*0x19cf*/
n0x8000_2 = n0x8000; /*0x19d6*/
LOBYTE(n0x8000) = *(_BYTE *)(n0x8000 + 5135); /*0x19da*/
(*(void ( **)(__int64, __int64, _QWORD, __int64, __int64, unsigned __int64 ( *)(__int64, __int64, __int64), __int64))(v6 + 16))( /*0x19ff*/
v6,
n0x8000,
0,
200,
10,
RtkUsbUndiInterruptHandler,
n0x8000_2);
}
if ( (unsigned int)(*(_DWORD *)(n0x8000_1 + 5000) - 7) <= 2 ) /*0x1a0e*/
RtkUsbUndiPhyPatchLoad(n0x8000_1); /*0x1a13*/
RtkUsbUndiMcastDisableAll(n0x8000_1); /*0x1a1b*/
if ( *(_DWORD *)(n0x8000_1 + 5000) == 1 ) /*0x1a2d*/
{
RtkUsbUndiControlTransferUsb2(n0x8000_1, 4u, 9081, 0, 0, &v11, 2); /*0x1a5a*/
RtkUsbUndiControlTransferUsb2(n0x8000_1, 4u, 9081, 0, 0, &v11, 2); /*0x1a86*/
RtkUsbUndiControlTransferUsb2(n0x8000_1, 4u, 9081, 0, 0, &v11, 2); /*0x1ab2*/
}
RtkUsbUndiWaitForNvram(n0x8000_1, paddingArg1, paddingArg2, a4); /*0x1aba*/
RtkUsbUndiConfigurePhy(n0x8000_1); /*0x1ac2*/
*(_WORD *)(a1 + 24) = 0; /*0x1ac7*/
*(_WORD *)n0x8000_1 = 1; /*0x1ad1*/
*(_WORD *)(a1 + 26) = -16384; /*0x1adf*/
return 49152; /*0x1ae8*/
}
// RtkSnpMCastIpToMac @ 0x1af0 __int64 RtkSnpMCastIpToMac(__int64 a1, __int64 a2)
{
__int64 n0x4000; // rax n0x4000 = *(_WORD *)(a1 + 2) & 0xC000; /*0x1afc*/
if ( (*(_WORD *)(a1 + 2) & 0xC000) == 0 /*0x1b18*/
|| ((_DWORD)n0x4000 == 0x4000 || (_DWORD)n0x4000 == 0x8000) && (*(_BYTE *)(a1 + 2) & 0xF) != 0 )
{
n0x4000 = 1; /*0x1b22*/
if ( (*(_BYTE *)(a2 + 4504) & 1) != 0 ) /*0x1b2d*/
*(_WORD *)(a1 + 26) |= 1u; /*0x1b2f*/
if ( (*(_BYTE *)(a2 + 4504) & 2) != 0 ) /*0x1b3a*/
*(_WORD *)(a1 + 26) |= 2u; /*0x1b3c*/
if ( (*(_BYTE *)(a2 + 4504) & 4) != 0 ) /*0x1b48*/
*(_WORD *)(a1 + 26) |= 4u; /*0x1b4a*/
}
else
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x1b1a*/
}
return n0x4000; /*0x1b21*/
}
// RtkSnpNvData @ 0x1b50 __int16 RtkSnpNvData(__int64 a1, __int64 n0x8000)
{
__int16 v4; // cx int n0x8000_1; // eax __int16 Table; // dx __int16 Ptr; // ax _BYTE *v8; // rcx unsigned __int16 v9; // ax __int64 Index; // rdx __int64 v11; // r8 v4 = *(_WORD *)(a1 + 2); /*0x1b6f*/
n0x8000_1 = v4 & 0xC000; /*0x1b8d*/
if ( (v4 & 0xC000) != 0 ) /*0x1b90*/
{
if ( n0x8000_1 == 0x4000 ) /*0x1ba1*/
{
if ( !*(_WORD *)(a1 + 4) ) /*0x1c1f*/
{
Table = *(_WORD *)(n0x8000 + 4496) & ~(v4 & 0x1F); /*0x1c33*/
goto LABEL_17; /*0x1c33*/
}
}
else if ( n0x8000_1 == 0x8000 /*0x1c01*/
&& (v4 & 0x1F) != 0
&& (!*(_WORD *)(a1 + 4) || (v4 & 4) != 0 && (v4 & 0x10) == 0 && (*(_BYTE *)(a1 + 4) & 0x1F) == 0)
&& ((v4 & 4) == 0
|| (v4 & 0x2000) == 0 && (v4 & 0x10) == 0 && (*(_WORD *)(a1 + 4) || *(_WORD *)(n0x8000 + 4604))) )
{
Table = *(_WORD *)(n0x8000 + 4496) | 1 | v4 & 0x1F; /*0x1c18*/
LABEL_17:
if ( (v4 & 0x2000) != 0 ) /*0x1c3e*/
{
*(_WORD *)(n0x8000 + 4604) = 0; /*0x1c45*/
Table &= ~4u; /*0x1c4c*/
}
if ( !*(_BYTE *)(n0x8000 + 5449) ) /*0x1c4f*/
RtkUsbUndiPhyRegsConfig2(n0x8000, Table, *(_QWORD *)(a1 + 8), *(unsigned __int16 *)(a1 + 4)); /*0x1c63*/
goto LABEL_23; /*0x1c68*/
}
LABEL_31:
*(_DWORD *)(a1 + 24) = -2147483647; /*0x1ccb*/
return n0x8000_1; /*0x1ccb*/
}
if ( (v4 & 0x1F) != 0 || *(_WORD *)(a1 + 4) ) /*0x1c71*/
goto LABEL_31; /*0x1c75*/
LABEL_23:
if ( *(_WORD *)(a1 + 6) ) /*0x1c77*/
{
Ptr = *(_WORD *)(n0x8000 + 4604); /*0x1c7d*/
if ( Ptr ) /*0x1c87*/
{
v8 = *(_BYTE **)(a1 + 16); /*0x1c89*/
v9 = 32 *Ptr; /*0x1c8d*/
if ( v9 > *(_WORD *)(a1 + 6) ) /*0x1c9c*/
v9 = *(_WORD *)(a1 + 6); /*0x1c9c*/
if ( v9 ) /*0x1ca4*/
{
Index = n0x8000 + 4606 - (_QWORD)v8; /*0x1ca6*/
v11 = v9; /*0x1ca9*/
do /*0x1cb8*/
{
*v8 = v8[Index]; /*0x1cb0*/
++v8; /*0x1cb2*/
--v11; /*0x1cb5*/
}
while ( v11 ); /*0x1cb8*/
}
}
}
LOWORD(n0x8000_1) = *(_WORD *)(n0x8000 + 4496) | 0xC000; /*0x1cc1*/
*(_WORD *)(a1 + 26) |= n0x8000_1; /*0x1cc5*/
return n0x8000_1; /*0x1ce6*/
}
// RtkSnpGetStatus @ 0x1cf0 void RtkSnpGetStatus(__int64 a1, _BYTE *n0x8000, __int64 a3, double a4)
{
_BYTE *v6; // rbp _BYTE *v7; // rsi _BYTE *v8; // rdx __int64 v9; // rsi if ( *(_WORD *)(a1 + 2) == 1 ) /*0x1d19*/
{
v6 = n0x8000 + 252; /*0x1d1b*/
v7 = n0x8000 + 220; /*0x1d22*/
if ( RtkUsbUndiSetMem(n0x8000 + 252, n0x8000 + 220, 32, a4) ) /*0x1d32*/
{
RtkUsbUndiCopyMem(v6, v7, 32, a4); /*0x1d45*/
RtkUsbUndiPhyGetStatus((__int64)n0x8000); /*0x1d4d*/
}
}
v8 = *(_BYTE **)(a1 + 8); /*0x1d52*/
if ( v8 ) /*0x1d59*/
{
RtkUsbUndiCopyMem(n0x8000 + 252, v8, 32, a4); /*0x1d65*/
RtkUsbUndiPhyGetStatus((__int64)n0x8000); /*0x1d6d*/
}
v9 = *(_QWORD *)(a1 + 16); /*0x1d72*/
if ( v9 ) /*0x1d79*/
{
RtkUsbUndiCopyMem(*(_BYTE **)(a1 + 16), n0x8000 + 252, 32, a4); /*0x1d88*/
RtkUsbUndiCopyMem((_BYTE *)(v9 + 32), n0x8000 + 284, 32, a4); /*0x1d9b*/
RtkUsbUndiCopyMem((_BYTE *)(v9 + 64), n0x8000 + 220, 32, a4); /*0x1dae*/
}
*(_DWORD *)(a1 + 24) = -1073741824; /*0x1dbd*/
}
// RtkSnpTransmit @ 0x1dd4 void RtkSnpTransmit(__int64 a1, _QWORD *a2, __int64 a3, double a4)
{
int v5; // ecx __int64 i[66]; // [rsp+20h] [rbp-218h] BYREF v5 = *(unsigned __int16 *)(a1 + 2); /*0x1de9*/
if ( (v5 & 0xFFFFFFFE) != 0 ) /*0x1df6*/
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x1df8*/
}
else
{
*(_WORD *)(a1 + 24) = 0; /*0x1e03*/
if ( (v5 & 1) != 0 ) /*0x1e0c*/
{
RtkUsbUndiZeroMem((__int64)i, 0x208u, a3, a4); /*0x1e18*/
a2[669] = 0; /*0x1e1d*/
a2[667] = 0; /*0x1e24*/
a2[665] = 0; /*0x1e2b*/
a2[663] = 0; /*0x1e32*/
a2[661] = 0; /*0x1e39*/
a2[659] = 0; /*0x1e40*/
*(_WORD *)(a1 + 24) = 0; /*0x1e47*/
}
else
{
*(_WORD *)(a1 + 24) = RtkUsbUndiGetInfo(a2, *(_BYTE **)(a1 + 16), *(unsigned __int16 *)(a1 + 6), a4); /*0x1e5e*/
}
}
}
// RtkSnpReceive @ 0x1e78 char RtkSnpReceive(__int64 a1)
{
_BYTE *v1; // rdx __int64 Result; // r8 char result; // al v1 = *(_BYTE **)(a1 + 8); /*0x1e7c*/
Result = *(_QWORD *)(a1 + 16); /*0x1e80*/
if ( (*(_BYTE *)(a1 + 2) & 1) != 0 ) /*0x1e84*/
{
if ( *v1 == 0xFF ) /*0x1e89*/
{
*(_WORD *)Result = 13107; /*0x1e93*/
*(_BYTE *)(Result + 2) = v1[12]; /*0x1e9c*/
*(_BYTE *)(Result + 3) = v1[13]; /*0x1ea3*/
*(_BYTE *)(Result + 4) = v1[14]; /*0x1eaa*/
result = v1[15]; /*0x1eae*/
*(_BYTE *)(Result + 5) = result; /*0x1eb1*/
}
else
{
*(_DWORD *)(a1 + 24) = -2147483636; /*0x1e8b*/
}
}
return result; /*0x1e92*/
}
// RtkSnpMediaPresent @ 0x1eb8 __int64 RtkSnpMediaPresent(__int64 a1)
{
*(_WORD *)(a1 + 26) = 12; /*0x1ebd*/
return 12; /*0x1ec1*/
}
// RtkSnpUndiCommandDispatch @ 0x1ec4 unsigned __int16 RtkSnpUndiCommandDispatch(__int64 a1, __int64 n0x8000, __int64 a3, double a4)
{
__int64 v4; // rsi unsigned __int16 Result; // ax __int64 n8; // r8 __int16 v9; // dx unsigned __int16 n8_1; // dx _QWORD *v11; // rsi unsigned __int16 Ptr; // ax __int16 n511; // ax __int16 v14; // ax _BYTE v15[272]; // [rsp+20h] [rbp-128h] BYREF v4 = *(_QWORD *)(a1 + 16); /*0x1ee3*/
Result = *(_WORD *)(a1 + 6) - 1; /*0x1eed*/
if ( Result > 6u ) /*0x1f01*/
{
n8 = 8; /*0x1f0f*/
}
else
{
n8 = *(unsigned __int16 *)(a1 + 6); /*0x1f03*/
if ( !*(_WORD *)(a1 + 6) ) /*0x1f0b*/
goto LABEL_6; /*0x1f0b*/
}
Result = (unsigned __int16)RtkUsbUndiCopyMem(*(_BYTE **)(a1 + 16), v15, n8, a4); /*0x1f1a*/
LABEL_6:
if ( (*(_BYTE *)(a1 + 2) & 2) != 0 )
{
v9 = *(_WORD *)(a1 + 6); /*0x1f29*/
if ( !v9 ) /*0x1f30*/
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x1f32*/
return Result; /*0x1f39*/
}
*(_WORD *)(a1 + 6) = 8; /*0x1f3e*/
n8_1 = v9 - 8; /*0x1f4a*/
if ( *(_WORD *)(n0x8000 + 4440) == *(_WORD *)(n0x8000 + 4442) )
{
*(_WORD *)(a1 + 26) |= 0x10u; /*0x1f57*/
}
else if ( n8_1 >= 8u )
{
v11 = (_QWORD *)(v4 + 8); /*0x1f64*/
do
{
Ptr = *(_WORD *)(n0x8000 + 4440); /*0x1f67*/
if ( Ptr == *(_WORD *)(n0x8000 + 4442) ) /*0x1f75*/
break; /*0x1f75*/
*v11 = *(_QWORD *)(n0x8000 + 8LL *Ptr + 344); /*0x1f82*/
n511 = *(_WORD *)(n0x8000 + 4440); /*0x1f85*/
v14 = n511 == 511 ? 0 : n511 + 1;
*(_WORD *)(n0x8000 + 4440) = v14; /*0x1fa0*/
*(_WORD *)(a1 + 6) += 8; /*0x1fa7*/
--*(_WORD *)(n0x8000 + 4444); /*0x1fb1*/
++v11; /*0x1fbd*/
n8_1 -= 8; /*0x1fc0*/
}
while ( n8_1 >= 8u );
}
if ( *(_WORD *)(n0x8000 + 4440) != *(_WORD *)(n0x8000 + 4442) ) /*0x1fd7*/
*(_WORD *)(a1 + 26) |= 0x2000u; /*0x1fde*/
}
if ( (*(_BYTE *)(a1 + 2) & 4) != 0 ) /*0x1fe6*/
{
if ( *(_BYTE *)(n0x8000 + 4591) ) /*0x1fe8*/
{
*(_BYTE *)(n0x8000 + 4992) = 1; /*0x2012*/
}
else if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x1ff1*/
{
RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)(n0x8000 + 4992), (unsigned int *)(n0x8000 + 212)); /*0x200b*/
}
if ( *(_BYTE *)(n0x8000 + 4992) ) /*0x2019*/
{
*(_DWORD *)(n0x8000 + 208) |= 4u; /*0x2022*/
}
else
{
*(_WORD *)(a1 + 26) |= 0x40u; /*0x202b*/
*(_DWORD *)(n0x8000 + 208) &= ~4u; /*0x2030*/
}
}
if ( !*(_BYTE *)(n0x8000 + 4591) ) /*0x2037*/
RtkUsbUndiCheckLedMode(n0x8000); /*0x2043*/
*(_WORD *)(a1 + 24) = 0; /*0x204d*/
*(_WORD *)(a1 + 26) |= 0xC000u; /*0x2051*/
return -16384; /*0x2069*/
}
// RtkSnpUndiDataDispatch @ 0x2074 char RtkSnpUndiDataDispatch(__int64 a1)
{
__int64 v1; // r8 __int64 Index; // rcx __int64 n6; // r9 __int64 Result; // r8 char result; // al __int64 Index; // rcx __int64 n6_1; // r9 __int64 Result; // r8 if ( !*(_WORD *)(a1 + 4) ) /*0x2074*/
goto LABEL_2; /*0x2079*/
v1 = *(_QWORD *)(a1 + 8); /*0x2083*/
if ( (*(_BYTE *)(a1 + 2) & 1) != 0 ) /*0x208f*/
{
if ( !*(_WORD *)(v1 + 72) || *(_DWORD *)(v1 + 84) < 0xEu ) /*0x209e*/
{
LABEL_2:
*(_DWORD *)(a1 + 24) = -2147483647; /*0x207b*/
return result; /*0x2082*/
}
Index = *(_QWORD *)(v1 + 76); /*0x20a0*/
n6 = 6; /*0x20a9*/
*(_WORD *)(Index + 12) = *(_WORD *)(v1 + 68); /*0x20ad*/
Result = v1 - Index; /*0x20b1*/
do /*0x20c8*/
{
*(_BYTE *)Index = *(_BYTE *)(Result + Index + 32); /*0x20b9*/
result = *(_BYTE *)(Result + Index); /*0x20bb*/
*(_BYTE *)(Index + 6) = result; /*0x20bf*/
++Index; /*0x20c2*/
--n6; /*0x20c5*/
}
while ( n6 ); /*0x20c8*/
}
else
{
Index = *(_QWORD *)(v1 + 64); /*0x20cb*/
n6_1 = 6; /*0x20d4*/
*(_WORD *)(Index + 12) = *(_WORD *)(v1 + 76); /*0x20da*/
Result = v1 - Index; /*0x20de*/
do /*0x20f5*/
{
*(_BYTE *)Index = *(_BYTE *)(Result + Index + 32); /*0x20e6*/
result = *(_BYTE *)(Result + Index); /*0x20e8*/
*(_BYTE *)(Index + 6) = result; /*0x20ec*/
++Index; /*0x20ef*/
--n6_1; /*0x20f2*/
}
while ( n6_1 ); /*0x20f5*/
}
return result; /*0x2082*/
}
// RtkSnpGetHwAddressSize @ 0x20f8 __int64 RtkSnpGetHwAddressSize(__int64 a1, __int64 n0x8000, char *descDst, double a4)
{
__int64 n0x8000_1; // rax __int16 Table; // ax bool v7; // zf n0x8000_1 = n0x8000; /*0x2103*/
if ( *(_WORD *)(a1 + 4) ) /*0x20fe*/
{
Table = RtkUsbUndiPhyRegsConfig1(n0x8000, *(__int64 ***)(a1 + 8), descDst, a4); /*0x211b*/
*(_WORD *)(a1 + 24) = Table; /*0x2120*/
v7 = Table == 0; /*0x2124*/
n0x8000_1 = 0x8000; /*0x2127*/
if ( v7 ) /*0x212c*/
n0x8000_1 = 49152; /*0x212e*/
*(_WORD *)(a1 + 26) = n0x8000_1; /*0x2133*/
}
else
{
*(_DWORD *)(a1 + 24) = -2147483647; /*0x210b*/
}
return n0x8000_1; /*0x2137*/
}
// RtkSnpMacToBytes @ 0x2140 __int64 RtkSnpMacToBytes(__int64 a1, __int64 n0x8000, __int64 a3, double a4)
{
__int16 Table; // ax bool v6; // zf __int64 n0x8000_1; // rax Table = RtkUsbUndiPhyConfigGiga(n0x8000, *(char ***)(a1 + 8), *(_QWORD **)(a1 + 16), a4); /*0x2157*/
*(_WORD *)(a1 + 24) = Table; /*0x215c*/
v6 = Table == 0; /*0x2160*/
n0x8000_1 = 0x8000; /*0x2163*/
if ( v6 ) /*0x2168*/
n0x8000_1 = 49152; /*0x216a*/
*(_WORD *)(a1 + 26) = n0x8000_1; /*0x216f*/
return n0x8000_1; /*0x2173*/
}
// RtkUsbUndiInterruptCallback @ 0x217c void RtkUsbUndiInterruptCallback(unsigned __int16 *a1)
{
__int64 Index; // rax _WORD *v2; // rdx unsigned __int16 v3; // r8 char *v4; // rax __int16 v5; // r8 if ( a1 ) /*0x2182*/
{
Index = a1[14]; /*0x2184*/
v2 = (_WORD *)(qword_E920[Index] + 424LL); /*0x2193*/
*(_BYTE *)(qword_E920[Index] + 4922LL) = 49; /*0x219a*/
if ( *a1 > 0x11u || a1[12] || a1[13] ) /*0x21ae*/
goto LABEL_7; /*0x21b3*/
if ( a1[2] ) /*0x21b5*/
{
if ( !*((_QWORD *)a1 + 1) ) /*0x21ce*/
goto LABEL_7; /*0x21ce*/
}
else if ( *((_QWORD *)a1 + 1) ) /*0x21bc*/
{
LABEL_7:
*((_DWORD *)a1 + 6) = -2147483647; /*0x21c2*/
return; /*0x21c2*/
}
v3 = a1[3]; /*0x21d0*/
if ( v3 ) /*0x21d9*/
{
if ( !*((_QWORD *)a1 + 2) ) /*0x21e7*/
goto LABEL_7; /*0x21e7*/
}
else if ( *((_QWORD *)a1 + 2) ) /*0x21db*/
{
goto LABEL_7; /*0x21df*/
}
v4 = (char *)&unk_BD80 + 16 * *a1; /*0x21fd*/
if ( *(_WORD *)v4 != 0xFFFF && *(_WORD *)v4 != a1[2] ) /*0x220f*/
goto LABEL_7; /*0x220f*/
if ( *((_WORD *)v4 + 1) != 0xFFFF && *((_WORD *)v4 + 1) != v3 ) /*0x221d*/
goto LABEL_7; /*0x221d*/
v5 = *((_WORD *)v4 + 2); /*0x221f*/
if ( v5 != -1 && v5 != a1[1] ) /*0x222f*/
goto LABEL_7; /*0x222f*/
if ( *((_WORD *)v4 + 3) == 0xFFFF ) /*0x2236*/
goto LABEL_25; /*0x2236*/
if ( !*v2 ) /*0x2238*/
{
*((_DWORD *)a1 + 6) = -2147483642; /*0x223e*/
return; /*0x2245*/
}
if ( *((_WORD *)v4 + 3) != 2 || *v2 == 2 ) /*0x2252*/
{
LABEL_25:
*((_DWORD *)a1 + 6) = -1073741824; /*0x2260*/
(*((void (**)(void))v4 + 1))(); /*0x2267*/
}
else
{
*((_DWORD *)a1 + 6) = -2147483639; /*0x2254*/
}
}
}
// RtkUsbUndiInitSpinlock2 @ 0x226c _BYTE *RtkUsbUndiInitSpinlock2(__int64 a1)
{
_BYTE *i_1; // rax char v2; // cl __int16 v3; // cx char v4; // dl _BYTE *i_2; // r8 __int16 v6; // cx _BYTE *i; // r8 i_1 = (_BYTE *)MEMORY[0xE2E8]; /*0x226c*/
if ( a1 ) /*0x2279*/
{
v6 = *(unsigned __int8 *)(MEMORY[0xE2E8] + 4); /*0x22aa*/
++*(_BYTE *)(MEMORY[0xE2E8] + 7); /*0x22ae*/
v4 = 0; /*0x22b1*/
for ( i = i_1; v6; --v6 ) /*0x22ba*/
v4 += *i++; /*0x22c2*/
}
else
{
v2 = *(_BYTE *)(MEMORY[0xE2E8] + 7); /*0x227b*/
if ( v2 ) /*0x2280*/
*(_BYTE *)(MEMORY[0xE2E8] + 7) = v2 - 1; /*0x2284*/
v3 = (unsigned __int8)i_1[4]; /*0x2287*/
v4 = 0; /*0x228b*/
i_2 = i_1; /*0x228e*/
if ( i_1[4] ) /*0x2287*/
{
do /*0x22a6*/
{
v4 += *i_2++; /*0x229c*/
--v3; /*0x22a2*/
}
while ( v3 ); /*0x22a6*/
}
}
i_1[5] -= v4; /*0x22ce*/
return i_1; /*0x22d1*/
}
// RtkUsbUndiCheckLinkStatus @ 0x22d4 __int64 RtkUsbUndiCheckLinkStatus(__int64 a1, bool *a2, unsigned int *a3)
{
int v3; // eax __int16 v7; // r9 __int64 Result; // r8 __int64 v9; // rax int v10; // eax bool v11; // cf unsigned int v12; // eax __int16 v14; // [rsp+50h] [rbp+8h] BYREF v3 = *(_DWORD *)(a1 + 5000); /*0x22e9*/
v7 = 0; /*0x22fb*/
v14 = 0; /*0x22ff*/
Result = 0; /*0x2304*/
if ( v3 == 1 ) /*0x230a*/
{
v9 = RtkUsbUndiPhyRead(a1, 0x11u, &v14, 0); /*0x2340*/
}
else
{
if ( (unsigned int)(v3 - 2) > 9 ) /*0x2312*/
goto LABEL_6; /*0x2312*/
v9 = RtkUsbUndiControlTransferUsb2(a1, 2u, 59656, 0, 1u, &v14, 2); /*0x2332*/
}
v7 = v14; /*0x2345*/
Result = v9; /*0x234b*/
LABEL_6:
v10 = *(_DWORD *)(a1 + 5000); /*0x234e*/
if ( v10 == 1 ) /*0x2357*/
{
*a2 = (v7 & 0x400) != 0; /*0x23b2*/
if ( (v7 & 0x400) != 0 ) /*0x23b4*/
{
if ( (v7 & 0x2000) == 0 ) /*0x23c0*/
{
v12 = (v7 & 0x4000 | 0x2000u) >> 13; /*0x23f1*/
goto LABEL_21; /*0x23f1*/
}
if ( v7 < 0 ) /*0x23cb*/
*a3 = 6; /*0x23cd*/
v11 = (v7 & 0x4000) != 0; /*0x23dc*/
goto LABEL_13; /*0x23e0*/
}
LABEL_22:
*a3 = 0; /*0x23f8*/
return Result; /*0x23f8*/
}
if ( (unsigned int)(v10 - 2) <= 9 )
{
*a2 = (v7 & 2) != 0; /*0x236c*/
if ( (v7 & 2) != 0 )
{
if ( (v7 & 1) == 0 ) /*0x2378*/
{
v12 = (v7 & 8 | 4u) >> 2; /*0x23a3*/
goto LABEL_21; /*0x23a6*/
}
if ( (v7 & 0x10) != 0 ) /*0x237e*/
{
*a3 = 6; /*0x2380*/
return Result; /*0x2386*/
}
v11 = (v7 & 8) != 0; /*0x238c*/
LABEL_13:
v12 = v11 ? 4 : 2;
LABEL_21:
*a3 = v12; /*0x23f4*/
return Result; /*0x23f6*/
}
goto LABEL_22; /*0x236e*/
}
return Result; /*0x240d*/
}
// RtkUsbUndiWaitForNvram @ 0x2414 __int64 RtkUsbUndiWaitForNvram(__int64 n0x8000, __int64 paddingArg1, __int64 paddingArg2, double a4)
{
int Ptr; // eax __int64 v6; // r8 __int64 result; // rax __int64 v8; // r8 __int64 v9; // r8 Ptr = *(unsigned __int16 *)(n0x8000 + 4468); /*0x241e*/
*(_WORD *)(n0x8000 + 332) = 0; /*0x242a*/
*(_DWORD *)(n0x8000 + 4500) = 0; /*0x2431*/
RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 104), 496 *Ptr, paddingArg2, a4); /*0x2444*/
result = RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 112), *(unsigned __int16 *)(n0x8000 + 4472) << 10, v6, a4); /*0x245a*/
if ( *(_BYTE *)(n0x8000 + 5426) ) /*0x245f*/
{
RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 144), 0x800u, v8, a4); /*0x2476*/
return RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 152), 0x800u, v9, a4); /*0x2484*/
}
return result; /*0x248e*/
}
// RtkUsbUndiInitPhy @ 0x2494 __int64 RtkUsbUndiInitPhy(__int64 a1)
{
int v2; // ecx __int16 n512; // ax __int16 v4; // ax
*(_WORD *)(a1 + 4466) = 496; /*0x24b2*/
*(_WORD *)(a1 + 4470) = 1024; /*0x24be*/
v2 = *(_DWORD *)(a1 + 5000); /*0x24c5*/
if ( v2 == 1 ) /*0x24ce*/
{
*(_WORD *)(a1 + 4474) = 2568; /*0x24ef*/
if ( !*(_BYTE *)(a1 + 5426) ) /*0x24ff*/
goto LABEL_8; /*0x24ff*/
n512 = 512; /*0x2501*/
goto LABEL_7; /*0x2501*/
}
if ( (unsigned int)(v2 - 2) <= 9 ) /*0x24d6*/
{
n512 = 8; /*0x24d8*/
*(_WORD *)(a1 + 4474) = 6152; /*0x24db*/
if ( *(_BYTE *)(a1 + 5426) ) /*0x24e4*/
LABEL_7:
*(_WORD *)(a1 + 5390) = n512; /*0x2506*/
}
LABEL_8:
if ( (unsigned int)(v2 - 1) <= 0xA ) /*0x2518*/
{
*(_WORD *)(a1 + 4468) = *(unsigned __int8 *)(a1 + 4474) + 2000; /*0x2524*/
if ( *(_BYTE *)(a1 + 5426) ) /*0x252b*/
v4 = -30720; /*0x2534*/
else v4 = *(unsigned __int8 *)(a1 + 4475) + 2004; /*0x2547*/
*(_WORD *)(a1 + 4472) = v4; /*0x254a*/
}
(*(void ( **)(__int64, _QWORD, __int64))(qword_E2F8 + 64))( /*0x2573*/
4,
496 * *(unsigned __int16 *)(a1 + 4468),
a1 + 104);
(*(void ( **)(__int64, _QWORD, __int64))(qword_E2F8 + 64))(4, *(unsigned __int16 *)(a1 + 4468), a1 + 120); /*0x258a*/
(*(void ( **)(__int64, __int64, __int64))(qword_E2F8 + 64))(4, 2000, a1 + 136); /*0x25a0*/
(*(void ( **)(__int64, _QWORD, __int64))(qword_E2F8 + 64))( /*0x25bd*/
4,
*(unsigned __int16 *)(a1 + 4472) << 10,
a1 + 112);
if ( *(_BYTE *)(a1 + 5426) ) /*0x25c0*/
{
(*(void ( **)(__int64, __int64, __int64))(qword_E2F8 + 64))(4, 2048, a1 + 144); /*0x25e0*/
(*(void ( **)(__int64, __int64, __int64))(qword_E2F8 + 64))(4, 2048, a1 + 152); /*0x25f5*/
}
*(_WORD *)(a1 + 332) = 0; /*0x25fd*/
*(_DWORD *)(a1 + 4500) = 0; /*0x2604*/
return 0; /*0x2616*/
}
// RtkUsbUndiConfigurePhy @ 0x261c __int64 RtkUsbUndiConfigurePhy(__int64 a1)
{
int v1; // eax unsigned int n0xA; // edi __int64 Index; // r15 __int64 Result; // rsi __int64 result; // rax int Result; // [rsp+70h] [rbp+30h] BYREF int n4; // [rsp+78h] [rbp+38h] BYREF v1 = *(_DWORD *)(a1 + 5000); /*0x262f*/
n0xA = 0; /*0x2635*/
Index = 0; /*0x263a*/
Result = 0; /*0x263d*/
Result = 0; /*0x2640*/
if ( v1 == 1 ) /*0x2645*/
{
n4 = 4; /*0x2788*/
RtkUsbUndiControlTransferUsb3(a1, 4u, 9081, 0, 0, &n4, 2); /*0x2791*/
while ( 1 ) /*0x27a2*/
{
if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x27a2*/
(*(void ( **)(__int64))(a1 + 4896))(20000); /*0x27a7*/
else
(*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 20000); /*0x27b9*/
result = RtkUsbUndiControlTransferUsb2(a1, 4u, 9081, 0, 0, &Result, 2); /*0x27e4*/
if ( result < 0 ) /*0x27ec*/
break; /*0x27ec*/
if ( Result < 0 ) /*0x27f5*/
return 0; /*0x280c*/
if ( (unsigned __int64)++Index > 0x64 ) /*0x27fe*/
return 0x8000000000000007uLL; /*0x280a*/
}
}
else
{
if ( (unsigned int)(v1 - 2) <= 9 ) /*0x2651*/
{
Result = RtkUsbUndiControlTransferUsb2(a1, 4u, 59408, 0, 1u, &Result, 2); /*0x2685*/
if ( Result >= 0 ) /*0x268b*/
{
n4 = Result & 0xFFFFFF | 0x10000000; /*0x26b2*/
Result = RtkUsbUndiControlTransferUsb3(a1, 4u, 59408, 15, 1u, &n4, 2); /*0x26c8*/
if ( Result >= 0 ) /*0x26ce*/
{
RtkUsbUndiControlTransferUsb2(a1, 4u, 59408, 0, 1u, &Result, 2); /*0x26f6*/
do /*0x2751*/
{
if ( (Result & 0x10000000) == 0 ) /*0x275e*/
break; /*0x275e*/
if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x2704*/
(*(void ( **)(__int64))(a1 + 4896))(100); /*0x270b*/
else
(*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 100); /*0x271f*/
RtkUsbUndiControlTransferUsb2(a1, 4u, 59408, 0, 1u, &Result, 2); /*0x2747*/
++n0xA; /*0x274c*/
}
while ( n0xA <= 0xA ); /*0x2751*/
}
}
}
return Result; /*0x280f*/
}
return result; /*0x281a*/
}
// RtkUsbUndiPhyReset @ 0x2828 signed __int64 RtkUsbUndiPhyReset(__int64 n0x8000, __int64 a2, __int64 a3, double a4)
{
int v4; // eax __int16 Result; // di unsigned __int8 Result; // bl _BYTE *v8; // rbp signed __int64 result; // rax signed __int64 Result; // rbx char Result; // [rsp+60h] [rbp+8h] BYREF v4 = *(_DWORD *)(n0x8000 + 5000); /*0x283a*/
Result = 0; /*0x2846*/
Result = 0; /*0x284a*/
if ( v4 == 1 ) /*0x2850*/
{
Result = 0; /*0x2863*/
Result = 0; /*0x2867*/
}
else if ( (unsigned int)(v4 - 2) <= 9 ) /*0x2858*/
{
Result = -12288; /*0x285a*/
Result = 1; /*0x285f*/
}
v8 = (_BYTE *)(n0x8000 + 220); /*0x286a*/
RtkUsbUndiZeroMem(n0x8000 + 220, 0x20u, a3, a4); /*0x2879*/
result = RtkUsbUndiControlTransferUsb2(n0x8000, 6u, Result, 0, Result, &Result, 2); /*0x28a2*/
Result = result; /*0x28a7*/
if ( result >= 0 ) /*0x28ad*/
{
RtkUsbUndiCopyMem(v8, &Result, 6, a4); /*0x28bd*/
RtkUsbUndiCopyMem((_BYTE *)(n0x8000 + 252), v8, 6, a4); /*0x28d2*/
return Result; /*0x28d7*/
}
return result; /*0x28e4*/
}
// RtkUsbUndiPhySetup @ 0x28f0 __int64 RtkUsbUndiPhySetup(_BYTE *n0x8000, __int64 a2, __int64 a3, double a4)
{
unsigned int v4; // edx __int16 *p_i; // rdi __int64 v7; // r9 unsigned __int8 *v8; // r11 unsigned int v9; // ecx unsigned __int8 *v10; // r10 __int64 n6; // rbp unsigned __int8 v12; // si __int64 n8; // r14 int v14; // r8d unsigned __int8 v15; // al int v16; // r8d unsigned int v17; // r10d __int64 Index; // r8 unsigned __int64 i; // rcx int v20; // eax int v21; // eax __int64 v22; // rcx unsigned __int64 Index; // r8 int v24; // eax int v25; // eax unsigned int v27; // [rsp+40h] [rbp+8h] BYREF unsigned int v28; // [rsp+48h] [rbp+10h] BYREF v4 = 0; /*0x2902*/
p_i = (__int16 *)(n0x8000 + 4488); /*0x2904*/
*((_QWORD *)n0x8000 + 561) = 0; /*0x290e*/
v7 = (unsigned __int8)n0x8000[4604]; /*0x2911*/
if ( n0x8000[4604] ) /*0x2911*/
{
v8 = &n0x8000[32 * (unsigned __int8)n0x8000[4604] + 4606]; /*0x2930*/
do /*0x29b5*/
{
v9 = -1; /*0x2933*/
v10 = v8; /*0x2936*/
n6 = 6; /*0x2939*/
do /*0x2974*/
{
v12 = *v10; /*0x293e*/
n8 = 8; /*0x2941*/
do /*0x296c*/
{
v14 = v9; /*0x2947*/
v15 = v12; /*0x294a*/
v9 *= 2; /*0x294e*/
v12 >>= 1; /*0x2954*/
v16 = (v15 ^ (v14 < 0)) & 1; /*0x295a*/
if ( v16 ) /*0x295e*/
v9 = v16 | v9 ^ 0x4C11DB6; /*0x2966*/
--n8; /*0x2969*/
}
while ( n8 ); /*0x296c*/
++v10; /*0x296e*/
--n6; /*0x2971*/
}
while ( n6 ); /*0x2974*/
v8 -= 32; /*0x29a4*/
n0x8000[((unsigned __int8)((v9 >> 26) & 0x3F) >> 3) + 4488] |= 1 << ((v9 >> 26) & 7); /*0x29aa*/
--v7; /*0x29b2*/
}
while ( v7 ); /*0x29b5*/
}
v17 = 0; /*0x29bb*/
Index = 0; /*0x29be*/
for ( i = 0; i < 0x20; i += 8LL ) /*0x29c1*/
{
v20 = *((unsigned __int8 *)p_i + Index++); /*0x29c4*/
v21 = v20 << i; /*0x29cc*/
v17 += v21; /*0x29d2*/
}
v22 = 0; /*0x29e0*/
Index = 4; /*0x29e3*/
do /*0x29fa*/
{
v24 = *((unsigned __int8 *)p_i + Index++); /*0x29e6*/
v25 = v24 << v22; /*0x29ee*/
v22 += 8; /*0x29f0*/
v4 += v25; /*0x29f4*/
}
while ( Index < 8 ); /*0x29fa*/
v28 = (((v17 << 16) | v17 & 0xFF00) << 8) | ((HIWORD(v17) | v17 & 0xFF0000) >> 8); /*0x2a38*/
v27 = (((v4 << 16) | v4 & 0xFF00) << 8) | ((HIWORD(v4) | v4 & 0xFF0000) >> 8); /*0x2a59*/
RtkUsbUndiCopyMem(p_i, &v27, 4, a4); /*0x2a60*/
RtkUsbUndiCopyMem(n0x8000 + 4492, &v28, 4, a4); /*0x2a74*/
return RtkUsbUndiSetRxFilter((__int64)n0x8000, p_i); /*0x2a89*/
}
// RtkUsbUndiPhyGetStatus @ 0x2a98 __int64 RtkUsbUndiPhyGetStatus(__int64 n0x8000)
{
int v1; // eax __int64 Result; // rdx int Status; // [rsp+50h] [rbp+8h] BYREF v1 = *(_DWORD *)(n0x8000 + 5000); /*0x2a9e*/
Result = 0; /*0x2aa4*/
Status = 0; /*0x2aa9*/
if ( v1 == 1 ) /*0x2ab0*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 0, 0, 0, (_BYTE *)(n0x8000 + 252), 2); /*0x2bc7*/
if ( (unsigned int)(v1 - 2) <= 9 ) /*0x2abc*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59420, 0, 1u, &Status, 2); /*0x2aeb*/
if ( Result >= 0 ) /*0x2af1*/
{
Status |= 0xC0u; /*0x2af7*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59420, 15, 1u, &Status, 2); /*0x2b2d*/
if ( Result >= 0 ) /*0x2b33*/
{
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 49152, 63, 1u, (_BYTE *)(n0x8000 + 252), 2); /*0x2b69*/
if ( Result >= 0 ) /*0x2b6f*/
{
Status &= 0xFFFFFF3F; /*0x2b71*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59420, 15, 1u, &Status, 2); /*0x2bcc*/
}
}
}
}
return Result; /*0x2bd2*/
}
// RtkUsbUndiPhyFullInit @ 0x2bd8 __int64 RtkUsbUndiPhyFullInit(__int64 n0x8000)
{
int v1; // eax char Index; // r14 __int64 Result; // rdx __int64 result; // rax int Result; // [rsp+60h] [rbp+20h] BYREF unsigned int v7; // [rsp+68h] [rbp+28h] BYREF v1 = *(_DWORD *)(n0x8000 + 5000); /*0x2bed*/
Result = 0; /*0x2bf3*/
Index = 0; /*0x2bf7*/
Result = 0; /*0x2bfa*/
if ( v1 == 1 ) /*0x2c02*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 9081, 0, 0, &Result, 2); /*0x2d12*/
v7 = Result | 2; /*0x2d29*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 9081, 0, 0, &v7, 2); /*0x2d3f*/
while ( 1 ) /*0x2d4b*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x2d4b*/
(*(void ( **)(__int64))(n0x8000 + 4896))(20000); /*0x2d52*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 20000); /*0x2d66*/
result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 9081, 0, 0, &Result, 2); /*0x2d8c*/
if ( result < 0 ) /*0x2d94*/
break; /*0x2d94*/
if ( Result < 0 ) /*0x2d9d*/
return 0; /*0x2db4*/
if ( (unsigned __int8)++Index > 0x64u ) /*0x2da6*/
return 0x8000000000000007uLL; /*0x2db2*/
}
}
else
{
if ( (unsigned int)(v1 - 2) <= 9 ) /*0x2c0e*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59408, 0, 1u, &Result, 2); /*0x2c3f*/
if ( Result >= 0 ) /*0x2c45*/
{
v7 = Result | 0xC000000; /*0x2c60*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59408, 15, 1u, &v7, 2); /*0x2c79*/
if ( Result >= 0 ) /*0x2c7f*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59480, 0, 1u, &Result, 2); /*0x2cad*/
if ( Result >= 0 ) /*0x2cb3*/
{
v7 = Result & 0xFFF7FFFF; /*0x2ccd*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59480, 15, 1u, &v7, 2); /*0x2ce6*/
}
}
}
}
return Result; /*0x2db6*/
}
return result; /*0x2dc3*/
}
// RtkUsbUndiPhyCheckLink @ 0x2dcc __int64 RtkUsbUndiPhyCheckLink(__int64 n0x8000, int a2, __int64 a3, _QWORD *p_n0x8800)
{
__int64 v7; // rcx __int64 v8; // r10 int *p_n64; // rdx __int64 v10; // rax char n64_1; // cl __int64 Result; // rbx int n64; // [rsp+58h] [rbp+20h] BYREF if ( !*p_n0x8800 ) /*0x2de0*/
return 0; /*0x2ded*/
if ( a2 ) /*0x2df4*/
v7 = n0x8000 + 4887; /*0x2dff*/
else v7 = n0x8000 + 4880; /*0x2df6*/
v8 = *(_QWORD *)(n0x8000 + 4872); /*0x2e06*/
n64 = 0; /*0x2e11*/
p_n64 = &n64; /*0x2e16*/
LOBYTE(p_n64) = *(_BYTE *)(v7 + 2); /*0x2e20*/
v10 = (*(__int64 ( **)(__int64, int *))(v8 + 8))(v8, p_n64); /*0x2e2b*/
n64_1 = n64; /*0x2e2f*/
Result = v10; /*0x2e33*/
if ( !a2 && (v10 < 0 || n64) ) /*0x2e4b*/
{
if ( n64 == 64 ) /*0x2e50*/
{
RtkUsbUndiResetLink(n0x8000); /*0x2e55*/
n64_1 = n64; /*0x2e5a*/
Result = 0x8000000000000006uLL; /*0x2e5e*/
goto LABEL_14; /*0x2e61*/
}
if ( n64 != 16 ) /*0x2e66*/
{
RtkUsbUndiResetLink(n0x8000); /*0x2e6b*/
n64_1 = n64; /*0x2e70*/
}
}
if ( Result < 0 ) /*0x2e77*/
{
LABEL_14:
if ( (n64_1 & 2) == 0 && (n64_1 & 0x10) != 0 ) /*0x2e81*/
return 0x8000000000000006uLL; /*0x2e81*/
}
return Result; /*0x2e97*/
}
// RtkUsbUndiPhyConfigureEx @ 0x2ea0 __int64 RtkUsbUndiPhyConfigureEx(__int64 n0x8000, __int64 paddingArg1, __int64 paddingArg2, double a4)
{
unsigned __int64 i; // rdi int chipVersion; // eax __int16 n9081; // di unsigned __int8 n15; // si __int64 padArg1; // rdx __int64 padArg2; // r8 int padArg3; // r9d int n6; // ecx int regVal; // eax unsigned int regVal_2; // eax __int64 n26; // rcx _BYTE *nvmDataPtr; // rax __int64 spinArg1; // rdx __int64 spinArg2; // r8 int chipVerCheck; // eax unsigned int regVal_1; // [rsp+70h] [rbp+30h] BYREF unsigned int phyRegWr; // [rsp+78h] [rbp+38h] BYREF
*(_QWORD *)(n0x8000 + 336) = 0; /*0x2ec3*/
if ( !*(_BYTE *)(n0x8000 + 4592) && (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 2 ) /*0x2edf*/
RtkUsbUndiInitPhyProgram(n0x8000); /*0x2ee1*/
if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 9 ) /*0x2efb*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 50160, 0, 0, ®Val_1, 2); /*0x2f23*/
if ( (regVal_1 & 0xFFFF0000) == 0xD4500000 ) /*0x2f35*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, ®Val_1, 2); /*0x2f5f*/
phyRegWr = regVal_1 | 0x8000; /*0x2f76*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &phyRegWr, 2); /*0x2f8d*/
phyRegWr = 0; /*0x2faf*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 50160, 15, 0, &phyRegWr, 2); /*0x2fb8*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, ®Val_1, 2); /*0x2fdc*/
phyRegWr = regVal_1 & 0xFFFF7FFF; /*0x2ff0*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &phyRegWr, 2); /*0x300a*/
}
}
if ( !*(_BYTE *)(n0x8000 + 4520) ) /*0x300f*/
*(_DWORD *)(n0x8000 + 4512) = 1; /*0x3018*/
RtkUsbUndiWaitForNvram(n0x8000, paddingArg1, paddingArg2, a4); /*0x3025*/
*(_QWORD *)(n0x8000 + 5352) = 0; /*0x302f*/
*(_QWORD *)(n0x8000 + 5336) = 0; /*0x3036*/
*(_QWORD *)(n0x8000 + 5320) = 0; /*0x303d*/
*(_QWORD *)(n0x8000 + 5304) = 0; /*0x3044*/
*(_QWORD *)(n0x8000 + 5288) = 0; /*0x304b*/
*(_QWORD *)(n0x8000 + 5272) = 0; /*0x3052*/
RtkUsbUndiPhySetPower(n0x8000, 1); /*0x3059*/
RtkUsbUndiOcpInit(n0x8000); /*0x3061*/
RtkUsbUndiMcastDisableAll(n0x8000); /*0x3069*/
RtkUsbUndiClearStatus(n0x8000); /*0x3071*/
if ( *(_DWORD *)(n0x8000 + 5000) != 1 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59468, 0, 1u, ®Val_1, 2) >= 0 ) /*0x30b0*/
{
phyRegWr = regVal_1 & 0x7FFFFFFF; /*0x30cb*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59468, 15, 1u, &phyRegWr, 2) >= 0 /*0x3119*/
&& RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59612, 0, 1u, ®Val_1, 2) >= 0 )
{
phyRegWr = regVal_1 & 0xBFFFFFFF; /*0x3134*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59612, 15, 1u, &phyRegWr, 2) >= 0 ) /*0x3150*/
{
for ( i = 0; i <= 0x64; ++i ) /*0x3152*/
{
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59468, 0, 1u, ®Val_1, 2) < 0 || (regVal_1 & 0x2000000) != 0 ) /*0x318d*/
break; /*0x318d*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x3199*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x319e*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x31b0*/
}
}
}
}
RtkUsbUndiConfigurePhy(n0x8000); /*0x31bf*/
RtkUsbUndiSetSpeed(n0x8000); /*0x31c7*/
RtkUsbUndiHwInit(n0x8000); /*0x31cf*/
RtkUsbUndiSetStationAddress(n0x8000); /*0x31d7*/
chipVersion = *(_DWORD *)(n0x8000 + 5000); /*0x31dc*/
regVal_1 = 0; /*0x31e2*/
n9081 = 0; /*0x31e6*/
n15 = 0; /*0x31ea*/
if ( chipVersion == 1 ) /*0x31fa*/
{
n9081 = 9081; /*0x3208*/
goto LABEL_25; /*0x3208*/
}
if ( (unsigned int)(chipVersion - 2) <= 9 ) /*0x3202*/
{
n9081 = -11260; /*0x3204*/
LABEL_25:
n15 = 0; /*0x320b*/
}
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, n9081, 0, 0, ®Val_1, 2) < 0 ) /*0x3236*/
goto LABEL_41; /*0x3236*/
n6 = *(_DWORD *)(n0x8000 + 5000); /*0x323c*/
regVal = regVal_1; /*0x3242*/
if ( n6 == 1 ) /*0x324b*/
{
n9081 = 9081; /*0x3283*/
n15 = 0; /*0x3288*/
if ( *(_BYTE *)(n0x8000 + 5426) ) /*0x328b*/
regVal_2 = regVal_1 | 0x3000000; /*0x3294*/
else regVal_2 = regVal_1 & 0xFCFFFFFF | 0x1000000; /*0x329a*/
goto LABEL_39; /*0x3298*/
}
if ( n6 > 1 ) /*0x324d*/
{
if ( n6 <= 6 ) /*0x3252*/
goto LABEL_32; /*0x3252*/
if ( n6 <= 9 ) /*0x3257*/
goto LABEL_33; /*0x3257*/
if ( n6 <= 11 ) /*0x325c*/
{
LABEL_32:
regVal = regVal_1 | 0x800000; /*0x325e*/
LABEL_33:
n15 = 15; /*0x3262*/
n9081 = -11260; /*0x3265*/
if ( *(_BYTE *)(n0x8000 + 5426) ) /*0x326a*/
regVal_2 = regVal & 0xFFEFFFFF; /*0x3273*/
else regVal_2 = regVal | 0x100000; /*0x3279*/
LABEL_39:
regVal_1 = regVal_2; /*0x329e*/
}
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, n9081, n15, 0, ®Val_1, 2); /*0x32a1*/
LABEL_41:
if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x32c7*/
RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)(n0x8000 + 4992), (unsigned int *)(n0x8000 + 212)); /*0x32e1*/
RtkUsbUndiMacInitLink(n0x8000, padArg1, padArg2, padArg3); /*0x32e9*/
RtkUsbUndiPhyFullInit(n0x8000); /*0x32f1*/
n26 = 26; /*0x32fa*/
*(_DWORD *)(n0x8000 + 284) = -1; /*0x32ff*/
*(_WORD *)(n0x8000 + 288) = -1; /*0x3305*/
nvmDataPtr = (_BYTE *)(n0x8000 + 226); /*0x330c*/
do /*0x3324*/
{
nvmDataPtr[32] = 0; /*0x3313*/
*nvmDataPtr = 0; /*0x3317*/
nvmDataPtr[64] = 0; /*0x331a*/
++nvmDataPtr; /*0x331e*/
--n26; /*0x3321*/
}
while ( n26 ); /*0x3324*/
RtkUsbUndiPhySetPower(n0x8000, 0); /*0x332b*/
RtkUsbUndiMcastEnableAll(n0x8000); /*0x3333*/
if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x3338*/
RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)(n0x8000 + 4992), (unsigned int *)(n0x8000 + 212)); /*0x3352*/
if ( *(_BYTE *)(n0x8000 + 4992) ) /*0x3357*/
*(_DWORD *)(n0x8000 + 208) |= 4u; /*0x3360*/
else
*(_DWORD *)(n0x8000 + 208) &= ~4u; /*0x3369*/
*(_WORD *)(n0x8000 + 4496) = 2; /*0x3370*/
if ( *(_BYTE *)(n0x8000 + 5393) ) /*0x3378*/
{
LOBYTE(spinArg1) = *(_BYTE *)(n0x8000 + 5135); /*0x3388*/
LOBYTE(spinArg2) = 1; /*0x33a5*/
(*(void ( **)(_QWORD, __int64, __int64, __int64, __int64, unsigned __int64 ( *)(__int64, __int64, __int64), __int64))(*(_QWORD *)(n0x8000 + 4872) + 16LL))( /*0x33b1*/
*(_QWORD *)(n0x8000 + 4872),
spinArg1,
spinArg2,
4,
10,
RtkUsbUndiInterruptHandler,
n0x8000);
}
chipVerCheck = *(_DWORD *)(n0x8000 + 5000); /*0x33b4*/
*(_QWORD *)(n0x8000 + 72) = 0; /*0x33ba*/
*(_DWORD *)(n0x8000 + 4442) = 0; /*0x33be*/
*(_WORD *)(n0x8000 + 4440) = 0; /*0x33c8*/
if ( (unsigned int)(chipVerCheck - 10) <= 1 ) /*0x33d3*/
RtkUsbUndiInitLed(n0x8000); /*0x33d8*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x33e4*/
(*(void ( **)(__int64))(n0x8000 + 4896))(5000); /*0x33eb*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 5000); /*0x33ff*/
return 0; /*0x3416*/
}
// RtkUsbUndiPhyRegsConfig1 @ 0x3424 __int64 RtkUsbUndiPhyRegsConfig1(__int64 n0x8000, __int64 **p_i, char *descDst, double a4)
{
_BYTE *i; // r14 __int16 v5; // di unsigned __int64 n0x3C; // r15 unsigned __int16 Result; // bp unsigned __int16 n60; // si int v11; // eax _BYTE *v12; // rdx _BYTE *v13; // rcx __int64 p_n0x8800_2; // rax __int64 p_n0x8800_1; // rax __int64 v16; // rax __int64 v17; // rax __int16 n511; // ax __int64 p_n0x8800; // [rsp+60h] [rbp+8h] BYREF i = *p_i; /*0x3449*/
v5 = 0; /*0x344c*/
n0x3C = *((unsigned __int16 *)p_i + 4) + *((unsigned __int16 *)p_i + 6); /*0x3454*/
Result = 0; /*0x345a*/
if ( (*(_BYTE *)(n0x8000 + 5428) || *(_BYTE *)(n0x8000 + 5444)) && RtkUsbUndiSetMem(i, i + 6, 6, a4) ) /*0x347c*/
return 3; /*0x348b*/
n60 = 60; /*0x3490*/
if ( n0x3C < 0x3C ) /*0x349c*/
{
LABEL_9:
if ( *(_WORD *)(n0x8000 + 4468) ) /*0x34b8*/
RtkUsbUndiIsZero( /*0x34d8*/
(__int16 *)(*(_QWORD *)(n0x8000 + 104)
+ *(unsigned __int16 *)(n0x8000 + 4468) * *(unsigned __int16 *)(n0x8000 + 332)),
*(unsigned __int16 *)(n0x8000 + 4468),
0,
a4);
v11 = *(_DWORD *)(n0x8000 + 5000); /*0x34ee*/
v12 = (_BYTE *)(*(_QWORD *)(n0x8000 + 104) /*0x34f7*/
+ *(unsigned __int16 *)(n0x8000 + 4468) * *(unsigned __int16 *)(n0x8000 + 332));
v13 = &v12[*(unsigned __int8 *)(n0x8000 + 4474)]; /*0x3502*/
if ( v11 == 1 ) /*0x3508*/
{
*v12 = n60; /*0x355c*/
v12[3] = 48; /*0x3563*/
v12[1] = HIBYTE(n60); /*0x3567*/
RtkUsbUndiCopyMem(v13, i, n60, a4); /*0x3572*/
p_n0x8800_1 = n60 + *(unsigned __int8 *)(n0x8000 + 4474); /*0x3588*/
p_n0x8800 = p_n0x8800_1; /*0x358a*/
if ( (p_n0x8800_1 & 0x1FF) == 0 ) /*0x3592*/
{
p_n0x8800_2 = p_n0x8800_1 + 1; /*0x3594*/
LABEL_21:
p_n0x8800 = p_n0x8800_2; /*0x3597*/
}
}
else
{
if ( (unsigned int)(v11 - 2) <= 9 ) /*0x3510*/
{
*v12 = n60; /*0x3519*/
v12[3] = -64; /*0x3520*/
v12[1] = HIBYTE(n60); /*0x3524*/
RtkUsbUndiCopyMem(v13, i, n60, a4); /*0x352f*/
p_n0x8800_2 = n60 + *(unsigned __int8 *)(n0x8000 + 4474); /*0x3545*/
goto LABEL_21; /*0x3547*/
}
p_n0x8800 = 0; /*0x3549*/
}
v16 = *((unsigned int *)p_i + 2); /*0x359c*/
if ( *i == 0xFF && i[1] == 0xFF ) /*0x35ac*/
{
++*(_QWORD *)(n0x8000 + 5304); /*0x35ae*/
*(_QWORD *)(n0x8000 + 5312) += v16; /*0x35b5*/
}
else if ( (*i & 1) != 0 ) /*0x35c1*/
{
++*(_QWORD *)(n0x8000 + 5288); /*0x35c3*/
*(_QWORD *)(n0x8000 + 5296) += v16; /*0x35ca*/
}
else
{
++*(_QWORD *)(n0x8000 + 5272); /*0x35d3*/
*(_QWORD *)(n0x8000 + 5280) += v16; /*0x35da*/
}
v17 = RtkUsbUndiPhyCheckLink( /*0x360c*/
n0x8000,
1,
*(_QWORD *)(n0x8000 + 104) + *(unsigned __int16 *)(n0x8000 + 4468) * *(unsigned __int16 *)(n0x8000 + 332),
&p_n0x8800);
*(_WORD *)(n0x8000 + 332) = (*(unsigned __int16 *)(n0x8000 + 332) + 1) % 496; /*0x363d*/
if ( v17 < 0 ) /*0x3648*/
Result = 10; /*0x364a*/
goto LABEL_30; /*0x364a*/
}
if ( n0x3C <= 0x7D0 ) /*0x34a5*/
{
n60 = n0x3C; /*0x34b4*/
goto LABEL_9; /*0x34b4*/
}
Result = 12; /*0x34a7*/
LABEL_30:
*(_QWORD *)(n0x8000 + 8LL * *(unsigned __int16 *)(n0x8000 + 4442) + 344) = *p_i; /*0x364f*/
n511 = *(_WORD *)(n0x8000 + 4442); /*0x3662*/
++*(_WORD *)(n0x8000 + 4444); /*0x3669*/
if ( n511 != 511 ) /*0x3674*/
v5 = n511 + 1; /*0x3679*/
*(_WORD *)(n0x8000 + 4442) = v5; /*0x367c*/
return Result; /*0x3695*/
}
// RtkUsbUndiPhyRegsConfig2 @ 0x36a4 __int64 RtkUsbUndiPhyRegsConfig2(__int64 n0x8000, __int16 a2, __int64 a3, unsigned int a4)
{
double v4; // xmm3_8 int v5; // eax unsigned __int16 Index; // bx __int16 v9; // si __int16 Result; // r14 __int16 Result; // r15 unsigned __int8 Result; // bp __int64 v14; // rdx __int64 v15; // r8 __int16 v16; // ax unsigned int n8_1; // r13d __int16 v18; // bx int v19; // eax __int64 result; // rax __int16 i; // [rsp+80h] [rbp+8h] BYREF __int16 v22; // [rsp+88h] [rbp+10h]
__int16 v23; // [rsp+90h] [rbp+18h]
v22 = a2; /*0x36a9*/
v5 = *(_DWORD *)(n0x8000 + 5000); /*0x36bd*/
Index = 0; /*0x36c3*/
v9 = a2; /*0x36ce*/
Result = 0; /*0x36d4*/
Result = 0; /*0x36d8*/
Result = 0; /*0x36dc*/
if ( v5 == 1 ) /*0x36ea*/
{
Result = 68; /*0x36ff*/
Result = 0; /*0x3703*/
Result = 0; /*0x3707*/
}
else if ( (unsigned int)(v5 - 2) <= 9 ) /*0x36f2*/
{
Result = -16368; /*0x36f4*/
Result = 0; /*0x36f7*/
Result = 1; /*0x36fa*/
}
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, Result, 0, Result, &i, 2); /*0x3731*/
*(_WORD *)(n0x8000 + 4496) = v9; /*0x3739*/
v16 = v9 & 4; /*0x3740*/
v23 = v16; /*0x3744*/
if ( (v9 & 4) != 0 || a3 ) /*0x3751*/
{
if ( a3 ) /*0x375a*/
{
n8_1 = a4 >> 5; /*0x375c*/
*(_WORD *)(n0x8000 + 4604) = n8_1; /*0x3762*/
if ( (_WORD)n8_1 ) /*0x376e*/
{
do /*0x37a4*/
{
if ( Index >= 8u ) /*0x3776*/
break; /*0x3776*/
RtkUsbUndiCopyMem((_BYTE *)(32LL *Index + n0x8000 + 4606), (_BYTE *)(32LL *Index + a3), 32, v4); /*0x3793*/
++Index; /*0x379d*/
}
while ( Index < (unsigned __int16)n8_1 ); /*0x37a4*/
v9 = v22; /*0x37a6*/
v16 = v23; /*0x37ae*/
}
}
if ( v16 ) /*0x37c1*/
{
*(_WORD *)(n0x8000 + 4496) |= 4u; /*0x37c3*/
RtkUsbUndiPhySetup((_BYTE *)n0x8000, v14, v15, v4); /*0x37ce*/
}
else
{
*(_WORD *)(n0x8000 + 4496) &= ~4u; /*0x37da*/
}
}
v18 = i & 0xFFC0; /*0x37f9*/
*(_WORD *)(n0x8000 + 4496) = v9; /*0x37fc*/
if ( v9 ) /*0x3806*/
{
if ( (v9 & 1) != 0 ) /*0x3819*/
v18 |= 2u; /*0x381b*/
if ( (v9 & 2) != 0 ) /*0x3826*/
v18 |= 8u; /*0x3828*/
if ( (v9 & 8) != 0 ) /*0x382e*/
{
RtkUsbUndiIsZero(&i, 8, 255, v4); /*0x383e*/
RtkUsbUndiSetRxFilter(n0x8000, &i); /*0x384e*/
v18 |= 0x3Fu; /*0x3853*/
}
if ( (v9 & 0x10) != 0 ) /*0x3860*/
{
RtkUsbUndiIsZero(&i, 8, 255, v4); /*0x3870*/
RtkUsbUndiSetRxFilter(n0x8000, &i); /*0x3880*/
v18 |= 4u; /*0x3885*/
}
if ( v23 ) /*0x3892*/
v18 |= 4u; /*0x3894*/
}
RtkUsbUndiIsZero(&i, 8, 255, v4); /*0x38a8*/
RtkUsbUndiSetRxFilter(n0x8000, &i); /*0x38b8*/
v19 = *(_DWORD *)(n0x8000 + 5000); /*0x38bd*/
i = v18 | 0xE; /*0x38c7*/
if ( v19 == 1 ) /*0x38d6*/
{
Result = 68; /*0x38ef*/
Result = 0; /*0x38f5*/
Result = 0; /*0x38f9*/
}
else if ( (unsigned int)(v19 - 2) <= 9 ) /*0x38de*/
{
Result = -16368; /*0x38e0*/
Result = 3; /*0x38e6*/
Result = 1; /*0x38ea*/
}
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, Result, Result, Result, &i, 2); /*0x3925*/
*(_BYTE *)(n0x8000 + 5449) = 1; /*0x392a*/
return result; /*0x3938*/
}
// RtkUsbUndiPhyConfigGiga @ 0x3948 __int64 RtkUsbUndiPhyConfigGiga(__int64 n0x8000, char **p_i, _QWORD *gigaCfgBuf, double a4)
{
bool isDescr8168; // zf unsigned __int16 n19; // si unsigned __int16 descCount; // ax int descIndex; // eax __int16 p_n0x8800_1; // r9 unsigned __int64 remainder; // rdx __int64 descNum; // rcx unsigned __int16 descSizeCur; // r8 _WORD *maxPktPtr; // rdx unsigned __int16 maxPktSize; // r12 unsigned __int16 MaxPacketSize_1; // ax __int16 zeroVal; // r11 char *i; // rcx _BYTE *i_1; // rcx __int64 totalBytes; // rax __int64 descrIdx; // rcx int excessBytes; // edx __int64 descrBase; // rax __int64 descrIdx2; // r9 __int64 descrBase2; // r10 __int64 descrBase1; // rax unsigned __int16 descrCurSize; // r8 int descrIdx3; // eax _WORD *maxPktCalcPtr; // rdx unsigned __int16 maxPktCalcVal; // bp __int64 copyDst; // r9 __int64 copySrc; // r10 __int64 i_2; // rax char bufByte; // dl int nextDescIdx; // eax unsigned __int16 MaxPacke... [10159 chars total]
// RtkUsbUndiResetLink @ 0x3ec4 __int64 RtkUsbUndiResetLink(__int64 n0x8000)
{
int v2; // ebx unsigned int v4; // [rsp+78h] [rbp+38h] BYREF int v5; // [rsp+80h] [rbp+40h] BYREF RtkUsbUndiMcastDisableAll(n0x8000); /*0x3edb*/
RtkUsbUndiPhySetPower(n0x8000, 1); /*0x3ee5*/
RtkUsbUndiConfigurePhy(n0x8000); /*0x3eed*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49332, 0, 1u, &v5, 2); /*0x3f1f*/
v2 = v5; /*0x3f24*/
v4 = v5 & 0xFFFFFFFE; /*0x3f3f*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &v4, 2); /*0x3f50*/
v4 = v2 | 1; /*0x3f79*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &v4, 2); /*0x3f7c*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &v5, 2); /*0x3fa6*/
v4 = v5 & 0xFFFFFFFC; /*0x3fbe*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &v4, 2); /*0x3fd8*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &v5, 2); /*0x3ffc*/
v4 = v5 | 3; /*0x400c*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &v4, 2); /*0x4028*/
RtkUsbUndiPhyFullInit(n0x8000); /*0x4030*/
RtkUsbUndiPhySetPower(n0x8000, 0); /*0x403a*/
return RtkUsbUndiMcastEnableAll(n0x8000); /*0x4047*/
}
// RtkUsbUndiInterruptHandler @ 0x4058 unsigned __int64 RtkUsbUndiInterruptHandler(__int64 a1, __int64 n10, __int64 a3)
{
if ( n10 == 10 ) /*0x4060*/
{
*(_QWORD *)(a3 + 5376) = *(_QWORD *)a1; /*0x4066*/
*(_WORD *)(a3 + 5384) = *(_WORD *)(a1 + 8); /*0x4073*/
return 0; /*0x407b*/
}
else
{
RtkUsbUndiSerialPrint( /*0x4086*/
MEMORY[0xD470], // "Wrong Interrupt size\n"
n10,
a3); // "Wrong Interrupt size\n"
return 0x8000000000000007uLL; /*0x408b*/
}
}
// RtkUsbUndiGetInfo @ 0x409c __int64 RtkUsbUndiGetInfo(_QWORD *a1, _BYTE *a2, __int64 n520, double a4)
{
unsigned __int16 n520_1; // r12 __int64 result; // rax __int64 v7; // r15 __int64 v8; // rdi __int64 v9; // rbx __int64 v10; // r9 __int64 v11; // r14 __int64 v12; // r11 __int64 v13; // rsi __int64 v14; // r10 __int64 v15; // rdx __int64 i[66]; // [rsp+20h] [rbp-E0h] BYREF n520_1 = n520; /*0x40d3*/
RtkUsbUndiZeroMem((__int64)i, 0x208u, n520, a4); /*0x40d7*/
result = 0; /*0x40dc*/
if ( n520_1 ) /*0x40e2*/
{
v7 = a1[667]; /*0x4113*/
v8 = a1[665]; /*0x411a*/
v9 = a1[661]; /*0x4121*/
v10 = a1[659]; /*0x4128*/
v11 = a1[669]; /*0x412f*/
v12 = a1[663]; /*0x4136*/
v13 = v11 + v8 + v7; /*0x415d*/
v14 = a1[666] + a1[668] + a1[670]; /*0x4160*/
v15 = a1[660] + a1[662] + a1[664]; /*0x4167*/
a1[657] = v14; /*0x417a*/
a1[658] = v15; /*0x4181*/
i[10] = v14; /*0x4188*/
i[20] = v15; /*0x418d*/
a1[643] = v13; /*0x4191*/
a1[644] = v13; /*0x4198*/
a1[646] = v8; /*0x419f*/
a1[647] = v11; /*0x41a6*/
a1[648] = v7; /*0x41ad*/
a1[650] = v13; /*0x41b4*/
a1[651] = v12 + v10 + v9; /*0x41bb*/
a1[652] = v10; /*0x41c2*/
a1[653] = v12; /*0x41c9*/
a1[654] = v9; /*0x41d0*/
i[0] = 757475; /*0x41d7*/
i[1] = v13; /*0x41e0*/
i[2] = v13; /*0x41e5*/
i[6] = v8; /*0x41ea*/
i[7] = v11; /*0x41ef*/
i[8] = v7; /*0x41f4*/
i[11] = v13; /*0x41f9*/
i[12] = v12 + v10 + v9; /*0x41fe*/
i[16] = v10; /*0x4202*/
i[17] = v12; /*0x4206*/
i[18] = v9; /*0x420a*/
if ( n520_1 > 0x208u ) /*0x4212*/
n520_1 = 520; /*0x4214*/
RtkUsbUndiCopyMem(a2, i, n520_1, a4); /*0x422e*/
return 0; /*0x4233*/
}
else
{
a1[669] = 0; /*0x40e4*/
a1[667] = 0; /*0x40eb*/
a1[665] = 0; /*0x40f2*/
a1[663] = 0; /*0x40f9*/
a1[661] = 0; /*0x4100*/
a1[659] = 0; /*0x4107*/
}
return result; /*0x424a*/
}
// RtkUsbUndiMcastDisableAll @ 0x4258 __int64 RtkUsbUndiMcastDisableAll(__int64 n0x8000)
{
int v1; // eax __int64 Result; // rdx int Status; // [rsp+50h] [rbp+8h] BYREF v1 = *(_DWORD *)(n0x8000 + 5000); /*0x425e*/
Status = 0; /*0x4264*/
Result = 0; /*0x4269*/
if ( v1 != 1 && (unsigned int)(v1 - 2) <= 9 ) /*0x4279*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49168, 0, 1u, &Status, 2); /*0x42a4*/
if ( Result >= 0 ) /*0x42aa*/
{
Status &= 0xFFFFFFF0; /*0x42ac*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49168, 3, 1u, &Status, 2); /*0x42df*/
}
}
return Result; /*0x42e5*/
}
// RtkUsbUndiMcastEnableAll @ 0x42ec __int64 RtkUsbUndiMcastEnableAll(__int64 n0x8000)
{
int n2; // eax __int64 Result; // rdx unsigned int Status; // [rsp+50h] [rbp+8h] BYREF n2 = *(_DWORD *)(n0x8000 + 5000); /*0x42f2*/
Status = 0; /*0x42f8*/
Result = 0; /*0x42fd*/
if ( n2 >= 2 && (n2 <= 6 || (unsigned int)(n2 - 7) <= 4) ) /*0x4326*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49168, 0, 1u, &Status, 2); /*0x4351*/
if ( Result >= 0 ) /*0x4357*/
{
Status = Status & 0xFFFFFFF0 | 0xE; /*0x437e*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49168, 3, 1u, &Status, 2); /*0x4396*/
}
}
return Result; /*0x439c*/
}
// RtkUsbUndiSetRxFilter @ 0x43a4 __int64 RtkUsbUndiSetRxFilter(__int64 n0x8000, __int16 *p_i)
{
int v2; // eax unsigned __int8 Status; // r8 __int16 Status; // r10 __int16 Status; // r9 v2 = *(_DWORD *)(n0x8000 + 5000); /*0x43a8*/
Status = 0; /*0x43ae*/
Status = 0; /*0x43b4*/
Status = 0; /*0x43b8*/
if ( v2 == 1 ) /*0x43c3*/
{
Status = 8; /*0x43de*/
Status = 0; /*0x43e2*/
}
else if ( (unsigned int)(v2 - 2) <= 9 ) /*0x43cb*/
{
Status = -13056; /*0x43cd*/
Status = 255; /*0x43d3*/
Status = 1; /*0x43d9*/
}
return RtkUsbUndiControlTransferUsb3(n0x8000, 8u, Status, Status, Status, p_i, 2); /*0x4401*/
}
// RtkUsbUndiGetMaxPacketSize @ 0x4408 __int64 RtkUsbUndiGetMaxPacketSize(__int64 n0x8000, _WORD *maxPktCalcPtr)
{
int v2; // eax unsigned __int16 Result; // r8 v2 = *(_DWORD *)(n0x8000 + 5000); /*0x4408*/
Result = 0; /*0x440e*/
if ( v2 == 1 ) /*0x4414*/
{
return *maxPktCalcPtr & 0x3FFF; /*0x443b*/
}
else if ( (unsigned int)(v2 - 2) <= 9 ) /*0x441c*/
{
return (unsigned __int16)((*maxPktCalcPtr & 0x7FFF) - 4); /*0x442b*/
}
return Result; /*0x4443*/
}
// RtkUsbUndiSetMaxPacketSize @ 0x4444 __int64 RtkUsbUndiSetMaxPacketSize(__int64 n0x8000, _WORD *maxPktPtr)
{
int v2; // eax unsigned __int16 Result; // bx __int16 v4; // bx __int16 v5; // ax v2 = *(_DWORD *)(n0x8000 + 5000); /*0x444a*/
Result = 0; /*0x4450*/
if ( v2 == 1 ) /*0x445c*/
{
v4 = *(unsigned __int8 *)(n0x8000 + 4475); /*0x447d*/
v5 = *maxPktPtr & 0x3FFF; /*0x448a*/
}
else
{
if ( (unsigned int)(v2 - 2) > 9 ) /*0x4464*/
goto LABEL_6; /*0x4464*/
v4 = *(unsigned __int8 *)(n0x8000 + 4475); /*0x4469*/
v5 = *maxPktPtr & 0x7FFF; /*0x4475*/
}
Result = v5 + v4; /*0x448e*/
LABEL_6:
if ( (unsigned __int16)(*maxPktPtr - 1) > 0x5F1u ) /*0x44a0*/
RtkUsbUndiResetLink(n0x8000); /*0x44a5*/
return Result; /*0x44ad*/
}
// RtkUsbUndiPhySetPower @ 0x44b4 __int64 RtkUsbUndiPhySetPower(__int64 a1, char a2)
{
__int64 Result; // rcx int Status; // [rsp+50h] [rbp+8h] BYREF Result = 0; /*0x44c1*/
if ( *(_DWORD *)(a1 + 5000) != 1 ) /*0x44d0*/
{
Result = RtkUsbUndiControlTransferUsb2(a1, 4u, 59480, 0, 1u, &Status, 2); /*0x44fd*/
if ( Result >= 0 ) /*0x4503*/
{
if ( a2 ) /*0x4508*/
Status |= 0x80000u; /*0x450a*/
else Status &= ~0x80000u; /*0x4512*/
return RtkUsbUndiControlTransferUsb3(a1, 4u, 59480, 15, 1u, &Status, 2); /*0x4546*/
}
}
return Result; /*0x4551*/
}
// RtkUsbUndiClearStatus @ 0x4558 __int64 RtkUsbUndiClearStatus(__int64 n0x8000)
{
__int64 Result; // rdi int v4; // [rsp+50h] [rbp+8h] BYREF Result = 0; /*0x4568*/
if ( *(_DWORD *)(n0x8000 + 5000) != 1 ) /*0x456f*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59408, 0, 1u, &v4, 2); /*0x459d*/
if ( Result >= 0 ) /*0x45a3*/
{
v4 &= 0xF3FFFFFF; /*0x45a5*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59408, 15, 1u, &v4, 2); /*0x45db*/
if ( Result >= 0 ) /*0x45e1*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x45ea*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x45f1*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x4605*/
}
}
}
return Result; /*0x4613*/
}
// RtkUsbUndiHwInit @ 0x461c __int64 RtkUsbUndiHwInit(__int64 n0x8000)
{
__int64 result; // rax int n11; // ecx int v4; // esi int Result; // [rsp+70h] [rbp+30h] BYREF int Result; // [rsp+78h] [rbp+38h] BYREF result = 0; /*0x462f*/
n11 = *(_DWORD *)(n0x8000 + 5000); /*0x4634*/
if ( n11 >= 2 ) /*0x4641*/
{
if ( n11 <= 4 ) /*0x464e*/
{
Result = 524290; /*0x4857*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49312, 5, 1u, &Result, 2); /*0x4863*/
Result = 96; /*0x488f*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49316, 3, 1u, &Result, 2); /*0x4896*/
if ( result >= 0 ) /*0x489e*/
{
Result = 160; /*0x48c1*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49320, 3, 1u, &Result, 2); /*0x48cd*/
if ( result >= 0 ) /*0x48d5*/
{
Result = 4194312; /*0x48fb*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58904, 15, 1u, &Result, 2); /*0x4907*/
if ( result >= 0 ) /*0x490f*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54280, 0, 0, &Result, 2); /*0x4939*/
Result = Result & 0xFF00FFFF | 0x10000; /*0x495b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54280, 15, 0, &Result, 2); /*0x496c*/
Result = 1024000384; /*0x498c*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x4998*/
Result = 1; /*0x49ab*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54324, 15, 0, &Result, 2); /*0x49c4*/
}
}
}
}
else if ( n11 <= 11 ) /*0x4657*/
{
Result = 33554469; /*0x467d*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49312, 15, 1u, &Result, 2); /*0x4689*/
if ( result >= 0 ) /*0x4691*/
{
Result = 160; /*0x46b7*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49316, 3, 1u, &Result, 2); /*0x46c3*/
if ( result >= 0 ) /*0x46cb*/
{
Result = 272; /*0x46ee*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49320, 3, 1u, &Result, 2); /*0x46fa*/
if ( result >= 0 ) /*0x4702*/
{
Result = 16777224; /*0x4725*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58904, 15, 1u, &Result, 2); /*0x4731*/
if ( result >= 0 ) /*0x4739*/
{
result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &Result, 2); /*0x4763*/
if ( result >= 0 ) /*0x476b*/
{
Result = Result | 0x80; /*0x4786*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, &Result, 2); /*0x479a*/
if ( result >= 0 ) /*0x47a2*/
{
result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49332, 0, 1u, &Result, 2); /*0x47ca*/
if ( result >= 0 ) /*0x47d2*/
{
v4 = Result; /*0x47d8*/
Result = Result & 0xFFFFFFFE; /*0x47f4*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &Result, 2); /*0x4805*/
if ( result >= 0 ) /*0x480d*/
{
Result = v4 | 1; /*0x4829*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &Result, 2); /*0x4832*/
}
}
}
}
}
}
}
}
}
}
return result; /*0x49d1*/
}
// RtkUsbUndiSetStationAddress @ 0x49e0 __int64 RtkUsbUndiSetStationAddress(__int64 n0x8000)
{
__int64 Result; // r8 int v3; // edi int n99745792; // [rsp+60h] [rbp+20h] BYREF int v6; // [rsp+68h] [rbp+28h] BYREF Result = 0; /*0x49fc*/
if ( *(_DWORD *)(n0x8000 + 5000) != 1 ) /*0x4a04*/
{
n99745792 = 99745792; /*0x4a2f*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49172, 15, 1u, &n99745792, 2); /*0x4a3b*/
if ( Result >= 0 ) /*0x4a41*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &v6, 2); /*0x4a6f*/
if ( Result >= 0 ) /*0x4a75*/
{
n99745792 = v6 | 0x80; /*0x4a90*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, &n99745792, 2); /*0x4aa4*/
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49332, 0, 1u, &v6, 2); /*0x4acf*/
if ( Result >= 0 ) /*0x4ad5*/
{
v3 = v6; /*0x4ad7*/
n99745792 = v6 & 0xFFFFFFFE; /*0x4af3*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &n99745792, 2); /*0x4b09*/
if ( Result >= 0 ) /*0x4b0f*/
{
n99745792 = v3 | 1; /*0x4b36*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &n99745792, 2); /*0x4b3e*/
}
}
}
}
}
return Result; /*0x4b4e*/
}
// RtkUsbUndiPhyPatchLoad @ 0x4b58 __int64 RtkUsbUndiPhyPatchLoad(__int64 n0x8000)
{
bool isChipVer8; // zf unsigned __int8 n0xC8; // di __int64 result; // rax unsigned __int16 Result; // dx __int16 regAddr; // r8 __int16 Result; // r9 int *p_phyRegValue; // rax int n16; // [rsp+80h] [rbp+40h] BYREF int phyRegValue; // [rsp+88h] [rbp+48h] BYREF isChipVer8 = *(_DWORD *)(n0x8000 + 5000) == 8; /*0x4b74*/
phyRegValue = 0; /*0x4b8a*/
n16 = 0; /*0x4b8e*/
n0xC8 = 0; /*0x4b92*/
if ( isChipVer8 ) /*0x4b9a*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &n16, 2); /*0x4bb9*/
n16 &= ~0x40000000u; /*0x4bbe*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53192, 8, 0, &n16, 2); /*0x4be3*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49328, 0, 1u, &n16, 2); /*0x4c0c*/
n16 &= ~2u; /*0x4c11*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49328, 1, 1u, &n16, 2); /*0x4c34*/
}
if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 2 ) /*0x4c4a*/
{
n16 = 16; /*0x4c69*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58420, 3, 0, &n16, 2); /*0x4c75*/
}
if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 1 ) /*0x4c86*/
{
do /*0x4ce4*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58372, 0, 0, &n16, 2); /*0x4caa*/
if ( (n16 & 1) == 0 ) /*0x4cb3*/
break; /*0x4cb3*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x4cbc*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x4cc3*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x4cd7*/
++n0xC8; /*0x4cdd*/
}
while ( n0xC8 < 0xC8u ); /*0x4ce4*/
}
n16 = 0; /*0x4d06*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 0, &n16, 2) >= 0 ) /*0x4d17*/
{
n16 = 0; /*0x4d38*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n16, 2) >= 0 ) /*0x4d49*/
{
n16 = 0; /*0x4d74*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 0, &n16, 2) >= 0 ) /*0x4d80*/
{
n16 = 0; /*0x4da1*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 0, &n16, 2) >= 0 ) /*0x4db2*/
{
n16 = 0; /*0x4dd3*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 0, &n16, 2) >= 0 ) /*0x4de4*/
{
n16 = 0; /*0x4e05*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n16, 2) >= 0 ) /*0x4e16*/
{
n16 = 0; /*0x4e37*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 0, &n16, 2) >= 0 ) /*0x4e48*/
{
n16 = 0; /*0x4e69*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 0, &n16, 2) >= 0 ) /*0x4e7a*/
{
n16 = 0; /*0x4e9b*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 0, &n16, 2) >= 0 ) /*0x4eac*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x4eb5*/
(*(void ( **)(__int64))(n0x8000 + 4896))(3000); /*0x4ebc*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000); /*0x4ed0*/
n16 = 0; /*0x4ef3*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 0, &n16, 2); /*0x4efc*/
}
}
}
}
}
}
}
}
}
result = *(unsigned int *)(n0x8000 + 5000); /*0x4f01*/
switch ( (_DWORD)result ) /*0x4f0a*/
{
case 7: /*0x4f0a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x15Cu, 63488, 255, 0, byte_C790, 2); /*0x4f34*/
Result = 24; /*0x4f39*/
regAddr = -988; /*0x4f3e*/
Result = 60; /*0x4f44*/
p_phyRegValue = (int *)p_n16; /*0x4f48*/
LABEL_37:
result = RtkUsbUndiControlTransferUsb3(n0x8000, Result, regAddr, Result, 0, p_phyRegValue, 2); /*0x5179*/
break; /*0x518b*/
case 8: /*0x4f0a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x118u, 63488, 255, 0, byte_BEC0, 2); /*0x4f85*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x14u, 64548, 60, 0, byte_BEA0, 2); /*0x4fb2*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &phyRegValue, 2); /*0x4fd9*/
if ( (phyRegValue & 0x1000000) != 0 ) /*0x5007*/
{
n16 = 5496; /*0x5009*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n16, 2); /*0x5010*/
n16 = 255; /*0x5015*/
}
else
{
n16 = 0; /*0x501e*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n16, 2); /*0x5022*/
n16 = 239; /*0x5027*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 3, 0, &n16, 2); /*0x504d*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &phyRegValue, 2); /*0x5076*/
phyRegValue |= 0x40000000u; /*0x507b*/
Result = 8; /*0x5080*/
regAddr = -12344; /*0x5086*/
p_phyRegValue = &phyRegValue; /*0x5089*/
LABEL_36:
Result = 4; /*0x5176*/
goto LABEL_37; /*0x5176*/
case 9: /*0x4f0a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x8Cu, 63488, 255, 0, byte_C550, 2); /*0x50c3*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, byte_C3F8, 2); /*0x50f0*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &phyRegValue, 2); /*0x5117*/
if ( (phyRegValue & 0x1000000) != 0 ) /*0x5145*/
{
n16 = 5854; /*0x5147*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n16, 2); /*0x514e*/
n16 = 29; /*0x5153*/
}
else
{
n16 = 0; /*0x515c*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n16, 2); /*0x5160*/
n16 = 28; /*0x5165*/
}
p_phyRegValue = &n16; /*0x516c*/
regAddr = -968; /*0x5170*/
Result = 3; /*0x5173*/
goto LABEL_36; /*0x5173*/
}
*(_BYTE *)(n0x8000 + 4592) = 0; /*0x5190*/
return result; /*0x519f*/
}
// RtkUsbUndiNicTypeInit @ 0x51b0 __int64 RtkUsbUndiNicTypeInit(__int64 n0x8000)
{
int n11; // eax int n4; // eax __int16 regAddr; // di int n11_1; // ecx __int64 linkStatus; // rdi int n2; // ecx int n45056; // [rsp+70h] [rbp+30h] BYREF int n4095; // [rsp+78h] [rbp+38h] BYREF n11 = *(_DWORD *)(n0x8000 + 5000); /*0x51ca*/
if ( n11 >= 7 ) /*0x51d6*/
{
if ( n11 <= 9 ) /*0x51db*/
{
RtkUsbUndiInitUsbPhy(n0x8000); /*0x51f9*/
RtkUsbUndiInitReg8153(n0x8000); /*0x5201*/
RtkUsbUndiPhyInit8153(n0x8000); /*0x5209*/
RtkUsbUndiPhyProgramRegs(n0x8000); /*0x5211*/
}
else if ( n11 <= 11 ) /*0x51e0*/
{
RtkUsbUndiInitUsbPhy(n0x8000); /*0x51e2*/
RtkUsbUndiInitReg8154(n0x8000); /*0x51ea*/
RtkUsbUndiPhyInit8154(n0x8000); /*0x51f2*/
}
}
RtkUsbUndiMiiConfig(n0x8000); /*0x5219*/
n4 = *(_DWORD *)(n0x8000 + 5000); /*0x521e*/
if ( n4 >= 2 ) /*0x5238*/
{
if ( n4 <= 4 ) /*0x5241*/
{
regAddr = -10240; /*0x528c*/
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55296, 0, 0, &n45056, 2) < 0 ) /*0x52af*/
goto LABEL_14; /*0x52af*/
n45056 &= ~0x100u; /*0x52b1*/
goto LABEL_13; /*0x52b1*/
}
if ( n4 <= 11 ) /*0x5246*/
{
regAddr = -10232; /*0x5255*/
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55304, 0, 0, &n45056, 2) >= 0 ) /*0x5278*/
{
n45056 = (unsigned __int16)n45056; /*0x527e*/
LABEL_13:
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, regAddr, 15, 0, &n45056, 2); /*0x52b6*/
}
}
}
LABEL_14:
n11_1 = *(_DWORD *)(n0x8000 + 5000); /*0x52da*/
*(_BYTE *)(n0x8000 + 5387) = 0; /*0x52e0*/
*(_BYTE *)(n0x8000 + 4506) = (unsigned int)(n11_1 - 5) <= 6; /*0x52f0*/
if ( (unsigned int)(n11_1 - 2) <= 2 ) /*0x52fc*/
*(_BYTE *)(n0x8000 + 5393) = 0; /*0x52fe*/
*(_BYTE *)(n0x8000 + 5393) = 0; /*0x5308*/
*(_BYTE *)(n0x8000 + 4590) = (unsigned int)(n11_1 - 2) <= 9; /*0x5315*/
*(_BYTE *)(n0x8000 + 5424) = (unsigned int)(n11_1 - 2) <= 9; /*0x5324*/
*(_BYTE *)(n0x8000 + 5425) = (unsigned int)(n11_1 - 5) <= 6; /*0x5333*/
if ( n11_1 <= 0 ) /*0x533b*/
goto LABEL_20; /*0x533b*/
if ( n11_1 > 9 ) /*0x5340*/
{
if ( n11_1 <= 11 ) /*0x5345*/
*(_BYTE *)(n0x8000 + 5446) = 0; /*0x5347*/
LABEL_20:
*(_BYTE *)(n0x8000 + 5426) = 0; /*0x534e*/
goto LABEL_21; /*0x534e*/
}
*(_BYTE *)(n0x8000 + 5426) = 1; /*0x5372*/
*(_BYTE *)(n0x8000 + 5446) = 0; /*0x5379*/
LABEL_21:
if ( n11_1 >= 5 ) /*0x535d*/
{
if ( n11_1 <= 9 ) /*0x5362*/
{
if ( *(_WORD *)(n0x8000 + 5004) == 4096 || *(_WORD *)(n0x8000 + 80) == 6127 ) /*0x5394*/
{
n45056 = 0; /*0x53b3*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53208, 0, 0, &n45056, 2); /*0x53bc*/
*(_BYTE *)(n0x8000 + 5427) = (n45056 & 0xFF000000) != 0; /*0x53cf*/
goto LABEL_30; /*0x53d5*/
}
}
else if ( n11_1 <= 11 ) /*0x5367*/
{
*(_BYTE *)(n0x8000 + 5427) = 1; /*0x5369*/
goto LABEL_30; /*0x5370*/
}
}
*(_BYTE *)(n0x8000 + 5427) = 0; /*0x53d7*/
LABEL_30:
if ( *(_BYTE *)(n0x8000 + 5393) ) /*0x53de*/
linkStatus = 0; /*0x53e7*/
else linkStatus = RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&n45056, (unsigned int *)(n0x8000 + 212)); /*0x53ff*/
*(_DWORD *)(n0x8000 + 4996) = 2 - ((_BYTE)n45056 != 0); /*0x540f*/
RtkUsbUndiPhySetPower(n0x8000, 1); /*0x5417*/
RtkUsbUndiMcastDisableAll(n0x8000); /*0x541f*/
n2 = *(_DWORD *)(n0x8000 + 5000); /*0x5424*/
if ( n2 < 2 ) /*0x5433*/
goto LABEL_38; /*0x5433*/
if ( n2 <= 4 ) /*0x543c*/
goto LABEL_37; /*0x543c*/
if ( n2 <= 11 ) /*0x5441*/
{
n45056 = 45056; /*0x5464*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n45056, 2); /*0x5470*/
n45056 = 29360128; /*0x5498*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 48132, 12, 1u, &n45056, 2); /*0x549f*/
LABEL_37:
n45056 = 40960; /*0x54a4*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n45056, 2); /*0x54cd*/
n45056 = 4096; /*0x54ef*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46080, 3, 1u, &n45056, 2); /*0x54fb*/
}
LABEL_38:
RtkUsbUndiConfigurePhy(n0x8000); /*0x5500*/
RtkUsbUndiHwConfigRegs(n0x8000); /*0x550b*/
RtkUsbUndiPhySetPower(n0x8000, 0); /*0x5515*/
if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 9 ) /*0x5526*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59424, 0, 1u, &n45056, 2); /*0x554e*/
if ( (n45056 & 0x80000) != 0 ) /*0x555a*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, &n45056, 2); /*0x5585*/
n4095 = n45056 | 0x8000; /*0x559f*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &n4095, 2); /*0x55b6*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52220, 0, 0, &n45056, 2); /*0x55dd*/
n4095 = 4095; /*0x5602*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52220, 3, 0, &n4095, 2); /*0x560e*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, &n45056, 2); /*0x5632*/
n4095 = n45056 & 0xFFFF7FFF; /*0x5649*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &n4095, 2); /*0x5663*/
}
}
return linkStatus; /*0x5678*/
}
// RtkUsbUndiInitUsbPhy @ 0x5688 __int64 RtkUsbUndiInitUsbPhy(__int64 n0x8000)
{
__int64 result; // rax int Result; // [rsp+58h] [rbp+10h] BYREF Result = 0; /*0x568e*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 54416, 63, 0, &Result, 2); /*0x56bc*/
if ( result >= 0 ) /*0x56c4*/
{
result = RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 54420, 3, 0, &Result, 2); /*0x56f3*/
if ( result >= 0 ) /*0x56fb*/
{
result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46176, 0, 0, &Result, 2); /*0x5724*/
if ( result >= 0 ) /*0x572c*/
{
Result &= ~1u; /*0x572e*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46176, 1, 0, &Result, 2); /*0x575c*/
}
}
}
return result; /*0x5761*/
}
// RtkUsbUndiPhyInit8153 @ 0x5768 __int64 RtkUsbUndiPhyInit8153(__int64 n0x8000)
{
unsigned int chipVerOffset; // eax unsigned __int8 n0xC8; // di __int64 result; // rax int ctrlData; // [rsp+70h] [rbp+30h] BYREF chipVerOffset = *(_DWORD *)(n0x8000 + 5000) - 7; /*0x578c*/
ctrlData = 0; /*0x578f*/
n0xC8 = 0; /*0x5792*/
if ( chipVerOffset <= 1 ) /*0x57a0*/
{
do /*0x5800*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58372, 0, 0, &ctrlData, 2); /*0x57ca*/
if ( (ctrlData & 1) == 0 ) /*0x57d3*/
break; /*0x57d3*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x57dc*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x57e1*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x57f3*/
++n0xC8; /*0x57f9*/
}
while ( n0xC8 < 0xC8u ); /*0x5800*/
}
ctrlData = 0; /*0x5824*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 1u, &ctrlData, 2); /*0x582c*/
if ( result >= 0 ) /*0x5834*/
{
ctrlData = 0; /*0x5857*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 0, &ctrlData, 2); /*0x585f*/
if ( result >= 0 ) /*0x5867*/
{
ctrlData = 0; /*0x5893*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 1u, &ctrlData, 2); /*0x5896*/
if ( result >= 0 ) /*0x589e*/
{
ctrlData = 0; /*0x58c5*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 1u, &ctrlData, 2); /*0x58cd*/
if ( result >= 0 ) /*0x58d5*/
{
ctrlData = 0; /*0x58f8*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 1u, &ctrlData, 2); /*0x5900*/
if ( result >= 0 ) /*0x5908*/
{
ctrlData = 0; /*0x592b*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 1u, &ctrlData, 2); /*0x5933*/
if ( result >= 0 ) /*0x593b*/
{
ctrlData = 0; /*0x595e*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 1u, &ctrlData, 2); /*0x5966*/
if ( result >= 0 ) /*0x596e*/
{
ctrlData = 0; /*0x5991*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 1u, &ctrlData, 2); /*0x5999*/
if ( result >= 0 ) /*0x59a1*/
{
ctrlData = 0; /*0x59c4*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 1u, &ctrlData, 2); /*0x59cc*/
if ( result >= 0 ) /*0x59d4*/
{
ctrlData = 0; /*0x59f7*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 1u, &ctrlData, 2); /*0x59ff*/
if ( result >= 0 ) /*0x5a07*/
{
ctrlData = 0; /*0x5a2a*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &ctrlData, 2); /*0x5a32*/
if ( result >= 0 ) /*0x5a3a*/
{
ctrlData = 0; /*0x5a5d*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 0, &ctrlData, 2); /*0x5a65*/
if ( result >= 0 ) /*0x5a6d*/
{
ctrlData = 0; /*0x5a90*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 0, &ctrlData, 2); /*0x5a98*/
if ( result >= 0 ) /*0x5aa0*/
{
ctrlData = 0; /*0x5ac3*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 0, &ctrlData, 2); /*0x5acb*/
if ( result >= 0 ) /*0x5ad3*/
{
ctrlData = 0; /*0x5af6*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &ctrlData, 2); /*0x5afe*/
if ( result >= 0 ) /*0x5b06*/
{
ctrlData = 0; /*0x5b29*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 0, &ctrlData, 2); /*0x5b31*/
if ( result >= 0 ) /*0x5b39*/
{
ctrlData = 0; /*0x5b5f*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 0, &ctrlData, 2); /*0x5b67*/
if ( result >= 0 ) /*0x5b6f*/
{
ctrlData = 0; /*0x5b8f*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 0, &ctrlData, 2); /*0x5b97*/
if ( result >= 0 ) /*0x5b9f*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x5bac*/
(*(void ( **)(__int64))(n0x8000 + 4896))(3000); /*0x5bb3*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))( /*0x5bc7*/
*(_QWORD *)(n0x8000 + 4864),
3000);
ctrlData = 0; /*0x5bed*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 1u, &ctrlData, 2); /*0x5bf5*/
if ( result >= 0 ) /*0x5bfd*/
{
ctrlData = 0; /*0x5c19*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 0, &ctrlData, 2); /*0x5c21*/
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return result; /*0x5c33*/
}
// RtkUsbUndiPhyInit8154 @ 0x5c40 __int64 RtkUsbUndiPhyInit8154(__int64 n0x8000)
{
__int64 result; // rax int ctrlData; // [rsp+78h] [rbp+38h] BYREF ctrlData = 0; /*0x5c82*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 1u, &ctrlData, 2); /*0x5c85*/
if ( result >= 0 ) /*0x5c8d*/
{
ctrlData = 0; /*0x5cb0*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64584, 1, 0, &ctrlData, 2); /*0x5cb8*/
if ( result >= 0 ) /*0x5cc0*/
{
ctrlData = 0; /*0x5ce6*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 1u, &ctrlData, 2); /*0x5cee*/
if ( result >= 0 ) /*0x5cf6*/
{
ctrlData = 0; /*0x5d1c*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 1u, &ctrlData, 2); /*0x5d24*/
if ( result >= 0 ) /*0x5d2c*/
{
ctrlData = 0; /*0x5d4e*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 1u, &ctrlData, 2); /*0x5d56*/
if ( result >= 0 ) /*0x5d5e*/
{
... [11790 chars total]
// RtkUsbUndiInitPhyProgram @ 0x6214 char RtkUsbUndiInitPhyProgram(__int64 n0x8000)
{
int chipVersion; // ecx char result; // al _BYTE *phyDataPtr; // rax int n204800384_1; // eax int Result; // [rsp+80h] [rbp+40h] BYREF int n204800384_2; // [rsp+88h] [rbp+48h] BYREF n204800384_2 = 0; /*0x6258*/
Result = 0; /*0x625b*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 0, &Result, 2) >= 0 ) /*0x6273*/
{
Result = 0; /*0x6294*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &Result, 2) >= 0 ) /*0x62a4*/
{
Result = 0; /*0x62c5*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 0, &Result, 2) >= 0 ) /*0x62d5*/
{
Result = 0; /*0x62f6*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 0, &Result, 2) >= 0 ) /*0x6306*/
{
Result = 0; /*0x6327*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 0, &Result, 2) >= 0 ) /*0x6337*/
{
Result = 0; /*0x6358*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &Result, 2) >= 0 ) /*0x6368*/
{
Result = 0; /*0x6389*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 0, &Result, 2) >= 0 ) /*0x6399*/
{
Result = 0; /*0x63ba*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 0, &Result, 2) >= 0 ) /*0x63ca*/
{
Result = 0; /*0x63e7*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 0, &Result, 2) >= 0 ) /*0x63f7*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x6400*/
(*(void ( **)(__int64))(n0x8000 + 4896))(3000); /*0x6407*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000); /*0x641b*/
Result = 0; /*0x643b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 0, &Result, 2); /*0x6443*/
}
}
}
}
}
}
}
}
}
chipVersion = *(_DWORD *)(n0x8000 + 5000); /*0x6448*/
result = chipVersion - 7; /*0x644e*/
if ( (unsigned int)(chipVersion - 7) <= 2 ) /*0x6454*/
{
switch ( chipVersion ) /*0x645d*/
{
case 7: /*0x645d*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x120u, 63488, 255, 0, byte_C910, 2); /*0x6487*/
phyDataPtr = &unk_CA30; /*0x648c*/
break;
case 8: /*0x645d*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x188u, 63488, 63, 0, byte_C600, 2); /*0x64c5*/
phyDataPtr = &unk_C3E0; /*0x64ca*/
break;
case 9: /*0x645d*/
Result = 0; /*0x64f9*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54152, 3, 1u, &Result, 2); /*0x6501*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x120u, 63488, 63, 0, byte_C410, 2); /*0x6530*/
phyDataPtr = &unk_CE50; /*0x6535*/
break;
default:
goto LABEL_22; /*0x64d6*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, phyDataPtr, 2); /*0x655b*/
LABEL_22:
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54276, 0, 0, &n204800384_2, 2); /*0x6560*/
Result = n204800384_2 & 0xFF7FFFFF; /*0x659e*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54276, 15, 0, &Result, 2); /*0x65b8*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52188, 0, 0, &n204800384_2, 2); /*0x65df*/
Result = (unsigned __int16)n204800384_2; /*0x65e8*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52188, 12, 0, &Result, 2); /*0x6610*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52220, 0, 0, &n204800384_2, 2); /*0x6639*/
Result = (unsigned __int16)n204800384_2; /*0x6647*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52220, 15, 0, &Result, 2); /*0x6664*/
result = *(_BYTE *)(n0x8000 + 5446); /*0x6669*/
if ( result ) /*0x6671*/
{
if ( result != 1 ) /*0x67e5*/
{
LABEL_27:
*(_BYTE *)(n0x8000 + 4592) = 1; /*0x69a4*/
return result; /*0x69a4*/
}
Result = 204800384; /*0x6808*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x6814*/
Result = 511923571; /*0x6836*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54316, 15, 0, &Result, 2); /*0x6842*/
Result = 6272; /*0x6869*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54320, 15, 0, &Result, 2); /*0x6870*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52184, 0, 0, &n204800384_2, 2); /*0x6899*/
Result = (unsigned __int16)n204800384_2 | 0x20000; /*0x68b1*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52184, 15, 0, &Result, 2); /*0x68c8*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52188, 0, 0, &n204800384_2, 2); /*0x68ec*/
Result = n204800384_2 & 0xFFFF0000; /*0x6904*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52188, 15, 0, &Result, 2); /*0x691b*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58420, 0, 0, &Result, 2); /*0x6944*/
n204800384_1 = (unsigned __int16)Result | 0x4B0000; /*0x694d*/
}
else
{
Result = -64384; /*0x6694*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x66a0*/
Result = 511967231; /*0x66c2*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54316, 15, 0, &Result, 2); /*0x66ce*/
Result = 12544; /*0x66f5*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54320, 15, 0, &Result, 2); /*0x66fc*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52184, 0, 0, &n204800384_2, 2); /*0x6725*/
Result = (unsigned __int16)n204800384_2 | 0x80000; /*0x673d*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52184, 15, 0, &Result, 2); /*0x6754*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52188, 0, 0, &n204800384_2, 2); /*0x6778*/
Result = n204800384_2 & 0xFFFF0000; /*0x6790*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52188, 15, 0, &Result, 2); /*0x67a7*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58420, 0, 0, &Result, 2); /*0x67d0*/
n204800384_1 = (unsigned __int16)Result | 0x7D0000; /*0x67d9*/
}
Result = n204800384_1; /*0x6952*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58420, 15, 0, &Result, 2); /*0x6974*/
Result = 4915225; /*0x6993*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58420, 15, 0, &Result, 2); /*0x699f*/
goto LABEL_27; /*0x699f*/
}
return result; /*0x69b3*/
}
// RtkUsbUndiPhyProgramRegs @ 0x69c4 void RtkUsbUndiPhyProgramRegs(__int64 n0x8000)
{
int v2; // ecx int v3; // ecx int v4; // ecx __int16 n3; // r9 __int16 v6; // r8 int *p_n5854; // rax int n5854; // [rsp+60h] [rbp+20h] BYREF int v9; // [rsp+68h] [rbp+28h] BYREF v2 = *(_DWORD *)(n0x8000 + 5000); /*0x69dd*/
v9 = 0; /*0x69e6*/
v3 = v2 - 7; /*0x69ea*/
if ( v3 ) /*0x69ed*/
{
v4 = v3 - 1; /*0x69f3*/
if ( v4 ) /*0x69f5*/
{
if ( v4 != 1 ) /*0x69fd*/
return; /*0x69fd*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x8Cu, 63488, 255, 0, byte_C550, 2); /*0x6a2b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, byte_C3F8, 2); /*0x6a55*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &v9, 2); /*0x6a7d*/
if ( (v9 & 0x1000000) != 0 ) /*0x6aaa*/
{
n5854 = 5854; /*0x6aac*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n5854, 2); /*0x6ab3*/
n5854 = 29; /*0x6ab8*/
}
else
{
n5854 = 0; /*0x6ae4*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n5854, 2); /*0x6ae8*/
n5854 = 28; /*0x6aed*/
}
n3 = 3; /*0x6abf*/
v6 = -968; /*0x6ac5*/
p_n5854 = &n5854; /*0x6acb*/
}
else
{
RtkUsbUndiControlTransferUsb3(n0x8000, 0x118u, 63488, 255, 0, byte_BEC0, 2); /*0x6b22*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x14u, 64548, 60, 0, byte_BEA0, 2); /*0x6b4c*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &v9, 2); /*0x6b74*/
if ( (v9 & 0x1000000) != 0 ) /*0x6ba1*/
{
n5854 = 5496; /*0x6ba3*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n5854, 2); /*0x6baa*/
n5854 = 255; /*0x6baf*/
}
else
{
n5854 = 0; /*0x6bb8*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n5854, 2); /*0x6bbc*/
n5854 = 239; /*0x6bc1*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 3, 0, &n5854, 2); /*0x6beb*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x400u, 63488, 63, 1u, byte_BFE0, 2); /*0x6c19*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 1u, byte_C530, 2); /*0x6c45*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &v9, 2); /*0x6c6a*/
v9 |= 0x40000000u; /*0x6c6f*/
n3 = 8; /*0x6c74*/
v6 = -12344; /*0x6c7a*/
p_n5854 = &v9; /*0x6c80*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, v6, n3, 0, p_n5854, 2); /*0x6adf*/
}
else
{
RtkUsbUndiControlTransferUsb3(n0x8000, 0x15Cu, 63488, 255, 0, byte_C790, 2); /*0x6cb5*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, p_n16, 2); /*0x6cdf*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54156, 0, 0, &v9, 2); /*0x6d07*/
if ( (v9 & 0x10000) != 0 ) /*0x6d13*/
{
n5854 = 8519810; /*0x6d31*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54156, 15, 0, &n5854, 2); /*0x6d3d*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 0x400u, 63488, 63, 1u, byte_CA50, 2); /*0x6d6b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 1u, byte_C8F0, 2); /*0x6d97*/
}
}
// RtkUsbUndiHwConfigRegs @ 0x6db0 __int64 RtkUsbUndiHwConfigRegs(__int64 n0x8000)
{
__int64 Result; // rax unsigned __int8 n0x14; // di __int16 n3; // r9 __int16 v5; // r8 unsigned int n0x2000; // [rsp+70h] [rbp+30h] BYREF int v7; // [rsp+78h] [rbp+38h] BYREF Result = *(unsigned int *)(n0x8000 + 5000); /*0x6dc3*/
n0x14 = 0; /*0x6dcf*/
if ( (int)Result >= 2 ) /*0x6dd8*/
{
if ( (int)Result <= 4 ) /*0x6de5*/
{
n0x2000 = 0x2000; /*0x7084*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x7090*/
n0x2000 = 784; /*0x70b2*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 45072, 3, 1u, &n0x2000, 2); /*0x70be*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57408, 0, 1u, &v7, 2); /*0x70e5*/
n0x2000 = v7 & 0xFFFFFFFC; /*0x70f8*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57408, 15, 1u, &n0x2000, 2); /*0x7118*/
n0x2000 = 0x2000; /*0x713a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x7146*/
n0x2000 = 49279; /*0x716d*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 45184, 3, 1u, &n0x2000, 2); /*0x7174*/
n0x2000 = 1882193920; /*0x7197*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 45200, 12, 1u, &n0x2000, 2); /*0x71a3*/
n0x2000 = 65510; /*0x71a8*/
n3 = 3; /*0x71af*/
v5 = -20332; /*0x71b2*/
}
else
{
if ( (int)Result <= 9 ) /*0x6dee*/
{
n0x2000 = 40960; /*0x6f38*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x6f44*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46128, 0, 1u, &v7, 2); /*0x6f6b*/
n0x2000 = v7 & 0xFFFFFFFB; /*0x6f84*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46128, 3, 1u, &n0x2000, 2); /*0x6f9b*/
do /*0x6fff*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57344, 0, 1u, &n0x2000, 2); /*0x6fc2*/
if ( (n0x2000 & 0x100) != 0 ) /*0x6fce*/
break; /*0x6fce*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x6fd7*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x6fde*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x6ff2*/
++n0x14; /*0x6ff8*/
}
while ( n0x14 < 0x14u ); /*0x6fff*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57408, 0, 1u, &v7, 2); /*0x7023*/
n0x2000 = v7 & 0xFFFFFFFC; /*0x703e*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57408, 15, 1u, &n0x2000, 2); /*0x7058*/
}
else
{
if ( (int)Result > 11 ) /*0x6df7*/
return Result; /*0x6df7*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57408, 0, 1u, &v7, 2); /*0x6e1c*/
n0x2000 = v7 & 0xFFFFFFFC; /*0x6e30*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57408, 15, 1u, &n0x2000, 2); /*0x6e50*/
}
n0x2000 = 40960; /*0x6e78*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x6e7f*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46128, 0, 1u, &v7, 2); /*0x6ea6*/
n0x2000 = v7 & 0xFFEFFFFF; /*0x6ec0*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46128, 15, 1u, &n0x2000, 2); /*0x6ed7*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46544, 0, 1u, &v7, 2); /*0x6f00*/
n3 = 15; /*0x6f0b*/
v5 = -18992; /*0x6f0e*/
n0x2000 = v7 & 0xFFFFFFF9; /*0x6f11*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, v5, n3, 1u, &n0x2000, 2); /*0x71d1*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57472, 0, 1u, &v7, 2); /*0x71fa*/
n0x2000 = v7 & 0xFFFFFFFD; /*0x720d*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57472, 15, 1u, &n0x2000, 2); /*0x7227*/
}
return Result; /*0x7234*/
}
// RtkUsbUndiMacInitLink @ 0x7240 __int64 RtkUsbUndiMacInitLink(__int64 n0x8000, __int64 padArg1, __int64 padArg2, int padArg3)
{
__int64 result; // rax int v6; // r9d __int16 v7; // di unsigned __int16 Result; // si unsigned __int16 Result; // di bool v10; // zf unsigned int n0x1E0; // esi int v12; // eax unsigned __int16 Result; // r8 __int16 Result; // [rsp+48h] [rbp+10h] BYREF unsigned int Result; // [rsp+50h] [rbp+18h] BYREF Result = 0; /*0x7261*/
LOWORD(Result) = 0; /*0x7265*/
result = RtkUsbUndiPhyRead(n0x8000, 4u, &Result, padArg3); /*0x7269*/
if ( result >= 0 )
{
v7 = Result & 0xF21F; /*0x728b*/
result = RtkUsbUndiPhyRead(n0x8000, 9u, &Result, v6); /*0x728e*/
if ( result >= 0 )
{
Result = Result & 0xFCFF; /*0x72a6*/
if ( *(_BYTE *)(n0x8000 + 4590) ) /*0x72a9*/
v7 |= 0xC00u; /*0x72b7*/
Result = v7 | 0x1E0; /*0x72c0*/
if ( *(_BYTE *)(n0x8000 + 5425) ) /*0x72c4*/
Result |= 0x300u; /*0x72d2*/
result = RtkUsbUndiPhyWrite(n0x8000, 4u, Result, 5); /*0x72e4*/
if ( result >= 0 )
{
result = RtkUsbUndiPhyWrite(n0x8000, 9u, Result, 5); /*0x7301*/
if ( result >= 0 )
{
if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x730f*/
result = RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&Result, (unsigned int *)(n0x8000 + 212)); /*0x7327*/
if ( !(_BYTE)Result
|| (*(_BYTE *)(n0x8000 + 4506) != 1
? (v10 = *(_DWORD *)(n0x8000 + 212) == 4)
: (v10 = *(_DWORD *)(n0x8000 + 212) == 6),
!v10) )
{
if ( *(_BYTE *)(n0x8000 + 4462) == 1 )
{
result = RtkUsbUndiCheckMediaStatus(n0x8000); /*0x7362*/
if ( (_DWORD)result == 1 )
{
n0x1E0 = 0; /*0x7370*/
if ( *(_BYTE *)(n0x8000 + 5387) ) /*0x7372*/
goto LABEL_23; /*0x7372*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x7389*/
v12 = *(_DWORD *)(n0x8000 + 5000); /*0x738e*/
if ( v12 == 1 || (Result = 4608, (unsigned int)(v12 - 5) <= 6) ) /*0x73a5*/
Result = -28160; /*0x73a7*/
result = RtkUsbUndiPhyWrite(n0x8000, 0, Result, 2); /*0x73b5*/
*(_BYTE *)(n0x8000 + 5387) = 1; /*0x73ba*/
if ( result >= 0 )
{
LABEL_23:
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x73d2*/
result = (*(__int64 ( **)(__int64))(n0x8000 + 4896))(50000); /*0x73d6*/
else result = (*(__int64 ( **)(_QWORD, __int64))(n0x8000 + 4928))( /*0x73e8*/
*(_QWORD *)(n0x8000 + 4864),
50000);
do
{
if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x73ee*/
result = RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&Result, &Result); /*0x7404*/
if ( (_BYTE)Result ) /*0x740e*/
break; /*0x740e*/
result = *(_BYTE *)(n0x8000 + 4498) == 48
? (*(__int64 ( **)(__int64))(n0x8000 + 4896))(50000)
: (*(__int64 ( **)(_QWORD, __int64))(n0x8000 + 4928))(
*(_QWORD *)(n0x8000 + 4864),
50000);
++n0x1E0; /*0x7434*/
}
while ( n0x1E0 < 0x1E0 );
}
}
}
}
}
}
}
}
return result; /*0x7445*/
}
// RtkUsbUndiCheckLedMode @ 0x7450 char RtkUsbUndiCheckLedMode(__int64 n0x8000)
{
unsigned __int16 v2; // cx int v4; // [rsp+50h] [rbp+8h] BYREF if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 9 ) /*0x7465*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 50160, 15, 0, &v4, 2); /*0x748d*/
if ( (v4 & 0xFFFF0000) == 0xD4500000 ) /*0x74a0*/
{
v2 = v4; /*0x74a2*/
*(_BYTE *)(n0x8000 + 5428) = 1; /*0x74a6*/
*(_QWORD *)(n0x8000 + 5432) = v2; /*0x74b2*/
return 1; /*0x74b9*/
}
*(_QWORD *)(n0x8000 + 5432) = 0; /*0x74bb*/
*(_BYTE *)(n0x8000 + 5428) = 0; /*0x74c3*/
}
return 0; /*0x74cc*/
}
// RtkUsbUndiInitLed @ 0x74d4 __int64 RtkUsbUndiInitLed(__int64 n0x8000)
{
int n40960; // [rsp+58h] [rbp+10h] BYREF n40960 = 40960; /*0x74fe*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n40960, 2); /*0x750b*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46128, 0, 1u, &n40960, 2); /*0x7537*/
n40960 &= ~4u; /*0x753c*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46128, 3, 1u, &n40960, 2); /*0x756f*/
}
// RtkUsbUndiMiiConfig @ 0x7578 __int64 RtkUsbUndiMiiConfig(__int64 n0x8000)
{
unsigned int n2250_1; // eax __int64 result; // rax unsigned int Status; // [rsp+60h] [rbp+20h] BYREF int v5; // [rsp+68h] [rbp+28h] BYREF if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 7 ) /*0x75a6*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 56720, 0, 1u, &v5, 2); /*0x75c6*/
Status = v5 & 0xF8FFFFFF; /*0x75db*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 56720, 15, 1u, &Status, 2); /*0x75f8*/
}
if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 1 ) /*0x760f*/
{
Status = 2250; /*0x7634*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54152, 3, 1u, &Status, 2); /*0x7640*/
Status = 41728; /*0x7661*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 55332, 2, 0, &Status, 2); /*0x766d*/
Status = 0; /*0x7672*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55296, 0, 0, &Status, 2); /*0x7697*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54296, 0, 0, &v5, 2); /*0x76ba*/
if ( (Status & 0x20) != 0 ) /*0x76d9*/
n2250_1 = v5 | 0xC0000; /*0x76db*/
else n2250_1 = v5 & 0xFFF7FFFF; /*0x76e2*/
Status = n2250_1; /*0x76e6*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54296, 15, 0, &Status, 2); /*0x76f7*/
Status = 2250; /*0x771b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54152, 3, 1u, &Status, 2); /*0x7727*/
}
result = (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 8); /*0x7732*/
if ( (unsigned int)result <= 1 ) /*0x7738*/
{
Status = 54394880; /*0x7756*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54296, 12, 0, &Status, 2); /*0x7762*/
}
return result; /*0x7771*/
}
// RtkUsbUndiInitReg8153 @ 0x777c __int64 RtkUsbUndiInitReg8153(__int64 n0x8000)
{
unsigned int i; // edi unsigned int j; // edi int n7; // eax __int64 result; // rax int Result; // [rsp+70h] [rbp+30h] BYREF Result = 0; /*0x77a8*/
for ( i = 0; i <= 0x64; ++i ) /*0x77ac*/
{
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57348, 0, 1u, &Result, 2) < 0 || (Result & 2) != 0 ) /*0x77df*/
break; /*0x77df*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x77ea*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x77ef*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x7801*/
}
Result = 40960; /*0x782c*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &Result, 2); /*0x7838*/
for ( j = 0; j <= 0x64; ++j ) /*0x783d*/
{
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &Result, 2) < 0 /*0x787a*/
|| (((Result & 7) - 3) & 0xFFFFFFFD) == 0 )
{
break; /*0x787a*/
}
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x7885*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x788a*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x789c*/
}
n7 = *(_DWORD *)(n0x8000 + 5000); /*0x78a7*/
if ( n7 == 7 ) /*0x78b0*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46120, 0, 0, &Result, 2); /*0x78da*/
Result |= 0x12Cu; /*0x78df*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46120, 3, 0, &Result, 2); /*0x7908*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46108, 0, 0, &Result, 2); /*0x7931*/
Result |= 0x30000u; /*0x7936*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46108, 12, 0, &Result, 2); /*0x7961*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46176, 0, 0, &Result, 2); /*0x798a*/
Result &= ~1u; /*0x798f*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46176, 1, 0, &Result, 2); /*0x79b3*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x79dc*/
Result |= 0x10000u; /*0x79e1*/
}
else
{
if ( (unsigned int)(n7 - 8) > 1 ) /*0x79f1*/
goto LABEL_22; /*0x79f1*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x7a1b*/
Result |= 0x10000u; /*0x7a20*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46180, 12, 0, &Result, 2); /*0x7a49*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53184, 0, 0, &Result, 2); /*0x7a70*/
if ( Result ) /*0x7a98*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x7aa5*/
Result |= 1u; /*0x7aaa*/
}
else
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x7a9a*/
Result &= ~1u; /*0x7a9f*/
}
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46180, 12, 0, &Result, 2); /*0x7acd*/
LABEL_22:
Result = 1; /*0x7ad2*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52216, 3, 0, &Result, 2); /*0x7afe*/
if ( *(_DWORD *)(n0x8000 + 5000) == 8 ) /*0x7b0a*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49328, 0, 1u, &Result, 2); /*0x7b34*/
Result &= ~2u; /*0x7b39*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49328, 1, 1u, &Result, 2); /*0x7b5f*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &Result, 2); /*0x7b88*/
Result &= ~0x40000000u; /*0x7b8d*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53192, 8, 0, &Result, 2); /*0x7bb4*/
}
return result; /*0x7bc6*/
}
// RtkUsbUndiInitReg8154 @ 0x7bd4 __int64 RtkUsbUndiInitReg8154(__int64 n0x8000)
{
unsigned int i; // edi unsigned int j; // edi int Status; // [rsp+78h] [rbp+38h] BYREF unsigned int v6; // [rsp+80h] [rbp+40h] BYREF Status = 0; /*0x7c00*/
for ( i = 0; i <= 0x64; ++i ) /*0x7c03*/
{
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57348, 0, 1u, &Status, 2) < 0 || (Status & 2) != 0 ) /*0x7c35*/
break; /*0x7c35*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x7c40*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x7c45*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x7c57*/
}
Status = 40960; /*0x7c82*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &Status, 2); /*0x7c8e*/
for ( j = 0; j <= 0x64; ++j ) /*0x7c93*/
{
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &Status, 2) < 0 /*0x7ccf*/
|| (((Status & 7) - 3) & 0xFFFFFFFD) == 0 )
{
break; /*0x7ccf*/
}
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x7cda*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x7cdf*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x7cf1*/
}
Status = 0; /*0x7d1c*/
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55304, 0, 0, &Status, 2) >= 0 ) /*0x7d31*/
{
v6 = Status & 0xFFEFFFFF; /*0x7d4d*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 55304, 15, 0, &v6, 2) >= 0 /*0x7d9c*/
&& RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53244, 12, 0, &Status, 2) >= 0 )
{
v6 = Status & 0xFEFFFFFF; /*0x7db7*/
if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53244, 12, 0, &v6, 2) >= 0 /*0x7e02*/
&& RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55320, 0, 0, &Status, 2) >= 0 )
{
v6 = Status & 0xFFFEFFFF; /*0x7e1a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 55320, 15, 0, &v6, 2); /*0x7e2e*/
}
}
}
Status = 0; /*0x7e50*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55296, 0, 0, &Status, 2); /*0x7e58*/
Status = 32768000; /*0x7e83*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54488, 12, 0, &Status, 2); /*0x7e9c*/
}
// RtkUsbUndiOcpInit @ 0x7ea8 __int64 RtkUsbUndiOcpInit(__int64 n0x8000)
{
__int64 Result; // rax int Status; // [rsp+60h] [rbp+20h] BYREF int v4; // [rsp+68h] [rbp+28h] BYREF Result = *(unsigned int *)(n0x8000 + 5000); /*0x7eb7*/
v4 = 0; /*0x7ebd*/
if ( (int)Result >= 7 ) /*0x7ec7*/
{
if ( (int)Result <= 9 ) /*0x7ed0*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49340, 0, 1u, &v4, 2); /*0x8012*/
Status = v4 & 0x7F00; /*0x802d*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49340, 3, 1u, &Status, 2); /*0x8043*/
Status = 16; /*0x8069*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58408, 3, 1u, &Status, 2); /*0x8070*/
Status = 0; /*0x8075*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53992, 3, 1u, &Status, 2); /*0x809a*/
LABEL_11:
Status = 0; /*0x809f*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53964, 15, 1u, &Status, 2); /*0x80c6*/
}
if ( (int)Result <= 11 ) /*0x7ed9*/
{
Status = 255; /*0x7f05*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49340, 3, 1u, &Status, 2); /*0x7f0c*/
if ( Result >= 0 ) /*0x7f14*/
{
Status = 16; /*0x7f36*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58408, 3, 1u, &Status, 2); /*0x7f42*/
if ( Result >= 0 ) /*0x7f4a*/
{
Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49348, 0, 1u, &v4, 2); /*0x7f70*/
if ( Result >= 0 ) /*0x7f78*/
{
Status = v4 & 0xFFFFFFCE; /*0x7f94*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49348, 15, 1u, &Status, 2); /*0x7fa8*/
if ( Result >= 0 ) /*0x7fb0*/
{
Status = 0; /*0x7fb6*/
Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53992, 3, 1u, &Status, 2); /*0x7fdb*/
if ( Result >= 0 ) /*0x7fe3*/
goto LABEL_11; /*0x7fe3*/
}
}
}
}
}
}
return Result; /*0x80d0*/
}
// RtkUsbUndiSetSpeed @ 0x80d8 __int64 RtkUsbUndiSetSpeed(__int64 n0x8000)
{
int Result; // eax __int64 result; // rax int Result; // [rsp+60h] [rbp+20h] BYREF int Result; // [rsp+68h] [rbp+28h] BYREF Result = *(_DWORD *)(n0x8000 + 5000); /*0x80ef*/
Result = 0; /*0x80f5*/
result = (unsigned int)(Result - 10); /*0x80fc*/
if ( (unsigned int)result <= 1 ) /*0x8102*/
{
result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &Result, 2); /*0x812e*/
if ( result >= 0 ) /*0x8136*/
{
Result = Result & 0xFFFFFFFC; /*0x8151*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &Result, 2); /*0x8165*/
if ( result >= 0 ) /*0x816d*/
{
result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &Result, 2); /*0x8192*/
if ( result >= 0 ) /*0x819a*/
{
Result = Result | 3; /*0x81b5*/
result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &Result, 2); /*0x81c9*/
if ( result >= 0 ) /*0x81d1*/
{
Result = -65152; /*0x81f8*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x8204*/
Result = 37617663; /*0x822b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54316, 15, 0, &Result, 2); /*0x8232*/
Result = 122880000; /*0x8254*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54320, 15, 0, &Result, 2); /*0x8260*/
Result = 50331648; /*0x8288*/
return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54324, 8, 0, &Result, 2); /*0x828f*/
}
}
}
}
}
return result; /*0x829e*/
}
// RtkUsbUndiGetMacFromAcpi @ 0x82a8 char RtkUsbUndiGetMacFromAcpi(__int64 n0x8000, __int64 a2, __int64 a3, double a4)
{
char Ptr; // dl unsigned __int64 v6; // r11 char Ptr; // di unsigned __int64 Index; // r10 __int64 v9; // rbx __int64 v10; // r8 unsigned __int64 i; // r9 __int64 Ptr; // rax __int64 n4; // r10 unsigned __int64 v14; // r8 int v15; // ecx __int64 n4_1; // r11 unsigned __int8 *v17; // r9 int v18; // eax int v19; // eax int v20; // eax __int64 v21; // r9 unsigned int v22; // r8d unsigned __int8 *v23; // r9 int v24; // ecx __int64 n4_2; // r11 int v26; // eax int v27; // eax unsigned __int64 v28; // r9 __int64 Index; // r8 unsigned __int8 *v30; // r9 int v31; // ecx __int64 n4_3; // r11 int v33; // eax int v34; // eax unsigned __int8 *v35; // r9 int v36; // ecx int v37; // eax int v38; // eax unsigned int Index; // eax char *v41; // r9 char *v42; // r8 __int64 n6; // r10 char v44; // cl char v45; // cl char v46; // cl _DWORD v47[4]; // [rsp+20h] [rbp-10h] BYREF char v48; // [rsp+48h] [rbp+18h] BYREF Ptr = 0; /*0x82c6*/
v6 = *(_QWORD *)(qword_E2F0 + 104); /*0x82cb*/
v47[0] = -2006390671; /*0x82cf*/
v47[1] = 299099377; /*0x82d6*/
v47[2] = -2147474756; /*0x82dd*/
v47[3] = -2121777977; /*0x82e4*/
Ptr = 0; /*0x82eb*/
Index = 0; /*0x82ee*/
if ( !v6 ) /*0x82f4*/
return 0; /*0x82f4*/
v9 = *(_QWORD *)(qword_E2F0 + 112); /*0x82fa*/
v10 = v9 - (_QWORD)v47; /*0x8305*/
LABEL_3:
for ( i = 0; i < 0x10; ++i ) /*0x8308*/
{
if ( *((_BYTE *)v47 + i) != *((_BYTE *)v47 + i + v10) ) /*0x8318*/
{
++Index; /*0x842e*/
v10 += 24; /*0x8431*/
if ( Index >= v6 ) /*0x8438*/
return 0; /*0x8438*/
goto LABEL_3; /*0x8438*/
}
}
Ptr = 3 *Index; /*0x8327*/
n4 = 4; /*0x832b*/
LODWORD(v14) = 0; /*0x8331*/
v15 = 0; /*0x8339*/
n4_1 = 4; /*0x833b*/
v17 = (unsigned __int8 *)(*(_QWORD *)(v9 + 8 *Ptr + 16) + 16LL); /*0x833e*/
do /*0x8354*/
{
v18 = *v17++; /*0x8342*/
v19 = v18 << v15; /*0x8349*/
v15 += 8; /*0x834b*/
v14 = (unsigned int)(v19 + v14); /*0x834e*/
--n4_1; /*0x8351*/
}
while ( n4_1 ); /*0x8354*/
v20 = *(_DWORD *)v14; /*0x8356*/
*(_DWORD *)&word_4 = v14; /*0x8359*/
v21 = (unsigned int)v14; /*0x8361*/
if ( v20 != dword_D49C ) /*0x836a*/
return 0; /*0x836a*/
v22 = 0; /*0x8370*/
v23 = (unsigned __int8 *)(v21 + 36); /*0x8373*/
v24 = 0; /*0x8377*/
n4_2 = 4; /*0x8379*/
do /*0x838e*/
{
v26 = *v23++; /*0x837c*/
v27 = v26 << v24; /*0x8383*/
v24 += 8; /*0x8385*/
v22 += v27; /*0x8388*/
--n4_2; /*0x838b*/
}
while ( n4_2 ); /*0x838e*/
v28 = v22; /*0x8390*/
*(_DWORD *)&word_4 = v22; /*0x8393*/
LODWORD(Index) = 0; /*0x839b*/
if ( *(_DWORD *)v28 != dword_D4A4 ) /*0x83a7*/
return 0; /*0x83a7*/
v30 = (unsigned __int8 *)(v28 + 40); /*0x83a9*/
v31 = 0; /*0x83ad*/
n4_3 = 4; /*0x83af*/
do /*0x83c4*/
{
v33 = *v30++; /*0x83b2*/
v34 = v33 << v31; /*0x83b9*/
v31 += 8; /*0x83bb*/
Index = (unsigned int)(v34 + Index); /*0x83be*/
--n4_3; /*0x83c1*/
}
while ( n4_3 ); /*0x83c4*/
*(_DWORD *)&word_4 = Index; /*0x83c6*/
*(_DWORD *)&_ImageBase = 0; /*0x83ce*/
v35 = (unsigned __int8 *)(Index + 4); /*0x83d0*/
v36 = 0; /*0x83d4*/
do /*0x83e7*/
{
v37 = *v35++; /*0x83d6*/
v38 = v37 << v36; /*0x83dd*/
v36 += 8; /*0x83df*/
*(_DWORD *)&_ImageBase += v38; /*0x83e2*/
--n4; /*0x83e4*/
}
while ( n4 ); /*0x83e7*/
if ( *(_DWORD *)Index != dword_D4AC ) /*0x83f2*/
return 0; /*0x8417*/
Index = 0; /*0x8401*/
while ( *(_QWORD *)Index != qword_D4B8 || *(_BYTE *)(Index + 8) != byte_D4C0 ) /*0x840c*/
{
++Index; /*0x840e*/
++Index; /*0x8410*/
if ( Index > *(_DWORD *)&_ImageBase ) /*0x8415*/
return 0; /*0x8415*/
}
v41 = &v48; /*0x843f*/
v42 = (char *)(Index + 10); /*0x8443*/
n6 = 6; /*0x8447*/
while ( 2 ) /*0x8452*/
{
v44 = *(v42 - 1); /*0x8452*/
if ( (unsigned __int8)(v44 - 48) > 9u ) /*0x845d*/
{
if ( (unsigned __int8)(v44 - 65) > 5u ) /*0x846c*/
{
if ( (unsigned __int8)(v44 - 97) <= 5u ) /*0x8478*/
Ptr = v44 - 87; /*0x847a*/
}
else
{
Ptr = v44 - 55; /*0x846e*/
}
}
else
{
Ptr = v44 - 48; /*0x8462*/
}
v45 = *v42; /*0x847d*/
if ( (unsigned __int8)(*v42 - 48) <= 9u ) /*0x8487*/
{
v46 = v45 - 48; /*0x8489*/
goto LABEL_37; /*0x848c*/
}
if ( (unsigned __int8)(v45 - 65) <= 5u ) /*0x8493*/
{
v46 = v45 - 55; /*0x8495*/
goto LABEL_37; /*0x8498*/
}
if ( (unsigned __int8)(v45 - 97) <= 5u ) /*0x849f*/
{
v46 = v45 - 87; /*0x84a1*/
LABEL_37:
Ptr = v46; /*0x84a4*/
}
v42 += 2; /*0x84a9*/
*v41++ = Ptr | (16 *Ptr); /*0x84b2*/
if ( --n6 ) /*0x84bb*/
continue; /*0x84bb*/
break;
}
RtkUsbUndiCopyMem((_BYTE *)(n0x8000 + 252), &v48, 32, a4); /*0x84cc*/
return 1; /*0x8428*/
}
// RtkUsbUndiAlignRing @ 0x84d8 bool RtkUsbUndiAlignRing(__int64 n0x8000)
{
int Result; // edi unsigned __int16 Size; // ax unsigned __int16 v4; // cx __int64 v5; // rdx Result = 0; /*0x84ec*/
do /*0x85a7*/
{
Size = RtkUsbUndiSetMaxPacketSize( /*0x851c*/
n0x8000,
(_WORD *)(*(_QWORD *)(n0x8000 + 112)
+ *(unsigned __int16 *)(*(_QWORD *)(n0x8000 + 152) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500))
+ (__int64)(*(unsigned __int16 *)(n0x8000 + 4472) * *(unsigned __int16 *)(n0x8000 + 4500))));
if ( Size % (int)*(unsigned __int16 *)(n0x8000 + 5390) ) /*0x8534*/
{
*(_WORD *)(*(_QWORD *)(n0x8000 + 152) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)) += Size /*0x8555*/
+ *(_WORD *)(n0x8000 + 5390)
- Size
% (int)*(unsigned __int16 *)(n0x8000 + 5390);
v4 = *(_WORD *)(n0x8000 + 5390) - Size % (int)*(unsigned __int16 *)(n0x8000 + 5390); /*0x8564*/
}
else
{
*(_WORD *)(*(_QWORD *)(n0x8000 + 152) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)) += Size; /*0x8577*/
v4 = 0; /*0x857c*/
}
v5 = *(_QWORD *)(n0x8000 + 152); /*0x8587*/
Result += Size + v4; /*0x8594*/
}
while ( *(_WORD *)(v5 + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)) < *(_WORD *)(*(_QWORD *)(n0x8000 + 144) /*0x85a7*/
+ 2LL
* *(unsigned __int16 *)(n0x8000 + 4500)) );
*(_WORD *)(v5 + 2LL * *(unsigned __int16 *)(n0x8000 + 4502)) = 0; /*0x85b4*/
return Result == *(unsigned __int16 *)(*(_QWORD *)(n0x8000 + 144) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)); /*0x85d9*/
}
// RtkUsbUndiTxRxInit @ 0x85e0 __int64 RtkUsbUndiTxRxInit(__int64 n0x8000, unsigned __int64 n1000, __int64 a3, double a4)
{
__int64 allocStatus; // rsi unsigned __int64 j; // rdi int n11; // eax unsigned int regVal; // eax int regVal_2; // eax unsigned int regVal_3; // eax __int64 paddingArg1; // rdx __int64 paddingArg2; // r8 __int64 paddingArg3; // r8 char *descSrc; // rcx __int64 n6; // r9 char *descDst; // r8 char descByte; // al unsigned __int64 k; // rax __int64 loopCount; // r15 __int16 Index; // ax __int16 n511_1; // cx __int64 zeroArg; // r8 __int64 retryCount; // rsi __int16 Table; // r14 __int16 n511_2; // ax __int16 n511_3; // cx bool isDescriptorReady; // zf __int64 i; // [rsp+40h] [rbp-49h] BYREF int n3000; // [rsp+48h] [rbp-41h]
__int64 *p_i; // [rsp+50h] [rbp-39h] BYREF int n60; // [rsp+58h] [rbp-31h]
__int16 unusedVar; // [rsp+5Ch] [rbp-2Dh]
_QWORD gigaCfgBuf[8]; // [rsp+60h] [rbp-29h] BYREF unsigned int tempVal; // [rsp+A0h] [rbp+17h]
unsigned int regVal_1; // [rsp+F0h] [rbp+67h] BYREF int phyRegTemp; // [rsp+F8h] [rbp+6Fh] BYREF allocStatus = 0; /*0x8605*/
phyRegTemp = 0; /*0x8608*/
*(_BYTE *)(n0x8000 + 5444) = 1; /*0x860c*/
RtkUsbUndiMcastDisableAll(n0x8000); /*0x8613*/
RtkUsbUndiPhySetPower(n0x8000, 1); /*0x861d*/
if ( *(_DWORD *)(n0x8000 + 5000) != 1 ) /*0x8632*/
{
for ( j = 0; j <= 0x64; ++j ) /*0x8638*/
{
if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, ®Val_1, 2) < 0 || (regVal_1 & 0x800) != 0 ) /*0x8677*/
break; /*0x8677*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x8683*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x8688*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x869a*/
}
while ( j <= 0x64 /*0x86eb*/
&& RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59468, 0, 1u, ®Val_1, 2) >= 0
&& ((regVal_1 & 0x20000000) == 0 || (regVal_1 & 0x10000000) == 0) )
{
++j; /*0x86ed*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x86f7*/
(*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x86fc*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x870e*/
}
}
RtkUsbUndiSetStationAddress(n0x8000); /*0x871f*/
RtkUsbUndiClearStatus(n0x8000); /*0x8727*/
RtkUsbUndiConfigurePhy(n0x8000); /*0x872f*/
RtkUsbUndiPhySetPower(n0x8000, 0); /*0x8739*/
RtkUsbUndiMcastEnableAll(n0x8000); /*0x8741*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &phyRegTemp, 2); /*0x876a*/
regVal_1 = phyRegTemp & 0xFFFFFFFC; /*0x8780*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 15, 0, ®Val_1, 2); /*0x879a*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x87a6*/
(*(void ( **)(__int64))(n0x8000 + 4896))(5000); /*0x87ad*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 5000); /*0x87c1*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &phyRegTemp, 2); /*0x87e6*/
regVal_1 = phyRegTemp | 3; /*0x87ff*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 15, 0, ®Val_1, 2); /*0x8816*/
n11 = *(_DWORD *)(n0x8000 + 5000); /*0x881b*/
if ( n11 >= 2 ) /*0x8824*/
{
if ( n11 <= 4 ) /*0x882d*/
{
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 15, 1u, ®Val_1, 2); /*0x889b*/
regVal_3 = regVal_1; /*0x88a0*/
*(_DWORD *)(n0x8000 + 5440) = regVal_1; /*0x88a3*/
regVal_2 = regVal_3 | 0x2C000; /*0x88a9*/
}
else
{
if ( n11 > 11 ) /*0x8832*/
goto LABEL_25; /*0x8832*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 15, 1u, ®Val_1, 2); /*0x885f*/
regVal = regVal_1; /*0x8864*/
*(_DWORD *)(n0x8000 + 5440) = regVal_1; /*0x8867*/
regVal_2 = regVal | 0x2D000; /*0x886d*/
}
regVal_1 = regVal_2; /*0x88ae*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, ®Val_1, 2); /*0x88d3*/
}
LABEL_25:
*(_BYTE *)(n0x8000 + 5444) = 1; /*0x88d8*/
RtkUsbUndiPhyFullInit(n0x8000); /*0x88e2*/
RtkUsbUndiWaitForNvram(n0x8000, paddingArg1, paddingArg2, a4); /*0x88ea*/
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x88fb*/
(*(void ( **)(__int64))(n0x8000 + 4896))(3000000); /*0x88ff*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000000); /*0x8911*/
RtkUsbUndiZeroMem((__int64)::p_i, 0x5EAu, paddingArg3, a4); /*0x8926*/
descSrc = (char *)(n0x8000 + 252); /*0x8938*/
n6 = 6; /*0x893f*/
descDst = (char *)&unk_E326 - n0x8000; /*0x8945*/
do /*0x8961*/
{
::p_i[(_QWORD)descSrc - n0x8000 - 252] = *descSrc; /*0x894a*/
descByte = *descSrc++; /*0x8951*/
descSrc[(_QWORD)descDst - 253] = descByte; /*0x8956*/
--n6; /*0x895e*/
}
while ( n6 ); /*0x8961*/
for ( k = 12; k < 0x3C; ++k ) /*0x8963*/
::p_i[k] = k; /*0x8967*/
loopCount = 0; /*0x8974*/
if ( !n1000 ) /*0x897f*/
goto LABEL_49; /*0x897f*/
LABEL_33:
unusedVar = 0; /*0x8985*/
n60 = 60; /*0x8991*/
p_i = (__int64 *)::p_i; /*0x8998*/
RtkUsbUndiPhyRegsConfig1(n0x8000, &p_i, descDst, a4); /*0x899c*/
(*(void ( **)(__int64))(qword_E2F8 + 248))(100); /*0x89ad*/
Index = *(_WORD *)(n0x8000 + 4440); /*0x89b3*/
n511_1 = *(_WORD *)(n0x8000 + 4442); /*0x89ba*/
if ( Index != n511_1 ) /*0x89c4*/
{
do /*0x89dd*/
{
if ( Index == 511 ) /*0x89ce*/
Index = 0; /*0x89d0*/
else
++Index; /*0x89d8*/
}
while ( Index != n511_1 ); /*0x89dd*/
*(_WORD *)(n0x8000 + 4440) = Index; /*0x89df*/
}
allocStatus = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 3000, &i); /*0x89fe*/
if ( allocStatus >= 0 ) /*0x8a04*/
{
RtkUsbUndiZeroMem(i, 0xBB8u, zeroArg, a4); /*0x8a15*/
n3000 = 3000; /*0x8a1a*/
retryCount = 0; /*0x8a1d*/
while ( 1 ) /*0x8a3c*/
{
Table = RtkUsbUndiPhyConfigGiga(n0x8000, (char **)&i, gigaCfgBuf, a4); /*0x8a3c*/
(*(void ( **)(__int64))(qword_E2F8 + 248))(10); /*0x8a40*/
if ( (unsigned __int64)++retryCount > 0x186A0 ) /*0x8a50*/
break; /*0x8a50*/
if ( Table != 19 ) /*0x8a57*/
{
if ( !RtkUsbUndiSetMem((_BYTE *)i, ::p_i, 60, a4) ) /*0x8a6d*/
{
allocStatus = 0; /*0x8a82*/
(*(void ( **)(__int64))(qword_E2F8 + 72))(i); /*0x8a85*/
if ( ++loopCount < n1000 ) /*0x8a8e*/
goto LABEL_33; /*0x8a8e*/
goto LABEL_49; /*0x8a8e*/
}
allocStatus = 0x8000000000000007uLL; /*0x8aa0*/
RtkUsbUndiSerialPrint( /*0x8aaa*/
MEMORY[0xD4D0], // "MAC LOOPBACK FAILED, Corrupt Packet Data, PKT len= %X!\n"
tempVal); // "MAC LOOPBACK FAILED, Corrupt Packet Data, PKT len= %X!\n"
LABEL_48:
(*(void ( **)(__int64))(qword_E2F8 + 72))(i); /*0x8abb*/
goto LABEL_49; /*0x8ac6*/
}
}
allocStatus = 0x8000000000000007uLL; /*0x8ab1*/
goto LABEL_48; /*0x8ab1*/
}
LABEL_49:
n511_2 = *(_WORD *)(n0x8000 + 4440); /*0x8ace*/
n511_3 = *(_WORD *)(n0x8000 + 4442); /*0x8ad5*/
if ( n511_2 != n511_3 ) /*0x8adf*/
{
do /*0x8af3*/
{
if ( n511_2 == 511 ) /*0x8ae4*/
n511_2 = 0; /*0x8ae6*/
else
++n511_2; /*0x8aee*/
}
while ( n511_2 != n511_3 ); /*0x8af3*/
*(_WORD *)(n0x8000 + 4440) = n511_2; /*0x8af5*/
}
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, (_BYTE *)(n0x8000 + 5440), 2); /*0x8b27*/
isDescriptorReady = *(_BYTE *)(n0x8000 + 4498) == 48; /*0x8b2c*/
*(_BYTE *)(n0x8000 + 5444) = 0; /*0x8b33*/
if ( isDescriptorReady ) /*0x8b3a*/
(*(void ( **)(__int64))(n0x8000 + 4896))(3000000); /*0x8b3f*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000000); /*0x8b51*/
return allocStatus; /*0x8b62*/
}
// RtkUsbUndiComponentNameGet @ 0x8b78 __int64 RtkUsbUndiComponentNameGet(
__int64 a1,
__int64 a2,
__int64 a3,
int n2,
_BYTE *a5,
__int64 a6,
__int64 a7,
__int64 a8)
{
double v8; // xmm3_8 _BYTE *v12; // rbx __int64 v13; // r8 __int64 result; // rax __int64 v15; // r8 unsigned __int64 v16; // rbx unsigned __int64 v17; // rcx __int64 v18; // rsi _BYTE *v19; // rax _QWORD *v20; // rcx unsigned __int64 n1000; // rdx __int64 v22; // [rsp+30h] [rbp-28h] BYREF unsigned __int64 v23; // [rsp+38h] [rbp-20h] BYREF _BYTE v24[24]; // [rsp+40h] [rbp-18h] BYREF _QWORD *v25; // [rsp+68h] [rbp+10h] BYREF if ( !a2 ) /*0x8b98*/
return 0x8000000000000002uLL; /*0x8b98*/
v12 = a5; /*0x8b9e*/
if ( !a5 || !a8 || !a7 || !a6 ) /*0x8bd6*/
return 0x8000000000000002uLL; /*0x8d80*/
if ( RtkUsbUndiAsciiStrCmp( /*0x8c16*/
a5,
(char *)MEMORY[0xD3AC], // "eng"
a3,
v8) && RtkUsbUndiAsciiStrCmp(
v12,
MEMORY[0xD4C4], // "en-US"
v13,
v8)
|| n2 == 2 ) // "en-US"
{
return 0x8000000000000003uLL; /*0x8c16*/
}
if ( (*(__int64 ( **)(__int64, void *, _BYTE *, __int64, __int64, int))(qword_E2F8 + 280))( /*0x8c5f*/
a2,
&unk_BB40,
v24,
MEMORY[0xBBA8],
a2,
16) != 0x8000000000000014uLL )
{
(*(void ( **)(__int64, void *, __int64, __int64))(qword_E2F8 + 288))(a2, &unk_BB40, MEMORY[0xBBA8], a2); /*0x8c72*/
return 0x8000000000000003uLL; /*0x8c0e*/
}
result = (*(__int64 ( **)(__int64, void *, _QWORD **, __int64, __int64, int))(qword_E2F8 + 280))( /*0x8c9a*/
a2,
&unk_BD00,
&v25,
MEMORY[0xBBA8],
a2,
2);
if ( result >= 0 ) /*0x8ca3*/
{
v16 = 0x8000000000000003uLL; /*0x8ca9*/
if ( a3 ) /*0x8cb6*/
{
(*(void ( **)(__int64, void *, __int64 *, unsigned __int64 *))(qword_E2F8 + 296))( /*0x8cd3*/
a2,
&unk_BB50,
&v22,
&v23);
v17 = 0; /*0x8ce3*/
v18 = 0x8000000000000003uLL; /*0x8ce5*/
if ( v23 ) /*0x8ceb*/
{
v19 = (_BYTE *)(v22 + 16); /*0x8ced*/
while ( *((_QWORD *)v19 - 1) != a3 || (*v19 & 8) == 0 ) /*0x8cfa*/
{
++v17; /*0x8cfc*/
v19 += 24; /*0x8cff*/
if ( v17 >= v23 ) /*0x8d06*/
goto LABEL_21; /*0x8d06*/
}
v18 = 0; /*0x8d0a*/
}
LABEL_21:
(*(void ( **)(__int64))(qword_E2F8 + 72))(v22); /*0x8d16*/
if ( v18 < 0 ) /*0x8d1c*/
return v16; /*0x8d1c*/
}
v20 = (_QWORD *)(*v25 - 360LL); /*0x8d2b*/
if ( *v20 != 1768189557 ) /*0x8d39*/
{
RtkUsbUndiAssert( /*0x8d4e*/
(__int64)MEMORY[0xD540], // "f:\\uefi\\edk2\\OptionRomPkg\\SRC\\RtUefiUsbEDK2\\Diagnostic.c"
450,
(__int64)MEMORY[0xD310], // "CR has Bad Signature"
v8); // "CR has Bad Signature"
v20 = (_QWORD *)*v25; /*0x8d58*/
}
if ( n2 ) /*0x8d5d*/
{
if ( n2 != 1 ) /*0x8d61*/
return v16; /*0x8d21*/
n1000 = 1000; /*0x8d63*/
}
else
{
n1000 = 10; /*0x8d6a*/
}
return RtkUsbUndiTxRxInit((__int64)(v20 + 53), n1000, v15, v8); /*0x8d7e*/
}
return result; /*0x8d99*/
}
// RtkUsbUndiControlTransferUsb2 @ 0x8da0 __int64 RtkUsbUndiControlTransferUsb2(
__int64 a1,
unsigned __int16 a2,
__int16 a3,
__int16 a4,
unsigned __int8 a5,
_BYTE *a6,
int a7)
{
double v7; // xmm3_8 unsigned __int16 v13; // bx __int64 v14; // r15 unsigned int v15; // r12d __int64 v16; // rbx __int64 ( **v17)(_QWORD, _WORD *, _QWORD, _QWORD, _BYTE *, __int64, int *); // r10 __int64 v18; // r14 _WORD v19[4]; // [rsp+40h] [rbp-10h] BYREF _BYTE *v20; // [rsp+48h] [rbp-8h] BYREF int n16; // [rsp+80h] [rbp+30h] BYREF v20 = 0; /*0x8db9*/
if ( *(_QWORD *)(a1 + 5368) ) /*0x8dbe*/
return 0x8000000000000007uLL; /*0x8dd6*/
if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x8df3*/
{
v13 = a2; /*0x8e16*/
}
else
{
v13 = a2; /*0x8e06*/
if ( (a2 & 3) != 0 ) /*0x8e0b*/
v13 = a2 - (a2 & 3) + 4; /*0x8e10*/
}
v14 = v13; /*0x8e20*/
(*(void ( **)(__int64, _QWORD, _BYTE **))(qword_E2F8 + 64))(4, v13, &v20); /*0x8e2e*/
v19[1] = a3; /*0x8e35*/
v15 = 1000 *a7; /*0x8e3a*/
v19[3] = v13; /*0x8e46*/
v19[0] = 1472; /*0x8e4a*/
v16 = 0; /*0x8e54*/
v19[2] = a4 | (a5 << 8); /*0x8e56*/
while ( 1 ) /*0x8e5a*/
{
v17 = *(__int64 ( ***)(_QWORD, _WORD *, _QWORD, _QWORD, _BYTE *, __int64, int *))(a1 + 4872); /*0x8e5a*/
n16 = 0; /*0x8e61*/
v18 = (*v17)(v17, v19, 0, v15, v20, v14, &n16); /*0x8e8c*/
if ( v18 >= 0 ) /*0x8e92*/
break; /*0x8e92*/
if ( n16 == 16 && ++v16 < 2 ) /*0x8ea1*/
continue; /*0x8ea1*/
++*(_QWORD *)(a1 + 5368); /*0x8ea3*/
goto LABEL_14; /*0x8eaa*/
}
if ( a2 ) /*0x8eb3*/
RtkUsbUndiCopyMem(a6, v20, a2, v7); /*0x8ebd*/
LABEL_14:
(*(void ( **)(_BYTE *))(qword_E2F8 + 72))(v20); /*0x8ec2*/
return v18; /*0x8ee0*/
}
// RtkUsbUndiControlTransferUsb3 @ 0x8eec __int64 RtkUsbUndiControlTransferUsb3(
__int64 a1,
unsigned __int16 a2,
__int16 a3,
__int16 a4,
unsigned __int8 a5,
_BYTE *a6,
int a7)
{
double v7; // xmm3_8 unsigned __int16 v13; // bx __int64 v14; // r15 unsigned int v15; // r14d __int64 v16; // rbx __int64 ( **v17)(_QWORD, _WORD *, __int64, _QWORD, _BYTE *, __int64, int *); // r10 __int64 v18; // rsi _WORD v19[4]; // [rsp+40h] [rbp-10h] BYREF _BYTE *v20; // [rsp+48h] [rbp-8h] BYREF int n16; // [rsp+80h] [rbp+30h] BYREF v20 = 0; /*0x8f05*/
if ( *(_QWORD *)(a1 + 5368) ) /*0x8f0a*/
return 0x8000000000000007uLL; /*0x8f22*/
if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x8f3f*/
{
v13 = a2; /*0x8f62*/
}
else
{
v13 = a2; /*0x8f52*/
if ( (a2 & 3) != 0 ) /*0x8f57*/
v13 = a2 - (a2 & 3) + 4; /*0x8f5c*/
}
v14 = v13; /*0x8f6c*/
(*(void ( **)(__int64, _QWORD, _BYTE **))(qword_E2F8 + 64))(4, v13, &v20); /*0x8f7a*/
if ( a2 ) /*0x8f84*/
RtkUsbUndiCopyMem(v20, a6, a2, v7); /*0x8f8e*/
v19[3] = v13; /*0x8f97*/
v19[0] = 1344; /*0x8f9b*/
v19[1] = a3; /*0x8fa5*/
v19[2] = a4 | (a5 << 8); /*0x8fae*/
v15 = 1000 *a7; /*0x8fb2*/
v16 = 0; /*0x8fba*/
while ( 1 ) /*0x8fbc*/
{
v17 = *(__int64 ( ***)(_QWORD, _WORD *, __int64, _QWORD, _BYTE *, __int64, int *))(a1 + 4872); /*0x8fbc*/
n16 = 0; /*0x8fc3*/
v18 = (*v17)(v17, v19, 1, v15, v20, v14, &n16); /*0x8ff1*/
if ( v18 >= 0 ) /*0x8ff7*/
break; /*0x8ff7*/
if ( n16 == 16 && ++v16 < 2 ) /*0x9006*/
continue; /*0x9006*/
++*(_QWORD *)(a1 + 5368); /*0x9008*/
break; /*0x9008*/
}
(*(void ( **)(_BYTE *))(qword_E2F8 + 72))(v20); /*0x900f*/
return v18; /*0x902d*/
}
// RtkUsbUndiPhyWrite @ 0x903c __int64 RtkUsbUndiPhyWrite(__int64 a1, unsigned __int8 a2, unsigned __int16 a3, int a4)
{
unsigned __int8 Index; // si __int64 result; // rax signed int Result; // [rsp+50h] [rbp+8h] BYREF unsigned __int16 v9; // [rsp+60h] [rbp+18h] BYREF v9 = a3; /*0x9047*/
if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x9066*/
return RtkUsbUndiControlTransferUsb3(a1, 2u, (a2 << 8) | 0x60u, 0, 0, &v9, a4); /*0x9145*/
Index = 0; /*0x907c*/
Result = a3 | (a2 << 16) | 0x80000000; /*0x9092*/
result = RtkUsbUndiControlTransferUsb3(a1, 4u, 56832, 15, 1u, &Result, a4); /*0x909f*/
if ( result >= 0 ) /*0x90a7*/
{
while ( 1 ) /*0x9115*/
{
result = RtkUsbUndiControlTransferUsb2(a1, 4u, 56832, 0, 1u, &Result, a4); /*0x9115*/
if ( result < 0 || Result >= 0 || Index >= 5u ) /*0x90c1*/
break; /*0x90c1*/
++Index; /*0x90c7*/
if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x90d1*/
(*(void ( **)(__int64))(a1 + 4896))(10000); /*0x90d8*/
else
(*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 10000); /*0x90ec*/
}
}
return result; /*0x9154*/
}
// RtkUsbUndiPhyRead @ 0x915c __int64 RtkUsbUndiPhyRead(__int64 a1, unsigned __int8 a2, _WORD *a3, int a4)
{
unsigned __int8 Index; // si __int64 result; // rax int Result; // [rsp+68h] [rbp+20h] BYREF Result = a4; /*0x9167*/
if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x9181*/
return RtkUsbUndiControlTransferUsb2(a1, 2u, (a2 << 8) | 0x60u, 0, 0, a3, 2); /*0x9261*/
Result = a2 << 16; /*0x91a4*/
Index = 0; /*0x91ac*/
result = RtkUsbUndiControlTransferUsb3(a1, 4u, 56832, 15, 1u, &Result, 2); /*0x91b8*/
if ( result >= 0 ) /*0x91c0*/
{
while ( 1 ) /*0x922c*/
{
result = RtkUsbUndiControlTransferUsb2(a1, 4u, 56832, 0, 1u, &Result, 2); /*0x922c*/
if ( result < 0 ) /*0x9234*/
break; /*0x9234*/
if ( Result < 0 ) /*0x91ce*/
{
*a3 = Result; /*0x9238*/
return result; /*0x923c*/
}
if ( Index >= 5u ) /*0x91d4*/
return result; /*0x91d4*/
++Index; /*0x91da*/
if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x91e4*/
(*(void ( **)(__int64))(a1 + 4896))(10000); /*0x91eb*/
else
(*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 10000); /*0x91ff*/
}
}
return result; /*0x9270*/
}
// RtkUsbUndiCheckMediaStatus @ 0x9278 __int64 RtkUsbUndiCheckMediaStatus(__int64 n0x8000)
{
unsigned int Result; // ebx int n4; // eax unsigned int n40960; // [rsp+50h] [rbp+8h] BYREF if ( !*(_BYTE *)(n0x8000 + 5393) /*0x92a2*/
&& RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&n40960, (unsigned int *)(n0x8000 + 212)) < 0 )
{
return 2; /*0x92a9*/
}
Result = 1; /*0x92b3*/
if ( !(_BYTE)n40960 ) /*0x92b8*/
{
n4 = *(_DWORD *)(n0x8000 + 5000); /*0x92be*/
if ( n4 == 1 ) /*0x92c6*/
return (unsigned int)RtkUsbUndiPhyAutoNeg(n0x8000); /*0x938d*/
if ( n4 <= 1 ) /*0x92cc*/
return *(unsigned int *)(n0x8000 + 4996); /*0x92cc*/
if ( n4 <= 4 ) /*0x92d5*/
return (unsigned int)RtkUsbUndiPhySetAdv(n0x8000); /*0x9380*/
if ( n4 <= 9 ) /*0x92de*/
return (unsigned int)RtkUsbUndiPhyStartNeg(n0x8000); /*0x9376*/
if ( n4 > 11 ) /*0x92e7*/
{
return *(unsigned int *)(n0x8000 + 4996); /*0x9382*/
}
else
{
n40960 = 40960; /*0x9313*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x931b*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46132, 0, 1u, &n40960, 2); /*0x9345*/
Result = (((n40960 >> 14) & 1) == 0) | 2; /*0x9355*/
if ( Result == 3 ) /*0x935b*/
return (unsigned int)RtkUsbUndiPhyResolve(n0x8000); /*0x9392*/
}
}
return Result; /*0x939b*/
}
// RtkUsbUndiPhyAutoNeg @ 0x93a4 __int64 RtkUsbUndiPhyAutoNeg(__int64 n0x8000)
{
int v2; // r9d int v3; // r9d int v4; // r9d int v5; // r9d int v6; // edi unsigned int n0x4E20; // esi int v8; // r9d int v9; // r9d int v10; // r9d unsigned int Result; // edi int v12; // r9d int v13; // r9d unsigned __int16 v15; // [rsp+48h] [rbp+28h] BYREF RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x93ce*/
RtkUsbUndiPhyWrite(n0x8000, 0x11u, 0x401Cu, 2); /*0x93e1*/
RtkUsbUndiPhyWrite(n0x8000, 0xCu, 6u, 2); /*0x93f2*/
RtkUsbUndiPhyRead(n0x8000, 0x14u, &v15, v2); /*0x9400*/
RtkUsbUndiPhyWrite(n0x8000, 0x14u, v15 | 0x1000, 2); /*0x941c*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 5u, 2); /*0x942d*/
RtkUsbUndiPhyRead(n0x8000, 9u, &v15, v3); /*0x943b*/
RtkUsbUndiPhyWrite(n0x8000, 9u, v15 | 0x40, 2); /*0x9452*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 3u, 2); /*0x9463*/
RtkUsbUndiPhyRead(n0x8000, 0, &v15, v4); /*0x9471*/
v15 &= 0xFFCCu; /*0x948c*/
RtkUsbUndiPhyWrite(n0x8000, 0, v15, 2); /*0x9491*/
RtkUsbUndiPhyRead(n0x8000, 0, &v15, v5); /*0x949f*/
RtkUsbUndiPhyWrite(n0x8000, 0, v15 | 0x8000, 2); /*0x94ba*/
v6 = 0; /*0x94c3*/
n0x4E20 = 0; /*0x94ca*/
RtkUsbUndiPhyRead(n0x8000, 0x1Du, &v15, v8); /*0x94cc*/
if ( (v15 & 0x1000) != 0 ) /*0x94d6*/
{
LABEL_10:
RtkUsbUndiPhyRead(n0x8000, 0x1Du, &v15, v9); /*0x9531*/
LOBYTE(v6) = (v15 & 0xE00) == 2560; /*0x9553*/
Result = v6 + 1; /*0x9557*/
}
else
{
while ( 1 ) /*0x94df*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x94df*/
(*(void ( **)(__int64))(n0x8000 + 4896))(100); /*0x94e6*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 100); /*0x94fa*/
if ( n0x4E20 > 0x4E20 ) /*0x9506*/
break; /*0x9506*/
++n0x4E20; /*0x9511*/
if ( RtkUsbUndiPhyRead(n0x8000, 0x1Du, &v15, v10) < 0 || (v15 & 0x1000) != 0 ) /*0x9522*/
{
if ( n0x4E20 <= 0x4E20 ) /*0x952a*/
goto LABEL_10; /*0x952a*/
break; /*0x952a*/
}
}
Result = 2; /*0x952c*/
}
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 5u, 2); /*0x9567*/
RtkUsbUndiPhyRead(n0x8000, 9u, &v15, v12); /*0x9575*/
RtkUsbUndiPhyWrite(n0x8000, 9u, v15 & 0xFFBF, 2); /*0x9590*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x95a0*/
RtkUsbUndiPhyRead(n0x8000, 0x14u, &v15, v13); /*0x95ae*/
RtkUsbUndiPhyWrite(n0x8000, 0x14u, v15 & 0xEFFF, 2); /*0x95c9*/
RtkUsbUndiPhyWrite(n0x8000, 0xCu, 0x1006u, 2); /*0x95dc*/
return Result; /*0x95f2*/
}
// RtkUsbUndiPhySetAdv @ 0x95fc __int64 RtkUsbUndiPhySetAdv(__int64 n0x8000)
{
int v2; // r9d int v3; // r9d int v4; // r9d int v5; // edi int Index; // esi int v7; // r9d unsigned int Result; // edi __int16 v10; // [rsp+48h] [rbp+10h] BYREF RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x961d*/
RtkUsbUndiPhyWrite(n0x8000, 0x12u, 0x712u, 2); /*0x9630*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 2u, 2); /*0x9640*/
RtkUsbUndiPhyWrite(n0x8000, 0x10u, 0x6CFAu, 2); /*0x9653*/
RtkUsbUndiPhyWrite(n0x8000, 0x11u, 0x1480u, 2); /*0x9666*/
RtkUsbUndiPhyWrite(n0x8000, 0x12u, 0xB0C9u, 2); /*0x9679*/
RtkUsbUndiPhyWrite(n0x8000, 0x13u, 0x812Fu, 2); /*0x968c*/
RtkUsbUndiPhyWrite(n0x8000, 0x14u, 0xC4Cu, 2); /*0x969f*/
RtkUsbUndiPhyWrite(n0x8000, 0x15u, 0x8214u, 2); /*0x96b2*/
RtkUsbUndiPhyWrite(n0x8000, 0x16u, 0x616Cu, 2); /*0x96c5*/
RtkUsbUndiPhyWrite(n0x8000, 0x17u, 0xA5u, 2); /*0x96d8*/
RtkUsbUndiPhyWrite(n0x8000, 0x18u, 0x224Eu, 2); /*0x96eb*/
RtkUsbUndiPhyWrite(n0x8000, 0x19u, 0xB84u, 2); /*0x96fe*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Au, 0x7A27u, 2); /*0x9711*/
RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v2); /*0x9720*/
RtkUsbUndiPhyWrite(n0x8000, 0x10u, v10 | 0x8000, 2); /*0x973d*/
RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v3); /*0x974c*/
v5 = 0; /*0x9751*/
Index = 0; /*0x9753*/
while ( 1 ) /*0x97a1*/
{
if ( (v10 & 0x8000) == 0 ) /*0x97a7*/
{
LABEL_8:
RtkUsbUndiPhyRead(n0x8000, 0x1Cu, &v10, v4); /*0x97a9*/
LOBYTE(v5) = (v10 & 0xE00) == 2560; /*0x97cd*/
Result = v5 + 1; /*0x97d1*/
goto LABEL_9; /*0x97d1*/
}
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x975e*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x9765*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x9779*/
if ( (unsigned int)++Index > 0x7D0 ) /*0x9787*/
break; /*0x9787*/
if ( RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v7) < 0 ) /*0x979f*/
goto LABEL_8; /*0x979f*/
}
Result = 2; /*0x9837*/
LABEL_9:
RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v7); /*0x97d3*/
RtkUsbUndiPhyWrite(n0x8000, 0x10u, v10 & 0x7FFF, 2); /*0x97f9*/
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x9809*/
RtkUsbUndiPhyWrite(n0x8000, 0x12u, 0x12u, 2); /*0x981d*/
return Result; /*0x982e*/
}
// RtkUsbUndiPhyStartNeg @ 0x983c __int64 RtkUsbUndiPhyStartNeg(__int64 n0x8000)
{
int v2; // edi unsigned int n0x1388; // esi unsigned int Result; // edi int v5; // r9d int n40960; // [rsp+88h] [rbp+48h] BYREF int v8; // [rsp+90h] [rbp+50h] BYREF n40960 = 40960; /*0x988a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x988d*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x98b7*/
n40960 = v8 | 0xF00000; /*0x98cf*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x98e6*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x990a*/
n40960 = v8 & 0x7FFFFFFF; /*0x9921*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9938*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x995c*/
n40960 = v8 | 0x10000; /*0x9973*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x998a*/
n40960 = 40960; /*0x998f*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x99b1*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x99d5*/
v2 = 0; /*0x99da*/
n0x1388 = 0; /*0x99e3*/
if ( v8 >= 0 ) /*0x99e5*/
{
do /*0x9a4b*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x99f4*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x99f9*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x9a0b*/
++n0x1388; /*0x9a11*/
}
while ( n0x1388 <= 0x1388 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2) >= 0 && v8 >= 0 ); /*0x9a4b*/
}
n40960 = -2144731136; /*0x9a70*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46132, 15, 1u, &n40960, 2); /*0x9a7c*/
if ( n0x1388 <= 0x1388 ) /*0x9a87*/
{
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0xA43u, 2); /*0x9a9c*/
RtkUsbUndiPhyRead(n0x8000, 0x14u, &n40960, v5); /*0x9aaa*/
LOBYTE(v2) = (_WORD)n40960 == 72; /*0x9ab4*/
Result = v2 + 1; /*0x9ab8*/
}
else
{
Result = 2; /*0x9a89*/
}
n40960 = 40960; /*0x9ad7*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9ae3*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9b07*/
n40960 = v8 & 0x7FFFFFFF; /*0x9b1e*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9b35*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9b59*/
n40960 = v8 & 0xFF0FFFFF; /*0x9b75*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9b89*/
return Result; /*0x9b98*/
}
// RtkUsbUndiPhyResolve @ 0x9ba8 __int64 RtkUsbUndiPhyResolve(__int64 n0x8000)
{
int v2; // edi unsigned int n0x1388; // esi unsigned int Result; // edi int v5; // r9d int n40960; // [rsp+88h] [rbp+48h] BYREF int v8; // [rsp+90h] [rbp+50h] BYREF n40960 = 40960; /*0x9bf6*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9bf9*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9c23*/
n40960 = v8 | 0xF00000; /*0x9c3b*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9c52*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9c76*/
n40960 = v8 & 0x7FFFFFFF; /*0x9c8d*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9ca4*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9cc8*/
n40960 = v8 | 0x10000; /*0x9cdf*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9cf6*/
n40960 = 40960; /*0x9cfb*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9d1d*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9d41*/
v2 = 0; /*0x9d46*/
n0x1388 = 0; /*0x9d4f*/
if ( v8 >= 0 ) /*0x9d51*/
{
do /*0x9db7*/
{
if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x9d60*/
(*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x9d65*/
else
(*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x9d77*/
++n0x1388; /*0x9d7d*/
}
while ( n0x1388 <= 0x1388 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2) >= 0 && v8 >= 0 ); /*0x9db7*/
}
n40960 = -2144665600; /*0x9ddc*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46132, 15, 1u, &n40960, 2); /*0x9de8*/
if ( n0x1388 <= 0x1388 ) /*0x9df3*/
{
RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0xA43u, 2); /*0x9e08*/
RtkUsbUndiPhyRead(n0x8000, 0x14u, &n40960, v5); /*0x9e16*/
LOBYTE(v2) = (_WORD)n40960 == 72; /*0x9e20*/
Result = v2 + 1; /*0x9e24*/
}
else
{
Result = 2; /*0x9df5*/
}
n40960 = 40960; /*0x9e43*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9e4f*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9e73*/
n40960 = v8 & 0x7FFFFFFF; /*0x9e8a*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9ea1*/
RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9ec5*/
n40960 = v8 & 0xFF0FFFFF; /*0x9ee1*/
RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9ef5*/
return Result; /*0x9f04*/
}
// RtkUsbUndiStrLen16 @ 0x9f14 __int64 RtkUsbUndiStrLen16(_WORD *Realtek_USB_Ethernet_Controller, __int64 n321, __int64 n320, double a4)
{
_WORD *Realtek_USB_Ethernet_Controller_1; // rbx __int64 result; // rax Realtek_USB_Ethernet_Controller_1 = Realtek_USB_Ethernet_Controller; /*0x9f20*/
if ( !Realtek_USB_Ethernet_Controller ) /*0x9f26*/
RtkUsbUndiAssert( /*0x9f3b*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
172,
(__int64)MEMORY[0xD5B0], // "String != ((void *) 0)"
a4); // "String != ((void *) 0)"
if ( ((unsigned __int8)Realtek_USB_Ethernet_Controller_1 & 1) != 0 ) /*0x9f43*/
RtkUsbUndiAssert( /*0x9f58*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
173,
(__int64)MEMORY[0xD5C8], // "((UINTN) String & 0x00000001) == 0"
a4); // "((UINTN) String & 0x00000001) == 0"
result = 0; /*0x9f5d*/
while ( *Realtek_USB_Ethernet_Controller_1 ) /*0x9f6c*/
{
++Realtek_USB_Ethernet_Controller_1; /*0x9f62*/
++result; /*0x9f66*/
}
return result; /*0x9f73*/
}
// RtkUsbUndiStrLen8 @ 0x9f7c __int64 RtkUsbUndiStrLen8(_BYTE *a1, __int64 a2, __int64 a3, double a4)
{
_BYTE *v4; // rbx __int64 result; // rax v4 = a1; /*0x9f82*/
if ( !a1 ) /*0x9f88*/
RtkUsbUndiAssert( /*0x9f9d*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
1229,
(__int64)MEMORY[0xD5B0], // "String != ((void *) 0)"
a4); // "String != ((void *) 0)"
for ( result = 0; *v4; ++result ) /*0x9fa4*/
++v4; /*0x9fa8*/
return result; /*0x9fb3*/
}
// RtkUsbUndiAsciiStrCmp @ 0x9fbc __int64 RtkUsbUndiAsciiStrCmp(_BYTE *a1, char *eng, __int64 a3, double a4)
{
char *eng_1; // rdi _BYTE *v5; // rbx __int64 Size; // rdx __int64 Size; // r8 eng_1 = eng; /*0x9fc6*/
v5 = a1; /*0x9fc9*/
if ( RtkUsbUndiStrLen8(a1, (__int64)eng, a3, a4) == -1 ) /*0x9fd4*/
RtkUsbUndiAssert( /*0x9fe9*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
1305,
(__int64)MEMORY[0xD5F0], // "AsciiStrSize (FirstString)"
a4); // "AsciiStrSize (FirstString)"
if ( RtkUsbUndiStrLen8(eng_1, Size, Size, a4) == -1 ) /*0x9ff9*/
RtkUsbUndiAssert( /*0xa00e*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
1306,
(__int64)MEMORY[0xD610], // "AsciiStrSize (SecondString)"
a4); // "AsciiStrSize (SecondString)"
while ( *v5 && *v5 == *eng_1 ) /*0xa017*/
{
++v5; /*0xa019*/
++eng_1; /*0xa01c*/
}
return (char)*v5 - *eng_1; /*0xa035*/
}
// RtkUsbUndiUnicodeToAscii @ 0xa03c __int64 RtkUsbUndiUnicodeToAscii(_BYTE *eng, _BYTE *a2, __int64 a3, double a4)
{
unsigned __int64 v4; // rsi _BYTE *v5; // rdi _BYTE *eng_1; // rbx __int64 Size; // rdx __int64 Size; // r8 v4 = a3; /*0xa04b*/
v5 = a2; /*0xa04e*/
eng_1 = eng; /*0xa051*/
if ( !a3 ) /*0xa057*/
return 0; /*0xa059*/
if ( RtkUsbUndiStrLen8(eng, (__int64)a2, a3, a4) == -1 ) /*0xa065*/
RtkUsbUndiAssert( /*0xa07a*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
1467,
(__int64)MEMORY[0xD5F0], // "AsciiStrSize (FirstString)"
a4); // "AsciiStrSize (FirstString)"
if ( RtkUsbUndiStrLen8(v5, Size, Size, a4) == -1 ) /*0xa08a*/
RtkUsbUndiAssert( /*0xa09f*/
(__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
1468,
(__int64)MEMORY[0xD610], // "AsciiStrSize (SecondString)"
a4); // "AsciiStrSize (SecondString)"
while ( *eng_1 && *eng_1 == *v5 && v4 > 1 ) /*0xa0ae*/
{
++eng_1; /*0xa0b0*/
++v5; /*0xa0b3*/
--v4; /*0xa0b6*/
}
return (char)*eng_1 - (char)*v5; /*0xa0d4*/
}
// RtkUsbUndiDebugPrint @ 0xa0dc __int64 RtkUsbUndiDebugPrint(int a1, char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)
{
double v2; // xmm3_8 __int64 result; // rax char Realtek_USB_Ethernet_Controller[536]; // [rsp+20h] [rbp-218h] BYREF va_list va; // [rsp+250h] [rbp+18h] BYREF va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);
if ( !_nASSERT_EFI_ERROR_(Status___%r)_n ) /*0xa0fd*/
RtkUsbUndiAssert( /*0xa110*/
(__int64)MEMORY[0xD658], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDebugLibStdErr\\DebugLib.c"
61,
(__int64)MEMORY[0xD640], // "Format != ((void *) 0)"
v2); // "Format != ((void *) 0)"
result = 2147483714LL; /*0xa115*/
if ( (a1 & 0x80000042) != 0 ) /*0xa11d*/
{
RtkUsbUndiPrintString( /*0xa134*/
Realtek_USB_Ethernet_Controller,
0x100u,
_nASSERT_EFI_ERROR_(Status___%r)_n,
(unsigned __int16 **)va);
result = qword_E2F0; /*0xa139*/
if ( qword_E2F0 ) /*0xa143*/
{
result = *(_QWORD *)(qword_E2F0 + 80); /*0xa145*/
if ( result ) /*0xa14c*/
return (*(__int64 ( **)(__int64, char *))(result + 8))(result, Realtek_USB_Ethernet_Controller); /*0xa156*/
}
}
return result; /*0xa159*/
}
// RtkUsbUndiAssert @ 0xa164 void RtkUsbUndiAssert(__int64 a1, int a2, __int64 a3, double a4)
{
__int64 v4; // rax _BYTE ErrorLevel[520]; // [rsp+40h] [rbp-208h] BYREF RtkUsbUndiSPrint((int)ErrorLevel, 0x200u, "ASSERT [%a] %a(%d): %a\n", a4, *(double *)&a1, a2, *(double *)&a3);
if ( qword_E2F0 ) /*0xa1a1*/
{
v4 = *(_QWORD *)(qword_E2F0 + 80); /*0xa1a3*/
if ( v4 ) /*0xa1aa*/
(*(void ( **)(__int64, _BYTE *))(v4 + 8))(v4, ErrorLevel); /*0xa1b4*/
}
while ( 1 ) /*0xa1c3*/
; /*0xa1c3*/
}
// RtkUsbUndiCopyMem @ 0xa1d8 _BYTE *RtkUsbUndiCopyMem(_BYTE *a1, _BYTE *a2, __int64 a3, double a4)
{
unsigned __int64 v4; // r14 __int64 Index; // rsi _BYTE *v8; // rcx __int64 Index; // rdi _BYTE *v10; // rdx __int64 v11; // rcx v4 = a3 - 1; /*0xa1f5*/
Index = a3; /*0xa1f9*/
if ( a3 - 1 > (unsigned __int64)(-1LL - (_QWORD)a1) ) /*0xa20b*/
RtkUsbUndiAssert( /*0xa21e*/
(__int64)MEMORY[0xD718], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c"
56,
(__int64)MEMORY[0xD6D0], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)"
a4);
if ( v4 > -1 - (__int64)a2 ) /*0xa229*/
RtkUsbUndiAssert( /*0xa23e*/
(__int64)MEMORY[0xD718], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c"
57,
(__int64)MEMORY[0xD758], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)"
a4);
if ( a2 != a1 ) /*0xa246*/
{
if ( a2 <= a1 ) /*0xa248*/
{
if ( a2 < a1 ) /*0xa25f*/
{
v10 = &a1[Index]; /*0xa261*/
v11 = Index; /*0xa268*/
do /*0xa276*/
*--v10 = a2[--v11]; /*0xa274*/
while ( v11 ); /*0xa276*/
}
}
else
{
v8 = a1; /*0xa24a*/
Index = a2 - a1; /*0xa24d*/
do /*0xa25b*/
{
*v8 = v8[Index]; /*0xa253*/
++v8; /*0xa255*/
--Index; /*0xa258*/
}
while ( Index ); /*0xa25b*/
}
}
return a1; /*0xa28f*/
}
// RtkUsbUndiZeroMem @ 0xa298 __int64 RtkUsbUndiZeroMem(__int64 i, unsigned __int64 a2, __int64 a3, double a4)
{
unsigned __int64 v4; // rbx _BYTE *j; // rax v4 = a2; /*0xa2a2*/
if ( !i && a2 ) /*0xa2b0*/
RtkUsbUndiAssert( /*0xa2c3*/
(__int64)MEMORY[0xD7C0], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c"
49,
(__int64)MEMORY[0xD798], // "!(Buffer == ((void *) 0) && Length > 0)"
a4);
if ( v4 > -i ) /*0xa2d1*/
RtkUsbUndiAssert( /*0xa2e6*/
(__int64)MEMORY[0xD7C0], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c"
50,
(__int64)MEMORY[0xD800], // "Length <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer + 1)"
a4);
for ( j = (_BYTE *)i; v4; --v4 ) /*0xa2f1*/
*j++ = 0; /*0xa2f3*/
return i; /*0xa306*/
}
// RtkUsbUndiSetMem @ 0xa30c unsigned __int64 RtkUsbUndiSetMem(_BYTE *i, _BYTE *p_i, __int64 n32, double a4)
{
_BYTE *p_i_1; // rbx _BYTE *i_1; // rdi unsigned __int64 v8; // rsi p_i_1 = p_i; /*0xa323*/
i_1 = i; /*0xa326*/
if ( i == p_i ) /*0xa32c*/
return 0; /*0xa32e*/
if ( !i ) /*0xa338*/
RtkUsbUndiAssert( /*0xa34b*/
(__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
60,
(__int64)MEMORY[0xD838], // "DestinationBuffer != ((void *) 0)"
a4);
if ( !p_i_1 ) /*0xa353*/
RtkUsbUndiAssert( /*0xa366*/
(__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
61,
(__int64)MEMORY[0xD8A0], // "SourceBuffer != ((void *) 0)"
a4);
v8 = n32 - 1; /*0xa36f*/
if ( v8 > -1 - (__int64)i_1 ) /*0xa37b*/
RtkUsbUndiAssert( /*0xa38e*/
(__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
62,
(__int64)MEMORY[0xD6D0], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)"
a4);
if ( v8 > -1 - (__int64)p_i_1 ) /*0xa399*/
RtkUsbUndiAssert( /*0xa3ae*/
(__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
63,
(__int64)MEMORY[0xD758], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)"
a4);
for ( ; v8; --v8 ) /*0xa3b6*/
{
if ( *i_1 != *p_i_1 ) /*0xa3bc*/
break; /*0xa3bc*/
++i_1; /*0xa3be*/
++p_i_1; /*0xa3c1*/
}
return (unsigned __int8)*i_1 - (unsigned __int64)(unsigned __int8)*p_i_1; /*0xa3e1*/
}
// RtkUsbUndiIsZero @ 0xa3e8 __int16 *RtkUsbUndiIsZero(__int16 *p_i, __int64 n8, char n255, double a4)
{
__int64 n8_1; // rbx __int16 *i; // rax n8_1 = n8; /*0xa405*/
if ( n8 - 1 > (unsigned __int64)(-1LL - (_QWORD)p_i) ) /*0xa40e*/
RtkUsbUndiAssert( /*0xa423*/
(__int64)MEMORY[0xD8F8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\SetMemWrapper.c"
54,
(__int64)MEMORY[0xD8C0], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer)"
a4);
for ( i = p_i; n8_1; --n8_1 ) /*0xa42e*/
{
*(_BYTE *)i = n255; /*0xa430*/
i = (__int16 *)((char *)i + 1); /*0xa433*/
}
return p_i; /*0xa448*/
}
// RtkUsbUndiInternalHwAccess @ 0xa450 char RtkUsbUndiInternalHwAccess(__int64 i, __int64 a2, __int64 a3, double a4)
{
if ( !i ) /*0xa45c*/
RtkUsbUndiAssert( /*0xa46f*/
(__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
109,
(__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
a4);
return *(_BYTE *)i; /*0xa476*/
}
// RtkUsbUndiInternalHwAccess2 @ 0xa47c char RtkUsbUndiInternalHwAccess2(__int64 i, __int64 a2, __int64 a3, double a4)
{
if ( !i ) /*0xa488*/
RtkUsbUndiAssert( /*0xa49d*/
(__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
131,
(__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
a4);
return *(_BYTE *)(i + 1); /*0xa4a5*/
}
// RtkUsbUndiAsciiStrToUint @ 0xa4ac __int64 RtkUsbUndiAsciiStrToUint(__int64 i, __int64 a2, __int64 a3, double a4)
{
unsigned __int16 *v5; // rbx if ( !i ) /*0xa4b8*/
RtkUsbUndiAssert( /*0xa4cd*/
(__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
156,
(__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
a4);
v5 = (unsigned __int16 *)(i + 2); /*0xa4d2*/
if ( !v5 ) /*0xa4d6*/
RtkUsbUndiAssert( /*0xa4e9*/
(__int64)MEMORY[0xE1C8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\Unaligned.c"
38,
(__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
a4);
return *v5; /*0xa4f1*/
}
// RtkUsbUndiHexChar @ 0xa4f8 __int64 RtkUsbUndiHexChar(__int64 i, __int64 a2, __int64 a3, double a4)
{
if ( !i ) /*0xa504*/
RtkUsbUndiAssert( /*0xa519*/
(__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
180,
(__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
a4);
return i + RtkUsbUndiAsciiStrToUint(i, a2, a3, a4); /*0xa529*/
}
// RtkUsbUndiAsciiToUpper @ 0xa530 bool RtkUsbUndiAsciiToUpper(__int64 i, __int64 a2, __int64 a3, double a4)
{
if ( !i ) /*0xa53c*/
RtkUsbUndiAssert( /*0xa551*/
(__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
210,
(__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
a4);
return RtkUsbUndiInternalHwAccess(i, a2, a3, a4) == 127; /*0xa563*/
}
// RtkUsbUndiAsciiStrToUint64 @ 0xa56c char RtkUsbUndiAsciiStrToUint64(__int64 i, __int64 a2, __int64 a3, double a4)
{
char Result; // bl __int64 v6; // rdx __int64 v7; // r8 Result = 0; /*0xa576*/
if ( !i ) /*0xa57e*/
RtkUsbUndiAssert( /*0xa593*/
(__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
237,
(__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
a4);
if ( RtkUsbUndiAsciiToUpper(i, a2, a3, a4) && RtkUsbUndiInternalHwAccess2(i, v6, v7, a4) == -1 ) /*0xa5ae*/
return 1; /*0xa5b0*/
return Result; /*0xa5b9*/
}
// RtkUsbUndiAsciiStrToUint64S @ 0xa5c0 bool RtkUsbUndiAsciiStrToUint64S(_DWORD *eng, _DWORD *a2, __int64 a3, double a4)
{
int Result; // ebx if ( !eng ) /*0xa5d3*/
RtkUsbUndiAssert( /*0xa5e6*/
(__int64)MEMORY[0xE1C8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\Unaligned.c"
89,
(__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
a4);
Result = *eng & 0xFFFFFF; /*0xa5ed*/
if ( !a2 ) /*0xa5f6*/
RtkUsbUndiAssert( /*0xa609*/
(__int64)MEMORY[0xE1C8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\Unaligned.c"
89,
(__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
a4);
return Result == (*a2 & 0xFFFFFF); /*0xa61f*/
}
// RtkUsbUndiAsciiStrToUint64Wrap @ 0xa628 unsigned __int64 RtkUsbUndiAsciiStrToUint64Wrap(_DWORD *eng, _BYTE *eng_4, __int64 a3, _QWORD *a4, char a5)
{
double v5; // xmm3_8 __int64 v7; // rsi _DWORD *eng_1; // rbx char i; // al __int64 Index; // rdi char n59_2; // al _BYTE *eng_2; // rbx char n59; // al __int64 Index; // rdi char n59_1; // cl _BYTE *eng_3; // rdx v7 = a3; /*0xa644*/
eng_1 = eng_4; /*0xa647*/
if ( !a4 ) /*0xa650*/
return 0x8000000000000002uLL; /*0xa652*/
if ( eng_4 && a3 ) /*0xa66d*/
{
for ( i = *eng_4; i; i = *(_BYTE *)eng_1 ) /*0xa673*/
{
if ( a5 ) /*0xa682*/
{
if ( RtkUsbUndiAsciiStrToUint64S(eng, eng_1, a3, v5) ) /*0xa68a*/
goto LABEL_20; /*0xa691*/
eng_1 = (_DWORD *)((char *)eng_1 + 3); /*0xa693*/
}
else
{
Index = 0; /*0xa699*/
while ( i && i != 59 ) /*0xa69f*/
i = *((_BYTE *)eng_1 + ++Index); /*0xa6a4*/
if ( !RtkUsbUndiUnicodeToAscii(eng_1, eng, Index, v5) && !*((_BYTE *)eng + Index) ) /*0xa6c1*/
{
LABEL_20:
eng_2 = *(_BYTE **)v7; /*0xa6dd*/
if ( !*(_QWORD *)v7 ) /*0xa6e3*/
return 0x8000000000000003uLL; /*0xa6e3*/
n59 = *eng_2; /*0xa6e5*/
while ( 1 ) /*0xa72a*/
{
if ( !n59 ) /*0xa72c*/
{
LABEL_32:
v7 += 16; /*0xa72e*/
goto LABEL_20; /*0xa732*/
}
Index = 0; /*0xa6e9*/
while ( n59 && n59 != 59 ) /*0xa6ef*/
n59 = eng_2[++Index]; /*0xa6f4*/
if ( !RtkUsbUndiUnicodeToAscii(eng_2, eng, Index, v5) ) /*0xa704*/
break; /*0xa704*/
eng_2 += Index; /*0xa70e*/
n59 = *eng_2; /*0xa711*/
if ( !*eng_2 ) /*0xa715*/
goto LABEL_32; /*0xa715*/
n59_1 = *eng_2; /*0xa717*/
eng_3 = eng_2; /*0xa719*/
do /*0xa724*/
{
if ( n59_1 != 59 ) /*0xa71f*/
break; /*0xa71f*/
n59_1 = *++eng_3; /*0xa724*/
}
while ( *eng_3 ); /*0xa724*/
}
*a4 = *(_QWORD *)(v7 + 8); /*0xa738*/
return 0; /*0xa73d*/
}
eng_1 = (_DWORD *)((char *)eng_1 + Index); /*0xa6c3*/
n59_2 = *(_BYTE *)eng_1; /*0xa6c6*/
if ( !*(_BYTE *)eng_1 ) /*0xa6ca*/
return 0x8000000000000003uLL; /*0xa6ca*/
do /*0xa6d3*/
{
if ( n59_2 != 59 ) /*0xa6ce*/
break; /*0xa6ce*/
eng_1 = (_DWORD *)((char *)eng_1 + 1); /*0xa6d0*/
n59_2 = *(_BYTE *)eng_1; /*0xa6d3*/
}
while ( *(_BYTE *)eng_1 ); /*0xa6d3*/
}
}
}
return 0x8000000000000003uLL; /*0xa75d*/
}
// RtkUsbUndiAsciiStrDecimalToUint64 @ 0xa764 __int64 RtkUsbUndiAsciiStrDecimalToUint64(
_DWORD *eng,
_BYTE *eng_3,
char ***a3,
_WORD *Realtek_USB_Ethernet_Controller,
char a5)
{
double v5; // xmm3_8 _DWORD *eng_1; // rbx char i; // al __int16 *Wrong_Interrupt_size_n; // rcx __int64 v13; // rdi char n59; // al char **v15; // rsi __int64 v16; // rdi char **v17; // rax __int64 v18; // r8 char **v19; // rbx __int64 v20; // rbp char n59_1; // al char *eng_2; // rbx char n59_2; // al char **v24; // rdx __int64 v25; // rax __int16 *Wrong_Interrupt_size_n_1; // rcx char *v27; // rax __int64 n321; // rdx __int64 n320; // r8 __int64 v30; // rdi __int64 v31; // rax __int16 *Wrong_Interrupt_size_n_2; // rcx char *v33; // rax __int64 n321_1; // rdx __int64 n320_1; // r8 eng_1 = eng_3; /*0xa789*/
if ( !eng || !Realtek_USB_Ethernet_Controller || !a3 ) /*0xa7a4*/
return 0x8000000000000002uLL; /*0xa7a4*/
if ( !eng_3 ) /*0xa7ad*/
return 0x8000000000000003uLL; /*0xa7b9*/
if ( !*Realtek_USB_Ethernet_Controller ) /*0xa7be*/
return 0x8000000000000002uLL; /*0xa951*/
for ( i = *eng_3; ; i = *(_BYTE *)eng_1 ) /*0xa7c8*/
{
if ( !i ) /*0xa828*/
return 0x8000000000000003uLL; /*0xa828*/
if ( !a5 ) /*0xa7d1*/
break; /*0xa7d1*/
if ( RtkUsbUndiAsciiStrToUint64S(eng, eng_1, (__int64)a3, v5) ) /*0xa7d9*/
goto LABEL_22; /*0xa7e0*/
eng_1 = (_DWORD *)((char *)eng_1 + 3); /*0xa7e2*/
LABEL_19:
; /*0xa824*/
}
v13 = 0; /*0xa7e8*/
while ( i && i != 59 ) /*0xa7ef*/
i = *((_BYTE *)eng_1 + ++v13); /*0xa7f4*/
if ( RtkUsbUndiUnicodeToAscii(eng_1, eng, v13, v5) ) /*0xa804*/
{
eng_1 = (_DWORD *)((char *)eng_1 + v13); /*0xa80e*/
n59 = *(_BYTE *)eng_1; /*0xa811*/
if ( !*(_BYTE *)eng_1 ) /*0xa815*/
return 0x8000000000000003uLL; /*0xa815*/
do /*0xa81e*/
{
if ( n59 != 59 ) /*0xa819*/
break; /*0xa819*/
eng_1 = (_DWORD *)((char *)eng_1 + 1); /*0xa81b*/
n59 = *(_BYTE *)eng_1; /*0xa81e*/
}
while ( *(_BYTE *)eng_1 ); /*0xa81e*/
goto LABEL_19; /*0xa822*/
}
LABEL_22:
v15 = *a3; /*0xa82c*/
v16 = 0; /*0xa82f*/
if ( !*a3 ) /*0xa82c*/
goto LABEL_23; /*0xa835*/
LABEL_35:
eng_2 = *v15; /*0xa8a4*/
if ( !*v15 ) /*0xa8aa*/
{
LABEL_23:
v17 = (char **)RtkUsbUndiPrintHex64(Wrong_Interrupt_size_n, 16 * (v16 + 2)); /*0xa837*/
v19 = v17; /*0xa844*/
if ( v17 ) /*0xa84a*/
{
v24 = *a3; /*0xa8bd*/
if ( *a3 ) /*0xa8bd*/
{
v18 = 16 *v16; /*0xa8c8*/
if ( 16 *v16 ) /*0xa8c8*/
RtkUsbUndiCopyMem(v17, v24, v18, v5); /*0xa8d4*/
}
v25 = RtkUsbUndiStrLen8(eng, (__int64)v24, v18, v5); /*0xa8dc*/
v27 = RtkUsbUndiPrintChar2(Wrong_Interrupt_size_n_1, v25 + 1, (__int64)eng, v5); /*0xa8e8*/
v30 = 2 *v16; /*0xa8ed*/
v19[v30] = v27; /*0xa8f0*/
if ( v27 ) /*0xa8f7*/
{
v31 = RtkUsbUndiStrLen16(Realtek_USB_Ethernet_Controller, n321, n320, v5); /*0xa909*/
v33 = RtkUsbUndiPrintChar2(Wrong_Interrupt_size_n_2, 2 *v31 + 2, (__int64)Realtek_USB_Ethernet_Controller, v5); /*0xa919*/
v19[v30 + 1] = v33; /*0xa91e*/
if ( v33 ) /*0xa926*/
{
v19[v30 + 2] = 0; /*0xa933*/
v19[v30 + 3] = 0; /*0xa938*/
if ( *a3 ) /*0xa93d*/
RtkUsbUndiPrintNewline((__int64)*a3, n321_1, n320_1, v5); /*0xa945*/
*a3 = v19; /*0xa94a*/
return 0; /*0xa94f*/
}
RtkUsbUndiPrintNewline((__int64)v19[v30], n321_1, n320_1, v5); /*0xa92c*/
}
RtkUsbUndiPrintNewline((__int64)v19, n321, n320, v5); /*0xa8fc*/
}
return 0x8000000000000009uLL; /*0xa856*/
}
while ( 1 ) /*0xa897*/
{
n59_1 = *eng_2; /*0xa897*/
if ( !*eng_2 ) /*0xa897*/
{
LABEL_34:
v15 += 2; /*0xa89d*/
++v16; /*0xa8a1*/
goto LABEL_35; /*0xa8a1*/
}
v20 = 0; /*0xa85b*/
while ( n59_1 && n59_1 != 59 ) /*0xa862*/
n59_1 = eng_2[++v20]; /*0xa867*/
if ( !RtkUsbUndiUnicodeToAscii(eng, eng_2, v20, v5) ) /*0xa877*/
return 0x8000000000000014uLL; /*0xa96a*/
eng_2 += v20; /*0xa881*/
n59_2 = *eng_2; /*0xa884*/
if ( !*eng_2 ) /*0xa888*/
goto LABEL_34; /*0xa888*/
do /*0xa891*/
{
if ( n59_2 != 59 ) /*0xa88c*/
break; /*0xa88c*/
n59_2 = *++eng_2; /*0xa891*/
}
while ( *eng_2 ); /*0xa891*/
}
}
// RtkUsbUndiAsciiStrHexToUint64 @ 0xa978 unsigned __int64 RtkUsbUndiAsciiStrHexToUint64(
__int16 *Wrong_Interrupt_size_n,
__int64 a2,
unsigned __int16 **va,
double a4)
{
__int64 v7; // rdx char *Realtek_USB_Ethernet_Controller; // rdi unsigned __int64 v9; // rax __int64 n321; // rdx __int64 n320; // r8 unsigned __int64 v12; // rbx if ( !Wrong_Interrupt_size_n ) /*0xa9a0*/
RtkUsbUndiAssert( /*0xa9b3*/
(__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
67,
(__int64)MEMORY[0xD640], // "Format != ((void *) 0)"
a4);
if ( ((unsigned __int8)Wrong_Interrupt_size_n & 1) != 0 ) /*0xa9bb*/
RtkUsbUndiAssert( /*0xa9d0*/
(__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
68,
(__int64)MEMORY[0xDB30], // "((UINTN) Format & 0x00000001) == 0"
a4);
if ( !a2 ) /*0xa9d8*/
RtkUsbUndiAssert( /*0xa9eb*/
(__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
69,
(__int64)MEMORY[0xDB58], // "Console != ((void *) 0)"
a4);
Realtek_USB_Ethernet_Controller = (char *)RtkUsbUndiPrintHex64(Wrong_Interrupt_size_n, 642); /*0xa9fa*/
if ( !Realtek_USB_Ethernet_Controller ) /*0xaa00*/
RtkUsbUndiAssert( /*0xaa13*/
(__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
74,
(__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
a4);
v9 = RtkUsbUndiPrintChar(Realtek_USB_Ethernet_Controller, v7, (unsigned __int8 *)Wrong_Interrupt_size_n, va); /*0xaa21*/
v12 = v9; /*0xaa26*/
if ( a2 && v9 && (*(__int64 ( **)(__int64, char *))(a2 + 8))(a2, Realtek_USB_Ethernet_Controller) < 0 ) /*0xaa3f*/
v12 = 0; /*0xaa3f*/
RtkUsbUndiPrintNewline((__int64)Realtek_USB_Ethernet_Controller, n321, n320, a4); /*0xaa46*/
return v12; /*0xaa62*/
}
// RtkUsbUndiSerialPrint @ 0xaa6c __int64 RtkUsbUndiSerialPrint(__int16 *Wrong_Interrupt_size_n, ...)
{
double Size; // xmm3_8 va_list va; // [rsp+38h] [rbp+10h] BYREF va_start(va, Wrong_Interrupt_size_n);
return RtkUsbUndiAsciiStrHexToUint64(Wrong_Interrupt_size_n, *(_QWORD *)(qword_E2F0 + 64), (__int64)va, Size); /*0xaa97*/
}
// RtkUsbUndiPrintChar @ 0xaa9c unsigned __int64 RtkUsbUndiPrintChar(
char *Realtek_USB_Ethernet_Controller,
__int64 a2,
unsigned __int8 *Wrong_Interrupt_size_n,
unsigned __int16 **va)
{
double v4; // xmm3_8 if ( ((unsigned __int8)Realtek_USB_Ethernet_Controller & 1) != 0 ) /*0xaab7*/
RtkUsbUndiAssert( /*0xaacc*/
(__int64)MEMORY[0xDB98], // "f:\\uefi\\edk2\\MdePkg\\Library\\BasePrintLib\\PrintLib.c"
71,
(__int64)MEMORY[0xDB70], // "(((UINTN) (StartOfBuffer)) & 0x01) == 0"
v4);
if ( ((unsigned __int8)Wrong_Interrupt_size_n & 1) != 0 ) /*0xaad4*/
RtkUsbUndiAssert( /*0xaae9*/
(__int64)MEMORY[0xDB98], // "f:\\uefi\\edk2\\MdePkg\\Library\\BasePrintLib\\PrintLib.c"
72,
(__int64)MEMORY[0xDBD0], // "(((UINTN) (FormatString)) & 0x01) == 0"
v4);
return RtkUsbUndiPrintFormatted(Realtek_USB_Ethernet_Controller, 321, 320, Wrong_Interrupt_size_n, va); /*0xab11*/
}
// RtkUsbUndiPrintString @ 0xab18 unsigned __int64 RtkUsbUndiPrintString(
char *Realtek_USB_Ethernet_Controller,
unsigned __int64 n256,
char *_nASSERT_EFI_ERROR_(Status___%r)_n,
unsigned __int16 **va)
{
double v4; // xmm3_8 if ( ((unsigned __int8)Realtek_USB_Ethernet_Controller & 1) != 0 ) /*0xab3b*/
RtkUsbUndiAssert( /*0xab50*/
(__int64)MEMORY[0xDB98], // "f:\\uefi\\edk2\\MdePkg\\Library\\BasePrintLib\\PrintLib.c"
218,
(__int64)MEMORY[0xDB70], // "(((UINTN) (StartOfBuffer)) & 0x01) == 0"
v4);
return RtkUsbUndiPrintFormatted( /*0xab80*/
Realtek_USB_Ethernet_Controller,
n256 >> 1,
64,
(unsigned __int8 *)_nASSERT_EFI_ERROR_(Status___%r)_n,
va);
}
// RtkUsbUndiSPrint @ 0xab88 unsigned __int64 RtkUsbUndiSPrint(
char *Realtek_USB_Ethernet_Controller,
unsigned __int64 n512,
char *ASSERT_[%a]_%a(%d):_%a_n,
...)
{
va_list va; // [rsp+48h] [rbp+20h] BYREF va_start(va, ASSERT_[%a]_%a(%d):_%a_n);
return RtkUsbUndiPrintString(Realtek_USB_Ethernet_Controller, n512, ASSERT_[%a]_%a(%d):_%a_n, (unsigned __int16 **)va); /*0xaba0*/
}
// RtkUsbUndiPrintHelper1 @ 0xaba8 _BYTE *RtkUsbUndiPrintHelper1(
_BYTE *Realtek_USB_Ethernet_Controller,
unsigned __int64 Realtek_USB_Ethernet_Controller_1,
__int64 i,
__int16 n32,
__int64 a5)
{
__int64 j; // r10 for ( j = 0; j < i; ++j ) /*0xabae*/
{
if ( (unsigned __int64)Realtek_USB_Ethernet_Controller >= Realtek_USB_Ethernet_Controller_1 ) /*0xabb3*/
break; /*0xabb3*/
*Realtek_USB_Ethernet_Controller = n32; /*0xabbb*/
if ( a5 != 1 ) /*0xabbe*/
Realtek_USB_Ethernet_Controller[1] = HIBYTE(n32); /*0xabc7*/
Realtek_USB_Ethernet_Controller += a5; /*0xabca*/
}
return Realtek_USB_Ethernet_Controller; /*0xabda*/
}
// RtkUsbUndiPrintHelper2 @ 0xabdc _BYTE *RtkUsbUndiPrintHelper2(_BYTE *_r_n, unsigned __int64 a2, unsigned int n16, double a4)
{
_BYTE *_r_n_1; // rbx unsigned __int64 n16_1; // rbp unsigned __int64 v8; // rtt _r_n_1 = _r_n; /*0xabf6*/
*_r_n = 0; /*0xabf9*/
n16_1 = n16; /*0xabfc*/
do /*0xac38*/
{
if ( !n16 ) /*0xac01*/
RtkUsbUndiAssert( /*0xac14*/
(__int64)MEMORY[0xE1F8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\DivU64x32Remainder.c"
47,
(__int64)MEMORY[0xD630], // "Divisor != 0"
a4);
++_r_n_1; /*0xac1e*/
v8 = a2; /*0xac21*/
a2 /= n16_1; /*0xac2b*/
*_r_n_1 = byte_E080[(unsigned int)(v8 % n16_1)]; /*0xac33*/
}
while ( a2 ); /*0xac38*/
return _r_n_1; /*0xac4c*/
}
// RtkUsbUndiPrintFormatted @ 0xac54 unsigned __int64 RtkUsbUndiPrintFormatted(
char *Realtek_USB_Ethernet_Controller,
__int64 n321,
__int64 n320,
unsigned __int8 *_nASSERT_EFI_ERROR_(Status___%r)_n,
unsigned __int16 **va)
{
double v5; // xmm3_8 unsigned __int8 *_nASSERT_EFI_ERROR_(Status___%r)_n_2; // rdi __int64 v7; // r14 char *Realtek_USB_Ethernet_Controller_1; // r15 char *Realtek_USB_Ethernet_Controllera_1; // r12 unsigned int v12; // r13d __int64 n2; // r8 __int64 n0xFFFF; // r10 int v15; // eax unsigned __int64 n10; // rcx unsigned __int64 v17; // r9 char v18; // r11 unsigned __int16 *v19; // r12 char *_r_n_1; // rbx unsigned __int16 **va_1; // rdx unsigned __int64 n13_1; // rcx unsigned __int16 *v23; // rbx unsigned __int64 v24; // rcx unsigned __int64 v25; // rcx unsigned __int64 v26; // rcx unsigned __int64 v27; // rcx unsigned __int64 v28; // rcx unsigned __int64 v29; // rcx unsigned __int8 *_nASSERT_EFI_ERROR_(S... [31015 chars total]
// RtkUsbUndiPrintUint64 @ 0xb9d0 unsigned __int64 RtkUsbUndiPrintUint64(char *_r_n, __int64 n38, __int64 n320, char *%02d_%02d_%04d__%02d:%02d, ...)
{
va_list va; // [rsp+60h] [rbp+28h] BYREF va_start(va, %02d_%02d_%04d__%02d:%02d);
return RtkUsbUndiPrintFormatted( /*0xb9ed*/
_r_n,
n38,
n320,
(unsigned __int8 *)%02d_%02d_%04d__%02d:%02d,
(unsigned __int16 **)va);
}
// RtkUsbUndiPrintHex64 @ 0xb9f4 __int64 RtkUsbUndiPrintHex64(__int16 *Wrong_Interrupt_size_n, __int64 n642)
{
__int64 v2; // rax __int64 Result; // rcx __int64 v5; // [rsp+40h] [rbp+18h] BYREF v2 = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, n642, &v5); /*0xba09*/
Result = v5; /*0xba0c*/
if ( v2 < 0 ) /*0xba16*/
return 0; /*0xba16*/
return Result; /*0xba1d*/
}
// RtkUsbUndiPrintChar2 @ 0xba24 _BYTE *RtkUsbUndiPrintChar2(__int16 *Wrong_Interrupt_size_n, unsigned __int64 n642, __int64 eng, double a4)
{
_BYTE *result; // rax if ( !eng ) /*0xba37*/
RtkUsbUndiAssert( /*0xba4c*/
(__int64)MEMORY[0xE240], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c"
569,
(__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
a4);
if ( n642 > -eng ) /*0xba5a*/
RtkUsbUndiAssert( /*0xba6f*/
(__int64)MEMORY[0xE240], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c"
570,
(__int64)MEMORY[0xE290], // "AllocationSize <= (0xFFFFFFFFFFFFFFFFULL - (UINTN) Buffer + 1)"
a4);
result = (_BYTE *)RtkUsbUndiPrintHex64(Wrong_Interrupt_size_n, n642); /*0xba77*/
if ( result ) /*0xba7f*/
{
if ( n642 ) /*0xba84*/
return RtkUsbUndiCopyMem(result, (_BYTE *)eng, n642, a4); /*0xba8f*/
}
return result; /*0xba99*/
}
// RtkUsbUndiPrintNewline @ 0xbaa0 void RtkUsbUndiPrintNewline(char *Realtek_USB_Ethernet_Controller, __int64 n321, __int64 n320, double a4)
{
__int64 v4; // rax v4 = (*(__int64 ( **)(char *, __int64, __int64))(qword_E2F8 + 72))( /*0xbaab*/
Realtek_USB_Ethernet_Controller,
n321,
n320);
if ( v4 < 0 ) /*0xbab1*/
{
RtkUsbUndiDebugPrint( /*0xbac2*/
0x80000000,
nASSERT_EFI_ERROR__Status____r__n, // "\nASSERT_EFI_ERROR (Status = %r)\n"
v4);
RtkUsbUndiAssert( /*0xbada*/
(__int64)MEMORY[0xE240], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c"
819,
(__int64)aEfiErrorStatus, // "!EFI_ERROR (Status)"
a4);
}
}