Lines Matching full:iommu

12 #include <linux/intel-iommu.h>
77 *entry = *(irq_iommu->iommu->ir_table->base + index); in get_irte()
83 int alloc_irte(struct intel_iommu *iommu, int irq, u16 count) in alloc_irte() argument
85 struct ir_table *table = iommu->ir_table; in alloc_irte()
105 if (mask > ecap_max_handle_mask(iommu->ecap)) { in alloc_irte()
109 ecap_max_handle_mask(iommu->ecap)); in alloc_irte()
134 irq_iommu->iommu = iommu; in alloc_irte()
144 static int qi_flush_iec(struct intel_iommu *iommu, int index, int mask) in qi_flush_iec() argument
152 return qi_submit_sync(&desc, iommu); in qi_flush_iec()
171 int set_irte_irq(int irq, struct intel_iommu *iommu, u16 index, u16 subhandle) in set_irte_irq() argument
181 irq_iommu->iommu = iommu; in set_irte_irq()
194 struct intel_iommu *iommu; in modify_irte() local
204 iommu = irq_iommu->iommu; in modify_irte()
207 irte = &iommu->ir_table->base[index]; in modify_irte()
211 __iommu_flush_cache(iommu, irte, sizeof(*irte)); in modify_irte()
213 rc = qi_flush_iec(iommu, index, 0); in modify_irte()
225 return ir_hpet[i].iommu; in map_hpet_to_ir()
235 return ir_ioapic[i].iommu; in map_ioapic_to_ir()
247 return drhd->iommu; in map_dev_to_ir()
253 struct intel_iommu *iommu; in clear_entries() local
259 iommu = irq_iommu->iommu; in clear_entries()
262 start = iommu->ir_table->base + index; in clear_entries()
270 return qi_flush_iec(iommu, index, irq_iommu->irte_mask); in clear_entries()
286 irq_iommu->iommu = NULL; in free_irte()
413 static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode) in iommu_set_intr_remapping() argument
419 addr = virt_to_phys((void *)iommu->ir_table->base); in iommu_set_intr_remapping()
421 raw_spin_lock_irqsave(&iommu->register_lock, flags); in iommu_set_intr_remapping()
423 dmar_writeq(iommu->reg + DMAR_IRTA_REG, in iommu_set_intr_remapping()
427 iommu->gcmd |= DMA_GCMD_SIRTP; in iommu_set_intr_remapping()
428 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); in iommu_set_intr_remapping()
430 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, in iommu_set_intr_remapping()
432 raw_spin_unlock_irqrestore(&iommu->register_lock, flags); in iommu_set_intr_remapping()
438 qi_global_iec(iommu); in iommu_set_intr_remapping()
440 raw_spin_lock_irqsave(&iommu->register_lock, flags); in iommu_set_intr_remapping()
443 iommu->gcmd |= DMA_GCMD_IRE; in iommu_set_intr_remapping()
444 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); in iommu_set_intr_remapping()
446 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, in iommu_set_intr_remapping()
449 raw_spin_unlock_irqrestore(&iommu->register_lock, flags); in iommu_set_intr_remapping()
453 static int setup_intr_remapping(struct intel_iommu *iommu, int mode) in setup_intr_remapping() argument
458 ir_table = iommu->ir_table = kzalloc(sizeof(struct ir_table), in setup_intr_remapping()
461 if (!iommu->ir_table) in setup_intr_remapping()
464 pages = alloc_pages_node(iommu->node, GFP_ATOMIC | __GFP_ZERO, in setup_intr_remapping()
470 kfree(iommu->ir_table); in setup_intr_remapping()
476 iommu_set_intr_remapping(iommu, mode); in setup_intr_remapping()
483 static void iommu_disable_intr_remapping(struct intel_iommu *iommu) in iommu_disable_intr_remapping() argument
488 if (!ecap_ir_support(iommu->ecap)) in iommu_disable_intr_remapping()
495 qi_global_iec(iommu); in iommu_disable_intr_remapping()
497 raw_spin_lock_irqsave(&iommu->register_lock, flags); in iommu_disable_intr_remapping()
499 sts = dmar_readq(iommu->reg + DMAR_GSTS_REG); in iommu_disable_intr_remapping()
503 iommu->gcmd &= ~DMA_GCMD_IRE; in iommu_disable_intr_remapping()
504 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); in iommu_disable_intr_remapping()
506 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, in iommu_disable_intr_remapping()
510 raw_spin_unlock_irqrestore(&iommu->register_lock, flags); in iommu_disable_intr_remapping()
533 struct intel_iommu *iommu = drhd->iommu; in intr_remapping_supported() local
535 if (!ecap_ir_support(iommu->ecap)) in intr_remapping_supported()
562 struct intel_iommu *iommu = drhd->iommu; in enable_intr_remapping() local
568 if (iommu->qi) in enable_intr_remapping()
574 dmar_fault(-1, iommu); in enable_intr_remapping()
580 iommu_disable_intr_remapping(iommu); in enable_intr_remapping()
582 dmar_disable_qi(iommu); in enable_intr_remapping()
589 struct intel_iommu *iommu = drhd->iommu; in enable_intr_remapping() local
591 if (!ecap_ir_support(iommu->ecap)) in enable_intr_remapping()
594 if (eim && !ecap_eim_support(iommu->ecap)) { in enable_intr_remapping()
596 " ecap %Lx\n", drhd->reg_base_addr, iommu->ecap); in enable_intr_remapping()
606 struct intel_iommu *iommu = drhd->iommu; in enable_intr_remapping() local
607 ret = dmar_enable_qi(iommu); in enable_intr_remapping()
612 drhd->reg_base_addr, iommu->ecap, ret); in enable_intr_remapping()
621 struct intel_iommu *iommu = drhd->iommu; in enable_intr_remapping() local
623 if (!ecap_ir_support(iommu->ecap)) in enable_intr_remapping()
626 if (setup_intr_remapping(iommu, eim)) in enable_intr_remapping()
648 struct intel_iommu *iommu) in ir_parse_one_hpet_scope() argument
670 ir_hpet[ir_hpet_num].iommu = iommu; in ir_parse_one_hpet_scope()
676 struct intel_iommu *iommu) in ir_parse_one_ioapic_scope() argument
699 ir_ioapic[ir_ioapic_num].iommu = iommu; in ir_parse_one_ioapic_scope()
705 struct intel_iommu *iommu) in ir_parse_ioapic_hpet_scope() argument
725 " 0x%Lx IOMMU %d\n", scope->enumeration_id, in ir_parse_ioapic_hpet_scope()
726 drhd->address, iommu->seq_id); in ir_parse_ioapic_hpet_scope()
728 ir_parse_one_ioapic_scope(scope, iommu); in ir_parse_ioapic_hpet_scope()
739 ir_parse_one_hpet_scope(scope, iommu); in ir_parse_ioapic_hpet_scope()
757 struct intel_iommu *iommu = drhd->iommu; in parse_ioapics_under_ir() local
759 if (ecap_ir_support(iommu->ecap)) { in parse_ioapics_under_ir()
760 if (ir_parse_ioapic_hpet_scope(drhd->hdr, iommu)) in parse_ioapics_under_ir()
788 struct intel_iommu *iommu = NULL; in disable_intr_remapping() local
793 for_each_iommu(iommu, drhd) { in disable_intr_remapping()
794 if (!ecap_ir_support(iommu->ecap)) in disable_intr_remapping()
797 iommu_disable_intr_remapping(iommu); in disable_intr_remapping()
805 struct intel_iommu *iommu = NULL; in reenable_intr_remapping() local
807 for_each_iommu(iommu, drhd) in reenable_intr_remapping()
808 if (iommu->qi) in reenable_intr_remapping()
809 dmar_reenable_qi(iommu); in reenable_intr_remapping()
814 for_each_iommu(iommu, drhd) { in reenable_intr_remapping()
815 if (!ecap_ir_support(iommu->ecap)) in reenable_intr_remapping()
818 /* Set up interrupt remapping for iommu.*/ in reenable_intr_remapping()
819 iommu_set_intr_remapping(iommu, eim); in reenable_intr_remapping()