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

rdma_user_rxe.h (4971B)


      1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
      2/*
      3 * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
      4 *
      5 * This software is available to you under a choice of one of two
      6 * licenses.  You may choose to be licensed under the terms of the GNU
      7 * General Public License (GPL) Version 2, available from the file
      8 * COPYING in the main directory of this source tree, or the
      9 * OpenIB.org BSD license below:
     10 *
     11 *     Redistribution and use in source and binary forms, with or
     12 *     without modification, are permitted provided that the following
     13 *     conditions are met:
     14 *
     15 *	- Redistributions of source code must retain the above
     16 *	  copyright notice, this list of conditions and the following
     17 *	  disclaimer.
     18 *
     19 *	- Redistributions in binary form must reproduce the above
     20 *	  copyright notice, this list of conditions and the following
     21 *	  disclaimer in the documentation and/or other materials
     22 *	  provided with the distribution.
     23 *
     24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     31 * SOFTWARE.
     32 */
     33
     34#ifndef RDMA_USER_RXE_H
     35#define RDMA_USER_RXE_H
     36
     37#include <linux/types.h>
     38#include <linux/socket.h>
     39#include <linux/in.h>
     40#include <linux/in6.h>
     41
     42enum {
     43	RXE_NETWORK_TYPE_IPV4 = 1,
     44	RXE_NETWORK_TYPE_IPV6 = 2,
     45};
     46
     47union rxe_gid {
     48	__u8	raw[16];
     49	struct {
     50		__be64	subnet_prefix;
     51		__be64	interface_id;
     52	} global;
     53};
     54
     55struct rxe_global_route {
     56	union rxe_gid	dgid;
     57	__u32		flow_label;
     58	__u8		sgid_index;
     59	__u8		hop_limit;
     60	__u8		traffic_class;
     61};
     62
     63struct rxe_av {
     64	__u8			port_num;
     65	/* From RXE_NETWORK_TYPE_* */
     66	__u8			network_type;
     67	__u8			dmac[6];
     68	struct rxe_global_route	grh;
     69	union {
     70		struct sockaddr_in	_sockaddr_in;
     71		struct sockaddr_in6	_sockaddr_in6;
     72	} sgid_addr, dgid_addr;
     73};
     74
     75struct rxe_send_wr {
     76	__aligned_u64		wr_id;
     77	__u32			num_sge;
     78	__u32			opcode;
     79	__u32			send_flags;
     80	union {
     81		__be32		imm_data;
     82		__u32		invalidate_rkey;
     83	} ex;
     84	union {
     85		struct {
     86			__aligned_u64 remote_addr;
     87			__u32	rkey;
     88			__u32	reserved;
     89		} rdma;
     90		struct {
     91			__aligned_u64 remote_addr;
     92			__aligned_u64 compare_add;
     93			__aligned_u64 swap;
     94			__u32	rkey;
     95			__u32	reserved;
     96		} atomic;
     97		struct {
     98			__u32	remote_qpn;
     99			__u32	remote_qkey;
    100			__u16	pkey_index;
    101			__u16	reserved;
    102			__u32	ah_num;
    103			__u32	pad[4];
    104			struct rxe_av av;
    105		} ud;
    106		struct {
    107			__aligned_u64	addr;
    108			__aligned_u64	length;
    109			__u32		mr_lkey;
    110			__u32		mw_rkey;
    111			__u32		rkey;
    112			__u32		access;
    113		} mw;
    114		/* reg is only used by the kernel and is not part of the uapi */
    115#ifdef __KERNEL__
    116		struct {
    117			union {
    118				struct ib_mr *mr;
    119				__aligned_u64 reserved;
    120			};
    121			__u32	     key;
    122			__u32	     access;
    123		} reg;
    124#endif
    125	} wr;
    126};
    127
    128struct rxe_sge {
    129	__aligned_u64 addr;
    130	__u32	length;
    131	__u32	lkey;
    132};
    133
    134struct mminfo {
    135	__aligned_u64		offset;
    136	__u32			size;
    137	__u32			pad;
    138};
    139
    140struct rxe_dma_info {
    141	__u32			length;
    142	__u32			resid;
    143	__u32			cur_sge;
    144	__u32			num_sge;
    145	__u32			sge_offset;
    146	__u32			reserved;
    147	union {
    148		__DECLARE_FLEX_ARRAY(__u8, inline_data);
    149		__DECLARE_FLEX_ARRAY(struct rxe_sge, sge);
    150	};
    151};
    152
    153struct rxe_send_wqe {
    154	struct rxe_send_wr	wr;
    155	__u32			status;
    156	__u32			state;
    157	__aligned_u64		iova;
    158	__u32			mask;
    159	__u32			first_psn;
    160	__u32			last_psn;
    161	__u32			ack_length;
    162	__u32			ssn;
    163	__u32			has_rd_atomic;
    164	struct rxe_dma_info	dma;
    165};
    166
    167struct rxe_recv_wqe {
    168	__aligned_u64		wr_id;
    169	__u32			num_sge;
    170	__u32			padding;
    171	struct rxe_dma_info	dma;
    172};
    173
    174struct rxe_create_ah_resp {
    175	__u32 ah_num;
    176	__u32 reserved;
    177};
    178
    179struct rxe_create_cq_resp {
    180	struct mminfo mi;
    181};
    182
    183struct rxe_resize_cq_resp {
    184	struct mminfo mi;
    185};
    186
    187struct rxe_create_qp_resp {
    188	struct mminfo rq_mi;
    189	struct mminfo sq_mi;
    190};
    191
    192struct rxe_create_srq_resp {
    193	struct mminfo mi;
    194	__u32 srq_num;
    195	__u32 reserved;
    196};
    197
    198struct rxe_modify_srq_cmd {
    199	__aligned_u64 mmap_info_addr;
    200};
    201
    202/* This data structure is stored at the base of work and
    203 * completion queues shared between user space and kernel space.
    204 * It contains the producer and consumer indices. Is also
    205 * contains a copy of the queue size parameters for user space
    206 * to use but the kernel must use the parameters in the
    207 * rxe_queue struct. For performance reasons arrange to have
    208 * producer and consumer indices in separate cache lines
    209 * the kernel should always mask the indices to avoid accessing
    210 * memory outside of the data area
    211 */
    212struct rxe_queue_buf {
    213	__u32			log2_elem_size;
    214	__u32			index_mask;
    215	__u32			pad_1[30];
    216	__u32			producer_index;
    217	__u32			pad_2[31];
    218	__u32			consumer_index;
    219	__u32			pad_3[31];
    220	__u8			data[];
    221};
    222
    223#endif /* RDMA_USER_RXE_H */