Lines Matching refs:dev

62 void drm_ctxbitmap_free(struct drm_device * dev, int ctx_handle)  in drm_ctxbitmap_free()  argument
65 dev->ctx_bitmap == NULL) { in drm_ctxbitmap_free()
71 DRM_LOCK(dev); in drm_ctxbitmap_free()
72 clear_bit(ctx_handle, dev->ctx_bitmap); in drm_ctxbitmap_free()
73 dev->context_sareas[ctx_handle] = NULL; in drm_ctxbitmap_free()
74 DRM_UNLOCK(dev); in drm_ctxbitmap_free()
86 static int drm_ctxbitmap_next(struct drm_device * dev) in drm_ctxbitmap_next() argument
90 if (dev->ctx_bitmap == NULL) in drm_ctxbitmap_next()
93 DRM_LOCK(dev); in drm_ctxbitmap_next()
94 bit = find_first_zero_bit(dev->ctx_bitmap, DRM_MAX_CTXBITMAP); in drm_ctxbitmap_next()
96 DRM_UNLOCK(dev); in drm_ctxbitmap_next()
100 set_bit(bit, dev->ctx_bitmap); in drm_ctxbitmap_next()
102 if ((bit+1) > dev->max_context) { in drm_ctxbitmap_next()
106 ctx_sareas = realloc(dev->context_sareas, in drm_ctxbitmap_next()
107 max_ctx * sizeof(*dev->context_sareas), in drm_ctxbitmap_next()
110 clear_bit(bit, dev->ctx_bitmap); in drm_ctxbitmap_next()
112 DRM_UNLOCK(dev); in drm_ctxbitmap_next()
115 dev->max_context = max_ctx; in drm_ctxbitmap_next()
116 dev->context_sareas = ctx_sareas; in drm_ctxbitmap_next()
117 dev->context_sareas[bit] = NULL; in drm_ctxbitmap_next()
119 DRM_UNLOCK(dev); in drm_ctxbitmap_next()
130 int drm_ctxbitmap_init(struct drm_device * dev) in drm_ctxbitmap_init() argument
135 DRM_LOCK(dev); in drm_ctxbitmap_init()
136 dev->ctx_bitmap = malloc(PAGE_SIZE, DRM_MEM_CTXBITMAP, in drm_ctxbitmap_init()
138 if (dev->ctx_bitmap == NULL) { in drm_ctxbitmap_init()
139 DRM_UNLOCK(dev); in drm_ctxbitmap_init()
142 dev->context_sareas = NULL; in drm_ctxbitmap_init()
143 dev->max_context = -1; in drm_ctxbitmap_init()
144 DRM_UNLOCK(dev); in drm_ctxbitmap_init()
147 temp = drm_ctxbitmap_next(dev); in drm_ctxbitmap_init()
162 void drm_ctxbitmap_cleanup(struct drm_device * dev) in drm_ctxbitmap_cleanup() argument
164 DRM_LOCK(dev); in drm_ctxbitmap_cleanup()
165 if (dev->context_sareas != NULL) in drm_ctxbitmap_cleanup()
166 free(dev->context_sareas, DRM_MEM_SAREA); in drm_ctxbitmap_cleanup()
167 free(dev->ctx_bitmap, DRM_MEM_CTXBITMAP); in drm_ctxbitmap_cleanup()
168 DRM_UNLOCK(dev); in drm_ctxbitmap_cleanup()
189 int drm_getsareactx(struct drm_device *dev, void *data, in drm_getsareactx() argument
195 DRM_LOCK(dev); in drm_getsareactx()
196 if (dev->max_context < 0 || in drm_getsareactx()
197 request->ctx_id >= (unsigned) dev->max_context) { in drm_getsareactx()
198 DRM_UNLOCK(dev); in drm_getsareactx()
202 map = dev->context_sareas[request->ctx_id]; in drm_getsareactx()
203 DRM_UNLOCK(dev); in drm_getsareactx()
222 int drm_setsareactx(struct drm_device *dev, void *data, in drm_setsareactx() argument
229 DRM_LOCK(dev); in drm_setsareactx()
230 list_for_each_entry(r_list, &dev->maplist, head) { in drm_setsareactx()
233 if (dev->max_context < 0) in drm_setsareactx()
235 if (request->ctx_id >= (unsigned) dev->max_context) in drm_setsareactx()
237 dev->context_sareas[request->ctx_id] = map; in drm_setsareactx()
238 DRM_UNLOCK(dev); in drm_setsareactx()
244 DRM_UNLOCK(dev); in drm_setsareactx()
264 static int drm_context_switch(struct drm_device * dev, int old, int new) in drm_context_switch() argument
266 if (test_and_set_bit(0, &dev->context_flag)) { in drm_context_switch()
273 if (new == dev->last_context) { in drm_context_switch()
274 clear_bit(0, &dev->context_flag); in drm_context_switch()
292 static int drm_context_switch_complete(struct drm_device *dev, in drm_context_switch_complete() argument
295 dev->last_context = new; /* PRE/POST: This is the _only_ writer. */ in drm_context_switch_complete()
296 dev->last_switch = jiffies; in drm_context_switch_complete()
305 clear_bit(0, &dev->context_flag); in drm_context_switch_complete()
306 wakeup(&dev->context_wait); in drm_context_switch_complete()
320 int drm_resctx(struct drm_device *dev, void *data, in drm_resctx() argument
351 int drm_addctx(struct drm_device *dev, void *data, in drm_addctx() argument
357 ctx->handle = drm_ctxbitmap_next(dev); in drm_addctx()
360 ctx->handle = drm_ctxbitmap_next(dev); in drm_addctx()
379 DRM_LOCK(dev); in drm_addctx()
380 list_add(&ctx_entry->head, &dev->ctxlist); in drm_addctx()
381 ++dev->ctx_count; in drm_addctx()
382 DRM_UNLOCK(dev); in drm_addctx()
387 int drm_modctx(struct drm_device *dev, void *data, struct drm_file *file_priv) in drm_modctx() argument
402 int drm_getctx(struct drm_device *dev, void *data, struct drm_file *file_priv) in drm_getctx() argument
423 int drm_switchctx(struct drm_device *dev, void *data, in drm_switchctx() argument
429 return drm_context_switch(dev, dev->last_context, ctx->handle); in drm_switchctx()
443 int drm_newctx(struct drm_device *dev, void *data, in drm_newctx() argument
449 drm_context_switch_complete(dev, file_priv, ctx->handle); in drm_newctx()
465 int drm_rmctx(struct drm_device *dev, void *data, in drm_rmctx() argument
472 if (dev->driver->context_dtor) in drm_rmctx()
473 dev->driver->context_dtor(dev, ctx->handle); in drm_rmctx()
474 drm_ctxbitmap_free(dev, ctx->handle); in drm_rmctx()
477 DRM_LOCK(dev); in drm_rmctx()
478 if (!list_empty(&dev->ctxlist)) { in drm_rmctx()
481 list_for_each_entry_safe(pos, n, &dev->ctxlist, head) { in drm_rmctx()
485 --dev->ctx_count; in drm_rmctx()
489 DRM_UNLOCK(dev); in drm_rmctx()