iommu: Add DOMAIN_ATTR_WINDOWS domain attribute
This attribute can be used to set and get the number of subwindows on IOMMUs that are window-based. Signed-off-by: Joerg Roedel <joro@8bytes.org>
This commit is contained in:
@@ -891,6 +891,7 @@ int iommu_domain_get_attr(struct iommu_domain *domain,
|
||||
struct iommu_domain_geometry *geometry;
|
||||
bool *paging;
|
||||
int ret = 0;
|
||||
u32 *count;
|
||||
|
||||
switch (attr) {
|
||||
case DOMAIN_ATTR_GEOMETRY:
|
||||
@@ -901,6 +902,15 @@ int iommu_domain_get_attr(struct iommu_domain *domain,
|
||||
case DOMAIN_ATTR_PAGING:
|
||||
paging = data;
|
||||
*paging = (domain->ops->pgsize_bitmap != 0UL);
|
||||
break;
|
||||
case DOMAIN_ATTR_WINDOWS:
|
||||
count = data;
|
||||
|
||||
if (domain->ops->domain_get_windows != NULL)
|
||||
*count = domain->ops->domain_get_windows(domain);
|
||||
else
|
||||
ret = -ENODEV;
|
||||
|
||||
break;
|
||||
default:
|
||||
if (!domain->ops->domain_get_attr)
|
||||
@@ -916,9 +926,26 @@ EXPORT_SYMBOL_GPL(iommu_domain_get_attr);
|
||||
int iommu_domain_set_attr(struct iommu_domain *domain,
|
||||
enum iommu_attr attr, void *data)
|
||||
{
|
||||
if (!domain->ops->domain_set_attr)
|
||||
return -EINVAL;
|
||||
int ret = 0;
|
||||
u32 *count;
|
||||
|
||||
return domain->ops->domain_set_attr(domain, attr, data);
|
||||
switch (attr) {
|
||||
case DOMAIN_ATTR_WINDOWS:
|
||||
count = data;
|
||||
|
||||
if (domain->ops->domain_set_windows != NULL)
|
||||
ret = domain->ops->domain_set_windows(domain, *count);
|
||||
else
|
||||
ret = -ENODEV;
|
||||
|
||||
break;
|
||||
default:
|
||||
if (domain->ops->domain_set_attr == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
ret = domain->ops->domain_set_attr(domain, attr, data);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iommu_domain_set_attr);
|
||||
|
Reference in New Issue
Block a user