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