Lines Matching defs:dev_data
185 static int update_dev_table(struct loongson_iommu_dev_data *dev_data, int flag)
193 if (dev_data == NULL) {
194 pr_err("%s dev_data is NULL", __func__);
198 if (dev_data->iommu == NULL) {
203 if (dev_data->iommu_entry == NULL) {
208 iommu = dev_data->iommu;
209 domain_id = dev_data->iommu_entry->id;
210 bdf = dev_data->bdf;
217 dev_data->index = index;
240 index = dev_data->index;
330 static void do_attach(iommu_info *info, struct loongson_iommu_dev_data *dev_data)
332 if (!dev_data->count)
335 dev_data->iommu_entry = info;
338 list_add(&dev_data->list, &info->dev_list);
342 update_dev_table(dev_data, 1);
344 priv_flush_iotlb_pde(dev_data->iommu);
347 static void do_detach(struct loongson_iommu_dev_data *dev_data)
351 if (dev_data == NULL) {
352 pr_err("%s dev_data is NULL", __func__);
356 if (dev_data->count)
359 iommu_entry = dev_data->iommu_entry;
365 list_del(&dev_data->list);
368 update_dev_table(dev_data, 0);
369 dev_data->iommu_entry = NULL;
374 struct loongson_iommu_dev_data *dev_data = NULL;
378 dev_data = list_first_entry(&iommu_entry->dev_list,
380 do_detach(dev_data);
701 struct loongson_iommu_dev_data *dev_data;
717 dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
718 if (!dev_data)
722 dev_data->bdf = devid;
730 dev_data->count = 0;
731 dev_data->iommu = iommu;
733 dev_iommu_priv_set(dev, dev_data);
744 pr_err("Loongson-IOMMU: unable to alloc memory for dev_data\n");
768 struct loongson_iommu_dev_data *dev_data;
770 dev_data = dev_iommu_priv_get(dev);
772 kfree(dev_data);
866 struct loongson_iommu_dev_data *dev_data;
874 list_for_each_entry(dev_data, &entry->dev_list, list) {
875 if (dev_data->bdf == bdf) {
877 return dev_data;
891 struct loongson_iommu_dev_data *dev_data;
903 dev_data = (struct loongson_iommu_dev_data *)dev_iommu_priv_get(dev);
904 if (dev_data == NULL) {
905 pci_info(pdev, "%s dev_data is Invalid\n", __func__);
909 iommu = dev_data->iommu;
917 dev_data = iommu_get_devdata(priv, iommu, bdf);
918 if (dev_data) {
919 dev_data->count++;
922 bdf, pdev->devfn, dev_data->count);
925 dev_data = (struct loongson_iommu_dev_data *)dev_iommu_priv_get(dev);
934 dev_data->count++;
935 do_attach(iommu_entry, dev_data);
947 struct loongson_iommu_dev_data *dev_data;
959 dev_data = (struct loongson_iommu_dev_data *)dev_iommu_priv_get(dev);
960 if (dev_data == NULL) {
961 pci_info(pdev, "%s dev_data is Invalid\n", __func__);
965 iommu = dev_data->iommu;
971 dev_data = iommu_get_devdata(priv, iommu, bdf);
972 if (dev_data == NULL) {
973 pci_info(pdev, "Loongson-IOMMU: bdf 0x%x devfn %x dev_data is NULL\n",
978 iommu = dev_data->iommu;
979 dev_data->count--;
987 do_detach(dev_data);