diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-02-02 16:55:46 +1100 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2009-03-13 14:23:56 +1000 | 
| commit | f77d390c9779c496aa5b99ec832996fb76bb1d13 (patch) | |
| tree | 3e3cccc4ac9416457a944d13b31ef942432717f2 /drivers/gpu/drm/drm_bufs.c | |
| parent | d883f7f1b75c8dcafa891f7b9e69c5a2f0ff6d66 (diff) | |
| download | olio-linux-3.10-f77d390c9779c496aa5b99ec832996fb76bb1d13.tar.xz olio-linux-3.10-f77d390c9779c496aa5b99ec832996fb76bb1d13.zip  | |
drm: Split drm_map and drm_local_map
Once upon a time, the DRM made the distinction between the drm_map
data structure exchanged with user space and the drm_local_map used
in the kernel.
For some reasons, while the BSD port still has that "feature", the
linux part abused drm_map for kernel internal usage as the local
map only existed as a typedef of the struct drm_map.
This patch fixes it by declaring struct drm_local_map separately
(though its content is currently identical to the userspace variant),
and changing the kernel code to only use that, except when it's a
user<->kernel interface (ie. ioctl).
This allows subsequent changes to the in-kernel format
I've also replaced the use of drm_local_map_t with struct drm_local_map
in a couple of places. Mostly by accident but they are the same (the
former is a typedef of the later) and I have some remote plans and
half finished patch to completely kill the drm_local_map_t typedef
so I left those bits in.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers/gpu/drm/drm_bufs.c')
| -rw-r--r-- | drivers/gpu/drm/drm_bufs.c | 46 | 
1 files changed, 26 insertions, 20 deletions
diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c index fab899eec05..1b8dbd5961b 100644 --- a/drivers/gpu/drm/drm_bufs.c +++ b/drivers/gpu/drm/drm_bufs.c @@ -50,7 +50,7 @@ resource_size_t drm_get_resource_len(struct drm_device *dev, unsigned int resour  EXPORT_SYMBOL(drm_get_resource_len);  static struct drm_map_list *drm_find_matching_map(struct drm_device *dev, -					     drm_local_map_t *map) +						  struct drm_local_map *map)  {  	struct drm_map_list *entry;  	list_for_each_entry(entry, &dev->maplist, head) { @@ -89,13 +89,8 @@ static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,  }  /** - * Ioctl to specify a range of memory that is available for mapping by a non-root process. - * - * \param inode device inode. - * \param file_priv DRM file private. - * \param cmd command. - * \param arg pointer to a drm_map structure. - * \return zero on success or a negative value on error. + * Core function to create a range of memory available for mapping by a + * non-root process.   *   * Adjusts the memory offset to its absolute value according to the mapping   * type.  Adds the map to the map list drm_device::maplist. Adds MTRR's where @@ -106,7 +101,7 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset,  			   enum drm_map_flags flags,  			   struct drm_map_list ** maplist)  { -	struct drm_map *map; +	struct drm_local_map *map;  	struct drm_map_list *list;  	drm_dma_handle_t *dmah;  	unsigned long user_token; @@ -329,7 +324,7 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset,  int drm_addmap(struct drm_device * dev, unsigned int offset,  	       unsigned int size, enum drm_map_type type, -	       enum drm_map_flags flags, drm_local_map_t ** map_ptr) +	       enum drm_map_flags flags, struct drm_local_map ** map_ptr)  {  	struct drm_map_list *list;  	int rc; @@ -342,6 +337,17 @@ int drm_addmap(struct drm_device * dev, unsigned int offset,  EXPORT_SYMBOL(drm_addmap); +/** + * Ioctl to specify a range of memory that is available for mapping by a + * non-root process. + * + * \param inode device inode. + * \param file_priv DRM file private. + * \param cmd command. + * \param arg pointer to a drm_map structure. + * \return zero on success or a negative value on error. + * + */  int drm_addmap_ioctl(struct drm_device *dev, void *data,  		     struct drm_file *file_priv)  { @@ -367,19 +373,13 @@ int drm_addmap_ioctl(struct drm_device *dev, void *data,   * Remove a map private from list and deallocate resources if the mapping   * isn't in use.   * - * \param inode device inode. - * \param file_priv DRM file private. - * \param cmd command. - * \param arg pointer to a struct drm_map structure. - * \return zero on success or a negative value on error. - *   * Searches the map on drm_device::maplist, removes it from the list, see if   * its being used, and free any associate resource (such as MTRR's) if it's not   * being on use.   *   * \sa drm_addmap   */ -int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map) +int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map)  {  	struct drm_map_list *r_list = NULL, *list_t;  	drm_dma_handle_t dmah; @@ -442,7 +442,7 @@ int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map)  }  EXPORT_SYMBOL(drm_rmmap_locked); -int drm_rmmap(struct drm_device *dev, drm_local_map_t *map) +int drm_rmmap(struct drm_device *dev, struct drm_local_map *map)  {  	int ret; @@ -462,12 +462,18 @@ EXPORT_SYMBOL(drm_rmmap);   * One use case might be after addmap is allowed for normal users for SHM and   * gets used by drivers that the server doesn't need to care about.  This seems   * unlikely. + * + * \param inode device inode. + * \param file_priv DRM file private. + * \param cmd command. + * \param arg pointer to a struct drm_map structure. + * \return zero on success or a negative value on error.   */  int drm_rmmap_ioctl(struct drm_device *dev, void *data,  		    struct drm_file *file_priv)  {  	struct drm_map *request = data; -	drm_local_map_t *map = NULL; +	struct drm_local_map *map = NULL;  	struct drm_map_list *r_list;  	int ret; @@ -1534,7 +1540,7 @@ int drm_mapbufs(struct drm_device *dev, void *data,  			&& (dma->flags & _DRM_DMA_USE_SG))  		    || (drm_core_check_feature(dev, DRIVER_FB_DMA)  			&& (dma->flags & _DRM_DMA_USE_FB))) { -			struct drm_map *map = dev->agp_buffer_map; +			struct drm_local_map *map = dev->agp_buffer_map;  			unsigned long token = dev->agp_buffer_token;  			if (!map) {  |