Lines Matching defs:iommu_entry
203 if (dev_data->iommu_entry == NULL) {
204 pr_err("%s iommu_entry is NULL", __func__);
209 domain_id = dev_data->iommu_entry->id;
335 dev_data->iommu_entry = info;
349 iommu_info *iommu_entry = NULL;
359 iommu_entry = dev_data->iommu_entry;
360 if (iommu_entry == NULL) {
361 pr_err("%s iommu_entry is NULL", __func__);
366 iommu_entry->dev_cnt -= 1;
369 dev_data->iommu_entry = NULL;
372 static void cleanup_iommu_entry(iommu_info *iommu_entry)
376 spin_lock(&iommu_entry->devlock);
377 while (!list_empty(&iommu_entry->dev_list)) {
378 dev_data = list_first_entry(&iommu_entry->dev_list,
383 spin_unlock(&iommu_entry->devlock);
499 static void free_pagetable_one_level(iommu_info *iommu_entry, spt_entry *shd_entry, int level)
504 loongson_iommu *iommu = iommu_entry->iommu;
519 free_pagetable_one_level(iommu_entry, shd_entry_tmp, level - 1);
525 static void free_pagetable(iommu_info *iommu_entry)
530 iommu = iommu_entry->iommu;
531 shd_entry = iommu_entry->shadow_pgd;
532 free_pagetable_one_level(iommu_entry, shd_entry, IOMMU_LEVEL_MAX);
533 iommu_entry->shadow_pgd = NULL;
592 void domain_deattach_iommu(dom_info *priv, iommu_info *iommu_entry)
601 if (iommu_entry == NULL) {
602 pr_err("%s iommu_entry is NULL", __func__);
606 if (iommu_entry->dev_cnt != 0)
609 iommu = iommu_entry->iommu;
615 domain_id_free(iommu_entry->iommu, iommu_entry->id);
618 free_pagetable(iommu_entry);
622 list_del(&iommu_entry->list);
625 kfree(iommu_entry);
634 struct iommu_info *iommu_entry, *iommu_entry_temp;
639 list_for_each_entry_safe(iommu_entry, iommu_entry_temp, &priv->iommu_devlist, list) {
640 iommu = iommu_entry->iommu;
642 if (iommu_entry->dev_cnt > 0)
643 cleanup_iommu_entry(iommu_entry);
646 domain_deattach_iommu(priv, iommu_entry);
777 struct iommu_info *iommu_entry;
784 iommu_entry = list_first_entry_or_null(&priv->iommu_devlist,
787 return iommu_entry;
792 struct iommu_info *iommu_entry;
795 list_for_each_entry(iommu_entry, &priv->iommu_devlist, list) {
796 if (iommu_entry->iommu == iommu) {
798 return iommu_entry;
810 struct iommu_info *iommu_entry = NULL;
813 iommu_entry = get_iommu_entry(priv, iommu);
814 if (iommu_entry)
815 return iommu_entry;
817 iommu_entry = kzalloc(sizeof(struct iommu_info), GFP_KERNEL);
818 if (iommu_entry == NULL) {
819 pr_info("%s alloc memory for iommu_entry failed\n", __func__);
823 INIT_LIST_HEAD(&iommu_entry->dev_list);
824 iommu_entry->iommu = iommu;
825 iommu_entry->id = domain_id_alloc(iommu);
826 if (iommu_entry->id == -1) {
828 kfree(iommu_entry);
835 domain_id_free(iommu, iommu_entry->id);
836 kfree(iommu_entry);
840 iommu_entry->shadow_pgd = shd_entry;
847 iommu_write_regl(iommu, LA_IOMMU_DIR_CTRL(iommu_entry->id), dir_ctrl);
848 iommu_write_regl(iommu, LA_IOMMU_PGD_HI(iommu_entry->id), pgd_hi);
849 iommu_write_regl(iommu, LA_IOMMU_PGD_LO(iommu_entry->id), pgd_lo);
852 list_add(&iommu_entry->list, &priv->iommu_devlist);
856 pr_info("%s iommu_entry->iommu %lx id %x\n", __func__,
857 (unsigned long)iommu_entry->iommu, iommu_entry->id);
859 return iommu_entry;
894 iommu_info *iommu_entry = NULL;
928 iommu_entry = domain_attach_iommu(priv, iommu);
929 if (iommu_entry == NULL) {
935 do_attach(iommu_entry, dev_data);
950 iommu_info *iommu_entry = NULL;
980 iommu_entry = get_iommu_entry(priv, iommu);
981 if (iommu_entry == NULL) {
982 pci_info(pdev, "%s get iommu_entry failed\n", __func__);
986 spin_lock(&iommu_entry->devlock);
988 spin_unlock(&iommu_entry->devlock);
1096 static int dev_map_page(iommu_info *iommu_entry, unsigned long start,
1106 iommu = iommu_entry->iommu;
1109 entry = iommu_entry->shadow_pgd;
1161 iommu_info *iommu_entry = NULL;
1178 list_for_each_entry(iommu_entry, &priv->iommu_devlist, list) {
1179 ret |= dev_map_page(iommu_entry, start, pa, size);
1186 static size_t iommu_unmap_page(iommu_info *iommu_entry, unsigned long start, size_t size)
1194 iommu = iommu_entry->iommu;
1196 entry = iommu_entry->shadow_pgd;
1259 iommu_info *iommu_entry = NULL;
1271 iommu_entry = get_first_iommu_entry(priv);
1272 if (iommu_entry == NULL) {
1273 pr_err("%s iova:0x%llx iommu_entry is invalid\n",
1279 iommu = iommu_entry->iommu;
1282 entry = iommu_entry->shadow_pgd;
1320 iommu_info *iommu_entry;
1324 list_for_each_entry(iommu_entry, &priv->iommu_devlist, list) {
1325 iommu = iommu_entry->iommu;