/*
 * Samsung Exynos SoC series VIPx driver
 *
 * Copyright (c) 2018 Samsung Electronics Co., Ltd
 *
 * 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 __VIPX_INTERFACE_H__
#define __VIPX_INTERFACE_H__

#include <linux/platform_device.h>
#include <linux/timer.h>

#include "vipx-config.h"
#include "platform/vipx-ctrl.h"
#include "vipx-taskmgr.h"

#define VIPX_WORK_MAX_COUNT		(20)
#define VIPX_WORK_MAX_DATA		(24)
#define VIPX_RESPONSE_TIMEOUT		(500) /* msecs */

struct vipx_system;

enum vipx_interrupt_direction {
	IRQ0_TO_DEVICE,
	IRQ1_TO_DEVICE,
	IRQ_FROM_DEVICE,
};

enum vipx_work_message {
	VIPX_WORK_MTYPE_BLK,
	VIPX_WORK_MTYPE_NBLK,
};

enum vipx_interface_state {
	VIPX_ITF_STATE_OPEN,
	VIPX_ITF_STATE_BOOTUP,
	VIPX_ITF_STATE_START
};

struct vipx_work {
	struct list_head		list;
	unsigned int			valid;
	unsigned int			id;
	enum vipx_work_message		message;
	unsigned int			param0;
	unsigned int			param1;
	unsigned int			param2;
	unsigned int			param3;
	unsigned char			data[VIPX_WORK_MAX_DATA];
};

struct vipx_work_list {
	struct vipx_work		work[VIPX_WORK_MAX_COUNT];
	spinlock_t			slock;
	struct list_head		free_head;
	unsigned int			free_cnt;
	struct list_head		reply_head;
	unsigned int			reply_cnt;
};

struct vipx_interface {
	int				irq[REG_MAX];
	void __iomem			*regs;
	struct vipx_taskmgr		taskmgr;
	void				*cookie;
	unsigned long			state;

	wait_queue_head_t		reply_wq;
	spinlock_t			process_barrier;
	struct vipx_work_list		work_list;
	struct work_struct		work_queue;

	struct vipx_task		*request[VIPX_MAX_GRAPH];
	struct vipx_task		*process;
	struct vipx_work		reply[VIPX_MAX_GRAPH];
	unsigned int			done_cnt;
	unsigned int			wait_time;

	struct vipx_mailbox_ctrl	*mctrl;
	struct vipx_system		*system;
};

int vipx_hw_wait_bootup(struct vipx_interface *itf);

int vipx_hw_config(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_process(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_create(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_destroy(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_init(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_deinit(struct vipx_interface *itf, struct vipx_task *itask);

int vipx_hw_load_graph(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_unload_graph(struct vipx_interface *itf, struct vipx_task *itask);
int vipx_hw_execute_graph(struct vipx_interface *itf, struct vipx_task *itask);

int vipx_interface_start(struct vipx_interface *itf);
int vipx_interface_stop(struct vipx_interface *itf);
int vipx_interface_open(struct vipx_interface *itf, void *mbox);
int vipx_interface_close(struct vipx_interface *itf);

int vipx_interface_probe(struct vipx_system *sys);
void vipx_interface_remove(struct vipx_interface *itf);

#endif
