Lines Matching refs:buffer
32 * GEM drivers which provide a GEM based dumb buffer with a virtual address are supported.
165 * is fbdev which cannot free the buffer if userspace has open file descriptors.
265 static void drm_client_buffer_delete(struct drm_client_buffer *buffer)
267 if (buffer->gem) {
268 drm_gem_vunmap_unlocked(buffer->gem, &buffer->map);
269 drm_gem_object_put(buffer->gem);
272 kfree(buffer);
282 struct drm_client_buffer *buffer;
286 buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
287 if (!buffer)
290 buffer->client = client;
305 buffer->pitch = dumb_args.pitch;
306 buffer->gem = obj;
309 return buffer;
312 drm_client_buffer_delete(buffer);
318 * drm_client_buffer_vmap - Map DRM client buffer into address space
319 * @buffer: DRM client buffer
322 * This function maps a client buffer into kernel address space. If the
323 * buffer is already mapped, it returns the existing mapping's address.
325 * Client buffer mappings are not ref'counted. Each call to
327 * drm_client_buffer_vunmap(); or the client buffer should be mapped
338 drm_client_buffer_vmap(struct drm_client_buffer *buffer,
341 struct iosys_map *map = &buffer->map;
352 ret = drm_gem_vmap_unlocked(buffer->gem, map);
363 * drm_client_buffer_vunmap - Unmap DRM client buffer
364 * @buffer: DRM client buffer
366 * This function removes a client buffer's memory mapping. Calling this
367 * function is only required by clients that manage their buffer mappings
370 void drm_client_buffer_vunmap(struct drm_client_buffer *buffer)
372 struct iosys_map *map = &buffer->map;
374 drm_gem_vunmap_unlocked(buffer->gem, map);
378 static void drm_client_buffer_rmfb(struct drm_client_buffer *buffer)
382 if (!buffer->fb)
385 ret = drm_mode_rmfb(buffer->client->dev, buffer->fb->base.id, buffer->client->file);
387 drm_err(buffer->client->dev,
388 "Error removing FB:%u (%d)\n", buffer->fb->base.id, ret);
390 buffer->fb = NULL;
393 static int drm_client_buffer_addfb(struct drm_client_buffer *buffer,
397 struct drm_client_dev *client = buffer->client;
408 fb_req.pitch = buffer->pitch;
414 buffer->fb = drm_framebuffer_lookup(client->dev, buffer->client->file, fb_req.fb_id);
415 if (WARN_ON(!buffer->fb))
419 drm_framebuffer_put(buffer->fb);
421 strscpy(buffer->fb->comm, client->name, TASK_COMM_LEN);
434 * &drm_framebuffer backed by a dumb buffer.
435 * Call drm_client_framebuffer_delete() to free the buffer.
438 * Pointer to a client buffer or an error pointer on failure.
443 struct drm_client_buffer *buffer;
447 buffer = drm_client_buffer_create(client, width, height, format,
449 if (IS_ERR(buffer))
450 return buffer;
452 ret = drm_client_buffer_addfb(buffer, width, height, format, handle);
457 * object as DMA-buf. The framebuffer and our buffer structure are still
463 drm_client_buffer_delete(buffer);
467 return buffer;
473 * @buffer: DRM client buffer (can be NULL)
475 void drm_client_framebuffer_delete(struct drm_client_buffer *buffer)
477 if (!buffer)
480 drm_client_buffer_rmfb(buffer);
481 drm_client_buffer_delete(buffer);
487 * @buffer: DRM client buffer (can be NULL)
490 * This calls &drm_framebuffer_funcs->dirty (if present) to flush buffer changes
496 int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect)
498 if (!buffer || !buffer->fb || !buffer->fb->funcs->dirty)
509 return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file,
513 return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file,