Lines Matching refs:sg_table
106 struct tmc_sg_table *sg_table; member
235 tmc_sg_get_data_page_offset(struct tmc_sg_table *sg_table, dma_addr_t addr) in tmc_sg_get_data_page_offset() argument
237 return tmc_pages_get_offset(&sg_table->data_pages, addr); in tmc_sg_get_data_page_offset()
240 static inline void tmc_free_table_pages(struct tmc_sg_table *sg_table) in tmc_free_table_pages() argument
242 if (sg_table->table_vaddr) in tmc_free_table_pages()
243 vunmap(sg_table->table_vaddr); in tmc_free_table_pages()
244 tmc_pages_free(&sg_table->table_pages, sg_table->dev, DMA_TO_DEVICE); in tmc_free_table_pages()
247 static void tmc_free_data_pages(struct tmc_sg_table *sg_table) in tmc_free_data_pages() argument
249 if (sg_table->data_vaddr) in tmc_free_data_pages()
250 vunmap(sg_table->data_vaddr); in tmc_free_data_pages()
251 tmc_pages_free(&sg_table->data_pages, sg_table->dev, DMA_FROM_DEVICE); in tmc_free_data_pages()
254 void tmc_free_sg_table(struct tmc_sg_table *sg_table) in tmc_free_sg_table() argument
256 tmc_free_table_pages(sg_table); in tmc_free_sg_table()
257 tmc_free_data_pages(sg_table); in tmc_free_sg_table()
266 static int tmc_alloc_table_pages(struct tmc_sg_table *sg_table) in tmc_alloc_table_pages() argument
269 struct tmc_pages *table_pages = &sg_table->table_pages; in tmc_alloc_table_pages()
271 rc = tmc_pages_alloc(table_pages, sg_table->dev, in tmc_alloc_table_pages()
272 dev_to_node(sg_table->dev), in tmc_alloc_table_pages()
276 sg_table->table_vaddr = vmap(table_pages->pages, in tmc_alloc_table_pages()
280 if (!sg_table->table_vaddr) in tmc_alloc_table_pages()
283 sg_table->table_daddr = table_pages->daddrs[0]; in tmc_alloc_table_pages()
287 static int tmc_alloc_data_pages(struct tmc_sg_table *sg_table, void **pages) in tmc_alloc_data_pages() argument
292 rc = tmc_pages_alloc(&sg_table->data_pages, in tmc_alloc_data_pages()
293 sg_table->dev, sg_table->node, in tmc_alloc_data_pages()
296 sg_table->data_vaddr = vmap(sg_table->data_pages.pages, in tmc_alloc_data_pages()
297 sg_table->data_pages.nr_pages, in tmc_alloc_data_pages()
300 if (!sg_table->data_vaddr) in tmc_alloc_data_pages()
324 struct tmc_sg_table *sg_table; in tmc_alloc_sg_table() local
326 sg_table = kzalloc(sizeof(*sg_table), GFP_KERNEL); in tmc_alloc_sg_table()
327 if (!sg_table) in tmc_alloc_sg_table()
329 sg_table->data_pages.nr_pages = nr_dpages; in tmc_alloc_sg_table()
330 sg_table->table_pages.nr_pages = nr_tpages; in tmc_alloc_sg_table()
331 sg_table->node = node; in tmc_alloc_sg_table()
332 sg_table->dev = dev; in tmc_alloc_sg_table()
334 rc = tmc_alloc_data_pages(sg_table, pages); in tmc_alloc_sg_table()
336 rc = tmc_alloc_table_pages(sg_table); in tmc_alloc_sg_table()
338 tmc_free_sg_table(sg_table); in tmc_alloc_sg_table()
339 kfree(sg_table); in tmc_alloc_sg_table()
343 return sg_table; in tmc_alloc_sg_table()
369 void tmc_sg_table_sync_table(struct tmc_sg_table *sg_table) in tmc_sg_table_sync_table() argument
372 struct device *real_dev = sg_table->dev->parent; in tmc_sg_table_sync_table()
373 struct tmc_pages *table_pages = &sg_table->table_pages; in tmc_sg_table_sync_table()
389 ssize_t tmc_sg_table_get_data(struct tmc_sg_table *sg_table, in tmc_sg_table_get_data() argument
395 struct tmc_pages *data_pages = &sg_table->data_pages; in tmc_sg_table_get_data()
397 size = tmc_sg_table_buf_size(sg_table); in tmc_sg_table_get_data()
414 tmc_sg_daddr_to_vaddr(struct tmc_sg_table *sg_table, in tmc_sg_daddr_to_vaddr() argument
422 tmc_pages = &sg_table->table_pages; in tmc_sg_daddr_to_vaddr()
423 base = (unsigned long)sg_table->table_vaddr; in tmc_sg_daddr_to_vaddr()
425 tmc_pages = &sg_table->data_pages; in tmc_sg_daddr_to_vaddr()
426 base = (unsigned long)sg_table->data_vaddr; in tmc_sg_daddr_to_vaddr()
441 struct tmc_sg_table *sg_table = etr_table->sg_table; in tmc_etr_sg_table_dump() local
443 ptr = (sgte_t *)tmc_sg_daddr_to_vaddr(sg_table, in tmc_etr_sg_table_dump()
449 dev_dbg(sg_table->dev, in tmc_etr_sg_table_dump()
454 dev_dbg(sg_table->dev, in tmc_etr_sg_table_dump()
457 ptr = (sgte_t *)tmc_sg_daddr_to_vaddr(sg_table, in tmc_etr_sg_table_dump()
461 dev_dbg(sg_table->dev, in tmc_etr_sg_table_dump()
466 dev_dbg(sg_table->dev, in tmc_etr_sg_table_dump()
473 dev_dbg(sg_table->dev, "******* End of Table *****\n"); in tmc_etr_sg_table_dump()
496 struct tmc_sg_table *sg_table = etr_table->sg_table; in tmc_etr_sg_table_populate() local
497 dma_addr_t *table_daddrs = sg_table->table_pages.daddrs; in tmc_etr_sg_table_populate()
498 dma_addr_t *data_daddrs = sg_table->data_pages.daddrs; in tmc_etr_sg_table_populate()
500 nr_entries = tmc_etr_sg_table_entries(sg_table->data_pages.nr_pages); in tmc_etr_sg_table_populate()
504 ptr = sg_table->table_vaddr; in tmc_etr_sg_table_populate()
567 struct tmc_sg_table *sg_table; in tmc_init_etr_sg_table() local
576 sg_table = tmc_alloc_sg_table(dev, node, nr_tpages, nr_dpages, pages); in tmc_init_etr_sg_table()
577 if (IS_ERR(sg_table)) { in tmc_init_etr_sg_table()
579 return ERR_CAST(sg_table); in tmc_init_etr_sg_table()
582 etr_table->sg_table = sg_table; in tmc_init_etr_sg_table()
584 etr_table->hwaddr = sg_table->table_daddr; in tmc_init_etr_sg_table()
587 tmc_sg_table_sync_table(sg_table); in tmc_init_etr_sg_table()
716 tmc_free_sg_table(etr_table->sg_table); in tmc_etr_free_sg_buf()
726 return tmc_sg_table_get_data(etr_table->sg_table, offset, len, bufpp); in tmc_etr_get_data_sg_buf()
733 struct tmc_sg_table *table = etr_table->sg_table; in tmc_etr_sync_sg_buf()