aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-02-02 00:55:46 -0500
committerDave Airlie <airlied@redhat.com>2009-03-13 00:23:56 -0400
commitf77d390c9779c496aa5b99ec832996fb76bb1d13 (patch)
tree3e3cccc4ac9416457a944d13b31ef942432717f2 /include/drm
parentd883f7f1b75c8dcafa891f7b9e69c5a2f0ff6d66 (diff)
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 'include/drm')
-rw-r--r--include/drm/drmP.h47
1 files changed, 30 insertions, 17 deletions
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 34e1676b53d1..03a7c11cb24d 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -523,19 +523,32 @@ struct drm_mm {
523 523
524 524
525/** 525/**
526 * Kernel side of a mapping
527 */
528struct drm_local_map {
529 unsigned long offset; /**< Requested physical address (0 for SAREA)*/
530 unsigned long size; /**< Requested physical size (bytes) */
531 enum drm_map_type type; /**< Type of memory to map */
532 enum drm_map_flags flags; /**< Flags */
533 void *handle; /**< User-space: "Handle" to pass to mmap() */
534 /**< Kernel-space: kernel-virtual address */
535 int mtrr; /**< MTRR slot used */
536};
537
538typedef struct drm_local_map drm_local_map_t;
539
540/**
526 * Mappings list 541 * Mappings list
527 */ 542 */
528struct drm_map_list { 543struct drm_map_list {
529 struct list_head head; /**< list head */ 544 struct list_head head; /**< list head */
530 struct drm_hash_item hash; 545 struct drm_hash_item hash;
531 struct drm_map *map; /**< mapping */ 546 struct drm_local_map *map; /**< mapping */
532 uint64_t user_token; 547 uint64_t user_token;
533 struct drm_master *master; 548 struct drm_master *master;
534 struct drm_mm_node *file_offset_node; /**< fake offset */ 549 struct drm_mm_node *file_offset_node; /**< fake offset */
535}; 550};
536 551
537typedef struct drm_map drm_local_map_t;
538
539/** 552/**
540 * Context handle list 553 * Context handle list
541 */ 554 */
@@ -560,7 +573,7 @@ struct drm_ati_pcigart_info {
560 dma_addr_t bus_addr; 573 dma_addr_t bus_addr;
561 dma_addr_t table_mask; 574 dma_addr_t table_mask;
562 struct drm_dma_handle *table_handle; 575 struct drm_dma_handle *table_handle;
563 drm_local_map_t mapping; 576 struct drm_local_map mapping;
564 int table_size; 577 int table_size;
565}; 578};
566 579
@@ -747,7 +760,7 @@ struct drm_driver {
747 struct drm_file *file_priv); 760 struct drm_file *file_priv);
748 void (*reclaim_buffers_idlelocked) (struct drm_device *dev, 761 void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
749 struct drm_file *file_priv); 762 struct drm_file *file_priv);
750 unsigned long (*get_map_ofs) (struct drm_map * map); 763 unsigned long (*get_map_ofs) (struct drm_local_map * map);
751 unsigned long (*get_reg_ofs) (struct drm_device *dev); 764 unsigned long (*get_reg_ofs) (struct drm_device *dev);
752 void (*set_version) (struct drm_device *dev, 765 void (*set_version) (struct drm_device *dev,
753 struct drm_set_version *sv); 766 struct drm_set_version *sv);
@@ -932,7 +945,7 @@ struct drm_device {
932 sigset_t sigmask; 945 sigset_t sigmask;
933 946
934 struct drm_driver *driver; 947 struct drm_driver *driver;
935 drm_local_map_t *agp_buffer_map; 948 struct drm_local_map *agp_buffer_map;
936 unsigned int agp_buffer_token; 949 unsigned int agp_buffer_token;
937 struct drm_minor *control; /**< Control node for card */ 950 struct drm_minor *control; /**< Control node for card */
938 struct drm_minor *primary; /**< render type primary screen head */ 951 struct drm_minor *primary; /**< render type primary screen head */
@@ -1049,7 +1062,7 @@ extern int drm_release(struct inode *inode, struct file *filp);
1049extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); 1062extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
1050extern 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);
1051extern void drm_vm_open_locked(struct vm_area_struct *vma); 1064extern void drm_vm_open_locked(struct vm_area_struct *vma);
1052extern unsigned long drm_core_get_map_ofs(struct drm_map * map); 1065extern unsigned long drm_core_get_map_ofs(struct drm_local_map * map);
1053extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); 1066extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev);
1054extern 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);
1055 1068
@@ -1155,11 +1168,11 @@ extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request
1155extern 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);
1156extern int drm_addmap(struct drm_device *dev, unsigned int offset, 1169extern int drm_addmap(struct drm_device *dev, unsigned int offset,
1157 unsigned int size, enum drm_map_type type, 1170 unsigned int size, enum drm_map_type type,
1158 enum drm_map_flags flags, drm_local_map_t ** map_ptr); 1171 enum drm_map_flags flags, struct drm_local_map **map_ptr);
1159extern int drm_addmap_ioctl(struct drm_device *dev, void *data, 1172extern int drm_addmap_ioctl(struct drm_device *dev, void *data,
1160 struct drm_file *file_priv); 1173 struct drm_file *file_priv);
1161extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map); 1174extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map);
1162extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map); 1175extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map);
1163extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, 1176extern int drm_rmmap_ioctl(struct drm_device *dev, void *data,
1164 struct drm_file *file_priv); 1177 struct drm_file *file_priv);
1165extern int drm_addbufs(struct drm_device *dev, void *data, 1178extern int drm_addbufs(struct drm_device *dev, void *data,
@@ -1261,7 +1274,7 @@ extern struct proc_dir_entry *drm_proc_root;
1261 1274
1262extern struct idr drm_minors_idr; 1275extern struct idr drm_minors_idr;
1263 1276
1264extern drm_local_map_t *drm_getsarea(struct drm_device *dev); 1277extern struct drm_local_map *drm_getsarea(struct drm_device *dev);
1265 1278
1266 /* Proc support (drm_proc.h) */ 1279 /* Proc support (drm_proc.h) */
1267extern int drm_proc_init(struct drm_minor *minor, int minor_id, 1280extern int drm_proc_init(struct drm_minor *minor, int minor_id,
@@ -1378,12 +1391,12 @@ int drm_gem_open_ioctl(struct drm_device *dev, void *data,
1378void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); 1391void drm_gem_open(struct drm_device *dev, struct drm_file *file_private);
1379void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); 1392void drm_gem_release(struct drm_device *dev, struct drm_file *file_private);
1380 1393
1381extern void drm_core_ioremap(struct drm_map *map, struct drm_device *dev); 1394extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev);
1382extern void drm_core_ioremap_wc(struct drm_map *map, struct drm_device *dev); 1395extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev);
1383extern void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev); 1396extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev);
1384 1397
1385static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev, 1398static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev,
1386 unsigned int token) 1399 unsigned int token)
1387{ 1400{
1388 struct drm_map_list *_entry; 1401 struct drm_map_list *_entry;
1389 list_for_each_entry(_entry, &dev->maplist, head) 1402 list_for_each_entry(_entry, &dev->maplist, head)
@@ -1410,7 +1423,7 @@ static __inline__ int drm_device_is_pcie(struct drm_device *dev)
1410 return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); 1423 return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP);
1411} 1424}
1412 1425
1413static __inline__ void drm_core_dropmap(struct drm_map *map) 1426static __inline__ void drm_core_dropmap(struct drm_local_map *map)
1414{ 1427{
1415} 1428}
1416 1429