Lines Matching refs:pdir

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