mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-26 06:33:19 -04:00
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie:
"Been a bit busy, first week of kids school, and waiting on other trees
to go in before I could send this, so its a bit later than I'd
normally like.
Highlights:
- core:
timestamp fixes, lots of misc cleanups
- new drivers:
bochs virtual vga
- vmwgfx:
major overhaul for their nextgen virt gpu.
- i915:
runtime D3 on HSW, watermark fixes, power well work, fbc fixes,
bdw is no longer prelim.
- nouveau:
gk110/208 acceleration, more pm groundwork, old overlay support
- radeon:
dpm rework and clockgating for CIK, pci config reset, big endian
fixes
- tegra:
panel support and DSI support, build as module, prime.
- armada, omap, gma500, rcar, exynos, mgag200, cirrus, ast:
fixes
- msm:
hdmi support for mdp5"
* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (595 commits)
drm/nouveau: resume display if any later suspend bits fail
drm/nouveau: fix lock unbalance in nouveau_crtc_page_flip
drm/nouveau: implement hooks for needed for drm vblank timestamping support
drm/nouveau/disp: add a method to fetch info needed by drm vblank timestamping
drm/nv50: fill in crtc mode struct members from crtc_mode_fixup
drm/radeon/dce8: workaround for atom BlankCrtc table
drm/radeon/DCE4+: clear bios scratch dpms bit (v2)
drm/radeon: set si_notify_smc_display_change properly
drm/radeon: fix DAC interrupt handling on DCE5+
drm/radeon: clean up active vram sizing
drm/radeon: skip async dma init on r6xx
drm/radeon/runpm: don't runtime suspend non-PX cards
drm/radeon: add ring to fence trace functions
drm/radeon: add missing trace point
drm/radeon: fix VMID use tracking
drm: ast,cirrus,mgag200: use drm_can_sleep
drm/gma500: Lock struct_mutex around cursor updates
drm/i915: Fix the offset issue for the stolen GEM objects
DRM: armada: fix missing DRM_KMS_FB_HELPER select
drm/i915: Decouple GPU error reporting from ring initialisation
...
This commit is contained in:
commit
9b0cd304f2
512 changed files with 35539 additions and 11886 deletions
|
|
@ -56,6 +56,7 @@
|
|||
#include <linux/mutex.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/ratelimit.h>
|
||||
#if defined(__alpha__) || defined(__powerpc__)
|
||||
#include <asm/pgtable.h> /* For pte_wrprotect */
|
||||
#endif
|
||||
|
|
@ -136,7 +137,6 @@ int drm_err(const char *func, const char *format, ...);
|
|||
|
||||
/* driver capabilities and requirements mask */
|
||||
#define DRIVER_USE_AGP 0x1
|
||||
#define DRIVER_REQUIRE_AGP 0x2
|
||||
#define DRIVER_PCI_DMA 0x8
|
||||
#define DRIVER_SG 0x10
|
||||
#define DRIVER_HAVE_DMA 0x20
|
||||
|
|
@ -180,6 +180,22 @@ int drm_err(const char *func, const char *format, ...);
|
|||
#define DRM_ERROR(fmt, ...) \
|
||||
drm_err(__func__, fmt, ##__VA_ARGS__)
|
||||
|
||||
/**
|
||||
* Rate limited error output. Like DRM_ERROR() but won't flood the log.
|
||||
*
|
||||
* \param fmt printf() like format string.
|
||||
* \param arg arguments
|
||||
*/
|
||||
#define DRM_ERROR_RATELIMITED(fmt, ...) \
|
||||
({ \
|
||||
static DEFINE_RATELIMIT_STATE(_rs, \
|
||||
DEFAULT_RATELIMIT_INTERVAL, \
|
||||
DEFAULT_RATELIMIT_BURST); \
|
||||
\
|
||||
if (__ratelimit(&_rs)) \
|
||||
drm_err(__func__, fmt, ##__VA_ARGS__); \
|
||||
})
|
||||
|
||||
#define DRM_INFO(fmt, ...) \
|
||||
printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
|
||||
|
||||
|
|
@ -422,7 +438,6 @@ struct drm_file {
|
|||
struct pid *pid;
|
||||
kuid_t uid;
|
||||
drm_magic_t magic;
|
||||
unsigned long ioctl_count;
|
||||
struct list_head lhead;
|
||||
struct drm_minor *minor;
|
||||
unsigned long lock_count;
|
||||
|
|
@ -511,7 +526,7 @@ struct drm_device_dma {
|
|||
*/
|
||||
struct drm_agp_mem {
|
||||
unsigned long handle; /**< handle */
|
||||
DRM_AGP_MEM *memory;
|
||||
struct agp_memory *memory;
|
||||
unsigned long bound; /**< address */
|
||||
int pages;
|
||||
struct list_head head;
|
||||
|
|
@ -523,7 +538,7 @@ struct drm_agp_mem {
|
|||
* \sa drm_agp_init() and drm_device::agp.
|
||||
*/
|
||||
struct drm_agp_head {
|
||||
DRM_AGP_KERN agp_info; /**< AGP device information */
|
||||
struct agp_kern_info agp_info; /**< AGP device information */
|
||||
struct list_head memory;
|
||||
unsigned long mode; /**< AGP mode */
|
||||
struct agp_bridge_data *bridge;
|
||||
|
|
@ -606,13 +621,6 @@ struct drm_ati_pcigart_info {
|
|||
int table_size;
|
||||
};
|
||||
|
||||
/**
|
||||
* GEM specific mm private for tracking GEM objects
|
||||
*/
|
||||
struct drm_gem_mm {
|
||||
struct drm_vma_offset_manager vma_manager;
|
||||
};
|
||||
|
||||
/**
|
||||
* This structure defines the drm_mm memory object, which will be used by the
|
||||
* DRM for its buffer objects.
|
||||
|
|
@ -750,10 +758,6 @@ struct drm_bus {
|
|||
int (*set_unique)(struct drm_device *dev, struct drm_master *master,
|
||||
struct drm_unique *unique);
|
||||
int (*irq_by_busid)(struct drm_device *dev, struct drm_irq_busid *p);
|
||||
/* hooks that are for PCI */
|
||||
int (*agp_init)(struct drm_device *dev);
|
||||
void (*agp_destroy)(struct drm_device *dev);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -841,6 +845,7 @@ struct drm_driver {
|
|||
*
|
||||
* \param dev DRM device.
|
||||
* \param crtc Id of the crtc to query.
|
||||
* \param flags Flags from the caller (DRM_CALLED_FROM_VBLIRQ or 0).
|
||||
* \param *vpos Target location for current vertical scanout position.
|
||||
* \param *hpos Target location for current horizontal scanout position.
|
||||
* \param *stime Target location for timestamp taken immediately before
|
||||
|
|
@ -863,6 +868,7 @@ struct drm_driver {
|
|||
*
|
||||
*/
|
||||
int (*get_scanout_position) (struct drm_device *dev, int crtc,
|
||||
unsigned int flags,
|
||||
int *vpos, int *hpos, ktime_t *stime,
|
||||
ktime_t *etime);
|
||||
|
||||
|
|
@ -903,7 +909,7 @@ struct drm_driver {
|
|||
|
||||
/* these have to be filled in */
|
||||
|
||||
irqreturn_t(*irq_handler) (DRM_IRQ_ARGS);
|
||||
irqreturn_t(*irq_handler) (int irq, void *arg);
|
||||
void (*irq_preinstall) (struct drm_device *dev);
|
||||
int (*irq_postinstall) (struct drm_device *dev);
|
||||
void (*irq_uninstall) (struct drm_device *dev);
|
||||
|
|
@ -995,8 +1001,8 @@ struct drm_driver {
|
|||
} kdriver;
|
||||
struct drm_bus *bus;
|
||||
|
||||
/* List of devices hanging off this driver */
|
||||
struct list_head device_list;
|
||||
/* List of devices hanging off this driver with stealth attach. */
|
||||
struct list_head legacy_dev_list;
|
||||
};
|
||||
|
||||
#define DRM_MINOR_UNASSIGNED 0
|
||||
|
|
@ -1085,7 +1091,7 @@ struct drm_vblank_crtc {
|
|||
* may contain multiple heads.
|
||||
*/
|
||||
struct drm_device {
|
||||
struct list_head driver_item; /**< list of devices per driver */
|
||||
struct list_head legacy_dev_list;/**< list of devices per driver for stealth attach cleanup */
|
||||
char *devname; /**< For /proc/interrupts */
|
||||
int if_version; /**< Highest interface version set */
|
||||
|
||||
|
|
@ -1098,8 +1104,6 @@ struct drm_device {
|
|||
/** \name Usage Counters */
|
||||
/*@{ */
|
||||
int open_count; /**< Outstanding files open */
|
||||
atomic_t ioctl_count; /**< Outstanding IOCTLs pending */
|
||||
atomic_t vma_count; /**< Outstanding vma areas open */
|
||||
int buf_use; /**< Buffers in use -- cannot alloc */
|
||||
atomic_t buf_alloc; /**< Buffer allocation in progress */
|
||||
/*@} */
|
||||
|
|
@ -1176,7 +1180,6 @@ struct drm_device {
|
|||
struct drm_sg_mem *sg; /**< Scatter gather memory */
|
||||
unsigned int num_crtcs; /**< Number of CRTCs on this device */
|
||||
void *dev_private; /**< device private data */
|
||||
void *mm_private;
|
||||
struct address_space *dev_mapping;
|
||||
struct drm_sigdata sigdata; /**< For block_all_signals */
|
||||
sigset_t sigmask;
|
||||
|
|
@ -1194,6 +1197,7 @@ struct drm_device {
|
|||
/*@{ */
|
||||
struct mutex object_name_lock;
|
||||
struct idr object_name_idr;
|
||||
struct drm_vma_offset_manager *vma_offset_manager;
|
||||
/*@} */
|
||||
int switch_power_state;
|
||||
|
||||
|
|
@ -1268,6 +1272,7 @@ extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
|
|||
/* Memory management support (drm_memory.h) */
|
||||
#include <drm/drm_memory.h>
|
||||
|
||||
|
||||
/* Misc. IOCTL support (drm_ioctl.h) */
|
||||
extern int drm_irq_by_busid(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
|
|
@ -1398,8 +1403,10 @@ extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
|
|||
int crtc, int *max_error,
|
||||
struct timeval *vblank_time,
|
||||
unsigned flags,
|
||||
struct drm_crtc *refcrtc);
|
||||
extern void drm_calc_timestamping_constants(struct drm_crtc *crtc);
|
||||
const struct drm_crtc *refcrtc,
|
||||
const struct drm_display_mode *mode);
|
||||
extern void drm_calc_timestamping_constants(struct drm_crtc *crtc,
|
||||
const struct drm_display_mode *mode);
|
||||
|
||||
extern bool
|
||||
drm_mode_parse_command_line_for_connector(const char *mode_option,
|
||||
|
|
@ -1461,6 +1468,30 @@ extern int drm_debugfs_create_files(const struct drm_info_list *files,
|
|||
extern int drm_debugfs_remove_files(const struct drm_info_list *files,
|
||||
int count, struct drm_minor *minor);
|
||||
extern int drm_debugfs_cleanup(struct drm_minor *minor);
|
||||
#else
|
||||
static inline int drm_debugfs_init(struct drm_minor *minor, int minor_id,
|
||||
struct dentry *root)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int drm_debugfs_create_files(const struct drm_info_list *files,
|
||||
int count, struct dentry *root,
|
||||
struct drm_minor *minor)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
|
||||
int count, struct drm_minor *minor)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int drm_debugfs_cleanup(struct drm_minor *minor)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Info file support */
|
||||
|
|
@ -1645,6 +1676,7 @@ static __inline__ int drm_pci_device_is_agp(struct drm_device *dev)
|
|||
|
||||
return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
|
||||
}
|
||||
void drm_pci_agp_destroy(struct drm_device *dev);
|
||||
|
||||
extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
|
||||
extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
|
||||
|
|
@ -1660,7 +1692,6 @@ extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask);
|
|||
|
||||
/* platform section */
|
||||
extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device);
|
||||
extern void drm_platform_exit(struct drm_driver *driver, struct platform_device *platform_device);
|
||||
|
||||
/* returns true if currently okay to sleep */
|
||||
static __inline__ bool drm_can_sleep(void)
|
||||
|
|
|
|||
|
|
@ -10,17 +10,16 @@
|
|||
|
||||
#if __OS_HAS_AGP
|
||||
|
||||
void drm_free_agp(DRM_AGP_MEM * handle, int pages);
|
||||
int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
|
||||
int drm_unbind_agp(DRM_AGP_MEM * handle);
|
||||
DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
|
||||
void drm_free_agp(struct agp_memory * handle, int pages);
|
||||
int drm_bind_agp(struct agp_memory * handle, unsigned int start);
|
||||
int drm_unbind_agp(struct agp_memory * handle);
|
||||
struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
|
||||
struct page **pages,
|
||||
unsigned long num_pages,
|
||||
uint32_t gtt_offset,
|
||||
uint32_t type);
|
||||
|
||||
struct drm_agp_head *drm_agp_init(struct drm_device *dev);
|
||||
void drm_agp_destroy(struct drm_agp_head *agp);
|
||||
void drm_agp_clear(struct drm_device *dev);
|
||||
int drm_agp_acquire(struct drm_device *dev);
|
||||
int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
|
||||
|
|
@ -46,29 +45,23 @@ int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
|
|||
int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
|
||||
int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
static inline int drm_core_has_AGP(struct drm_device *dev)
|
||||
{
|
||||
return drm_core_check_feature(dev, DRIVER_USE_AGP);
|
||||
}
|
||||
|
||||
#else /* __OS_HAS_AGP */
|
||||
|
||||
static inline void drm_free_agp(DRM_AGP_MEM * handle, int pages)
|
||||
static inline void drm_free_agp(struct agp_memory * handle, int pages)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start)
|
||||
static inline int drm_bind_agp(struct agp_memory * handle, unsigned int start)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int drm_unbind_agp(DRM_AGP_MEM * handle)
|
||||
static inline int drm_unbind_agp(struct agp_memory * handle)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
|
||||
static inline struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
|
||||
struct page **pages,
|
||||
unsigned long num_pages,
|
||||
uint32_t gtt_offset,
|
||||
|
|
@ -82,10 +75,6 @@ static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline void drm_agp_destroy(struct drm_agp_head *agp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void drm_agp_clear(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
|
@ -183,12 +172,6 @@ static inline int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
|
|||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int drm_core_has_AGP(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* __OS_HAS_AGP */
|
||||
|
||||
#endif /* _DRM_AGPSUPPORT_H_ */
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/hdmi.h>
|
||||
#include <drm/drm_mode.h>
|
||||
|
||||
#include <drm/drm_fourcc.h>
|
||||
|
|
@ -181,6 +182,7 @@ struct drm_display_mode {
|
|||
|
||||
int vrefresh; /* in Hz */
|
||||
int hsync; /* in kHz */
|
||||
enum hdmi_picture_aspect picture_aspect_ratio;
|
||||
};
|
||||
|
||||
static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode)
|
||||
|
|
@ -447,7 +449,7 @@ struct drm_crtc {
|
|||
uint16_t *gamma_store;
|
||||
|
||||
/* Constants needed for precise vblank and swap timestamping. */
|
||||
s64 framedur_ns, linedur_ns, pixeldur_ns;
|
||||
int framedur_ns, linedur_ns, pixeldur_ns;
|
||||
|
||||
/* if you are using the helper */
|
||||
void *helper_private;
|
||||
|
|
@ -929,6 +931,19 @@ extern int drm_crtc_init(struct drm_device *dev,
|
|||
struct drm_crtc *crtc,
|
||||
const struct drm_crtc_funcs *funcs);
|
||||
extern void drm_crtc_cleanup(struct drm_crtc *crtc);
|
||||
extern unsigned int drm_crtc_index(struct drm_crtc *crtc);
|
||||
|
||||
/**
|
||||
* drm_crtc_mask - find the mask of a registered CRTC
|
||||
* @crtc: CRTC to find mask for
|
||||
*
|
||||
* Given a registered CRTC, return the mask bit of that CRTC for an
|
||||
* encoder's possible_crtcs field.
|
||||
*/
|
||||
static inline uint32_t drm_crtc_mask(struct drm_crtc *crtc)
|
||||
{
|
||||
return 1 << drm_crtc_index(crtc);
|
||||
}
|
||||
|
||||
extern void drm_connector_ida_init(void);
|
||||
extern void drm_connector_ida_destroy(void);
|
||||
|
|
@ -950,6 +965,19 @@ extern int drm_encoder_init(struct drm_device *dev,
|
|||
const struct drm_encoder_funcs *funcs,
|
||||
int encoder_type);
|
||||
|
||||
/**
|
||||
* drm_encoder_crtc_ok - can a given crtc drive a given encoder?
|
||||
* @encoder: encoder to test
|
||||
* @crtc: crtc to test
|
||||
*
|
||||
* Return false if @encoder can't be driven by @crtc, true otherwise.
|
||||
*/
|
||||
static inline bool drm_encoder_crtc_ok(struct drm_encoder *encoder,
|
||||
struct drm_crtc *crtc)
|
||||
{
|
||||
return !!(encoder->possible_crtcs & drm_crtc_mask(crtc));
|
||||
}
|
||||
|
||||
extern int drm_plane_init(struct drm_device *dev,
|
||||
struct drm_plane *plane,
|
||||
unsigned long possible_crtcs,
|
||||
|
|
|
|||
|
|
@ -120,8 +120,8 @@ struct drm_encoder_helper_funcs {
|
|||
*/
|
||||
struct drm_connector_helper_funcs {
|
||||
int (*get_modes)(struct drm_connector *connector);
|
||||
int (*mode_valid)(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode);
|
||||
enum drm_mode_status (*mode_valid)(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode);
|
||||
struct drm_encoder *(*best_encoder)(struct drm_connector *connector);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -41,22 +41,22 @@
|
|||
* 1.2 formally includes both eDP and DPI definitions.
|
||||
*/
|
||||
|
||||
#define AUX_NATIVE_WRITE 0x8
|
||||
#define AUX_NATIVE_READ 0x9
|
||||
#define AUX_I2C_WRITE 0x0
|
||||
#define AUX_I2C_READ 0x1
|
||||
#define AUX_I2C_STATUS 0x2
|
||||
#define AUX_I2C_MOT 0x4
|
||||
#define DP_AUX_I2C_WRITE 0x0
|
||||
#define DP_AUX_I2C_READ 0x1
|
||||
#define DP_AUX_I2C_STATUS 0x2
|
||||
#define DP_AUX_I2C_MOT 0x4
|
||||
#define DP_AUX_NATIVE_WRITE 0x8
|
||||
#define DP_AUX_NATIVE_READ 0x9
|
||||
|
||||
#define AUX_NATIVE_REPLY_ACK (0x0 << 4)
|
||||
#define AUX_NATIVE_REPLY_NACK (0x1 << 4)
|
||||
#define AUX_NATIVE_REPLY_DEFER (0x2 << 4)
|
||||
#define AUX_NATIVE_REPLY_MASK (0x3 << 4)
|
||||
#define DP_AUX_NATIVE_REPLY_ACK (0x0 << 0)
|
||||
#define DP_AUX_NATIVE_REPLY_NACK (0x1 << 0)
|
||||
#define DP_AUX_NATIVE_REPLY_DEFER (0x2 << 0)
|
||||
#define DP_AUX_NATIVE_REPLY_MASK (0x3 << 0)
|
||||
|
||||
#define AUX_I2C_REPLY_ACK (0x0 << 6)
|
||||
#define AUX_I2C_REPLY_NACK (0x1 << 6)
|
||||
#define AUX_I2C_REPLY_DEFER (0x2 << 6)
|
||||
#define AUX_I2C_REPLY_MASK (0x3 << 6)
|
||||
#define DP_AUX_I2C_REPLY_ACK (0x0 << 2)
|
||||
#define DP_AUX_I2C_REPLY_NACK (0x1 << 2)
|
||||
#define DP_AUX_I2C_REPLY_DEFER (0x2 << 2)
|
||||
#define DP_AUX_I2C_REPLY_MASK (0x3 << 2)
|
||||
|
||||
/* AUX CH addresses */
|
||||
/* DPCD */
|
||||
|
|
@ -266,9 +266,10 @@
|
|||
|
||||
#define DP_TEST_REQUEST 0x218
|
||||
# define DP_TEST_LINK_TRAINING (1 << 0)
|
||||
# define DP_TEST_LINK_PATTERN (1 << 1)
|
||||
# define DP_TEST_LINK_VIDEO_PATTERN (1 << 1)
|
||||
# define DP_TEST_LINK_EDID_READ (1 << 2)
|
||||
# define DP_TEST_LINK_PHY_TEST_PATTERN (1 << 3) /* DPCD >= 1.1 */
|
||||
# define DP_TEST_LINK_FAUX_PATTERN (1 << 4) /* DPCD >= 1.2 */
|
||||
|
||||
#define DP_TEST_LINK_RATE 0x219
|
||||
# define DP_LINK_RATE_162 (0x6)
|
||||
|
|
|
|||
158
include/drm/drm_mipi_dsi.h
Normal file
158
include/drm/drm_mipi_dsi.h
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
/*
|
||||
* MIPI DSI Bus
|
||||
*
|
||||
* Copyright (C) 2012-2013, Samsung Electronics, Co., Ltd.
|
||||
* Andrzej Hajda <a.hajda@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __DRM_MIPI_DSI_H__
|
||||
#define __DRM_MIPI_DSI_H__
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
struct mipi_dsi_host;
|
||||
struct mipi_dsi_device;
|
||||
|
||||
/**
|
||||
* struct mipi_dsi_msg - read/write DSI buffer
|
||||
* @channel: virtual channel id
|
||||
* @type: payload data type
|
||||
* @tx_len: length of @tx_buf
|
||||
* @tx_buf: data to be written
|
||||
* @rx_len: length of @rx_buf
|
||||
* @rx_buf: data to be read, or NULL
|
||||
*/
|
||||
struct mipi_dsi_msg {
|
||||
u8 channel;
|
||||
u8 type;
|
||||
|
||||
size_t tx_len;
|
||||
const void *tx_buf;
|
||||
|
||||
size_t rx_len;
|
||||
void *rx_buf;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mipi_dsi_host_ops - DSI bus operations
|
||||
* @attach: attach DSI device to DSI host
|
||||
* @detach: detach DSI device from DSI host
|
||||
* @transfer: send and/or receive DSI packet, return number of received bytes,
|
||||
* or error
|
||||
*/
|
||||
struct mipi_dsi_host_ops {
|
||||
int (*attach)(struct mipi_dsi_host *host,
|
||||
struct mipi_dsi_device *dsi);
|
||||
int (*detach)(struct mipi_dsi_host *host,
|
||||
struct mipi_dsi_device *dsi);
|
||||
ssize_t (*transfer)(struct mipi_dsi_host *host,
|
||||
struct mipi_dsi_msg *msg);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mipi_dsi_host - DSI host device
|
||||
* @dev: driver model device node for this DSI host
|
||||
* @ops: DSI host operations
|
||||
*/
|
||||
struct mipi_dsi_host {
|
||||
struct device *dev;
|
||||
const struct mipi_dsi_host_ops *ops;
|
||||
};
|
||||
|
||||
int mipi_dsi_host_register(struct mipi_dsi_host *host);
|
||||
void mipi_dsi_host_unregister(struct mipi_dsi_host *host);
|
||||
|
||||
/* DSI mode flags */
|
||||
|
||||
/* video mode */
|
||||
#define MIPI_DSI_MODE_VIDEO BIT(0)
|
||||
/* video burst mode */
|
||||
#define MIPI_DSI_MODE_VIDEO_BURST BIT(1)
|
||||
/* video pulse mode */
|
||||
#define MIPI_DSI_MODE_VIDEO_SYNC_PULSE BIT(2)
|
||||
/* enable auto vertical count mode */
|
||||
#define MIPI_DSI_MODE_VIDEO_AUTO_VERT BIT(3)
|
||||
/* enable hsync-end packets in vsync-pulse and v-porch area */
|
||||
#define MIPI_DSI_MODE_VIDEO_HSE BIT(4)
|
||||
/* disable hfront-porch area */
|
||||
#define MIPI_DSI_MODE_VIDEO_HFP BIT(5)
|
||||
/* disable hback-porch area */
|
||||
#define MIPI_DSI_MODE_VIDEO_HBP BIT(6)
|
||||
/* disable hsync-active area */
|
||||
#define MIPI_DSI_MODE_VIDEO_HSA BIT(7)
|
||||
/* flush display FIFO on vsync pulse */
|
||||
#define MIPI_DSI_MODE_VSYNC_FLUSH BIT(8)
|
||||
/* disable EoT packets in HS mode */
|
||||
#define MIPI_DSI_MODE_EOT_PACKET BIT(9)
|
||||
|
||||
enum mipi_dsi_pixel_format {
|
||||
MIPI_DSI_FMT_RGB888,
|
||||
MIPI_DSI_FMT_RGB666,
|
||||
MIPI_DSI_FMT_RGB666_PACKED,
|
||||
MIPI_DSI_FMT_RGB565,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mipi_dsi_device - DSI peripheral device
|
||||
* @host: DSI host for this peripheral
|
||||
* @dev: driver model device node for this peripheral
|
||||
* @channel: virtual channel assigned to the peripheral
|
||||
* @format: pixel format for video mode
|
||||
* @lanes: number of active data lanes
|
||||
* @mode_flags: DSI operation mode related flags
|
||||
*/
|
||||
struct mipi_dsi_device {
|
||||
struct mipi_dsi_host *host;
|
||||
struct device dev;
|
||||
|
||||
unsigned int channel;
|
||||
unsigned int lanes;
|
||||
enum mipi_dsi_pixel_format format;
|
||||
unsigned long mode_flags;
|
||||
};
|
||||
|
||||
#define to_mipi_dsi_device(d) container_of(d, struct mipi_dsi_device, dev)
|
||||
|
||||
int mipi_dsi_attach(struct mipi_dsi_device *dsi);
|
||||
int mipi_dsi_detach(struct mipi_dsi_device *dsi);
|
||||
int mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, unsigned int channel,
|
||||
const void *data, size_t len);
|
||||
ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, unsigned int channel,
|
||||
u8 cmd, void *data, size_t len);
|
||||
|
||||
/**
|
||||
* struct mipi_dsi_driver - DSI driver
|
||||
* @driver: device driver model driver
|
||||
* @probe: callback for device binding
|
||||
* @remove: callback for device unbinding
|
||||
*/
|
||||
struct mipi_dsi_driver {
|
||||
struct device_driver driver;
|
||||
int(*probe)(struct mipi_dsi_device *dsi);
|
||||
int(*remove)(struct mipi_dsi_device *dsi);
|
||||
};
|
||||
|
||||
#define to_mipi_dsi_driver(d) container_of(d, struct mipi_dsi_driver, driver)
|
||||
|
||||
static inline void *mipi_dsi_get_drvdata(const struct mipi_dsi_device *dsi)
|
||||
{
|
||||
return dev_get_drvdata(&dsi->dev);
|
||||
}
|
||||
|
||||
static inline void mipi_dsi_set_drvdata(struct mipi_dsi_device *dsi, void *data)
|
||||
{
|
||||
dev_set_drvdata(&dsi->dev, data);
|
||||
}
|
||||
|
||||
int mipi_dsi_driver_register(struct mipi_dsi_driver *driver);
|
||||
void mipi_dsi_driver_unregister(struct mipi_dsi_driver *driver);
|
||||
|
||||
#define module_mipi_dsi_driver(__mipi_dsi_driver) \
|
||||
module_driver(__mipi_dsi_driver, mipi_dsi_driver_register, \
|
||||
mipi_dsi_driver_unregister)
|
||||
|
||||
#endif /* __DRM_MIPI_DSI__ */
|
||||
|
|
@ -21,7 +21,6 @@ static inline void writeq(u64 val, void __iomem *reg)
|
|||
|
||||
/** Current process ID */
|
||||
#define DRM_CURRENTPID task_pid_nr(current)
|
||||
#define DRM_SUSER(p) capable(CAP_SYS_ADMIN)
|
||||
#define DRM_UDELAY(d) udelay(d)
|
||||
/** Read a byte from a MMIO region */
|
||||
#define DRM_READ8(map, offset) readb(((void __iomem *)(map)->handle) + (offset))
|
||||
|
|
@ -35,45 +34,12 @@ static inline void writeq(u64 val, void __iomem *reg)
|
|||
#define DRM_WRITE16(map, offset, val) writew(val, ((void __iomem *)(map)->handle) + (offset))
|
||||
/** Write a dword into a MMIO region */
|
||||
#define DRM_WRITE32(map, offset, val) writel(val, ((void __iomem *)(map)->handle) + (offset))
|
||||
/** Read memory barrier */
|
||||
|
||||
/** Read a qword from a MMIO region - be careful using these unless you really understand them */
|
||||
#define DRM_READ64(map, offset) readq(((void __iomem *)(map)->handle) + (offset))
|
||||
/** Write a qword into a MMIO region */
|
||||
#define DRM_WRITE64(map, offset, val) writeq(val, ((void __iomem *)(map)->handle) + (offset))
|
||||
|
||||
#define DRM_READMEMORYBARRIER() rmb()
|
||||
/** Write memory barrier */
|
||||
#define DRM_WRITEMEMORYBARRIER() wmb()
|
||||
/** Read/write memory barrier */
|
||||
#define DRM_MEMORYBARRIER() mb()
|
||||
|
||||
/** IRQ handler arguments and return type and values */
|
||||
#define DRM_IRQ_ARGS int irq, void *arg
|
||||
|
||||
/** AGP types */
|
||||
#if __OS_HAS_AGP
|
||||
#define DRM_AGP_MEM struct agp_memory
|
||||
#define DRM_AGP_KERN struct agp_kern_info
|
||||
#else
|
||||
/* define some dummy types for non AGP supporting kernels */
|
||||
struct no_agp_kern {
|
||||
unsigned long aper_base;
|
||||
unsigned long aper_size;
|
||||
};
|
||||
#define DRM_AGP_MEM int
|
||||
#define DRM_AGP_KERN struct no_agp_kern
|
||||
#endif
|
||||
|
||||
/** Other copying of data to kernel space */
|
||||
#define DRM_COPY_FROM_USER(arg1, arg2, arg3) \
|
||||
copy_from_user(arg1, arg2, arg3)
|
||||
/** Other copying of data from kernel space */
|
||||
#define DRM_COPY_TO_USER(arg1, arg2, arg3) \
|
||||
copy_to_user(arg1, arg2, arg3)
|
||||
|
||||
#define DRM_HZ HZ
|
||||
|
||||
#define DRM_WAIT_ON( ret, queue, timeout, condition ) \
|
||||
do { \
|
||||
DECLARE_WAITQUEUE(entry, current); \
|
||||
|
|
@ -97,6 +63,3 @@ do { \
|
|||
__set_current_state(TASK_RUNNING); \
|
||||
remove_wait_queue(&(queue), &entry); \
|
||||
} while (0)
|
||||
|
||||
#define DRM_WAKEUP( queue ) wake_up( queue )
|
||||
#define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue )
|
||||
|
|
|
|||
82
include/drm/drm_panel.h
Normal file
82
include/drm/drm_panel.h
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Copyright (C) 2013, NVIDIA Corporation. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sub license,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __DRM_PANEL_H__
|
||||
#define __DRM_PANEL_H__
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
struct drm_connector;
|
||||
struct drm_device;
|
||||
struct drm_panel;
|
||||
|
||||
struct drm_panel_funcs {
|
||||
int (*disable)(struct drm_panel *panel);
|
||||
int (*enable)(struct drm_panel *panel);
|
||||
int (*get_modes)(struct drm_panel *panel);
|
||||
};
|
||||
|
||||
struct drm_panel {
|
||||
struct drm_device *drm;
|
||||
struct drm_connector *connector;
|
||||
struct device *dev;
|
||||
|
||||
const struct drm_panel_funcs *funcs;
|
||||
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
static inline int drm_panel_disable(struct drm_panel *panel)
|
||||
{
|
||||
if (panel && panel->funcs && panel->funcs->disable)
|
||||
return panel->funcs->disable(panel);
|
||||
|
||||
return panel ? -ENOSYS : -EINVAL;
|
||||
}
|
||||
|
||||
static inline int drm_panel_enable(struct drm_panel *panel)
|
||||
{
|
||||
if (panel && panel->funcs && panel->funcs->enable)
|
||||
return panel->funcs->enable(panel);
|
||||
|
||||
return panel ? -ENOSYS : -EINVAL;
|
||||
}
|
||||
|
||||
void drm_panel_init(struct drm_panel *panel);
|
||||
|
||||
int drm_panel_add(struct drm_panel *panel);
|
||||
void drm_panel_remove(struct drm_panel *panel);
|
||||
|
||||
int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector);
|
||||
int drm_panel_detach(struct drm_panel *panel);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
struct drm_panel *of_drm_find_panel(struct device_node *np);
|
||||
#else
|
||||
static inline struct drm_panel *of_drm_find_panel(struct device_node *np)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
@ -681,6 +681,15 @@ extern int ttm_tt_set_placement_caching(struct ttm_tt *ttm, uint32_t placement);
|
|||
extern int ttm_tt_swapout(struct ttm_tt *ttm,
|
||||
struct file *persistent_swap_storage);
|
||||
|
||||
/**
|
||||
* ttm_tt_unpopulate - free pages from a ttm
|
||||
*
|
||||
* @ttm: Pointer to the ttm_tt structure
|
||||
*
|
||||
* Calls the driver method to free all pages from a ttm
|
||||
*/
|
||||
extern void ttm_tt_unpopulate(struct ttm_tt *ttm);
|
||||
|
||||
/*
|
||||
* ttm_bo.c
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -190,13 +190,25 @@ extern int ttm_base_object_init(struct ttm_object_file *tfile,
|
|||
* @key: Hash key
|
||||
*
|
||||
* Looks up a struct ttm_base_object with the key @key.
|
||||
* Also verifies that the object is visible to the application, by
|
||||
* comparing the @tfile argument and checking the object shareable flag.
|
||||
*/
|
||||
|
||||
extern struct ttm_base_object *ttm_base_object_lookup(struct ttm_object_file
|
||||
*tfile, uint32_t key);
|
||||
|
||||
/**
|
||||
* ttm_base_object_lookup_for_ref
|
||||
*
|
||||
* @tdev: Pointer to a struct ttm_object_device.
|
||||
* @key: Hash key
|
||||
*
|
||||
* Looks up a struct ttm_base_object with the key @key.
|
||||
* This function should only be used when the struct tfile associated with the
|
||||
* caller doesn't yet have a reference to the base object.
|
||||
*/
|
||||
|
||||
extern struct ttm_base_object *
|
||||
ttm_base_object_lookup_for_ref(struct ttm_object_device *tdev, uint32_t key);
|
||||
|
||||
/**
|
||||
* ttm_base_object_unref
|
||||
*
|
||||
|
|
@ -218,6 +230,8 @@ extern void ttm_base_object_unref(struct ttm_base_object **p_base);
|
|||
* @existed: Upon completion, indicates that an identical reference object
|
||||
* already existed, and the refcount was upped on that object instead.
|
||||
*
|
||||
* Checks that the base object is shareable and adds a ref object to it.
|
||||
*
|
||||
* Adding a ref object to a base object is basically like referencing the
|
||||
* base object, but a user-space application holds the reference. When the
|
||||
* file corresponding to @tfile is closed, all its reference objects are
|
||||
|
|
|
|||
|
|
@ -613,8 +613,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
|
|||
extern int register_framebuffer(struct fb_info *fb_info);
|
||||
extern int unregister_framebuffer(struct fb_info *fb_info);
|
||||
extern int unlink_framebuffer(struct fb_info *fb_info);
|
||||
extern void remove_conflicting_framebuffers(struct apertures_struct *a,
|
||||
const char *name, bool primary);
|
||||
extern int remove_conflicting_framebuffers(struct apertures_struct *a,
|
||||
const char *name, bool primary);
|
||||
extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
|
||||
extern int fb_show_logo(struct fb_info *fb_info, int rotate);
|
||||
extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
|
||||
|
|
|
|||
|
|
@ -281,4 +281,10 @@ int host1x_device_exit(struct host1x_device *device);
|
|||
int host1x_client_register(struct host1x_client *client);
|
||||
int host1x_client_unregister(struct host1x_client *client);
|
||||
|
||||
struct tegra_mipi_device;
|
||||
|
||||
struct tegra_mipi_device *tegra_mipi_request(struct device *device);
|
||||
void tegra_mipi_free(struct tegra_mipi_device *device);
|
||||
int tegra_mipi_calibrate(struct tegra_mipi_device *device);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -181,7 +181,6 @@ enum drm_map_type {
|
|||
_DRM_AGP = 3, /**< AGP/GART */
|
||||
_DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */
|
||||
_DRM_CONSISTENT = 5, /**< Consistent memory for PCI DMA */
|
||||
_DRM_GEM = 6, /**< GEM object (obsolete) */
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -222,6 +222,7 @@ typedef struct _drm_i915_sarea {
|
|||
#define DRM_I915_GEM_SET_CACHING 0x2f
|
||||
#define DRM_I915_GEM_GET_CACHING 0x30
|
||||
#define DRM_I915_REG_READ 0x31
|
||||
#define DRM_I915_GET_RESET_STATS 0x32
|
||||
|
||||
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
|
||||
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
|
||||
|
|
@ -271,6 +272,7 @@ typedef struct _drm_i915_sarea {
|
|||
#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create)
|
||||
#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy)
|
||||
#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read)
|
||||
#define DRM_IOCTL_I915_GET_RESET_STATS DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats)
|
||||
|
||||
/* Allow drivers to submit batchbuffers directly to hardware, relying
|
||||
* on the security mechanisms provided by hardware.
|
||||
|
|
@ -719,7 +721,7 @@ struct drm_i915_gem_execbuffer2 {
|
|||
*/
|
||||
#define I915_EXEC_IS_PINNED (1<<10)
|
||||
|
||||
/** Provide a hint to the kernel that the command stream and auxilliary
|
||||
/** Provide a hint to the kernel that the command stream and auxiliary
|
||||
* state buffers already holds the correct presumed addresses and so the
|
||||
* relocation process may be skipped if no buffers need to be moved in
|
||||
* preparation for the execbuffer.
|
||||
|
|
@ -1030,4 +1032,21 @@ struct drm_i915_reg_read {
|
|||
__u64 offset;
|
||||
__u64 val; /* Return value */
|
||||
};
|
||||
|
||||
struct drm_i915_reset_stats {
|
||||
__u32 ctx_id;
|
||||
__u32 flags;
|
||||
|
||||
/* All resets since boot/module reload, for all contexts */
|
||||
__u32 reset_count;
|
||||
|
||||
/* Number of batches lost when active in GPU, for this context */
|
||||
__u32 batch_active;
|
||||
|
||||
/* Number of batches lost pending for execution, for this context */
|
||||
__u32 batch_pending;
|
||||
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
#endif /* _UAPI_I915_DRM_H_ */
|
||||
|
|
|
|||
|
|
@ -985,6 +985,8 @@ struct drm_radeon_cs {
|
|||
#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY 0x18
|
||||
/* query the number of render backends */
|
||||
#define RADEON_INFO_SI_BACKEND_ENABLED_MASK 0x19
|
||||
/* max engine clock - needed for OpenCL */
|
||||
#define RADEON_INFO_MAX_SCLK 0x1a
|
||||
|
||||
|
||||
struct drm_radeon_info {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,10 @@
|
|||
#ifndef __VMWGFX_DRM_H__
|
||||
#define __VMWGFX_DRM_H__
|
||||
|
||||
#ifndef __KERNEL__
|
||||
#include <drm.h>
|
||||
#endif
|
||||
|
||||
#define DRM_VMW_MAX_SURFACE_FACES 6
|
||||
#define DRM_VMW_MAX_MIP_LEVELS 24
|
||||
|
||||
|
|
@ -55,6 +59,11 @@
|
|||
#define DRM_VMW_PRESENT 18
|
||||
#define DRM_VMW_PRESENT_READBACK 19
|
||||
#define DRM_VMW_UPDATE_LAYOUT 20
|
||||
#define DRM_VMW_CREATE_SHADER 21
|
||||
#define DRM_VMW_UNREF_SHADER 22
|
||||
#define DRM_VMW_GB_SURFACE_CREATE 23
|
||||
#define DRM_VMW_GB_SURFACE_REF 24
|
||||
#define DRM_VMW_SYNCCPU 25
|
||||
|
||||
/*************************************************************************/
|
||||
/**
|
||||
|
|
@ -76,6 +85,8 @@
|
|||
#define DRM_VMW_PARAM_MAX_FB_SIZE 5
|
||||
#define DRM_VMW_PARAM_FIFO_HW_VERSION 6
|
||||
#define DRM_VMW_PARAM_MAX_SURF_MEMORY 7
|
||||
#define DRM_VMW_PARAM_3D_CAPS_SIZE 8
|
||||
#define DRM_VMW_PARAM_MAX_MOB_MEMORY 9
|
||||
|
||||
/**
|
||||
* struct drm_vmw_getparam_arg
|
||||
|
|
@ -788,4 +799,253 @@ struct drm_vmw_update_layout_arg {
|
|||
uint64_t rects;
|
||||
};
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/**
|
||||
* DRM_VMW_CREATE_SHADER - Create shader
|
||||
*
|
||||
* Creates a shader and optionally binds it to a dma buffer containing
|
||||
* the shader byte-code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum drm_vmw_shader_type - Shader types
|
||||
*/
|
||||
enum drm_vmw_shader_type {
|
||||
drm_vmw_shader_type_vs = 0,
|
||||
drm_vmw_shader_type_ps,
|
||||
drm_vmw_shader_type_gs
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* struct drm_vmw_shader_create_arg
|
||||
*
|
||||
* @shader_type: Shader type of the shader to create.
|
||||
* @size: Size of the byte-code in bytes.
|
||||
* where the shader byte-code starts
|
||||
* @buffer_handle: Buffer handle identifying the buffer containing the
|
||||
* shader byte-code
|
||||
* @shader_handle: On successful completion contains a handle that
|
||||
* can be used to subsequently identify the shader.
|
||||
* @offset: Offset in bytes into the buffer given by @buffer_handle,
|
||||
*
|
||||
* Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl.
|
||||
*/
|
||||
struct drm_vmw_shader_create_arg {
|
||||
enum drm_vmw_shader_type shader_type;
|
||||
uint32_t size;
|
||||
uint32_t buffer_handle;
|
||||
uint32_t shader_handle;
|
||||
uint64_t offset;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
/**
|
||||
* DRM_VMW_UNREF_SHADER - Unreferences a shader
|
||||
*
|
||||
* Destroys a user-space reference to a shader, optionally destroying
|
||||
* it.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct drm_vmw_shader_arg
|
||||
*
|
||||
* @handle: Handle identifying the shader to destroy.
|
||||
*
|
||||
* Input argument to the DRM_VMW_UNREF_SHADER ioctl.
|
||||
*/
|
||||
struct drm_vmw_shader_arg {
|
||||
uint32_t handle;
|
||||
uint32_t pad64;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
/**
|
||||
* DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface.
|
||||
*
|
||||
* Allocates a surface handle and queues a create surface command
|
||||
* for the host on the first use of the surface. The surface ID can
|
||||
* be used as the surface ID in commands referencing the surface.
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum drm_vmw_surface_flags
|
||||
*
|
||||
* @drm_vmw_surface_flag_shareable: Whether the surface is shareable
|
||||
* @drm_vmw_surface_flag_scanout: Whether the surface is a scanout
|
||||
* surface.
|
||||
* @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is
|
||||
* given.
|
||||
*/
|
||||
enum drm_vmw_surface_flags {
|
||||
drm_vmw_surface_flag_shareable = (1 << 0),
|
||||
drm_vmw_surface_flag_scanout = (1 << 1),
|
||||
drm_vmw_surface_flag_create_buffer = (1 << 2)
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_vmw_gb_surface_create_req
|
||||
*
|
||||
* @svga3d_flags: SVGA3d surface flags for the device.
|
||||
* @format: SVGA3d format.
|
||||
* @mip_level: Number of mip levels for all faces.
|
||||
* @drm_surface_flags Flags as described above.
|
||||
* @multisample_count Future use. Set to 0.
|
||||
* @autogen_filter Future use. Set to 0.
|
||||
* @buffer_handle Buffer handle of backup buffer. SVGA3D_INVALID_ID
|
||||
* if none.
|
||||
* @base_size Size of the base mip level for all faces.
|
||||
*
|
||||
* Input argument to the DRM_VMW_GB_SURFACE_CREATE Ioctl.
|
||||
* Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl.
|
||||
*/
|
||||
struct drm_vmw_gb_surface_create_req {
|
||||
uint32_t svga3d_flags;
|
||||
uint32_t format;
|
||||
uint32_t mip_levels;
|
||||
enum drm_vmw_surface_flags drm_surface_flags;
|
||||
uint32_t multisample_count;
|
||||
uint32_t autogen_filter;
|
||||
uint32_t buffer_handle;
|
||||
uint32_t pad64;
|
||||
struct drm_vmw_size base_size;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_vmw_gb_surface_create_rep
|
||||
*
|
||||
* @handle: Surface handle.
|
||||
* @backup_size: Size of backup buffers for this surface.
|
||||
* @buffer_handle: Handle of backup buffer. SVGA3D_INVALID_ID if none.
|
||||
* @buffer_size: Actual size of the buffer identified by
|
||||
* @buffer_handle
|
||||
* @buffer_map_handle: Offset into device address space for the buffer
|
||||
* identified by @buffer_handle.
|
||||
*
|
||||
* Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl.
|
||||
* Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl.
|
||||
*/
|
||||
struct drm_vmw_gb_surface_create_rep {
|
||||
uint32_t handle;
|
||||
uint32_t backup_size;
|
||||
uint32_t buffer_handle;
|
||||
uint32_t buffer_size;
|
||||
uint64_t buffer_map_handle;
|
||||
};
|
||||
|
||||
/**
|
||||
* union drm_vmw_gb_surface_create_arg
|
||||
*
|
||||
* @req: Input argument as described above.
|
||||
* @rep: Output argument as described above.
|
||||
*
|
||||
* Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl.
|
||||
*/
|
||||
union drm_vmw_gb_surface_create_arg {
|
||||
struct drm_vmw_gb_surface_create_rep rep;
|
||||
struct drm_vmw_gb_surface_create_req req;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
/**
|
||||
* DRM_VMW_GB_SURFACE_REF - Reference a host surface.
|
||||
*
|
||||
* Puts a reference on a host surface with a given handle, as previously
|
||||
* returned by the DRM_VMW_GB_SURFACE_CREATE ioctl.
|
||||
* A reference will make sure the surface isn't destroyed while we hold
|
||||
* it and will allow the calling client to use the surface handle in
|
||||
* the command stream.
|
||||
*
|
||||
* On successful return, the Ioctl returns the surface information given
|
||||
* to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct drm_vmw_gb_surface_reference_arg
|
||||
*
|
||||
* @creq: The data used as input when the surface was created, as described
|
||||
* above at "struct drm_vmw_gb_surface_create_req"
|
||||
* @crep: Additional data output when the surface was created, as described
|
||||
* above at "struct drm_vmw_gb_surface_create_rep"
|
||||
*
|
||||
* Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl.
|
||||
*/
|
||||
struct drm_vmw_gb_surface_ref_rep {
|
||||
struct drm_vmw_gb_surface_create_req creq;
|
||||
struct drm_vmw_gb_surface_create_rep crep;
|
||||
};
|
||||
|
||||
/**
|
||||
* union drm_vmw_gb_surface_reference_arg
|
||||
*
|
||||
* @req: Input data as described above at "struct drm_vmw_surface_arg"
|
||||
* @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep"
|
||||
*
|
||||
* Argument to the DRM_VMW_GB_SURFACE_REF Ioctl.
|
||||
*/
|
||||
union drm_vmw_gb_surface_reference_arg {
|
||||
struct drm_vmw_gb_surface_ref_rep rep;
|
||||
struct drm_vmw_surface_arg req;
|
||||
};
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/**
|
||||
* DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access.
|
||||
*
|
||||
* Idles any previously submitted GPU operations on the buffer and
|
||||
* by default blocks command submissions that reference the buffer.
|
||||
* If the file descriptor used to grab a blocking CPU sync is closed, the
|
||||
* cpu sync is released.
|
||||
* The flags argument indicates how the grab / release operation should be
|
||||
* performed:
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum drm_vmw_synccpu_flags - Synccpu flags:
|
||||
*
|
||||
* @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a
|
||||
* hint to the kernel to allow command submissions that references the buffer
|
||||
* for read-only.
|
||||
* @drm_vmw_synccpu_write: Sync for write. Block all command submissions
|
||||
* referencing this buffer.
|
||||
* @drm_vmw_synccpu_dontblock: Dont wait for GPU idle, but rather return
|
||||
* -EBUSY should the buffer be busy.
|
||||
* @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer
|
||||
* while the buffer is synced for CPU. This is similar to the GEM bo idle
|
||||
* behavior.
|
||||
*/
|
||||
enum drm_vmw_synccpu_flags {
|
||||
drm_vmw_synccpu_read = (1 << 0),
|
||||
drm_vmw_synccpu_write = (1 << 1),
|
||||
drm_vmw_synccpu_dontblock = (1 << 2),
|
||||
drm_vmw_synccpu_allow_cs = (1 << 3)
|
||||
};
|
||||
|
||||
/**
|
||||
* enum drm_vmw_synccpu_op - Synccpu operations:
|
||||
*
|
||||
* @drm_vmw_synccpu_grab: Grab the buffer for CPU operations
|
||||
* @drm_vmw_synccpu_release: Release a previous grab.
|
||||
*/
|
||||
enum drm_vmw_synccpu_op {
|
||||
drm_vmw_synccpu_grab,
|
||||
drm_vmw_synccpu_release
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_vmw_synccpu_arg
|
||||
*
|
||||
* @op: The synccpu operation as described above.
|
||||
* @handle: Handle identifying the buffer object.
|
||||
* @flags: Flags as described above.
|
||||
*/
|
||||
struct drm_vmw_synccpu_arg {
|
||||
enum drm_vmw_synccpu_op op;
|
||||
enum drm_vmw_synccpu_flags flags;
|
||||
uint32_t handle;
|
||||
uint32_t pad64;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue