Lines Matching refs:dev
60 void drm_ctxbitmap_free(struct drm_device * dev, int ctx_handle) in drm_ctxbitmap_free() argument
63 dev->ctx_bitmap == NULL) { in drm_ctxbitmap_free()
69 DRM_LOCK(dev); in drm_ctxbitmap_free()
70 clear_bit(ctx_handle, dev->ctx_bitmap); in drm_ctxbitmap_free()
71 dev->context_sareas[ctx_handle] = NULL; in drm_ctxbitmap_free()
72 DRM_UNLOCK(dev); in drm_ctxbitmap_free()
84 static int drm_ctxbitmap_next(struct drm_device * dev) in drm_ctxbitmap_next() argument
88 if (dev->ctx_bitmap == NULL) in drm_ctxbitmap_next()
91 DRM_LOCK(dev); in drm_ctxbitmap_next()
92 bit = find_first_zero_bit(dev->ctx_bitmap, DRM_MAX_CTXBITMAP); in drm_ctxbitmap_next()
94 DRM_UNLOCK(dev); in drm_ctxbitmap_next()
98 set_bit(bit, dev->ctx_bitmap); in drm_ctxbitmap_next()
100 if ((bit+1) > dev->max_context) { in drm_ctxbitmap_next()
104 ctx_sareas = realloc(dev->context_sareas, in drm_ctxbitmap_next()
105 max_ctx * sizeof(*dev->context_sareas), in drm_ctxbitmap_next()
108 clear_bit(bit, dev->ctx_bitmap); in drm_ctxbitmap_next()
110 DRM_UNLOCK(dev); in drm_ctxbitmap_next()
113 dev->max_context = max_ctx; in drm_ctxbitmap_next()
114 dev->context_sareas = ctx_sareas; in drm_ctxbitmap_next()
115 dev->context_sareas[bit] = NULL; in drm_ctxbitmap_next()
117 DRM_UNLOCK(dev); in drm_ctxbitmap_next()
128 int drm_ctxbitmap_init(struct drm_device * dev) in drm_ctxbitmap_init() argument
133 DRM_LOCK(dev); in drm_ctxbitmap_init()
134 dev->ctx_bitmap = malloc(PAGE_SIZE, DRM_MEM_CTXBITMAP, in drm_ctxbitmap_init()
136 if (dev->ctx_bitmap == NULL) { in drm_ctxbitmap_init()
137 DRM_UNLOCK(dev); in drm_ctxbitmap_init()
140 dev->context_sareas = NULL; in drm_ctxbitmap_init()
141 dev->max_context = -1; in drm_ctxbitmap_init()
142 DRM_UNLOCK(dev); in drm_ctxbitmap_init()
145 temp = drm_ctxbitmap_next(dev); in drm_ctxbitmap_init()
160 void drm_ctxbitmap_cleanup(struct drm_device * dev) in drm_ctxbitmap_cleanup() argument
162 DRM_LOCK(dev); in drm_ctxbitmap_cleanup()
163 if (dev->context_sareas != NULL) in drm_ctxbitmap_cleanup()
164 free(dev->context_sareas, DRM_MEM_SAREA); in drm_ctxbitmap_cleanup()
165 free(dev->ctx_bitmap, DRM_MEM_CTXBITMAP); in drm_ctxbitmap_cleanup()
166 DRM_UNLOCK(dev); in drm_ctxbitmap_cleanup()
187 int drm_getsareactx(struct drm_device *dev, void *data, in drm_getsareactx() argument
193 DRM_LOCK(dev); in drm_getsareactx()
194 if (dev->max_context < 0 || in drm_getsareactx()
195 request->ctx_id >= (unsigned) dev->max_context) { in drm_getsareactx()
196 DRM_UNLOCK(dev); in drm_getsareactx()
200 map = dev->context_sareas[request->ctx_id]; in drm_getsareactx()
201 DRM_UNLOCK(dev); in drm_getsareactx()
220 int drm_setsareactx(struct drm_device *dev, void *data, in drm_setsareactx() argument
227 DRM_LOCK(dev); in drm_setsareactx()
228 list_for_each_entry(r_list, &dev->maplist, head) { in drm_setsareactx()
231 if (dev->max_context < 0) in drm_setsareactx()
233 if (request->ctx_id >= (unsigned) dev->max_context) in drm_setsareactx()
235 dev->context_sareas[request->ctx_id] = map; in drm_setsareactx()
236 DRM_UNLOCK(dev); in drm_setsareactx()
242 DRM_UNLOCK(dev); in drm_setsareactx()
262 static int drm_context_switch(struct drm_device * dev, int old, int new) in drm_context_switch() argument
264 if (test_and_set_bit(0, &dev->context_flag)) { in drm_context_switch()
271 if (new == dev->last_context) { in drm_context_switch()
272 clear_bit(0, &dev->context_flag); in drm_context_switch()
290 static int drm_context_switch_complete(struct drm_device *dev, in drm_context_switch_complete() argument
293 dev->last_context = new; /* PRE/POST: This is the _only_ writer. */ in drm_context_switch_complete()
294 dev->last_switch = jiffies; in drm_context_switch_complete()
303 clear_bit(0, &dev->context_flag); in drm_context_switch_complete()
304 wakeup(&dev->context_wait); in drm_context_switch_complete()
318 int drm_resctx(struct drm_device *dev, void *data, in drm_resctx() argument
349 int drm_addctx(struct drm_device *dev, void *data, in drm_addctx() argument
355 ctx->handle = drm_ctxbitmap_next(dev); in drm_addctx()
358 ctx->handle = drm_ctxbitmap_next(dev); in drm_addctx()
377 DRM_LOCK(dev); in drm_addctx()
378 list_add(&ctx_entry->head, &dev->ctxlist); in drm_addctx()
379 ++dev->ctx_count; in drm_addctx()
380 DRM_UNLOCK(dev); in drm_addctx()
385 int drm_modctx(struct drm_device *dev, void *data, struct drm_file *file_priv) in drm_modctx() argument
400 int drm_getctx(struct drm_device *dev, void *data, struct drm_file *file_priv) in drm_getctx() argument
421 int drm_switchctx(struct drm_device *dev, void *data, in drm_switchctx() argument
427 return drm_context_switch(dev, dev->last_context, ctx->handle); in drm_switchctx()
441 int drm_newctx(struct drm_device *dev, void *data, in drm_newctx() argument
447 drm_context_switch_complete(dev, file_priv, ctx->handle); in drm_newctx()
463 int drm_rmctx(struct drm_device *dev, void *data, in drm_rmctx() argument
470 if (dev->driver->context_dtor) in drm_rmctx()
471 dev->driver->context_dtor(dev, ctx->handle); in drm_rmctx()
472 drm_ctxbitmap_free(dev, ctx->handle); in drm_rmctx()
475 DRM_LOCK(dev); in drm_rmctx()
476 if (!list_empty(&dev->ctxlist)) { in drm_rmctx()
479 list_for_each_entry_safe(pos, n, &dev->ctxlist, head) { in drm_rmctx()
483 --dev->ctx_count; in drm_rmctx()
487 DRM_UNLOCK(dev); in drm_rmctx()