GNU Linux-libre 6.9.2-gnu
[releases.git] / include / uapi / linux / scif_ioctl.h
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         __u16 node;
71         __u16 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         __s32                   flags;
92         struct scif_port_id     peer;
93         __u64                   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         __u64   msg;
105         __s32   len;
106         __s32   flags;
107         __s32   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         __u64           addr;
121         __u64           len;
122         __s64           offset;
123         __s32           prot;
124         __s32           flags;
125         __s64           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         __s64           offset;
135         __u64           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         __s64           loffset;
154         __u64           len;
155         __s64           roffset;
156         __u64           addr;
157         __s32           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 __s32
164  */
165 struct scifioctl_fence_mark {
166         __s32   flags;
167         __u64   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         __s64           loff;
180         __u64           lval;
181         __s64           roff;
182         __u64           rval;
183         __s32           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         __u64   nodes;
194         __u64   self;
195         __s32   len;
196 };
197
198 #define SCIF_BIND               _IOWR('s', 1, __u64)
199 #define SCIF_LISTEN             _IOW('s', 2, __s32)
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, __u64)
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, __s32)
214 #define SCIF_FENCE_SIGNAL       _IOWR('s', 17, struct scifioctl_fence_signal)
215
216 #endif /* SCIF_IOCTL_H */