diff options
Diffstat (limited to 'include/drm')
| -rw-r--r-- | include/drm/drm.h | 14 | ||||
| -rw-r--r-- | include/drm/drmP.h | 62 | ||||
| -rw-r--r-- | include/drm/intel-gtt.h | 4 |
3 files changed, 79 insertions, 1 deletions
diff --git a/include/drm/drm.h b/include/drm/drm.h index 34a7b89fd006..64ff02d5b730 100644 --- a/include/drm/drm.h +++ b/include/drm/drm.h | |||
| @@ -617,6 +617,17 @@ struct drm_get_cap { | |||
| 617 | __u64 value; | 617 | __u64 value; |
| 618 | }; | 618 | }; |
| 619 | 619 | ||
| 620 | #define DRM_CLOEXEC O_CLOEXEC | ||
| 621 | struct drm_prime_handle { | ||
| 622 | __u32 handle; | ||
| 623 | |||
| 624 | /** Flags.. only applicable for handle->fd */ | ||
| 625 | __u32 flags; | ||
| 626 | |||
| 627 | /** Returned dmabuf file descriptor */ | ||
| 628 | __s32 fd; | ||
| 629 | }; | ||
| 630 | |||
| 620 | #include "drm_mode.h" | 631 | #include "drm_mode.h" |
| 621 | 632 | ||
| 622 | #define DRM_IOCTL_BASE 'd' | 633 | #define DRM_IOCTL_BASE 'd' |
| @@ -673,7 +684,8 @@ struct drm_get_cap { | |||
| 673 | #define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) | 684 | #define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) |
| 674 | #define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) | 685 | #define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) |
| 675 | 686 | ||
| 676 | #define DRM_IOCTL_GEM_PRIME_OPEN DRM_IOWR(0x2e, struct drm_gem_open) | 687 | #define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle) |
| 688 | #define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle) | ||
| 677 | 689 | ||
| 678 | #define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) | 690 | #define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) |
| 679 | #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) | 691 | #define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 574bd1c81ebd..dd731043fecd 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -91,6 +91,7 @@ struct drm_device; | |||
| 91 | #define DRM_UT_CORE 0x01 | 91 | #define DRM_UT_CORE 0x01 |
| 92 | #define DRM_UT_DRIVER 0x02 | 92 | #define DRM_UT_DRIVER 0x02 |
| 93 | #define DRM_UT_KMS 0x04 | 93 | #define DRM_UT_KMS 0x04 |
| 94 | #define DRM_UT_PRIME 0x08 | ||
| 94 | /* | 95 | /* |
| 95 | * Three debug levels are defined. | 96 | * Three debug levels are defined. |
| 96 | * drm_core, drm_driver, drm_kms | 97 | * drm_core, drm_driver, drm_kms |
| @@ -150,6 +151,7 @@ int drm_err(const char *func, const char *format, ...); | |||
| 150 | #define DRIVER_IRQ_VBL2 0x800 | 151 | #define DRIVER_IRQ_VBL2 0x800 |
| 151 | #define DRIVER_GEM 0x1000 | 152 | #define DRIVER_GEM 0x1000 |
| 152 | #define DRIVER_MODESET 0x2000 | 153 | #define DRIVER_MODESET 0x2000 |
| 154 | #define DRIVER_PRIME 0x4000 | ||
| 153 | 155 | ||
| 154 | #define DRIVER_BUS_PCI 0x1 | 156 | #define DRIVER_BUS_PCI 0x1 |
| 155 | #define DRIVER_BUS_PLATFORM 0x2 | 157 | #define DRIVER_BUS_PLATFORM 0x2 |
| @@ -215,6 +217,11 @@ int drm_err(const char *func, const char *format, ...); | |||
| 215 | drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \ | 217 | drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \ |
| 216 | __func__, fmt, ##args); \ | 218 | __func__, fmt, ##args); \ |
| 217 | } while (0) | 219 | } while (0) |
| 220 | #define DRM_DEBUG_PRIME(fmt, args...) \ | ||
| 221 | do { \ | ||
| 222 | drm_ut_debug_printk(DRM_UT_PRIME, DRM_NAME, \ | ||
| 223 | __func__, fmt, ##args); \ | ||
| 224 | } while (0) | ||
| 218 | #define DRM_LOG(fmt, args...) \ | 225 | #define DRM_LOG(fmt, args...) \ |
| 219 | do { \ | 226 | do { \ |
| 220 | drm_ut_debug_printk(DRM_UT_CORE, NULL, \ | 227 | drm_ut_debug_printk(DRM_UT_CORE, NULL, \ |
| @@ -238,6 +245,7 @@ int drm_err(const char *func, const char *format, ...); | |||
| 238 | #else | 245 | #else |
| 239 | #define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) | 246 | #define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0) |
| 240 | #define DRM_DEBUG_KMS(fmt, args...) do { } while (0) | 247 | #define DRM_DEBUG_KMS(fmt, args...) do { } while (0) |
| 248 | #define DRM_DEBUG_PRIME(fmt, args...) do { } while (0) | ||
| 241 | #define DRM_DEBUG(fmt, arg...) do { } while (0) | 249 | #define DRM_DEBUG(fmt, arg...) do { } while (0) |
| 242 | #define DRM_LOG(fmt, arg...) do { } while (0) | 250 | #define DRM_LOG(fmt, arg...) do { } while (0) |
| 243 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) | 251 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) |
| @@ -410,6 +418,12 @@ struct drm_pending_event { | |||
| 410 | void (*destroy)(struct drm_pending_event *event); | 418 | void (*destroy)(struct drm_pending_event *event); |
| 411 | }; | 419 | }; |
| 412 | 420 | ||
| 421 | /* initial implementaton using a linked list - todo hashtab */ | ||
| 422 | struct drm_prime_file_private { | ||
| 423 | struct list_head head; | ||
| 424 | struct mutex lock; | ||
| 425 | }; | ||
| 426 | |||
| 413 | /** File private data */ | 427 | /** File private data */ |
| 414 | struct drm_file { | 428 | struct drm_file { |
| 415 | int authenticated; | 429 | int authenticated; |
| @@ -437,6 +451,8 @@ struct drm_file { | |||
| 437 | wait_queue_head_t event_wait; | 451 | wait_queue_head_t event_wait; |
| 438 | struct list_head event_list; | 452 | struct list_head event_list; |
| 439 | int event_space; | 453 | int event_space; |
| 454 | |||
| 455 | struct drm_prime_file_private prime; | ||
| 440 | }; | 456 | }; |
| 441 | 457 | ||
| 442 | /** Wait queue */ | 458 | /** Wait queue */ |
| @@ -652,6 +668,12 @@ struct drm_gem_object { | |||
| 652 | uint32_t pending_write_domain; | 668 | uint32_t pending_write_domain; |
| 653 | 669 | ||
| 654 | void *driver_private; | 670 | void *driver_private; |
| 671 | |||
| 672 | /* dma buf exported from this GEM object */ | ||
| 673 | struct dma_buf *export_dma_buf; | ||
| 674 | |||
| 675 | /* dma buf attachment backing this object */ | ||
| 676 | struct dma_buf_attachment *import_attach; | ||
| 655 | }; | 677 | }; |
| 656 | 678 | ||
| 657 | #include "drm_crtc.h" | 679 | #include "drm_crtc.h" |
| @@ -890,6 +912,20 @@ struct drm_driver { | |||
| 890 | int (*gem_open_object) (struct drm_gem_object *, struct drm_file *); | 912 | int (*gem_open_object) (struct drm_gem_object *, struct drm_file *); |
| 891 | void (*gem_close_object) (struct drm_gem_object *, struct drm_file *); | 913 | void (*gem_close_object) (struct drm_gem_object *, struct drm_file *); |
| 892 | 914 | ||
| 915 | /* prime: */ | ||
| 916 | /* export handle -> fd (see drm_gem_prime_handle_to_fd() helper) */ | ||
| 917 | int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv, | ||
| 918 | uint32_t handle, uint32_t flags, int *prime_fd); | ||
| 919 | /* import fd -> handle (see drm_gem_prime_fd_to_handle() helper) */ | ||
| 920 | int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv, | ||
| 921 | int prime_fd, uint32_t *handle); | ||
| 922 | /* export GEM -> dmabuf */ | ||
| 923 | struct dma_buf * (*gem_prime_export)(struct drm_device *dev, | ||
| 924 | struct drm_gem_object *obj, int flags); | ||
| 925 | /* import dmabuf -> GEM */ | ||
| 926 | struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, | ||
| 927 | struct dma_buf *dma_buf); | ||
| 928 | |||
| 893 | /* vga arb irq handler */ | 929 | /* vga arb irq handler */ |
| 894 | void (*vgaarb_irq)(struct drm_device *dev, bool state); | 930 | void (*vgaarb_irq)(struct drm_device *dev, bool state); |
| 895 | 931 | ||
| @@ -1509,6 +1545,32 @@ extern int drm_vblank_info(struct seq_file *m, void *data); | |||
| 1509 | extern int drm_clients_info(struct seq_file *m, void* data); | 1545 | extern int drm_clients_info(struct seq_file *m, void* data); |
| 1510 | extern int drm_gem_name_info(struct seq_file *m, void *data); | 1546 | extern int drm_gem_name_info(struct seq_file *m, void *data); |
| 1511 | 1547 | ||
| 1548 | |||
| 1549 | extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, | ||
| 1550 | struct drm_file *file_priv, uint32_t handle, uint32_t flags, | ||
| 1551 | int *prime_fd); | ||
| 1552 | extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, | ||
| 1553 | struct drm_file *file_priv, int prime_fd, uint32_t *handle); | ||
| 1554 | |||
| 1555 | extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data, | ||
| 1556 | struct drm_file *file_priv); | ||
| 1557 | extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, | ||
| 1558 | struct drm_file *file_priv); | ||
| 1559 | |||
| 1560 | extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages); | ||
| 1561 | extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); | ||
| 1562 | |||
| 1563 | |||
| 1564 | void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv); | ||
| 1565 | void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv); | ||
| 1566 | int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle); | ||
| 1567 | int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle); | ||
| 1568 | void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf); | ||
| 1569 | |||
| 1570 | int drm_prime_add_dma_buf(struct drm_device *dev, struct drm_gem_object *obj); | ||
| 1571 | int drm_prime_lookup_obj(struct drm_device *dev, struct dma_buf *buf, | ||
| 1572 | struct drm_gem_object **obj); | ||
| 1573 | |||
| 1512 | #if DRM_DEBUG_CODE | 1574 | #if DRM_DEBUG_CODE |
| 1513 | extern int drm_vma_info(struct seq_file *m, void *data); | 1575 | extern int drm_vma_info(struct seq_file *m, void *data); |
| 1514 | #endif | 1576 | #endif |
diff --git a/include/drm/intel-gtt.h b/include/drm/intel-gtt.h index 0a0001b9dc78..923afb5dcf0c 100644 --- a/include/drm/intel-gtt.h +++ b/include/drm/intel-gtt.h | |||
| @@ -44,4 +44,8 @@ void intel_gtt_insert_pages(unsigned int first_entry, unsigned int num_entries, | |||
| 44 | /* flag for GFDT type */ | 44 | /* flag for GFDT type */ |
| 45 | #define AGP_USER_CACHED_MEMORY_GFDT (1 << 3) | 45 | #define AGP_USER_CACHED_MEMORY_GFDT (1 << 3) |
| 46 | 46 | ||
| 47 | #ifdef CONFIG_INTEL_IOMMU | ||
| 48 | extern int intel_iommu_gfx_mapped; | ||
| 49 | #endif | ||
| 50 | |||
| 47 | #endif | 51 | #endif |
