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