diff options
Diffstat (limited to 'include/drm/drmP.h')
-rw-r--r-- | include/drm/drmP.h | 145 |
1 files changed, 116 insertions, 29 deletions
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index e5f4ae989ab..c8c42215143 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -281,16 +281,16 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, | |||
281 | 281 | ||
282 | struct drm_ioctl_desc { | 282 | struct drm_ioctl_desc { |
283 | unsigned int cmd; | 283 | unsigned int cmd; |
284 | drm_ioctl_t *func; | ||
285 | int flags; | 284 | int flags; |
285 | drm_ioctl_t *func; | ||
286 | }; | 286 | }; |
287 | 287 | ||
288 | /** | 288 | /** |
289 | * Creates a driver or general drm_ioctl_desc array entry for the given | 289 | * Creates a driver or general drm_ioctl_desc array entry for the given |
290 | * ioctl, for use by drm_ioctl(). | 290 | * ioctl, for use by drm_ioctl(). |
291 | */ | 291 | */ |
292 | #define DRM_IOCTL_DEF(ioctl, func, flags) \ | 292 | #define DRM_IOCTL_DEF(ioctl, _func, _flags) \ |
293 | [DRM_IOCTL_NR(ioctl)] = {ioctl, func, flags} | 293 | [DRM_IOCTL_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags} |
294 | 294 | ||
295 | struct drm_magic_entry { | 295 | struct drm_magic_entry { |
296 | struct list_head head; | 296 | struct list_head head; |
@@ -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 | resource_size_t 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 | ||
@@ -675,7 +688,6 @@ struct drm_driver { | |||
675 | int (*kernel_context_switch) (struct drm_device *dev, int old, | 688 | int (*kernel_context_switch) (struct drm_device *dev, int old, |
676 | int new); | 689 | int new); |
677 | void (*kernel_context_switch_unlock) (struct drm_device *dev); | 690 | void (*kernel_context_switch_unlock) (struct drm_device *dev); |
678 | int (*dri_library_name) (struct drm_device *dev, char *buf); | ||
679 | 691 | ||
680 | /** | 692 | /** |
681 | * get_vblank_counter - get raw hardware vblank counter | 693 | * get_vblank_counter - get raw hardware vblank counter |
@@ -747,8 +759,8 @@ struct drm_driver { | |||
747 | struct drm_file *file_priv); | 759 | struct drm_file *file_priv); |
748 | void (*reclaim_buffers_idlelocked) (struct drm_device *dev, | 760 | void (*reclaim_buffers_idlelocked) (struct drm_device *dev, |
749 | struct drm_file *file_priv); | 761 | struct drm_file *file_priv); |
750 | unsigned long (*get_map_ofs) (struct drm_map * map); | 762 | resource_size_t (*get_map_ofs) (struct drm_local_map * map); |
751 | unsigned long (*get_reg_ofs) (struct drm_device *dev); | 763 | resource_size_t (*get_reg_ofs) (struct drm_device *dev); |
752 | void (*set_version) (struct drm_device *dev, | 764 | void (*set_version) (struct drm_device *dev, |
753 | struct drm_set_version *sv); | 765 | struct drm_set_version *sv); |
754 | 766 | ||
@@ -758,6 +770,8 @@ struct drm_driver { | |||
758 | 770 | ||
759 | int (*proc_init)(struct drm_minor *minor); | 771 | int (*proc_init)(struct drm_minor *minor); |
760 | void (*proc_cleanup)(struct drm_minor *minor); | 772 | void (*proc_cleanup)(struct drm_minor *minor); |
773 | int (*debugfs_init)(struct drm_minor *minor); | ||
774 | void (*debugfs_cleanup)(struct drm_minor *minor); | ||
761 | 775 | ||
762 | /** | 776 | /** |
763 | * Driver-specific constructor for drm_gem_objects, to set up | 777 | * Driver-specific constructor for drm_gem_objects, to set up |
@@ -793,6 +807,48 @@ struct drm_driver { | |||
793 | #define DRM_MINOR_CONTROL 2 | 807 | #define DRM_MINOR_CONTROL 2 |
794 | #define DRM_MINOR_RENDER 3 | 808 | #define DRM_MINOR_RENDER 3 |
795 | 809 | ||
810 | |||
811 | /** | ||
812 | * debugfs node list. This structure represents a debugfs file to | ||
813 | * be created by the drm core | ||
814 | */ | ||
815 | struct drm_debugfs_list { | ||
816 | const char *name; /** file name */ | ||
817 | int (*show)(struct seq_file*, void*); /** show callback */ | ||
818 | u32 driver_features; /**< Required driver features for this entry */ | ||
819 | }; | ||
820 | |||
821 | /** | ||
822 | * debugfs node structure. This structure represents a debugfs file. | ||
823 | */ | ||
824 | struct drm_debugfs_node { | ||
825 | struct list_head list; | ||
826 | struct drm_minor *minor; | ||
827 | struct drm_debugfs_list *debugfs_ent; | ||
828 | struct dentry *dent; | ||
829 | }; | ||
830 | |||
831 | /** | ||
832 | * Info file list entry. This structure represents a debugfs or proc file to | ||
833 | * be created by the drm core | ||
834 | */ | ||
835 | struct drm_info_list { | ||
836 | const char *name; /** file name */ | ||
837 | int (*show)(struct seq_file*, void*); /** show callback */ | ||
838 | u32 driver_features; /**< Required driver features for this entry */ | ||
839 | void *data; | ||
840 | }; | ||
841 | |||
842 | /** | ||
843 | * debugfs node structure. This structure represents a debugfs file. | ||
844 | */ | ||
845 | struct drm_info_node { | ||
846 | struct list_head list; | ||
847 | struct drm_minor *minor; | ||
848 | struct drm_info_list *info_ent; | ||
849 | struct dentry *dent; | ||
850 | }; | ||
851 | |||
796 | /** | 852 | /** |
797 | * DRM minor structure. This structure represents a drm minor number. | 853 | * DRM minor structure. This structure represents a drm minor number. |
798 | */ | 854 | */ |
@@ -802,7 +858,12 @@ struct drm_minor { | |||
802 | dev_t device; /**< Device number for mknod */ | 858 | dev_t device; /**< Device number for mknod */ |
803 | struct device kdev; /**< Linux device */ | 859 | struct device kdev; /**< Linux device */ |
804 | struct drm_device *dev; | 860 | struct drm_device *dev; |
805 | struct proc_dir_entry *dev_root; /**< proc directory entry */ | 861 | |
862 | struct proc_dir_entry *proc_root; /**< proc directory entry */ | ||
863 | struct drm_info_node proc_nodes; | ||
864 | struct dentry *debugfs_root; | ||
865 | struct drm_info_node debugfs_nodes; | ||
866 | |||
806 | struct drm_master *master; /* currently active master for this node */ | 867 | struct drm_master *master; /* currently active master for this node */ |
807 | struct list_head master_list; | 868 | struct list_head master_list; |
808 | struct drm_mode_group mode_group; | 869 | struct drm_mode_group mode_group; |
@@ -932,7 +993,7 @@ struct drm_device { | |||
932 | sigset_t sigmask; | 993 | sigset_t sigmask; |
933 | 994 | ||
934 | struct drm_driver *driver; | 995 | struct drm_driver *driver; |
935 | drm_local_map_t *agp_buffer_map; | 996 | struct drm_local_map *agp_buffer_map; |
936 | unsigned int agp_buffer_token; | 997 | unsigned int agp_buffer_token; |
937 | struct drm_minor *control; /**< Control node for card */ | 998 | struct drm_minor *control; /**< Control node for card */ |
938 | struct drm_minor *primary; /**< render type primary screen head */ | 999 | struct drm_minor *primary; /**< render type primary screen head */ |
@@ -1049,8 +1110,8 @@ extern int drm_release(struct inode *inode, struct file *filp); | |||
1049 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); | 1110 | 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); | 1111 | 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); | 1112 | extern void drm_vm_open_locked(struct vm_area_struct *vma); |
1052 | extern unsigned long drm_core_get_map_ofs(struct drm_map * map); | 1113 | extern resource_size_t drm_core_get_map_ofs(struct drm_local_map * map); |
1053 | extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); | 1114 | extern resource_size_t drm_core_get_reg_ofs(struct drm_device *dev); |
1054 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); | 1115 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); |
1055 | 1116 | ||
1056 | /* Memory management support (drm_memory.h) */ | 1117 | /* Memory management support (drm_memory.h) */ |
@@ -1153,13 +1214,13 @@ extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv | |||
1153 | /* Buffer management support (drm_bufs.h) */ | 1214 | /* Buffer management support (drm_bufs.h) */ |
1154 | extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); | 1215 | 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); | 1216 | 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, | 1217 | extern int drm_addmap(struct drm_device *dev, resource_size_t offset, |
1157 | unsigned int size, enum drm_map_type type, | 1218 | unsigned int size, enum drm_map_type type, |
1158 | enum drm_map_flags flags, drm_local_map_t ** map_ptr); | 1219 | enum drm_map_flags flags, struct drm_local_map **map_ptr); |
1159 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, | 1220 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, |
1160 | struct drm_file *file_priv); | 1221 | struct drm_file *file_priv); |
1161 | extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map); | 1222 | 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); | 1223 | 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, | 1224 | extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, |
1164 | struct drm_file *file_priv); | 1225 | struct drm_file *file_priv); |
1165 | extern int drm_addbufs(struct drm_device *dev, void *data, | 1226 | extern int drm_addbufs(struct drm_device *dev, void *data, |
@@ -1173,10 +1234,10 @@ extern int drm_freebufs(struct drm_device *dev, void *data, | |||
1173 | extern int drm_mapbufs(struct drm_device *dev, void *data, | 1234 | extern int drm_mapbufs(struct drm_device *dev, void *data, |
1174 | struct drm_file *file_priv); | 1235 | struct drm_file *file_priv); |
1175 | extern int drm_order(unsigned long size); | 1236 | extern int drm_order(unsigned long size); |
1176 | extern unsigned long drm_get_resource_start(struct drm_device *dev, | 1237 | extern resource_size_t drm_get_resource_start(struct drm_device *dev, |
1238 | unsigned int resource); | ||
1239 | extern resource_size_t drm_get_resource_len(struct drm_device *dev, | ||
1177 | unsigned int resource); | 1240 | unsigned int resource); |
1178 | extern unsigned long drm_get_resource_len(struct drm_device *dev, | ||
1179 | unsigned int resource); | ||
1180 | 1241 | ||
1181 | /* DMA support (drm_dma.h) */ | 1242 | /* DMA support (drm_dma.h) */ |
1182 | extern int drm_dma_setup(struct drm_device *dev); | 1243 | extern int drm_dma_setup(struct drm_device *dev); |
@@ -1252,22 +1313,48 @@ extern struct drm_master *drm_master_get(struct drm_master *master); | |||
1252 | extern void drm_master_put(struct drm_master **master); | 1313 | extern void drm_master_put(struct drm_master **master); |
1253 | extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, | 1314 | extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, |
1254 | struct drm_driver *driver); | 1315 | struct drm_driver *driver); |
1255 | extern int drm_put_dev(struct drm_device *dev); | 1316 | extern void drm_put_dev(struct drm_device *dev); |
1256 | extern int drm_put_minor(struct drm_minor **minor); | 1317 | extern int drm_put_minor(struct drm_minor **minor); |
1257 | extern unsigned int drm_debug; | 1318 | extern unsigned int drm_debug; |
1258 | 1319 | ||
1259 | extern struct class *drm_class; | 1320 | extern struct class *drm_class; |
1260 | extern struct proc_dir_entry *drm_proc_root; | 1321 | extern struct proc_dir_entry *drm_proc_root; |
1322 | extern struct dentry *drm_debugfs_root; | ||
1261 | 1323 | ||
1262 | extern struct idr drm_minors_idr; | 1324 | extern struct idr drm_minors_idr; |
1263 | 1325 | ||
1264 | extern drm_local_map_t *drm_getsarea(struct drm_device *dev); | 1326 | extern struct drm_local_map *drm_getsarea(struct drm_device *dev); |
1265 | 1327 | ||
1266 | /* Proc support (drm_proc.h) */ | 1328 | /* Proc support (drm_proc.h) */ |
1267 | extern int drm_proc_init(struct drm_minor *minor, int minor_id, | 1329 | extern int drm_proc_init(struct drm_minor *minor, int minor_id, |
1268 | struct proc_dir_entry *root); | 1330 | struct proc_dir_entry *root); |
1269 | extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root); | 1331 | extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root); |
1270 | 1332 | ||
1333 | /* Debugfs support */ | ||
1334 | #if defined(CONFIG_DEBUG_FS) | ||
1335 | extern int drm_debugfs_init(struct drm_minor *minor, int minor_id, | ||
1336 | struct dentry *root); | ||
1337 | extern int drm_debugfs_create_files(struct drm_info_list *files, int count, | ||
1338 | struct dentry *root, struct drm_minor *minor); | ||
1339 | extern int drm_debugfs_remove_files(struct drm_info_list *files, int count, | ||
1340 | struct drm_minor *minor); | ||
1341 | extern int drm_debugfs_cleanup(struct drm_minor *minor); | ||
1342 | #endif | ||
1343 | |||
1344 | /* Info file support */ | ||
1345 | extern int drm_name_info(struct seq_file *m, void *data); | ||
1346 | extern int drm_vm_info(struct seq_file *m, void *data); | ||
1347 | extern int drm_queues_info(struct seq_file *m, void *data); | ||
1348 | extern int drm_bufs_info(struct seq_file *m, void *data); | ||
1349 | extern int drm_vblank_info(struct seq_file *m, void *data); | ||
1350 | extern int drm_clients_info(struct seq_file *m, void* data); | ||
1351 | extern int drm_gem_name_info(struct seq_file *m, void *data); | ||
1352 | extern int drm_gem_object_info(struct seq_file *m, void* data); | ||
1353 | |||
1354 | #if DRM_DEBUG_CODE | ||
1355 | extern int drm_vma_info(struct seq_file *m, void *data); | ||
1356 | #endif | ||
1357 | |||
1271 | /* Scatter Gather Support (drm_scatter.h) */ | 1358 | /* Scatter Gather Support (drm_scatter.h) */ |
1272 | extern void drm_sg_cleanup(struct drm_sg_mem * entry); | 1359 | extern void drm_sg_cleanup(struct drm_sg_mem * entry); |
1273 | extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data, | 1360 | extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data, |
@@ -1378,12 +1465,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); | 1465 | 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); | 1466 | void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); |
1380 | 1467 | ||
1381 | extern void drm_core_ioremap(struct drm_map *map, struct drm_device *dev); | 1468 | 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); | 1469 | 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); | 1470 | extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev); |
1384 | 1471 | ||
1385 | static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev, | 1472 | static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev, |
1386 | unsigned int token) | 1473 | unsigned int token) |
1387 | { | 1474 | { |
1388 | struct drm_map_list *_entry; | 1475 | struct drm_map_list *_entry; |
1389 | list_for_each_entry(_entry, &dev->maplist, head) | 1476 | list_for_each_entry(_entry, &dev->maplist, head) |
@@ -1410,7 +1497,7 @@ static __inline__ int drm_device_is_pcie(struct drm_device *dev) | |||
1410 | return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); | 1497 | return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); |
1411 | } | 1498 | } |
1412 | 1499 | ||
1413 | static __inline__ void drm_core_dropmap(struct drm_map *map) | 1500 | static __inline__ void drm_core_dropmap(struct drm_local_map *map) |
1414 | { | 1501 | { |
1415 | } | 1502 | } |
1416 | 1503 | ||