cregit-Linux how code gets into the kernel

Release 4.11 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

PersonTokensPropCommitsCommitProp
Eun-Chul Kim16100.00%1100.00%
Total16100.00%1100.00%


static inline int exynos_drm_ippdrv_unregister(struct exynos_drm_ippdrv *ippdrv) { return -ENODEV; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim16100.00%1100.00%
Total16100.00%1100.00%


static inline int exynos_drm_ipp_get_property(struct drm_device *drm_dev, void *data, struct drm_file *file_priv) { return -ENOTTY; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim25100.00%1100.00%
Total25100.00%1100.00%


static inline int exynos_drm_ipp_set_property(struct drm_device *drm_dev, void *data, struct drm_file *file_priv) { return -ENOTTY; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim25100.00%1100.00%
Total25100.00%1100.00%


static inline int exynos_drm_ipp_queue_buf(struct drm_device *drm_dev, void *data, struct drm_file *file) { return -ENOTTY; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim25100.00%1100.00%
Total25100.00%1100.00%


static inline int exynos_drm_ipp_cmd_ctrl(struct drm_device *drm_dev, void *data, struct drm_file *file) { return -ENOTTY; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim25100.00%1100.00%
Total25100.00%1100.00%


static inline int exynos_drm_ippnb_register(struct notifier_block *nb) { return -ENODEV; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim16100.00%1100.00%
Total16100.00%1100.00%


static inline int exynos_drm_ippnb_unregister(struct notifier_block *nb) { return -ENODEV; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim16100.00%1100.00%
Total16100.00%1100.00%


static inline int exynos_drm_ippnb_send_event(unsigned long val, void *v) { return -ENOTTY; }

Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim19100.00%1100.00%
Total19100.00%1100.00%

#endif #endif /* _EXYNOS_DRM_IPP_H_ */

Overall Contributors

PersonTokensPropCommitsCommitProp
Eun-Chul Kim74398.02%220.00%
Andrzej Hajda70.92%330.00%
YoungJun Cho60.79%330.00%
Inki Dae10.13%110.00%
Masanari Iida10.13%110.00%
Total758100.00%10100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.