linux/include/uapi/rdma/rdma_user_rxe.h
<<
>>
Prefs
   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
  42union rxe_gid {
  43        __u8    raw[16];
  44        struct {
  45                __be64  subnet_prefix;
  46                __be64  interface_id;
  47        } global;
  48};
  49
  50struct rxe_global_route {
  51        union rxe_gid   dgid;
  52        __u32           flow_label;
  53        __u8            sgid_index;
  54        __u8            hop_limit;
  55        __u8            traffic_class;
  56};
  57
  58struct rxe_av {
  59        __u8                    port_num;
  60        __u8                    network_type;
  61        __u8                    dmac[6];
  62        struct rxe_global_route grh;
  63        union {
  64                struct sockaddr_in      _sockaddr_in;
  65                struct sockaddr_in6     _sockaddr_in6;
  66        } sgid_addr, dgid_addr;
  67};
  68
  69struct rxe_send_wr {
  70        __aligned_u64           wr_id;
  71        __u32                   num_sge;
  72        __u32                   opcode;
  73        __u32                   send_flags;
  74        union {
  75                __be32          imm_data;
  76                __u32           invalidate_rkey;
  77        } ex;
  78        union {
  79                struct {
  80                        __aligned_u64 remote_addr;
  81                        __u32   rkey;
  82                        __u32   reserved;
  83                } rdma;
  84                struct {
  85                        __aligned_u64 remote_addr;
  86                        __aligned_u64 compare_add;
  87                        __aligned_u64 swap;
  88                        __u32   rkey;
  89                        __u32   reserved;
  90                } atomic;
  91                struct {
  92                        __u32   remote_qpn;
  93                        __u32   remote_qkey;
  94                        __u16   pkey_index;
  95                } ud;
  96                /* reg is only used by the kernel and is not part of the uapi */
  97                struct {
  98                        union {
  99                                struct ib_mr *mr;
 100                                __aligned_u64 reserved;
 101                        };
 102                        __u32        key;
 103                        __u32        access;
 104                } reg;
 105        } wr;
 106};
 107
 108struct rxe_sge {
 109        __aligned_u64 addr;
 110        __u32   length;
 111        __u32   lkey;
 112};
 113
 114struct mminfo {
 115        __aligned_u64           offset;
 116        __u32                   size;
 117        __u32                   pad;
 118};
 119
 120struct rxe_dma_info {
 121        __u32                   length;
 122        __u32                   resid;
 123        __u32                   cur_sge;
 124        __u32                   num_sge;
 125        __u32                   sge_offset;
 126        __u32                   reserved;
 127        union {
 128                __u8            inline_data[0];
 129                struct rxe_sge  sge[0];
 130        };
 131};
 132
 133struct rxe_send_wqe {
 134        struct rxe_send_wr      wr;
 135        struct rxe_av           av;
 136        __u32                   status;
 137        __u32                   state;
 138        __aligned_u64           iova;
 139        __u32                   mask;
 140        __u32                   first_psn;
 141        __u32                   last_psn;
 142        __u32                   ack_length;
 143        __u32                   ssn;
 144        __u32                   has_rd_atomic;
 145        struct rxe_dma_info     dma;
 146};
 147
 148struct rxe_recv_wqe {
 149        __aligned_u64           wr_id;
 150        __u32                   num_sge;
 151        __u32                   padding;
 152        struct rxe_dma_info     dma;
 153};
 154
 155struct rxe_create_cq_resp {
 156        struct mminfo mi;
 157};
 158
 159struct rxe_resize_cq_resp {
 160        struct mminfo mi;
 161};
 162
 163struct rxe_create_qp_resp {
 164        struct mminfo rq_mi;
 165        struct mminfo sq_mi;
 166};
 167
 168struct rxe_create_srq_resp {
 169        struct mminfo mi;
 170        __u32 srq_num;
 171        __u32 reserved;
 172};
 173
 174struct rxe_modify_srq_cmd {
 175        __aligned_u64 mmap_info_addr;
 176};
 177
 178#endif /* RDMA_USER_RXE_H */
 179