#include "117828F1-DA7D-4BC1-8B58-9A954FED5121.h"
// RaidCfgMgr.c - RAID configuration manager
// Extracted from 117828F1-DA7D-4BC1-8B58-9A954FED5121.c
// Function: RstCallback @ 0x48d8 (0x92 bytes)
// Index: 101/906
EFI_STATUS __fastcall RstCallback(RST_PRIVATE_DATA *Private)
{
EFI_STATUS result; // rax
__int64 v3; // [rsp+40h] [rbp+8h] BYREF
__int64 v4; // [rsp+48h] [rbp+10h] BYREF
RstHelper_48a0((__int64)Private); /*0x48e1*/
result = (*(__int64 (__fastcall **)(__int64, unsigned int *, _QWORD, __int64 *, __int64 *))(qword_58070 + 312))( /*0x490a*/
2,
&dword_278C0,
0,
&v3,
&v4);
if ( !LOBYTE(Private->HiiLibFunctions[15]) && !result && v3 ) /*0x4923*/
{
(*(void (__fastcall **)(_QWORD *))(*qword_35418 + 32LL))(qword_35418); /*0x492f*/
LOBYTE(Private->HiiLibFunctions[15]) = 1; /*0x4932*/
result = RstGetString((__int64)&Private->HiiLibFunctions[7], (__int64)(qword_35418 + 78)); /*0x494b*/
}
if ( v4 ) /*0x4958*/
return (*(EFI_STATUS (**)(void))(qword_58070 + 72))(); /*0x4961*/
return result; /*0x4964*/
}
// Function: RstCallbackHandler @ 0x496c (0x1ad bytes)
// Index: 102/906
EFI_STATUS __fastcall RstCallbackHandler(RST_PRIVATE_DATA *Private)
{
const CHAR16 *Source_1; // rdx
unsigned int n24_3; // r8d
unsigned int n24_1; // esi
const CHAR16 *Source; // rbp
EFI_STATUS n24; // rax
void *v7; // rax
CHAR16 *Destination; // rcx
unsigned int n24_2; // r12d
__int64 v10; // r14
__int64 v11; // rbp
__int64 v12; // r13
__int64 v13; // rbx
char *v14; // rax
__int64 v15; // r15
__int64 v16; // [rsp+50h] [rbp+8h] BYREF
n24_1 = n24_3; /*0x4988*/
Source = Source_1; /*0x498b*/
HiiLibGetDefaultString((__int64)Private); /*0x4991*/
n24 = 24; /*0x4996*/
if ( n24_1 > 0x18 ) /*0x499d*/
n24_1 = 24; /*0x499d*/
HIDWORD(Private->HiiLibFunctions[11]) = 0; /*0x49a0*/
if ( Source && n24_1 ) /*0x49af*/
{
Private->HiiLibFunctions[12] = (void *)MemAllocPages(8LL * n24_1); /*0x49c6*/
Private->HiiLibFunctions[13] = (void *)MemAllocPages(56LL * n24_1); /*0x49d9*/
v7 = (void *)MemAllocPages(4LL * n24_1); /*0x49dd*/
Destination = (CHAR16 *)Private->HiiLibFunctions[12]; /*0x49e2*/
Private->HiiLibFunctions[14] = v7; /*0x49e6*/
if ( Destination && Private->HiiLibFunctions[13] && v7 ) /*0x4a04*/
{
StrnCpy(Destination, Source, 8LL * n24_1); /*0x4a10*/
n24_2 = 0; /*0x4a15*/
LODWORD(Private->HiiLibFunctions[11]) = n24_1; /*0x4a18*/
v10 = 0; /*0x4a23*/
v11 = 0; /*0x4a26*/
v12 = 0; /*0x4a28*/
v13 = 0; /*0x4a2b*/
do /*0x4aec*/
{
MemZero((_BYTE *)Private->HiiLibFunctions[13] + v13, 0, 56); /*0x4a3b*/
*((_BYTE *)Private->HiiLibFunctions[13] + v11) = 1; /*0x4a44*/
v14 = (char *)Private->HiiLibFunctions[12]; /*0x4a49*/
v15 = *(_QWORD *)&v14[v12]; /*0x4a4d*/
if ( v15 /*0x4a7b*/
&& !HiiLibGetStringId((__int64)Private, *(_QWORD *)&v14[v12], (__int64)&unk_27890, (__int64)&v16)
&& v16 )
{
if ( (*(__int64 (__fastcall **)(__int64, char *))(v16 + 8))(v16, (char *)Private->HiiLibFunctions[13] + v13) < 0 /*0x4a99*/
|| *((_BYTE *)Private->HiiLibFunctions[13] + v11) != 1 )
{
MemZero((_BYTE *)Private->HiiLibFunctions[13] + v13, 0, 56); /*0x4aa9*/
}
HiiLibFindString((__int64)Private, v15, (__int64)&unk_27890); /*0x4abb*/
}
RstFreeContext(Private); /*0x4ac6*/
++n24_2; /*0x4ad2*/
*(_DWORD *)((char *)Private->HiiLibFunctions[14] + v10) = n24; /*0x4ad5*/
v13 += 56; /*0x4ad9*/
v12 += 8; /*0x4add*/
v10 += 4; /*0x4ae1*/
v11 += 56; /*0x4ae5*/
}
while ( n24_2 < n24_1 ); /*0x4aec*/
}
else
{
return HiiLibGetDefaultString((__int64)Private); /*0x4af7*/
}
}
return n24; /*0x4b0b*/
}
// Function: RstQueryConfig @ 0x4b1c (0x6a bytes)
// Index: 103/906
EFI_STATUS __fastcall RstQueryConfig(RST_PRIVATE_DATA *Private)
{
EFI_STATUS result; // rax
__int64 n24; // [rsp+48h] [rbp+10h] BYREF
CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF
n24 = 0; /*0x4b22*/
HiiLibGetDefaultString(Private); /*0x4b2b*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x4b54*/
2,
&unk_27890,
0,
&n24,
&Source);
if ( !result ) /*0x4b5d*/
{
RstCallbackHandler(Private); /*0x4b6c*/
return (*(EFI_STATUS (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x4b7d*/
}
return result; /*0x4b80*/
}
// Function: RstFormCallback @ 0x4b88 (0x83 bytes)
// Index: 104/906
EFI_STATUS __fastcall RstFormCallback(RST_DEVICE *Device)
{
unsigned __int64 v2; // rbx
EFI_STATUS result; // rax
unsigned __int64 v4; // [rsp+48h] [rbp+10h] BYREF
__int64 v5; // [rsp+50h] [rbp+18h] BYREF
RstQueryConfig((RST_PRIVATE_DATA *)Device); /*0x4b95*/
v2 = 0; /*0x4b9f*/
v4 = 0; /*0x4bbf*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_58070 + 312))( /*0x4bc4*/
2,
&unk_278A0,
0,
&v4,
&v5);
if ( !result ) /*0x4bcd*/
{
if ( v4 ) /*0x4bd4*/
{
do /*0x4bef*/
{
RstAllocContext728((RST_PRIVATE_DATA *)Device); /*0x4be2*/
++v2; /*0x4be7*/
}
while ( v2 < v4 ); /*0x4bef*/
}
return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 72))(v5); /*0x4bfd*/
}
return result; /*0x4c05*/
}
// Function: RstFormCallbackInit @ 0x4c0c (0x2d bytes)
// Index: 105/906
char __fastcall RstFormCallbackInit(__int64 a1)
{
if ( !*(_QWORD *)(a1 + 40) ) /*0x4c12*/
*(_QWORD *)(a1 + 40) = Assert_85(0, 0); /*0x4c25*/
RstFormCallback(a1); /*0x4c2c*/
return 1; /*0x4c33*/
}
// Function: RstProcessAction @ 0x509c (0xc7 bytes)
// Index: 110/906
__int64 __fastcall RstProcessAction(__int64 a1)
{
__int64 v3; // rbx
UINTN v4; // rax
UINTN v5; // rax
if ( !*(_QWORD *)(a1 + 360) ) /*0x50a6*/
return 0x8000000000000003uLL; /*0x50b5*/
v3 = (*(__int64 (__fastcall **)(_QWORD, void *))(qword_58070 + 144))(*(_QWORD *)(a1 + 184), &unk_278D0); /*0x50df*/
if ( !v3 || v3 == 0x800000000000000EuLL ) /*0x50f4*/
{
v4 = StrLen(*(const CHAR16 **)(*(_QWORD *)(a1 + 360) + 62LL)); /*0x5101*/
MemZeroThenFree(*(_BYTE **)(*(_QWORD *)(a1 + 360) + 62LL), v4); /*0x5114*/
v5 = StrLen(*(const CHAR16 **)(*(_QWORD *)(a1 + 360) + 54LL)); /*0x5124*/
MemZeroThenFree(*(_BYTE **)(*(_QWORD *)(a1 + 360) + 54LL), v5); /*0x5137*/
MemZeroThenFree(*(_BYTE **)(a1 + 360), 116); /*0x5148*/
*(_QWORD *)(a1 + 360) = 0; /*0x514d*/
}
return v3; /*0x515d*/
}
// Function: RstExtractConfig @ 0x51ac (0x36 bytes)
// Index: 114/906
__int64 __fastcall RstExtractConfig(__int64 a1, __int64 a2)
{
__int64 result; // rax
__int64 v3; // [rsp+38h] [rbp+10h] BYREF
v3 = a2; /*0x51ac*/
if ( *(_QWORD *)(a1 + 624) ) /*0x51b5*/
return (*(__int64 (__fastcall **)(__int64 *, void *, _QWORD))(qword_58070 + 128))(&v3, &unk_278E0, 0); /*0x51d7*/
return result; /*0x51dd*/
}
// Function: RstRouteConfig @ 0x51e4 (0x2f bytes)
// Index: 115/906
__int64 __fastcall RstRouteConfig(__int64 a1, __int64 a2)
{
__int64 result; // rax
result = a2; /*0x51ef*/
if ( *(_QWORD *)(a1 + 624) ) /*0x51e8*/
return (*(__int64 (__fastcall **)(__int64, void *))(qword_58070 + 144))(a2, &unk_278E0); /*0x5208*/
return result; /*0x520e*/
}
// Function: RstSubmitForm @ 0x5214 (0x78 bytes)
// Index: 116/906
__int64 __fastcall RstSubmitForm(__int64 *a1)
{
__int64 result; // rax
__int64 String; // rdi
result = RstProcessAction((__int64)a1); /*0x5221*/
if ( result != 0x800000000000000FuLL && result != 0x8000000000000002uLL ) /*0x5242*/
{
String = HiiLibFindString(a1[2], a1[23], (__int64)&unk_278A0); /*0x525b*/
if ( String >= 0 ) /*0x5261*/
{
a1[25] = 0; /*0x5263*/
String = sub_7DD0((__int64)a1); /*0x5273*/
}
RstCheckCondition(a1); /*0x5279*/
return String; /*0x527e*/
}
return result; /*0x5286*/
}
// Function: RstCfgRaidDevCopy @ 0x1451c (0xcc bytes)
// Index: 555/906
__int64 __fastcall RstCfgRaidDevCopy(__int64 a1, __int64 Source, __int64 a3)
{
sub_14158(a1); /*0x1453d*/
StrnCpy((CHAR16 *)(a1 + 16), (const CHAR16 *)Source, 0x10u); /*0x1454f*/
*(_BYTE *)(a1 + 32) = 0; /*0x14554*/
*(_DWORD *)(a1 + 36) = *(unsigned __int8 *)(Source + 32); /*0x1455c*/
*(_QWORD *)(a1 + 40) = *(unsigned int *)(Source + 16) + ((unsigned __int64)*(unsigned int *)(Source + 20) << 32); /*0x14576*/
*(_DWORD *)(a1 + 48) = *(_DWORD *)(Source + 24); /*0x1457d*/
*(_WORD *)(a1 + 64) = *(_WORD *)(Source + 40); /*0x14584*/
*(_WORD *)(a1 + 52) = *(_WORD *)(Source + 36); /*0x1458c*/
**(_QWORD **)(a1 + 56) = a1; /*0x14594*/
sub_19D40(*(_QWORD *)(a1 + 56), Source + 80, a3, 0); /*0x1459b*/
*(_QWORD *)(a1 + 8) = 0; /*0x145a0*/
*(_BYTE *)(a1 + 66) = *(_BYTE *)(Source + 34); /*0x145aa*/
*(_DWORD *)(a1 + 80) = *(unsigned __int8 *)(Source + 50); /*0x145b9*/
MemZero((_BYTE *)(a1 + 84), 0, 16); /*0x145bc*/
return sub_8304(a1 + 84, Source + 51, 16); /*0x145de*/
}
// Function: RstCfgRaidDevCheckFlagBit4 @ 0x14858 (0x10 bytes)
// Index: 565/906
bool __fastcall RstCfgRaidDevCheckFlagBit4(__int64 a1)
{
return (*(_DWORD *)(*(_QWORD *)(a1 + 136) + 48LL) & 0x10) != 0; /*0x14867*/
}
// Function: RstRaidMapTranslateAddress @ 0x1523c (0x20 bytes)
// Index: 589/906
unsigned __int64 __fastcall RstRaidMapTranslateAddress(unsigned __int16 *a1, unsigned __int64 a2)
{
if ( a1[37] ) /*0x1523c*/
return a2 & a1[38]; /*0x1524a*/
else
return a2 % a1[36]; /*0x15259*/
}