Release 4.7 drivers/gpu/drm/exynos/exynos_drm_ipp.h
  
  
/*
 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
 *
 * Authors:
 *      Eunchul Kim <chulspro.kim@samsung.com>
 *      Jinyoung Jeon <jy0.jeon@samsung.com>
 *      Sangmin Lee <lsmin.lee@samsung.com>
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 */
#ifndef _EXYNOS_DRM_IPP_H_
#define _EXYNOS_DRM_IPP_H_
#define for_each_ipp_ops(pos)	\
	for (pos = 0; pos < EXYNOS_DRM_OPS_MAX; pos++)
#define for_each_ipp_planar(pos)	\
	for (pos = 0; pos < EXYNOS_DRM_PLANAR_MAX; pos++)
#define IPP_GET_LCD_WIDTH	_IOR('F', 302, int)
#define IPP_GET_LCD_HEIGHT	_IOR('F', 303, int)
#define IPP_SET_WRITEBACK	_IOW('F', 304, u32)
/* definition of state */
enum drm_exynos_ipp_state {
	
IPP_STATE_IDLE,
	
IPP_STATE_START,
	
IPP_STATE_STOP,
};
/*
 * A structure of command work information.
 * @work: work structure.
 * @ippdrv: current work ippdrv.
 * @c_node: command node information.
 * @ctrl: command control.
 */
struct drm_exynos_ipp_cmd_work {
	
struct work_struct	work;
	
struct exynos_drm_ippdrv	*ippdrv;
	
struct drm_exynos_ipp_cmd_node *c_node;
	
enum drm_exynos_ipp_ctrl	ctrl;
};
/*
 * A structure of command node.
 *
 * @list: list head to command queue information.
 * @event_list: list head of event.
 * @mem_list: list head to source,destination memory queue information.
 * @lock: lock for synchronization of access to ioctl.
 * @mem_lock: lock for synchronization of access to memory nodes.
 * @event_lock: lock for synchronization of access to scheduled event.
 * @start_complete: completion of start of command.
 * @stop_complete: completion of stop of command.
 * @property: property information.
 * @start_work: start command work structure.
 * @stop_work: stop command work structure.
 * @event_work: event work structure.
 * @state: state of command node.
 * @filp: associated file pointer.
 */
struct drm_exynos_ipp_cmd_node {
	
struct list_head	list;
	
struct list_head	event_list;
	
struct list_head	mem_list[EXYNOS_DRM_OPS_MAX];
	
struct mutex	lock;
	
struct mutex	mem_lock;
	
struct mutex	event_lock;
	
struct completion	start_complete;
	
struct completion	stop_complete;
	
struct drm_exynos_ipp_property	property;
	
struct drm_exynos_ipp_cmd_work *start_work;
	
struct drm_exynos_ipp_cmd_work *stop_work;
	
struct drm_exynos_ipp_event_work *event_work;
	
enum drm_exynos_ipp_state	state;
	
struct drm_file	*filp;
};
/*
 * A structure of buffer information.
 *
 * @handles: Y, Cb, Cr each gem object handle.
 * @base: Y, Cb, Cr each planar address.
 */
struct drm_exynos_ipp_buf_info {
	
unsigned long	handles[EXYNOS_DRM_PLANAR_MAX];
	
dma_addr_t	base[EXYNOS_DRM_PLANAR_MAX];
};
/*
 * A structure of wb setting information.
 *
 * @enable: enable flag for wb.
 * @refresh: HZ of the refresh rate.
 */
struct drm_exynos_ipp_set_wb {
	
__u32	enable;
	
__u32	refresh;
};
/*
 * A structure of event work information.
 *
 * @work: work structure.
 * @ippdrv: current work ippdrv.
 * @buf_id: id of src, dst buffer.
 */
struct drm_exynos_ipp_event_work {
	
struct work_struct	work;
	
struct exynos_drm_ippdrv *ippdrv;
	
u32	buf_id[EXYNOS_DRM_OPS_MAX];
};
/*
 * A structure of source,destination operations.
 *
 * @set_fmt: set format of image.
 * @set_transf: set transform(rotations, flip).
 * @set_size: set size of region.
 * @set_addr: set address for dma.
 */
struct exynos_drm_ipp_ops {
	
int (*set_fmt)(struct device *dev, u32 fmt);
	
int (*set_transf)(struct device *dev,
		enum drm_exynos_degree degree,
		enum drm_exynos_flip flip, bool *swap);
	
int (*set_size)(struct device *dev, int swap,
		struct drm_exynos_pos *pos, struct drm_exynos_sz *sz);
	
int (*set_addr)(struct device *dev,
		 struct drm_exynos_ipp_buf_info *buf_info, u32 buf_id,
		enum drm_exynos_ipp_buf_type buf_type);
};
/*
 * A structure of ipp driver.
 *
 * @drv_list: list head for registed sub driver information.
 * @parent_dev: parent device information.
 * @dev: platform device.
 * @drm_dev: drm device.
 * @dedicated: dedicated ipp device.
 * @ops: source, destination operations.
 * @event_workq: event work queue.
 * @c_node: current command information.
 * @cmd_list: list head for command information.
 * @cmd_lock: lock for synchronization of access to cmd_list.
 * @prop_list: property informations of current ipp driver.
 * @check_property: check property about format, size, buffer.
 * @reset: reset ipp block.
 * @start: ipp each device start.
 * @stop: ipp each device stop.
 * @sched_event: work schedule handler.
 */
