Skip to content

Commit 5690e48

Browse files
author
Thomas Zimmermann
committed
drm/gem-ttm-helper: Provide helper for struct drm_driver.dumb_map_offset
Provides an implementation of struct drm_driver.dumb_map_offset that can be used by TTM-based GEM drivers. Signed-off-by: Thomas Zimmermann <[email protected]> Acked-by: Maxime Ripard <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent d4e6823 commit 5690e48

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

drivers/gpu/drm/drm_gem_ttm_helper.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,38 @@ int drm_gem_ttm_mmap(struct drm_gem_object *gem,
114114
}
115115
EXPORT_SYMBOL(drm_gem_ttm_mmap);
116116

117+
/**
118+
* drm_gem_ttm_dumb_map_offset() - Implements struct &drm_driver.dumb_map_offset
119+
* @file: DRM file pointer.
120+
* @dev: DRM device.
121+
* @handle: GEM handle
122+
* @offset: Returns the mapping's memory offset on success
123+
*
124+
* Provides an implementation of struct &drm_driver.dumb_map_offset for
125+
* TTM-based GEM drivers. TTM allocates the offset internally and
126+
* drm_gem_ttm_dumb_map_offset() returns it for dumb-buffer implementations.
127+
*
128+
* See struct &drm_driver.dumb_map_offset.
129+
*
130+
* Returns:
131+
* 0 on success, or a negative errno code otherwise.
132+
*/
133+
int drm_gem_ttm_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
134+
uint32_t handle, uint64_t *offset)
135+
{
136+
struct drm_gem_object *gem;
137+
138+
gem = drm_gem_object_lookup(file, handle);
139+
if (!gem)
140+
return -ENOENT;
141+
142+
*offset = drm_vma_node_offset_addr(&gem->vma_node);
143+
144+
drm_gem_object_put(gem);
145+
146+
return 0;
147+
}
148+
EXPORT_SYMBOL(drm_gem_ttm_dumb_map_offset);
149+
117150
MODULE_DESCRIPTION("DRM gem ttm helpers");
118151
MODULE_LICENSE("GPL");

include/drm/drm_gem_ttm_helper.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
#include <linux/kernel.h>
77

8-
#include <drm/drm_gem.h>
98
#include <drm/drm_device.h>
9+
#include <drm/drm_gem.h>
1010
#include <drm/ttm/ttm_bo_api.h>
1111
#include <drm/ttm/ttm_bo_driver.h>
1212

@@ -24,4 +24,7 @@ void drm_gem_ttm_vunmap(struct drm_gem_object *gem,
2424
int drm_gem_ttm_mmap(struct drm_gem_object *gem,
2525
struct vm_area_struct *vma);
2626

27+
int drm_gem_ttm_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
28+
uint32_t handle, uint64_t *offset);
29+
2730
#endif

0 commit comments

Comments
 (0)