HalpDmaFlushBuffer

VOID __stdcall HalpDmaFlushBuffer(
        _DOUBLE ChildAdapter,
        _MDL *Mdl,
        VOID *CurrentVa,
        UINT64 WriteToDevice,
        INT64 DeferFlushing,
        INT64 a6){
  __int64 v6; 
  unsigned __int8 CurrentIrql; 
  void *MappedSystemVa; 
  unsigned __int64 v11; 
  unsigned __int8 v12; 
  _MDL *v13; 
  UINT64 BugCheckOnFailure; 
  UINT64 Priority; 

  v6 = (unsigned int)WriteToDevice;
  CurrentIrql = KeGetCurrentIrql();
  if( (Mdl->MdlFlags & 5) != 0 )
  {
    MappedSystemVa = Mdl->MappedSystemVa;
  }
  else
  {
    LODWORD(Priority) = 1073741856;
    LODWORD(BugCheckOnFailure) = 0;
    MappedSystemVa = MmMapLockedPagesSpecifyCache(Mdl, 0, MmCached, 0i64, BugCheckOnFailure, Priority);
  }
  v11 = ((unsigned __int64)((unsigned __int16)CurrentVa & 0xFFF) + v6 + 4095) >> 12;
  if( MappedSystemVa && (unsigned int)v11 <= 0x200 )
  {
    v12 = CurrentIrql;
    if( CurrentIrql < 2u )
    {
      v12 = KeGetCurrentIrql();
      __writecr8(2ui64);
    }
    v13 = (_MDL *)*((_QWORD *)qword_140C53C60 + KeGetPcr()->Prcb.Number);
    v13->Next = 0i64;
    v13->MdlFlags = 0;
    v13->Size = 8 * (v11 + 6);
    v13->StartVa = (void *)((unsigned __int64)CurrentVa & 0xFFFFFFFFFFFFF000ui64);
    v13->ByteOffset = (unsigned __int16)CurrentVa & 0xFFF;
    v13->ByteCount = v6;
    IoBuildPartialMdl(Mdl, v13, CurrentVa, (unsigned int)v6);
    if( !(_BYTE)a6 )
      KeFlushIoBuffers(v13, (_BYTE)DeferFlushing == 0, 1u);
    if( CurrentIrql < 2u )
      __writecr8(v12);
  }
  else
  {
    if( CurrentIrql > 2u )
      KeBugCheckEx(0xACu, (PVOID)0x1000, (PVOID)0xEF05, 0i64, 0i64);
    LOBYTE(Priority) = a6;
    LOBYTE(BugCheckOnFailure) = DeferFlushing;
    HalpDmaFlushBufferWithEmergencyResources(
      ChildAdapter,
      Mdl,
      CurrentVa,
      (unsigned int)v6,
      BugCheckOnFailure,
      Priority);
  }
}

Referenced by:

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