1 /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
2 /*
3  * Intel MIC Platform Software Stack (MPSS)
4  *
5  * This file is provided under a dual BSD/GPLv2 license.  When using or
6  * redistributing this file, you may do so under either license.
7  *
8  * GPL LICENSE SUMMARY
9  *
10  * Copyright(c) 2014 Intel Corporation.
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of version 2 of the GNU General Public License as
14  * published by the Free Software Foundation.
15  *
16  * This program is distributed in the hope that it will be useful, but
17  * WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * General Public License for more details.
20  *
21  * BSD LICENSE
22  *
23  * Copyright(c) 2014 Intel Corporation.
24  *
25  * Redistribution and use in source and binary forms, with or without
26  * modification, are permitted provided that the following conditions
27  * are met:
28  *
29  * * Redistributions of source code must retain the above copyright
30  *   notice, this list of conditions and the following disclaimer.
31  * * Redistributions in binary form must reproduce the above copyright
32  *   notice, this list of conditions and the following disclaimer in
33  *   the documentation and/or other materials provided with the
34  *   distribution.
35  * * Neither the name of Intel Corporation nor the names of its
36  *   contributors may be used to endorse or promote products derived
37  *   from this software without specific prior written permission.
38  *
39  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
43  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
46  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
47  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50  *
51  * Intel SCIF driver.
52  *
53  */
54 /*
55  * -----------------------------------------
56  * SCIF IOCTL interface information
57  * -----------------------------------------
58  */
59 #ifndef SCIF_IOCTL_H
60 #define SCIF_IOCTL_H
61 
62 #include <linux/types.h>
63 
64 /**
65  * struct scif_port_id - SCIF port information
66  * @node:	node on which port resides
67  * @port:	local port number
68  */
69 struct scif_port_id {
70 	uint16_t node;
71 	uint16_t port;
72 };
73 
74 /**
75  * struct scifioctl_connect - used for SCIF_CONNECT IOCTL
76  * @self:	used to read back the assigned port_id
77  * @peer:	destination node and port to connect to
78  */
79 struct scifioctl_connect {
80 	struct scif_port_id	self;
81 	struct scif_port_id	peer;
82 };
83 
84 /**
85  * struct scifioctl_accept - used for SCIF_ACCEPTREQ IOCTL
86  * @flags:	flags
87  * @peer:	global id of peer endpoint
88  * @endpt:	new connected endpoint descriptor
89  */
90 struct scifioctl_accept {
91 	int32_t			flags;
92 	struct scif_port_id	peer;
93 	uint64_t			endpt;
94 };
95 
96 /**
97  * struct scifioctl_msg - used for SCIF_SEND/SCIF_RECV IOCTL
98  * @msg:	message buffer address
99  * @len:	message length
100  * @flags:	flags
101  * @out_len:	number of bytes sent/received
102  */
103 struct scifioctl_msg {
104 	uint64_t	msg;
105 	int32_t	len;
106 	int32_t	flags;
107 	int32_t	out_len;
108 };
109 
110 /**
111  * struct scifioctl_reg - used for SCIF_REG IOCTL
112  * @addr:	starting virtual address
113  * @len:	length of range
114  * @offset:	offset of window
115  * @prot:	read/write protection
116  * @flags:	flags
117  * @out_offset:	offset returned
118  */
119 struct scifioctl_reg {
120 	uint64_t		addr;
121 	uint64_t		len;
122 	int64_t		offset;
123 	int32_t		prot;
124 	int32_t		flags;
125 	int64_t		out_offset;
126 };
127 
128 /**
129  * struct scifioctl_unreg - used for SCIF_UNREG IOCTL
130  * @offset:	start of range to unregister
131  * @len:	length of range to unregister
132  */
133 struct scifioctl_unreg {
134 	int64_t		offset;
135 	uint64_t		len;
136 };
137 
138 /**
139  * struct scifioctl_copy - used for SCIF DMA copy IOCTLs
140  *
141  * @loffset:	offset in local registered address space to/from
142  *		which to copy
143  * @len:	length of range to copy
144  * @roffset:	offset in remote registered address space to/from
145  *		which to copy
146  * @addr:	user virtual address to/from which to copy
147  * @flags:	flags
148  *
149  * This structure is used for SCIF_READFROM, SCIF_WRITETO, SCIF_VREADFROM
150  * and SCIF_VREADFROM IOCTL's.
151  */
152 struct scifioctl_copy {
153 	int64_t		loffset;
154 	uint64_t		len;
155 	int64_t		roffset;
156 	uint64_t		addr;
157 	int32_t		flags;
158 };
159 
160 /**
161  * struct scifioctl_fence_mark  - used for SCIF_FENCE_MARK IOCTL
162  * @flags:	flags
163  * @mark:	fence handle which is a pointer to a int32_t
164  */
165 struct scifioctl_fence_mark {
166 	int32_t	flags;
167 	uint64_t	mark;
168 };
169 
170 /**
171  * struct scifioctl_fence_signal - used for SCIF_FENCE_SIGNAL IOCTL
172  * @loff:	local offset
173  * @lval:	value to write to loffset
174  * @roff:	remote offset
175  * @rval:	value to write to roffset
176  * @flags:	flags
177  */
178 struct scifioctl_fence_signal {
179 	int64_t		loff;
180 	uint64_t		lval;
181 	int64_t		roff;
182 	uint64_t		rval;
183 	int32_t		flags;
184 };
185 
186 /**
187  * struct scifioctl_node_ids - used for SCIF_GET_NODEIDS IOCTL
188  * @nodes:	pointer to an array of node_ids
189  * @self:	ID of the current node
190  * @len:	length of array
191  */
192 struct scifioctl_node_ids {
193 	uint64_t	nodes;
194 	uint64_t	self;
195 	int32_t	len;
196 };
197 
198 #define SCIF_BIND		_IOWR('s', 1, uint64_t)
199 #define SCIF_LISTEN		_IOW('s', 2, int32_t)
200 #define SCIF_CONNECT		_IOWR('s', 3, struct scifioctl_connect)
201 #define SCIF_ACCEPTREQ		_IOWR('s', 4, struct scifioctl_accept)
202 #define SCIF_ACCEPTREG		_IOWR('s', 5, uint64_t)
203 #define SCIF_SEND		_IOWR('s', 6, struct scifioctl_msg)
204 #define SCIF_RECV		_IOWR('s', 7, struct scifioctl_msg)
205 #define SCIF_REG		_IOWR('s', 8, struct scifioctl_reg)
206 #define SCIF_UNREG		_IOWR('s', 9, struct scifioctl_unreg)
207 #define SCIF_READFROM		_IOWR('s', 10, struct scifioctl_copy)
208 #define SCIF_WRITETO		_IOWR('s', 11, struct scifioctl_copy)
209 #define SCIF_VREADFROM		_IOWR('s', 12, struct scifioctl_copy)
210 #define SCIF_VWRITETO		_IOWR('s', 13, struct scifioctl_copy)
211 #define SCIF_GET_NODEIDS	_IOWR('s', 14, struct scifioctl_node_ids)
212 #define SCIF_FENCE_MARK		_IOWR('s', 15, struct scifioctl_fence_mark)
213 #define SCIF_FENCE_WAIT		_IOWR('s', 16, int32_t)
214 #define SCIF_FENCE_SIGNAL	_IOWR('s', 17, struct scifioctl_fence_signal)
215 
216 #endif /* SCIF_IOCTL_H */
217