/*
* EarlyVideoPei - aggregate decompiled source
* Source: Auto-generated from IDA Pro decompilation
*
* This file preserves the compact aggregate view. Prefer the split
* one-function-per-file sources for focused review.
*
* Decompiled from port 13408
*/
#include "EarlyVideoPei.h"
/* InternalCopyMem at 0xffe6be6c */
char *InternalCopyMem(char *dst, char *src, unsigned int count)
{
unsigned int count_1; // edx
char *dst_1; // edi
char *src_1; // esi
count_1 = count; /* 0xffe6be76 */
if ( src < dst && &src[count - 1] >= dst ) /* 0xffe6be84 */
{
src_1 = &src[count - 1]; /* 0xffe6be98 */
dst_1 = &dst[count - 1]; /* 0xffe6be9a */
}
else
{
count_1 = count & 3; /* 0xffe6be88 */
qmemcpy(dst, src, 4 * (count >> 2)); /* 0xffe6be91 */
src_1 = &src[4 * (count >> 2)]; /* 0xffe6be91 */
dst_1 = &dst[4 * (count >> 2)]; /* 0xffe6be91 */
}
qmemcpy(dst_1, src_1, count_1); /* 0xffe6bea1 */
return dst; /* 0xffe6bea8 */
}
/* InternalSetMem at 0xffe6beac */
void *InternalSetMem(void *buf, unsigned int count, char value)
{
memset(buf, value, count); /* 0xffe6beb9 */
return buf; /* 0xffe6bebf */
}
/* InitMultiple at 0xffe6beec */
int InitMultiple(int a1, int a2, int a3, int a4)
{
do /* 0xffe6bf05 */
{
*(_DWORD *)(a1 + 8 * a2 - 8) = a3; /* 0xffe6befd */
*(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /* 0xffe6bf01 */
}
while ( a2 ); /* 0xffe6bf05 */
return a1; /* 0xffe6bf09 */
}
/* InternalSetMem32 at 0xffe6bf0c */
void *InternalSetMem32(void *buf, unsigned int count, int value)
{
memset32(buf, value, count); /* 0xffe6bf19 */
return buf; /* 0xffe6bf1f */
}
/* ModuleEntryPoint at 0xffe6bf2c */
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
JUMPOUT(0xFFE6BFD6); /* 0xffe6bfd6 */
}
/* VgaSeqRegReadModifyWrite at 0xffe6c162 */
unsigned __int8 VgaSeqRegReadModifyWrite(unsigned __int16 a1, unsigned __int8 a2, char a3, char a4)
{
unsigned __int8 v4; // al
unsigned __int8 result; // al
unsigned __int16 v6; // [esp+0h] [ebp-8h]
__outbyte(a1, a2); /* 0xffe6c177 */
v6 = a1 + 1; /* 0xffe6c179 */
v4 = __inbyte(a1 + 1); /* 0xffe6c180 */
result = a4 | a3 & v4; /* 0xffe6c184 */
__outbyte(v6, result); /* 0xffe6c191 */
return result; /* 0xffe6c192 */
}
/* VgaCrtcRegAnd at 0xffe6c196 */
int __usercall VgaCrtcRegAnd@<eax>(unsigned __int8 a1@<dl>, unsigned __int8 a2)
{
unsigned __int8 v2; // al
__outbyte(0x3D4u, a1); /* 0xffe6c1ac */
v2 = __inbyte(0x3D5u); /* 0xffe6c1b8 */
return a2 & v2; /* 0xffe6c1c2 */
}
/* VgaCrtcRegReadModifyWrite at 0xffe6c1c6 */
unsigned int VgaCrtcRegReadModifyWrite(unsigned __int8 a1, char a2, char a3, char a4, unsigned __int8 a5)
{
unsigned __int32 v6; // eax
unsigned int result; // eax
_DWORD v8[4]; // [esp+4h] [ebp-20h]
_DWORD v9[4]; // [esp+14h] [ebp-10h]
v9[0] = 0; /* 0xffe6c1cc */
v8[0] = -256; /* 0xffe6c1e4 */
v8[1] = -65281; /* 0xffe6c206 */
v8[2] = -16711681; /* 0xffe6c20f */
v8[3] = 0xFFFFFF; /* 0xffe6c21c */
v9[1] = 8; /* 0xffe6c223 */
v9[2] = 16; /* 0xffe6c22a */
v9[3] = 24; /* 0xffe6c231 */
__outdword(0xCF8u, a4 & 0xFC | ((a3 & 7 | (8 * (a2 & 0x1F | (32 * (a1 | 0xFFFF8000))))) << 8)); /* 0xffe6c23f */
v6 = __indword(0xCFCu); /* 0xffe6c244 */
result = v6 & v8[a4 & 3] | (a5 << v9[a4 & 3]); /* 0xffe6c25e */
__outdword(0xCFCu, result); /* 0xffe6c261 */
return result; /* 0xffe6c262 */
}
/* PciCfgWrite at 0xffe6c267 */
unsigned int PciCfgWrite(unsigned __int8 a1, char a2, char a3, unsigned __int8 a4, unsigned __int16 a5)
{
int v5; // esi
unsigned __int32 v6; // eax
unsigned int result; // eax
_DWORD v8[2]; // [esp+4h] [ebp-10h]
_DWORD v9[2]; // [esp+Ch] [ebp-8h]
v9[0] = 0; /* 0xffe6c26d */
v8[0] = -65536; /* 0xffe6c285 */
v8[1] = 0xFFFF; /* 0xffe6c29d */
v5 = a4 >> 1; /* 0xffe6c2ae */
v9[1] = 16; /* 0xffe6c2b2 */
__outdword(0xCF8u, a4 & 0xFC | ((a3 & 7 | (8 * (a2 & 0x1F | (32 * (a1 | 0xFFFF8000))))) << 8)); /* 0xffe6c2c6 */
v6 = __indword(0xCFCu); /* 0xffe6c2cb */
result = v6 & v8[v5 & 1] | (a5 << v9[v5 & 1]); /* 0xffe6c2e5 */
__outdword(0xCFCu, result); /* 0xffe6c2e8 */
return result; /* 0xffe6c2e9 */
}
/* PciCfgRead16 at 0xffe6c2ee */
unsigned int PciCfgRead16(unsigned __int8 a1, char i, char a3, char n16, unsigned int a5)
{
unsigned int result; // eax
__outdword(0xCF8u, n16 & 0xFC | ((a3 & 7 | (8 * (i & 0x1F | (32 * (a1 | 0xFFFF8000))))) << 8)); /* 0xffe6c329 */
result = a5; /* 0xffe6c32e */
__outdword(0xCFCu, a5); /* 0xffe6c331 */
return result; /* 0xffe6c332 */
}