VfFlushAdapterBuffers
UINT8 __fastcall VfFlushAdapterBuffers(
_DMA_ADAPTER *DmaAdapter,
_MDL *Mdl,
VOID *MapRegisterBase,
VOID *CurrentVa,
UINT64 Length,
UINT8 WriteToDevice){
__int64(__fastcall *v10)(_DMA_ADAPTER *, _MDL *, VOID *, VOID *, _DWORD, UINT8);
INT64 v11;
__int64(__fastcall *v12)(_DMA_ADAPTER *, _MDL *, VOID *, VOID *, _DWORD, UINT8);
UINT8 v13;
LIST_ENTRY *AdapterInformationInternal;
UINT8 result;
_QWORD *MapRegisterFile;
UINT8 v17;
UINT64 v20;
VOID *CurrentVaa;
VOID *MapRegisterBasea;
_MDL *Mdla;
__int64(__fastcall *v24)(_DMA_ADAPTER *, _MDL *, VOID *, VOID *, _DWORD, UINT8);
LODWORD(v10) = ViGetRealDmaOperation(DmaAdapter, 0x28ui64);
LOBYTE(v11) = 1;
v24 = v10;
v12 = v10;
AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v11);
if( !AdapterInformationInternal )
goto LABEL_4;
VF_ASSERT_MAX_IRQL(v13);
if( MapRegisterBase == (VOID *)-559026163i64 )
{
MapRegisterBase = 0i64;
goto LABEL_4;
}
MapRegisterFile = (_QWORD *)ViGetMapRegisterFile((INT64)MapRegisterBase);
if( !MapRegisterFile )
{
LABEL_4:
result = v12(DmaAdapter, Mdl, MapRegisterBase, CurrentVa, Length, WriteToDevice);
if( AdapterInformationInternal )
{
if( result )
_InterlockedExchange((volatile __int32 *)&AdapterInformationInternal[11].Blink + 1, 0);
}
return result;
}
Mdla = Mdl;
CurrentVaa = CurrentVa;
MapRegisterBasea = MapRegisterBase;
if( (unsigned int)ViSwap(&MapRegisterBasea, &Mdla, &CurrentVaa) )
{
v17 = v24(DmaAdapter, Mdla, MapRegisterBasea, CurrentVaa, Length, WriteToDevice);
ViFlushDoubleBuffer(MapRegisterFile, (ULONG_PTR)Mdl, (ULONG_PTR)CurrentVa, Length, WriteToDevice);
if( v17 )
_InterlockedExchange((volatile __int32 *)&AdapterInformationInternal[11].Blink + 1, 0);
return v17;
}
else
{
if( (_DWORD)Length )
{
ViHalPreprocessOptions(
&dword_140C12D24,
(PSTR)"Cannot flush map register that isn't mapped! (Map register base %p, flushing address %p, MDL %p)",
0x20ui64,
(UINT64)MapRegisterBase,
(UINT64)CurrentVa,
(UINT64)Mdl,
v20);
VfReportIssueWithOptions(
0xE6ui64,
0x20ui64,
(UINT64)MapRegisterBase,
(UINT64)CurrentVa,
(UINT64)Mdl,
&dword_140C12D24);
}
return 0;
}
}Referenced by:
No references.