HalpDmaFlushBuffer

void __fastcall HalpDmaFlushBuffer(__int64 a1, __int64 a2, __int64 a3, unsigned int a4, char a5, char a6){
  __int64 v6; 
  unsigned __int8 CurrentIrql; 
  PVOID v10; 
  unsigned __int64 v11; 
  unsigned __int8 v12; 
  _MDL *v13; 
  v6 = a4;
  CurrentIrql = KeGetCurrentIrql();
  if( (*(_BYTE *)(a2 + 10) & 5) != 0 )
    v10 = *(PVOID *)(a2 + 24);
  else
    v10 = MmMapLockedPagesSpecifyCache((PMDL)a2, 0, MmCached, 0i64, 0, 0x40000020u);
  v11 = ((unsigned __int64)(a3 & 0xFFF) + v6 + 4095) >> 12;
  if( v10 && (unsigned int)v11 <= 0x200 )
  {
    v12 = CurrentIrql;
    if( CurrentIrql < 2u )
    {
      v12 = KeGetCurrentIrql();
      __writecr8(2ui64);
    }
    v13 = *(_MDL **)(qword_140C53C60 + 8i64 * *((unsigned int *)KeGetPcr() + 105));
    v13->Next = 0i64;
    v13->MdlFlags = 0;
    v13->Size = 8 * (v11 + 6);
    v13->StartVa = (void *)(a3 & 0xFFFFFFFFFFFFF000ui64);
    v13->ByteOffset = a3 & 0xFFF;
    v13->ByteCount = v6;
    IoBuildPartialMdl((_MDL *)a2, v13, (PVOID)a3, (unsigned int)v6);
    if( !a6 )
      KeFlushIoBuffers(v13, a5 == 0, 1u);
    if( CurrentIrql < 2u )
      __writecr8(v12);
  }
  else
  {
    if( CurrentIrql > 2u )
      KeBugCheckEx(0xACu, 0x1000ui64, 0xEF05ui64, 0i64, 0i64);
    HalpDmaFlushBufferWithEmergencyResources(a1, a2, a3, v6, a5, a6);
  }
}

Referenced by:

HalBuildScatterGatherListV2
HalMapTransferEx
HalpDmaFlushContiguousTransferV2
HalpDmaFlushContiguousTransferV3
HalpDmaFlushScatterTransferV2
HalpDmaFlushScatterTransferV3
HalpDmaMapContiguousTransferV2
HalpDmaMapContiguousTransferV3
HalpDmaMapScatterTransferV2
HalpDmaMapScatterTransferV3
IoFlushAdapterBuffersV2
IoMapTransferInternal