mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge drm-upstream/drm-next into drm-intel-next-queued
Catch up with upstream while it's easy. Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
commit
d149d6ae17
1221 changed files with 23021 additions and 24816 deletions
|
|
@ -82,19 +82,10 @@
|
|||
#include <drm/drm_sysfs.h>
|
||||
#include <drm/drm_vblank.h>
|
||||
#include <drm/drm_irq.h>
|
||||
|
||||
#include <drm/drm_device.h>
|
||||
|
||||
struct module;
|
||||
|
||||
struct drm_device;
|
||||
struct drm_agp_head;
|
||||
struct drm_local_map;
|
||||
struct drm_device_dma;
|
||||
struct drm_gem_object;
|
||||
struct drm_master;
|
||||
struct drm_vblank_crtc;
|
||||
struct drm_vma_offset_manager;
|
||||
|
||||
struct device_node;
|
||||
struct videomode;
|
||||
struct reservation_object;
|
||||
|
|
@ -305,170 +296,6 @@ struct pci_controller;
|
|||
#define DRM_IF_VERSION(maj, min) (maj << 16 | min)
|
||||
|
||||
|
||||
/**
|
||||
* DRM device structure. This structure represent a complete card that
|
||||
* may contain multiple heads.
|
||||
*/
|
||||
struct drm_device {
|
||||
struct list_head legacy_dev_list;/**< list of devices per driver for stealth attach cleanup */
|
||||
int if_version; /**< Highest interface version set */
|
||||
|
||||
/** \name Lifetime Management */
|
||||
/*@{ */
|
||||
struct kref ref; /**< Object ref-count */
|
||||
struct device *dev; /**< Device structure of bus-device */
|
||||
struct drm_driver *driver; /**< DRM driver managing the device */
|
||||
void *dev_private; /**< DRM driver private data */
|
||||
struct drm_minor *control; /**< Control node */
|
||||
struct drm_minor *primary; /**< Primary node */
|
||||
struct drm_minor *render; /**< Render node */
|
||||
bool registered;
|
||||
|
||||
/* currently active master for this device. Protected by master_mutex */
|
||||
struct drm_master *master;
|
||||
|
||||
atomic_t unplugged; /**< Flag whether dev is dead */
|
||||
struct inode *anon_inode; /**< inode for private address-space */
|
||||
char *unique; /**< unique name of the device */
|
||||
/*@} */
|
||||
|
||||
/** \name Locks */
|
||||
/*@{ */
|
||||
struct mutex struct_mutex; /**< For others */
|
||||
struct mutex master_mutex; /**< For drm_minor::master and drm_file::is_master */
|
||||
/*@} */
|
||||
|
||||
/** \name Usage Counters */
|
||||
/*@{ */
|
||||
int open_count; /**< Outstanding files open, protected by drm_global_mutex. */
|
||||
spinlock_t buf_lock; /**< For drm_device::buf_use and a few other things. */
|
||||
int buf_use; /**< Buffers in use -- cannot alloc */
|
||||
atomic_t buf_alloc; /**< Buffer allocation in progress */
|
||||
/*@} */
|
||||
|
||||
struct mutex filelist_mutex;
|
||||
struct list_head filelist;
|
||||
|
||||
/** \name Memory management */
|
||||
/*@{ */
|
||||
struct list_head maplist; /**< Linked list of regions */
|
||||
struct drm_open_hash map_hash; /**< User token hash table for maps */
|
||||
|
||||
/** \name Context handle management */
|
||||
/*@{ */
|
||||
struct list_head ctxlist; /**< Linked list of context handles */
|
||||
struct mutex ctxlist_mutex; /**< For ctxlist */
|
||||
|
||||
struct idr ctx_idr;
|
||||
|
||||
struct list_head vmalist; /**< List of vmas (for debugging) */
|
||||
|
||||
/*@} */
|
||||
|
||||
/** \name DMA support */
|
||||
/*@{ */
|
||||
struct drm_device_dma *dma; /**< Optional pointer for DMA support */
|
||||
/*@} */
|
||||
|
||||
/** \name Context support */
|
||||
/*@{ */
|
||||
|
||||
__volatile__ long context_flag; /**< Context swapping flag */
|
||||
int last_context; /**< Last current context */
|
||||
/*@} */
|
||||
|
||||
/**
|
||||
* @irq_enabled:
|
||||
*
|
||||
* Indicates that interrupt handling is enabled, specifically vblank
|
||||
* handling. Drivers which don't use drm_irq_install() need to set this
|
||||
* to true manually.
|
||||
*/
|
||||
bool irq_enabled;
|
||||
int irq;
|
||||
|
||||
/**
|
||||
* @vblank_disable_immediate:
|
||||
*
|
||||
* If true, vblank interrupt will be disabled immediately when the
|
||||
* refcount drops to zero, as opposed to via the vblank disable
|
||||
* timer.
|
||||
*
|
||||
* This can be set to true it the hardware has a working vblank counter
|
||||
* with high-precision timestamping (otherwise there are races) and the
|
||||
* driver uses drm_crtc_vblank_on() and drm_crtc_vblank_off()
|
||||
* appropriately. See also @max_vblank_count and
|
||||
* &drm_crtc_funcs.get_vblank_counter.
|
||||
*/
|
||||
bool vblank_disable_immediate;
|
||||
|
||||
/**
|
||||
* @vblank:
|
||||
*
|
||||
* Array of vblank tracking structures, one per &struct drm_crtc. For
|
||||
* historical reasons (vblank support predates kernel modesetting) this
|
||||
* is free-standing and not part of &struct drm_crtc itself. It must be
|
||||
* initialized explicitly by calling drm_vblank_init().
|
||||
*/
|
||||
struct drm_vblank_crtc *vblank;
|
||||
|
||||
spinlock_t vblank_time_lock; /**< Protects vblank count and time updates during vblank enable/disable */
|
||||
spinlock_t vbl_lock;
|
||||
|
||||
/**
|
||||
* @max_vblank_count:
|
||||
*
|
||||
* Maximum value of the vblank registers. This value +1 will result in a
|
||||
* wrap-around of the vblank register. It is used by the vblank core to
|
||||
* handle wrap-arounds.
|
||||
*
|
||||
* If set to zero the vblank core will try to guess the elapsed vblanks
|
||||
* between times when the vblank interrupt is disabled through
|
||||
* high-precision timestamps. That approach is suffering from small
|
||||
* races and imprecision over longer time periods, hence exposing a
|
||||
* hardware vblank counter is always recommended.
|
||||
*
|
||||
* If non-zeor, &drm_crtc_funcs.get_vblank_counter must be set.
|
||||
*/
|
||||
u32 max_vblank_count; /**< size of vblank counter register */
|
||||
|
||||
/**
|
||||
* List of events
|
||||
*/
|
||||
struct list_head vblank_event_list;
|
||||
spinlock_t event_lock;
|
||||
|
||||
/*@} */
|
||||
|
||||
struct drm_agp_head *agp; /**< AGP data */
|
||||
|
||||
struct pci_dev *pdev; /**< PCI device structure */
|
||||
#ifdef __alpha__
|
||||
struct pci_controller *hose;
|
||||
#endif
|
||||
|
||||
struct drm_sg_mem *sg; /**< Scatter gather memory */
|
||||
unsigned int num_crtcs; /**< Number of CRTCs on this device */
|
||||
|
||||
struct {
|
||||
int context;
|
||||
struct drm_hw_lock *lock;
|
||||
} sigdata;
|
||||
|
||||
struct drm_local_map *agp_buffer_map;
|
||||
unsigned int agp_buffer_token;
|
||||
|
||||
struct drm_mode_config mode_config; /**< Current mode config */
|
||||
|
||||
/** \name GEM information */
|
||||
/*@{ */
|
||||
struct mutex object_name_lock;
|
||||
struct idr object_name_idr;
|
||||
struct drm_vma_offset_manager *vma_offset_manager;
|
||||
/*@} */
|
||||
int switch_power_state;
|
||||
};
|
||||
|
||||
/**
|
||||
* drm_drv_uses_atomic_modeset - check if the driver implements
|
||||
* atomic_commit()
|
||||
|
|
@ -493,19 +320,6 @@ static __inline__ int drm_core_check_feature(struct drm_device *dev,
|
|||
return ((dev->driver->driver_features & feature) ? 1 : 0);
|
||||
}
|
||||
|
||||
static inline void drm_device_set_unplugged(struct drm_device *dev)
|
||||
{
|
||||
smp_wmb();
|
||||
atomic_set(&dev->unplugged, 1);
|
||||
}
|
||||
|
||||
static inline int drm_device_is_unplugged(struct drm_device *dev)
|
||||
{
|
||||
int ret = atomic_read(&dev->unplugged);
|
||||
smp_rmb();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
/** \name Internal function definitions */
|
||||
/*@{*/
|
||||
|
|
|
|||
190
include/drm/drm_device.h
Normal file
190
include/drm/drm_device.h
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
#ifndef _DRM_DEVICE_H_
|
||||
#define _DRM_DEVICE_H_
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/idr.h>
|
||||
|
||||
#include <drm/drm_hashtab.h>
|
||||
#include <drm/drm_mode_config.h>
|
||||
|
||||
struct drm_driver;
|
||||
struct drm_minor;
|
||||
struct drm_master;
|
||||
struct drm_device_dma;
|
||||
struct drm_vblank_crtc;
|
||||
struct drm_sg_mem;
|
||||
struct drm_local_map;
|
||||
struct drm_vma_offset_manager;
|
||||
|
||||
struct inode;
|
||||
|
||||
struct pci_dev;
|
||||
struct pci_controller;
|
||||
|
||||
/**
|
||||
* DRM device structure. This structure represent a complete card that
|
||||
* may contain multiple heads.
|
||||
*/
|
||||
struct drm_device {
|
||||
struct list_head legacy_dev_list;/**< list of devices per driver for stealth attach cleanup */
|
||||
int if_version; /**< Highest interface version set */
|
||||
|
||||
/** \name Lifetime Management */
|
||||
/*@{ */
|
||||
struct kref ref; /**< Object ref-count */
|
||||
struct device *dev; /**< Device structure of bus-device */
|
||||
struct drm_driver *driver; /**< DRM driver managing the device */
|
||||
void *dev_private; /**< DRM driver private data */
|
||||
struct drm_minor *control; /**< Control node */
|
||||
struct drm_minor *primary; /**< Primary node */
|
||||
struct drm_minor *render; /**< Render node */
|
||||
bool registered;
|
||||
|
||||
/* currently active master for this device. Protected by master_mutex */
|
||||
struct drm_master *master;
|
||||
|
||||
atomic_t unplugged; /**< Flag whether dev is dead */
|
||||
struct inode *anon_inode; /**< inode for private address-space */
|
||||
char *unique; /**< unique name of the device */
|
||||
/*@} */
|
||||
|
||||
/** \name Locks */
|
||||
/*@{ */
|
||||
struct mutex struct_mutex; /**< For others */
|
||||
struct mutex master_mutex; /**< For drm_minor::master and drm_file::is_master */
|
||||
/*@} */
|
||||
|
||||
/** \name Usage Counters */
|
||||
/*@{ */
|
||||
int open_count; /**< Outstanding files open, protected by drm_global_mutex. */
|
||||
spinlock_t buf_lock; /**< For drm_device::buf_use and a few other things. */
|
||||
int buf_use; /**< Buffers in use -- cannot alloc */
|
||||
atomic_t buf_alloc; /**< Buffer allocation in progress */
|
||||
/*@} */
|
||||
|
||||
struct mutex filelist_mutex;
|
||||
struct list_head filelist;
|
||||
|
||||
/** \name Memory management */
|
||||
/*@{ */
|
||||
struct list_head maplist; /**< Linked list of regions */
|
||||
struct drm_open_hash map_hash; /**< User token hash table for maps */
|
||||
|
||||
/** \name Context handle management */
|
||||
/*@{ */
|
||||
struct list_head ctxlist; /**< Linked list of context handles */
|
||||
struct mutex ctxlist_mutex; /**< For ctxlist */
|
||||
|
||||
struct idr ctx_idr;
|
||||
|
||||
struct list_head vmalist; /**< List of vmas (for debugging) */
|
||||
|
||||
/*@} */
|
||||
|
||||
/** \name DMA support */
|
||||
/*@{ */
|
||||
struct drm_device_dma *dma; /**< Optional pointer for DMA support */
|
||||
/*@} */
|
||||
|
||||
/** \name Context support */
|
||||
/*@{ */
|
||||
|
||||
__volatile__ long context_flag; /**< Context swapping flag */
|
||||
int last_context; /**< Last current context */
|
||||
/*@} */
|
||||
|
||||
/**
|
||||
* @irq_enabled:
|
||||
*
|
||||
* Indicates that interrupt handling is enabled, specifically vblank
|
||||
* handling. Drivers which don't use drm_irq_install() need to set this
|
||||
* to true manually.
|
||||
*/
|
||||
bool irq_enabled;
|
||||
int irq;
|
||||
|
||||
/**
|
||||
* @vblank_disable_immediate:
|
||||
*
|
||||
* If true, vblank interrupt will be disabled immediately when the
|
||||
* refcount drops to zero, as opposed to via the vblank disable
|
||||
* timer.
|
||||
*
|
||||
* This can be set to true it the hardware has a working vblank counter
|
||||
* with high-precision timestamping (otherwise there are races) and the
|
||||
* driver uses drm_crtc_vblank_on() and drm_crtc_vblank_off()
|
||||
* appropriately. See also @max_vblank_count and
|
||||
* &drm_crtc_funcs.get_vblank_counter.
|
||||
*/
|
||||
bool vblank_disable_immediate;
|
||||
|
||||
/**
|
||||
* @vblank:
|
||||
*
|
||||
* Array of vblank tracking structures, one per &struct drm_crtc. For
|
||||
* historical reasons (vblank support predates kernel modesetting) this
|
||||
* is free-standing and not part of &struct drm_crtc itself. It must be
|
||||
* initialized explicitly by calling drm_vblank_init().
|
||||
*/
|
||||
struct drm_vblank_crtc *vblank;
|
||||
|
||||
spinlock_t vblank_time_lock; /**< Protects vblank count and time updates during vblank enable/disable */
|
||||
spinlock_t vbl_lock;
|
||||
|
||||
/**
|
||||
* @max_vblank_count:
|
||||
*
|
||||
* Maximum value of the vblank registers. This value +1 will result in a
|
||||
* wrap-around of the vblank register. It is used by the vblank core to
|
||||
* handle wrap-arounds.
|
||||
*
|
||||
* If set to zero the vblank core will try to guess the elapsed vblanks
|
||||
* between times when the vblank interrupt is disabled through
|
||||
* high-precision timestamps. That approach is suffering from small
|
||||
* races and imprecision over longer time periods, hence exposing a
|
||||
* hardware vblank counter is always recommended.
|
||||
*
|
||||
* If non-zeor, &drm_crtc_funcs.get_vblank_counter must be set.
|
||||
*/
|
||||
u32 max_vblank_count; /**< size of vblank counter register */
|
||||
|
||||
/**
|
||||
* List of events
|
||||
*/
|
||||
struct list_head vblank_event_list;
|
||||
spinlock_t event_lock;
|
||||
|
||||
/*@} */
|
||||
|
||||
struct drm_agp_head *agp; /**< AGP data */
|
||||
|
||||
struct pci_dev *pdev; /**< PCI device structure */
|
||||
#ifdef __alpha__
|
||||
struct pci_controller *hose;
|
||||
#endif
|
||||
|
||||
struct drm_sg_mem *sg; /**< Scatter gather memory */
|
||||
unsigned int num_crtcs; /**< Number of CRTCs on this device */
|
||||
|
||||
struct {
|
||||
int context;
|
||||
struct drm_hw_lock *lock;
|
||||
} sigdata;
|
||||
|
||||
struct drm_local_map *agp_buffer_map;
|
||||
unsigned int agp_buffer_token;
|
||||
|
||||
struct drm_mode_config mode_config; /**< Current mode config */
|
||||
|
||||
/** \name GEM information */
|
||||
/*@{ */
|
||||
struct mutex object_name_lock;
|
||||
struct idr object_name_idr;
|
||||
struct drm_vma_offset_manager *vma_offset_manager;
|
||||
/*@} */
|
||||
int switch_power_state;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -30,7 +30,8 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/irqreturn.h>
|
||||
|
||||
struct drm_device;
|
||||
#include <drm/drm_device.h>
|
||||
|
||||
struct drm_file;
|
||||
struct drm_gem_object;
|
||||
struct drm_master;
|
||||
|
|
@ -613,7 +614,24 @@ void drm_dev_unregister(struct drm_device *dev);
|
|||
void drm_dev_ref(struct drm_device *dev);
|
||||
void drm_dev_unref(struct drm_device *dev);
|
||||
void drm_put_dev(struct drm_device *dev);
|
||||
void drm_unplug_dev(struct drm_device *dev);
|
||||
void drm_dev_unplug(struct drm_device *dev);
|
||||
|
||||
/**
|
||||
* drm_dev_is_unplugged - is a DRM device unplugged
|
||||
* @dev: DRM device
|
||||
*
|
||||
* This function can be called to check whether a hotpluggable is unplugged.
|
||||
* Unplugging itself is singalled through drm_dev_unplug(). If a device is
|
||||
* unplugged, these two functions guarantee that any store before calling
|
||||
* drm_dev_unplug() is visible to callers of this function after it completes
|
||||
*/
|
||||
static inline int drm_dev_is_unplugged(struct drm_device *dev)
|
||||
{
|
||||
int ret = atomic_read(&dev->unplugged);
|
||||
smp_rmb();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int drm_dev_set_unique(struct drm_device *dev, const char *name);
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,13 @@ struct drm_framebuffer {
|
|||
* @filp_head: Placed on &drm_file.fbs, protected by &drm_file.fbs_lock.
|
||||
*/
|
||||
struct list_head filp_head;
|
||||
/**
|
||||
* @obj: GEM objects backing the framebuffer, one per plane (optional).
|
||||
*
|
||||
* This is used by the GEM framebuffer helpers, see e.g.
|
||||
* drm_gem_fb_create().
|
||||
*/
|
||||
struct drm_gem_object *obj[4];
|
||||
};
|
||||
|
||||
#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
|
||||
|
|
|
|||
|
|
@ -73,11 +73,6 @@ int drm_gem_cma_dumb_create(struct drm_file *file_priv,
|
|||
struct drm_device *drm,
|
||||
struct drm_mode_create_dumb *args);
|
||||
|
||||
/* map memory region for DRM framebuffer to user space */
|
||||
int drm_gem_cma_dumb_map_offset(struct drm_file *file_priv,
|
||||
struct drm_device *drm, u32 handle,
|
||||
u64 *offset);
|
||||
|
||||
/* set vm_flags and we can change the VM attribute to other one at here */
|
||||
int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
|
||||
|
||||
|
|
|
|||
37
include/drm/drm_gem_framebuffer_helper.h
Normal file
37
include/drm/drm_gem_framebuffer_helper.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef __DRM_GEM_FB_HELPER_H__
|
||||
#define __DRM_GEM_FB_HELPER_H__
|
||||
|
||||
struct drm_device;
|
||||
struct drm_file;
|
||||
struct drm_fb_helper_surface_size;
|
||||
struct drm_framebuffer;
|
||||
struct drm_framebuffer_funcs;
|
||||
struct drm_gem_object;
|
||||
struct drm_mode_fb_cmd2;
|
||||
struct drm_plane;
|
||||
struct drm_plane_state;
|
||||
|
||||
struct drm_gem_object *drm_gem_fb_get_obj(struct drm_framebuffer *fb,
|
||||
unsigned int plane);
|
||||
void drm_gem_fb_destroy(struct drm_framebuffer *fb);
|
||||
int drm_gem_fb_create_handle(struct drm_framebuffer *fb, struct drm_file *file,
|
||||
unsigned int *handle);
|
||||
|
||||
struct drm_framebuffer *
|
||||
drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
const struct drm_framebuffer_funcs *funcs);
|
||||
struct drm_framebuffer *
|
||||
drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd);
|
||||
|
||||
int drm_gem_fb_prepare_fb(struct drm_plane *plane,
|
||||
struct drm_plane_state *state);
|
||||
|
||||
struct drm_framebuffer *
|
||||
drm_gem_fbdev_fb_create(struct drm_device *dev,
|
||||
struct drm_fb_helper_surface_size *sizes,
|
||||
unsigned int pitch_align, struct drm_gem_object *obj,
|
||||
const struct drm_framebuffer_funcs *funcs);
|
||||
|
||||
#endif
|
||||
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
#include "linux/dma-fence.h"
|
||||
|
||||
struct drm_syncobj_cb;
|
||||
|
||||
/**
|
||||
* struct drm_syncobj - sync object.
|
||||
*
|
||||
|
|
@ -43,8 +45,21 @@ struct drm_syncobj {
|
|||
/**
|
||||
* @fence:
|
||||
* NULL or a pointer to the fence bound to this object.
|
||||
*
|
||||
* This field should not be used directly. Use drm_syncobj_fence_get
|
||||
* and drm_syncobj_replace_fence instead.
|
||||
*/
|
||||
struct dma_fence *fence;
|
||||
/**
|
||||
* @cb_list:
|
||||
* List of callbacks to call when the fence gets replaced
|
||||
*/
|
||||
struct list_head cb_list;
|
||||
/**
|
||||
* @lock:
|
||||
* locks cb_list and write-locks fence.
|
||||
*/
|
||||
spinlock_t lock;
|
||||
/**
|
||||
* @file:
|
||||
* a file backing for this syncobj.
|
||||
|
|
@ -52,6 +67,25 @@ struct drm_syncobj {
|
|||
struct file *file;
|
||||
};
|
||||
|
||||
typedef void (*drm_syncobj_func_t)(struct drm_syncobj *syncobj,
|
||||
struct drm_syncobj_cb *cb);
|
||||
|
||||
/**
|
||||
* struct drm_syncobj_cb - callback for drm_syncobj_add_callback
|
||||
* @node: used by drm_syncob_add_callback to append this struct to
|
||||
* syncobj::cb_list
|
||||
* @func: drm_syncobj_func_t to call
|
||||
*
|
||||
* This struct will be initialized by drm_syncobj_add_callback, additional
|
||||
* data can be passed along by embedding drm_syncobj_cb in another struct.
|
||||
* The callback will get called the next time drm_syncobj_replace_fence is
|
||||
* called.
|
||||
*/
|
||||
struct drm_syncobj_cb {
|
||||
struct list_head node;
|
||||
drm_syncobj_func_t func;
|
||||
};
|
||||
|
||||
void drm_syncobj_free(struct kref *kref);
|
||||
|
||||
/**
|
||||
|
|
@ -77,13 +111,30 @@ drm_syncobj_put(struct drm_syncobj *obj)
|
|||
kref_put(&obj->refcount, drm_syncobj_free);
|
||||
}
|
||||
|
||||
static inline struct dma_fence *
|
||||
drm_syncobj_fence_get(struct drm_syncobj *syncobj)
|
||||
{
|
||||
struct dma_fence *fence;
|
||||
|
||||
rcu_read_lock();
|
||||
fence = dma_fence_get_rcu_safe(&syncobj->fence);
|
||||
rcu_read_unlock();
|
||||
|
||||
return fence;
|
||||
}
|
||||
|
||||
struct drm_syncobj *drm_syncobj_find(struct drm_file *file_private,
|
||||
u32 handle);
|
||||
void drm_syncobj_add_callback(struct drm_syncobj *syncobj,
|
||||
struct drm_syncobj_cb *cb,
|
||||
drm_syncobj_func_t func);
|
||||
void drm_syncobj_remove_callback(struct drm_syncobj *syncobj,
|
||||
struct drm_syncobj_cb *cb);
|
||||
void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,
|
||||
struct dma_fence *fence);
|
||||
int drm_syncobj_fence_get(struct drm_file *file_private,
|
||||
u32 handle,
|
||||
struct dma_fence **fence);
|
||||
int drm_syncobj_find_fence(struct drm_file *file_private,
|
||||
u32 handle,
|
||||
struct dma_fence **fence);
|
||||
void drm_syncobj_free(struct kref *kref);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@ void tinydrm_swab16(u16 *dst, void *vaddr, struct drm_framebuffer *fb,
|
|||
void tinydrm_xrgb8888_to_rgb565(u16 *dst, void *vaddr,
|
||||
struct drm_framebuffer *fb,
|
||||
struct drm_clip_rect *clip, bool swap);
|
||||
int tinydrm_xrgb8888_to_gray8(u8 *dst, struct drm_framebuffer *fb);
|
||||
void tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb,
|
||||
struct drm_clip_rect *clip);
|
||||
|
||||
struct backlight_device *tinydrm_of_find_backlight(struct device *dev);
|
||||
int tinydrm_enable_backlight(struct backlight_device *backlight);
|
||||
|
|
|
|||
|
|
@ -229,13 +229,14 @@ struct ttm_mem_type_manager_func {
|
|||
* struct ttm_mem_type_manager member debug
|
||||
*
|
||||
* @man: Pointer to a memory type manager.
|
||||
* @prefix: Prefix to be used in printout to identify the caller.
|
||||
* @printer: Prefix to be used in printout to identify the caller.
|
||||
*
|
||||
* This function is called to print out the state of the memory
|
||||
* type manager to aid debugging of out-of-memory conditions.
|
||||
* It may not be called from within atomic context.
|
||||
*/
|
||||
void (*debug)(struct ttm_mem_type_manager *man, const char *prefix);
|
||||
void (*debug)(struct ttm_mem_type_manager *man,
|
||||
struct drm_printer *printer);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue