Lines Matching defs:driver

57 static inline void psb_mmu_clflush(struct psb_mmu_driver *driver, void *addr)
59 if (!driver->has_clflush)
67 static void psb_mmu_flush_pd_locked(struct psb_mmu_driver *driver, int force)
69 struct drm_device *dev = driver->dev;
72 if (atomic_read(&driver->needs_tlbflush) || force) {
80 if (driver->msvdx_mmu_invaldc)
81 atomic_set(driver->msvdx_mmu_invaldc, 1);
83 atomic_set(&driver->needs_tlbflush, 0);
87 static void psb_mmu_flush_pd(struct psb_mmu_driver *driver, int force)
89 down_write(&driver->sem);
90 psb_mmu_flush_pd_locked(driver, force);
91 up_write(&driver->sem);
95 void psb_mmu_flush(struct psb_mmu_driver *driver)
97 struct drm_device *dev = driver->dev;
101 down_write(&driver->sem);
103 if (atomic_read(&driver->needs_tlbflush))
115 atomic_set(&driver->needs_tlbflush, 0);
116 if (driver->msvdx_mmu_invaldc)
117 atomic_set(driver->msvdx_mmu_invaldc, 1);
118 up_write(&driver->sem);
123 struct drm_device *dev = pd->driver->dev;
128 down_write(&pd->driver->sem);
131 psb_mmu_flush_pd_locked(pd->driver, 1);
133 up_write(&pd->driver->sem);
158 struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver,
209 pd->driver = driver;
232 struct psb_mmu_driver *driver = pd->driver;
233 struct drm_device *dev = driver->dev;
238 down_write(&driver->sem);
241 psb_mmu_flush_pd_locked(driver, 1);
258 up_write(&driver->sem);
265 uint32_t clflush_add = pd->driver->clflush_add >> PAGE_SHIFT;
267 spinlock_t *lock = &pd->driver->lock;
289 if (pd->driver->has_clflush && pd->hw_context != -1) {
313 spinlock_t *lock = &pd->driver->lock;
339 psb_mmu_clflush(pd->driver, (void *)&v[index]);
340 atomic_set(&pd->driver->needs_tlbflush, 1);
352 spinlock_t *lock = &pd->driver->lock;
376 psb_mmu_clflush(pd->driver, (void *)&v[pt->index]);
377 atomic_set(&pd->driver->needs_tlbflush, 1);
380 spin_unlock(&pd->driver->lock);
384 spin_unlock(&pd->driver->lock);
399 struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver *driver)
403 down_read(&driver->sem);
404 pd = driver->default_pd;
405 up_read(&driver->sem);
410 void psb_mmu_driver_takedown(struct psb_mmu_driver *driver)
412 struct drm_device *dev = driver->dev;
415 PSB_WSGX32(driver->bif_ctrl, PSB_CR_BIF_CTRL);
416 psb_mmu_free_pagedir(driver->default_pd);
417 kfree(driver);
425 struct psb_mmu_driver *driver;
428 driver = kmalloc(sizeof(*driver), GFP_KERNEL);
430 if (!driver)
433 driver->dev = dev;
434 driver->default_pd = psb_mmu_alloc_pd(driver, trap_pagefaults,
436 if (!driver->default_pd)
439 spin_lock_init(&driver->lock);
440 init_rwsem(&driver->sem);
441 down_write(&driver->sem);
442 atomic_set(&driver->needs_tlbflush, 1);
443 driver->msvdx_mmu_invaldc = msvdx_mmu_invaldc;
445 driver->bif_ctrl = PSB_RSGX32(PSB_CR_BIF_CTRL);
446 PSB_WSGX32(driver->bif_ctrl | _PSB_CB_CTRL_CLEAR_FAULT,
448 PSB_WSGX32(driver->bif_ctrl & ~_PSB_CB_CTRL_CLEAR_FAULT,
451 driver->has_clflush = 0;
463 driver->has_clflush = 1;
464 driver->clflush_add =
466 driver->clflush_mask = driver->clflush_add - 1;
467 driver->clflush_mask = ~driver->clflush_mask;
470 up_write(&driver->sem);
471 return driver;
474 kfree(driver);
490 unsigned long clflush_add = pd->driver->clflush_add;
491 unsigned long clflush_mask = pd->driver->clflush_mask;
493 if (!pd->driver->has_clflush)
535 down_read(&pd->driver->sem);
557 up_read(&pd->driver->sem);
560 psb_mmu_flush(pd->driver);
587 down_read(&pd->driver->sem);
615 up_read(&pd->driver->sem);
618 psb_mmu_flush(pd->driver);
633 down_read(&pd->driver->sem);
659 up_read(&pd->driver->sem);
662 psb_mmu_flush(pd->driver);
695 down_read(&pd->driver->sem);
726 up_read(&pd->driver->sem);
729 psb_mmu_flush(pd->driver);
740 spinlock_t *lock = &pd->driver->lock;
742 down_read(&pd->driver->sem);
771 up_read(&pd->driver->sem);