struct exynos_drm_ippdrv {
	
struct list_head	drv_list;
	
struct device	*parent_dev;
	
struct device	*dev;
	
struct drm_device	*drm_dev;
	
bool	dedicated;
	
struct exynos_drm_ipp_ops	*ops[EXYNOS_DRM_OPS_MAX];
	
struct workqueue_struct	*event_workq;
	
struct drm_exynos_ipp_cmd_node *c_node;
	
struct list_head	cmd_list;
	
struct mutex	cmd_lock;
	
struct drm_exynos_ipp_prop_list prop_list;
	
int (*check_property)(struct device *dev,
		struct drm_exynos_ipp_property *property);
	
int (*reset)(struct device *dev);
	
int (*start)(struct device *dev, enum drm_exynos_ipp_cmd cmd);
	
void (*stop)(struct device *dev, enum drm_exynos_ipp_cmd cmd);
	
void (*sched_event)(struct work_struct *work);
};
#ifdef CONFIG_DRM_EXYNOS_IPP
extern int exynos_drm_ippdrv_register(struct exynos_drm_ippdrv *ippdrv);
extern int exynos_drm_ippdrv_unregister(struct exynos_drm_ippdrv *ippdrv);
extern int exynos_drm_ipp_get_property(struct drm_device *drm_dev, void *data,
					 struct drm_file *file);
extern int exynos_drm_ipp_set_property(struct drm_device *drm_dev, void *data,
					 struct drm_file *file);
extern int exynos_drm_ipp_queue_buf(struct drm_device *drm_dev, void *data,
					 struct drm_file *file);
extern int exynos_drm_ipp_cmd_ctrl(struct drm_device *drm_dev, void *data,
					 struct drm_file *file);
extern int exynos_drm_ippnb_register(struct notifier_block *nb);
extern int exynos_drm_ippnb_unregister(struct notifier_block *nb);
extern int exynos_drm_ippnb_send_event(unsigned long val, void *v);
extern void ipp_sched_cmd(struct work_struct *work);
extern void ipp_sched_event(struct work_struct *work);
#else
static inline int exynos_drm_ippdrv_register(struct exynos_drm_ippdrv *ippdrv)
{
	return -ENODEV;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 16 | 100.00% | 1 | 100.00% | 
 | Total | 16 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ippdrv_unregister(struct exynos_drm_ippdrv *ippdrv)
{
	return -ENODEV;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 16 | 100.00% | 1 | 100.00% | 
 | Total | 16 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ipp_get_property(struct drm_device *drm_dev,
						void *data,
						struct drm_file *file_priv)
{
	return -ENOTTY;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 25 | 100.00% | 1 | 100.00% | 
 | Total | 25 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ipp_set_property(struct drm_device *drm_dev,
						void *data,
						struct drm_file *file_priv)
{
	return -ENOTTY;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 25 | 100.00% | 1 | 100.00% | 
 | Total | 25 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ipp_queue_buf(struct drm_device *drm_dev,
						void *data,
						struct drm_file *file)
{
	return -ENOTTY;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 25 | 100.00% | 1 | 100.00% | 
 | Total | 25 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ipp_cmd_ctrl(struct drm_device *drm_dev,
						void *data,
						struct drm_file *file)
{
	return -ENOTTY;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 25 | 100.00% | 1 | 100.00% | 
 | Total | 25 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ippnb_register(struct notifier_block *nb)
{
	return -ENODEV;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 16 | 100.00% | 1 | 100.00% | 
 | Total | 16 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ippnb_unregister(struct notifier_block *nb)
{
	return -ENODEV;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 16 | 100.00% | 1 | 100.00% | 
 | Total | 16 | 100.00% | 1 | 100.00% | 
static inline int exynos_drm_ippnb_send_event(unsigned long val, void *v)
{
	return -ENOTTY;
}
Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 19 | 100.00% | 1 | 100.00% | 
 | Total | 19 | 100.00% | 1 | 100.00% | 
#endif
#endif /* _EXYNOS_DRM_IPP_H_ */
Overall Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| eunchul kim | eunchul kim | 743 | 98.02% | 2 | 20.00% | 
| andrzej hajda | andrzej hajda | 7 | 0.92% | 3 | 30.00% | 
| youngjun cho | youngjun cho | 6 | 0.79% | 3 | 30.00% | 
| masanari iida | masanari iida | 1 | 0.13% | 1 | 10.00% | 
| inki dae | inki dae | 1 | 0.13% | 1 | 10.00% | 
 | Total | 758 | 100.00% | 10 | 100.00% | 
  
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.