Lines Matching full:gt

188  *	@gt: the gtt range
194 static int psb_gtt_attach_pages(struct gtt_range *gt) in psb_gtt_attach_pages() argument
198 WARN_ON(gt->pages); in psb_gtt_attach_pages()
200 pages = drm_gem_get_pages(&gt->gem); in psb_gtt_attach_pages()
204 gt->npage = gt->gem.size / PAGE_SIZE; in psb_gtt_attach_pages()
205 gt->pages = pages; in psb_gtt_attach_pages()
212 * @gt: the gtt range
219 static void psb_gtt_detach_pages(struct gtt_range *gt) in psb_gtt_detach_pages() argument
221 drm_gem_put_pages(&gt->gem, gt->pages, true, false); in psb_gtt_detach_pages()
222 gt->pages = NULL; in psb_gtt_detach_pages()
227 * @gt: range to pin
235 int psb_gtt_pin(struct gtt_range *gt) in psb_gtt_pin() argument
238 struct drm_device *dev = gt->gem.dev; in psb_gtt_pin()
244 if (gt->in_gart == 0 && gt->stolen == 0) { in psb_gtt_pin()
245 ret = psb_gtt_attach_pages(gt); in psb_gtt_pin()
248 ret = psb_gtt_insert(dev, gt, 0); in psb_gtt_pin()
250 psb_gtt_detach_pages(gt); in psb_gtt_pin()
254 gt->pages, (gpu_base + gt->offset), in psb_gtt_pin()
255 gt->npage, 0, 0, PSB_MMU_CACHED_MEMORY); in psb_gtt_pin()
257 gt->in_gart++; in psb_gtt_pin()
265 * @gt: range to pin
274 void psb_gtt_unpin(struct gtt_range *gt) in psb_gtt_unpin() argument
276 struct drm_device *dev = gt->gem.dev; in psb_gtt_unpin()
291 WARN_ON(!gt->in_gart); in psb_gtt_unpin()
293 gt->in_gart--; in psb_gtt_unpin()
294 if (gt->in_gart == 0 && gt->stolen == 0) { in psb_gtt_unpin()
296 (gpu_base + gt->offset), gt->npage, 0, 0); in psb_gtt_unpin()
297 psb_gtt_remove(dev, gt); in psb_gtt_unpin()
298 psb_gtt_detach_pages(gt); in psb_gtt_unpin()
328 struct gtt_range *gt; in psb_gtt_alloc_range() local
343 gt = kzalloc(sizeof(struct gtt_range), GFP_KERNEL); in psb_gtt_alloc_range()
344 if (gt == NULL) in psb_gtt_alloc_range()
346 gt->resource.name = name; in psb_gtt_alloc_range()
347 gt->stolen = backed; in psb_gtt_alloc_range()
348 gt->in_gart = backed; in psb_gtt_alloc_range()
349 gt->roll = 0; in psb_gtt_alloc_range()
351 gt->gem.dev = dev; in psb_gtt_alloc_range()
352 ret = allocate_resource(dev_priv->gtt_mem, &gt->resource, in psb_gtt_alloc_range()
355 gt->offset = gt->resource.start - r->start; in psb_gtt_alloc_range()
356 return gt; in psb_gtt_alloc_range()
358 kfree(gt); in psb_gtt_alloc_range()
365 * @gt: a mapping created with psb_gtt_alloc_range
370 void psb_gtt_free_range(struct drm_device *dev, struct gtt_range *gt) in psb_gtt_free_range() argument
373 if (gt->mmapping) { in psb_gtt_free_range()
374 psb_gtt_unpin(gt); in psb_gtt_free_range()
375 gt->mmapping = 0; in psb_gtt_free_range()
377 WARN_ON(gt->in_gart && !gt->stolen); in psb_gtt_free_range()
378 release_resource(&gt->resource); in psb_gtt_free_range()
379 kfree(gt); in psb_gtt_free_range()