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 */ 69struct 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 */ 79struct 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 */ 90struct 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 */ 103struct 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 */ 119struct 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 */ 133struct 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 */ 152struct 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 */ 165struct 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 */ 178struct 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 */ 192struct 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 */ 217