mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
5.3 Merge window RDMA pull request
A smaller cycle this time. Notably we see another new driver, 'Soft
iWarp', and the deletion of an ancient unused driver for nes.
- Revise and simplify the signature offload RDMA MR APIs
- More progress on hoisting object allocation boiler plate code out of the
drivers
- Driver bug fixes and revisions for hns, hfi1, efa, cxgb4, qib, i40iw
- Tree wide cleanups: struct_size, put_user_page, xarray, rst doc conversion
- Removal of obsolete ib_ucm chardev and nes driver
- netlink based discovery of chardevs and autoloading of the modules
providing them
- Move more of the rdamvt/hfi1 uapi to include/uapi/rdma
- New driver 'siw' for software based iWarp running on top of netdev,
much like rxe's software RoCE.
- mlx5 feature to report events in their raw devx format to userspace
- Expose per-object counters through rdma tool
- Adaptive interrupt moderation for RDMA (DIM), sharing the DIM core
from netdev
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEfB7FMLh+8QxL+6i3OG33FX4gmxoFAl0ozSwACgkQOG33FX4g
mxqncg//Qe2zSnlbd6r3hofsc1WiHSx/CiXtT52BUGipO+cWQUwO7hGFuUHIFCuZ
JBg7mc998xkyLIH85a/txd+RwAIApKgHVdd+VlrmybZeYCiERAMFpWg8cHpzrbnw
l3Ln9fTtJf/NAhO0ZCGV9DCd01fs9yVQgAv21UnLJMUhp9Pzk/iMhu7C7IiSLKvz
t7iFhEqPXNJdoqZ+wtWyc/463YxKUd9XNg9Z1neQdaeZrX4UjgDbY9x/ub3zOvQV
jc/IL4GysJ3z8mfx5mAd6sE/jAjhcnJuaGYYATqkxiLZEP+muYwU50CNs951XhJC
b/EfRQIcLg9kq/u6CP+CuWlMrRWy3U7yj3/mrbbGhlGq88Yt6FGqUf0aFy6TYMaO
RzTG5ZR+0AmsOrR1QU+DbH9CKX5PGZko6E7UCdjROqUlAUOjNwRr99O5mYrZoM9E
PdN2vtdWY9COR3Q+7APdhWIA/MdN2vjr3LDsR3H94tru1yi6dB/BPDRcJieozaxn
2T+YrZbV+9/YgrccpPQCilaQdanXKpkmbYkbEzVLPcOEV/lT9odFDt3eK+6duVDL
ufu8fs1xapMDHKkcwo5jeNZcoSJymAvHmGfZlo2PPOmh802Ul60bvYKwfheVkhHF
Eee5/ovCMs1NLqFiq7Zq5mXO0fR0BHyg9VVjJBZm2JtazyuhoHQ=
=iWcG
-----END PGP SIGNATURE-----
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull rdma updates from Jason Gunthorpe:
"A smaller cycle this time. Notably we see another new driver, 'Soft
iWarp', and the deletion of an ancient unused driver for nes.
- Revise and simplify the signature offload RDMA MR APIs
- More progress on hoisting object allocation boiler plate code out
of the drivers
- Driver bug fixes and revisions for hns, hfi1, efa, cxgb4, qib,
i40iw
- Tree wide cleanups: struct_size, put_user_page, xarray, rst doc
conversion
- Removal of obsolete ib_ucm chardev and nes driver
- netlink based discovery of chardevs and autoloading of the modules
providing them
- Move more of the rdamvt/hfi1 uapi to include/uapi/rdma
- New driver 'siw' for software based iWarp running on top of netdev,
much like rxe's software RoCE.
- mlx5 feature to report events in their raw devx format to userspace
- Expose per-object counters through rdma tool
- Adaptive interrupt moderation for RDMA (DIM), sharing the DIM core
from netdev"
* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (194 commits)
RMDA/siw: Require a 64 bit arch
RDMA/siw: Mark expected switch fall-throughs
RDMA/core: Fix -Wunused-const-variable warnings
rdma/siw: Remove set but not used variable 's'
rdma/siw: Add missing dependencies on LIBCRC32C and DMA_VIRT_OPS
RDMA/siw: Add missing rtnl_lock around access to ifa
rdma/siw: Use proper enumerated type in map_cqe_status
RDMA/siw: Remove unnecessary kthread create/destroy printouts
IB/rdmavt: Fix variable shadowing issue in rvt_create_cq
RDMA/core: Fix race when resolving IP address
RDMA/core: Make rdma_counter.h compile stand alone
IB/core: Work on the caller socket net namespace in nldev_newlink()
RDMA/rxe: Fill in wc byte_len with IB_WC_RECV_RDMA_WITH_IMM
RDMA/mlx5: Set RDMA DIM to be enabled by default
RDMA/nldev: Added configuration of RDMA dynamic interrupt moderation to netlink
RDMA/core: Provide RDMA DIM support for ULPs
linux/dim: Implement RDMA adaptive moderation (DIM)
IB/mlx5: Report correctly tag matching rendezvous capability
docs: infiniband: add it to the driver-api bookset
IB/mlx5: Implement VHCA tunnel mechanism in DEVX
...
This commit is contained in:
commit
2a3c389a0f
221 changed files with 18855 additions and 24841 deletions
|
|
@ -1,326 +0,0 @@
|
|||
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
|
||||
/*
|
||||
* 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 {
|
||||
__aligned_u64 uid;
|
||||
__aligned_u64 response;
|
||||
};
|
||||
|
||||
struct ib_ucm_create_id_resp {
|
||||
__u32 id;
|
||||
};
|
||||
|
||||
struct ib_ucm_destroy_id {
|
||||
__aligned_u64 response;
|
||||
__u32 id;
|
||||
__u32 reserved;
|
||||
};
|
||||
|
||||
struct ib_ucm_destroy_id_resp {
|
||||
__u32 events_reported;
|
||||
};
|
||||
|
||||
struct ib_ucm_attr_id {
|
||||
__aligned_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 {
|
||||
__aligned_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 {
|
||||
__aligned_u64 data;
|
||||
__u32 id;
|
||||
__u8 len;
|
||||
__u8 reserved[3];
|
||||
};
|
||||
|
||||
struct ib_ucm_req {
|
||||
__u32 id;
|
||||
__u32 qpn;
|
||||
__u32 qp_type;
|
||||
__u32 psn;
|
||||
__be64 sid;
|
||||
__aligned_u64 data;
|
||||
__aligned_u64 primary_path;
|
||||
__aligned_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 {
|
||||
__aligned_u64 uid;
|
||||
__aligned_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;
|
||||
__aligned_u64 info;
|
||||
__aligned_u64 data;
|
||||
__u8 info_len;
|
||||
__u8 data_len;
|
||||
__u8 reserved[6];
|
||||
};
|
||||
|
||||
struct ib_ucm_mra {
|
||||
__aligned_u64 data;
|
||||
__u32 id;
|
||||
__u8 len;
|
||||
__u8 timeout;
|
||||
__u8 reserved[2];
|
||||
};
|
||||
|
||||
struct ib_ucm_lap {
|
||||
__aligned_u64 path;
|
||||
__aligned_u64 data;
|
||||
__u32 id;
|
||||
__u8 len;
|
||||
__u8 reserved[3];
|
||||
};
|
||||
|
||||
struct ib_ucm_sidr_req {
|
||||
__u32 id;
|
||||
__u32 timeout;
|
||||
__be64 sid;
|
||||
__aligned_u64 data;
|
||||
__aligned_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;
|
||||
__aligned_u64 info;
|
||||
__aligned_u64 data;
|
||||
__u8 info_len;
|
||||
__u8 data_len;
|
||||
__u8 reserved[6];
|
||||
};
|
||||
/*
|
||||
* event notification ABI structures.
|
||||
*/
|
||||
struct ib_ucm_event_get {
|
||||
__aligned_u64 response;
|
||||
__aligned_u64 data;
|
||||
__aligned_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 {
|
||||
__aligned_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 */
|
||||
|
|
@ -51,6 +51,7 @@ enum mlx5_ib_devx_methods {
|
|||
MLX5_IB_METHOD_DEVX_OTHER = (1U << UVERBS_ID_NS_SHIFT),
|
||||
MLX5_IB_METHOD_DEVX_QUERY_UAR,
|
||||
MLX5_IB_METHOD_DEVX_QUERY_EQN,
|
||||
MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT,
|
||||
};
|
||||
|
||||
enum mlx5_ib_devx_other_attrs {
|
||||
|
|
@ -93,6 +94,14 @@ enum mlx5_ib_devx_obj_query_async_attrs {
|
|||
MLX5_IB_ATTR_DEVX_OBJ_QUERY_ASYNC_OUT_LEN,
|
||||
};
|
||||
|
||||
enum mlx5_ib_devx_subscribe_event_attrs {
|
||||
MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
|
||||
MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_OBJ_HANDLE,
|
||||
MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_TYPE_NUM_LIST,
|
||||
MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_NUM,
|
||||
MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_COOKIE,
|
||||
};
|
||||
|
||||
enum mlx5_ib_devx_query_eqn_attrs {
|
||||
MLX5_IB_ATTR_DEVX_QUERY_EQN_USER_VEC = (1U << UVERBS_ID_NS_SHIFT),
|
||||
MLX5_IB_ATTR_DEVX_QUERY_EQN_DEV_EQN,
|
||||
|
|
@ -127,16 +136,26 @@ enum mlx5_ib_devx_async_cmd_fd_alloc_attrs {
|
|||
MLX5_IB_ATTR_DEVX_ASYNC_CMD_FD_ALLOC_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
|
||||
};
|
||||
|
||||
enum mlx5_ib_devx_async_event_fd_alloc_attrs {
|
||||
MLX5_IB_ATTR_DEVX_ASYNC_EVENT_FD_ALLOC_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
|
||||
MLX5_IB_ATTR_DEVX_ASYNC_EVENT_FD_ALLOC_FLAGS,
|
||||
};
|
||||
|
||||
enum mlx5_ib_devx_async_cmd_fd_methods {
|
||||
MLX5_IB_METHOD_DEVX_ASYNC_CMD_FD_ALLOC = (1U << UVERBS_ID_NS_SHIFT),
|
||||
};
|
||||
|
||||
enum mlx5_ib_devx_async_event_fd_methods {
|
||||
MLX5_IB_METHOD_DEVX_ASYNC_EVENT_FD_ALLOC = (1U << UVERBS_ID_NS_SHIFT),
|
||||
};
|
||||
|
||||
enum mlx5_ib_objects {
|
||||
MLX5_IB_OBJECT_DEVX = (1U << UVERBS_ID_NS_SHIFT),
|
||||
MLX5_IB_OBJECT_DEVX_OBJ,
|
||||
MLX5_IB_OBJECT_DEVX_UMEM,
|
||||
MLX5_IB_OBJECT_FLOW_MATCHER,
|
||||
MLX5_IB_OBJECT_DEVX_ASYNC_CMD_FD,
|
||||
MLX5_IB_OBJECT_DEVX_ASYNC_EVENT_FD,
|
||||
};
|
||||
|
||||
enum mlx5_ib_flow_matcher_create_attrs {
|
||||
|
|
|
|||
|
|
@ -63,5 +63,14 @@ enum mlx5_ib_uapi_dm_type {
|
|||
MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM,
|
||||
};
|
||||
|
||||
enum mlx5_ib_uapi_devx_create_event_channel_flags {
|
||||
MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA = 1 << 0,
|
||||
};
|
||||
|
||||
struct mlx5_ib_uapi_devx_async_event_hdr {
|
||||
__aligned_u64 cookie;
|
||||
__u8 out_data[];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -147,6 +147,18 @@ enum {
|
|||
IWPM_NLA_HELLO_MAX
|
||||
};
|
||||
|
||||
/* For RDMA_NLDEV_ATTR_DEV_NODE_TYPE */
|
||||
enum {
|
||||
/* IB values map to NodeInfo:NodeType. */
|
||||
RDMA_NODE_IB_CA = 1,
|
||||
RDMA_NODE_IB_SWITCH,
|
||||
RDMA_NODE_IB_ROUTER,
|
||||
RDMA_NODE_RNIC,
|
||||
RDMA_NODE_USNIC,
|
||||
RDMA_NODE_USNIC_UDP,
|
||||
RDMA_NODE_UNSPECIFIED,
|
||||
};
|
||||
|
||||
/*
|
||||
* Local service operations:
|
||||
* RESOLVE - The client requests the local service to resolve a path.
|
||||
|
|
@ -267,11 +279,15 @@ enum rdma_nldev_command {
|
|||
|
||||
RDMA_NLDEV_CMD_RES_PD_GET, /* can dump */
|
||||
|
||||
RDMA_NLDEV_NUM_OPS
|
||||
};
|
||||
RDMA_NLDEV_CMD_GET_CHARDEV,
|
||||
|
||||
enum {
|
||||
RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
|
||||
RDMA_NLDEV_CMD_STAT_SET,
|
||||
|
||||
RDMA_NLDEV_CMD_STAT_GET, /* can dump */
|
||||
|
||||
RDMA_NLDEV_CMD_STAT_DEL,
|
||||
|
||||
RDMA_NLDEV_NUM_OPS
|
||||
};
|
||||
|
||||
enum rdma_nldev_print_type {
|
||||
|
|
@ -478,10 +494,72 @@ enum rdma_nldev_attr {
|
|||
* File descriptor handle of the net namespace object
|
||||
*/
|
||||
RDMA_NLDEV_NET_NS_FD, /* u32 */
|
||||
/*
|
||||
* Information about a chardev.
|
||||
* CHARDEV_TYPE is the name of the chardev ABI (ie uverbs, umad, etc)
|
||||
* CHARDEV_ABI signals the ABI revision (historical)
|
||||
* CHARDEV_NAME is the kernel name for the /dev/ file (no directory)
|
||||
* CHARDEV is the 64 bit dev_t for the inode
|
||||
*/
|
||||
RDMA_NLDEV_ATTR_CHARDEV_TYPE, /* string */
|
||||
RDMA_NLDEV_ATTR_CHARDEV_NAME, /* string */
|
||||
RDMA_NLDEV_ATTR_CHARDEV_ABI, /* u64 */
|
||||
RDMA_NLDEV_ATTR_CHARDEV, /* u64 */
|
||||
RDMA_NLDEV_ATTR_UVERBS_DRIVER_ID, /* u64 */
|
||||
/*
|
||||
* Counter-specific attributes.
|
||||
*/
|
||||
RDMA_NLDEV_ATTR_STAT_MODE, /* u32 */
|
||||
RDMA_NLDEV_ATTR_STAT_RES, /* u32 */
|
||||
RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK, /* u32 */
|
||||
RDMA_NLDEV_ATTR_STAT_COUNTER, /* nested table */
|
||||
RDMA_NLDEV_ATTR_STAT_COUNTER_ENTRY, /* nested table */
|
||||
RDMA_NLDEV_ATTR_STAT_COUNTER_ID, /* u32 */
|
||||
RDMA_NLDEV_ATTR_STAT_HWCOUNTERS, /* nested table */
|
||||
RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY, /* nested table */
|
||||
RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_NAME, /* string */
|
||||
RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_VALUE, /* u64 */
|
||||
|
||||
/*
|
||||
* CQ adaptive moderatio (DIM)
|
||||
*/
|
||||
RDMA_NLDEV_ATTR_DEV_DIM, /* u8 */
|
||||
|
||||
/*
|
||||
* Always the end
|
||||
*/
|
||||
RDMA_NLDEV_ATTR_MAX
|
||||
};
|
||||
|
||||
/*
|
||||
* Supported counter bind modes. All modes are mutual-exclusive.
|
||||
*/
|
||||
enum rdma_nl_counter_mode {
|
||||
RDMA_COUNTER_MODE_NONE,
|
||||
|
||||
/*
|
||||
* A qp is bound with a counter automatically during initialization
|
||||
* based on the auto mode (e.g., qp type, ...)
|
||||
*/
|
||||
RDMA_COUNTER_MODE_AUTO,
|
||||
|
||||
/*
|
||||
* Which qp are bound with which counter is explicitly specified
|
||||
* by the user
|
||||
*/
|
||||
RDMA_COUNTER_MODE_MANUAL,
|
||||
|
||||
/*
|
||||
* Always the end
|
||||
*/
|
||||
RDMA_COUNTER_MODE_MAX,
|
||||
};
|
||||
|
||||
/*
|
||||
* Supported criteria in counter auto mode.
|
||||
* Currently only "qp type" is supported
|
||||
*/
|
||||
enum rdma_nl_counter_mask {
|
||||
RDMA_COUNTER_MASK_QP_TYPE = 1,
|
||||
};
|
||||
#endif /* _UAPI_RDMA_NETLINK_H */
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ enum rdma_driver_id {
|
|||
RDMA_DRIVER_HFI1,
|
||||
RDMA_DRIVER_QIB,
|
||||
RDMA_DRIVER_EFA,
|
||||
RDMA_DRIVER_SIW,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
66
include/uapi/rdma/rvt-abi.h
Normal file
66
include/uapi/rdma/rvt-abi.h
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
|
||||
|
||||
/*
|
||||
* This file contains defines, structures, etc. that are used
|
||||
* to communicate between kernel and user code.
|
||||
*/
|
||||
|
||||
#ifndef RVT_ABI_USER_H
|
||||
#define RVT_ABI_USER_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <rdma/ib_user_verbs.h>
|
||||
#ifndef RDMA_ATOMIC_UAPI
|
||||
#define RDMA_ATOMIC_UAPI(_type, _name) struct{ _type val; } _name
|
||||
#endif
|
||||
|
||||
struct rvt_wqe_sge {
|
||||
__aligned_u64 addr;
|
||||
__u32 length;
|
||||
__u32 lkey;
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure is used to contain the head pointer, tail pointer,
|
||||
* and completion queue entries as a single memory allocation so
|
||||
* it can be mmap'ed into user space.
|
||||
*/
|
||||
struct rvt_cq_wc {
|
||||
/* index of next entry to fill */
|
||||
RDMA_ATOMIC_UAPI(__u32, head);
|
||||
/* index of next ib_poll_cq() entry */
|
||||
RDMA_ATOMIC_UAPI(__u32, tail);
|
||||
|
||||
/* these are actually size ibcq.cqe + 1 */
|
||||
struct ib_uverbs_wc uqueue[];
|
||||
};
|
||||
|
||||
/*
|
||||
* Receive work request queue entry.
|
||||
* The size of the sg_list is determined when the QP (or SRQ) is created
|
||||
* and stored in qp->r_rq.max_sge (or srq->rq.max_sge).
|
||||
*/
|
||||
struct rvt_rwqe {
|
||||
__u64 wr_id;
|
||||
__u8 num_sge;
|
||||
__u8 padding[7];
|
||||
struct rvt_wqe_sge sg_list[];
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure is used to contain the head pointer, tail pointer,
|
||||
* and receive work queue entries as a single memory allocation so
|
||||
* it can be mmap'ed into user space.
|
||||
* Note that the wq array elements are variable size so you can't
|
||||
* just index into the array to get the N'th element;
|
||||
* use get_rwqe_ptr() for user space and rvt_get_rwqe_ptr()
|
||||
* for kernel space.
|
||||
*/
|
||||
struct rvt_rwq {
|
||||
/* new work requests posted to the head */
|
||||
RDMA_ATOMIC_UAPI(__u32, head);
|
||||
/* receives pull requests from here. */
|
||||
RDMA_ATOMIC_UAPI(__u32, tail);
|
||||
struct rvt_rwqe wq[];
|
||||
};
|
||||
#endif /* RVT_ABI_USER_H */
|
||||
185
include/uapi/rdma/siw-abi.h
Normal file
185
include/uapi/rdma/siw-abi.h
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
|
||||
|
||||
/* Authors: Bernard Metzler <bmt@zurich.ibm.com> */
|
||||
/* Copyright (c) 2008-2019, IBM Corporation */
|
||||
|
||||
#ifndef _SIW_USER_H
|
||||
#define _SIW_USER_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define SIW_NODE_DESC_COMMON "Software iWARP stack"
|
||||
#define SIW_ABI_VERSION 1
|
||||
#define SIW_MAX_SGE 6
|
||||
#define SIW_UOBJ_MAX_KEY 0x08FFFF
|
||||
#define SIW_INVAL_UOBJ_KEY (SIW_UOBJ_MAX_KEY + 1)
|
||||
|
||||
struct siw_uresp_create_cq {
|
||||
__u32 cq_id;
|
||||
__u32 num_cqe;
|
||||
__aligned_u64 cq_key;
|
||||
};
|
||||
|
||||
struct siw_uresp_create_qp {
|
||||
__u32 qp_id;
|
||||
__u32 num_sqe;
|
||||
__u32 num_rqe;
|
||||
__u32 pad;
|
||||
__aligned_u64 sq_key;
|
||||
__aligned_u64 rq_key;
|
||||
};
|
||||
|
||||
struct siw_ureq_reg_mr {
|
||||
__u8 stag_key;
|
||||
__u8 reserved[3];
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
struct siw_uresp_reg_mr {
|
||||
__u32 stag;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
struct siw_uresp_create_srq {
|
||||
__u32 num_rqe;
|
||||
__u32 pad;
|
||||
__aligned_u64 srq_key;
|
||||
};
|
||||
|
||||
struct siw_uresp_alloc_ctx {
|
||||
__u32 dev_id;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
enum siw_opcode {
|
||||
SIW_OP_WRITE,
|
||||
SIW_OP_READ,
|
||||
SIW_OP_READ_LOCAL_INV,
|
||||
SIW_OP_SEND,
|
||||
SIW_OP_SEND_WITH_IMM,
|
||||
SIW_OP_SEND_REMOTE_INV,
|
||||
|
||||
/* Unsupported */
|
||||
SIW_OP_FETCH_AND_ADD,
|
||||
SIW_OP_COMP_AND_SWAP,
|
||||
|
||||
SIW_OP_RECEIVE,
|
||||
/* provider internal SQE */
|
||||
SIW_OP_READ_RESPONSE,
|
||||
/*
|
||||
* below opcodes valid for
|
||||
* in-kernel clients only
|
||||
*/
|
||||
SIW_OP_INVAL_STAG,
|
||||
SIW_OP_REG_MR,
|
||||
SIW_NUM_OPCODES
|
||||
};
|
||||
|
||||
/* Keep it same as ibv_sge to allow for memcpy */
|
||||
struct siw_sge {
|
||||
__aligned_u64 laddr;
|
||||
__u32 length;
|
||||
__u32 lkey;
|
||||
};
|
||||
|
||||
/*
|
||||
* Inline data are kept within the work request itself occupying
|
||||
* the space of sge[1] .. sge[n]. Therefore, inline data cannot be
|
||||
* supported if SIW_MAX_SGE is below 2 elements.
|
||||
*/
|
||||
#define SIW_MAX_INLINE (sizeof(struct siw_sge) * (SIW_MAX_SGE - 1))
|
||||
|
||||
#if SIW_MAX_SGE < 2
|
||||
#error "SIW_MAX_SGE must be at least 2"
|
||||
#endif
|
||||
|
||||
enum siw_wqe_flags {
|
||||
SIW_WQE_VALID = 1,
|
||||
SIW_WQE_INLINE = (1 << 1),
|
||||
SIW_WQE_SIGNALLED = (1 << 2),
|
||||
SIW_WQE_SOLICITED = (1 << 3),
|
||||
SIW_WQE_READ_FENCE = (1 << 4),
|
||||
SIW_WQE_REM_INVAL = (1 << 5),
|
||||
SIW_WQE_COMPLETED = (1 << 6)
|
||||
};
|
||||
|
||||
/* Send Queue Element */
|
||||
struct siw_sqe {
|
||||
__aligned_u64 id;
|
||||
__u16 flags;
|
||||
__u8 num_sge;
|
||||
/* Contains enum siw_opcode values */
|
||||
__u8 opcode;
|
||||
__u32 rkey;
|
||||
union {
|
||||
__aligned_u64 raddr;
|
||||
__aligned_u64 base_mr;
|
||||
};
|
||||
union {
|
||||
struct siw_sge sge[SIW_MAX_SGE];
|
||||
__aligned_u64 access;
|
||||
};
|
||||
};
|
||||
|
||||
/* Receive Queue Element */
|
||||
struct siw_rqe {
|
||||
__aligned_u64 id;
|
||||
__u16 flags;
|
||||
__u8 num_sge;
|
||||
/*
|
||||
* only used by kernel driver,
|
||||
* ignored if set by user
|
||||
*/
|
||||
__u8 opcode;
|
||||
__u32 unused;
|
||||
struct siw_sge sge[SIW_MAX_SGE];
|
||||
};
|
||||
|
||||
enum siw_notify_flags {
|
||||
SIW_NOTIFY_NOT = (0),
|
||||
SIW_NOTIFY_SOLICITED = (1 << 0),
|
||||
SIW_NOTIFY_NEXT_COMPLETION = (1 << 1),
|
||||
SIW_NOTIFY_MISSED_EVENTS = (1 << 2),
|
||||
SIW_NOTIFY_ALL = SIW_NOTIFY_SOLICITED | SIW_NOTIFY_NEXT_COMPLETION |
|
||||
SIW_NOTIFY_MISSED_EVENTS
|
||||
};
|
||||
|
||||
enum siw_wc_status {
|
||||
SIW_WC_SUCCESS,
|
||||
SIW_WC_LOC_LEN_ERR,
|
||||
SIW_WC_LOC_PROT_ERR,
|
||||
SIW_WC_LOC_QP_OP_ERR,
|
||||
SIW_WC_WR_FLUSH_ERR,
|
||||
SIW_WC_BAD_RESP_ERR,
|
||||
SIW_WC_LOC_ACCESS_ERR,
|
||||
SIW_WC_REM_ACCESS_ERR,
|
||||
SIW_WC_REM_INV_REQ_ERR,
|
||||
SIW_WC_GENERAL_ERR,
|
||||
SIW_NUM_WC_STATUS
|
||||
};
|
||||
|
||||
struct siw_cqe {
|
||||
__aligned_u64 id;
|
||||
__u8 flags;
|
||||
__u8 opcode;
|
||||
__u16 status;
|
||||
__u32 bytes;
|
||||
union {
|
||||
__aligned_u64 imm_data;
|
||||
__u32 inval_stag;
|
||||
};
|
||||
/* QP number or QP pointer */
|
||||
union {
|
||||
struct ib_qp *base_qp;
|
||||
__aligned_u64 qp_id;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* Shared structure between user and kernel
|
||||
* to control CQ arming.
|
||||
*/
|
||||
struct siw_cq_ctrl {
|
||||
__aligned_u64 notify;
|
||||
};
|
||||
#endif
|
||||
Loading…
Reference in a new issue