Home | History | Annotate | Download | only in linux
      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