diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-02-02 00:55:46 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-03-13 00:23:56 -0400 |
commit | f77d390c9779c496aa5b99ec832996fb76bb1d13 (patch) | |
tree | 3e3cccc4ac9416457a944d13b31ef942432717f2 /include/drm | |
parent | d883f7f1b75c8dcafa891f7b9e69c5a2f0ff6d66 (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.h | 47 |
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 | */ | ||
528 | struct 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 | |||
538 | typedef struct drm_local_map drm_local_map_t; | ||
539 | |||
540 | /** | ||
526 | * Mappings list | 541 | * Mappings list |
527 | */ | 542 | */ |
528 | struct drm_map_list { | 543 | struct 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 | ||
537 | typedef 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); | |||
1049 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); | 1062 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); |
1050 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); | 1063 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); |
1051 | extern void drm_vm_open_locked(struct vm_area_struct *vma); | 1064 | extern void drm_vm_open_locked(struct vm_area_struct *vma); |
1052 | extern unsigned long drm_core_get_map_ofs(struct drm_map * map); | 1065 | extern unsigned long drm_core_get_map_ofs(struct drm_local_map * map); |
1053 | extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); | 1066 | extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); |
1054 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); | 1067 | extern 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 | |||
1155 | extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); | 1168 | extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); |
1156 | extern int drm_addmap(struct drm_device *dev, unsigned int offset, | 1169 | extern 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); |
1159 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, | 1172 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, |
1160 | struct drm_file *file_priv); | 1173 | struct drm_file *file_priv); |
1161 | extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map); | 1174 | extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map); |
1162 | extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map); | 1175 | extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map); |
1163 | extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, | 1176 | extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, |
1164 | struct drm_file *file_priv); | 1177 | struct drm_file *file_priv); |
1165 | extern int drm_addbufs(struct drm_device *dev, void *data, | 1178 | extern int drm_addbufs(struct drm_device *dev, void *data, |
@@ -1261,7 +1274,7 @@ extern struct proc_dir_entry *drm_proc_root; | |||
1261 | 1274 | ||
1262 | extern struct idr drm_minors_idr; | 1275 | extern struct idr drm_minors_idr; |
1263 | 1276 | ||
1264 | extern drm_local_map_t *drm_getsarea(struct drm_device *dev); | 1277 | extern struct drm_local_map *drm_getsarea(struct drm_device *dev); |
1265 | 1278 | ||
1266 | /* Proc support (drm_proc.h) */ | 1279 | /* Proc support (drm_proc.h) */ |
1267 | extern int drm_proc_init(struct drm_minor *minor, int minor_id, | 1280 | extern 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, | |||
1378 | void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); | 1391 | void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); |
1379 | void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); | 1392 | void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); |
1380 | 1393 | ||
1381 | extern void drm_core_ioremap(struct drm_map *map, struct drm_device *dev); | 1394 | extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev); |
1382 | extern void drm_core_ioremap_wc(struct drm_map *map, struct drm_device *dev); | 1395 | extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev); |
1383 | extern void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev); | 1396 | extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev); |
1384 | 1397 | ||
1385 | static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev, | 1398 | static __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 | ||
1413 | static __inline__ void drm_core_dropmap(struct drm_map *map) | 1426 | static __inline__ void drm_core_dropmap(struct drm_local_map *map) |
1414 | { | 1427 | { |
1415 | } | 1428 | } |
1416 | 1429 | ||