On Wed, Jan 30, 2019 at 06:21:29PM +0100, bmt@xxxxxxxxxxxxxx wrote: > diff --git a/include/uapi/rdma/siw_user.h b/include/uapi/rdma/siw_user.h > new file mode 100644 > index 000000000000..25d1005a0b20 > +++ b/include/uapi/rdma/siw_user.h > @@ -0,0 +1,216 @@ > +/* > + * Software iWARP device driver for Linux > + * > + * Authors: Bernard Metzler <bmt@xxxxxxxxxxxxxx> > + * > + * Copyright (c) 2008-2017, IBM Corporation > + * > + * This software is available to you under a choice of one of two > + * licenses. You may choose to be licensed under the terms of the GNU > + * General Public License (GPL) Version 2, available from the file > + * COPYING in the main directory of this source tree, or the > + * BSD license below: > + * > + * Redistribution and use in source and binary forms, with or > + * without modification, are permitted provided that the following > + * conditions are met: > + * > + * - Redistributions of source code must retain the above copyright notice, > + * this list of conditions and the following disclaimer. > + * > + * - Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * - Neither the name of IBM nor the names of its contributors may be > + * used to endorse or promote products derived from this software without > + * specific prior written permission. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND > + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS > + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN > + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN > + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > + * SOFTWARE. > + */ I think this is the wrong license for uapi stuff - follow the SPDX headers from the other files please > + > +#ifndef _SIW_USER_H > +#define _SIW_USER_H > + > +#include <linux/types.h> > + > +/*Common string that is matched to accept the device by the user library*/ > +#define SIW_NODE_DESC_COMMON "Software iWARP stack" > + > +#define SIW_IBDEV_PREFIX "siw_" > + > +#define VERSION_ID_SOFTIWARP 2 > + > +#define SIW_MAX_SGE 6 > +#define SIW_MAX_UOBJ_KEY 0xffffff > +#define SIW_INVAL_UOBJ_KEY (SIW_MAX_UOBJ_KEY + 1) > + > +struct siw_uresp_create_cq { > + __u32 cq_id; > + __u32 num_cqe; > + __u32 cq_key; > +}; All command structs should be a multiple of 8 bytes.. Otherwise they cannot be used on the _ex interface side. > + > +struct siw_uresp_create_qp { > + __u32 qp_id; > + __u32 num_sqe; > + __u32 num_rqe; > + __u32 sq_key; > + __u32 rq_key; > +}; > + > +struct siw_ureq_reg_mr { > + __u8 stag_key; > + __u8 reserved[3]; > +}; > + > +struct siw_uresp_reg_mr { > + __u32 stag; > +}; > + > +struct siw_uresp_create_srq { > + __u32 num_rqe; > + __u32 srq_key; > +}; > + > +struct siw_uresp_alloc_ctx { > + __u32 dev_id; > +}; > + > +enum siw_opcode { > + SIW_OP_WRITE = 0, > + SIW_OP_READ = 1, > + SIW_OP_READ_LOCAL_INV = 2, > + SIW_OP_SEND = 3, > + SIW_OP_SEND_WITH_IMM = 4, > + SIW_OP_SEND_REMOTE_INV = 5, > + > + /* Unsupported */ > + SIW_OP_FETCH_AND_ADD = 6, > + SIW_OP_COMP_AND_SWAP = 7, > + > + SIW_OP_RECEIVE = 8, > + /* provider internal SQE */ > + SIW_OP_READ_RESPONSE = 9, > + /* > + * below opcodes valid for > + * in-kernel clients only > + */ > + SIW_OP_INVAL_STAG = 10, > + SIW_OP_REG_MR = 11, > + SIW_NUM_OPCODES = 12 > +}; > + > +/* Keep it same as ibv_sge to allow for memcpy */ > +struct siw_sge { > + __u64 laddr; __aligned_u64 in all places > +struct siw_cqe { > + __u64 id; > + __u8 flags; > + __u8 opcode; > + __u16 status; > + __u32 bytes; > + __u64 imm_data; > + /* QP number or QP pointer */ > + union { > + void *qp; > + __u64 qp_id; void * in this header is almost certainly wrong > + }; > +}; > + > +/* > + * Shared structure between user and kernel > + * to control CQ arming. > + */ > +struct siw_cq_ctrl { > + enum siw_notify_flags notify; Do not use 'enum' in any of these structs. Only fixed size memory. Is this shared memory? Jason