1 /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ 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 39 union rxe_gid { 40 __u8 raw[16]; 41 struct { 42 __be64 subnet_prefix; 43 __be64 interface_id; 44 } global; 45 }; 46 47 struct rxe_global_route { 48 union rxe_gid dgid; 49 __u32 flow_label; 50 __u8 sgid_index; 51 __u8 hop_limit; 52 __u8 traffic_class; 53 }; 54 55 struct rxe_av { 56 __u8 port_num; 57 __u8 network_type; 58 struct rxe_global_route grh; 59 union { 60 struct sockaddr _sockaddr; 61 struct sockaddr_in _sockaddr_in; 62 struct sockaddr_in6 _sockaddr_in6; 63 } sgid_addr, dgid_addr; 64 }; 65 66 struct rxe_send_wr { 67 __u64 wr_id; 68 __u32 num_sge; 69 __u32 opcode; 70 __u32 send_flags; 71 union { 72 __be32 imm_data; 73 __u32 invalidate_rkey; 74 } ex; 75 union { 76 struct { 77 __u64 remote_addr; 78 __u32 rkey; 79 } rdma; 80 struct { 81 __u64 remote_addr; 82 __u64 compare_add; 83 __u64 swap; 84 __u32 rkey; 85 } atomic; 86 struct { 87 __u32 remote_qpn; 88 __u32 remote_qkey; 89 __u16 pkey_index; 90 } ud; 91 struct { 92 struct ib_mr *mr; 93 __u32 key; 94 int access; 95 } reg; 96 } wr; 97 }; 98 99 struct rxe_sge { 100 __u64 addr; 101 __u32 length; 102 __u32 lkey; 103 }; 104 105 struct mminfo { 106 __u64 offset; 107 __u32 size; 108 __u32 pad; 109 }; 110 111 struct rxe_dma_info { 112 __u32 length; 113 __u32 resid; 114 __u32 cur_sge; 115 __u32 num_sge; 116 __u32 sge_offset; 117 union { 118 __u8 inline_data[0]; 119 struct rxe_sge sge[0]; 120 }; 121 }; 122 123 struct rxe_send_wqe { 124 struct rxe_send_wr wr; 125 struct rxe_av av; 126 __u32 status; 127 __u32 state; 128 __u64 iova; 129 __u32 mask; 130 __u32 first_psn; 131 __u32 last_psn; 132 __u32 ack_length; 133 __u32 ssn; 134 __u32 has_rd_atomic; 135 struct rxe_dma_info dma; 136 }; 137 138 struct rxe_recv_wqe { 139 __u64 wr_id; 140 __u32 num_sge; 141 __u32 padding; 142 struct rxe_dma_info dma; 143 }; 144 145 #endif /* RDMA_USER_RXE_H */ 146