112 lines
3.0 KiB
C
112 lines
3.0 KiB
C
|
/*
|
||
|
* 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_IOCTL_H__
|
||
|
#define __VIPX_IOCTL_H__
|
||
|
|
||
|
#include <linux/fs.h>
|
||
|
#include <linux/uaccess.h>
|
||
|
|
||
|
#include "vs4l.h"
|
||
|
#include "vipx-common-type.h"
|
||
|
|
||
|
#define VIPX_CTRL_VIPX_BASE (0x00010000)
|
||
|
#define VIPX_CTRL_DUMP (VIPX_CTRL_VIPX_BASE + 1)
|
||
|
#define VIPX_CTRL_MODE (VIPX_CTRL_VIPX_BASE + 2)
|
||
|
#define VIPX_CTRL_TEST (VIPX_CTRL_VIPX_BASE + 3)
|
||
|
|
||
|
struct vipx_context;
|
||
|
|
||
|
struct vipx_ioc_load_kernel_binary {
|
||
|
unsigned int size;
|
||
|
unsigned int global_id;
|
||
|
int kernel_fd;
|
||
|
unsigned int kernel_size;
|
||
|
int ret;
|
||
|
struct timespec timestamp[4];
|
||
|
int reserved[2];
|
||
|
};
|
||
|
|
||
|
struct vipx_ioc_unload_kernel_binary {
|
||
|
unsigned int size;
|
||
|
unsigned int global_id;
|
||
|
int kernel_fd;
|
||
|
unsigned int kernel_size;
|
||
|
int ret;
|
||
|
struct timespec timestamp[4];
|
||
|
int reserved[2];
|
||
|
};
|
||
|
|
||
|
struct vipx_ioc_load_graph_info {
|
||
|
unsigned int size;
|
||
|
struct vipx_common_graph_info graph_info;
|
||
|
int ret;
|
||
|
struct timespec timestamp[4];
|
||
|
int reserved[2];
|
||
|
};
|
||
|
|
||
|
struct vipx_ioc_unload_graph_info {
|
||
|
unsigned int size;
|
||
|
unsigned int graph_id;
|
||
|
int ret;
|
||
|
struct timespec timestamp[4];
|
||
|
int reserved[2];
|
||
|
};
|
||
|
|
||
|
struct vipx_ioc_execute_submodel {
|
||
|
unsigned int size;
|
||
|
struct vipx_common_execute_info execute_info;
|
||
|
int ret;
|
||
|
struct timespec timestamp[4];
|
||
|
int reserved[2];
|
||
|
};
|
||
|
|
||
|
#define VIPX_IOC_LOAD_KERNEL_BINARY \
|
||
|
_IOWR('V', 0, struct vipx_ioc_load_kernel_binary)
|
||
|
#define VIPX_IOC_UNLOAD_KERNEL_BINARY \
|
||
|
_IOWR('V', 1, struct vipx_ioc_unload_kernel_binary)
|
||
|
#define VIPX_IOC_LOAD_GRAPH_INFO \
|
||
|
_IOWR('V', 2, struct vipx_ioc_load_graph_info)
|
||
|
#define VIPX_IOC_UNLOAD_GRAPH_INFO \
|
||
|
_IOWR('V', 3, struct vipx_ioc_unload_graph_info)
|
||
|
#define VIPX_IOC_EXECUTE_SUBMODEL \
|
||
|
_IOWR('V', 4, struct vipx_ioc_execute_submodel)
|
||
|
|
||
|
union vipx_ioc_arg {
|
||
|
struct vipx_ioc_load_kernel_binary kernel_bin;
|
||
|
struct vipx_ioc_unload_kernel_binary unload_kbin;
|
||
|
struct vipx_ioc_load_graph_info load_ginfo;
|
||
|
struct vipx_ioc_unload_graph_info unload_ginfo;
|
||
|
struct vipx_ioc_execute_submodel exec;
|
||
|
};
|
||
|
|
||
|
struct vipx_ioctl_ops {
|
||
|
int (*load_kernel_binary)(struct vipx_context *vctx,
|
||
|
struct vipx_ioc_load_kernel_binary *args);
|
||
|
int (*unload_kernel_binary)(struct vipx_context *vctx,
|
||
|
struct vipx_ioc_unload_kernel_binary *args);
|
||
|
int (*load_graph_info)(struct vipx_context *vctx,
|
||
|
struct vipx_ioc_load_graph_info *args);
|
||
|
int (*unload_graph_info)(struct vipx_context *vctx,
|
||
|
struct vipx_ioc_unload_graph_info *args);
|
||
|
int (*execute_submodel)(struct vipx_context *vctx,
|
||
|
struct vipx_ioc_execute_submodel *args);
|
||
|
};
|
||
|
|
||
|
long vipx_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||
|
#if defined(CONFIG_COMPAT)
|
||
|
long vipx_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||
|
#else
|
||
|
static inline long vipx_compat_ioctl(struct file *file, unsigned int cmd,
|
||
|
unsigned long arg) { return 0; };
|
||
|
#endif
|
||
|
|
||
|
#endif
|