smmu_device_add_mmio()

Updated: April 19, 2023

Add an MMIO device to a SMMU object, or remove it

Synopsis:

#include <smmu.h>

int smmu_device_add_mmio(struct smmu_object *const sop,
                                _Uint64t const phys,
                                unsigned const len);

Arguments:

sop
Pointer to the SMMU object to which the device will be attached, or NULL to remove the device from any SMMU objects owned by the current client.
phys
The physical address of the device to be attached to or removed from a SMMU object.
len
The number of bytes for device registers.

Library:

libsmmu.a

Description:

The smmu_device_add_mmio() function is a convenience function. It calls smmu_device_add_generic() to add a Memory-Mapped I/O (MMIO) device to a SMMU object.

To remove an MMIO device from SMMU objects, call this function with the sop argument set to NULL.

Returns:

-1
Failure: errno is set.
EBUSY
Failure when attempting to add to a SMMU object a DMA device that is owned by another smmuman client.
ENOENT

Failure: when attempting to:

  • add a device – the smmuman service doesn't know which IOMMU/SMMU unit controls the device being added
  • remove a device – the smmuman client making the call doesn't own the SMMU object to which the device is attached
0
Success
+1
Success, but the client must call smmu_mapping_add() to reissue the memory mappings for this object (see Preferred sequence for adding memory mappings and devices for more information about why memory mappings may need to be reissued).