HalpBlkPoPerformPpmOperationForIoPort

VOID __fastcall HalpBlkPoPerformPpmOperationForIoPort(INT64 a1){
  INT64 v1; 
  int v2; 
  int v3; 
  UINT32 Port; 
  int v5; 
  unsigned __int16 v6; 
  UINT32 v7; 
  __int64 v8; 
  v1 = a1;
  v2 = *(_DWORD *)(a1 + 12) - 1;
  if( v2 )
  {
    if( v2 != 1 )
    {
LABEL_3:
      __debugbreak();
      return;
    }
    v3 = *(_DWORD *)(v1 + 28);
    if( *(_DWORD *)(v1 + 24) )
    {
      Port = HalpBlkPoReadPort(*(_WORD *)(v1 + 20), *(_WORD *)(v1 + 22));
      v3 = Port & *(_DWORD *)(v1 + 24) | ~*(_DWORD *)(v1 + 24) & v5;
    }
    v6 = *(_WORD *)(v1 + 20);
    switch( *(_WORD *)(v1 + 22) )
    {
      case 1:
        __outbyte(v6, v3);
        break;
      case 2:
        __outword(v6, v3);
        break;
      case 4:
        __outdword(v6, v3);
        break;
      default:
        goto LABEL_3;
    }
  }
  else
  {
    v7 = HalpBlkPoReadPort(*(_WORD *)(v1 + 20), *(_WORD *)(v1 + 22));
    *(_DWORD *)(v8 + 24) = v7;
  }
}

Referenced by:

HalpBlkPoPerformPpmOperation