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 */ 68struct 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 */ 78struct 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 */ 89struct 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 */ 102struct 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 */ 118struct 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 */ 132struct 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 */ 151struct 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 */ 164struct 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 */ 177struct 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 */ 191struct 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