InbvPortInitialize
UINT8 __stdcall InbvPortInitialize(
UINT64 BaudRate,
UINT64 PortNumber,
UINT8 *PortAddress,
UINT64 *BlFileId,
BOOL IsMMIOAddress,
UINT8 RegisterBitWidth){
char v7;
UINT64 *v8;
__int64 v9;
int v10;
__int64 v11;
__int64 *v12;
UINT8 v13;
bool v14;
char v15;
UINT8 *v16;
int v17;
__int64(__fastcall **v18)(_QWORD, __int64 *, __int64, UINT64 *, char);
char v20;
char v21;
v7 = 1;
v8 = BlFileId;
v9 = 1i64;
v10 = BaudRate;
if( (_DWORD)PortNumber )
v9 = (unsigned int)PortNumber;
if( (unsigned int)v9 > 4 )
return 0;
v11 = (unsigned int)(v9 - 1);
v12 = &Ports[5 * v11];
if( *v12 )
return 0;
v13 = RegisterBitWidth;
if( RegisterBitWidth )
{
v7 = v21;
v15 = v20;
v14 = IsMMIOAddress;
}
else
{
v14 = 0;
v15 = 8;
if( PortAddress )
v13 = 1;
else
PortAddress = (UINT8 *)(unsigned int)v9;
}
if( !PortAddress )
return 0;
if( v13 >= 0x13u )
return 0;
UartHardwareDriver = (__int64)UartHardwareDrivers[v13];
if( !UartHardwareDriver )
return 0;
if( v14 )
{
MmMapIoSpaceEx((_LARGE_INTEGER)PortAddress, 0x1000ui64, 0x204ui64);
PortAddress = v16;
if( !v16 )
return 0;
}
*v12 = (__int64)PortAddress;
v17 = 19200;
if( v10 )
v17 = v10;
LOBYTE(BlFileId) = v7;
dword_140CF9EA8[10 * v11] = v17;
LOBYTE(v9) = v14;
v18 = (__int64(__fastcall **)(_QWORD, __int64 *, __int64, UINT64 *, char))UartHardwareDriver;
*(_DWORD *)v8 = v11;
return(*v18)(0i64, &Ports[5 * v11], v9, BlFileId, v15);
}Referenced by:
HdlspEnableTerminal