Lines Matching +full:address +full:- +full:width
1 // SPDX-License-Identifier: GPL-2.0 or MIT
6 #include <linux/iosys-map.h>
30 * GEM drivers which provide a GEM based dumb buffer with a virtual address are supported.
35 struct drm_device *dev = client->dev; in drm_client_open()
38 file = drm_file_alloc(dev->primary); in drm_client_open()
42 mutex_lock(&dev->filelist_mutex); in drm_client_open()
43 list_add(&file->lhead, &dev->filelist_internal); in drm_client_open()
44 mutex_unlock(&dev->filelist_mutex); in drm_client_open()
46 client->file = file; in drm_client_open()
53 struct drm_device *dev = client->dev; in drm_client_close()
55 mutex_lock(&dev->filelist_mutex); in drm_client_close()
56 list_del(&client->file->lhead); in drm_client_close()
57 mutex_unlock(&dev->filelist_mutex); in drm_client_close()
59 drm_file_free(client->file); in drm_client_close()
63 * drm_client_init - Initialise a DRM client
82 if (!drm_core_check_feature(dev, DRIVER_MODESET) || !dev->driver->dumb_create) in drm_client_init()
83 return -EOPNOTSUPP; in drm_client_init()
85 client->dev = dev; in drm_client_init()
86 client->name = name; in drm_client_init()
87 client->funcs = funcs; in drm_client_init()
108 * drm_client_register - Register client
118 * to set up its display from pre-existing outputs. The client must have
123 struct drm_device *dev = client->dev; in drm_client_register()
126 mutex_lock(&dev->clientlist_mutex); in drm_client_register()
127 list_add(&client->list, &dev->clientlist); in drm_client_register()
129 if (client->funcs && client->funcs->hotplug) { in drm_client_register()
140 ret = client->funcs->hotplug(client); in drm_client_register()
144 mutex_unlock(&dev->clientlist_mutex); in drm_client_register()
149 * drm_client_release - Release DRM client resources
164 struct drm_device *dev = client->dev; in drm_client_release()
166 drm_dbg_kms(dev, "%s\n", client->name); in drm_client_release()
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()
185 drm_client_buffer_create(struct drm_client_dev *client, u32 width, u32 height, in drm_client_buffer_create() argument
190 struct drm_device *dev = client->dev; in drm_client_buffer_create()
197 return ERR_PTR(-ENOMEM); in drm_client_buffer_create()
199 buffer->client = client; in drm_client_buffer_create()
201 dumb_args.width = width; in drm_client_buffer_create()
204 ret = drm_mode_create_dumb(dev, &dumb_args, client->file); in drm_client_buffer_create()
208 obj = drm_gem_object_lookup(client->file, dumb_args.handle); in drm_client_buffer_create()
210 ret = -ENOENT; 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()
227 * drm_client_buffer_vmap_local - Map DRM client buffer into address space
229 * @map_copy: Returns the mapped memory's address
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.
237 * long-term mappings.
239 * The returned address is a copy of the internal value. In contrast to
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
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
289 * @map_copy: Returns the mapped memory's address
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.
299 * The returned address is a copy of the internal value. In contrast to
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
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()
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()
373 u32 width, u32 height, u32 format, in drm_client_buffer_addfb() argument
376 struct drm_client_dev *client = buffer->client; in drm_client_buffer_addfb()
380 fb_req.width = width; in drm_client_buffer_addfb()
384 fb_req.pitches[0] = buffer->pitch; in drm_client_buffer_addfb()
386 ret = drm_mode_addfb2(client->dev, &fb_req, client->file); 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()
392 return -ENOENT; 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()
403 * drm_client_framebuffer_create - Create a client framebuffer
405 * @width: Framebuffer width
417 drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format) in drm_client_framebuffer_create() argument
423 buffer = drm_client_buffer_create(client, width, height, format, 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()
436 drm_mode_destroy_dumb(client->dev, handle, client->file); in drm_client_framebuffer_create()
448 * drm_client_framebuffer_delete - Delete a client framebuffer
462 * drm_client_framebuffer_flush - Manually flush client framebuffer
466 * This calls &drm_framebuffer_funcs->dirty (if present) to flush buffer changes
474 if (!buffer || !buffer->fb || !buffer->fb->funcs->dirty) in drm_client_framebuffer_flush()
479 .x1 = rect->x1, in drm_client_framebuffer_flush()
480 .y1 = rect->y1, in drm_client_framebuffer_flush()
481 .x2 = rect->x2, in drm_client_framebuffer_flush()
482 .y2 = rect->y2, 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()