Lines Matching refs:pdir

52 int pvrdma_page_dir_init(struct pvrdma_dev *dev, struct pvrdma_page_dir *pdir,  in pvrdma_page_dir_init()  argument
60 memset(pdir, 0, sizeof(*pdir)); in pvrdma_page_dir_init()
62 pdir->dir = dma_alloc_coherent(&dev->pdev->dev, PAGE_SIZE, in pvrdma_page_dir_init()
63 &pdir->dir_dma, GFP_KERNEL); in pvrdma_page_dir_init()
64 if (!pdir->dir) in pvrdma_page_dir_init()
67 pdir->ntables = PVRDMA_PAGE_DIR_TABLE(npages - 1) + 1; in pvrdma_page_dir_init()
68 pdir->tables = kcalloc(pdir->ntables, sizeof(*pdir->tables), in pvrdma_page_dir_init()
70 if (!pdir->tables) in pvrdma_page_dir_init()
73 for (i = 0; i < pdir->ntables; i++) { in pvrdma_page_dir_init()
74 pdir->tables[i] = dma_alloc_coherent(&dev->pdev->dev, PAGE_SIZE, in pvrdma_page_dir_init()
75 (dma_addr_t *)&pdir->dir[i], in pvrdma_page_dir_init()
77 if (!pdir->tables[i]) in pvrdma_page_dir_init()
81 pdir->npages = npages; in pvrdma_page_dir_init()
84 pdir->pages = kcalloc(npages, sizeof(*pdir->pages), in pvrdma_page_dir_init()
86 if (!pdir->pages) in pvrdma_page_dir_init()
89 for (i = 0; i < pdir->npages; i++) { in pvrdma_page_dir_init()
92 pdir->pages[i] = dma_alloc_coherent(&dev->pdev->dev, in pvrdma_page_dir_init()
96 if (!pdir->pages[i]) in pvrdma_page_dir_init()
99 pvrdma_page_dir_insert_dma(pdir, i, page_dma); in pvrdma_page_dir_init()
106 pvrdma_page_dir_cleanup(dev, pdir); in pvrdma_page_dir_init()
111 static u64 *pvrdma_page_dir_table(struct pvrdma_page_dir *pdir, u64 idx) in pvrdma_page_dir_table() argument
113 return pdir->tables[PVRDMA_PAGE_DIR_TABLE(idx)]; in pvrdma_page_dir_table()
116 dma_addr_t pvrdma_page_dir_get_dma(struct pvrdma_page_dir *pdir, u64 idx) in pvrdma_page_dir_get_dma() argument
118 return pvrdma_page_dir_table(pdir, idx)[PVRDMA_PAGE_DIR_PAGE(idx)]; in pvrdma_page_dir_get_dma()
122 struct pvrdma_page_dir *pdir) in pvrdma_page_dir_cleanup_pages() argument
124 if (pdir->pages) { in pvrdma_page_dir_cleanup_pages()
127 for (i = 0; i < pdir->npages && pdir->pages[i]; i++) { in pvrdma_page_dir_cleanup_pages()
128 dma_addr_t page_dma = pvrdma_page_dir_get_dma(pdir, i); in pvrdma_page_dir_cleanup_pages()
131 pdir->pages[i], page_dma); in pvrdma_page_dir_cleanup_pages()
134 kfree(pdir->pages); in pvrdma_page_dir_cleanup_pages()
139 struct pvrdma_page_dir *pdir) in pvrdma_page_dir_cleanup_tables() argument
141 if (pdir->tables) { in pvrdma_page_dir_cleanup_tables()
144 pvrdma_page_dir_cleanup_pages(dev, pdir); in pvrdma_page_dir_cleanup_tables()
146 for (i = 0; i < pdir->ntables; i++) { in pvrdma_page_dir_cleanup_tables()
147 u64 *table = pdir->tables[i]; in pvrdma_page_dir_cleanup_tables()
151 table, pdir->dir[i]); in pvrdma_page_dir_cleanup_tables()
154 kfree(pdir->tables); in pvrdma_page_dir_cleanup_tables()
159 struct pvrdma_page_dir *pdir) in pvrdma_page_dir_cleanup() argument
161 if (pdir->dir) { in pvrdma_page_dir_cleanup()
162 pvrdma_page_dir_cleanup_tables(dev, pdir); in pvrdma_page_dir_cleanup()
164 pdir->dir, pdir->dir_dma); in pvrdma_page_dir_cleanup()
168 int pvrdma_page_dir_insert_dma(struct pvrdma_page_dir *pdir, u64 idx, in pvrdma_page_dir_insert_dma() argument
173 if (idx >= pdir->npages) in pvrdma_page_dir_insert_dma()
176 table = pvrdma_page_dir_table(pdir, idx); in pvrdma_page_dir_insert_dma()
182 int pvrdma_page_dir_insert_umem(struct pvrdma_page_dir *pdir, in pvrdma_page_dir_insert_umem() argument
190 if (offset >= pdir->npages) in pvrdma_page_dir_insert_umem()
199 ret = pvrdma_page_dir_insert_dma(pdir, i, addr); in pvrdma_page_dir_insert_umem()
211 int pvrdma_page_dir_insert_page_list(struct pvrdma_page_dir *pdir, in pvrdma_page_dir_insert_page_list() argument
218 if (num_pages > pdir->npages) in pvrdma_page_dir_insert_page_list()
222 ret = pvrdma_page_dir_insert_dma(pdir, i, page_list[i]); in pvrdma_page_dir_insert_page_list()