cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scif_ioctl.h (6382B)


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