UAPI: (Scripted) Disintegrate include/rdma
authorDavid Howells <dhowells@redhat.com>
Wed, 21 Nov 2012 15:47:40 +0000 (15:47 +0000)
committerRoland Dreier <roland@purestorage.com>
Thu, 22 Nov 2012 08:43:10 +0000 (00:43 -0800)
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Michael Kerrisk <mtk.manpages@gmail.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: Dave Jones <davej@redhat.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
14 files changed:
include/rdma/Kbuild
include/rdma/ib_user_cm.h [deleted file]
include/rdma/ib_user_mad.h [deleted file]
include/rdma/ib_user_sa.h [deleted file]
include/rdma/ib_user_verbs.h [deleted file]
include/rdma/rdma_netlink.h
include/rdma/rdma_user_cm.h [deleted file]
include/uapi/rdma/Kbuild
include/uapi/rdma/ib_user_cm.h [new file with mode: 0644]
include/uapi/rdma/ib_user_mad.h [new file with mode: 0644]
include/uapi/rdma/ib_user_sa.h [new file with mode: 0644]
include/uapi/rdma/ib_user_verbs.h [new file with mode: 0644]
include/uapi/rdma/rdma_netlink.h [new file with mode: 0644]
include/uapi/rdma/rdma_user_cm.h [new file with mode: 0644]

