#include "117828F1-DA7D-4BC1-8B58-9A954FED5121.h"
// RstUtils.c - Extracted from 117828F1-DA7D-4BC1-8B58-9A954FED5121.c
// Functions: 36
// Function: DebugPrintSerial @ 0x1158 (0xb5 bytes)
// Index: 13/906
char DebugPrintSerial(int a1, char *a2, ...)
{
UINTN i_1; // rax
unsigned __int8 *StartOfBuffer_1; // rcx
UINTN i; // r11
unsigned __int8 v7; // al
CHAR8 StartOfBuffer[280]; // [rsp+30h] [rbp-118h] BYREF
va_list va; // [rsp+160h] [rbp+18h] BYREF
va_start(va, a2);
if ( !a2 ) /*0x1182*/
DebugAssert( /*0x1195*/
"c:\\udk\\myworkspace\\MdePkg\\Library\\BaseDebugLibSerialPort\\DebugLib.c",
0x4Fu,
"Format != ((void *) 0)");
LODWORD(i_1) = GetDebugLevel(); /*0x119a*/
if ( ((unsigned int)i_1 & a1) != 0 ) /*0x11a5*/
{
AsciiSPrint(StartOfBuffer, 0x100u, 0, a2, va, 0); /*0x11ca*/
i_1 = AsciiStrLen(StartOfBuffer); /*0x11d4*/
StartOfBuffer_1 = (unsigned __int8 *)StartOfBuffer; /*0x11d9*/
for ( i = i_1; i; ++StartOfBuffer_1 ) /*0x11e4*/
{
--i; /*0x11e6*/
do /*0x11f1*/
v7 = __inbyte(0x3FDu); /*0x11ee*/
while ( (v7 & 0x20) == 0 ); /*0x11f1*/
LOBYTE(i_1) = *StartOfBuffer_1; /*0x11f3*/
__outbyte(0x3F8u, *StartOfBuffer_1); /*0x11fa*/
}
}
return i_1; /*0x1203*/
}
// Function: DebugAssert @ 0x1210 (0x90 bytes)
// Index: 14/906
void __cdecl DebugAssert(const CHAR8 *FileName, UINTN LineNumber, const CHAR8 *Description)
{
double v3; // xmm3_8
UINTN i_1; // rax
unsigned __int8 *StartOfBuffer_1; // rcx
UINTN i; // r11
unsigned __int8 v7; // al
CHAR8 StartOfBuffer[264]; // [rsp+30h] [rbp-108h] BYREF
HiiMemAlloc(StartOfBuffer, 0x100u, "ASSERT %a(%d): %a\n", v3, LineNumber, *(double *)&Description);
i_1 = AsciiStrLen(StartOfBuffer); /*0x123f*/
StartOfBuffer_1 = (unsigned __int8 *)StartOfBuffer; /*0x1244*/
for ( i = i_1; i; ++StartOfBuffer_1 ) /*0x124f*/
{
--i; /*0x1251*/
do /*0x125c*/
v7 = __inbyte(0x3FDu); /*0x1259*/
while ( (v7 & 0x20) == 0 ); /*0x125c*/
__outbyte(0x3F8u, *StartOfBuffer_1); /*0x1265*/
}
}
// Function: RstDebugEnabled @ 0x12a0 (0x9 bytes)
// Index: 15/906
char RstDebugEnabled()
{
return 1; /*0x12a8*/
}
// Function: RstDebugEnabled2 @ 0x12ac (0xb bytes)
// Index: 16/906
char RstDebugEnabled2()
{
return 1; /*0x12b6*/
}
// Function: ConsolePrintBoxed @ 0x3714 (0x345 bytes)
// Index: 58/906
__int64 ConsolePrintBoxed(__int64 n23, __int16 *p_n23, ...)
{
const CHAR16 *v2; // rsi
UINTN v4; // r12
unsigned __int64 v5; // rbp
const CHAR16 *v6; // rbx
const CHAR16 **v7; // rdi
__int64 v8; // rdi
unsigned __int64 v9; // rax
UINTN v10; // r15
unsigned __int64 v11; // r13
unsigned __int64 v12; // rbp
_WORD *v13; // rbx
unsigned __int64 v14; // r12
__int64 v15; // r14
unsigned __int64 v16; // r13
UINTN v17; // rbp
__int64 v18; // r8
CHAR16 *v19; // rdx
_BYTE *v20; // rcx
__int64 v21; // rdx
__int64 result; // rax
unsigned __int64 v23; // [rsp+20h] [rbp-98h]
va_list v24; // [rsp+28h] [rbp-90h]
__int64 v25; // [rsp+30h] [rbp-88h] BYREF
__int64 v26; // [rsp+38h] [rbp-80h] BYREF
unsigned __int64 v27; // [rsp+40h] [rbp-78h]
char v28[8]; // [rsp+48h] [rbp-70h] BYREF
char v29[4]; // [rsp+50h] [rbp-68h] BYREF
int v30; // [rsp+54h] [rbp-64h]
int v31; // [rsp+58h] [rbp-60h]
int v32; // [rsp+5Ch] [rbp-5Ch]
int v33; // [rsp+60h] [rbp-58h]
char v34; // [rsp+64h] [rbp-54h]
const CHAR16 *v36; // [rsp+D0h] [rbp+18h] BYREF
va_list va; // [rsp+D0h] [rbp+18h]
va_list va1; // [rsp+D8h] [rbp+20h] BYREF
va_start(va1, p_n23);
va_start(va, p_n23);
v36 = va_arg(va1, const CHAR16 *); /*0x3714*/
v2 = v36; /*0x3733*/
v4 = 0; /*0x373d*/
v5 = 0; /*0x3740*/
v6 = v36; /*0x3743*/
if ( v36 ) /*0x3749*/
{
va_copy((va_list)v7, va); /*0x374b*/
do /*0x376e*/
{
if ( v4 <= StrLen(v6) ) /*0x375a*/
v4 = StrLen(v6); /*0x3764*/
++v7; /*0x3767*/
++v5; /*0x376b*/
v6 = *v7; /*0x376e*/
}
while ( *v7 ); /*0x376e*/
}
if ( !v5 ) /*0x3784*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x15Bu, "NumberOfLines != 0"); /*0x3799*/
if ( !v4 ) /*0x37ac*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x160u, "MaxLength != 0"); /*0x37c1*/
v8 = *(_QWORD *)(SystemTable + 64LL); /*0x37d8*/
sub_272C(v29, *(_BYTE **)(v8 + 72), 24); /*0x37e0*/
(*(void (__fastcall **)(__int64, _QWORD, __int64 *, __int64 *))(v8 + 24))(v8, v30, &v26, &v25); /*0x37f7*/
(*(void (__fastcall **)(__int64, _QWORD))(v8 + 64))(v8, 0); /*0x37ff*/
(*(void (__fastcall **)(__int64, __int64))(v8 + 40))(v8, n23); /*0x3808*/
v9 = v25 - 3; /*0x3810*/
if ( v5 < v25 - 3 ) /*0x3817*/
v9 = v5; /*0x3817*/
v10 = v26 - 2; /*0x3820*/
v23 = v9; /*0x3824*/
if ( v4 < v26 - 2 ) /*0x382c*/
v10 = v4; /*0x382c*/
v11 = (v25 - v9 - 3) >> 1; /*0x3843*/
v12 = (v26 - v10 - 2) >> 1; /*0x3846*/
v27 = v12; /*0x3849*/
v13 = (_WORD *)MemAllocZeroPool(2 * v10 + 6); /*0x385a*/
if ( !v13 ) /*0x3862*/
DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x18Bu, "Line != ((void *) 0)"); /*0x3877*/
v14 = 2 * v10 + 4; /*0x387c*/
MemSet((__int64)v13, v14, 9472); /*0x388d*/
v15 = v10; /*0x3898*/
*v13 = 9484; /*0x38a0*/
v13[v10 + 1] = 9488; /*0x38a7*/
*(_WORD *)((char *)v13 + v14) = 0; /*0x38b5*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v11); /*0x38ba*/
v16 = v11 + 1; /*0x38c3*/
(*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x38c6*/
if ( v2 ) /*0x38ce*/
{
va_copy(v24, va); /*0x38dc*/
do /*0x38e1*/
{
if ( !v23 ) /*0x38e6*/
break; /*0x38e6*/
v17 = StrLen(v2); /*0x3900*/
MemSet((__int64)v13, 2 * v10 + 4, 32); /*0x3903*/
if ( v17 > v10 ) /*0x390b*/
{
if ( v15 * 2 ) /*0x392d*/
{
v20 = v13 + 1; /*0x3932*/
v18 = 2 * v10; /*0x3936*/
v19 = (CHAR16 *)&v2[(v17 - v10) >> 1]; /*0x393c*/
goto LABEL_24; /*0x393c*/
}
}
else
{
v18 = 2 * v17; /*0x390d*/
if ( 2 * v17 ) /*0x390d*/
{
v19 = (CHAR16 *)v2; /*0x391a*/
v20 = &v13[((v10 - v17) >> 1) + 1]; /*0x3923*/
LABEL_24:
sub_272C(v20, v19, v18); /*0x3940*/
}
}
v12 = v27; /*0x3945*/
*v13 = 9474; /*0x3951*/
v13[v15 + 1] = 9474; /*0x395d*/
*(_WORD *)((char *)v13 + v14) = 0; /*0x3963*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v16++); /*0x3968*/
(*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x3974*/
--v23; /*0x397c*/
v2 = (const CHAR16 *)v24[1]; /*0x3987*/
++v24; /*0x398a*/
}
while ( v2 ); /*0x38e1*/
}
MemSet((__int64)v13, 2 * v10 + 4, 9472); /*0x3998*/
*v13 = 9492; /*0x39b1*/
*(_WORD *)((char *)v13 + v14) = 0; /*0x39c2*/
v13[v15 + 1] = 9496; /*0x39c7*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v16); /*0x39cd*/
(*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x39d6*/
MemFreePool(); /*0x39dc*/
LOBYTE(v21) = v34; /*0x39e1*/
(*(void (__fastcall **)(__int64, __int64))(v8 + 64))(v8, v21); /*0x39e8*/
(*(void (__fastcall **)(__int64, _QWORD, _QWORD))(v8 + 56))(v8, v32, v33); /*0x39f8*/
result = (*(__int64 (__fastcall **)(__int64, _QWORD))(v8 + 40))(v8, v31); /*0x3a03*/
if ( p_n23 ) /*0x3a11*/
{
(*(void (__fastcall **)(__int64, __int64, char *))(qword_58070 + 96))( /*0x3a31*/
1,
*(_QWORD *)(SystemTable + 48LL) + 16LL,
v28);
return (*(__int64 (__fastcall **)(_QWORD, __int16 *))(*(_QWORD *)(SystemTable + 48LL) + 8LL))( /*0x3a45*/
*(_QWORD *)(SystemTable + 48LL),
p_n23);
}
return result; /*0x3a48*/
}
// Function: RstNullSub2 @ 0x4ca8 (0x3 bytes)
// Index: 107/906
char RstNullSub2()
{
return 0; /*0x4caa*/
}
// Function: RstNullSub @ 0x4cac (0xb bytes)
// Index: 108/906
bool __fastcall RstNullSub(__int64 a1, __int64 a2)
{
return a2 == *(_QWORD *)(a1 + 184); /*0x4cb6*/
}
// Function: RstReturnFail @ 0x5164 (0x8 bytes)
// Index: 111/906
__int64 __fastcall RstReturnFail(__int64 a1)
{
return *(_QWORD *)(a1 + 360); /*0x516b*/
}
// Function: RstReturnInvalid @ 0x516c (0x8 bytes)
// Index: 112/906
void __fastcall RstReturnInvalid(__int64 a1, __int64 a2)
{
*(_QWORD *)(a1 + 192) = a2; /*0x516c*/
}
// Function: RstReadWriteConfig @ 0x528c (0xd3 bytes)
// Index: 117/906
__int64 __fastcall RstReadWriteConfig(__int64 a1, int a2, __int64 a3, unsigned __int64 a4, __int64 a5)
{
__int64 v5; // rsi
__int64 v6; // r12
__int64 v8; // rbx
v5 = *(_QWORD *)(a1 + 200); /*0x52a5*/
v6 = *(_QWORD *)(v5 + 8); /*0x52b4*/
v8 = 0x8000000000000003uLL; /*0x52bd*/
if ( !a5 || a4 / *(unsigned int *)(v6 + 12) + a3 - 1 > *(_QWORD *)(v6 + 24) ) /*0x52e3*/
return 0x8000000000000002uLL; /*0x533a*/
if ( !a4 ) /*0x52e8*/
return 0; /*0x52ea*/
if ( a4 % *(unsigned int *)(v6 + 12) ) /*0x52d6*/
return 0x8000000000000004uLL; /*0x52f3*/
if ( v5 ) /*0x5302*/
{
if ( a2 ) /*0x5313*/
{
v8 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, unsigned __int64, __int64))(v5 + 32))(v5, 0, a3, a4, a5); /*0x5320*/
if ( v8 >= 0 ) /*0x5326*/
(*(void (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 40LL))(*(_QWORD *)(a1 + 200)); /*0x5332*/
}
else
{
return (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, unsigned __int64, __int64))(v5 + 24))( /*0x5318*/
v5,
0,
a3,
a4,
a5);
}
}
return v8; /*0x5358*/
}
// Function: RstReturnSuccess @ 0x55d8 (0x10 bytes)
// Index: 128/906
__int64 __fastcall RstReturnSuccess(_QWORD *NewContext)
{
return HiiLibGetAllStrings(NewContext[2], NewContext[23]);
}
// Function: RstReturnOne @ 0x589c (0xb bytes)
// Index: 135/906
unsigned __int64 RstReturnOne()
{
return 0x8000000000000003uLL; /*0x58a6*/
}
// Function: RstReturnThree @ 0x58a8 (0x7 bytes)
// Index: 136/906
__int64 __fastcall RstReturnThree(__int64 a1)
{
return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 40LL))(a1);
}
// Function: RstFindDriverByHandle @ 0x608c (0x3c bytes)
// Index: 160/906
_QWORD *__fastcall RstFindDriverByHandle(__int64 a1, __int64 a2)
{
_QWORD *i; // rbx
_QWORD *result; // rax
for ( i = *(_QWORD **)(a1 + 704); i; i = (_QWORD *)*i ) /*0x6096*/
{
result = RstConfigAccessCallback(i[2], a2); /*0x60a9*/
if ( result ) /*0x60b1*/
return result; /*0x60b1*/
}
return 0; /*0x60c2*/
}
// Function: RstComponentNameGetDriverName @ 0x6188 (0x6e bytes)
// Index: 162/906
__int64 __fastcall RstComponentNameGetDriverName(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v3; // rdi
__int64 (__fastcall ***v6)(_QWORD, __int64); // rax
_QWORD *DriverByHandle; // rax
v3 = a1 - 520; /*0x6197*/
v6 = (__int64 (__fastcall ***)(_QWORD, __int64))RstCheckAlreadyStarted(a1 - 520, a2, 0); /*0x61aa*/
if ( v6 ) /*0x61b5*/
return (**v6)(v6, a3); /*0x61e4*/
DriverByHandle = RstFindDriverByHandle(v3, a2); /*0x61bd*/
if ( DriverByHandle ) /*0x61c8*/
return (*(__int64 (__fastcall **)(_QWORD *))(*DriverByHandle + 8LL))(DriverByHandle); /*0x61d9*/
else
return 0x8000000000000003uLL; /*0x61ca*/
}
// Function: RstComponentNameGetControllerName @ 0x61f8 (0x8b bytes)
// Index: 163/906
__int64 __fastcall RstComponentNameGetControllerName(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
__int64 v4; // rsi
__int64 v7; // rbx
__int64 Context_1; // rax
void *Context; // rdi
v4 = a1 - 520; /*0x6211*/
v7 = 0x8000000000000002uLL; /*0x6228*/
Context_1 = RstCheckAlreadyStarted((RST_PRIVATE_DATA *)(a1 - 520), a2, a3 == 0); /*0x6232*/
Context = (void *)Context_1; /*0x6237*/
if ( Context_1 ) /*0x623d*/
{
v7 = (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)Context_1 + 8LL))(Context_1, a3, a4); /*0x624e*/
if ( v7 < 0 ) /*0x6254*/
RstInstallClass((RST_PRIVATE_DATA *)(v4 + 704), Context); /*0x6260*/
}
return v7; /*0x627c*/
}
// Function: RstComponentName2GetController @ 0x6284 (0x8b bytes)
// Index: 164/906
__int64 __fastcall RstComponentName2GetController(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
__int64 result; // rax
__int64 v8; // rax
_QWORD *v9; // rax
result = 0x8000000000000002uLL; /*0x6294*/
if ( a1 && a4 && a5 && a2 ) /*0x62b3*/
{
v8 = RstCheckAlreadyStarted(a1, a2, 0); /*0x62b8*/
if ( v8 ) /*0x62c3*/
{
if ( !a3 ) /*0x62c8*/
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)v8 + 24LL))(v8, a4, a5); /*0x62f8*/
v9 = RstConfigAccessCallback(v8, a3); /*0x62cd*/
if ( v9 ) /*0x62d8*/
return (*(__int64 (__fastcall **)(_QWORD *, __int64, __int64))(*v9 + 64LL))(v9, a4, a5); /*0x62e8*/
}
return 0x8000000000000003uLL; /*0x62fa*/
}
return result; /*0x6309*/
}
// Function: RstGetLanguage @ 0x6310 (0x3f bytes)
// Index: 165/906
__int64 __fastcall RstGetLanguage(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
if ( a1 && a4 && a5 && a2 ) /*0x632b*/
return RstComponentName2GetController(a1 - 568, a2, a3, a4, a5); /*0x6339*/
else
return 0x8000000000000002uLL; /*0x6340*/
}
// Function: RstSetLanguage @ 0x6350 (0x3f bytes)
// Index: 166/906
__int64 __fastcall RstSetLanguage(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
if ( a1 && a4 && a5 && a2 ) /*0x636b*/
return RstComponentName2GetController(a1 - 592, a2, a3, a4, a5); /*0x6379*/
else
return 0x8000000000000002uLL; /*0x6380*/
}
// Function: RstNoop @ 0x6ab4 (0x3 bytes)
// Index: 176/906
char RstNoop()
{
return 1; /*0x6ab6*/
}
// Function: RstBeginSession @ 0x6ab8 (0x157 bytes)
// Index: 177/906
__int64 __fastcall RstBeginSession(_QWORD *a1)
{
__int64 v1; // rbp
__int64 v3; // rcx
unsigned int v4; // eax
int v5; // edi
unsigned __int64 v6; // rbx
unsigned __int64 v7; // r12
__int16 v8; // ax
__int64 v9; // rcx
CHAR16 *FirstString; // rcx
_BYTE *v11; // rax
char i; // [rsp+30h] [rbp-48h] BYREF
char n23; // [rsp+31h] [rbp-47h]
int v15; // [rsp+34h] [rbp-44h]
unsigned __int64 v16; // [rsp+38h] [rbp-40h]
v1 = 0; /*0x6ad1*/
if ( !a1[23] || !a1[2] ) /*0x6ae3*/
return 0x8000000000000007uLL; /*0x6bea*/
MemZero(&i, 0, 60); /*0x6af7*/
v3 = a1[23]; /*0x6afc*/
i = 3; /*0x6b03*/
v4 = sub_A68C(v3); /*0x6b08*/
v5 = GuidCompare(v4); /*0x6b1b*/
v6 = (unsigned __int64)(unsigned __int16)sub_A438(a1[23]) << 32; /*0x6b2c*/
v7 = v6 | (unsigned int)sub_A4C8(a1[23]); /*0x6b3d*/
if ( v5 == 1 ) /*0x6b43*/
{
i = 3; /*0x6b48*/
n23 = 23; /*0x6b4d*/
Assert_57(&i, 0x10u); /*0x6b52*/
v16 = v7; /*0x6b57*/
v15 = 1; /*0x6b5c*/
}
else
{
n23 = 18; /*0x6b67*/
Assert_57(&i, 0xAu); /*0x6b6c*/
v8 = sub_A4C8(a1[23]); /*0x6b78*/
v9 = a1[23]; /*0x6b7d*/
LOWORD(v15) = v8; /*0x6b84*/
HIWORD(v15) = 0x8000; /*0x6b8e*/
LOWORD(v16) = (unsigned __int8)sub_A438(v9); /*0x6b9b*/
}
FirstString = *(CHAR16 **)(a1[2] + 40LL); /*0x6ba4*/
a1[3] = FirstString; /*0x6ba8*/
if ( FirstString ) /*0x6baf*/
{
v11 = Assert_85(FirstString, &i); /*0x6bb6*/
a1[3] = v11; /*0x6bc6*/
return (*(__int64 (__fastcall **)(_QWORD *, void *, _BYTE *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x6be2*/
a1 + 1,
&unk_27730,
v11,
0,
0);
}
return v1; /*0x6c09*/
}
// Function: RstReturn2 @ 0x7024 (0x1b bytes)
// Index: 183/906
unsigned __int64 __fastcall RstReturn2(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
__int64 v5; // r8
v5 = a2; /*0x7030*/
LOBYTE(a2) = 1; /*0x7033*/
return RsteDeviceAlloc2(a1, a2, v5, a3, a4); /*0x703a*/
}
// Function: RstReturn2_0 @ 0x7040 (0x1b bytes)
// Index: 184/906
unsigned __int64 __fastcall RstReturn2_0(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
return RsteDeviceAlloc2(a1, 0, a2, a3, a4); /*0x7056*/
}
// Function: RstReturn0 @ 0x705c (0x6 bytes)
// Index: 185/906
__int64 RstReturn0()
{
return 1; /*0x7061*/
}
// Function: RstLanguageHandler @ 0x778c (0x12e bytes)
// Index: 192/906
EFI_STRING __fastcall RstLanguageHandler(CHAR16 *Source, unsigned __int8 n24, void *HiiHandle)
{
EFI_STRING_ID StringId; // bp
unsigned __int16 v7; // r9
const CHAR8 *StringToLanguage; // rax
__int64 v9; // rax
CHAR16 *v10; // r8
unsigned __int16 v11; // ax
__int64 v12; // rax
_QWORD v14[3]; // [rsp+30h] [rbp-188h] BYREF
_WORD i[28]; // [rsp+48h] [rbp-170h] BYREF
CHAR8 Language[304]; // [rsp+80h] [rbp-138h] BYREF
RstGpioConfigure(*((_DWORD *)Source + 36)); /*0x77b2*/
StringId = RstGpioWrite(n24); /*0x77cd*/
StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, v7, 0); /*0x77d0*/
HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x77e1*/
MemZero(i, 0, 44); /*0x77f1*/
MemZero(Language, 0, 300); /*0x7806*/
if ( n24 == 0xFF ) /*0x780f*/
v9 = 0x8000000000000002uLL; /*0x7828*/
else
v9 = sub_BBD4((__int64)v14, n24, "en"); /*0x7821*/
v10 = (CHAR16 *)v14; /*0x783c*/
if ( v9 ) /*0x7844*/
v10 = Source + 2; /*0x7846*/
sub_872C(i, 0x2Cu, v10); /*0x784a*/
v11 = RstGpioConfigure(*((_DWORD *)Source + 36)); /*0x7855*/
v12 = HiiGetStringToLanguage(HiiHandle, v11, 0); /*0x7863*/
HiiCfgArrayGet(Language, 0x12Cu, (unsigned __int8 *)L"%s, %s", i, v12); /*0x7886*/
return HiiGetString(HiiHandle, StringId, Language); /*0x78b5*/
}
// Function: RstGetString @ 0x78bc (0x98 bytes)
// Index: 193/906
__int64 __fastcall RstGetString(__int64 a1, __int64 a2)
{
__int64 v4; // rbx
__int64 v5; // rax
LocateHandleBuffer(*(_QWORD *)(qword_35418 + 624), SystemTable); /*0x78e1*/
v4 = (*(__int64 (__fastcall **)(__int64, void *, __int64, _QWORD))(qword_58070 + 328))(a2, &unk_271D8, a1 + 8, 0); /*0x7929*/
v5 = HiiPackageListBuild((__int64)&unk_271C8, *(_QWORD *)(qword_35418 + 624), &unk_271F0, 0, 0); /*0x792c*/
*(_QWORD *)(a1 + 24) = v5; /*0x793e*/
if ( !v5 ) /*0x7942*/
return 0x8000000000000002uLL; /*0x7942*/
return v4; /*0x794e*/
}
// Function: RstIsDebugEnabled @ 0x7954 (0xdf bytes)
// Index: 194/906
char RstIsDebugEnabled()
{
char v0; // di
unsigned int v1; // eax
unsigned __int8 n0x18; // si
unsigned __int64 v3; // rbx
unsigned __int8 v4; // si
unsigned __int64 v5; // rbx
__int64 i[17]; // [rsp+20h] [rbp-F8h] BYREF
int n21; // [rsp+ACh] [rbp-6Ch]
int n5; // [rsp+B0h] [rbp-68h]
v0 = 0; /*0x7966*/
v1 = sub_B334(); /*0x7969*/
n0x18 = 0; /*0x796e*/
v3 = v1; /*0x7971*/
while ( v3 ) /*0x7975*/
{
if ( !(unsigned int)RstHelper_c8a8(n0x18, (__int64)i) ) /*0x797f*/
{
if ( (v3 & 1) != 0 && n21 != 21 && (n21 <= 23 || n21 > 25 && (n21 <= 31 || n21 > 36)) ) /*0x79ab*/
++v0; /*0x79ad*/
v3 >>= 1; /*0x79b0*/
++n0x18; /*0x79b3*/
}
}
v4 = 0; /*0x79bd*/
v5 = sub_B1C4(0); /*0x79c5*/
while ( v5 ) /*0x79cb*/
{
if ( !(unsigned int)RstHelper_ce6c(v4, (__int64)i) ) /*0x79d6*/
{
if ( (v5 & 1) != 0 && n5 && n5 != 5 && (n5 <= 6 || n5 > 9 && n5 != 13 && (n5 <= 17 || n5 > 19)) ) /*0x7a0b*/
++v0; /*0x7a0d*/
v5 >>= 1; /*0x7a10*/
++v4; /*0x7a13*/
}
}
return v0; /*0x7a2e*/
}
// Function: RstGetBrowserData @ 0x7c70 (0xbd bytes)
// Index: 196/906
__int64 __fastcall RstGetBrowserData(__int64 a1, __int64 a2, __int64 a3, _DWORD *a4, unsigned __int64 *Private_1)
{
RST_PRIVATE_DATA *Private; // rdi
unsigned __int8 IsDebugEnabled; // al
if ( a2 && a2 != qword_35418[78] ) /*0x7c99*/
return 0x8000000000000003uLL; /*0x7ca5*/
if ( a3 ) /*0x7caa*/
return (a4 != 0) - 0x7FFFFFFFFFFFFFFELL; /*0x7cc2*/
Private = (RST_PRIVATE_DATA *)Private_1; /*0x7cc4*/
*a4 = 0; /*0x7cc9*/
if ( Private_1 ) /*0x7cd0*/
{
IsDebugEnabled = RstIsDebugEnabled(); /*0x7cd2*/
if ( IsDebugEnabled ) /*0x7cdc*/
{
if ( (*(__int64 (__fastcall **)(__int64, __int64, unsigned __int64 *))(qword_58070 + 64))( /*0x7cfd*/
4,
24LL * ((unsigned int)IsDebugEnabled + 1),
Private_1) < 0 )
return 0x8000000000000009uLL; /*0x7d09*/
}
else
{
Private = 0; /*0x7d0b*/
}
}
RstProcessForm(Private); /*0x7d16*/
return 0; /*0x7d27*/
}
// Function: RstSetBrowserData @ 0x7e18 (0xba bytes)
// Index: 201/906
char __fastcall RstSetBrowserData(
__int64 a1,
int a2,
unsigned __int64 a3,
unsigned __int64 a4,
unsigned __int64 a5,
unsigned __int64 *a6)
{
unsigned __int64 v7; // rax
unsigned __int64 v8; // rcx
if ( !a6 ) /*0x7e2b*/
return 0; /*0x7e2b*/
if ( !a1 ) /*0x7e34*/
goto LABEL_17; /*0x7e34*/
if ( *(_DWORD *)(a1 + 88) != a2 ) /*0x7e3d*/
{
v7 = 0x800000000000000DuLL; /*0x7e3f*/
LABEL_18:
*a6 = v7; /*0x7ec7*/
return 0; /*0x7ec7*/
}
if ( !a5 ) /*0x7e53*/
{
LABEL_17:
v7 = 0x8000000000000002uLL; /*0x7ebd*/
goto LABEL_18; /*0x7ebd*/
}
if ( a4 ) /*0x7e58*/
{
v8 = *(unsigned int *)(a1 + 100); /*0x7e5f*/
if ( a4 % v8 ) /*0x7e67*/
{
v7 = 0x8000000000000004uLL; /*0x7e6f*/
goto LABEL_18; /*0x7e79*/
}
if ( a3 <= *(_QWORD *)(a1 + 112) /*0x7eb3*/
&& a4 / v8 + a3 - 1 <= *(_QWORD *)(a1 + 112)
&& a4 + a5 <= 0x100000000LL
&& a5 <= 0x100000000LL
&& (!*(_DWORD *)(a1 + 104) || ((*(_DWORD *)(a1 + 104) - 1) & (unsigned int)a5) == 0) )
{
*a6 = 0; /*0x7eb5*/
return 1; /*0x7ebb*/
}
goto LABEL_17; /*0x7eb3*/
}
*a6 = 0; /*0x7e5a*/
return 0; /*0x7ed1*/
}
// Function: RstGetMemoryMap @ 0x877c (0x50 bytes)
// Index: 228/906
unsigned __int64 RstGetMemoryMap()
{
__int64 v1; // [rsp+30h] [rbp+8h] BYREF
__int64 v2; // [rsp+38h] [rbp+10h] BYREF
sub_9070(&v2); /*0x8785*/
(*(void (__fastcall **)(__int64))(qword_58070 + 248))(3000); /*0x8796*/
sub_9070(&v1); /*0x87a1*/
dword_35430 = (v1 - v2) / 0xBB8uLL; /*0x87c1*/
return 0xAEC33E1F671529A5uLL * (v1 - v2); /*0x87c7*/
}
// Function: RstLinkedListGetNth @ 0xde68 (0x24 bytes)
// Index: 364/906
_QWORD *__fastcall RstLinkedListGetNth(_QWORD **a1, __int16 a2)
{
_QWORD *result; // rax
if ( a2 < 0 ) /*0xde6f*/
return 0; /*0xde71*/
result = *a1; /*0xde74*/
while ( result && a2 > 0 ) /*0xde7d*/
{
result = (_QWORD *)*result; /*0xde7f*/
--a2; /*0xde82*/
}
return result; /*0xde73*/
}
// Function: RstListNodeInit @ 0x10d8c (0x1c bytes)
// Index: 450/906
_QWORD *__fastcall RstListNodeInit(_QWORD *a1)
{
a1[1] = 0; /*0x10d8e*/
*a1 = 0; /*0x10d92*/
a1[13] = 0; /*0x10d95*/
a1[12] = 0; /*0x10d99*/
a1[16] = a1; /*0x10d9d*/
return a1; /*0x10da7*/
}
// Function: RstGetFieldCount @ 0x11d88 (0x12 bytes)
// Index: 474/906
__int64 __fastcall RstGetFieldCount(__int64 Destination, char a2)
{
__int64 result; // rax
result = *(unsigned int *)(Destination + 4); /*0x11d88*/
if ( a2 ) /*0x11d8d*/
{
if ( (unsigned int)result > 1 ) /*0x11d96*/
return 1; /*0x11d96*/
}
return result; /*0x11d99*/
}
// Function: RstGetFieldSize @ 0x11de4 (0x12 bytes)
// Index: 476/906
__int64 __fastcall RstGetFieldSize(CHAR16 *Destination, char a2)
{
__int64 n0x18; // rax
n0x18 = *((unsigned int *)Destination + 3); /*0x11de4*/
if ( a2 ) /*0x11de9*/
{
if ( (unsigned int)n0x18 > 0x18 ) /*0x11df2*/
return 24; /*0x11df2*/
}
return n0x18; /*0x11df5*/
}
// Function: RstGetFieldBlockSize @ 0x11df8 (0x4 bytes)
// Index: 477/906
__int64 __fastcall RstGetFieldBlockSize(CHAR16 *Destination)
{
return *((unsigned int *)Destination + 4); /*0x11dfb*/
}
// Function: AssertCpuDeadLoop @ 0x22494 (0x2a2 bytes)
// Index: 879/906
__int64 __fastcall AssertCpuDeadLoop(unsigned int n16908298, _DWORD *a2)
{
unsigned int v4; // r14d
int v5; // r15d
unsigned int v6; // eax
char v7; // si
unsigned int v8; // r13d
__int64 v9; // rbx
__int64 v10; // rbx
int n257_1; // ebx
__int64 v12; // rbp
int i; // [rsp+78h] [rbp+10h] BYREF
int i_4; // [rsp+7Ch] [rbp+14h]
int i_; // [rsp+80h] [rbp+18h] BYREF
int n257; // [rsp+84h] [rbp+1Ch]
sub_2800((__int64)&i_, 8u); /*0x224bb*/
sub_2800((__int64)&i, 8u); /*0x224c8*/
v4 = WORD1_w(n16908298); /*0x224d6*/
v5 = BYTE2_w(n16908298); /*0x224e0*/
v6 = sub_22898(n16908298); /*0x224e3*/
v7 = v6 & 0x1F; /*0x224ff*/
v8 = v6 >> 5; /*0x22502*/
Assert_16(n16908298, (__int64)a2, &i_, &i); /*0x22506*/
RstHelper_1960(n16908298, 0, ~i, i_); /*0x2251f*/
RstHelper_1960(n16908298, 1u, ~i_4, n257); /*0x2253e*/
v9 = Assert_30(0, v4, v8, ~(((*a2 >> 5) & 1u) << v7), ((*a2 >> 6) & 1u) << v7); /*0x22575*/
if ( RstDebugEnabled() && v9 < 0 ) /*0x22589*/
{
if ( RstDebugEnabled2() ) /*0x2258b*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x225a1*/
DebugAssert("GpioLib.c", 0x427u, "!EFI_ERROR (Status)"); /*0x225b9*/
}
v10 = Assert_30(1, v4, v8, ~(((*a2 >> 15) & 1u) << v7), ((*a2 >> 18) & 1u) << v7); /*0x225ec*/
if ( RstDebugEnabled() && v10 < 0 ) /*0x225fb*/
{
if ( RstDebugEnabled2() ) /*0x225fd*/
DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0x22613*/
DebugAssert("GpioLib.c", 0x439u, "!EFI_ERROR (Status)"); /*0x2262b*/
}
n257_1 = (HIWORD(*a2) & 1) << v7; /*0x2264b*/
v12 = Assert_30(5, v4, v8, ~(((*a2 >> 15) & 1u) << v7), n257_1); /*0x22661*/
if ( v12 != 0x8000000000000003uLL ) /*0x22671*/
goto LABEL_14; /*0x22671*/
if ( !n257_1 ) /*0x22675*/
{
v12 = 0; /*0x22677*/
LABEL_14:
if ( (a2[1] & 0x600) == 0x600 ) /*0x2268a*/
Assert_41(6, v4, v8); /*0x226a4*/
if ( (a2[1] & 0xA00) == 0xA00 ) /*0x226b7*/
Assert_41(7, v4, v8); /*0x226cf*/
return v12; /*0x226d4*/
}
if ( RstDebugEnabled2() )
DebugPrintSerial(0x80000000, "GPIO ERROR: Group %d has no pads supporting NMI\n", v5);
if ( RstDebugEnabled() ) /*0x22709*/
DebugAssert("GpioLib.c", 0x451u, "((BOOLEAN)(0==1))"); /*0x22725*/
return 0x8000000000000003uLL; /*0x226dc*/
}