HalJoinDmaDomain
NTSTATUS __stdcall HalJoinDmaDomain(_ADAPTER_OBJECT *ChildAdapter, VOID *DomainHandle){
char v4;
char v5;
_EXT_IOMMU_TRANSLATION_TYPE TranslationType;
VOID *v7;
UINT8 v8;
int v9;
UINT64 v11;
INT64 *v12;
CHAR v13;
INT64 v14;
_LARGE_INTEGER BoundaryAddressMultiple;
v4 = 0;
v5 = 0;
if( HalpDmaGetAdapterVersion(ChildAdapter) == 3 && !ChildAdapter->DomainPointer )
{
if( (char *)DomainHandle - 1 <= (char *)0xFFFFFFFFFFFFFFFDi64 )
{
if( !HalpDmaIsDomainCompatible(ChildAdapter, DomainHandle) )
{
v9 = -1073741811;
goto LABEL_21;
}
v9 = HalpDmaReferenceDomainObject((INT64)DomainHandle, v11, v12, v13);
if( v9 < 0 )
goto LABEL_21;
}
else
{
TranslationType = ChildAdapter->TranslationType;
BoundaryAddressMultiple.QuadPart = (-(__int64)(ChildAdapter->AdapterObject.DmaCanCross64K != 0) & 0xFFFF0000i64)
+ 0x10000;
LODWORD(v7) = HalpDmaAllocateDomain(
&ChildAdapter->AdapterObject.MaximumPhysicalAddress,
&BoundaryAddressMultiple,
TranslationType);
DomainHandle = v7;
if( !v7 )
{
v9 = -1073741670;
goto LABEL_21;
}
v9 = 0;
}
ChildAdapter->DomainPointer = (_HALP_DMA_DOMAIN_OBJECT *)DomainHandle;
if( *((_DWORD *)DomainHandle + 16) )
{
v9 = HalpIommuJoinDmaDomain((INT64 *)ChildAdapter->IommuDevice, *((_QWORD *)DomainHandle + 5));
v5 = 1;
if( v9 < 0 )
goto LABEL_21;
v4 = 1;
v9 = HalpDomainLaAllocate(
(INT64)DomainHandle,
(PDUMPWRITER_FILL_HEADERS *)ChildAdapter->MaxTransferLength,
v14,
0i64,
0i64,
(INT64)&ChildAdapter->LowMemoryLogicalAddressBase);
if( v9 < 0 )
goto LABEL_20;
v9 = HalpIommuDomainMapLogicalRange(
*((_QWORD *)DomainHandle + 5),
0i64,
0i64,
ChildAdapter->MaxTransferLength,
ChildAdapter->LowMemoryLogicalAddressBase);
}
if( v9 >= 0 )
return v9;
if( v4 )
HalpDomainLaDelete((INT64)DomainHandle, ChildAdapter->LowMemoryLogicalAddressBase);
v5 = 1;
if( !v4 )
{
LABEL_21:
ChildAdapter->DomainPointer = 0i64;
if( v5 )
HalpDmaDereferenceDomainObject(DomainHandle);
return v9;
}
LABEL_20:
HalpIommuLeaveDmaDomain((_KDEVICE_QUEUE *)ChildAdapter->IommuDevice, *((_QWORD *)DomainHandle + 5), v8);
v5 = 1;
goto LABEL_21;
}
return -1073741811;
}Referenced by:
HalpDmaAllocateChildAdapterV3