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