18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */ 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci/* Authors: Bernard Metzler <bmt@zurich.ibm.com> */ 48c2ecf20Sopenharmony_ci/* Copyright (c) 2008-2019, IBM Corporation */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _IWARP_H 78c2ecf20Sopenharmony_ci#define _IWARP_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <rdma/rdma_user_cm.h> /* RDMA_MAX_PRIVATE_DATA */ 108c2ecf20Sopenharmony_ci#include <linux/types.h> 118c2ecf20Sopenharmony_ci#include <asm/byteorder.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#define RDMAP_VERSION 1 148c2ecf20Sopenharmony_ci#define DDP_VERSION 1 158c2ecf20Sopenharmony_ci#define MPA_REVISION_1 1 168c2ecf20Sopenharmony_ci#define MPA_REVISION_2 2 178c2ecf20Sopenharmony_ci#define MPA_MAX_PRIVDATA RDMA_MAX_PRIVATE_DATA 188c2ecf20Sopenharmony_ci#define MPA_KEY_REQ "MPA ID Req Frame" 198c2ecf20Sopenharmony_ci#define MPA_KEY_REP "MPA ID Rep Frame" 208c2ecf20Sopenharmony_ci#define MPA_IRD_ORD_MASK 0x3fff 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct mpa_rr_params { 238c2ecf20Sopenharmony_ci __be16 bits; 248c2ecf20Sopenharmony_ci __be16 pd_len; 258c2ecf20Sopenharmony_ci}; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci/* 288c2ecf20Sopenharmony_ci * MPA request/response header bits & fields 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_cienum { 318c2ecf20Sopenharmony_ci MPA_RR_FLAG_MARKERS = cpu_to_be16(0x8000), 328c2ecf20Sopenharmony_ci MPA_RR_FLAG_CRC = cpu_to_be16(0x4000), 338c2ecf20Sopenharmony_ci MPA_RR_FLAG_REJECT = cpu_to_be16(0x2000), 348c2ecf20Sopenharmony_ci MPA_RR_FLAG_ENHANCED = cpu_to_be16(0x1000), 358c2ecf20Sopenharmony_ci MPA_RR_FLAG_GSO_EXP = cpu_to_be16(0x0800), 368c2ecf20Sopenharmony_ci MPA_RR_MASK_REVISION = cpu_to_be16(0x00ff) 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci/* 408c2ecf20Sopenharmony_ci * MPA request/reply header 418c2ecf20Sopenharmony_ci */ 428c2ecf20Sopenharmony_cistruct mpa_rr { 438c2ecf20Sopenharmony_ci __u8 key[16]; 448c2ecf20Sopenharmony_ci struct mpa_rr_params params; 458c2ecf20Sopenharmony_ci}; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic inline void __mpa_rr_set_revision(__be16 *bits, u8 rev) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci *bits = (*bits & ~MPA_RR_MASK_REVISION) | 508c2ecf20Sopenharmony_ci (cpu_to_be16(rev) & MPA_RR_MASK_REVISION); 518c2ecf20Sopenharmony_ci} 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistatic inline u8 __mpa_rr_revision(__be16 mpa_rr_bits) 548c2ecf20Sopenharmony_ci{ 558c2ecf20Sopenharmony_ci __be16 rev = mpa_rr_bits & MPA_RR_MASK_REVISION; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci return be16_to_cpu(rev); 588c2ecf20Sopenharmony_ci} 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_cienum mpa_v2_ctrl { 618c2ecf20Sopenharmony_ci MPA_V2_PEER_TO_PEER = cpu_to_be16(0x8000), 628c2ecf20Sopenharmony_ci MPA_V2_ZERO_LENGTH_RTR = cpu_to_be16(0x4000), 638c2ecf20Sopenharmony_ci MPA_V2_RDMA_WRITE_RTR = cpu_to_be16(0x8000), 648c2ecf20Sopenharmony_ci MPA_V2_RDMA_READ_RTR = cpu_to_be16(0x4000), 658c2ecf20Sopenharmony_ci MPA_V2_RDMA_NO_RTR = cpu_to_be16(0x0000), 668c2ecf20Sopenharmony_ci MPA_V2_MASK_IRD_ORD = cpu_to_be16(0x3fff) 678c2ecf20Sopenharmony_ci}; 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_cistruct mpa_v2_data { 708c2ecf20Sopenharmony_ci __be16 ird; 718c2ecf20Sopenharmony_ci __be16 ord; 728c2ecf20Sopenharmony_ci}; 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_cistruct mpa_marker { 758c2ecf20Sopenharmony_ci __be16 rsvd; 768c2ecf20Sopenharmony_ci __be16 fpdu_hmd; /* FPDU header-marker distance (= MPA's FPDUPTR) */ 778c2ecf20Sopenharmony_ci}; 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci/* 808c2ecf20Sopenharmony_ci * maximum MPA trailer 818c2ecf20Sopenharmony_ci */ 828c2ecf20Sopenharmony_cistruct mpa_trailer { 838c2ecf20Sopenharmony_ci __u8 pad[4]; 848c2ecf20Sopenharmony_ci __be32 crc; 858c2ecf20Sopenharmony_ci}; 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci#define MPA_HDR_SIZE 2 888c2ecf20Sopenharmony_ci#define MPA_CRC_SIZE 4 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci/* 918c2ecf20Sopenharmony_ci * Common portion of iWARP headers (MPA, DDP, RDMAP) 928c2ecf20Sopenharmony_ci * for any FPDU 938c2ecf20Sopenharmony_ci */ 948c2ecf20Sopenharmony_cistruct iwarp_ctrl { 958c2ecf20Sopenharmony_ci __be16 mpa_len; 968c2ecf20Sopenharmony_ci __be16 ddp_rdmap_ctrl; 978c2ecf20Sopenharmony_ci}; 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci/* 1008c2ecf20Sopenharmony_ci * DDP/RDMAP Hdr bits & fields 1018c2ecf20Sopenharmony_ci */ 1028c2ecf20Sopenharmony_cienum { 1038c2ecf20Sopenharmony_ci DDP_FLAG_TAGGED = cpu_to_be16(0x8000), 1048c2ecf20Sopenharmony_ci DDP_FLAG_LAST = cpu_to_be16(0x4000), 1058c2ecf20Sopenharmony_ci DDP_MASK_RESERVED = cpu_to_be16(0x3C00), 1068c2ecf20Sopenharmony_ci DDP_MASK_VERSION = cpu_to_be16(0x0300), 1078c2ecf20Sopenharmony_ci RDMAP_MASK_VERSION = cpu_to_be16(0x00C0), 1088c2ecf20Sopenharmony_ci RDMAP_MASK_RESERVED = cpu_to_be16(0x0030), 1098c2ecf20Sopenharmony_ci RDMAP_MASK_OPCODE = cpu_to_be16(0x000f) 1108c2ecf20Sopenharmony_ci}; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_cistatic inline u8 __ddp_get_version(struct iwarp_ctrl *ctrl) 1138c2ecf20Sopenharmony_ci{ 1148c2ecf20Sopenharmony_ci return be16_to_cpu(ctrl->ddp_rdmap_ctrl & DDP_MASK_VERSION) >> 8; 1158c2ecf20Sopenharmony_ci} 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_cistatic inline void __ddp_set_version(struct iwarp_ctrl *ctrl, u8 version) 1188c2ecf20Sopenharmony_ci{ 1198c2ecf20Sopenharmony_ci ctrl->ddp_rdmap_ctrl = 1208c2ecf20Sopenharmony_ci (ctrl->ddp_rdmap_ctrl & ~DDP_MASK_VERSION) | 1218c2ecf20Sopenharmony_ci (cpu_to_be16((u16)version << 8) & DDP_MASK_VERSION); 1228c2ecf20Sopenharmony_ci} 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_cistatic inline u8 __rdmap_get_version(struct iwarp_ctrl *ctrl) 1258c2ecf20Sopenharmony_ci{ 1268c2ecf20Sopenharmony_ci __be16 ver = ctrl->ddp_rdmap_ctrl & RDMAP_MASK_VERSION; 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_ci return be16_to_cpu(ver) >> 6; 1298c2ecf20Sopenharmony_ci} 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_cistatic inline void __rdmap_set_version(struct iwarp_ctrl *ctrl, u8 version) 1328c2ecf20Sopenharmony_ci{ 1338c2ecf20Sopenharmony_ci ctrl->ddp_rdmap_ctrl = (ctrl->ddp_rdmap_ctrl & ~RDMAP_MASK_VERSION) | 1348c2ecf20Sopenharmony_ci (cpu_to_be16(version << 6) & RDMAP_MASK_VERSION); 1358c2ecf20Sopenharmony_ci} 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_cistatic inline u8 __rdmap_get_opcode(struct iwarp_ctrl *ctrl) 1388c2ecf20Sopenharmony_ci{ 1398c2ecf20Sopenharmony_ci return be16_to_cpu(ctrl->ddp_rdmap_ctrl & RDMAP_MASK_OPCODE); 1408c2ecf20Sopenharmony_ci} 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_cistatic inline void __rdmap_set_opcode(struct iwarp_ctrl *ctrl, u8 opcode) 1438c2ecf20Sopenharmony_ci{ 1448c2ecf20Sopenharmony_ci ctrl->ddp_rdmap_ctrl = (ctrl->ddp_rdmap_ctrl & ~RDMAP_MASK_OPCODE) | 1458c2ecf20Sopenharmony_ci (cpu_to_be16(opcode) & RDMAP_MASK_OPCODE); 1468c2ecf20Sopenharmony_ci} 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_cistruct iwarp_rdma_write { 1498c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 1508c2ecf20Sopenharmony_ci __be32 sink_stag; 1518c2ecf20Sopenharmony_ci __be64 sink_to; 1528c2ecf20Sopenharmony_ci}; 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_cistruct iwarp_rdma_rreq { 1558c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 1568c2ecf20Sopenharmony_ci __be32 rsvd; 1578c2ecf20Sopenharmony_ci __be32 ddp_qn; 1588c2ecf20Sopenharmony_ci __be32 ddp_msn; 1598c2ecf20Sopenharmony_ci __be32 ddp_mo; 1608c2ecf20Sopenharmony_ci __be32 sink_stag; 1618c2ecf20Sopenharmony_ci __be64 sink_to; 1628c2ecf20Sopenharmony_ci __be32 read_size; 1638c2ecf20Sopenharmony_ci __be32 source_stag; 1648c2ecf20Sopenharmony_ci __be64 source_to; 1658c2ecf20Sopenharmony_ci}; 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_cistruct iwarp_rdma_rresp { 1688c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 1698c2ecf20Sopenharmony_ci __be32 sink_stag; 1708c2ecf20Sopenharmony_ci __be64 sink_to; 1718c2ecf20Sopenharmony_ci}; 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_cistruct iwarp_send { 1748c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 1758c2ecf20Sopenharmony_ci __be32 rsvd; 1768c2ecf20Sopenharmony_ci __be32 ddp_qn; 1778c2ecf20Sopenharmony_ci __be32 ddp_msn; 1788c2ecf20Sopenharmony_ci __be32 ddp_mo; 1798c2ecf20Sopenharmony_ci}; 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_cistruct iwarp_send_inv { 1828c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 1838c2ecf20Sopenharmony_ci __be32 inval_stag; 1848c2ecf20Sopenharmony_ci __be32 ddp_qn; 1858c2ecf20Sopenharmony_ci __be32 ddp_msn; 1868c2ecf20Sopenharmony_ci __be32 ddp_mo; 1878c2ecf20Sopenharmony_ci}; 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_cistruct iwarp_terminate { 1908c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 1918c2ecf20Sopenharmony_ci __be32 rsvd; 1928c2ecf20Sopenharmony_ci __be32 ddp_qn; 1938c2ecf20Sopenharmony_ci __be32 ddp_msn; 1948c2ecf20Sopenharmony_ci __be32 ddp_mo; 1958c2ecf20Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD) 1968c2ecf20Sopenharmony_ci __be32 layer : 4; 1978c2ecf20Sopenharmony_ci __be32 etype : 4; 1988c2ecf20Sopenharmony_ci __be32 ecode : 8; 1998c2ecf20Sopenharmony_ci __be32 flag_m : 1; 2008c2ecf20Sopenharmony_ci __be32 flag_d : 1; 2018c2ecf20Sopenharmony_ci __be32 flag_r : 1; 2028c2ecf20Sopenharmony_ci __be32 reserved : 13; 2038c2ecf20Sopenharmony_ci#elif defined(__BIG_ENDIAN_BITFIELD) 2048c2ecf20Sopenharmony_ci __be32 reserved : 13; 2058c2ecf20Sopenharmony_ci __be32 flag_r : 1; 2068c2ecf20Sopenharmony_ci __be32 flag_d : 1; 2078c2ecf20Sopenharmony_ci __be32 flag_m : 1; 2088c2ecf20Sopenharmony_ci __be32 ecode : 8; 2098c2ecf20Sopenharmony_ci __be32 etype : 4; 2108c2ecf20Sopenharmony_ci __be32 layer : 4; 2118c2ecf20Sopenharmony_ci#else 2128c2ecf20Sopenharmony_ci#error "undefined byte order" 2138c2ecf20Sopenharmony_ci#endif 2148c2ecf20Sopenharmony_ci}; 2158c2ecf20Sopenharmony_ci 2168c2ecf20Sopenharmony_ci/* 2178c2ecf20Sopenharmony_ci * Terminate Hdr bits & fields 2188c2ecf20Sopenharmony_ci */ 2198c2ecf20Sopenharmony_cienum { 2208c2ecf20Sopenharmony_ci TERM_MASK_LAYER = cpu_to_be32(0xf0000000), 2218c2ecf20Sopenharmony_ci TERM_MASK_ETYPE = cpu_to_be32(0x0f000000), 2228c2ecf20Sopenharmony_ci TERM_MASK_ECODE = cpu_to_be32(0x00ff0000), 2238c2ecf20Sopenharmony_ci TERM_FLAG_M = cpu_to_be32(0x00008000), 2248c2ecf20Sopenharmony_ci TERM_FLAG_D = cpu_to_be32(0x00004000), 2258c2ecf20Sopenharmony_ci TERM_FLAG_R = cpu_to_be32(0x00002000), 2268c2ecf20Sopenharmony_ci TERM_MASK_RESVD = cpu_to_be32(0x00001fff) 2278c2ecf20Sopenharmony_ci}; 2288c2ecf20Sopenharmony_ci 2298c2ecf20Sopenharmony_cistatic inline u8 __rdmap_term_layer(struct iwarp_terminate *term) 2308c2ecf20Sopenharmony_ci{ 2318c2ecf20Sopenharmony_ci return term->layer; 2328c2ecf20Sopenharmony_ci} 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_cistatic inline void __rdmap_term_set_layer(struct iwarp_terminate *term, 2358c2ecf20Sopenharmony_ci u8 layer) 2368c2ecf20Sopenharmony_ci{ 2378c2ecf20Sopenharmony_ci term->layer = layer & 0xf; 2388c2ecf20Sopenharmony_ci} 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_cistatic inline u8 __rdmap_term_etype(struct iwarp_terminate *term) 2418c2ecf20Sopenharmony_ci{ 2428c2ecf20Sopenharmony_ci return term->etype; 2438c2ecf20Sopenharmony_ci} 2448c2ecf20Sopenharmony_ci 2458c2ecf20Sopenharmony_cistatic inline void __rdmap_term_set_etype(struct iwarp_terminate *term, 2468c2ecf20Sopenharmony_ci u8 etype) 2478c2ecf20Sopenharmony_ci{ 2488c2ecf20Sopenharmony_ci term->etype = etype & 0xf; 2498c2ecf20Sopenharmony_ci} 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_cistatic inline u8 __rdmap_term_ecode(struct iwarp_terminate *term) 2528c2ecf20Sopenharmony_ci{ 2538c2ecf20Sopenharmony_ci return term->ecode; 2548c2ecf20Sopenharmony_ci} 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_cistatic inline void __rdmap_term_set_ecode(struct iwarp_terminate *term, 2578c2ecf20Sopenharmony_ci u8 ecode) 2588c2ecf20Sopenharmony_ci{ 2598c2ecf20Sopenharmony_ci term->ecode = ecode; 2608c2ecf20Sopenharmony_ci} 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_ci/* 2638c2ecf20Sopenharmony_ci * Common portion of iWARP headers (MPA, DDP, RDMAP) 2648c2ecf20Sopenharmony_ci * for an FPDU carrying an untagged DDP segment 2658c2ecf20Sopenharmony_ci */ 2668c2ecf20Sopenharmony_cistruct iwarp_ctrl_untagged { 2678c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 2688c2ecf20Sopenharmony_ci __be32 rsvd; 2698c2ecf20Sopenharmony_ci __be32 ddp_qn; 2708c2ecf20Sopenharmony_ci __be32 ddp_msn; 2718c2ecf20Sopenharmony_ci __be32 ddp_mo; 2728c2ecf20Sopenharmony_ci}; 2738c2ecf20Sopenharmony_ci 2748c2ecf20Sopenharmony_ci/* 2758c2ecf20Sopenharmony_ci * Common portion of iWARP headers (MPA, DDP, RDMAP) 2768c2ecf20Sopenharmony_ci * for an FPDU carrying a tagged DDP segment 2778c2ecf20Sopenharmony_ci */ 2788c2ecf20Sopenharmony_cistruct iwarp_ctrl_tagged { 2798c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 2808c2ecf20Sopenharmony_ci __be32 ddp_stag; 2818c2ecf20Sopenharmony_ci __be64 ddp_to; 2828c2ecf20Sopenharmony_ci}; 2838c2ecf20Sopenharmony_ci 2848c2ecf20Sopenharmony_ciunion iwarp_hdr { 2858c2ecf20Sopenharmony_ci struct iwarp_ctrl ctrl; 2868c2ecf20Sopenharmony_ci struct iwarp_ctrl_untagged c_untagged; 2878c2ecf20Sopenharmony_ci struct iwarp_ctrl_tagged c_tagged; 2888c2ecf20Sopenharmony_ci struct iwarp_rdma_write rwrite; 2898c2ecf20Sopenharmony_ci struct iwarp_rdma_rreq rreq; 2908c2ecf20Sopenharmony_ci struct iwarp_rdma_rresp rresp; 2918c2ecf20Sopenharmony_ci struct iwarp_terminate terminate; 2928c2ecf20Sopenharmony_ci struct iwarp_send send; 2938c2ecf20Sopenharmony_ci struct iwarp_send_inv send_inv; 2948c2ecf20Sopenharmony_ci}; 2958c2ecf20Sopenharmony_ci 2968c2ecf20Sopenharmony_cienum term_elayer { 2978c2ecf20Sopenharmony_ci TERM_ERROR_LAYER_RDMAP = 0x00, 2988c2ecf20Sopenharmony_ci TERM_ERROR_LAYER_DDP = 0x01, 2998c2ecf20Sopenharmony_ci TERM_ERROR_LAYER_LLP = 0x02 /* eg., MPA */ 3008c2ecf20Sopenharmony_ci}; 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_cienum ddp_etype { 3038c2ecf20Sopenharmony_ci DDP_ETYPE_CATASTROPHIC = 0x0, 3048c2ecf20Sopenharmony_ci DDP_ETYPE_TAGGED_BUF = 0x1, 3058c2ecf20Sopenharmony_ci DDP_ETYPE_UNTAGGED_BUF = 0x2, 3068c2ecf20Sopenharmony_ci DDP_ETYPE_RSVD = 0x3 3078c2ecf20Sopenharmony_ci}; 3088c2ecf20Sopenharmony_ci 3098c2ecf20Sopenharmony_cienum ddp_ecode { 3108c2ecf20Sopenharmony_ci /* unspecified, set to zero */ 3118c2ecf20Sopenharmony_ci DDP_ECODE_CATASTROPHIC = 0x00, 3128c2ecf20Sopenharmony_ci /* Tagged Buffer Errors */ 3138c2ecf20Sopenharmony_ci DDP_ECODE_T_INVALID_STAG = 0x00, 3148c2ecf20Sopenharmony_ci DDP_ECODE_T_BASE_BOUNDS = 0x01, 3158c2ecf20Sopenharmony_ci DDP_ECODE_T_STAG_NOT_ASSOC = 0x02, 3168c2ecf20Sopenharmony_ci DDP_ECODE_T_TO_WRAP = 0x03, 3178c2ecf20Sopenharmony_ci DDP_ECODE_T_VERSION = 0x04, 3188c2ecf20Sopenharmony_ci /* Untagged Buffer Errors */ 3198c2ecf20Sopenharmony_ci DDP_ECODE_UT_INVALID_QN = 0x01, 3208c2ecf20Sopenharmony_ci DDP_ECODE_UT_INVALID_MSN_NOBUF = 0x02, 3218c2ecf20Sopenharmony_ci DDP_ECODE_UT_INVALID_MSN_RANGE = 0x03, 3228c2ecf20Sopenharmony_ci DDP_ECODE_UT_INVALID_MO = 0x04, 3238c2ecf20Sopenharmony_ci DDP_ECODE_UT_MSG_TOOLONG = 0x05, 3248c2ecf20Sopenharmony_ci DDP_ECODE_UT_VERSION = 0x06 3258c2ecf20Sopenharmony_ci}; 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_cienum rdmap_untagged_qn { 3288c2ecf20Sopenharmony_ci RDMAP_UNTAGGED_QN_SEND = 0, 3298c2ecf20Sopenharmony_ci RDMAP_UNTAGGED_QN_RDMA_READ = 1, 3308c2ecf20Sopenharmony_ci RDMAP_UNTAGGED_QN_TERMINATE = 2, 3318c2ecf20Sopenharmony_ci RDMAP_UNTAGGED_QN_COUNT = 3 3328c2ecf20Sopenharmony_ci}; 3338c2ecf20Sopenharmony_ci 3348c2ecf20Sopenharmony_cienum rdmap_etype { 3358c2ecf20Sopenharmony_ci RDMAP_ETYPE_CATASTROPHIC = 0x0, 3368c2ecf20Sopenharmony_ci RDMAP_ETYPE_REMOTE_PROTECTION = 0x1, 3378c2ecf20Sopenharmony_ci RDMAP_ETYPE_REMOTE_OPERATION = 0x2 3388c2ecf20Sopenharmony_ci}; 3398c2ecf20Sopenharmony_ci 3408c2ecf20Sopenharmony_cienum rdmap_ecode { 3418c2ecf20Sopenharmony_ci RDMAP_ECODE_INVALID_STAG = 0x00, 3428c2ecf20Sopenharmony_ci RDMAP_ECODE_BASE_BOUNDS = 0x01, 3438c2ecf20Sopenharmony_ci RDMAP_ECODE_ACCESS_RIGHTS = 0x02, 3448c2ecf20Sopenharmony_ci RDMAP_ECODE_STAG_NOT_ASSOC = 0x03, 3458c2ecf20Sopenharmony_ci RDMAP_ECODE_TO_WRAP = 0x04, 3468c2ecf20Sopenharmony_ci RDMAP_ECODE_VERSION = 0x05, 3478c2ecf20Sopenharmony_ci RDMAP_ECODE_OPCODE = 0x06, 3488c2ecf20Sopenharmony_ci RDMAP_ECODE_CATASTROPHIC_STREAM = 0x07, 3498c2ecf20Sopenharmony_ci RDMAP_ECODE_CATASTROPHIC_GLOBAL = 0x08, 3508c2ecf20Sopenharmony_ci RDMAP_ECODE_CANNOT_INVALIDATE = 0x09, 3518c2ecf20Sopenharmony_ci RDMAP_ECODE_UNSPECIFIED = 0xff 3528c2ecf20Sopenharmony_ci}; 3538c2ecf20Sopenharmony_ci 3548c2ecf20Sopenharmony_cienum llp_ecode { 3558c2ecf20Sopenharmony_ci LLP_ECODE_TCP_STREAM_LOST = 0x01, /* How to transfer this ?? */ 3568c2ecf20Sopenharmony_ci LLP_ECODE_RECEIVED_CRC = 0x02, 3578c2ecf20Sopenharmony_ci LLP_ECODE_FPDU_START = 0x03, 3588c2ecf20Sopenharmony_ci LLP_ECODE_INVALID_REQ_RESP = 0x04, 3598c2ecf20Sopenharmony_ci 3608c2ecf20Sopenharmony_ci /* Errors for Enhanced Connection Establishment only */ 3618c2ecf20Sopenharmony_ci LLP_ECODE_LOCAL_CATASTROPHIC = 0x05, 3628c2ecf20Sopenharmony_ci LLP_ECODE_INSUFFICIENT_IRD = 0x06, 3638c2ecf20Sopenharmony_ci LLP_ECODE_NO_MATCHING_RTR = 0x07 3648c2ecf20Sopenharmony_ci}; 3658c2ecf20Sopenharmony_ci 3668c2ecf20Sopenharmony_cienum llp_etype { LLP_ETYPE_MPA = 0x00 }; 3678c2ecf20Sopenharmony_ci 3688c2ecf20Sopenharmony_cienum rdma_opcode { 3698c2ecf20Sopenharmony_ci RDMAP_RDMA_WRITE = 0x0, 3708c2ecf20Sopenharmony_ci RDMAP_RDMA_READ_REQ = 0x1, 3718c2ecf20Sopenharmony_ci RDMAP_RDMA_READ_RESP = 0x2, 3728c2ecf20Sopenharmony_ci RDMAP_SEND = 0x3, 3738c2ecf20Sopenharmony_ci RDMAP_SEND_INVAL = 0x4, 3748c2ecf20Sopenharmony_ci RDMAP_SEND_SE = 0x5, 3758c2ecf20Sopenharmony_ci RDMAP_SEND_SE_INVAL = 0x6, 3768c2ecf20Sopenharmony_ci RDMAP_TERMINATE = 0x7, 3778c2ecf20Sopenharmony_ci RDMAP_NOT_SUPPORTED = RDMAP_TERMINATE + 1 3788c2ecf20Sopenharmony_ci}; 3798c2ecf20Sopenharmony_ci 3808c2ecf20Sopenharmony_ci#endif 381