return 0;
}
-struct acpi_drhd_unit * ioapic_to_drhd(unsigned int apic_id)
+struct acpi_drhd_unit *ioapic_to_drhd(unsigned int apic_id)
{
struct acpi_drhd_unit *drhd;
list_for_each_entry( drhd, &acpi_drhd_units, list )
return NULL;
}
-struct acpi_drhd_unit * iommu_to_drhd(struct iommu *iommu)
-{
- struct acpi_drhd_unit *drhd;
-
- if ( iommu == NULL )
- return NULL;
-
- list_for_each_entry( drhd, &acpi_drhd_units, list )
- if ( drhd->iommu == iommu )
- return drhd;
-
- return NULL;
-}
-
-struct iommu * ioapic_to_iommu(unsigned int apic_id)
+struct iommu *ioapic_to_iommu(unsigned int apic_id)
{
struct acpi_drhd_unit *drhd;
return all_ports;
}
-struct acpi_rhsa_unit * drhd_to_rhsa(struct acpi_drhd_unit *drhd)
+struct acpi_rhsa_unit *drhd_to_rhsa(const struct acpi_drhd_unit *drhd)
{
struct acpi_rhsa_unit *rhsa;
int iommu_flush_iec_index(struct iommu *iommu, u8 im, u16 iidx);
void clear_fault_bits(struct iommu *iommu);
-struct iommu * ioapic_to_iommu(unsigned int apic_id);
-struct iommu * hpet_to_iommu(unsigned int hpet_id);
-struct acpi_drhd_unit * ioapic_to_drhd(unsigned int apic_id);
-struct acpi_drhd_unit * hpet_to_drhd(unsigned int hpet_id);
-struct acpi_drhd_unit * iommu_to_drhd(struct iommu *iommu);
-struct acpi_rhsa_unit * drhd_to_rhsa(struct acpi_drhd_unit *drhd);
+struct iommu *ioapic_to_iommu(unsigned int apic_id);
+struct iommu *hpet_to_iommu(unsigned int hpet_id);
+struct acpi_drhd_unit *ioapic_to_drhd(unsigned int apic_id);
+struct acpi_drhd_unit *hpet_to_drhd(unsigned int hpet_id);
+struct acpi_rhsa_unit *drhd_to_rhsa(const struct acpi_drhd_unit *drhd);
struct acpi_drhd_unit * find_ats_dev_drhd(struct iommu *iommu);
int enable_intremap(struct iommu *iommu, int eim)
{
- struct acpi_drhd_unit *drhd;
struct ir_ctrl *ir_ctrl;
u32 sts, gcmd;
unsigned long flags;
if ( ir_ctrl->iremap_maddr == 0 )
{
- drhd = iommu_to_drhd(iommu);
- ir_ctrl->iremap_maddr = alloc_pgtable_maddr(drhd, IREMAP_ARCH_PAGE_NR);
+ ir_ctrl->iremap_maddr = alloc_pgtable_maddr(iommu->intel->drhd,
+ IREMAP_ARCH_PAGE_NR);
if ( ir_ctrl->iremap_maddr == 0 )
{
dprintk(XENLOG_WARNING VTDPREFIX,
/* context entry handling */
static u64 bus_to_context_maddr(struct iommu *iommu, u8 bus)
{
- struct acpi_drhd_unit *drhd;
struct root_entry *root, *root_entries;
u64 maddr;
root = &root_entries[bus];
if ( !root_present(*root) )
{
- drhd = iommu_to_drhd(iommu);
- maddr = alloc_pgtable_maddr(drhd, 1);
+ maddr = alloc_pgtable_maddr(iommu->intel->drhd, 1);
if ( maddr == 0 )
{
unmap_vtd_domain_page(root_entries);
int enable_qinval(struct iommu *iommu)
{
- struct acpi_drhd_unit *drhd;
struct qi_ctrl *qi_ctrl;
struct iommu_flush *flush;
u32 sts;
if ( qi_ctrl->qinval_maddr == 0 )
{
- drhd = iommu_to_drhd(iommu);
- qi_ctrl->qinval_maddr = alloc_pgtable_maddr(drhd, QINVAL_ARCH_PAGE_NR);
+ qi_ctrl->qinval_maddr = alloc_pgtable_maddr(iommu->intel->drhd,
+ QINVAL_ARCH_PAGE_NR);
if ( qi_ctrl->qinval_maddr == 0 )
{
dprintk(XENLOG_WARNING VTDPREFIX,