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 */ 216