Lines Matching refs:table_group

77 	struct iommu_table_group *table_group;  in iommu_pseries_alloc_group()  local
79 table_group = kzalloc_node(sizeof(*table_group), GFP_KERNEL, node); in iommu_pseries_alloc_group()
80 if (!table_group) in iommu_pseries_alloc_group()
84 table_group->ops = &spapr_tce_table_group_ops; in iommu_pseries_alloc_group()
85 table_group->pgsizes = SZ_4K; in iommu_pseries_alloc_group()
88 table_group->tables[0] = iommu_pseries_alloc_table(node); in iommu_pseries_alloc_group()
89 if (table_group->tables[0]) in iommu_pseries_alloc_group()
90 return table_group; in iommu_pseries_alloc_group()
92 kfree(table_group); in iommu_pseries_alloc_group()
96 static void iommu_pseries_free_group(struct iommu_table_group *table_group, in iommu_pseries_free_group() argument
99 if (!table_group) in iommu_pseries_free_group()
103 if (table_group->group) { in iommu_pseries_free_group()
104 iommu_group_put(table_group->group); in iommu_pseries_free_group()
105 BUG_ON(table_group->group); in iommu_pseries_free_group()
112 if (table_group->tables[0]) in iommu_pseries_free_group()
113 iommu_tce_table_put(table_group->tables[0]); in iommu_pseries_free_group()
115 if (table_group->tables[1]) in iommu_pseries_free_group()
116 iommu_tce_table_put(table_group->tables[1]); in iommu_pseries_free_group()
118 kfree(table_group); in iommu_pseries_free_group()
685 pci->table_group = iommu_pseries_alloc_group(pci->phb->node); in pci_dma_bus_setup_pSeries()
686 tbl = pci->table_group->tables[0]; in pci_dma_bus_setup_pSeries()
751 struct iommu_table_group *table_group) in pci_dma_find_parent_node() argument
759 if (table_group == rpdn->table_group) in pci_dma_find_parent_node()
870 pdn, ppci->table_group); in pci_dma_bus_setup_pSeriesLP()
872 if (!ppci->table_group) { in pci_dma_bus_setup_pSeriesLP()
873 ppci->table_group = iommu_pseries_alloc_group(ppci->phb->node); in pci_dma_bus_setup_pSeriesLP()
874 tbl = ppci->table_group->tables[0]; in pci_dma_bus_setup_pSeriesLP()
886 iommu_register_group(ppci->table_group, in pci_dma_bus_setup_pSeriesLP()
888 pr_debug(" created table: %p\n", ppci->table_group); in pci_dma_bus_setup_pSeriesLP()
910 PCI_DN(dn)->table_group = iommu_pseries_alloc_group(phb->node); in pci_dma_dev_setup_pSeries()
911 tbl = PCI_DN(dn)->table_group->tables[0]; in pci_dma_dev_setup_pSeries()
925 while (dn && PCI_DN(dn) && PCI_DN(dn)->table_group == NULL) in pci_dma_dev_setup_pSeries()
930 PCI_DN(dn)->table_group->tables[0]); in pci_dma_dev_setup_pSeries()
1477 if (iommu_table_in_use(pci->table_group->tables[0])) { in enable_ddw()
1614 iommu_tce_table_put(pci->table_group->tables[0]); in enable_ddw()
1615 pci->table_group->tables[0] = NULL; in enable_ddw()
1655 pci->table_group->tables[default_win_removed ? 0 : 1] = newtbl; in enable_ddw()
1734 struct iommu_table_group *table_group = PCI_DN(pdn)->table_group; in spapr_tce_init_table_group() local
1746 if (table_group->max_dynamic_windows_supported != 0) in spapr_tce_init_table_group()
1749 table_group->tce32_start = be64_to_cpu(prop.dma_base); in spapr_tce_init_table_group()
1750 table_group->tce32_size = 1 << be32_to_cpu(prop.window_shift); in spapr_tce_init_table_group()
1758 table_group->max_dynamic_windows_supported = -1; in spapr_tce_init_table_group()
1765 table_group->max_dynamic_windows_supported = -1; in spapr_tce_init_table_group()
1770 table_group->max_dynamic_windows_supported = 1; in spapr_tce_init_table_group()
1772 table_group->max_dynamic_windows_supported = IOMMU_TABLE_GROUP_MAX_TABLES; in spapr_tce_init_table_group()
1774 table_group->max_levels = 1; in spapr_tce_init_table_group()
1775 table_group->pgsizes |= query_page_size_to_mask(query.page_size); in spapr_tce_init_table_group()
1806 if (!pci->table_group) { in pci_dma_dev_setup_pSeriesLP()
1807 pci->table_group = iommu_pseries_alloc_group(pci->phb->node); in pci_dma_dev_setup_pSeriesLP()
1808 tbl = pci->table_group->tables[0]; in pci_dma_dev_setup_pSeriesLP()
1818 iommu_register_group(pci->table_group, in pci_dma_dev_setup_pSeriesLP()
1820 pr_debug(" created table: %p\n", pci->table_group); in pci_dma_dev_setup_pSeriesLP()
1822 pr_debug(" found DMA window, table: %p\n", pci->table_group); in pci_dma_dev_setup_pSeriesLP()
1827 set_iommu_table_base(&dev->dev, pci->table_group->tables[0]); in pci_dma_dev_setup_pSeriesLP()
1828 iommu_add_device(pci->table_group, &dev->dev); in pci_dma_dev_setup_pSeriesLP()
1904 WARN_ON(!pci->table_group->tables[0] && !pci->table_group->tables[1]); in remove_dynamic_dma_windows()
1906 if (pci->table_group->tables[1]) { in remove_dynamic_dma_windows()
1907 iommu_tce_table_put(pci->table_group->tables[1]); in remove_dynamic_dma_windows()
1908 pci->table_group->tables[1] = NULL; in remove_dynamic_dma_windows()
1909 } else if (pci->table_group->tables[0]) { in remove_dynamic_dma_windows()
1911 iommu_tce_table_put(pci->table_group->tables[0]); in remove_dynamic_dma_windows()
1912 pci->table_group->tables[0] = NULL; in remove_dynamic_dma_windows()
1929 static long pseries_setup_default_iommu_config(struct iommu_table_group *table_group, in pseries_setup_default_iommu_config() argument
1939 pdn = pci_dma_find_parent_node(pdev, table_group); in pseries_setup_default_iommu_config()
1967 pci->table_group->tables[0] = tbl; in pseries_setup_default_iommu_config()
1973 static bool is_default_window_request(struct iommu_table_group *table_group, __u32 page_shift, in is_default_window_request() argument
1976 if ((window_size <= table_group->tce32_size) && in is_default_window_request()
1983 static long spapr_tce_create_table(struct iommu_table_group *table_group, int num, in spapr_tce_create_table() argument
1987 struct pci_dev *pdev = iommu_group_get_first_pci_dev(table_group->group); in spapr_tce_create_table()
2014 pdn = pci_dma_find_parent_node(pdev, table_group); in spapr_tce_create_table()
2038 if (!is_default_window_request(table_group, page_shift, window_size)) { in spapr_tce_create_table()
2070 table_group->tables[0] = tbl; in spapr_tce_create_table()
2141 pci->table_group->tables[num] = tbl; in spapr_tce_create_table()
2183 static bool is_default_window_table(struct iommu_table_group *table_group, struct iommu_table *tbl) in is_default_window_table() argument
2185 if (((tbl->it_size << tbl->it_page_shift) <= table_group->tce32_size) && in is_default_window_table()
2192 static long spapr_tce_set_window(struct iommu_table_group *table_group, in spapr_tce_set_window() argument
2195 return tbl == table_group->tables[num] ? 0 : -EPERM; in spapr_tce_set_window()
2198 static long spapr_tce_unset_window(struct iommu_table_group *table_group, int num) in spapr_tce_unset_window() argument
2200 struct pci_dev *pdev = iommu_group_get_first_pci_dev(table_group->group); in spapr_tce_unset_window()
2202 struct iommu_table *tbl = table_group->tables[num]; in spapr_tce_unset_window()
2210 if ((num == 0) && is_default_window_table(table_group, tbl)) in spapr_tce_unset_window()
2239 iommu_tce_table_put(table_group->tables[num]); in spapr_tce_unset_window()
2240 table_group->tables[num] = NULL; in spapr_tce_unset_window()
2259 static long spapr_tce_take_ownership(struct iommu_table_group *table_group, struct device *dev) in spapr_tce_take_ownership() argument
2261 struct iommu_table *tbl = table_group->tables[0]; in spapr_tce_take_ownership()
2269 if (!tbl && (table_group->max_dynamic_windows_supported != 1)) in spapr_tce_take_ownership()
2299 if (table_group->tables[0]) { in spapr_tce_take_ownership()
2302 table_group->tables[0] = NULL; in spapr_tce_take_ownership()
2311 static void spapr_tce_release_ownership(struct iommu_table_group *table_group, struct device *dev) in spapr_tce_release_ownership() argument
2313 struct iommu_table *tbl = table_group->tables[0]; in spapr_tce_release_ownership()
2322 pseries_setup_default_iommu_config(table_group, dev); in spapr_tce_release_ownership()
2403 if (pci && pci->table_group) in iommu_reconfig_notifier()
2404 iommu_pseries_free_group(pci->table_group, in iommu_reconfig_notifier()
2480 if (!pci->table_group) in pSeries_pci_device_group()
2483 grp = pci->table_group->group; in pSeries_pci_device_group()