iommu/amd: Implement DOMAIN_ATTR_GEOMETRY attribute
Implement the attribute itself and add the code for the AMD IOMMU driver. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
Родитель
0cd76dd13b
Коммит
0ff64f80e0
|
@ -3069,6 +3069,10 @@ static int amd_iommu_domain_init(struct iommu_domain *dom)
|
|||
|
||||
dom->priv = domain;
|
||||
|
||||
dom->geometry.aperture_start = 0;
|
||||
dom->geometry.aperture_end = ~0ULL;
|
||||
dom->geometry.force_aperture = true;
|
||||
|
||||
return 0;
|
||||
|
||||
out_free:
|
||||
|
|
|
@ -348,10 +348,23 @@ EXPORT_SYMBOL_GPL(iommu_device_group);
|
|||
int iommu_domain_get_attr(struct iommu_domain *domain,
|
||||
enum iommu_attr attr, void *data)
|
||||
{
|
||||
if (!domain->ops->domain_get_attr)
|
||||
return -EINVAL;
|
||||
struct iommu_domain_geometry *geometry;
|
||||
int ret = 0;
|
||||
|
||||
return domain->ops->domain_get_attr(domain, attr, data);
|
||||
switch (attr) {
|
||||
case DOMAIN_ATTR_GEOMETRY:
|
||||
geometry = data;
|
||||
*geometry = domain->geometry;
|
||||
|
||||
break;
|
||||
default:
|
||||
if (!domain->ops->domain_get_attr)
|
||||
return -EINVAL;
|
||||
|
||||
ret = domain->ops->domain_get_attr(domain, attr, data);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iommu_domain_get_attr);
|
||||
|
||||
|
|
|
@ -37,11 +37,18 @@ struct iommu_domain;
|
|||
typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
|
||||
struct device *, unsigned long, int, void *);
|
||||
|
||||
struct iommu_domain_geometry {
|
||||
dma_addr_t aperture_start; /* First address that can be mapped */
|
||||
dma_addr_t aperture_end; /* Last address that can be mapped */
|
||||
bool force_aperture; /* DMA only allowed in mappable range? */
|
||||
};
|
||||
|
||||
struct iommu_domain {
|
||||
struct iommu_ops *ops;
|
||||
void *priv;
|
||||
iommu_fault_handler_t handler;
|
||||
void *handler_token;
|
||||
struct iommu_domain_geometry geometry;
|
||||
};
|
||||
|
||||
#define IOMMU_CAP_CACHE_COHERENCY 0x1
|
||||
|
@ -49,6 +56,7 @@ struct iommu_domain {
|
|||
|
||||
enum iommu_attr {
|
||||
DOMAIN_ATTR_MAX,
|
||||
DOMAIN_ATTR_GEOMETRY,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_IOMMU_API
|
||||
|
|
Загрузка…
Ссылка в новой задаче