mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 11:44:01 +08:00
RDMA/nes: Add support for MPAv2 Enhanced RDMA Negotiation
This patch adds support for Enhanced RDMA Connection Establishment (draft-ietf-storm-mpa-peer-connect-06), aka MPAv2. Details of draft can be obtained from: <http://www.ietf.org/id/draft-ietf-storm-mpa-peer-connect-06.txt> For backwards compatibility, the MPAv2 enabled driver reverts to MPAv1 if the remote node doesn't support MPAv2. Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com> Signed-off-by: Faisal Latif <Faisal.Latif@intel.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
d2fe99e86b
commit
615eb715ae
File diff suppressed because it is too large
Load Diff
@ -49,6 +49,15 @@
|
||||
#define IETF_MPA_VERSION 1
|
||||
#define IETF_MAX_PRIV_DATA_LEN 512
|
||||
#define IETF_MPA_FRAME_SIZE 20
|
||||
#define IETF_RTR_MSG_SIZE 4
|
||||
#define IETF_MPA_V2_FLAG 0x10
|
||||
|
||||
/* IETF RTR MSG Fields */
|
||||
#define IETF_PEER_TO_PEER 0x8000
|
||||
#define IETF_FLPDU_ZERO_LEN 0x4000
|
||||
#define IETF_RDMA0_WRITE 0x8000
|
||||
#define IETF_RDMA0_READ 0x4000
|
||||
#define IETF_NO_IRD_ORD 0x3FFF
|
||||
|
||||
enum ietf_mpa_flags {
|
||||
IETF_MPA_FLAGS_MARKERS = 0x80, /* receive Markers */
|
||||
@ -56,7 +65,7 @@ enum ietf_mpa_flags {
|
||||
IETF_MPA_FLAGS_REJECT = 0x20, /* Reject */
|
||||
};
|
||||
|
||||
struct ietf_mpa_frame {
|
||||
struct ietf_mpa_v1 {
|
||||
u8 key[IETF_MPA_KEY_SIZE];
|
||||
u8 flags;
|
||||
u8 rev;
|
||||
@ -66,6 +75,20 @@ struct ietf_mpa_frame {
|
||||
|
||||
#define ietf_mpa_req_resp_frame ietf_mpa_frame
|
||||
|
||||
struct ietf_rtr_msg {
|
||||
__be16 ctrl_ird;
|
||||
__be16 ctrl_ord;
|
||||
};
|
||||
|
||||
struct ietf_mpa_v2 {
|
||||
u8 key[IETF_MPA_KEY_SIZE];
|
||||
u8 flags;
|
||||
u8 rev;
|
||||
__be16 priv_data_len;
|
||||
struct ietf_rtr_msg rtr_msg;
|
||||
u8 priv_data[0];
|
||||
};
|
||||
|
||||
struct nes_v4_quad {
|
||||
u32 rsvd0;
|
||||
__le32 DstIpAdrIndex; /* Only most significant 5 bits are valid */
|
||||
@ -171,8 +194,7 @@ struct nes_timer_entry {
|
||||
|
||||
#define NES_CM_DEF_SEQ2 0x18ed5740
|
||||
#define NES_CM_DEF_LOCAL_ID2 0xb807
|
||||
#define MAX_CM_BUFFER (IETF_MPA_FRAME_SIZE + IETF_MAX_PRIV_DATA_LEN)
|
||||
|
||||
#define MAX_CM_BUFFER (IETF_MPA_FRAME_SIZE + IETF_RTR_MSG_SIZE + IETF_MAX_PRIV_DATA_LEN)
|
||||
|
||||
typedef u32 nes_addr_t;
|
||||
|
||||
@ -204,6 +226,21 @@ enum nes_cm_node_state {
|
||||
NES_CM_STATE_CLOSED
|
||||
};
|
||||
|
||||
enum mpa_frame_version {
|
||||
IETF_MPA_V1 = 1,
|
||||
IETF_MPA_V2 = 2
|
||||
};
|
||||
|
||||
enum mpa_frame_key {
|
||||
MPA_KEY_REQUEST,
|
||||
MPA_KEY_REPLY
|
||||
};
|
||||
|
||||
enum send_rdma0 {
|
||||
SEND_RDMA_READ_ZERO = 1,
|
||||
SEND_RDMA_WRITE_ZERO = 2
|
||||
};
|
||||
|
||||
enum nes_tcpip_pkt_type {
|
||||
NES_PKT_TYPE_UNKNOWN,
|
||||
NES_PKT_TYPE_SYN,
|
||||
@ -245,9 +282,9 @@ struct nes_cm_tcp_context {
|
||||
|
||||
|
||||
enum nes_cm_listener_state {
|
||||
NES_CM_LISTENER_PASSIVE_STATE=1,
|
||||
NES_CM_LISTENER_ACTIVE_STATE=2,
|
||||
NES_CM_LISTENER_EITHER_STATE=3
|
||||
NES_CM_LISTENER_PASSIVE_STATE = 1,
|
||||
NES_CM_LISTENER_ACTIVE_STATE = 2,
|
||||
NES_CM_LISTENER_EITHER_STATE = 3
|
||||
};
|
||||
|
||||
struct nes_cm_listener {
|
||||
@ -284,15 +321,19 @@ struct nes_cm_node {
|
||||
struct nes_cm_node *loopbackpartner;
|
||||
|
||||
struct nes_timer_entry *send_entry;
|
||||
|
||||
spinlock_t retrans_list_lock;
|
||||
struct nes_timer_entry *recv_entry;
|
||||
spinlock_t retrans_list_lock;
|
||||
enum send_rdma0 send_rdma0_op;
|
||||
|
||||
int send_write0;
|
||||
union {
|
||||
struct ietf_mpa_frame mpa_frame;
|
||||
struct ietf_mpa_v1 mpa_frame;
|
||||
struct ietf_mpa_v2 mpa_v2_frame;
|
||||
u8 mpa_frame_buf[MAX_CM_BUFFER];
|
||||
};
|
||||
enum mpa_frame_version mpa_frame_rev;
|
||||
u16 ird_size;
|
||||
u16 ord_size;
|
||||
|
||||
u16 mpa_frame_size;
|
||||
struct iw_cm_id *cm_id;
|
||||
struct list_head list;
|
||||
@ -399,10 +440,8 @@ struct nes_cm_ops {
|
||||
struct nes_vnic *, u16, void *,
|
||||
struct nes_cm_info *);
|
||||
int (*close)(struct nes_cm_core *, struct nes_cm_node *);
|
||||
int (*accept)(struct nes_cm_core *, struct ietf_mpa_frame *,
|
||||
struct nes_cm_node *);
|
||||
int (*reject)(struct nes_cm_core *, struct ietf_mpa_frame *,
|
||||
struct nes_cm_node *);
|
||||
int (*accept)(struct nes_cm_core *, struct nes_cm_node *);
|
||||
int (*reject)(struct nes_cm_core *, struct nes_cm_node *);
|
||||
int (*recv_pkt)(struct nes_cm_core *, struct nes_vnic *,
|
||||
struct sk_buff *);
|
||||
int (*destroy_cm_core)(struct nes_cm_core *);
|
||||
|
@ -139,7 +139,8 @@ struct nes_qp {
|
||||
struct nes_cq *nesrcq;
|
||||
struct nes_pd *nespd;
|
||||
void *cm_node; /* handle of the node this QP is associated with */
|
||||
struct ietf_mpa_frame *ietf_frame;
|
||||
void *ietf_frame;
|
||||
u8 ietf_frame_size;
|
||||
dma_addr_t ietf_frame_pbase;
|
||||
struct ib_mr *lsmm_mr;
|
||||
struct nes_hw_qp hwqp;
|
||||
|
Loading…
Reference in New Issue
Block a user