mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm merge from Dave Airlie:
"Highlights:
- TI LCD controller KMS driver
- TI OMAP KMS driver merged from staging
- drop gma500 stub driver
- the fbcon locking fixes
- the vgacon dirty like zebra fix.
- open firmware videomode and hdmi common code helpers
- major locking rework for kms object handling - pageflip/cursor
won't block on polling anymore!
- fbcon helper and prime helper cleanups
- i915: all over the map, haswell power well enhancements, valleyview
macro horrors cleaned up, killing lots of legacy GTT code,
- radeon: CS ioctl unification, deprecated UMS support, gpu reset
rework, VM fixes
- nouveau: reworked thermal code, external dp/tmds encoder support
(anx9805), fences sleep instead of polling,
- exynos: all over the driver fixes."
Lovely conflict in radeon/evergreen_cs.c between commit de0babd60d
("drm/radeon: enforce use of radeon_get_ib_value when reading user cmd")
and the new changes that modified that evergreen_dma_cs_parse()
function.
* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (508 commits)
drm/tilcdc: only build on arm
drm/i915: Revert hdmi HDP pin checks
drm/tegra: Add list of framebuffers to debugfs
drm/tegra: Fix color expansion
drm/tegra: Split DC_CMD_STATE_CONTROL register write
drm/tegra: Implement page-flipping support
drm/tegra: Implement VBLANK support
drm/tegra: Implement .mode_set_base()
drm/tegra: Add plane support
drm/tegra: Remove bogus tegra_framebuffer structure
drm: Add consistency check for page-flipping
drm/radeon: Use generic HDMI infoframe helpers
drm/tegra: Use generic HDMI infoframe helpers
drm: Add EDID helper documentation
drm: Add HDMI infoframe helpers
video: Add generic HDMI infoframe helpers
drm: Add some missing forward declarations
drm: Move mode tables to drm_edid.c
drm: Remove duplicate drm_mode_cea_vic()
gma500: Fix n, m1 and m2 clock limits for sdvo and lvds
...
This commit is contained in:
commit
fffddfd6c8
398 changed files with 23479 additions and 11509 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@ struct drm_device;
|
|||
struct drm_mode_set;
|
||||
struct drm_framebuffer;
|
||||
struct drm_object_properties;
|
||||
|
||||
struct drm_file;
|
||||
struct drm_clip_rect;
|
||||
|
||||
#define DRM_MODE_OBJECT_CRTC 0xcccccccc
|
||||
#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
|
||||
|
|
@ -254,6 +255,10 @@ struct drm_framebuffer {
|
|||
* userspace perspective.
|
||||
*/
|
||||
struct kref refcount;
|
||||
/*
|
||||
* Place on the dev->mode_config.fb_list, access protected by
|
||||
* dev->mode_config.fb_lock.
|
||||
*/
|
||||
struct list_head head;
|
||||
struct drm_mode_object base;
|
||||
const struct drm_framebuffer_funcs *funcs;
|
||||
|
|
@ -390,6 +395,15 @@ struct drm_crtc {
|
|||
struct drm_device *dev;
|
||||
struct list_head head;
|
||||
|
||||
/**
|
||||
* crtc mutex
|
||||
*
|
||||
* This provides a read lock for the overall crtc state (mode, dpms
|
||||
* state, ...) and a write lock for everything which can be update
|
||||
* without a full modeset (fb, cursor data, ...)
|
||||
*/
|
||||
struct mutex mutex;
|
||||
|
||||
struct drm_mode_object base;
|
||||
|
||||
/* framebuffer the connector is currently bound to */
|
||||
|
|
@ -771,8 +785,18 @@ struct drm_mode_config {
|
|||
struct mutex idr_mutex; /* for IDR management */
|
||||
struct idr crtc_idr; /* use this idr for all IDs, fb, crtc, connector, modes - just makes life easier */
|
||||
/* this is limited to one for now */
|
||||
|
||||
|
||||
/**
|
||||
* fb_lock - mutex to protect fb state
|
||||
*
|
||||
* Besides the global fb list his also protects the fbs list in the
|
||||
* file_priv
|
||||
*/
|
||||
struct mutex fb_lock;
|
||||
int num_fb;
|
||||
struct list_head fb_list;
|
||||
|
||||
int num_connector;
|
||||
struct list_head connector_list;
|
||||
int num_encoder;
|
||||
|
|
@ -842,6 +866,10 @@ struct drm_prop_enum_list {
|
|||
char *name;
|
||||
};
|
||||
|
||||
extern void drm_modeset_lock_all(struct drm_device *dev);
|
||||
extern void drm_modeset_unlock_all(struct drm_device *dev);
|
||||
extern void drm_warn_on_modeset_not_all_locked(struct drm_device *dev);
|
||||
|
||||
extern int drm_crtc_init(struct drm_device *dev,
|
||||
struct drm_crtc *crtc,
|
||||
const struct drm_crtc_funcs *funcs);
|
||||
|
|
@ -932,10 +960,13 @@ extern void drm_framebuffer_set_object(struct drm_device *dev,
|
|||
extern int drm_framebuffer_init(struct drm_device *dev,
|
||||
struct drm_framebuffer *fb,
|
||||
const struct drm_framebuffer_funcs *funcs);
|
||||
extern struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev,
|
||||
uint32_t id);
|
||||
extern void drm_framebuffer_unreference(struct drm_framebuffer *fb);
|
||||
extern void drm_framebuffer_reference(struct drm_framebuffer *fb);
|
||||
extern void drm_framebuffer_remove(struct drm_framebuffer *fb);
|
||||
extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
|
||||
extern void drm_framebuffer_unregister_private(struct drm_framebuffer *fb);
|
||||
extern int drmfb_probe(struct drm_device *dev, struct drm_crtc *crtc);
|
||||
extern int drmfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
|
||||
extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int maxY);
|
||||
|
|
@ -985,6 +1016,7 @@ extern int drm_mode_getcrtc(struct drm_device *dev,
|
|||
void *data, struct drm_file *file_priv);
|
||||
extern int drm_mode_getconnector(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
extern int drm_mode_set_config_internal(struct drm_mode_set *set);
|
||||
extern int drm_mode_setcrtc(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
extern int drm_mode_getplane(struct drm_device *dev,
|
||||
|
|
@ -1030,9 +1062,10 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
|
|||
extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
extern u8 *drm_find_cea_extension(struct edid *edid);
|
||||
extern u8 drm_match_cea_mode(struct drm_display_mode *to_match);
|
||||
extern u8 drm_match_cea_mode(const struct drm_display_mode *to_match);
|
||||
extern bool drm_detect_hdmi_monitor(struct edid *edid);
|
||||
extern bool drm_detect_monitor_audio(struct edid *edid);
|
||||
extern bool drm_rgb_quant_range_selectable(struct edid *edid);
|
||||
extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
|
||||
|
|
@ -1047,7 +1080,6 @@ extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev,
|
|||
int GTF_2C, int GTF_K, int GTF_2J);
|
||||
extern int drm_add_modes_noedid(struct drm_connector *connector,
|
||||
int hdisplay, int vdisplay);
|
||||
extern uint8_t drm_mode_cea_vic(const struct drm_display_mode *mode);
|
||||
|
||||
extern int drm_edid_header_is_valid(const u8 *raw_edid);
|
||||
extern bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid);
|
||||
|
|
|
|||
|
|
@ -247,6 +247,8 @@ struct edid {
|
|||
struct drm_encoder;
|
||||
struct drm_connector;
|
||||
struct drm_display_mode;
|
||||
struct hdmi_avi_infoframe;
|
||||
|
||||
void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid);
|
||||
int drm_av_sync_delay(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode);
|
||||
|
|
@ -254,4 +256,8 @@ struct drm_connector *drm_select_eld(struct drm_encoder *encoder,
|
|||
struct drm_display_mode *mode);
|
||||
int drm_load_edid_firmware(struct drm_connector *connector);
|
||||
|
||||
int
|
||||
drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
|
||||
const struct drm_display_mode *mode);
|
||||
|
||||
#endif /* __DRM_EDID_H__ */
|
||||
|
|
|
|||
|
|
@ -159,4 +159,24 @@ static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *dri
|
|||
|
||||
void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
|
||||
|
||||
|
||||
/*
|
||||
* Wrapper fxns which can be plugged in to drm_encoder_helper_funcs:
|
||||
*/
|
||||
|
||||
void drm_i2c_encoder_dpms(struct drm_encoder *encoder, int mode);
|
||||
bool drm_i2c_encoder_mode_fixup(struct drm_encoder *encoder,
|
||||
const struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode);
|
||||
void drm_i2c_encoder_prepare(struct drm_encoder *encoder);
|
||||
void drm_i2c_encoder_commit(struct drm_encoder *encoder);
|
||||
void drm_i2c_encoder_mode_set(struct drm_encoder *encoder,
|
||||
struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode);
|
||||
enum drm_connector_status drm_i2c_encoder_detect(struct drm_encoder *encoder,
|
||||
struct drm_connector *connector);
|
||||
void drm_i2c_encoder_save(struct drm_encoder *encoder);
|
||||
void drm_i2c_encoder_restore(struct drm_encoder *encoder);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -23,5 +23,10 @@ struct drm_framebuffer *drm_fb_cma_create(struct drm_device *dev,
|
|||
struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb,
|
||||
unsigned int plane);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void drm_fb_cma_describe(struct drm_framebuffer *fb, struct seq_file *m);
|
||||
int drm_fb_cma_debugfs_show(struct seq_file *m, void *arg);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,18 @@ struct drm_fb_helper_surface_size {
|
|||
u32 surface_depth;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_fb_helper_funcs - driver callbacks for the fbdev emulation library
|
||||
* @gamma_set: - Set the given gamma lut register on the given crtc.
|
||||
* @gamma_get: - Read the given gamma lut register on the given crtc, used to
|
||||
* save the current lut when force-restoring the fbdev for e.g.
|
||||
* kdbg.
|
||||
* @fb_probe: - Driver callback to allocate and initialize the fbdev info
|
||||
* structure. Futhermore it also needs to allocate the drm
|
||||
* framebuffer used to back the fbdev.
|
||||
*
|
||||
* Driver callbacks used by the fbdev emulation helper library.
|
||||
*/
|
||||
struct drm_fb_helper_funcs {
|
||||
void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
|
||||
u16 blue, int regno);
|
||||
|
|
@ -65,9 +77,7 @@ struct drm_fb_helper_connector {
|
|||
|
||||
struct drm_fb_helper {
|
||||
struct drm_framebuffer *fb;
|
||||
struct drm_framebuffer *saved_fb;
|
||||
struct drm_device *dev;
|
||||
struct drm_display_mode *mode;
|
||||
int crtc_count;
|
||||
struct drm_fb_helper_crtc *crtc_info;
|
||||
int connector_count;
|
||||
|
|
@ -82,9 +92,6 @@ struct drm_fb_helper {
|
|||
bool delayed_hotplug;
|
||||
};
|
||||
|
||||
int drm_fb_helper_single_fb_probe(struct drm_fb_helper *helper,
|
||||
int preferred_bpp);
|
||||
|
||||
int drm_fb_helper_init(struct drm_device *dev,
|
||||
struct drm_fb_helper *helper, int crtc_count,
|
||||
int max_conn);
|
||||
|
|
@ -103,7 +110,6 @@ int drm_fb_helper_setcolreg(unsigned regno,
|
|||
struct fb_info *info);
|
||||
|
||||
bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper);
|
||||
void drm_fb_helper_restore(void);
|
||||
void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
|
||||
uint32_t fb_width, uint32_t fb_height);
|
||||
void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
|
||||
|
|
|
|||
|
|
@ -41,4 +41,8 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
|
|||
|
||||
extern const struct vm_operations_struct drm_gem_cma_vm_ops;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void drm_gem_cma_describe(struct drm_gem_cma_object *obj, struct seq_file *m);
|
||||
#endif
|
||||
|
||||
#endif /* __DRM_GEM_CMA_HELPER_H__ */
|
||||
|
|
|
|||
|
|
@ -89,6 +89,29 @@ static inline bool drm_mm_initialized(struct drm_mm *mm)
|
|||
{
|
||||
return mm->hole_stack.next;
|
||||
}
|
||||
|
||||
static inline unsigned long __drm_mm_hole_node_start(struct drm_mm_node *hole_node)
|
||||
{
|
||||
return hole_node->start + hole_node->size;
|
||||
}
|
||||
|
||||
static inline unsigned long drm_mm_hole_node_start(struct drm_mm_node *hole_node)
|
||||
{
|
||||
BUG_ON(!hole_node->hole_follows);
|
||||
return __drm_mm_hole_node_start(hole_node);
|
||||
}
|
||||
|
||||
static inline unsigned long __drm_mm_hole_node_end(struct drm_mm_node *hole_node)
|
||||
{
|
||||
return list_entry(hole_node->node_list.next,
|
||||
struct drm_mm_node, node_list)->start;
|
||||
}
|
||||
|
||||
static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
|
||||
{
|
||||
return __drm_mm_hole_node_end(hole_node);
|
||||
}
|
||||
|
||||
#define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \
|
||||
&(mm)->head_node.node_list, \
|
||||
node_list)
|
||||
|
|
@ -99,9 +122,26 @@ static inline bool drm_mm_initialized(struct drm_mm *mm)
|
|||
entry != NULL; entry = next, \
|
||||
next = entry ? list_entry(entry->node_list.next, \
|
||||
struct drm_mm_node, node_list) : NULL) \
|
||||
|
||||
/* Note that we need to unroll list_for_each_entry in order to inline
|
||||
* setting hole_start and hole_end on each iteration and keep the
|
||||
* macro sane.
|
||||
*/
|
||||
#define drm_mm_for_each_hole(entry, mm, hole_start, hole_end) \
|
||||
for (entry = list_entry((mm)->hole_stack.next, struct drm_mm_node, hole_stack); \
|
||||
&entry->hole_stack != &(mm)->hole_stack ? \
|
||||
hole_start = drm_mm_hole_node_start(entry), \
|
||||
hole_end = drm_mm_hole_node_end(entry), \
|
||||
1 : 0; \
|
||||
entry = list_entry(entry->hole_stack.next, struct drm_mm_node, hole_stack))
|
||||
|
||||
/*
|
||||
* Basic range manager support (drm_mm.c)
|
||||
*/
|
||||
extern struct drm_mm_node *drm_mm_create_block(struct drm_mm *mm,
|
||||
unsigned long start,
|
||||
unsigned long size,
|
||||
bool atomic);
|
||||
extern struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *node,
|
||||
unsigned long size,
|
||||
unsigned alignment,
|
||||
|
|
|
|||
|
|
@ -139,6 +139,19 @@
|
|||
{0x1002, 0x5e4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x5e4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x5e4f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6600, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6601, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6602, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6603, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6606, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6607, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6620, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6623, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6631, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6700, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAYMAN|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6701, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAYMAN|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6702, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAYMAN|RADEON_NEW_MEMMAP}, \
|
||||
|
|
|
|||
|
|
@ -3,26 +3,8 @@
|
|||
#ifndef _DRM_INTEL_GTT_H
|
||||
#define _DRM_INTEL_GTT_H
|
||||
|
||||
struct intel_gtt {
|
||||
/* Size of memory reserved for graphics by the BIOS */
|
||||
unsigned int stolen_size;
|
||||
/* Total number of gtt entries. */
|
||||
unsigned int gtt_total_entries;
|
||||
/* Part of the gtt that is mappable by the cpu, for those chips where
|
||||
* this is not the full gtt. */
|
||||
unsigned int gtt_mappable_entries;
|
||||
/* Whether i915 needs to use the dmar apis or not. */
|
||||
unsigned int needs_dmar : 1;
|
||||
/* Whether we idle the gpu before mapping/unmapping */
|
||||
unsigned int do_idle_maps : 1;
|
||||
/* Share the scratch page dma with ppgtts. */
|
||||
dma_addr_t scratch_page_dma;
|
||||
struct page *scratch_page;
|
||||
/* for ppgtt PDE access */
|
||||
u32 __iomem *gtt;
|
||||
/* needed for ioremap in drm/i915 */
|
||||
phys_addr_t gma_bus_addr;
|
||||
} *intel_gtt_get(void);
|
||||
void intel_gtt_get(size_t *gtt_total, size_t *stolen_size,
|
||||
phys_addr_t *mappable_base, unsigned long *mappable_end);
|
||||
|
||||
int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev,
|
||||
struct agp_bridge_data *bridge);
|
||||
|
|
|
|||
|
|
@ -790,16 +790,7 @@ extern void ttm_mem_io_unlock(struct ttm_mem_type_manager *man);
|
|||
* to make room for a buffer already reserved. (Buffers are reserved before
|
||||
* they are evicted). The following algorithm prevents such deadlocks from
|
||||
* occurring:
|
||||
* 1) Buffers are reserved with the lru spinlock held. Upon successful
|
||||
* reservation they are removed from the lru list. This stops a reserved buffer
|
||||
* from being evicted. However the lru spinlock is released between the time
|
||||
* a buffer is selected for eviction and the time it is reserved.
|
||||
* Therefore a check is made when a buffer is reserved for eviction, that it
|
||||
* is still the first buffer in the lru list, before it is removed from the
|
||||
* list. @check_lru == 1 forces this check. If it fails, the function returns
|
||||
* -EINVAL, and the caller should then choose a new buffer to evict and repeat
|
||||
* the procedure.
|
||||
* 2) Processes attempting to reserve multiple buffers other than for eviction,
|
||||
* Processes attempting to reserve multiple buffers other than for eviction,
|
||||
* (typically execbuf), should first obtain a unique 32-bit
|
||||
* validation sequence number,
|
||||
* and call this function with @use_sequence == 1 and @sequence == the unique
|
||||
|
|
@ -830,9 +821,39 @@ extern int ttm_bo_reserve(struct ttm_buffer_object *bo,
|
|||
bool interruptible,
|
||||
bool no_wait, bool use_sequence, uint32_t sequence);
|
||||
|
||||
/**
|
||||
* ttm_bo_reserve_slowpath_nolru:
|
||||
* @bo: A pointer to a struct ttm_buffer_object.
|
||||
* @interruptible: Sleep interruptible if waiting.
|
||||
* @sequence: Set (@bo)->sequence to this value after lock
|
||||
*
|
||||
* This is called after ttm_bo_reserve returns -EAGAIN and we backed off
|
||||
* from all our other reservations. Because there are no other reservations
|
||||
* held by us, this function cannot deadlock any more.
|
||||
*
|
||||
* Will not remove reserved buffers from the lru lists.
|
||||
* Otherwise identical to ttm_bo_reserve_slowpath.
|
||||
*/
|
||||
extern int ttm_bo_reserve_slowpath_nolru(struct ttm_buffer_object *bo,
|
||||
bool interruptible,
|
||||
uint32_t sequence);
|
||||
|
||||
|
||||
/**
|
||||
* ttm_bo_reserve_locked:
|
||||
* ttm_bo_reserve_slowpath:
|
||||
* @bo: A pointer to a struct ttm_buffer_object.
|
||||
* @interruptible: Sleep interruptible if waiting.
|
||||
* @sequence: Set (@bo)->sequence to this value after lock
|
||||
*
|
||||
* This is called after ttm_bo_reserve returns -EAGAIN and we backed off
|
||||
* from all our other reservations. Because there are no other reservations
|
||||
* held by us, this function cannot deadlock any more.
|
||||
*/
|
||||
extern int ttm_bo_reserve_slowpath(struct ttm_buffer_object *bo,
|
||||
bool interruptible, uint32_t sequence);
|
||||
|
||||
/**
|
||||
* ttm_bo_reserve_nolru:
|
||||
*
|
||||
* @bo: A pointer to a struct ttm_buffer_object.
|
||||
* @interruptible: Sleep interruptible if waiting.
|
||||
|
|
@ -840,9 +861,7 @@ extern int ttm_bo_reserve(struct ttm_buffer_object *bo,
|
|||
* @use_sequence: If @bo is already reserved, Only sleep waiting for
|
||||
* it to become unreserved if @sequence < (@bo)->sequence.
|
||||
*
|
||||
* Must be called with struct ttm_bo_global::lru_lock held,
|
||||
* and will not remove reserved buffers from the lru lists.
|
||||
* The function may release the LRU spinlock if it needs to sleep.
|
||||
* Will not remove reserved buffers from the lru lists.
|
||||
* Otherwise identical to ttm_bo_reserve.
|
||||
*
|
||||
* Returns:
|
||||
|
|
@ -855,7 +874,7 @@ extern int ttm_bo_reserve(struct ttm_buffer_object *bo,
|
|||
* -EDEADLK: Bo already reserved using @sequence. This error code will only
|
||||
* be returned if @use_sequence is set to true.
|
||||
*/
|
||||
extern int ttm_bo_reserve_locked(struct ttm_buffer_object *bo,
|
||||
extern int ttm_bo_reserve_nolru(struct ttm_buffer_object *bo,
|
||||
bool interruptible,
|
||||
bool no_wait, bool use_sequence,
|
||||
uint32_t sequence);
|
||||
|
|
@ -879,18 +898,6 @@ extern void ttm_bo_unreserve(struct ttm_buffer_object *bo);
|
|||
*/
|
||||
extern void ttm_bo_unreserve_locked(struct ttm_buffer_object *bo);
|
||||
|
||||
/**
|
||||
* ttm_bo_wait_unreserved
|
||||
*
|
||||
* @bo: A pointer to a struct ttm_buffer_object.
|
||||
*
|
||||
* Wait for a struct ttm_buffer_object to become unreserved.
|
||||
* This is typically used in the execbuf code to relax cpu-usage when
|
||||
* a potential deadlock condition backoff.
|
||||
*/
|
||||
extern int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo,
|
||||
bool interruptible);
|
||||
|
||||
/*
|
||||
* ttm_bo_util.c
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -77,7 +77,9 @@ extern const struct consw prom_con; /* SPARC PROM console */
|
|||
int con_is_bound(const struct consw *csw);
|
||||
int register_con_driver(const struct consw *csw, int first, int last);
|
||||
int unregister_con_driver(const struct consw *csw);
|
||||
int do_unregister_con_driver(const struct consw *csw);
|
||||
int take_over_console(const struct consw *sw, int first, int last, int deflt);
|
||||
int do_take_over_console(const struct consw *sw, int first, int last, int deflt);
|
||||
void give_up_console(const struct consw *sw);
|
||||
#ifdef CONFIG_HW_CONSOLE
|
||||
int con_debug_enter(struct vc_data *vc);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ struct vm_area_struct;
|
|||
struct fb_info;
|
||||
struct device;
|
||||
struct file;
|
||||
struct videomode;
|
||||
struct device_node;
|
||||
|
||||
/* Definitions below are used in the parsed monitor specs */
|
||||
#define FB_DPMS_ACTIVE_OFF 1
|
||||
|
|
@ -714,6 +716,12 @@ extern void fb_destroy_modedb(struct fb_videomode *modedb);
|
|||
extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb);
|
||||
extern unsigned char *fb_ddc_read(struct i2c_adapter *adapter);
|
||||
|
||||
extern int of_get_fb_videomode(struct device_node *np,
|
||||
struct fb_videomode *fb,
|
||||
int index);
|
||||
extern int fb_videomode_from_videomode(const struct videomode *vm,
|
||||
struct fb_videomode *fbmode);
|
||||
|
||||
/* drivers/video/modedb.c */
|
||||
#define VESA_MODEDB_SIZE 34
|
||||
extern void fb_var_to_videomode(struct fb_videomode *mode,
|
||||
|
|
|
|||
231
include/linux/hdmi.h
Normal file
231
include/linux/hdmi.h
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
/*
|
||||
* Copyright (C) 2012 Avionic Design GmbH
|
||||
*
|
||||
* 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 __LINUX_HDMI_H_
|
||||
#define __LINUX_HDMI_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum hdmi_infoframe_type {
|
||||
HDMI_INFOFRAME_TYPE_VENDOR = 0x81,
|
||||
HDMI_INFOFRAME_TYPE_AVI = 0x82,
|
||||
HDMI_INFOFRAME_TYPE_SPD = 0x83,
|
||||
HDMI_INFOFRAME_TYPE_AUDIO = 0x84,
|
||||
};
|
||||
|
||||
#define HDMI_INFOFRAME_HEADER_SIZE 4
|
||||
#define HDMI_AVI_INFOFRAME_SIZE 13
|
||||
#define HDMI_SPD_INFOFRAME_SIZE 25
|
||||
#define HDMI_AUDIO_INFOFRAME_SIZE 10
|
||||
|
||||
enum hdmi_colorspace {
|
||||
HDMI_COLORSPACE_RGB,
|
||||
HDMI_COLORSPACE_YUV422,
|
||||
HDMI_COLORSPACE_YUV444,
|
||||
};
|
||||
|
||||
enum hdmi_scan_mode {
|
||||
HDMI_SCAN_MODE_NONE,
|
||||
HDMI_SCAN_MODE_OVERSCAN,
|
||||
HDMI_SCAN_MODE_UNDERSCAN,
|
||||
};
|
||||
|
||||
enum hdmi_colorimetry {
|
||||
HDMI_COLORIMETRY_NONE,
|
||||
HDMI_COLORIMETRY_ITU_601,
|
||||
HDMI_COLORIMETRY_ITU_709,
|
||||
HDMI_COLORIMETRY_EXTENDED,
|
||||
};
|
||||
|
||||
enum hdmi_picture_aspect {
|
||||
HDMI_PICTURE_ASPECT_NONE,
|
||||
HDMI_PICTURE_ASPECT_4_3,
|
||||
HDMI_PICTURE_ASPECT_16_9,
|
||||
};
|
||||
|
||||
enum hdmi_active_aspect {
|
||||
HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
|
||||
HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
|
||||
HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
|
||||
HDMI_ACTIVE_ASPECT_PICTURE = 8,
|
||||
HDMI_ACTIVE_ASPECT_4_3 = 9,
|
||||
HDMI_ACTIVE_ASPECT_16_9 = 10,
|
||||
HDMI_ACTIVE_ASPECT_14_9 = 11,
|
||||
HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
|
||||
HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
|
||||
HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
|
||||
};
|
||||
|
||||
enum hdmi_extended_colorimetry {
|
||||
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601,
|
||||
HDMI_EXTENDED_COLORIMETRY_XV_YCC_709,
|
||||
HDMI_EXTENDED_COLORIMETRY_S_YCC_601,
|
||||
HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601,
|
||||
HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB,
|
||||
};
|
||||
|
||||
enum hdmi_quantization_range {
|
||||
HDMI_QUANTIZATION_RANGE_DEFAULT,
|
||||
HDMI_QUANTIZATION_RANGE_LIMITED,
|
||||
HDMI_QUANTIZATION_RANGE_FULL,
|
||||
};
|
||||
|
||||
/* non-uniform picture scaling */
|
||||
enum hdmi_nups {
|
||||
HDMI_NUPS_UNKNOWN,
|
||||
HDMI_NUPS_HORIZONTAL,
|
||||
HDMI_NUPS_VERTICAL,
|
||||
HDMI_NUPS_BOTH,
|
||||
};
|
||||
|
||||
enum hdmi_ycc_quantization_range {
|
||||
HDMI_YCC_QUANTIZATION_RANGE_LIMITED,
|
||||
HDMI_YCC_QUANTIZATION_RANGE_FULL,
|
||||
};
|
||||
|
||||
enum hdmi_content_type {
|
||||
HDMI_CONTENT_TYPE_NONE,
|
||||
HDMI_CONTENT_TYPE_PHOTO,
|
||||
HDMI_CONTENT_TYPE_CINEMA,
|
||||
HDMI_CONTENT_TYPE_GAME,
|
||||
};
|
||||
|
||||
struct hdmi_avi_infoframe {
|
||||
enum hdmi_infoframe_type type;
|
||||
unsigned char version;
|
||||
unsigned char length;
|
||||
enum hdmi_colorspace colorspace;
|
||||
bool active_info_valid;
|
||||
bool horizontal_bar_valid;
|
||||
bool vertical_bar_valid;
|
||||
enum hdmi_scan_mode scan_mode;
|
||||
enum hdmi_colorimetry colorimetry;
|
||||
enum hdmi_picture_aspect picture_aspect;
|
||||
enum hdmi_active_aspect active_aspect;
|
||||
bool itc;
|
||||
enum hdmi_extended_colorimetry extended_colorimetry;
|
||||
enum hdmi_quantization_range quantization_range;
|
||||
enum hdmi_nups nups;
|
||||
unsigned char video_code;
|
||||
enum hdmi_ycc_quantization_range ycc_quantization_range;
|
||||
enum hdmi_content_type content_type;
|
||||
unsigned char pixel_repeat;
|
||||
unsigned short top_bar;
|
||||
unsigned short bottom_bar;
|
||||
unsigned short left_bar;
|
||||
unsigned short right_bar;
|
||||
};
|
||||
|
||||
int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame);
|
||||
ssize_t hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe *frame, void *buffer,
|
||||
size_t size);
|
||||
|
||||
enum hdmi_spd_sdi {
|
||||
HDMI_SPD_SDI_UNKNOWN,
|
||||
HDMI_SPD_SDI_DSTB,
|
||||
HDMI_SPD_SDI_DVDP,
|
||||
HDMI_SPD_SDI_DVHS,
|
||||
HDMI_SPD_SDI_HDDVR,
|
||||
HDMI_SPD_SDI_DVC,
|
||||
HDMI_SPD_SDI_DSC,
|
||||
HDMI_SPD_SDI_VCD,
|
||||
HDMI_SPD_SDI_GAME,
|
||||
HDMI_SPD_SDI_PC,
|
||||
HDMI_SPD_SDI_BD,
|
||||
HDMI_SPD_SDI_SACD,
|
||||
HDMI_SPD_SDI_HDDVD,
|
||||
HDMI_SPD_SDI_PMP,
|
||||
};
|
||||
|
||||
struct hdmi_spd_infoframe {
|
||||
enum hdmi_infoframe_type type;
|
||||
unsigned char version;
|
||||
unsigned char length;
|
||||
char vendor[8];
|
||||
char product[16];
|
||||
enum hdmi_spd_sdi sdi;
|
||||
};
|
||||
|
||||
int hdmi_spd_infoframe_init(struct hdmi_spd_infoframe *frame,
|
||||
const char *vendor, const char *product);
|
||||
ssize_t hdmi_spd_infoframe_pack(struct hdmi_spd_infoframe *frame, void *buffer,
|
||||
size_t size);
|
||||
|
||||
enum hdmi_audio_coding_type {
|
||||
HDMI_AUDIO_CODING_TYPE_STREAM,
|
||||
HDMI_AUDIO_CODING_TYPE_PCM,
|
||||
HDMI_AUDIO_CODING_TYPE_AC3,
|
||||
HDMI_AUDIO_CODING_TYPE_MPEG1,
|
||||
HDMI_AUDIO_CODING_TYPE_MP3,
|
||||
HDMI_AUDIO_CODING_TYPE_MPEG2,
|
||||
HDMI_AUDIO_CODING_TYPE_AAC_LC,
|
||||
HDMI_AUDIO_CODING_TYPE_DTS,
|
||||
HDMI_AUDIO_CODING_TYPE_ATRAC,
|
||||
HDMI_AUDIO_CODING_TYPE_DSD,
|
||||
HDMI_AUDIO_CODING_TYPE_EAC3,
|
||||
HDMI_AUDIO_CODING_TYPE_DTS_HD,
|
||||
HDMI_AUDIO_CODING_TYPE_MLP,
|
||||
HDMI_AUDIO_CODING_TYPE_DST,
|
||||
HDMI_AUDIO_CODING_TYPE_WMA_PRO,
|
||||
};
|
||||
|
||||
enum hdmi_audio_sample_size {
|
||||
HDMI_AUDIO_SAMPLE_SIZE_STREAM,
|
||||
HDMI_AUDIO_SAMPLE_SIZE_16,
|
||||
HDMI_AUDIO_SAMPLE_SIZE_20,
|
||||
HDMI_AUDIO_SAMPLE_SIZE_24,
|
||||
};
|
||||
|
||||
enum hdmi_audio_sample_frequency {
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_32000,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_44100,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_48000,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_88200,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_96000,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_176400,
|
||||
HDMI_AUDIO_SAMPLE_FREQUENCY_192000,
|
||||
};
|
||||
|
||||
enum hdmi_audio_coding_type_ext {
|
||||
HDMI_AUDIO_CODING_TYPE_EXT_STREAM,
|
||||
HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC,
|
||||
HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2,
|
||||
HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND,
|
||||
};
|
||||
|
||||
struct hdmi_audio_infoframe {
|
||||
enum hdmi_infoframe_type type;
|
||||
unsigned char version;
|
||||
unsigned char length;
|
||||
unsigned char channels;
|
||||
enum hdmi_audio_coding_type coding_type;
|
||||
enum hdmi_audio_sample_size sample_size;
|
||||
enum hdmi_audio_sample_frequency sample_frequency;
|
||||
enum hdmi_audio_coding_type_ext coding_type_ext;
|
||||
unsigned char channel_allocation;
|
||||
unsigned char level_shift_value;
|
||||
bool downmix_inhibit;
|
||||
|
||||
};
|
||||
|
||||
int hdmi_audio_infoframe_init(struct hdmi_audio_infoframe *frame);
|
||||
ssize_t hdmi_audio_infoframe_pack(struct hdmi_audio_infoframe *frame,
|
||||
void *buffer, size_t size);
|
||||
|
||||
struct hdmi_vendor_infoframe {
|
||||
enum hdmi_infoframe_type type;
|
||||
unsigned char version;
|
||||
unsigned char length;
|
||||
u8 data[27];
|
||||
};
|
||||
|
||||
ssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame,
|
||||
void *buffer, size_t size);
|
||||
|
||||
#endif /* _DRM_HDMI_H */
|
||||
|
|
@ -47,6 +47,7 @@ int con_set_cmap(unsigned char __user *cmap);
|
|||
int con_get_cmap(unsigned char __user *cmap);
|
||||
void scrollback(struct vc_data *vc, int lines);
|
||||
void scrollfront(struct vc_data *vc, int lines);
|
||||
void clear_buffer_attributes(struct vc_data *vc);
|
||||
void update_region(struct vc_data *vc, unsigned long start, int count);
|
||||
void redraw_screen(struct vc_data *vc, int is_switch);
|
||||
#define update_screen(x) redraw_screen(x, 0)
|
||||
|
|
@ -130,6 +131,8 @@ void vt_event_post(unsigned int event, unsigned int old, unsigned int new);
|
|||
int vt_waitactive(int n);
|
||||
void change_console(struct vc_data *new_vc);
|
||||
void reset_vc(struct vc_data *vc);
|
||||
extern int do_unbind_con_driver(const struct consw *csw, int first, int last,
|
||||
int deflt);
|
||||
extern int unbind_con_driver(const struct consw *csw, int first, int last,
|
||||
int deflt);
|
||||
int vty_init(const struct file_operations *console_fops);
|
||||
|
|
|
|||
|
|
@ -308,6 +308,8 @@ typedef struct drm_i915_irq_wait {
|
|||
#define I915_PARAM_RSVD_FOR_FUTURE_USE 22
|
||||
#define I915_PARAM_HAS_SECURE_BATCHES 23
|
||||
#define I915_PARAM_HAS_PINNED_BATCHES 24
|
||||
#define I915_PARAM_HAS_EXEC_NO_RELOC 25
|
||||
#define I915_PARAM_HAS_EXEC_HANDLE_LUT 26
|
||||
|
||||
typedef struct drm_i915_getparam {
|
||||
int param;
|
||||
|
|
@ -628,7 +630,11 @@ struct drm_i915_gem_exec_object2 {
|
|||
__u64 offset;
|
||||
|
||||
#define EXEC_OBJECT_NEEDS_FENCE (1<<0)
|
||||
#define EXEC_OBJECT_NEEDS_GTT (1<<1)
|
||||
#define EXEC_OBJECT_WRITE (1<<2)
|
||||
#define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_WRITE<<1)
|
||||
__u64 flags;
|
||||
|
||||
__u64 rsvd1;
|
||||
__u64 rsvd2;
|
||||
};
|
||||
|
|
@ -687,6 +693,20 @@ struct drm_i915_gem_execbuffer2 {
|
|||
*/
|
||||
#define I915_EXEC_IS_PINNED (1<<10)
|
||||
|
||||
/** Provide a hint to the kernel that the command stream and auxilliary
|
||||
* 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.
|
||||
*/
|
||||
#define I915_EXEC_NO_RELOC (1<<11)
|
||||
|
||||
/** Use the reloc.handle as an index into the exec object array rather
|
||||
* than as the per-file handle.
|
||||
*/
|
||||
#define I915_EXEC_HANDLE_LUT (1<<12)
|
||||
|
||||
#define __I915_EXEC_UNKNOWN_FLAGS -(I915_EXEC_HANDLE_LUT<<1)
|
||||
|
||||
#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
|
||||
#define i915_execbuffer2_set_context_id(eb2, context) \
|
||||
(eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK
|
||||
|
|
|
|||
123
include/uapi/drm/omap_drm.h
Normal file
123
include/uapi/drm/omap_drm.h
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* include/uapi/drm/omap_drm.h
|
||||
*
|
||||
* Copyright (C) 2011 Texas Instruments
|
||||
* Author: Rob Clark <rob@ti.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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __OMAP_DRM_H__
|
||||
#define __OMAP_DRM_H__
|
||||
|
||||
#include <drm/drm.h>
|
||||
|
||||
/* Please note that modifications to all structs defined here are
|
||||
* subject to backwards-compatibility constraints.
|
||||
*/
|
||||
|
||||
#define OMAP_PARAM_CHIPSET_ID 1 /* ie. 0x3430, 0x4430, etc */
|
||||
|
||||
struct drm_omap_param {
|
||||
uint64_t param; /* in */
|
||||
uint64_t value; /* in (set_param), out (get_param) */
|
||||
};
|
||||
|
||||
#define OMAP_BO_SCANOUT 0x00000001 /* scanout capable (phys contiguous) */
|
||||
#define OMAP_BO_CACHE_MASK 0x00000006 /* cache type mask, see cache modes */
|
||||
#define OMAP_BO_TILED_MASK 0x00000f00 /* tiled mapping mask, see tiled modes */
|
||||
|
||||
/* cache modes */
|
||||
#define OMAP_BO_CACHED 0x00000000 /* default */
|
||||
#define OMAP_BO_WC 0x00000002 /* write-combine */
|
||||
#define OMAP_BO_UNCACHED 0x00000004 /* strongly-ordered (uncached) */
|
||||
|
||||
/* tiled modes */
|
||||
#define OMAP_BO_TILED_8 0x00000100
|
||||
#define OMAP_BO_TILED_16 0x00000200
|
||||
#define OMAP_BO_TILED_32 0x00000300
|
||||
#define OMAP_BO_TILED (OMAP_BO_TILED_8 | OMAP_BO_TILED_16 | OMAP_BO_TILED_32)
|
||||
|
||||
union omap_gem_size {
|
||||
uint32_t bytes; /* (for non-tiled formats) */
|
||||
struct {
|
||||
uint16_t width;
|
||||
uint16_t height;
|
||||
} tiled; /* (for tiled formats) */
|
||||
};
|
||||
|
||||
struct drm_omap_gem_new {
|
||||
union omap_gem_size size; /* in */
|
||||
uint32_t flags; /* in */
|
||||
uint32_t handle; /* out */
|
||||
uint32_t __pad;
|
||||
};
|
||||
|
||||
/* mask of operations: */
|
||||
enum omap_gem_op {
|
||||
OMAP_GEM_READ = 0x01,
|
||||
OMAP_GEM_WRITE = 0x02,
|
||||
};
|
||||
|
||||
struct drm_omap_gem_cpu_prep {
|
||||
uint32_t handle; /* buffer handle (in) */
|
||||
uint32_t op; /* mask of omap_gem_op (in) */
|
||||
};
|
||||
|
||||
struct drm_omap_gem_cpu_fini {
|
||||
uint32_t handle; /* buffer handle (in) */
|
||||
uint32_t op; /* mask of omap_gem_op (in) */
|
||||
/* TODO maybe here we pass down info about what regions are touched
|
||||
* by sw so we can be clever about cache ops? For now a placeholder,
|
||||
* set to zero and we just do full buffer flush..
|
||||
*/
|
||||
uint32_t nregions;
|
||||
uint32_t __pad;
|
||||
};
|
||||
|
||||
struct drm_omap_gem_info {
|
||||
uint32_t handle; /* buffer handle (in) */
|
||||
uint32_t pad;
|
||||
uint64_t offset; /* mmap offset (out) */
|
||||
/* note: in case of tiled buffers, the user virtual size can be
|
||||
* different from the physical size (ie. how many pages are needed
|
||||
* to back the object) which is returned in DRM_IOCTL_GEM_OPEN..
|
||||
* This size here is the one that should be used if you want to
|
||||
* mmap() the buffer:
|
||||
*/
|
||||
uint32_t size; /* virtual size for mmap'ing (out) */
|
||||
uint32_t __pad;
|
||||
};
|
||||
|
||||
#define DRM_OMAP_GET_PARAM 0x00
|
||||
#define DRM_OMAP_SET_PARAM 0x01
|
||||
/* placeholder for plugin-api
|
||||
#define DRM_OMAP_GET_BASE 0x02
|
||||
*/
|
||||
#define DRM_OMAP_GEM_NEW 0x03
|
||||
#define DRM_OMAP_GEM_CPU_PREP 0x04
|
||||
#define DRM_OMAP_GEM_CPU_FINI 0x05
|
||||
#define DRM_OMAP_GEM_INFO 0x06
|
||||
#define DRM_OMAP_NUM_IOCTLS 0x07
|
||||
|
||||
#define DRM_IOCTL_OMAP_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GET_PARAM, struct drm_omap_param)
|
||||
#define DRM_IOCTL_OMAP_SET_PARAM DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_SET_PARAM, struct drm_omap_param)
|
||||
/* placeholder for plugin-api
|
||||
#define DRM_IOCTL_OMAP_GET_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GET_BASE, struct drm_omap_get_base)
|
||||
*/
|
||||
#define DRM_IOCTL_OMAP_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GEM_NEW, struct drm_omap_gem_new)
|
||||
#define DRM_IOCTL_OMAP_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_PREP, struct drm_omap_gem_cpu_prep)
|
||||
#define DRM_IOCTL_OMAP_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_FINI, struct drm_omap_gem_cpu_fini)
|
||||
#define DRM_IOCTL_OMAP_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GEM_INFO, struct drm_omap_gem_info)
|
||||
|
||||
#endif /* __OMAP_DRM_H__ */
|
||||
124
include/video/display_timing.h
Normal file
124
include/video/display_timing.h
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* description of display timings
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_DISPLAY_TIMING_H
|
||||
#define __LINUX_DISPLAY_TIMING_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* VESA display monitor timing parameters */
|
||||
#define VESA_DMT_HSYNC_LOW BIT(0)
|
||||
#define VESA_DMT_HSYNC_HIGH BIT(1)
|
||||
#define VESA_DMT_VSYNC_LOW BIT(2)
|
||||
#define VESA_DMT_VSYNC_HIGH BIT(3)
|
||||
|
||||
/* display specific flags */
|
||||
#define DISPLAY_FLAGS_DE_LOW BIT(0) /* data enable flag */
|
||||
#define DISPLAY_FLAGS_DE_HIGH BIT(1)
|
||||
#define DISPLAY_FLAGS_PIXDATA_POSEDGE BIT(2) /* drive data on pos. edge */
|
||||
#define DISPLAY_FLAGS_PIXDATA_NEGEDGE BIT(3) /* drive data on neg. edge */
|
||||
#define DISPLAY_FLAGS_INTERLACED BIT(4)
|
||||
#define DISPLAY_FLAGS_DOUBLESCAN BIT(5)
|
||||
|
||||
/*
|
||||
* A single signal can be specified via a range of minimal and maximal values
|
||||
* with a typical value, that lies somewhere inbetween.
|
||||
*/
|
||||
struct timing_entry {
|
||||
u32 min;
|
||||
u32 typ;
|
||||
u32 max;
|
||||
};
|
||||
|
||||
enum timing_entry_index {
|
||||
TE_MIN = 0,
|
||||
TE_TYP = 1,
|
||||
TE_MAX = 2,
|
||||
};
|
||||
|
||||
/*
|
||||
* Single "mode" entry. This describes one set of signal timings a display can
|
||||
* have in one setting. This struct can later be converted to struct videomode
|
||||
* (see include/video/videomode.h). As each timing_entry can be defined as a
|
||||
* range, one struct display_timing may become multiple struct videomodes.
|
||||
*
|
||||
* Example: hsync active high, vsync active low
|
||||
*
|
||||
* Active Video
|
||||
* Video ______________________XXXXXXXXXXXXXXXXXXXXXX_____________________
|
||||
* |<- sync ->|<- back ->|<----- active ----->|<- front ->|<- sync..
|
||||
* | | porch | | porch |
|
||||
*
|
||||
* HSync _|¯¯¯¯¯¯¯¯¯¯|___________________________________________|¯¯¯¯¯¯¯¯¯
|
||||
*
|
||||
* VSync ¯|__________|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|_________
|
||||
*/
|
||||
struct display_timing {
|
||||
struct timing_entry pixelclock;
|
||||
|
||||
struct timing_entry hactive; /* hor. active video */
|
||||
struct timing_entry hfront_porch; /* hor. front porch */
|
||||
struct timing_entry hback_porch; /* hor. back porch */
|
||||
struct timing_entry hsync_len; /* hor. sync len */
|
||||
|
||||
struct timing_entry vactive; /* ver. active video */
|
||||
struct timing_entry vfront_porch; /* ver. front porch */
|
||||
struct timing_entry vback_porch; /* ver. back porch */
|
||||
struct timing_entry vsync_len; /* ver. sync len */
|
||||
|
||||
unsigned int dmt_flags; /* VESA DMT flags */
|
||||
unsigned int data_flags; /* video data flags */
|
||||
};
|
||||
|
||||
/*
|
||||
* This describes all timing settings a display provides.
|
||||
* The native_mode is the default setting for this display.
|
||||
* Drivers that can handle multiple videomodes should work with this struct and
|
||||
* convert each entry to the desired end result.
|
||||
*/
|
||||
struct display_timings {
|
||||
unsigned int num_timings;
|
||||
unsigned int native_mode;
|
||||
|
||||
struct display_timing **timings;
|
||||
};
|
||||
|
||||
/* get value specified by index from struct timing_entry */
|
||||
static inline u32 display_timing_get_value(const struct timing_entry *te,
|
||||
enum timing_entry_index index)
|
||||
{
|
||||
switch (index) {
|
||||
case TE_MIN:
|
||||
return te->min;
|
||||
break;
|
||||
case TE_TYP:
|
||||
return te->typ;
|
||||
break;
|
||||
case TE_MAX:
|
||||
return te->max;
|
||||
break;
|
||||
default:
|
||||
return te->typ;
|
||||
}
|
||||
}
|
||||
|
||||
/* get one entry from struct display_timings */
|
||||
static inline struct display_timing *display_timings_get(const struct
|
||||
display_timings *disp,
|
||||
unsigned int index)
|
||||
{
|
||||
if (disp->num_timings > index)
|
||||
return disp->timings[index];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void display_timings_release(struct display_timings *disp);
|
||||
|
||||
#endif
|
||||
20
include/video/of_display_timing.h
Normal file
20
include/video/of_display_timing.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* display timings of helpers
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_OF_DISPLAY_TIMING_H
|
||||
#define __LINUX_OF_DISPLAY_TIMING_H
|
||||
|
||||
struct device_node;
|
||||
struct display_timings;
|
||||
|
||||
#define OF_USE_NATIVE_MODE -1
|
||||
|
||||
struct display_timings *of_get_display_timings(struct device_node *np);
|
||||
int of_display_timings_exist(struct device_node *np);
|
||||
|
||||
#endif
|
||||
18
include/video/of_videomode.h
Normal file
18
include/video/of_videomode.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* videomode of-helpers
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_OF_VIDEOMODE_H
|
||||
#define __LINUX_OF_VIDEOMODE_H
|
||||
|
||||
struct device_node;
|
||||
struct videomode;
|
||||
|
||||
int of_get_videomode(struct device_node *np, struct videomode *vm,
|
||||
int index);
|
||||
|
||||
#endif /* __LINUX_OF_VIDEOMODE_H */
|
||||
48
include/video/videomode.h
Normal file
48
include/video/videomode.h
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* generic videomode description
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_VIDEOMODE_H
|
||||
#define __LINUX_VIDEOMODE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <video/display_timing.h>
|
||||
|
||||
/*
|
||||
* Subsystem independent description of a videomode.
|
||||
* Can be generated from struct display_timing.
|
||||
*/
|
||||
struct videomode {
|
||||
unsigned long pixelclock; /* pixelclock in Hz */
|
||||
|
||||
u32 hactive;
|
||||
u32 hfront_porch;
|
||||
u32 hback_porch;
|
||||
u32 hsync_len;
|
||||
|
||||
u32 vactive;
|
||||
u32 vfront_porch;
|
||||
u32 vback_porch;
|
||||
u32 vsync_len;
|
||||
|
||||
unsigned int dmt_flags; /* VESA DMT flags */
|
||||
unsigned int data_flags; /* video data flags */
|
||||
};
|
||||
|
||||
/**
|
||||
* videomode_from_timing - convert display timing to videomode
|
||||
* @disp: structure with all possible timing entries
|
||||
* @vm: return value
|
||||
* @index: index into the list of display timings in devicetree
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function converts a struct display_timing to a struct videomode.
|
||||
*/
|
||||
int videomode_from_timing(const struct display_timings *disp,
|
||||
struct videomode *vm, unsigned int index);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue