Lines Matching full:buffer

30  * GEM drivers which provide a GEM based dumb buffer with a virtual address are supported.
156 * is fbdev which cannot free the buffer if userspace has open file descriptors.
174 static void drm_client_buffer_delete(struct drm_client_buffer *buffer) in drm_client_buffer_delete() argument
176 if (buffer->gem) { in drm_client_buffer_delete()
177 drm_gem_vunmap_unlocked(buffer->gem, &buffer->map); in drm_client_buffer_delete()
178 drm_gem_object_put(buffer->gem); in drm_client_buffer_delete()
181 kfree(buffer); in drm_client_buffer_delete()
191 struct drm_client_buffer *buffer; in drm_client_buffer_create() local
195 buffer = kzalloc(sizeof(*buffer), GFP_KERNEL); in drm_client_buffer_create()
196 if (!buffer) in drm_client_buffer_create()
199 buffer->client = client; in drm_client_buffer_create()
214 buffer->pitch = dumb_args.pitch; in drm_client_buffer_create()
215 buffer->gem = obj; in drm_client_buffer_create()
218 return buffer; in drm_client_buffer_create()
221 drm_client_buffer_delete(buffer); in drm_client_buffer_create()
227 * drm_client_buffer_vmap_local - Map DRM client buffer into address space
228 * @buffer: DRM client buffer
231 * This function maps a client buffer into kernel address space. If the
232 * buffer is already mapped, it returns the existing mapping's address.
234 * Client buffer mappings are not ref'counted. Each call to
246 int drm_client_buffer_vmap_local(struct drm_client_buffer *buffer, in drm_client_buffer_vmap_local() argument
249 struct drm_gem_object *gem = buffer->gem; in drm_client_buffer_vmap_local()
250 struct iosys_map *map = &buffer->map; in drm_client_buffer_vmap_local()
269 * drm_client_buffer_vunmap_local - Unmap DRM client buffer
270 * @buffer: DRM client buffer
272 * This function removes a client buffer's memory mapping established
274 * required by clients that manage their buffer mappings by themselves.
276 void drm_client_buffer_vunmap_local(struct drm_client_buffer *buffer) in drm_client_buffer_vunmap_local() argument
278 struct drm_gem_object *gem = buffer->gem; in drm_client_buffer_vunmap_local()
279 struct iosys_map *map = &buffer->map; in drm_client_buffer_vunmap_local()
287 * drm_client_buffer_vmap - Map DRM client buffer into address space
288 * @buffer: DRM client buffer
291 * This function maps a client buffer into kernel address space. If the
292 * buffer is already mapped, it returns the existing mapping's address.
294 * Client buffer mappings are not ref'counted. Each call to
296 * drm_client_buffer_vunmap(); or the client buffer should be mapped
307 drm_client_buffer_vmap(struct drm_client_buffer *buffer, in drm_client_buffer_vmap() argument
310 struct drm_gem_object *gem = buffer->gem; in drm_client_buffer_vmap()
311 struct iosys_map *map = &buffer->map; in drm_client_buffer_vmap()
330 drm_gem_unpin_locked(buffer->gem); in drm_client_buffer_vmap()
338 * drm_client_buffer_vunmap - Unmap DRM client buffer
339 * @buffer: DRM client buffer
341 * This function removes a client buffer's memory mapping. Calling this
342 * function is only required by clients that manage their buffer mappings
345 void drm_client_buffer_vunmap(struct drm_client_buffer *buffer) in drm_client_buffer_vunmap() argument
347 struct drm_gem_object *gem = buffer->gem; in drm_client_buffer_vunmap()
348 struct iosys_map *map = &buffer->map; in drm_client_buffer_vunmap()
357 static void drm_client_buffer_rmfb(struct drm_client_buffer *buffer) in drm_client_buffer_rmfb() argument
361 if (!buffer->fb) in drm_client_buffer_rmfb()
364 ret = drm_mode_rmfb(buffer->client->dev, buffer->fb->base.id, buffer->client->file); in drm_client_buffer_rmfb()
366 drm_err(buffer->client->dev, in drm_client_buffer_rmfb()
367 "Error removing FB:%u (%d)\n", buffer->fb->base.id, ret); in drm_client_buffer_rmfb()
369 buffer->fb = NULL; in drm_client_buffer_rmfb()
372 static int drm_client_buffer_addfb(struct drm_client_buffer *buffer, in drm_client_buffer_addfb() argument
376 struct drm_client_dev *client = buffer->client; in drm_client_buffer_addfb()
384 fb_req.pitches[0] = buffer->pitch; in drm_client_buffer_addfb()
390 buffer->fb = drm_framebuffer_lookup(client->dev, buffer->client->file, fb_req.fb_id); in drm_client_buffer_addfb()
391 if (WARN_ON(!buffer->fb)) in drm_client_buffer_addfb()
395 drm_framebuffer_put(buffer->fb); in drm_client_buffer_addfb()
397 strscpy(buffer->fb->comm, client->name, TASK_COMM_LEN); in drm_client_buffer_addfb()
407 * @format: Buffer format
410 * &drm_framebuffer backed by a dumb buffer.
411 * Call drm_client_framebuffer_delete() to free the buffer.
414 * Pointer to a client buffer or an error pointer on failure.
419 struct drm_client_buffer *buffer; in drm_client_framebuffer_create() local
423 buffer = drm_client_buffer_create(client, width, height, format, in drm_client_framebuffer_create()
425 if (IS_ERR(buffer)) in drm_client_framebuffer_create()
426 return buffer; in drm_client_framebuffer_create()
428 ret = drm_client_buffer_addfb(buffer, width, height, format, handle); in drm_client_framebuffer_create()
433 * object as DMA-buf. The framebuffer and our buffer structure are still in drm_client_framebuffer_create()
439 drm_client_buffer_delete(buffer); in drm_client_framebuffer_create()
443 return buffer; in drm_client_framebuffer_create()
449 * @buffer: DRM client buffer (can be NULL)
451 void drm_client_framebuffer_delete(struct drm_client_buffer *buffer) in drm_client_framebuffer_delete() argument
453 if (!buffer) in drm_client_framebuffer_delete()
456 drm_client_buffer_rmfb(buffer); in drm_client_framebuffer_delete()
457 drm_client_buffer_delete(buffer); in drm_client_framebuffer_delete()
463 * @buffer: DRM client buffer (can be NULL)
466 * This calls &drm_framebuffer_funcs->dirty (if present) to flush buffer changes
472 int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect) in drm_client_framebuffer_flush() argument
474 if (!buffer || !buffer->fb || !buffer->fb->funcs->dirty) in drm_client_framebuffer_flush()
485 return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file, in drm_client_framebuffer_flush()
489 return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file, in drm_client_framebuffer_flush()