index ea56f76c0c2208dd2a9aea0d599b67e3b51b6a18..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,6 +0,0 @@
-header-y += ib_user_cm.h
-header-y += ib_user_mad.h
-header-y += ib_user_sa.h
-header-y += ib_user_verbs.h
-header-y += rdma_netlink.h
-header-y += rdma_user_cm.h
diff --git a/include/rdma/ib_user_cm.h b/include/rdma/ib_user_cm.h
deleted file mode 100644 (file)
index f79014a..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright (c) 2005 Topspin Communications.  All rights reserved.
- * Copyright (c) 2005 Intel Corporation.  All rights reserved.
- *
- * 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
- * OpenIB.org 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.
- *
- * 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.
- */
-
-#ifndef IB_USER_CM_H
-#define IB_USER_CM_H
-
-#include <linux/types.h>
-#include <rdma/ib_user_sa.h>
-
-#define IB_USER_CM_ABI_VERSION 5
-
-enum {
-       IB_USER_CM_CMD_CREATE_ID,
-       IB_USER_CM_CMD_DESTROY_ID,
-       IB_USER_CM_CMD_ATTR_ID,
-
-       IB_USER_CM_CMD_LISTEN,
-       IB_USER_CM_CMD_NOTIFY,
-
-       IB_USER_CM_CMD_SEND_REQ,
-       IB_USER_CM_CMD_SEND_REP,
-       IB_USER_CM_CMD_SEND_RTU,
-       IB_USER_CM_CMD_SEND_DREQ,
-       IB_USER_CM_CMD_SEND_DREP,
-       IB_USER_CM_CMD_SEND_REJ,
-       IB_USER_CM_CMD_SEND_MRA,
-       IB_USER_CM_CMD_SEND_LAP,
-       IB_USER_CM_CMD_SEND_APR,
-       IB_USER_CM_CMD_SEND_SIDR_REQ,
-       IB_USER_CM_CMD_SEND_SIDR_REP,
-
-       IB_USER_CM_CMD_EVENT,
-       IB_USER_CM_CMD_INIT_QP_ATTR,
-};
-/*
- * command ABI structures.
- */
-struct ib_ucm_cmd_hdr {
-       __u32 cmd;
-       __u16 in;
-       __u16 out;
-};
-
-struct ib_ucm_create_id {
-       __u64 uid;
-       __u64 response;
-};
-
-struct ib_ucm_create_id_resp {
-       __u32 id;
-};
-
-struct ib_ucm_destroy_id {
-       __u64 response;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct ib_ucm_destroy_id_resp {
-       __u32 events_reported;
-};
-
-struct ib_ucm_attr_id {
-       __u64 response;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct ib_ucm_attr_id_resp {
-       __be64 service_id;
-       __be64 service_mask;
-       __be32 local_id;
-       __be32 remote_id;
-};
-
-struct ib_ucm_init_qp_attr {
-       __u64 response;
-       __u32 id;
-       __u32 qp_state;
-};
-
-struct ib_ucm_listen {
-       __be64 service_id;
-       __be64 service_mask;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct ib_ucm_notify {
-       __u32 id;
-       __u32 event;
-};
-
-struct ib_ucm_private_data {
-       __u64 data;
-       __u32 id;
-       __u8  len;
-       __u8  reserved[3];
-};
-
-struct ib_ucm_req {
-       __u32 id;
-       __u32 qpn;
-       __u32 qp_type;
-       __u32 psn;
-       __be64 sid;
-       __u64 data;
-       __u64 primary_path;
-       __u64 alternate_path;
-       __u8  len;
-       __u8  peer_to_peer;
-       __u8  responder_resources;
-       __u8  initiator_depth;
-       __u8  remote_cm_response_timeout;
-       __u8  flow_control;
-       __u8  local_cm_response_timeout;
-       __u8  retry_count;
-       __u8  rnr_retry_count;
-       __u8  max_cm_retries;
-       __u8  srq;
-       __u8  reserved[5];
-};
-
-struct ib_ucm_rep {
-       __u64 uid;
-       __u64 data;
-       __u32 id;
-       __u32 qpn;
-       __u32 psn;
-       __u8  len;
-       __u8  responder_resources;
-       __u8  initiator_depth;
-       __u8  target_ack_delay;
-       __u8  failover_accepted;
-       __u8  flow_control;
-       __u8  rnr_retry_count;
-       __u8  srq;
-       __u8  reserved[4];
-};
-
-struct ib_ucm_info {
-       __u32 id;
-       __u32 status;
-       __u64 info;
-       __u64 data;
-       __u8  info_len;
-       __u8  data_len;
-       __u8  reserved[6];
-};
-
-struct ib_ucm_mra {
-       __u64 data;
-       __u32 id;
-       __u8  len;
-       __u8  timeout;
-       __u8  reserved[2];
-};
-
-struct ib_ucm_lap {
-       __u64 path;
-       __u64 data;
-       __u32 id;
-       __u8  len;
-       __u8  reserved[3];
-};
-
-struct ib_ucm_sidr_req {
-       __u32 id;
-       __u32 timeout;
-       __be64 sid;
-       __u64 data;
-       __u64 path;
-       __u16 reserved_pkey;
-       __u8  len;
-       __u8  max_cm_retries;
-       __u8  reserved[4];
-};
-
-struct ib_ucm_sidr_rep {
-       __u32 id;
-       __u32 qpn;
-       __u32 qkey;
-       __u32 status;
-       __u64 info;
-       __u64 data;
-       __u8  info_len;
-       __u8  data_len;
-       __u8  reserved[6];
-};
-/*
- * event notification ABI structures.
- */
-struct ib_ucm_event_get {
-       __u64 response;
-       __u64 data;
-       __u64 info;
-       __u8  data_len;
-       __u8  info_len;
-       __u8  reserved[6];
-};
-
-struct ib_ucm_req_event_resp {
-       struct ib_user_path_rec primary_path;
-       struct ib_user_path_rec alternate_path;
-       __be64                 remote_ca_guid;
-       __u32                  remote_qkey;
-       __u32                  remote_qpn;
-       __u32                  qp_type;
-       __u32                  starting_psn;
-       __u8  responder_resources;
-       __u8  initiator_depth;
-       __u8  local_cm_response_timeout;
-       __u8  flow_control;
-       __u8  remote_cm_response_timeout;
-       __u8  retry_count;
-       __u8  rnr_retry_count;
-       __u8  srq;
-       __u8  port;
-       __u8  reserved[7];
-};
-
-struct ib_ucm_rep_event_resp {
-       __be64 remote_ca_guid;
-       __u32 remote_qkey;
-       __u32 remote_qpn;
-       __u32 starting_psn;
-       __u8  responder_resources;
-       __u8  initiator_depth;
-       __u8  target_ack_delay;
-       __u8  failover_accepted;
-       __u8  flow_control;
-       __u8  rnr_retry_count;
-       __u8  srq;
-       __u8  reserved[5];
-};
-
-struct ib_ucm_rej_event_resp {
-       __u32 reason;
-       /* ari in ib_ucm_event_get info field. */
-};
-
-struct ib_ucm_mra_event_resp {
-       __u8  timeout;
-       __u8  reserved[3];
-};
-
-struct ib_ucm_lap_event_resp {
-       struct ib_user_path_rec path;
-};
-
-struct ib_ucm_apr_event_resp {
-       __u32 status;
-       /* apr info in ib_ucm_event_get info field. */
-};
-
-struct ib_ucm_sidr_req_event_resp {
-       __u16 pkey;
-       __u8  port;
-       __u8  reserved;
-};
-
-struct ib_ucm_sidr_rep_event_resp {
-       __u32 status;
-       __u32 qkey;
-       __u32 qpn;
-       /* info in ib_ucm_event_get info field. */
-};
-
-#define IB_UCM_PRES_DATA      0x01
-#define IB_UCM_PRES_INFO      0x02
-#define IB_UCM_PRES_PRIMARY   0x04
-#define IB_UCM_PRES_ALTERNATE 0x08
-
-struct ib_ucm_event_resp {
-       __u64 uid;
-       __u32 id;
-       __u32 event;
-       __u32 present;
-       __u32 reserved;
-       union {
-               struct ib_ucm_req_event_resp req_resp;
-               struct ib_ucm_rep_event_resp rep_resp;
-               struct ib_ucm_rej_event_resp rej_resp;
-               struct ib_ucm_mra_event_resp mra_resp;
-               struct ib_ucm_lap_event_resp lap_resp;
-               struct ib_ucm_apr_event_resp apr_resp;
-
-               struct ib_ucm_sidr_req_event_resp sidr_req_resp;
-               struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
-
-               __u32                             send_status;
-       } u;
-};
-
-#endif /* IB_USER_CM_H */
diff --git a/include/rdma/ib_user_mad.h b/include/rdma/ib_user_mad.h
deleted file mode 100644 (file)
index d6fce1c..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 2004 Topspin Communications.  All rights reserved.
- * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
- *
- * 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
- * OpenIB.org 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.
- *
- * 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.
- */
-
-#ifndef IB_USER_MAD_H
-#define IB_USER_MAD_H
-
-#include <linux/types.h>
-#include <linux/ioctl.h>
-
-/*
- * Increment this value if any changes that break userspace ABI
- * compatibility are made.
- */
-#define IB_USER_MAD_ABI_VERSION        5
-
-/*
- * Make sure that all structs defined in this file remain laid out so
- * that they pack the same way on 32-bit and 64-bit architectures (to
- * avoid incompatibility between 32-bit userspace and 64-bit kernels).
- */
-
-/**
- * ib_user_mad_hdr_old - Old version of MAD packet header without pkey_index
- * @id - ID of agent MAD received with/to be sent with
- * @status - 0 on successful receive, ETIMEDOUT if no response
- *   received (transaction ID in data[] will be set to TID of original
- *   request) (ignored on send)
- * @timeout_ms - Milliseconds to wait for response (unset on receive)
- * @retries - Number of automatic retries to attempt
- * @qpn - Remote QP number received from/to be sent to
- * @qkey - Remote Q_Key to be sent with (unset on receive)
- * @lid - Remote lid received from/to be sent to
- * @sl - Service level received with/to be sent with
- * @path_bits - Local path bits received with/to be sent with
- * @grh_present - If set, GRH was received/should be sent
- * @gid_index - Local GID index to send with (unset on receive)
- * @hop_limit - Hop limit in GRH
- * @traffic_class - Traffic class in GRH
- * @gid - Remote GID in GRH
- * @flow_label - Flow label in GRH
- */
-struct ib_user_mad_hdr_old {
-       __u32   id;
-       __u32   status;
-       __u32   timeout_ms;
-       __u32   retries;
-       __u32   length;
-       __be32  qpn;
-       __be32  qkey;
-       __be16  lid;
-       __u8    sl;
-       __u8    path_bits;
-       __u8    grh_present;
-       __u8    gid_index;
-       __u8    hop_limit;
-       __u8    traffic_class;
-       __u8    gid[16];
-       __be32  flow_label;
-};
-
-/**
- * ib_user_mad_hdr - MAD packet header
- *   This layout allows specifying/receiving the P_Key index.  To use
- *   this capability, an application must call the
- *   IB_USER_MAD_ENABLE_PKEY ioctl on the user MAD file handle before
- *   any other actions with the file handle.
- * @id - ID of agent MAD received with/to be sent with
- * @status - 0 on successful receive, ETIMEDOUT if no response
- *   received (transaction ID in data[] will be set to TID of original
- *   request) (ignored on send)
- * @timeout_ms - Milliseconds to wait for response (unset on receive)
- * @retries - Number of automatic retries to attempt
- * @qpn - Remote QP number received from/to be sent to
- * @qkey - Remote Q_Key to be sent with (unset on receive)
- * @lid - Remote lid received from/to be sent to
- * @sl - Service level received with/to be sent with
- * @path_bits - Local path bits received with/to be sent with
- * @grh_present - If set, GRH was received/should be sent
- * @gid_index - Local GID index to send with (unset on receive)
- * @hop_limit - Hop limit in GRH
- * @traffic_class - Traffic class in GRH
- * @gid - Remote GID in GRH
- * @flow_label - Flow label in GRH
- * @pkey_index - P_Key index
- */
-struct ib_user_mad_hdr {
-       __u32   id;
-       __u32   status;
-       __u32   timeout_ms;
-       __u32   retries;
-       __u32   length;
-       __be32  qpn;
-       __be32  qkey;
-       __be16  lid;
-       __u8    sl;
-       __u8    path_bits;
-       __u8    grh_present;
-       __u8    gid_index;
-       __u8    hop_limit;
-       __u8    traffic_class;
-       __u8    gid[16];
-       __be32  flow_label;
-       __u16   pkey_index;
-       __u8    reserved[6];
-};
-
-/**
- * ib_user_mad - MAD packet
- * @hdr - MAD packet header
- * @data - Contents of MAD
- *
- */
-struct ib_user_mad {
-       struct ib_user_mad_hdr hdr;
-       __u64   data[0];
-};
-
-/*
- * Earlier versions of this interface definition declared the
- * method_mask[] member as an array of __u32 but treated it as a
- * bitmap made up of longs in the kernel.  This ambiguity meant that
- * 32-bit big-endian applications that can run on both 32-bit and
- * 64-bit kernels had no consistent ABI to rely on, and 64-bit
- * big-endian applications that treated method_mask as being made up
- * of 32-bit words would have their bitmap misinterpreted.
- *
- * To clear up this confusion, we change the declaration of
- * method_mask[] to use unsigned long and handle the conversion from
- * 32-bit userspace to 64-bit kernel for big-endian systems in the
- * compat_ioctl method.  Unfortunately, to keep the structure layout
- * the same, we need the method_mask[] array to be aligned only to 4
- * bytes even when long is 64 bits, which forces us into this ugly
- * typedef.
- */
-typedef unsigned long __attribute__((aligned(4))) packed_ulong;
-#define IB_USER_MAD_LONGS_PER_METHOD_MASK (128 / (8 * sizeof (long)))
-
-/**
- * ib_user_mad_reg_req - MAD registration request
- * @id - Set by the kernel; used to identify agent in future requests.
- * @qpn - Queue pair number; must be 0 or 1.
- * @method_mask - The caller will receive unsolicited MADs for any method
- *   where @method_mask = 1.
- * @mgmt_class - Indicates which management class of MADs should be receive
- *   by the caller.  This field is only required if the user wishes to
- *   receive unsolicited MADs, otherwise it should be 0.
- * @mgmt_class_version - Indicates which version of MADs for the given
- *   management class to receive.
- * @oui: Indicates IEEE OUI when mgmt_class is a vendor class
- *   in the range from 0x30 to 0x4f. Otherwise not used.
- * @rmpp_version: If set, indicates the RMPP version used.
- *
- */
-struct ib_user_mad_reg_req {
-       __u32   id;
-       packed_ulong method_mask[IB_USER_MAD_LONGS_PER_METHOD_MASK];
-       __u8    qpn;
-       __u8    mgmt_class;
-       __u8    mgmt_class_version;
-       __u8    oui[3];
-       __u8    rmpp_version;
-};
-
-#define IB_IOCTL_MAGIC         0x1b
-
-#define IB_USER_MAD_REGISTER_AGENT     _IOWR(IB_IOCTL_MAGIC, 1, \
-                                             struct ib_user_mad_reg_req)
-
-#define IB_USER_MAD_UNREGISTER_AGENT   _IOW(IB_IOCTL_MAGIC, 2, __u32)
-
-#define IB_USER_MAD_ENABLE_PKEY                _IO(IB_IOCTL_MAGIC, 3)
-
-#endif /* IB_USER_MAD_H */
diff --git a/include/rdma/ib_user_sa.h b/include/rdma/ib_user_sa.h
deleted file mode 100644 (file)
index cfc7c9b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2005 Intel Corporation.  All rights reserved.
- *
- * 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
- * OpenIB.org 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.
- *
- * 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.
- */
-
-#ifndef IB_USER_SA_H
-#define IB_USER_SA_H
-
-#include <linux/types.h>
-
-enum {
-       IB_PATH_GMP             = 1,
-       IB_PATH_PRIMARY         = (1<<1),
-       IB_PATH_ALTERNATE       = (1<<2),
-       IB_PATH_OUTBOUND        = (1<<3),
-       IB_PATH_INBOUND         = (1<<4),
-       IB_PATH_INBOUND_REVERSE = (1<<5),
-       IB_PATH_BIDIRECTIONAL   = IB_PATH_OUTBOUND | IB_PATH_INBOUND_REVERSE
-};
-
-struct ib_path_rec_data {
-       __u32   flags;
-       __u32   reserved;
-       __u32   path_rec[16];
-};
-
-struct ib_user_path_rec {
-       __u8    dgid[16];
-       __u8    sgid[16];
-       __be16  dlid;
-       __be16  slid;
-       __u32   raw_traffic;
-       __be32  flow_label;
-       __u32   reversible;
-       __u32   mtu;
-       __be16  pkey;
-       __u8    hop_limit;
-       __u8    traffic_class;
-       __u8    numb_path;
-       __u8    sl;
-       __u8    mtu_selector;
-       __u8    rate_selector;
-       __u8    rate;
-       __u8    packet_life_time_selector;
-       __u8    packet_life_time;
-       __u8    preference;
-};
-
-#endif /* IB_USER_SA_H */
diff --git a/include/rdma/ib_user_verbs.h b/include/rdma/ib_user_verbs.h
deleted file mode 100644 (file)
index 81aba3a..0000000
+++ /dev/null
@@ -1,734 +0,0 @@
-/*
- * Copyright (c) 2005 Topspin Communications.  All rights reserved.
- * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
- * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
- * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
- *
- * 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
- * OpenIB.org 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.
- *
- * 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.
- */
-
-#ifndef IB_USER_VERBS_H
-#define IB_USER_VERBS_H
-
-#include <linux/types.h>
-
-/*
- * Increment this value if any changes that break userspace ABI
- * compatibility are made.
- */
-#define IB_USER_VERBS_ABI_VERSION      6
-
-enum {
-       IB_USER_VERBS_CMD_GET_CONTEXT,
-       IB_USER_VERBS_CMD_QUERY_DEVICE,
-       IB_USER_VERBS_CMD_QUERY_PORT,
-       IB_USER_VERBS_CMD_ALLOC_PD,
-       IB_USER_VERBS_CMD_DEALLOC_PD,
-       IB_USER_VERBS_CMD_CREATE_AH,
-       IB_USER_VERBS_CMD_MODIFY_AH,
-       IB_USER_VERBS_CMD_QUERY_AH,
-       IB_USER_VERBS_CMD_DESTROY_AH,
-       IB_USER_VERBS_CMD_REG_MR,
-       IB_USER_VERBS_CMD_REG_SMR,
-       IB_USER_VERBS_CMD_REREG_MR,
-       IB_USER_VERBS_CMD_QUERY_MR,
-       IB_USER_VERBS_CMD_DEREG_MR,
-       IB_USER_VERBS_CMD_ALLOC_MW,
-       IB_USER_VERBS_CMD_BIND_MW,
-       IB_USER_VERBS_CMD_DEALLOC_MW,
-       IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
-       IB_USER_VERBS_CMD_CREATE_CQ,
-       IB_USER_VERBS_CMD_RESIZE_CQ,
-       IB_USER_VERBS_CMD_DESTROY_CQ,
-       IB_USER_VERBS_CMD_POLL_CQ,
-       IB_USER_VERBS_CMD_PEEK_CQ,
-       IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
-       IB_USER_VERBS_CMD_CREATE_QP,
-       IB_USER_VERBS_CMD_QUERY_QP,
-       IB_USER_VERBS_CMD_MODIFY_QP,
-       IB_USER_VERBS_CMD_DESTROY_QP,
-       IB_USER_VERBS_CMD_POST_SEND,
-       IB_USER_VERBS_CMD_POST_RECV,
-       IB_USER_VERBS_CMD_ATTACH_MCAST,
-       IB_USER_VERBS_CMD_DETACH_MCAST,
-       IB_USER_VERBS_CMD_CREATE_SRQ,
-       IB_USER_VERBS_CMD_MODIFY_SRQ,
-       IB_USER_VERBS_CMD_QUERY_SRQ,
-       IB_USER_VERBS_CMD_DESTROY_SRQ,
-       IB_USER_VERBS_CMD_POST_SRQ_RECV,
-       IB_USER_VERBS_CMD_OPEN_XRCD,
-       IB_USER_VERBS_CMD_CLOSE_XRCD,
-       IB_USER_VERBS_CMD_CREATE_XSRQ,
-       IB_USER_VERBS_CMD_OPEN_QP
-};
-
-/*
- * Make sure that all structs defined in this file remain laid out so
- * that they pack the same way on 32-bit and 64-bit architectures (to
- * avoid incompatibility between 32-bit userspace and 64-bit kernels).
- * Specifically:
- *  - Do not use pointer types -- pass pointers in __u64 instead.
- *  - Make sure that any structure larger than 4 bytes is padded to a
- *    multiple of 8 bytes.  Otherwise the structure size will be
- *    different between 32-bit and 64-bit architectures.
- */
-
-struct ib_uverbs_async_event_desc {
-       __u64 element;
-       __u32 event_type;       /* enum ib_event_type */
-       __u32 reserved;
-};
-
-struct ib_uverbs_comp_event_desc {
-       __u64 cq_handle;
-};
-
-/*
- * All commands from userspace should start with a __u32 command field
- * followed by __u16 in_words and out_words fields (which give the
- * length of the command block and response buffer if any in 32-bit
- * words).  The kernel driver will read these fields first and read
- * the rest of the command struct based on these value.
- */
-
-struct ib_uverbs_cmd_hdr {
-       __u32 command;
-       __u16 in_words;
-       __u16 out_words;
-};
-
-struct ib_uverbs_get_context {
-       __u64 response;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_get_context_resp {
-       __u32 async_fd;
-       __u32 num_comp_vectors;
-};
-
-struct ib_uverbs_query_device {
-       __u64 response;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_query_device_resp {
-       __u64 fw_ver;
-       __be64 node_guid;
-       __be64 sys_image_guid;
-       __u64 max_mr_size;
-       __u64 page_size_cap;
-       __u32 vendor_id;
-       __u32 vendor_part_id;
-       __u32 hw_ver;
-       __u32 max_qp;
-       __u32 max_qp_wr;
-       __u32 device_cap_flags;
-       __u32 max_sge;
-       __u32 max_sge_rd;
-       __u32 max_cq;
-       __u32 max_cqe;
-       __u32 max_mr;
-       __u32 max_pd;
-       __u32 max_qp_rd_atom;
-       __u32 max_ee_rd_atom;
-       __u32 max_res_rd_atom;
-       __u32 max_qp_init_rd_atom;
-       __u32 max_ee_init_rd_atom;
-       __u32 atomic_cap;
-       __u32 max_ee;
-       __u32 max_rdd;
-       __u32 max_mw;
-       __u32 max_raw_ipv6_qp;
-       __u32 max_raw_ethy_qp;
-       __u32 max_mcast_grp;
-       __u32 max_mcast_qp_attach;
-       __u32 max_total_mcast_qp_attach;
-       __u32 max_ah;
-       __u32 max_fmr;
-       __u32 max_map_per_fmr;
-       __u32 max_srq;
-       __u32 max_srq_wr;
-       __u32 max_srq_sge;
-       __u16 max_pkeys;
-       __u8  local_ca_ack_delay;
-       __u8  phys_port_cnt;
-       __u8  reserved[4];
-};
-
-struct ib_uverbs_query_port {
-       __u64 response;
-       __u8  port_num;
-       __u8  reserved[7];
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_query_port_resp {
-       __u32 port_cap_flags;
-       __u32 max_msg_sz;
-       __u32 bad_pkey_cntr;
-       __u32 qkey_viol_cntr;
-       __u32 gid_tbl_len;
-       __u16 pkey_tbl_len;
-       __u16 lid;
-       __u16 sm_lid;
-       __u8  state;
-       __u8  max_mtu;
-       __u8  active_mtu;
-       __u8  lmc;
-       __u8  max_vl_num;
-       __u8  sm_sl;
-       __u8  subnet_timeout;
-       __u8  init_type_reply;
-       __u8  active_width;
-       __u8  active_speed;
-       __u8  phys_state;
-       __u8  link_layer;
-       __u8  reserved[2];
-};
-
-struct ib_uverbs_alloc_pd {
-       __u64 response;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_alloc_pd_resp {
-       __u32 pd_handle;
-};
-
-struct ib_uverbs_dealloc_pd {
-       __u32 pd_handle;
-};
-
-struct ib_uverbs_open_xrcd {
-       __u64 response;
-       __u32 fd;
-       __u32 oflags;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_open_xrcd_resp {
-       __u32 xrcd_handle;
-};
-
-struct ib_uverbs_close_xrcd {
-       __u32 xrcd_handle;
-};
-
-struct ib_uverbs_reg_mr {
-       __u64 response;
-       __u64 start;
-       __u64 length;
-       __u64 hca_va;
-       __u32 pd_handle;
-       __u32 access_flags;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_reg_mr_resp {
-       __u32 mr_handle;
-       __u32 lkey;
-       __u32 rkey;
-};
-
-struct ib_uverbs_dereg_mr {
-       __u32 mr_handle;
-};
-
-struct ib_uverbs_create_comp_channel {
-       __u64 response;
-};
-
-struct ib_uverbs_create_comp_channel_resp {
-       __u32 fd;
-};
-
-struct ib_uverbs_create_cq {
-       __u64 response;
-       __u64 user_handle;
-       __u32 cqe;
-       __u32 comp_vector;
-       __s32 comp_channel;
-       __u32 reserved;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_create_cq_resp {
-       __u32 cq_handle;
-       __u32 cqe;
-};
-
-struct ib_uverbs_resize_cq {
-       __u64 response;
-       __u32 cq_handle;
-       __u32 cqe;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_resize_cq_resp {
-       __u32 cqe;
-       __u32 reserved;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_poll_cq {
-       __u64 response;
-       __u32 cq_handle;
-       __u32 ne;
-};
-
-struct ib_uverbs_wc {
-       __u64 wr_id;
-       __u32 status;
-       __u32 opcode;
-       __u32 vendor_err;
-       __u32 byte_len;
-       union {
-               __u32 imm_data;
-               __u32 invalidate_rkey;
-       } ex;
-       __u32 qp_num;
-       __u32 src_qp;
-       __u32 wc_flags;
-       __u16 pkey_index;
-       __u16 slid;
-       __u8 sl;
-       __u8 dlid_path_bits;
-       __u8 port_num;
-       __u8 reserved;
-};
-
-struct ib_uverbs_poll_cq_resp {
-       __u32 count;
-       __u32 reserved;
-       struct ib_uverbs_wc wc[0];
-};
-
-struct ib_uverbs_req_notify_cq {
-       __u32 cq_handle;
-       __u32 solicited_only;
-};
-
-struct ib_uverbs_destroy_cq {
-       __u64 response;
-       __u32 cq_handle;
-       __u32 reserved;
-};
-
-struct ib_uverbs_destroy_cq_resp {
-       __u32 comp_events_reported;
-       __u32 async_events_reported;
-};
-
-struct ib_uverbs_global_route {
-       __u8  dgid[16];
-       __u32 flow_label;
-       __u8  sgid_index;
-       __u8  hop_limit;
-       __u8  traffic_class;
-       __u8  reserved;
-};
-
-struct ib_uverbs_ah_attr {
-       struct ib_uverbs_global_route grh;
-       __u16 dlid;
-       __u8  sl;
-       __u8  src_path_bits;
-       __u8  static_rate;
-       __u8  is_global;
-       __u8  port_num;
-       __u8  reserved;
-};
-
-struct ib_uverbs_qp_attr {
-       __u32   qp_attr_mask;
-       __u32   qp_state;
-       __u32   cur_qp_state;
-       __u32   path_mtu;
-       __u32   path_mig_state;
-       __u32   qkey;
-       __u32   rq_psn;
-       __u32   sq_psn;
-       __u32   dest_qp_num;
-       __u32   qp_access_flags;
-
-       struct ib_uverbs_ah_attr ah_attr;
-       struct ib_uverbs_ah_attr alt_ah_attr;
-
-       /* ib_qp_cap */
-       __u32   max_send_wr;
-       __u32   max_recv_wr;
-       __u32   max_send_sge;
-       __u32   max_recv_sge;
-       __u32   max_inline_data;
-
-       __u16   pkey_index;
-       __u16   alt_pkey_index;
-       __u8    en_sqd_async_notify;
-       __u8    sq_draining;
-       __u8    max_rd_atomic;
-       __u8    max_dest_rd_atomic;
-       __u8    min_rnr_timer;
-       __u8    port_num;
-       __u8    timeout;
-       __u8    retry_cnt;
-       __u8    rnr_retry;
-       __u8    alt_port_num;
-       __u8    alt_timeout;
-       __u8    reserved[5];
-};
-
-struct ib_uverbs_create_qp {
-       __u64 response;
-       __u64 user_handle;
-       __u32 pd_handle;
-       __u32 send_cq_handle;
-       __u32 recv_cq_handle;
-       __u32 srq_handle;
-       __u32 max_send_wr;
-       __u32 max_recv_wr;
-       __u32 max_send_sge;
-       __u32 max_recv_sge;
-       __u32 max_inline_data;
-       __u8  sq_sig_all;
-       __u8  qp_type;
-       __u8  is_srq;
-       __u8  reserved;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_open_qp {
-       __u64 response;
-       __u64 user_handle;
-       __u32 pd_handle;
-       __u32 qpn;
-       __u8  qp_type;
-       __u8  reserved[7];
-       __u64 driver_data[0];
-};
-
-/* also used for open response */
-struct ib_uverbs_create_qp_resp {
-       __u32 qp_handle;
-       __u32 qpn;
-       __u32 max_send_wr;
-       __u32 max_recv_wr;
-       __u32 max_send_sge;
-       __u32 max_recv_sge;
-       __u32 max_inline_data;
-       __u32 reserved;
-};
-
-/*
- * This struct needs to remain a multiple of 8 bytes to keep the
- * alignment of the modify QP parameters.
- */
-struct ib_uverbs_qp_dest {
-       __u8  dgid[16];
-       __u32 flow_label;
-       __u16 dlid;
-       __u16 reserved;
-       __u8  sgid_index;
-       __u8  hop_limit;
-       __u8  traffic_class;
-       __u8  sl;
-       __u8  src_path_bits;
-       __u8  static_rate;
-       __u8  is_global;
-       __u8  port_num;
-};
-
-struct ib_uverbs_query_qp {
-       __u64 response;
-       __u32 qp_handle;
-       __u32 attr_mask;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_query_qp_resp {
-       struct ib_uverbs_qp_dest dest;
-       struct ib_uverbs_qp_dest alt_dest;
-       __u32 max_send_wr;
-       __u32 max_recv_wr;
-       __u32 max_send_sge;
-       __u32 max_recv_sge;
-       __u32 max_inline_data;
-       __u32 qkey;
-       __u32 rq_psn;
-       __u32 sq_psn;
-       __u32 dest_qp_num;
-       __u32 qp_access_flags;
-       __u16 pkey_index;
-       __u16 alt_pkey_index;
-       __u8  qp_state;
-       __u8  cur_qp_state;
-       __u8  path_mtu;
-       __u8  path_mig_state;
-       __u8  sq_draining;
-       __u8  max_rd_atomic;
-       __u8  max_dest_rd_atomic;
-       __u8  min_rnr_timer;
-       __u8  port_num;
-       __u8  timeout;
-       __u8  retry_cnt;
-       __u8  rnr_retry;
-       __u8  alt_port_num;
-       __u8  alt_timeout;
-       __u8  sq_sig_all;
-       __u8  reserved[5];
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_modify_qp {
-       struct ib_uverbs_qp_dest dest;
-       struct ib_uverbs_qp_dest alt_dest;
-       __u32 qp_handle;
-       __u32 attr_mask;
-       __u32 qkey;
-       __u32 rq_psn;
-       __u32 sq_psn;
-       __u32 dest_qp_num;
-       __u32 qp_access_flags;
-       __u16 pkey_index;
-       __u16 alt_pkey_index;
-       __u8  qp_state;
-       __u8  cur_qp_state;
-       __u8  path_mtu;
-       __u8  path_mig_state;
-       __u8  en_sqd_async_notify;
-       __u8  max_rd_atomic;
-       __u8  max_dest_rd_atomic;
-       __u8  min_rnr_timer;
-       __u8  port_num;
-       __u8  timeout;
-       __u8  retry_cnt;
-       __u8  rnr_retry;
-       __u8  alt_port_num;
-       __u8  alt_timeout;
-       __u8  reserved[2];
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_modify_qp_resp {
-};
-
-struct ib_uverbs_destroy_qp {
-       __u64 response;
-       __u32 qp_handle;
-       __u32 reserved;
-};
-
-struct ib_uverbs_destroy_qp_resp {
-       __u32 events_reported;
-};
-
-/*
- * The ib_uverbs_sge structure isn't used anywhere, since we assume
- * the ib_sge structure is packed the same way on 32-bit and 64-bit
- * architectures in both kernel and user space.  It's just here to
- * document the ABI.
- */
-struct ib_uverbs_sge {
-       __u64 addr;
-       __u32 length;
-       __u32 lkey;
-};
-
-struct ib_uverbs_send_wr {
-       __u64 wr_id;
-       __u32 num_sge;
-       __u32 opcode;
-       __u32 send_flags;
-       union {
-               __u32 imm_data;
-               __u32 invalidate_rkey;
-       } ex;
-       union {
-               struct {
-                       __u64 remote_addr;
-                       __u32 rkey;
-                       __u32 reserved;
-               } rdma;
-               struct {
-                       __u64 remote_addr;
-                       __u64 compare_add;
-                       __u64 swap;
-                       __u32 rkey;
-                       __u32 reserved;
-               } atomic;
-               struct {
-                       __u32 ah;
-                       __u32 remote_qpn;
-                       __u32 remote_qkey;
-                       __u32 reserved;
-               } ud;
-       } wr;
-};
-
-struct ib_uverbs_post_send {
-       __u64 response;
-       __u32 qp_handle;
-       __u32 wr_count;
-       __u32 sge_count;
-       __u32 wqe_size;
-       struct ib_uverbs_send_wr send_wr[0];
-};
-
-struct ib_uverbs_post_send_resp {
-       __u32 bad_wr;
-};
-
-struct ib_uverbs_recv_wr {
-       __u64 wr_id;
-       __u32 num_sge;
-       __u32 reserved;
-};
-
-struct ib_uverbs_post_recv {
-       __u64 response;
-       __u32 qp_handle;
-       __u32 wr_count;
-       __u32 sge_count;
-       __u32 wqe_size;
-       struct ib_uverbs_recv_wr recv_wr[0];
-};
-
-struct ib_uverbs_post_recv_resp {
-       __u32 bad_wr;
-};
-
-struct ib_uverbs_post_srq_recv {
-       __u64 response;
-       __u32 srq_handle;
-       __u32 wr_count;
-       __u32 sge_count;
-       __u32 wqe_size;
-       struct ib_uverbs_recv_wr recv[0];
-};
-
-struct ib_uverbs_post_srq_recv_resp {
-       __u32 bad_wr;
-};
-
-struct ib_uverbs_create_ah {
-       __u64 response;
-       __u64 user_handle;
-       __u32 pd_handle;
-       __u32 reserved;
-       struct ib_uverbs_ah_attr attr;
-};
-
-struct ib_uverbs_create_ah_resp {
-       __u32 ah_handle;
-};
-
-struct ib_uverbs_destroy_ah {
-       __u32 ah_handle;
-};
-
-struct ib_uverbs_attach_mcast {
-       __u8  gid[16];
-       __u32 qp_handle;
-       __u16 mlid;
-       __u16 reserved;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_detach_mcast {
-       __u8  gid[16];
-       __u32 qp_handle;
-       __u16 mlid;
-       __u16 reserved;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_create_srq {
-       __u64 response;
-       __u64 user_handle;
-       __u32 pd_handle;
-       __u32 max_wr;
-       __u32 max_sge;
-       __u32 srq_limit;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_create_xsrq {
-       __u64 response;
-       __u64 user_handle;
-       __u32 srq_type;
-       __u32 pd_handle;
-       __u32 max_wr;
-       __u32 max_sge;
-       __u32 srq_limit;
-       __u32 reserved;
-       __u32 xrcd_handle;
-       __u32 cq_handle;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_create_srq_resp {
-       __u32 srq_handle;
-       __u32 max_wr;
-       __u32 max_sge;
-       __u32 srqn;
-};
-
-struct ib_uverbs_modify_srq {
-       __u32 srq_handle;
-       __u32 attr_mask;
-       __u32 max_wr;
-       __u32 srq_limit;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_query_srq {
-       __u64 response;
-       __u32 srq_handle;
-       __u32 reserved;
-       __u64 driver_data[0];
-};
-
-struct ib_uverbs_query_srq_resp {
-       __u32 max_wr;
-       __u32 max_sge;
-       __u32 srq_limit;
-       __u32 reserved;
-};
-
-struct ib_uverbs_destroy_srq {
-       __u64 response;
-       __u32 srq_handle;
-       __u32 reserved;
-};
-
-struct ib_uverbs_destroy_srq_resp {
-       __u32 events_reported;
-};
-
-#endif /* IB_USER_VERBS_H */
index bd3d8b24b42024f848ffd0c55f2dc58dc6de1b28..e38de79eeb48f9070a65d806a38eff84a3f92914 100644 (file)
@@ -1,41 +1,9 @@
 #ifndef _RDMA_NETLINK_H
 #define _RDMA_NETLINK_H
 
-#include <linux/types.h>
-
-enum {
-       RDMA_NL_RDMA_CM = 1
-};
-
-#define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
-#define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
-#define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
-
-enum {
-       RDMA_NL_RDMA_CM_ID_STATS = 0,
-       RDMA_NL_RDMA_CM_NUM_OPS
-};
-
-enum {
-       RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1,
-       RDMA_NL_RDMA_CM_ATTR_DST_ADDR,
-       RDMA_NL_RDMA_CM_NUM_ATTR,
-};
-
-struct rdma_cm_id_stats {
-       __u32   qp_num;
-       __u32   bound_dev_if;
-       __u32   port_space;
-       __s32   pid;
-       __u8    cm_state;
-       __u8    node_type;
-       __u8    port_num;
-       __u8    qp_type;
-};
-
-#ifdef __KERNEL__
 
 #include <linux/netlink.h>
+#include <uapi/rdma/rdma_netlink.h>
 
 struct ibnl_client_cbs {
        int (*dump)(struct sk_buff *skb, struct netlink_callback *nlcb);
@@ -88,6 +56,4 @@ void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq,
 int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh,
                  int len, void *data, int type);
 
-#endif /* __KERNEL__ */
-
 #endif /* _RDMA_NETLINK_H */
diff --git a/include/rdma/rdma_user_cm.h b/include/rdma/rdma_user_cm.h
deleted file mode 100644 (file)
index 1ee9239..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
- *
- * 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
- * OpenIB.org 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.
- *
- * 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.
- */
-
-#ifndef RDMA_USER_CM_H
-#define RDMA_USER_CM_H
-
-#include <linux/types.h>
-#include <linux/in6.h>
-#include <rdma/ib_user_verbs.h>
-#include <rdma/ib_user_sa.h>
-
-#define RDMA_USER_CM_ABI_VERSION       4
-
-#define RDMA_MAX_PRIVATE_DATA          256
-
-enum {
-       RDMA_USER_CM_CMD_CREATE_ID,
-       RDMA_USER_CM_CMD_DESTROY_ID,
-       RDMA_USER_CM_CMD_BIND_ADDR,
-       RDMA_USER_CM_CMD_RESOLVE_ADDR,
-       RDMA_USER_CM_CMD_RESOLVE_ROUTE,
-       RDMA_USER_CM_CMD_QUERY_ROUTE,
-       RDMA_USER_CM_CMD_CONNECT,
-       RDMA_USER_CM_CMD_LISTEN,
-       RDMA_USER_CM_CMD_ACCEPT,
-       RDMA_USER_CM_CMD_REJECT,
-       RDMA_USER_CM_CMD_DISCONNECT,
-       RDMA_USER_CM_CMD_INIT_QP_ATTR,
-       RDMA_USER_CM_CMD_GET_EVENT,
-       RDMA_USER_CM_CMD_GET_OPTION,
-       RDMA_USER_CM_CMD_SET_OPTION,
-       RDMA_USER_CM_CMD_NOTIFY,
-       RDMA_USER_CM_CMD_JOIN_MCAST,
-       RDMA_USER_CM_CMD_LEAVE_MCAST,
-       RDMA_USER_CM_CMD_MIGRATE_ID
-};
-
-/*
- * command ABI structures.
- */
-struct rdma_ucm_cmd_hdr {
-       __u32 cmd;
-       __u16 in;
-       __u16 out;
-};
-
-struct rdma_ucm_create_id {
-       __u64 uid;
-       __u64 response;
-       __u16 ps;
-       __u8  qp_type;
-       __u8  reserved[5];
-};
-
-struct rdma_ucm_create_id_resp {
-       __u32 id;
-};
-
-struct rdma_ucm_destroy_id {
-       __u64 response;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct rdma_ucm_destroy_id_resp {
-       __u32 events_reported;
-};
-
-struct rdma_ucm_bind_addr {
-       __u64 response;
-       struct sockaddr_in6 addr;
-       __u32 id;
-};
-
-struct rdma_ucm_resolve_addr {
-       struct sockaddr_in6 src_addr;
-       struct sockaddr_in6 dst_addr;
-       __u32 id;
-       __u32 timeout_ms;
-};
-
-struct rdma_ucm_resolve_route {
-       __u32 id;
-       __u32 timeout_ms;
-};
-
-struct rdma_ucm_query_route {
-       __u64 response;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct rdma_ucm_query_route_resp {
-       __u64 node_guid;
-       struct ib_user_path_rec ib_route[2];
-       struct sockaddr_in6 src_addr;
-       struct sockaddr_in6 dst_addr;
-       __u32 num_paths;
-       __u8 port_num;
-       __u8 reserved[3];
-};
-
-struct rdma_ucm_conn_param {
-       __u32 qp_num;
-       __u32 reserved;
-       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
-       __u8  private_data_len;
-       __u8  srq;
-       __u8  responder_resources;
-       __u8  initiator_depth;
-       __u8  flow_control;
-       __u8  retry_count;
-       __u8  rnr_retry_count;
-       __u8  valid;
-};
-
-struct rdma_ucm_ud_param {
-       __u32 qp_num;
-       __u32 qkey;
-       struct ib_uverbs_ah_attr ah_attr;
-       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
-       __u8  private_data_len;
-       __u8  reserved[7];
-};
-
-struct rdma_ucm_connect {
-       struct rdma_ucm_conn_param conn_param;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct rdma_ucm_listen {
-       __u32 id;
-       __u32 backlog;
-};
-
-struct rdma_ucm_accept {
-       __u64 uid;
-       struct rdma_ucm_conn_param conn_param;
-       __u32 id;
-       __u32 reserved;
-};
-
-struct rdma_ucm_reject {
-       __u32 id;
-       __u8  private_data_len;
-       __u8  reserved[3];
-       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
-};
-
-struct rdma_ucm_disconnect {
-       __u32 id;
-};
-
-struct rdma_ucm_init_qp_attr {
-       __u64 response;
-       __u32 id;
-       __u32 qp_state;
-};
-
-struct rdma_ucm_notify {
-       __u32 id;
-       __u32 event;
-};
-
-struct rdma_ucm_join_mcast {
-       __u64 response;         /* rdma_ucm_create_id_resp */
-       __u64 uid;
-       struct sockaddr_in6 addr;
-       __u32 id;
-};
-
-struct rdma_ucm_get_event {
-       __u64 response;
-};
-
-struct rdma_ucm_event_resp {
-       __u64 uid;
-       __u32 id;
-       __u32 event;
-       __u32 status;
-       union {
-               struct rdma_ucm_conn_param conn;
-               struct rdma_ucm_ud_param   ud;
-       } param;
-};
-
-/* Option levels */
-enum {
-       RDMA_OPTION_ID          = 0,
-       RDMA_OPTION_IB          = 1
-};
-
-/* Option details */
-enum {
-       RDMA_OPTION_ID_TOS       = 0,
-       RDMA_OPTION_ID_REUSEADDR = 1,
-       RDMA_OPTION_ID_AFONLY    = 2,
-       RDMA_OPTION_IB_PATH      = 1
-};
-
-struct rdma_ucm_set_option {
-       __u64 optval;
-       __u32 id;
-       __u32 level;
-       __u32 optname;
-       __u32 optlen;
-};
-
-struct rdma_ucm_migrate_id {
-       __u64 response;
-       __u32 id;
-       __u32 fd;
-};
-
-struct rdma_ucm_migrate_resp {
-       __u32 events_reported;
-};
-
-#endif /* RDMA_USER_CM_H */
index aafaa5aa54d46bb9a93a8137a22344408298223f..687ae332200f9f76f6c3a557b257ecb45b0a458f 100644 (file)
@@ -1 +1,7 @@
 # UAPI Header export list
+header-y += ib_user_cm.h
+header-y += ib_user_mad.h
+header-y += ib_user_sa.h
+header-y += ib_user_verbs.h
+header-y += rdma_netlink.h
+header-y += rdma_user_cm.h
diff --git a/include/uapi/rdma/ib_user_cm.h b/include/uapi/rdma/ib_user_cm.h
new file mode 100644 (file)
index 0000000..f79014a
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * 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
+ * OpenIB.org 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.
+ *
+ * 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.
+ */
+
+#ifndef IB_USER_CM_H
+#define IB_USER_CM_H
+
+#include <linux/types.h>
+#include <rdma/ib_user_sa.h>
+
+#define IB_USER_CM_ABI_VERSION 5
+
+enum {
+       IB_USER_CM_CMD_CREATE_ID,
+       IB_USER_CM_CMD_DESTROY_ID,
+       IB_USER_CM_CMD_ATTR_ID,
+
+       IB_USER_CM_CMD_LISTEN,
+       IB_USER_CM_CMD_NOTIFY,
+
+       IB_USER_CM_CMD_SEND_REQ,
+       IB_USER_CM_CMD_SEND_REP,
+       IB_USER_CM_CMD_SEND_RTU,
+       IB_USER_CM_CMD_SEND_DREQ,
+       IB_USER_CM_CMD_SEND_DREP,
+       IB_USER_CM_CMD_SEND_REJ,
+       IB_USER_CM_CMD_SEND_MRA,
+       IB_USER_CM_CMD_SEND_LAP,
+       IB_USER_CM_CMD_SEND_APR,
+       IB_USER_CM_CMD_SEND_SIDR_REQ,
+       IB_USER_CM_CMD_SEND_SIDR_REP,
+
+       IB_USER_CM_CMD_EVENT,
+       IB_USER_CM_CMD_INIT_QP_ATTR,
+};
+/*
+ * command ABI structures.
+ */
+struct ib_ucm_cmd_hdr {
+       __u32 cmd;
+       __u16 in;
+       __u16 out;
+};
+
+struct ib_ucm_create_id {
+       __u64 uid;
+       __u64 response;
+};
+
+struct ib_ucm_create_id_resp {
+       __u32 id;
+};
+
+struct ib_ucm_destroy_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_destroy_id_resp {
+       __u32 events_reported;
+};
+
+struct ib_ucm_attr_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_attr_id_resp {
+       __be64 service_id;
+       __be64 service_mask;
+       __be32 local_id;
+       __be32 remote_id;
+};
+
+struct ib_ucm_init_qp_attr {
+       __u64 response;
+       __u32 id;
+       __u32 qp_state;
+};
+
+struct ib_ucm_listen {
+       __be64 service_id;
+       __be64 service_mask;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_notify {
+       __u32 id;
+       __u32 event;
+};
+
+struct ib_ucm_private_data {
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_req {
+       __u32 id;
+       __u32 qpn;
+       __u32 qp_type;
+       __u32 psn;
+       __be64 sid;
+       __u64 data;
+       __u64 primary_path;
+       __u64 alternate_path;
+       __u8  len;
+       __u8  peer_to_peer;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  remote_cm_response_timeout;
+       __u8  flow_control;
+       __u8  local_cm_response_timeout;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  max_cm_retries;
+       __u8  srq;
+       __u8  reserved[5];
+};
+
+struct ib_ucm_rep {
+       __u64 uid;
+       __u64 data;
+       __u32 id;
+       __u32 qpn;
+       __u32 psn;
+       __u8  len;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  target_ack_delay;
+       __u8  failover_accepted;
+       __u8  flow_control;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  reserved[4];
+};
+
+struct ib_ucm_info {
+       __u32 id;
+       __u32 status;
+       __u64 info;
+       __u64 data;
+       __u8  info_len;
+       __u8  data_len;
+       __u8  reserved[6];
+};
+
+struct ib_ucm_mra {
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  timeout;
+       __u8  reserved[2];
+};
+
+struct ib_ucm_lap {
+       __u64 path;
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_sidr_req {
+       __u32 id;
+       __u32 timeout;
+       __be64 sid;
+       __u64 data;
+       __u64 path;
+       __u16 reserved_pkey;
+       __u8  len;
+       __u8  max_cm_retries;
+       __u8  reserved[4];
+};
+
+struct ib_ucm_sidr_rep {
+       __u32 id;
+       __u32 qpn;
+       __u32 qkey;
+       __u32 status;
+       __u64 info;
+       __u64 data;
+       __u8  info_len;
+       __u8  data_len;
+       __u8  reserved[6];
+};
+/*
+ * event notification ABI structures.
+ */
+struct ib_ucm_event_get {
+       __u64 response;
+       __u64 data;
+       __u64 info;
+       __u8  data_len;
+       __u8  info_len;
+       __u8  reserved[6];
+};
+
+struct ib_ucm_req_event_resp {
+       struct ib_user_path_rec primary_path;
+       struct ib_user_path_rec alternate_path;
+       __be64                 remote_ca_guid;
+       __u32                  remote_qkey;
+       __u32                  remote_qpn;
+       __u32                  qp_type;
+       __u32                  starting_psn;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  local_cm_response_timeout;
+       __u8  flow_control;
+       __u8  remote_cm_response_timeout;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  port;
+       __u8  reserved[7];
+};
+
+struct ib_ucm_rep_event_resp {
+       __be64 remote_ca_guid;
+       __u32 remote_qkey;
+       __u32 remote_qpn;
+       __u32 starting_psn;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  target_ack_delay;
+       __u8  failover_accepted;
+       __u8  flow_control;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  reserved[5];
+};
+
+struct ib_ucm_rej_event_resp {
+       __u32 reason;
+       /* ari in ib_ucm_event_get info field. */
+};
+
+struct ib_ucm_mra_event_resp {
+       __u8  timeout;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_lap_event_resp {
+       struct ib_user_path_rec path;
+};
+
+struct ib_ucm_apr_event_resp {
+       __u32 status;
+       /* apr info in ib_ucm_event_get info field. */
+};
+
+struct ib_ucm_sidr_req_event_resp {
+       __u16 pkey;
+       __u8  port;
+       __u8  reserved;
+};
+
+struct ib_ucm_sidr_rep_event_resp {
+       __u32 status;
+       __u32 qkey;
+       __u32 qpn;
+       /* info in ib_ucm_event_get info field. */
+};
+
+#define IB_UCM_PRES_DATA      0x01
+#define IB_UCM_PRES_INFO      0x02
+#define IB_UCM_PRES_PRIMARY   0x04
+#define IB_UCM_PRES_ALTERNATE 0x08
+
+struct ib_ucm_event_resp {
+       __u64 uid;
+       __u32 id;
+       __u32 event;
+       __u32 present;
+       __u32 reserved;
+       union {
+               struct ib_ucm_req_event_resp req_resp;
+               struct ib_ucm_rep_event_resp rep_resp;
+               struct ib_ucm_rej_event_resp rej_resp;
+               struct ib_ucm_mra_event_resp mra_resp;
+               struct ib_ucm_lap_event_resp lap_resp;
+               struct ib_ucm_apr_event_resp apr_resp;
+
+               struct ib_ucm_sidr_req_event_resp sidr_req_resp;
+               struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
+
+               __u32                             send_status;
+       } u;
+};
+
+#endif /* IB_USER_CM_H */
diff --git a/include/uapi/rdma/ib_user_mad.h b/include/uapi/rdma/ib_user_mad.h
new file mode 100644 (file)
index 0000000..d6fce1c
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2004 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
+ *
+ * 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
+ * OpenIB.org 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.
+ *
+ * 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.
+ */
+
+#ifndef IB_USER_MAD_H
+#define IB_USER_MAD_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * Increment this value if any changes that break userspace ABI
+ * compatibility are made.
+ */
+#define IB_USER_MAD_ABI_VERSION        5
+
+/*
+ * Make sure that all structs defined in this file remain laid out so
+ * that they pack the same way on 32-bit and 64-bit architectures (to
+ * avoid incompatibility between 32-bit userspace and 64-bit kernels).
+ */
+
+/**
+ * ib_user_mad_hdr_old - Old version of MAD packet header without pkey_index
+ * @id - ID of agent MAD received with/to be sent with
+ * @status - 0 on successful receive, ETIMEDOUT if no response
+ *   received (transaction ID in data[] will be set to TID of original
+ *   request) (ignored on send)
+ * @timeout_ms - Milliseconds to wait for response (unset on receive)
+ * @retries - Number of automatic retries to attempt
+ * @qpn - Remote QP number received from/to be sent to
+ * @qkey - Remote Q_Key to be sent with (unset on receive)
+ * @lid - Remote lid received from/to be sent to
+ * @sl - Service level received with/to be sent with
+ * @path_bits - Local path bits received with/to be sent with
+ * @grh_present - If set, GRH was received/should be sent
+ * @gid_index - Local GID index to send with (unset on receive)
+ * @hop_limit - Hop limit in GRH
+ * @traffic_class - Traffic class in GRH
+ * @gid - Remote GID in GRH
+ * @flow_label - Flow label in GRH
+ */
+struct ib_user_mad_hdr_old {
+       __u32   id;
+       __u32   status;
+       __u32   timeout_ms;
+       __u32   retries;
+       __u32   length;
+       __be32  qpn;
+       __be32  qkey;
+       __be16  lid;
+       __u8    sl;
+       __u8    path_bits;
+       __u8    grh_present;
+       __u8    gid_index;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    gid[16];
+       __be32  flow_label;
+};
+
+/**
+ * ib_user_mad_hdr - MAD packet header
+ *   This layout allows specifying/receiving the P_Key index.  To use
+ *   this capability, an application must call the
+ *   IB_USER_MAD_ENABLE_PKEY ioctl on the user MAD file handle before
+ *   any other actions with the file handle.
+ * @id - ID of agent MAD received with/to be sent with
+ * @status - 0 on successful receive, ETIMEDOUT if no response
+ *   received (transaction ID in data[] will be set to TID of original
+ *   request) (ignored on send)
+ * @timeout_ms - Milliseconds to wait for response (unset on receive)
+ * @retries - Number of automatic retries to attempt
+ * @qpn - Remote QP number received from/to be sent to
+ * @qkey - Remote Q_Key to be sent with (unset on receive)
+ * @lid - Remote lid received from/to be sent to
+ * @sl - Service level received with/to be sent with
+ * @path_bits - Local path bits received with/to be sent with
+ * @grh_present - If set, GRH was received/should be sent
+ * @gid_index - Local GID index to send with (unset on receive)
+ * @hop_limit - Hop limit in GRH
+ * @traffic_class - Traffic class in GRH
+ * @gid - Remote GID in GRH
+ * @flow_label - Flow label in GRH
+ * @pkey_index - P_Key index
+ */
+struct ib_user_mad_hdr {
+       __u32   id;
+       __u32   status;
+       __u32   timeout_ms;
+       __u32   retries;
+       __u32   length;
+       __be32  qpn;
+       __be32  qkey;
+       __be16  lid;
+       __u8    sl;
+       __u8    path_bits;
+       __u8    grh_present;
+       __u8    gid_index;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    gid[16];
+       __be32  flow_label;
+       __u16   pkey_index;
+       __u8    reserved[6];
+};
+
+/**
+ * ib_user_mad - MAD packet
+ * @hdr - MAD packet header
+ * @data - Contents of MAD
+ *
+ */
+struct ib_user_mad {
+       struct ib_user_mad_hdr hdr;
+       __u64   data[0];
+};
+
+/*
+ * Earlier versions of this interface definition declared the
+ * method_mask[] member as an array of __u32 but treated it as a
+ * bitmap made up of longs in the kernel.  This ambiguity meant that
+ * 32-bit big-endian applications that can run on both 32-bit and
+ * 64-bit kernels had no consistent ABI to rely on, and 64-bit
+ * big-endian applications that treated method_mask as being made up
+ * of 32-bit words would have their bitmap misinterpreted.
+ *
+ * To clear up this confusion, we change the declaration of
+ * method_mask[] to use unsigned long and handle the conversion from
+ * 32-bit userspace to 64-bit kernel for big-endian systems in the
+ * compat_ioctl method.  Unfortunately, to keep the structure layout
+ * the same, we need the method_mask[] array to be aligned only to 4
+ * bytes even when long is 64 bits, which forces us into this ugly
+ * typedef.
+ */
+typedef unsigned long __attribute__((aligned(4))) packed_ulong;
+#define IB_USER_MAD_LONGS_PER_METHOD_MASK (128 / (8 * sizeof (long)))
+
+/**
+ * ib_user_mad_reg_req - MAD registration request
+ * @id - Set by the kernel; used to identify agent in future requests.
+ * @qpn - Queue pair number; must be 0 or 1.
+ * @method_mask - The caller will receive unsolicited MADs for any method
+ *   where @method_mask = 1.
+ * @mgmt_class - Indicates which management class of MADs should be receive
+ *   by the caller.  This field is only required if the user wishes to
+ *   receive unsolicited MADs, otherwise it should be 0.
+ * @mgmt_class_version - Indicates which version of MADs for the given
+ *   management class to receive.
+ * @oui: Indicates IEEE OUI when mgmt_class is a vendor class
+ *   in the range from 0x30 to 0x4f. Otherwise not used.
+ * @rmpp_version: If set, indicates the RMPP version used.
+ *
+ */
+struct ib_user_mad_reg_req {
+       __u32   id;
+       packed_ulong method_mask[IB_USER_MAD_LONGS_PER_METHOD_MASK];
+       __u8    qpn;
+       __u8    mgmt_class;
+       __u8    mgmt_class_version;
+       __u8    oui[3];
+       __u8    rmpp_version;
+};
+
+#define IB_IOCTL_MAGIC         0x1b
+
+#define IB_USER_MAD_REGISTER_AGENT     _IOWR(IB_IOCTL_MAGIC, 1, \
+                                             struct ib_user_mad_reg_req)
+
+#define IB_USER_MAD_UNREGISTER_AGENT   _IOW(IB_IOCTL_MAGIC, 2, __u32)
+
+#define IB_USER_MAD_ENABLE_PKEY                _IO(IB_IOCTL_MAGIC, 3)
+
+#endif /* IB_USER_MAD_H */
diff --git a/include/uapi/rdma/ib_user_sa.h b/include/uapi/rdma/ib_user_sa.h
new file mode 100644 (file)
index 0000000..cfc7c9b
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * 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
+ * OpenIB.org 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.
+ *
+ * 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.
+ */
+
+#ifndef IB_USER_SA_H
+#define IB_USER_SA_H
+
+#include <linux/types.h>
+
+enum {
+       IB_PATH_GMP             = 1,
+       IB_PATH_PRIMARY         = (1<<1),
+       IB_PATH_ALTERNATE       = (1<<2),
+       IB_PATH_OUTBOUND        = (1<<3),
+       IB_PATH_INBOUND         = (1<<4),
+       IB_PATH_INBOUND_REVERSE = (1<<5),
+       IB_PATH_BIDIRECTIONAL   = IB_PATH_OUTBOUND | IB_PATH_INBOUND_REVERSE
+};
+
+struct ib_path_rec_data {
+       __u32   flags;
+       __u32   reserved;
+       __u32   path_rec[16];
+};
+
+struct ib_user_path_rec {
+       __u8    dgid[16];
+       __u8    sgid[16];
+       __be16  dlid;
+       __be16  slid;
+       __u32   raw_traffic;
+       __be32  flow_label;
+       __u32   reversible;
+       __u32   mtu;
+       __be16  pkey;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    numb_path;
+       __u8    sl;
+       __u8    mtu_selector;
+       __u8    rate_selector;
+       __u8    rate;
+       __u8    packet_life_time_selector;
+       __u8    packet_life_time;
+       __u8    preference;
+};
+
+#endif /* IB_USER_SA_H */
diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_verbs.h
new file mode 100644 (file)
index 0000000..81aba3a
--- /dev/null
@@ -0,0 +1,734 @@
+/*
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
+ * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
+ * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
+ *
+ * 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
+ * OpenIB.org 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.
+ *
+ * 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.
+ */
+
+#ifndef IB_USER_VERBS_H
+#define IB_USER_VERBS_H
+
+#include <linux/types.h>
+
+/*
+ * Increment this value if any changes that break userspace ABI
+ * compatibility are made.
+ */
+#define IB_USER_VERBS_ABI_VERSION      6
+
+enum {
+       IB_USER_VERBS_CMD_GET_CONTEXT,
+       IB_USER_VERBS_CMD_QUERY_DEVICE,
+       IB_USER_VERBS_CMD_QUERY_PORT,
+       IB_USER_VERBS_CMD_ALLOC_PD,
+       IB_USER_VERBS_CMD_DEALLOC_PD,
+       IB_USER_VERBS_CMD_CREATE_AH,
+       IB_USER_VERBS_CMD_MODIFY_AH,
+       IB_USER_VERBS_CMD_QUERY_AH,
+       IB_USER_VERBS_CMD_DESTROY_AH,
+       IB_USER_VERBS_CMD_REG_MR,
+       IB_USER_VERBS_CMD_REG_SMR,
+       IB_USER_VERBS_CMD_REREG_MR,
+       IB_USER_VERBS_CMD_QUERY_MR,
+       IB_USER_VERBS_CMD_DEREG_MR,
+       IB_USER_VERBS_CMD_ALLOC_MW,
+       IB_USER_VERBS_CMD_BIND_MW,
+       IB_USER_VERBS_CMD_DEALLOC_MW,
+       IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
+       IB_USER_VERBS_CMD_CREATE_CQ,
+       IB_USER_VERBS_CMD_RESIZE_CQ,
+       IB_USER_VERBS_CMD_DESTROY_CQ,
+       IB_USER_VERBS_CMD_POLL_CQ,
+       IB_USER_VERBS_CMD_PEEK_CQ,
+       IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
+       IB_USER_VERBS_CMD_CREATE_QP,
+       IB_USER_VERBS_CMD_QUERY_QP,
+       IB_USER_VERBS_CMD_MODIFY_QP,
+       IB_USER_VERBS_CMD_DESTROY_QP,
+       IB_USER_VERBS_CMD_POST_SEND,
+       IB_USER_VERBS_CMD_POST_RECV,
+       IB_USER_VERBS_CMD_ATTACH_MCAST,
+       IB_USER_VERBS_CMD_DETACH_MCAST,
+       IB_USER_VERBS_CMD_CREATE_SRQ,
+       IB_USER_VERBS_CMD_MODIFY_SRQ,
+       IB_USER_VERBS_CMD_QUERY_SRQ,
+       IB_USER_VERBS_CMD_DESTROY_SRQ,
+       IB_USER_VERBS_CMD_POST_SRQ_RECV,
+       IB_USER_VERBS_CMD_OPEN_XRCD,
+       IB_USER_VERBS_CMD_CLOSE_XRCD,
+       IB_USER_VERBS_CMD_CREATE_XSRQ,
+       IB_USER_VERBS_CMD_OPEN_QP
+};
+
+/*
+ * Make sure that all structs defined in this file remain laid out so
+ * that they pack the same way on 32-bit and 64-bit architectures (to
+ * avoid incompatibility between 32-bit userspace and 64-bit kernels).
+ * Specifically:
+ *  - Do not use pointer types -- pass pointers in __u64 instead.
+ *  - Make sure that any structure larger than 4 bytes is padded to a
+ *    multiple of 8 bytes.  Otherwise the structure size will be
+ *    different between 32-bit and 64-bit architectures.
+ */
+
+struct ib_uverbs_async_event_desc {
+       __u64 element;
+       __u32 event_type;       /* enum ib_event_type */
+       __u32 reserved;
+};
+
+struct ib_uverbs_comp_event_desc {
+       __u64 cq_handle;
+};
+
+/*
+ * All commands from userspace should start with a __u32 command field
+ * followed by __u16 in_words and out_words fields (which give the
+ * length of the command block and response buffer if any in 32-bit
+ * words).  The kernel driver will read these fields first and read
+ * the rest of the command struct based on these value.
+ */
+
+struct ib_uverbs_cmd_hdr {
+       __u32 command;
+       __u16 in_words;
+       __u16 out_words;
+};
+
+struct ib_uverbs_get_context {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_get_context_resp {
+       __u32 async_fd;
+       __u32 num_comp_vectors;
+};
+
+struct ib_uverbs_query_device {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_device_resp {
+       __u64 fw_ver;
+       __be64 node_guid;
+       __be64 sys_image_guid;
+       __u64 max_mr_size;
+       __u64 page_size_cap;
+       __u32 vendor_id;
+       __u32 vendor_part_id;
+       __u32 hw_ver;
+       __u32 max_qp;
+       __u32 max_qp_wr;
+       __u32 device_cap_flags;
+       __u32 max_sge;
+       __u32 max_sge_rd;
+       __u32 max_cq;
+       __u32 max_cqe;
+       __u32 max_mr;
+       __u32 max_pd;
+       __u32 max_qp_rd_atom;
+       __u32 max_ee_rd_atom;
+       __u32 max_res_rd_atom;
+       __u32 max_qp_init_rd_atom;
+       __u32 max_ee_init_rd_atom;
+       __u32 atomic_cap;
+       __u32 max_ee;
+       __u32 max_rdd;
+       __u32 max_mw;
+       __u32 max_raw_ipv6_qp;
+       __u32 max_raw_ethy_qp;
+       __u32 max_mcast_grp;
+       __u32 max_mcast_qp_attach;
+       __u32 max_total_mcast_qp_attach;
+       __u32 max_ah;
+       __u32 max_fmr;
+       __u32 max_map_per_fmr;
+       __u32 max_srq;
+       __u32 max_srq_wr;
+       __u32 max_srq_sge;
+       __u16 max_pkeys;
+       __u8  local_ca_ack_delay;
+       __u8  phys_port_cnt;
+       __u8  reserved[4];
+};
+
+struct ib_uverbs_query_port {
+       __u64 response;
+       __u8  port_num;
+       __u8  reserved[7];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_port_resp {
+       __u32 port_cap_flags;
+       __u32 max_msg_sz;
+       __u32 bad_pkey_cntr;
+       __u32 qkey_viol_cntr;
+       __u32 gid_tbl_len;
+       __u16 pkey_tbl_len;
+       __u16 lid;
+       __u16 sm_lid;
+       __u8  state;
+       __u8  max_mtu;
+       __u8  active_mtu;
+       __u8  lmc;
+       __u8  max_vl_num;
+       __u8  sm_sl;
+       __u8  subnet_timeout;
+       __u8  init_type_reply;
+       __u8  active_width;
+       __u8  active_speed;
+       __u8  phys_state;
+       __u8  link_layer;
+       __u8  reserved[2];
+};
+
+struct ib_uverbs_alloc_pd {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_alloc_pd_resp {
+       __u32 pd_handle;
+};
+
+struct ib_uverbs_dealloc_pd {
+       __u32 pd_handle;
+};
+
+struct ib_uverbs_open_xrcd {
+       __u64 response;
+       __u32 fd;
+       __u32 oflags;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_open_xrcd_resp {
+       __u32 xrcd_handle;
+};
+
+struct ib_uverbs_close_xrcd {
+       __u32 xrcd_handle;
+};
+
+struct ib_uverbs_reg_mr {
+       __u64 response;
+       __u64 start;
+       __u64 length;
+       __u64 hca_va;
+       __u32 pd_handle;
+       __u32 access_flags;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_reg_mr_resp {
+       __u32 mr_handle;
+       __u32 lkey;
+       __u32 rkey;
+};
+
+struct ib_uverbs_dereg_mr {
+       __u32 mr_handle;
+};
+
+struct ib_uverbs_create_comp_channel {
+       __u64 response;
+};
+
+struct ib_uverbs_create_comp_channel_resp {
+       __u32 fd;
+};
+
+struct ib_uverbs_create_cq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 cqe;
+       __u32 comp_vector;
+       __s32 comp_channel;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_cq_resp {
+       __u32 cq_handle;
+       __u32 cqe;
+};
+
+struct ib_uverbs_resize_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 cqe;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_resize_cq_resp {
+       __u32 cqe;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_poll_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 ne;
+};
+
+struct ib_uverbs_wc {
+       __u64 wr_id;
+       __u32 status;
+       __u32 opcode;
+       __u32 vendor_err;
+       __u32 byte_len;
+       union {
+               __u32 imm_data;
+               __u32 invalidate_rkey;
+       } ex;
+       __u32 qp_num;
+       __u32 src_qp;
+       __u32 wc_flags;
+       __u16 pkey_index;
+       __u16 slid;
+       __u8 sl;
+       __u8 dlid_path_bits;
+       __u8 port_num;
+       __u8 reserved;
+};
+
+struct ib_uverbs_poll_cq_resp {
+       __u32 count;
+       __u32 reserved;
+       struct ib_uverbs_wc wc[0];
+};
+
+struct ib_uverbs_req_notify_cq {
+       __u32 cq_handle;
+       __u32 solicited_only;
+};
+
+struct ib_uverbs_destroy_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_cq_resp {
+       __u32 comp_events_reported;
+       __u32 async_events_reported;
+};
+
+struct ib_uverbs_global_route {
+       __u8  dgid[16];
+       __u32 flow_label;
+       __u8  sgid_index;
+       __u8  hop_limit;
+       __u8  traffic_class;
+       __u8  reserved;
+};
+
+struct ib_uverbs_ah_attr {
+       struct ib_uverbs_global_route grh;
+       __u16 dlid;
+       __u8  sl;
+       __u8  src_path_bits;
+       __u8  static_rate;
+       __u8  is_global;
+       __u8  port_num;
+       __u8  reserved;
+};
+
+struct ib_uverbs_qp_attr {
+       __u32   qp_attr_mask;
+       __u32   qp_state;
+       __u32   cur_qp_state;
+       __u32   path_mtu;
+       __u32   path_mig_state;
+       __u32   qkey;
+       __u32   rq_psn;
+       __u32   sq_psn;
+       __u32   dest_qp_num;
+       __u32   qp_access_flags;
+
+       struct ib_uverbs_ah_attr ah_attr;
+       struct ib_uverbs_ah_attr alt_ah_attr;
+
+       /* ib_qp_cap */
+       __u32   max_send_wr;
+       __u32   max_recv_wr;
+       __u32   max_send_sge;
+       __u32   max_recv_sge;
+       __u32   max_inline_data;
+
+       __u16   pkey_index;
+       __u16   alt_pkey_index;
+       __u8    en_sqd_async_notify;
+       __u8    sq_draining;
+       __u8    max_rd_atomic;
+       __u8    max_dest_rd_atomic;
+       __u8    min_rnr_timer;
+       __u8    port_num;
+       __u8    timeout;
+       __u8    retry_cnt;
+       __u8    rnr_retry;
+       __u8    alt_port_num;
+       __u8    alt_timeout;
+       __u8    reserved[5];
+};
+
+struct ib_uverbs_create_qp {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 send_cq_handle;
+       __u32 recv_cq_handle;
+       __u32 srq_handle;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u8  sq_sig_all;
+       __u8  qp_type;
+       __u8  is_srq;
+       __u8  reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_open_qp {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 qpn;
+       __u8  qp_type;
+       __u8  reserved[7];
+       __u64 driver_data[0];
+};
+
+/* also used for open response */
+struct ib_uverbs_create_qp_resp {
+       __u32 qp_handle;
+       __u32 qpn;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u32 reserved;
+};
+
+/*
+ * This struct needs to remain a multiple of 8 bytes to keep the
+ * alignment of the modify QP parameters.
+ */
+struct ib_uverbs_qp_dest {
+       __u8  dgid[16];
+       __u32 flow_label;
+       __u16 dlid;
+       __u16 reserved;
+       __u8  sgid_index;
+       __u8  hop_limit;
+       __u8  traffic_class;
+       __u8  sl;
+       __u8  src_path_bits;
+       __u8  static_rate;
+       __u8  is_global;
+       __u8  port_num;
+};
+
+struct ib_uverbs_query_qp {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 attr_mask;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_qp_resp {
+       struct ib_uverbs_qp_dest dest;
+       struct ib_uverbs_qp_dest alt_dest;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u32 qkey;
+       __u32 rq_psn;
+       __u32 sq_psn;
+       __u32 dest_qp_num;
+       __u32 qp_access_flags;
+       __u16 pkey_index;
+       __u16 alt_pkey_index;
+       __u8  qp_state;
+       __u8  cur_qp_state;
+       __u8  path_mtu;
+       __u8  path_mig_state;
+       __u8  sq_draining;
+       __u8  max_rd_atomic;
+       __u8  max_dest_rd_atomic;
+       __u8  min_rnr_timer;
+       __u8  port_num;
+       __u8  timeout;
+       __u8  retry_cnt;
+       __u8  rnr_retry;
+       __u8  alt_port_num;
+       __u8  alt_timeout;
+       __u8  sq_sig_all;
+       __u8  reserved[5];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_modify_qp {
+       struct ib_uverbs_qp_dest dest;
+       struct ib_uverbs_qp_dest alt_dest;
+       __u32 qp_handle;
+       __u32 attr_mask;
+       __u32 qkey;
+       __u32 rq_psn;
+       __u32 sq_psn;
+       __u32 dest_qp_num;
+       __u32 qp_access_flags;
+       __u16 pkey_index;
+       __u16 alt_pkey_index;
+       __u8  qp_state;
+       __u8  cur_qp_state;
+       __u8  path_mtu;
+       __u8  path_mig_state;
+       __u8  en_sqd_async_notify;
+       __u8  max_rd_atomic;
+       __u8  max_dest_rd_atomic;
+       __u8  min_rnr_timer;
+       __u8  port_num;
+       __u8  timeout;
+       __u8  retry_cnt;
+       __u8  rnr_retry;
+       __u8  alt_port_num;
+       __u8  alt_timeout;
+       __u8  reserved[2];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_modify_qp_resp {
+};
+
+struct ib_uverbs_destroy_qp {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_qp_resp {
+       __u32 events_reported;
+};
+
+/*
+ * The ib_uverbs_sge structure isn't used anywhere, since we assume
+ * the ib_sge structure is packed the same way on 32-bit and 64-bit
+ * architectures in both kernel and user space.  It's just here to
+ * document the ABI.
+ */
+struct ib_uverbs_sge {
+       __u64 addr;
+       __u32 length;
+       __u32 lkey;
+};
+
+struct ib_uverbs_send_wr {
+       __u64 wr_id;
+       __u32 num_sge;
+       __u32 opcode;
+       __u32 send_flags;
+       union {
+               __u32 imm_data;
+               __u32 invalidate_rkey;
+       } ex;
+       union {
+               struct {
+                       __u64 remote_addr;
+                       __u32 rkey;
+                       __u32 reserved;
+               } rdma;
+               struct {
+                       __u64 remote_addr;
+                       __u64 compare_add;
+                       __u64 swap;
+                       __u32 rkey;
+                       __u32 reserved;
+               } atomic;
+               struct {
+                       __u32 ah;
+                       __u32 remote_qpn;
+                       __u32 remote_qkey;
+                       __u32 reserved;
+               } ud;
+       } wr;
+};
+
+struct ib_uverbs_post_send {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_send_wr send_wr[0];
+};
+
+struct ib_uverbs_post_send_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_recv_wr {
+       __u64 wr_id;
+       __u32 num_sge;
+       __u32 reserved;
+};
+
+struct ib_uverbs_post_recv {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_recv_wr recv_wr[0];
+};
+
+struct ib_uverbs_post_recv_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_post_srq_recv {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_recv_wr recv[0];
+};
+
+struct ib_uverbs_post_srq_recv_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_create_ah {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 reserved;
+       struct ib_uverbs_ah_attr attr;
+};
+
+struct ib_uverbs_create_ah_resp {
+       __u32 ah_handle;
+};
+
+struct ib_uverbs_destroy_ah {
+       __u32 ah_handle;
+};
+
+struct ib_uverbs_attach_mcast {
+       __u8  gid[16];
+       __u32 qp_handle;
+       __u16 mlid;
+       __u16 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_detach_mcast {
+       __u8  gid[16];
+       __u32 qp_handle;
+       __u16 mlid;
+       __u16 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_srq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_xsrq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 srq_type;
+       __u32 pd_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u32 reserved;
+       __u32 xrcd_handle;
+       __u32 cq_handle;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_srq_resp {
+       __u32 srq_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srqn;
+};
+
+struct ib_uverbs_modify_srq {
+       __u32 srq_handle;
+       __u32 attr_mask;
+       __u32 max_wr;
+       __u32 srq_limit;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_srq {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_srq_resp {
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_srq {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_srq_resp {
+       __u32 events_reported;
+};
+
+#endif /* IB_USER_VERBS_H */
diff --git a/include/uapi/rdma/rdma_netlink.h b/include/uapi/rdma/rdma_netlink.h
new file mode 100644 (file)
index 0000000..8297285
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _UAPI_RDMA_NETLINK_H
+#define _UAPI_RDMA_NETLINK_H
+
+#include <linux/types.h>
+
+enum {
+       RDMA_NL_RDMA_CM = 1
+};
+
+#define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
+#define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
+#define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
+
+enum {
+       RDMA_NL_RDMA_CM_ID_STATS = 0,
+       RDMA_NL_RDMA_CM_NUM_OPS
+};
+
+enum {
+       RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1,
+       RDMA_NL_RDMA_CM_ATTR_DST_ADDR,
+       RDMA_NL_RDMA_CM_NUM_ATTR,
+};
+
+struct rdma_cm_id_stats {
+       __u32   qp_num;
+       __u32   bound_dev_if;
+       __u32   port_space;
+       __s32   pid;
+       __u8    cm_state;
+       __u8    node_type;
+       __u8    port_num;
+       __u8    qp_type;
+};
+
+
+#endif /* _UAPI_RDMA_NETLINK_H */
diff --git a/include/uapi/rdma/rdma_user_cm.h b/include/uapi/rdma/rdma_user_cm.h
new file mode 100644 (file)
index 0000000..1ee9239
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
+ *
+ * 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
+ * OpenIB.org 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.
+ *
+ * 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.
+ */
+
+#ifndef RDMA_USER_CM_H
+#define RDMA_USER_CM_H
+
+#include <linux/types.h>
+#include <linux/in6.h>
+#include <rdma/ib_user_verbs.h>
+#include <rdma/ib_user_sa.h>
+
+#define RDMA_USER_CM_ABI_VERSION       4
+
+#define RDMA_MAX_PRIVATE_DATA          256
+
+enum {
+       RDMA_USER_CM_CMD_CREATE_ID,
+       RDMA_USER_CM_CMD_DESTROY_ID,
+       RDMA_USER_CM_CMD_BIND_ADDR,
+       RDMA_USER_CM_CMD_RESOLVE_ADDR,
+       RDMA_USER_CM_CMD_RESOLVE_ROUTE,
+       RDMA_USER_CM_CMD_QUERY_ROUTE,
+       RDMA_USER_CM_CMD_CONNECT,
+       RDMA_USER_CM_CMD_LISTEN,
+       RDMA_USER_CM_CMD_ACCEPT,
+       RDMA_USER_CM_CMD_REJECT,
+       RDMA_USER_CM_CMD_DISCONNECT,
+       RDMA_USER_CM_CMD_INIT_QP_ATTR,
+       RDMA_USER_CM_CMD_GET_EVENT,
+       RDMA_USER_CM_CMD_GET_OPTION,
+       RDMA_USER_CM_CMD_SET_OPTION,
+       RDMA_USER_CM_CMD_NOTIFY,
+       RDMA_USER_CM_CMD_JOIN_MCAST,
+       RDMA_USER_CM_CMD_LEAVE_MCAST,
+       RDMA_USER_CM_CMD_MIGRATE_ID
+};
+
+/*
+ * command ABI structures.
+ */
+struct rdma_ucm_cmd_hdr {
+       __u32 cmd;
+       __u16 in;
+       __u16 out;
+};
+
+struct rdma_ucm_create_id {
+       __u64 uid;
+       __u64 response;
+       __u16 ps;
+       __u8  qp_type;
+       __u8  reserved[5];
+};
+
+struct rdma_ucm_create_id_resp {
+       __u32 id;
+};
+
+struct rdma_ucm_destroy_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_destroy_id_resp {
+       __u32 events_reported;
+};
+
+struct rdma_ucm_bind_addr {
+       __u64 response;
+       struct sockaddr_in6 addr;
+       __u32 id;
+};
+
+struct rdma_ucm_resolve_addr {
+       struct sockaddr_in6 src_addr;
+       struct sockaddr_in6 dst_addr;
+       __u32 id;
+       __u32 timeout_ms;
+};
+
+struct rdma_ucm_resolve_route {
+       __u32 id;
+       __u32 timeout_ms;
+};
+
+struct rdma_ucm_query_route {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_query_route_resp {
+       __u64 node_guid;
+       struct ib_user_path_rec ib_route[2];
+       struct sockaddr_in6 src_addr;
+       struct sockaddr_in6 dst_addr;
+       __u32 num_paths;
+       __u8 port_num;
+       __u8 reserved[3];
+};
+
+struct rdma_ucm_conn_param {
+       __u32 qp_num;
+       __u32 reserved;
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+       __u8  private_data_len;
+       __u8  srq;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  flow_control;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  valid;
+};
+
+struct rdma_ucm_ud_param {
+       __u32 qp_num;
+       __u32 qkey;
+       struct ib_uverbs_ah_attr ah_attr;
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+       __u8  private_data_len;
+       __u8  reserved[7];
+};
+
+struct rdma_ucm_connect {
+       struct rdma_ucm_conn_param conn_param;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_listen {
+       __u32 id;
+       __u32 backlog;
+};
+
+struct rdma_ucm_accept {
+       __u64 uid;
+       struct rdma_ucm_conn_param conn_param;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_reject {
+       __u32 id;
+       __u8  private_data_len;
+       __u8  reserved[3];
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+};
+
+struct rdma_ucm_disconnect {
+       __u32 id;
+};
+
+struct rdma_ucm_init_qp_attr {
+       __u64 response;
+       __u32 id;
+       __u32 qp_state;
+};
+
+struct rdma_ucm_notify {
+       __u32 id;
+       __u32 event;
+};
+
+struct rdma_ucm_join_mcast {
+       __u64 response;         /* rdma_ucm_create_id_resp */
+       __u64 uid;
+       struct sockaddr_in6 addr;
+       __u32 id;
+};
+
+struct rdma_ucm_get_event {
+       __u64 response;
+};
+
+struct rdma_ucm_event_resp {
+       __u64 uid;
+       __u32 id;
+       __u32 event;
+       __u32 status;
+       union {
+               struct rdma_ucm_conn_param conn;
+               struct rdma_ucm_ud_param   ud;
+       } param;
+};
+
+/* Option levels */
+enum {
+       RDMA_OPTION_ID          = 0,
+       RDMA_OPTION_IB          = 1
+};
+
+/* Option details */
+enum {
+       RDMA_OPTION_ID_TOS       = 0,
+       RDMA_OPTION_ID_REUSEADDR = 1,
+       RDMA_OPTION_ID_AFONLY    = 2,
+       RDMA_OPTION_IB_PATH      = 1
+};
+
+struct rdma_ucm_set_option {
+       __u64 optval;
+       __u32 id;
+       __u32 level;
+       __u32 optname;
+       __u32 optlen;
+};
+
+struct rdma_ucm_migrate_id {
+       __u64 response;
+       __u32 id;
+       __u32 fd;
+};
+
+struct rdma_ucm_migrate_resp {
+       __u32 events_reported;
+};
+
+#endif /* RDMA_USER_CM_H */