aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-02-02 00:55:47 -0500
committerDave Airlie <airlied@redhat.com>2009-03-13 00:23:57 -0400
commit41c2e75e60200a860a74b7c84a6375c105e7437f (patch)
tree18e97662d6859eead4de816e121d001b34a7352a /include/drm
parentf77d390c9779c496aa5b99ec832996fb76bb1d13 (diff)
drm: Make drm_local_map use a resource_size_t offset
This changes drm_local_map to use a resource_size for its "offset" member instead of an unsigned long, thus allowing 32-bit machines with a >32-bit physical address space to be able to store there their register or framebuffer addresses when those are above 4G, such as when using a PCI video card on a recent AMCC 440 SoC. This patch isn't as "trivial" as it sounds: A few functions needed to have some unsigned long/int changed to resource_size_t and a few printk's had to be adjusted. But also, because userspace isn't capable of passing such offsets, I had to modify drm_find_matching_map() to ignore the offset passed in for maps of type _DRM_FRAMEBUFFER or _DRM_REGISTERS. If we ever support multiple _DRM_FRAMEBUFFER or _DRM_REGISTERS maps for a given device, we might have to change that trick, but I don't think that happens on any current driver. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'include/drm')
-rw-r--r--include/drm/drmP.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 03a7c11cb24d..c91fbb68b460 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -526,7 +526,7 @@ struct drm_mm {
526 * Kernel side of a mapping 526 * Kernel side of a mapping
527 */ 527 */
528struct drm_local_map { 528struct drm_local_map {
529 unsigned long offset; /**< Requested physical address (0 for SAREA)*/ 529 resource_size_t offset; /**< Requested physical address (0 for SAREA)*/
530 unsigned long size; /**< Requested physical size (bytes) */ 530 unsigned long size; /**< Requested physical size (bytes) */
531 enum drm_map_type type; /**< Type of memory to map */ 531 enum drm_map_type type; /**< Type of memory to map */
532 enum drm_map_flags flags; /**< Flags */ 532 enum drm_map_flags flags; /**< Flags */
@@ -760,8 +760,8 @@ struct drm_driver {
760 struct drm_file *file_priv); 760 struct drm_file *file_priv);
761 void (*reclaim_buffers_idlelocked) (struct drm_device *dev, 761 void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
762 struct drm_file *file_priv); 762 struct drm_file *file_priv);
763 unsigned long (*get_map_ofs) (struct drm_local_map * map); 763 resource_size_t (*get_map_ofs) (struct drm_local_map * map);
764 unsigned long (*get_reg_ofs) (struct drm_device *dev); 764 resource_size_t (*get_reg_ofs) (struct drm_device *dev);
765 void (*set_version) (struct drm_device *dev, 765 void (*set_version) (struct drm_device *dev,
766 struct drm_set_version *sv); 766 struct drm_set_version *sv);
767 767
@@ -1062,8 +1062,8 @@ extern int drm_release(struct inode *inode, struct file *filp);
1062extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); 1062extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
1063extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); 1063extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma);
1064extern void drm_vm_open_locked(struct vm_area_struct *vma); 1064extern void drm_vm_open_locked(struct vm_area_struct *vma);
1065extern unsigned long drm_core_get_map_ofs(struct drm_local_map * map); 1065extern resource_size_t drm_core_get_map_ofs(struct drm_local_map * map);
1066extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); 1066extern resource_size_t drm_core_get_reg_ofs(struct drm_device *dev);
1067extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); 1067extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
1068 1068
1069 /* Memory management support (drm_memory.h) */ 1069 /* Memory management support (drm_memory.h) */
@@ -1166,7 +1166,7 @@ extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv
1166 /* Buffer management support (drm_bufs.h) */ 1166 /* Buffer management support (drm_bufs.h) */
1167extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); 1167extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request);
1168extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); 1168extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request);
1169extern int drm_addmap(struct drm_device *dev, unsigned int offset, 1169extern int drm_addmap(struct drm_device *dev, resource_size_t offset,
1170 unsigned int size, enum drm_map_type type, 1170 unsigned int size, enum drm_map_type type,
1171 enum drm_map_flags flags, struct drm_local_map **map_ptr); 1171 enum drm_map_flags flags, struct drm_local_map **map_ptr);
1172extern int drm_addmap_ioctl(struct drm_device *dev, void *data, 1172extern int drm_addmap_ioctl(struct drm_device *dev, void *data,