1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2 /*
3  * Copyright 2021 Google LLC.
4  *
5  * Author: Vinay Kalia <[email protected]>
6  */
7 
8 #ifndef _BIGO_H_
9 #define _BIGO_H_
10 
11 #include <linux/ioctl.h>
12 
13 #include <linux/types.h>
14 
15 /*
16  * Structures as parameters for BigOcean commands. It should be passed
17  * into ioctl() as the third parameter.
18  *
19  * The usage and meaning of each field is documented in command
20  * identifiers.
21  */
22 
23 struct bigo_ioc_regs {
24 	__u64 regs;
25 	__u32 regs_size;
26 };
27 
28 struct bigo_ioc_mapping {
29 	int fd;
30 	__u32 iova;
31 	__u32 offset;
32 	__u32 size;
33 	__u32 skip_cmo;
34 };
35 
36 struct bigo_ioc_frmsize {
37 	__u32 height;
38 	__u32 width;
39 };
40 
41 struct bigo_ioc_misc {
42 	__u32 cmd;
43 	__u32 ret;
44 	__u32 data0;
45 	__u32 data1;
46 	__u32 data2;
47 	__u32 data3;
48 };
49 
50 struct bigo_cache_info {
51 	__u32 size;
52 	__u32 pid;
53 };
54 
55 /**
56  * @flags: Set of access flags defined in uapi/linux/dma-buf.h
57  */
58 struct bigo_buf_sync {
59 	int fd;
60 	__u32 offset;
61 	__u32 size;
62 	__u64 flags;
63 };
64 
65 /*
66  * Helpers for defining command identifiers. User space should not
67  * use these macros directly.
68  *
69  * <START OF HELPERS>
70  */
71 #define BIGO_IOC_MAGIC 'B'
72 
73 #define _BIGO_IO(nr) _IO(BIGO_IOC_MAGIC, nr)
74 #define _BIGO_IOR(nr, size) _IOR(BIGO_IOC_MAGIC, nr, size)
75 #define _BIGO_IOW(nr, size) _IOW(BIGO_IOC_MAGIC, nr, size)
76 #define _BIGO_IOWR(nr, size) _IOWR(BIGO_IOC_MAGIC, nr, size)
77 
78 enum bigo_cmd_id {
79 	BIGO_CMD_PROCESS,
80 	BIGO_CMD_ABORT,
81 	BIGO_CMD_MAP,
82 	BIGO_CMD_UNMAP,
83 	BIGO_CMD_CONFIG_FRMRATE,
84 	BIGO_CMD_CONFIG_FRMSIZE,
85 	BIGO_CMD_GET_CACHE_INFO,
86 	BIGO_CMD_CONFIG_SECURE,
87 	BIGO_CMD_CONFIG_PRIORITY,
88 	BIGO_CMD_DMA_SYNC,
89 	BIGO_CMD_MISC,
90 	BIGO_CMD_MAXNR,
91 };
92 /* <END OF HELPERS> */
93 
94 #define BIGO_IOCX_PROCESS _BIGO_IOWR(BIGO_CMD_PROCESS, struct bigo_ioc_regs)
95 #define BIGO_IOCX_MAP _BIGO_IOWR(BIGO_CMD_MAP, struct bigo_ioc_mapping)
96 #define BIGO_IOCX_UNMAP _BIGO_IOW(BIGO_CMD_UNMAP, struct bigo_ioc_mapping)
97 #define BIGO_IOCX_CONFIG_FRMRATE _BIGO_IOW(BIGO_CMD_CONFIG_FRMRATE, __u32)
98 #define BIGO_IOCX_CONFIG_FRMSIZE                                               \
99 	_BIGO_IOW(BIGO_CMD_CONFIG_FRMSIZE, struct bigo_ioc_frmsize)
100 #define BIGO_IOCX_GET_CACHE_INFO                                               \
101 	_BIGO_IOR(BIGO_CMD_GET_CACHE_INFO, struct bigo_cache_info)
102 #define BIGO_IOCX_ABORT _BIGO_IO(BIGO_CMD_ABORT)
103 #define BIGO_IOCX_CONFIG_SECURE _BIGO_IOW(BIGO_CMD_CONFIG_SECURE, __u32)
104 #define BIGO_IOCX_CONFIG_PRIORITY _BIGO_IOW(BIGO_CMD_CONFIG_PRIORITY, __s32)
105 #define BIGO_IOCX_DMA_SYNC _BIGO_IOW(BIGO_CMD_DMA_SYNC, struct bigo_buf_sync)
106 #define BIGO_IOCX_MISC _BIGO_IOW(BIGO_CMD_MISC, struct bigo_ioc_misc)
107 
108 #endif /* _BIGO_H_ */
109