Merge tag 'usb-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
[firefly-linux-kernel-4.4.55.git] / include / drm / drmP.h
index fad21c927a3884e7b7c230f8cea24263f2ed73a9..2d94d7413d71cc02483bae57219007bb6f30dd28 100644 (file)
@@ -85,6 +85,9 @@ struct module;
 struct drm_file;
 struct drm_device;
 
+struct device_node;
+struct videomode;
+
 #include <drm/drm_os_linux.h>
 #include <drm/drm_hashtab.h>
 #include <drm/drm_mm.h>
@@ -446,7 +449,15 @@ struct drm_file {
        int is_master; /* this file private is a master for a minor */
        struct drm_master *master; /* master this node is currently associated with
                                      N.B. not always minor->master */
+
+       /**
+        * fbs - List of framebuffers associated with this file.
+        *
+        * Protected by fbs_lock. Note that the fbs list holds a reference on
+        * the fb object to prevent it from untimely disappearing.
+        */
        struct list_head fbs;
+       struct mutex fbs_lock;
 
        wait_queue_head_t event_wait;
        struct list_head event_list;
@@ -919,6 +930,14 @@ struct drm_driver {
        /* import dmabuf -> GEM */
        struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
                                struct dma_buf *dma_buf);
+       /* low-level interface used by drm_gem_prime_{import,export} */
+       int (*gem_prime_pin)(struct drm_gem_object *obj);
+       struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
+       struct drm_gem_object *(*gem_prime_import_sg_table)(
+                               struct drm_device *dev, size_t size,
+                               struct sg_table *sgt);
+       void *(*gem_prime_vmap)(struct drm_gem_object *obj);
+       void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
 
        /* vga arb irq handler */
        void (*vgaarb_irq)(struct drm_device *dev, bool state);
@@ -1276,6 +1295,11 @@ static inline int drm_device_is_unplugged(struct drm_device *dev)
        return ret;
 }
 
+static inline bool drm_modeset_is_locked(struct drm_device *dev)
+{
+       return mutex_is_locked(&dev->mode_config.mutex);
+}
+
 /******************************************************************/
 /** \name Internal function definitions */
 /*@{*/
@@ -1456,6 +1480,12 @@ extern struct drm_display_mode *
 drm_mode_create_from_cmdline_mode(struct drm_device *dev,
                                  struct drm_cmdline_mode *cmd);
 
+extern int drm_display_mode_from_videomode(const struct videomode *vm,
+                                          struct drm_display_mode *dmode);
+extern int of_get_drm_display_mode(struct device_node *np,
+                                  struct drm_display_mode *dmode,
+                                  int index);
+
 /* Modesetting support */
 extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
 extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
@@ -1540,9 +1570,13 @@ extern int drm_clients_info(struct seq_file *m, void* data);
 extern int drm_gem_name_info(struct seq_file *m, void *data);
 
 
+extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
+               struct drm_gem_object *obj, int flags);
 extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
                struct drm_file *file_priv, uint32_t handle, uint32_t flags,
                int *prime_fd);
+extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
+               struct dma_buf *dma_buf);
 extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
                struct drm_file *file_priv, int prime_fd, uint32_t *handle);