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