Lines Matching defs:data

80 				     struct dart_io_pgtable *data)
84 if (data->iop.fmt == APPLE_DART)
95 struct dart_io_pgtable *data)
99 if (data->iop.fmt == APPLE_DART)
123 static int dart_init_pte(struct dart_io_pgtable *data,
130 size_t sz = data->iop.cfg.pgsize_bitmap;
147 ptep[i] = pte | paddr_to_iopte(paddr + i * sz, data);
155 struct dart_io_pgtable *data)
159 new = paddr_to_iopte(__pa(table), data) | APPLE_DART_PTE_VALID;
173 static int dart_get_table(struct dart_io_pgtable *data, unsigned long iova)
175 return (iova >> (3 * data->bits_per_level + ilog2(sizeof(dart_iopte)))) &
176 ((1 << data->tbl_bits) - 1);
179 static int dart_get_l1_index(struct dart_io_pgtable *data, unsigned long iova)
182 return (iova >> (2 * data->bits_per_level + ilog2(sizeof(dart_iopte)))) &
183 ((1 << data->bits_per_level) - 1);
186 static int dart_get_l2_index(struct dart_io_pgtable *data, unsigned long iova)
189 return (iova >> (data->bits_per_level + ilog2(sizeof(dart_iopte)))) &
190 ((1 << data->bits_per_level) - 1);
193 static dart_iopte *dart_get_l2(struct dart_io_pgtable *data, unsigned long iova)
196 int tbl = dart_get_table(data, iova);
198 ptep = data->pgd[tbl];
202 ptep += dart_get_l1_index(data, iova);
210 return iopte_deref(pte, data);
213 static dart_iopte dart_prot_to_pte(struct dart_io_pgtable *data,
218 if (data->iop.fmt == APPLE_DART) {
224 if (data->iop.fmt == APPLE_DART2) {
240 struct dart_io_pgtable *data = io_pgtable_ops_to_data(ops);
241 struct io_pgtable_cfg *cfg = &data->iop.cfg;
242 size_t tblsz = DART_GRANULE(data);
257 tbl = dart_get_table(data, iova);
259 ptep = data->pgd[tbl];
260 ptep += dart_get_l1_index(data, iova);
269 pte = dart_install_table(cptep, ptep, 0, data);
277 ptep = iopte_deref(pte, data);
280 prot = dart_prot_to_pte(data, iommu_prot);
281 map_idx_start = dart_get_l2_index(data, iova);
282 max_entries = DART_PTES_PER_TABLE(data) - map_idx_start;
285 ret = dart_init_pte(data, iova, paddr, prot, num_entries, ptep);
302 struct dart_io_pgtable *data = io_pgtable_ops_to_data(ops);
303 struct io_pgtable_cfg *cfg = &data->iop.cfg;
310 ptep = dart_get_l2(data, iova);
316 unmap_idx_start = dart_get_l2_index(data, iova);
319 max_entries = DART_PTES_PER_TABLE(data) - unmap_idx_start;
331 io_pgtable_tlb_add_page(&data->iop, gather,
344 struct dart_io_pgtable *data = io_pgtable_ops_to_data(ops);
347 ptep = dart_get_l2(data, iova);
353 ptep += dart_get_l2_index(data, iova);
358 iova &= (data->iop.cfg.pgsize_bitmap - 1);
359 return iopte_to_paddr(pte, data) | iova;
369 struct dart_io_pgtable *data;
381 data = kzalloc(sizeof(*data), GFP_KERNEL);
382 if (!data)
385 data->tbl_bits = tbl_bits;
386 data->bits_per_level = bits_per_level;
388 data->iop.ops = (struct io_pgtable_ops) {
394 return data;
400 struct dart_io_pgtable *data;
415 data = dart_alloc_pgtable(cfg);
416 if (!data)
419 cfg->apple_dart_cfg.n_ttbrs = 1 << data->tbl_bits;
422 data->pgd[i] = __dart_alloc_pages(DART_GRANULE(data), GFP_KERNEL,
424 if (!data->pgd[i])
426 cfg->apple_dart_cfg.ttbr[i] = virt_to_phys(data->pgd[i]);
429 return &data->iop;
433 free_pages((unsigned long)data->pgd[i],
434 get_order(DART_GRANULE(data)));
435 kfree(data);
441 struct dart_io_pgtable *data = io_pgtable_to_data(iop);
445 for (i = 0; i < (1 << data->tbl_bits) && data->pgd[i]; ++i) {
446 ptep = data->pgd[i];
447 end = (void *)ptep + DART_GRANULE(data);
454 (unsigned long)iopte_deref(pte, data);
456 free_pages(page, get_order(DART_GRANULE(data)));
459 free_pages((unsigned long)data->pgd[i],
460 get_order(DART_GRANULE(data)));
463 kfree(data);