Lines Matching defs:driver

56 static inline void psb_mmu_clflush(struct psb_mmu_driver *driver, void *addr)
58 if (!driver->has_clflush)
66 static void psb_mmu_flush_pd_locked(struct psb_mmu_driver *driver, int force)
68 struct drm_device *dev = driver->dev;
71 if (atomic_read(&driver->needs_tlbflush) || force) {
79 if (driver->msvdx_mmu_invaldc)
80 atomic_set(driver->msvdx_mmu_invaldc, 1);
82 atomic_set(&driver->needs_tlbflush, 0);
86 static void psb_mmu_flush_pd(struct psb_mmu_driver *driver, int force)
88 down_write(&driver->sem);
89 psb_mmu_flush_pd_locked(driver, force);
90 up_write(&driver->sem);
94 void psb_mmu_flush(struct psb_mmu_driver *driver)
96 struct drm_device *dev = driver->dev;
100 down_write(&driver->sem);
102 if (atomic_read(&driver->needs_tlbflush))
114 atomic_set(&driver->needs_tlbflush, 0);
115 if (driver->msvdx_mmu_invaldc)
116 atomic_set(driver->msvdx_mmu_invaldc, 1);
117 up_write(&driver->sem);
122 struct drm_device *dev = pd->driver->dev;
127 down_write(&pd->driver->sem);
130 psb_mmu_flush_pd_locked(pd->driver, 1);
132 up_write(&pd->driver->sem);
157 struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver,
208 pd->driver = driver;
231 struct psb_mmu_driver *driver = pd->driver;
232 struct drm_device *dev = driver->dev;
237 down_write(&driver->sem);
240 psb_mmu_flush_pd_locked(driver, 1);
257 up_write(&driver->sem);
264 uint32_t clflush_add = pd->driver->clflush_add >> PAGE_SHIFT;
266 spinlock_t *lock = &pd->driver->lock;
288 if (pd->driver->has_clflush && pd->hw_context != -1) {
312 spinlock_t *lock = &pd->driver->lock;
338 psb_mmu_clflush(pd->driver, (void *)&v[index]);
339 atomic_set(&pd->driver->needs_tlbflush, 1);
351 spinlock_t *lock = &pd->driver->lock;
375 psb_mmu_clflush(pd->driver, (void *)&v[pt->index]);
376 atomic_set(&pd->driver->needs_tlbflush, 1);
379 spin_unlock(&pd->driver->lock);
383 spin_unlock(&pd->driver->lock);
398 struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver *driver)
402 down_read(&driver->sem);
403 pd = driver->default_pd;
404 up_read(&driver->sem);
409 void psb_mmu_driver_takedown(struct psb_mmu_driver *driver)
411 struct drm_device *dev = driver->dev;
414 PSB_WSGX32(driver->bif_ctrl, PSB_CR_BIF_CTRL);
415 psb_mmu_free_pagedir(driver->default_pd);
416 kfree(driver);
424 struct psb_mmu_driver *driver;
427 driver = kmalloc(sizeof(*driver), GFP_KERNEL);
429 if (!driver)
432 driver->dev = dev;
433 driver->default_pd = psb_mmu_alloc_pd(driver, trap_pagefaults,
435 if (!driver->default_pd)
438 spin_lock_init(&driver->lock);
439 init_rwsem(&driver->sem);
440 down_write(&driver->sem);
441 atomic_set(&driver->needs_tlbflush, 1);
442 driver->msvdx_mmu_invaldc = msvdx_mmu_invaldc;
444 driver->bif_ctrl = PSB_RSGX32(PSB_CR_BIF_CTRL);
445 PSB_WSGX32(driver->bif_ctrl | _PSB_CB_CTRL_CLEAR_FAULT,
447 PSB_WSGX32(driver->bif_ctrl & ~_PSB_CB_CTRL_CLEAR_FAULT,
450 driver->has_clflush = 0;
462 driver->has_clflush = 1;
463 driver->clflush_add =
465 driver->clflush_mask = driver->clflush_add - 1;
466 driver->clflush_mask = ~driver->clflush_mask;
469 up_write(&driver->sem);
470 return driver;
473 kfree(driver);
489 unsigned long clflush_add = pd->driver->clflush_add;
490 unsigned long clflush_mask = pd->driver->clflush_mask;
492 if (!pd->driver->has_clflush)
534 down_read(&pd->driver->sem);
556 up_read(&pd->driver->sem);
559 psb_mmu_flush(pd->driver);
586 down_read(&pd->driver->sem);
614 up_read(&pd->driver->sem);
617 psb_mmu_flush(pd->driver);
632 down_read(&pd->driver->sem);
658 up_read(&pd->driver->sem);
661 psb_mmu_flush(pd->driver);
694 down_read(&pd->driver->sem);
725 up_read(&pd->driver->sem);
728 psb_mmu_flush(pd->driver);
739 spinlock_t *lock = &pd->driver->lock;
741 down_read(&pd->driver->sem);
770 up_read(&pd->driver->sem);