162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci/* Authors: Bernard Metzler <bmt@zurich.ibm.com> */
462306a36Sopenharmony_ci/* Copyright (c) 2008-2019, IBM Corporation */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _IWARP_H
762306a36Sopenharmony_ci#define _IWARP_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <rdma/rdma_user_cm.h> /* RDMA_MAX_PRIVATE_DATA */
1062306a36Sopenharmony_ci#include <linux/types.h>
1162306a36Sopenharmony_ci#include <asm/byteorder.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define RDMAP_VERSION 1
1462306a36Sopenharmony_ci#define DDP_VERSION 1
1562306a36Sopenharmony_ci#define MPA_REVISION_1 1
1662306a36Sopenharmony_ci#define MPA_REVISION_2 2
1762306a36Sopenharmony_ci#define MPA_MAX_PRIVDATA RDMA_MAX_PRIVATE_DATA
1862306a36Sopenharmony_ci#define MPA_KEY_REQ "MPA ID Req Frame"
1962306a36Sopenharmony_ci#define MPA_KEY_REP "MPA ID Rep Frame"
2062306a36Sopenharmony_ci#define MPA_IRD_ORD_MASK 0x3fff
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct mpa_rr_params {
2362306a36Sopenharmony_ci	__be16 bits;
2462306a36Sopenharmony_ci	__be16 pd_len;
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci/*
2862306a36Sopenharmony_ci * MPA request/response header bits & fields
2962306a36Sopenharmony_ci */
3062306a36Sopenharmony_cienum {
3162306a36Sopenharmony_ci	MPA_RR_FLAG_MARKERS = cpu_to_be16(0x8000),
3262306a36Sopenharmony_ci	MPA_RR_FLAG_CRC = cpu_to_be16(0x4000),
3362306a36Sopenharmony_ci	MPA_RR_FLAG_REJECT = cpu_to_be16(0x2000),
3462306a36Sopenharmony_ci	MPA_RR_FLAG_ENHANCED = cpu_to_be16(0x1000),
3562306a36Sopenharmony_ci	MPA_RR_FLAG_GSO_EXP = cpu_to_be16(0x0800),
3662306a36Sopenharmony_ci	MPA_RR_MASK_REVISION = cpu_to_be16(0x00ff)
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci/*
4062306a36Sopenharmony_ci * MPA request/reply header
4162306a36Sopenharmony_ci */
4262306a36Sopenharmony_cistruct mpa_rr {
4362306a36Sopenharmony_ci	__u8 key[16];
4462306a36Sopenharmony_ci	struct mpa_rr_params params;
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic inline void __mpa_rr_set_revision(__be16 *bits, u8 rev)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	*bits = (*bits & ~MPA_RR_MASK_REVISION) |
5062306a36Sopenharmony_ci		(cpu_to_be16(rev) & MPA_RR_MASK_REVISION);
5162306a36Sopenharmony_ci}
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cistatic inline u8 __mpa_rr_revision(__be16 mpa_rr_bits)
5462306a36Sopenharmony_ci{
5562306a36Sopenharmony_ci	__be16 rev = mpa_rr_bits & MPA_RR_MASK_REVISION;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	return be16_to_cpu(rev);
5862306a36Sopenharmony_ci}
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cienum mpa_v2_ctrl {
6162306a36Sopenharmony_ci	MPA_V2_PEER_TO_PEER = cpu_to_be16(0x8000),
6262306a36Sopenharmony_ci	MPA_V2_ZERO_LENGTH_RTR = cpu_to_be16(0x4000),
6362306a36Sopenharmony_ci	MPA_V2_RDMA_WRITE_RTR = cpu_to_be16(0x8000),
6462306a36Sopenharmony_ci	MPA_V2_RDMA_READ_RTR = cpu_to_be16(0x4000),
6562306a36Sopenharmony_ci	MPA_V2_RDMA_NO_RTR = cpu_to_be16(0x0000),
6662306a36Sopenharmony_ci	MPA_V2_MASK_IRD_ORD = cpu_to_be16(0x3fff)
6762306a36Sopenharmony_ci};
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cistruct mpa_v2_data {
7062306a36Sopenharmony_ci	__be16 ird;
7162306a36Sopenharmony_ci	__be16 ord;
7262306a36Sopenharmony_ci};
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_cistruct mpa_marker {
7562306a36Sopenharmony_ci	__be16 rsvd;
7662306a36Sopenharmony_ci	__be16 fpdu_hmd; /* FPDU header-marker distance (= MPA's FPDUPTR) */
7762306a36Sopenharmony_ci};
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci/*
8062306a36Sopenharmony_ci * maximum MPA trailer
8162306a36Sopenharmony_ci */
8262306a36Sopenharmony_cistruct mpa_trailer {
8362306a36Sopenharmony_ci	__u8 pad[4];
8462306a36Sopenharmony_ci	__be32 crc;
8562306a36Sopenharmony_ci};
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci#define MPA_HDR_SIZE 2
8862306a36Sopenharmony_ci#define MPA_CRC_SIZE 4
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci/*
9162306a36Sopenharmony_ci * Common portion of iWARP headers (MPA, DDP, RDMAP)
9262306a36Sopenharmony_ci * for any FPDU
9362306a36Sopenharmony_ci */
9462306a36Sopenharmony_cistruct iwarp_ctrl {
9562306a36Sopenharmony_ci	__be16 mpa_len;
9662306a36Sopenharmony_ci	__be16 ddp_rdmap_ctrl;
9762306a36Sopenharmony_ci};
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci/*
10062306a36Sopenharmony_ci * DDP/RDMAP Hdr bits & fields
10162306a36Sopenharmony_ci */
10262306a36Sopenharmony_cienum {
10362306a36Sopenharmony_ci	DDP_FLAG_TAGGED = cpu_to_be16(0x8000),
10462306a36Sopenharmony_ci	DDP_FLAG_LAST = cpu_to_be16(0x4000),
10562306a36Sopenharmony_ci	DDP_MASK_RESERVED = cpu_to_be16(0x3C00),
10662306a36Sopenharmony_ci	DDP_MASK_VERSION = cpu_to_be16(0x0300),
10762306a36Sopenharmony_ci	RDMAP_MASK_VERSION = cpu_to_be16(0x00C0),
10862306a36Sopenharmony_ci	RDMAP_MASK_RESERVED = cpu_to_be16(0x0030),
10962306a36Sopenharmony_ci	RDMAP_MASK_OPCODE = cpu_to_be16(0x000f)
11062306a36Sopenharmony_ci};
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_cistatic inline u8 __ddp_get_version(struct iwarp_ctrl *ctrl)
11362306a36Sopenharmony_ci{
11462306a36Sopenharmony_ci	return be16_to_cpu(ctrl->ddp_rdmap_ctrl & DDP_MASK_VERSION) >> 8;
11562306a36Sopenharmony_ci}
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_cistatic inline u8 __rdmap_get_version(struct iwarp_ctrl *ctrl)
11862306a36Sopenharmony_ci{
11962306a36Sopenharmony_ci	__be16 ver = ctrl->ddp_rdmap_ctrl & RDMAP_MASK_VERSION;
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	return be16_to_cpu(ver) >> 6;
12262306a36Sopenharmony_ci}
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_cistatic inline u8 __rdmap_get_opcode(struct iwarp_ctrl *ctrl)
12562306a36Sopenharmony_ci{
12662306a36Sopenharmony_ci	return be16_to_cpu(ctrl->ddp_rdmap_ctrl & RDMAP_MASK_OPCODE);
12762306a36Sopenharmony_ci}
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_cistatic inline void __rdmap_set_opcode(struct iwarp_ctrl *ctrl, u8 opcode)
13062306a36Sopenharmony_ci{
13162306a36Sopenharmony_ci	ctrl->ddp_rdmap_ctrl = (ctrl->ddp_rdmap_ctrl & ~RDMAP_MASK_OPCODE) |
13262306a36Sopenharmony_ci			       (cpu_to_be16(opcode) & RDMAP_MASK_OPCODE);
13362306a36Sopenharmony_ci}
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cistruct iwarp_rdma_write {
13662306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
13762306a36Sopenharmony_ci	__be32 sink_stag;
13862306a36Sopenharmony_ci	__be64 sink_to;
13962306a36Sopenharmony_ci};
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_cistruct iwarp_rdma_rreq {
14262306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
14362306a36Sopenharmony_ci	__be32 rsvd;
14462306a36Sopenharmony_ci	__be32 ddp_qn;
14562306a36Sopenharmony_ci	__be32 ddp_msn;
14662306a36Sopenharmony_ci	__be32 ddp_mo;
14762306a36Sopenharmony_ci	__be32 sink_stag;
14862306a36Sopenharmony_ci	__be64 sink_to;
14962306a36Sopenharmony_ci	__be32 read_size;
15062306a36Sopenharmony_ci	__be32 source_stag;
15162306a36Sopenharmony_ci	__be64 source_to;
15262306a36Sopenharmony_ci};
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_cistruct iwarp_rdma_rresp {
15562306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
15662306a36Sopenharmony_ci	__be32 sink_stag;
15762306a36Sopenharmony_ci	__be64 sink_to;
15862306a36Sopenharmony_ci};
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_cistruct iwarp_send {
16162306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
16262306a36Sopenharmony_ci	__be32 rsvd;
16362306a36Sopenharmony_ci	__be32 ddp_qn;
16462306a36Sopenharmony_ci	__be32 ddp_msn;
16562306a36Sopenharmony_ci	__be32 ddp_mo;
16662306a36Sopenharmony_ci};
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_cistruct iwarp_send_inv {
16962306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
17062306a36Sopenharmony_ci	__be32 inval_stag;
17162306a36Sopenharmony_ci	__be32 ddp_qn;
17262306a36Sopenharmony_ci	__be32 ddp_msn;
17362306a36Sopenharmony_ci	__be32 ddp_mo;
17462306a36Sopenharmony_ci};
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_cistruct iwarp_terminate {
17762306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
17862306a36Sopenharmony_ci	__be32 rsvd;
17962306a36Sopenharmony_ci	__be32 ddp_qn;
18062306a36Sopenharmony_ci	__be32 ddp_msn;
18162306a36Sopenharmony_ci	__be32 ddp_mo;
18262306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
18362306a36Sopenharmony_ci	__be32 layer : 4;
18462306a36Sopenharmony_ci	__be32 etype : 4;
18562306a36Sopenharmony_ci	__be32 ecode : 8;
18662306a36Sopenharmony_ci	__be32 flag_m : 1;
18762306a36Sopenharmony_ci	__be32 flag_d : 1;
18862306a36Sopenharmony_ci	__be32 flag_r : 1;
18962306a36Sopenharmony_ci	__be32 reserved : 13;
19062306a36Sopenharmony_ci#elif defined(__BIG_ENDIAN_BITFIELD)
19162306a36Sopenharmony_ci	__be32 reserved : 13;
19262306a36Sopenharmony_ci	__be32 flag_r : 1;
19362306a36Sopenharmony_ci	__be32 flag_d : 1;
19462306a36Sopenharmony_ci	__be32 flag_m : 1;
19562306a36Sopenharmony_ci	__be32 ecode : 8;
19662306a36Sopenharmony_ci	__be32 etype : 4;
19762306a36Sopenharmony_ci	__be32 layer : 4;
19862306a36Sopenharmony_ci#else
19962306a36Sopenharmony_ci#error "undefined byte order"
20062306a36Sopenharmony_ci#endif
20162306a36Sopenharmony_ci};
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci/*
20462306a36Sopenharmony_ci * Terminate Hdr bits & fields
20562306a36Sopenharmony_ci */
20662306a36Sopenharmony_cienum {
20762306a36Sopenharmony_ci	TERM_MASK_LAYER = cpu_to_be32(0xf0000000),
20862306a36Sopenharmony_ci	TERM_MASK_ETYPE = cpu_to_be32(0x0f000000),
20962306a36Sopenharmony_ci	TERM_MASK_ECODE = cpu_to_be32(0x00ff0000),
21062306a36Sopenharmony_ci	TERM_FLAG_M = cpu_to_be32(0x00008000),
21162306a36Sopenharmony_ci	TERM_FLAG_D = cpu_to_be32(0x00004000),
21262306a36Sopenharmony_ci	TERM_FLAG_R = cpu_to_be32(0x00002000),
21362306a36Sopenharmony_ci	TERM_MASK_RESVD = cpu_to_be32(0x00001fff)
21462306a36Sopenharmony_ci};
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_cistatic inline u8 __rdmap_term_layer(struct iwarp_terminate *term)
21762306a36Sopenharmony_ci{
21862306a36Sopenharmony_ci	return term->layer;
21962306a36Sopenharmony_ci}
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_cistatic inline void __rdmap_term_set_layer(struct iwarp_terminate *term,
22262306a36Sopenharmony_ci					  u8 layer)
22362306a36Sopenharmony_ci{
22462306a36Sopenharmony_ci	term->layer = layer & 0xf;
22562306a36Sopenharmony_ci}
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_cistatic inline u8 __rdmap_term_etype(struct iwarp_terminate *term)
22862306a36Sopenharmony_ci{
22962306a36Sopenharmony_ci	return term->etype;
23062306a36Sopenharmony_ci}
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_cistatic inline void __rdmap_term_set_etype(struct iwarp_terminate *term,
23362306a36Sopenharmony_ci					  u8 etype)
23462306a36Sopenharmony_ci{
23562306a36Sopenharmony_ci	term->etype = etype & 0xf;
23662306a36Sopenharmony_ci}
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_cistatic inline u8 __rdmap_term_ecode(struct iwarp_terminate *term)
23962306a36Sopenharmony_ci{
24062306a36Sopenharmony_ci	return term->ecode;
24162306a36Sopenharmony_ci}
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_cistatic inline void __rdmap_term_set_ecode(struct iwarp_terminate *term,
24462306a36Sopenharmony_ci					  u8 ecode)
24562306a36Sopenharmony_ci{
24662306a36Sopenharmony_ci	term->ecode = ecode;
24762306a36Sopenharmony_ci}
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci/*
25062306a36Sopenharmony_ci * Common portion of iWARP headers (MPA, DDP, RDMAP)
25162306a36Sopenharmony_ci * for an FPDU carrying an untagged DDP segment
25262306a36Sopenharmony_ci */
25362306a36Sopenharmony_cistruct iwarp_ctrl_untagged {
25462306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
25562306a36Sopenharmony_ci	__be32 rsvd;
25662306a36Sopenharmony_ci	__be32 ddp_qn;
25762306a36Sopenharmony_ci	__be32 ddp_msn;
25862306a36Sopenharmony_ci	__be32 ddp_mo;
25962306a36Sopenharmony_ci};
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci/*
26262306a36Sopenharmony_ci * Common portion of iWARP headers (MPA, DDP, RDMAP)
26362306a36Sopenharmony_ci * for an FPDU carrying a tagged DDP segment
26462306a36Sopenharmony_ci */
26562306a36Sopenharmony_cistruct iwarp_ctrl_tagged {
26662306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
26762306a36Sopenharmony_ci	__be32 ddp_stag;
26862306a36Sopenharmony_ci	__be64 ddp_to;
26962306a36Sopenharmony_ci};
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ciunion iwarp_hdr {
27262306a36Sopenharmony_ci	struct iwarp_ctrl ctrl;
27362306a36Sopenharmony_ci	struct iwarp_ctrl_untagged c_untagged;
27462306a36Sopenharmony_ci	struct iwarp_ctrl_tagged c_tagged;
27562306a36Sopenharmony_ci	struct iwarp_rdma_write rwrite;
27662306a36Sopenharmony_ci	struct iwarp_rdma_rreq rreq;
27762306a36Sopenharmony_ci	struct iwarp_rdma_rresp rresp;
27862306a36Sopenharmony_ci	struct iwarp_terminate terminate;
27962306a36Sopenharmony_ci	struct iwarp_send send;
28062306a36Sopenharmony_ci	struct iwarp_send_inv send_inv;
28162306a36Sopenharmony_ci};
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_cienum term_elayer {
28462306a36Sopenharmony_ci	TERM_ERROR_LAYER_RDMAP = 0x00,
28562306a36Sopenharmony_ci	TERM_ERROR_LAYER_DDP = 0x01,
28662306a36Sopenharmony_ci	TERM_ERROR_LAYER_LLP = 0x02 /* eg., MPA */
28762306a36Sopenharmony_ci};
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_cienum ddp_etype {
29062306a36Sopenharmony_ci	DDP_ETYPE_CATASTROPHIC = 0x0,
29162306a36Sopenharmony_ci	DDP_ETYPE_TAGGED_BUF = 0x1,
29262306a36Sopenharmony_ci	DDP_ETYPE_UNTAGGED_BUF = 0x2,
29362306a36Sopenharmony_ci	DDP_ETYPE_RSVD = 0x3
29462306a36Sopenharmony_ci};
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_cienum ddp_ecode {
29762306a36Sopenharmony_ci	/* unspecified, set to zero */
29862306a36Sopenharmony_ci	DDP_ECODE_CATASTROPHIC = 0x00,
29962306a36Sopenharmony_ci	/* Tagged Buffer Errors */
30062306a36Sopenharmony_ci	DDP_ECODE_T_INVALID_STAG = 0x00,
30162306a36Sopenharmony_ci	DDP_ECODE_T_BASE_BOUNDS = 0x01,
30262306a36Sopenharmony_ci	DDP_ECODE_T_STAG_NOT_ASSOC = 0x02,
30362306a36Sopenharmony_ci	DDP_ECODE_T_TO_WRAP = 0x03,
30462306a36Sopenharmony_ci	DDP_ECODE_T_VERSION = 0x04,
30562306a36Sopenharmony_ci	/* Untagged Buffer Errors */
30662306a36Sopenharmony_ci	DDP_ECODE_UT_INVALID_QN = 0x01,
30762306a36Sopenharmony_ci	DDP_ECODE_UT_INVALID_MSN_NOBUF = 0x02,
30862306a36Sopenharmony_ci	DDP_ECODE_UT_INVALID_MSN_RANGE = 0x03,
30962306a36Sopenharmony_ci	DDP_ECODE_UT_INVALID_MO = 0x04,
31062306a36Sopenharmony_ci	DDP_ECODE_UT_MSG_TOOLONG = 0x05,
31162306a36Sopenharmony_ci	DDP_ECODE_UT_VERSION = 0x06
31262306a36Sopenharmony_ci};
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_cienum rdmap_untagged_qn {
31562306a36Sopenharmony_ci	RDMAP_UNTAGGED_QN_SEND = 0,
31662306a36Sopenharmony_ci	RDMAP_UNTAGGED_QN_RDMA_READ = 1,
31762306a36Sopenharmony_ci	RDMAP_UNTAGGED_QN_TERMINATE = 2,
31862306a36Sopenharmony_ci	RDMAP_UNTAGGED_QN_COUNT = 3
31962306a36Sopenharmony_ci};
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_cienum rdmap_etype {
32262306a36Sopenharmony_ci	RDMAP_ETYPE_CATASTROPHIC = 0x0,
32362306a36Sopenharmony_ci	RDMAP_ETYPE_REMOTE_PROTECTION = 0x1,
32462306a36Sopenharmony_ci	RDMAP_ETYPE_REMOTE_OPERATION = 0x2
32562306a36Sopenharmony_ci};
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_cienum rdmap_ecode {
32862306a36Sopenharmony_ci	RDMAP_ECODE_INVALID_STAG = 0x00,
32962306a36Sopenharmony_ci	RDMAP_ECODE_BASE_BOUNDS = 0x01,
33062306a36Sopenharmony_ci	RDMAP_ECODE_ACCESS_RIGHTS = 0x02,
33162306a36Sopenharmony_ci	RDMAP_ECODE_STAG_NOT_ASSOC = 0x03,
33262306a36Sopenharmony_ci	RDMAP_ECODE_TO_WRAP = 0x04,
33362306a36Sopenharmony_ci	RDMAP_ECODE_VERSION = 0x05,
33462306a36Sopenharmony_ci	RDMAP_ECODE_OPCODE = 0x06,
33562306a36Sopenharmony_ci	RDMAP_ECODE_CATASTROPHIC_STREAM = 0x07,
33662306a36Sopenharmony_ci	RDMAP_ECODE_CATASTROPHIC_GLOBAL = 0x08,
33762306a36Sopenharmony_ci	RDMAP_ECODE_CANNOT_INVALIDATE = 0x09,
33862306a36Sopenharmony_ci	RDMAP_ECODE_UNSPECIFIED = 0xff
33962306a36Sopenharmony_ci};
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_cienum llp_ecode {
34262306a36Sopenharmony_ci	LLP_ECODE_TCP_STREAM_LOST = 0x01, /* How to transfer this ?? */
34362306a36Sopenharmony_ci	LLP_ECODE_RECEIVED_CRC = 0x02,
34462306a36Sopenharmony_ci	LLP_ECODE_FPDU_START = 0x03,
34562306a36Sopenharmony_ci	LLP_ECODE_INVALID_REQ_RESP = 0x04,
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci	/* Errors for Enhanced Connection Establishment only */
34862306a36Sopenharmony_ci	LLP_ECODE_LOCAL_CATASTROPHIC = 0x05,
34962306a36Sopenharmony_ci	LLP_ECODE_INSUFFICIENT_IRD = 0x06,
35062306a36Sopenharmony_ci	LLP_ECODE_NO_MATCHING_RTR = 0x07
35162306a36Sopenharmony_ci};
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_cienum llp_etype { LLP_ETYPE_MPA = 0x00 };
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_cienum rdma_opcode {
35662306a36Sopenharmony_ci	RDMAP_RDMA_WRITE = 0x0,
35762306a36Sopenharmony_ci	RDMAP_RDMA_READ_REQ = 0x1,
35862306a36Sopenharmony_ci	RDMAP_RDMA_READ_RESP = 0x2,
35962306a36Sopenharmony_ci	RDMAP_SEND = 0x3,
36062306a36Sopenharmony_ci	RDMAP_SEND_INVAL = 0x4,
36162306a36Sopenharmony_ci	RDMAP_SEND_SE = 0x5,
36262306a36Sopenharmony_ci	RDMAP_SEND_SE_INVAL = 0x6,
36362306a36Sopenharmony_ci	RDMAP_TERMINATE = 0x7,
36462306a36Sopenharmony_ci	RDMAP_NOT_SUPPORTED = RDMAP_TERMINATE + 1
36562306a36Sopenharmony_ci};
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci#endif
368