Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) /* Authors: Bernard Metzler <bmt@zurich.ibm.com> */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) /* Copyright (c) 2008-2019, IBM Corporation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #ifndef _IWARP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #define _IWARP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <rdma/rdma_user_cm.h> /* RDMA_MAX_PRIVATE_DATA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <asm/byteorder.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define RDMAP_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define DDP_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define MPA_REVISION_1 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define MPA_REVISION_2 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define MPA_MAX_PRIVDATA RDMA_MAX_PRIVATE_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define MPA_KEY_REQ "MPA ID Req Frame"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define MPA_KEY_REP "MPA ID Rep Frame"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define MPA_IRD_ORD_MASK 0x3fff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) struct mpa_rr_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	__be16 bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	__be16 pd_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  * MPA request/response header bits & fields
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	MPA_RR_FLAG_MARKERS = cpu_to_be16(0x8000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	MPA_RR_FLAG_CRC = cpu_to_be16(0x4000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	MPA_RR_FLAG_REJECT = cpu_to_be16(0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	MPA_RR_FLAG_ENHANCED = cpu_to_be16(0x1000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	MPA_RR_FLAG_GSO_EXP = cpu_to_be16(0x0800),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	MPA_RR_MASK_REVISION = cpu_to_be16(0x00ff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * MPA request/reply header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) struct mpa_rr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	__u8 key[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	struct mpa_rr_params params;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) static inline void __mpa_rr_set_revision(__be16 *bits, u8 rev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	*bits = (*bits & ~MPA_RR_MASK_REVISION) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		(cpu_to_be16(rev) & MPA_RR_MASK_REVISION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) static inline u8 __mpa_rr_revision(__be16 mpa_rr_bits)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	__be16 rev = mpa_rr_bits & MPA_RR_MASK_REVISION;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	return be16_to_cpu(rev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) enum mpa_v2_ctrl {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	MPA_V2_PEER_TO_PEER = cpu_to_be16(0x8000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	MPA_V2_ZERO_LENGTH_RTR = cpu_to_be16(0x4000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	MPA_V2_RDMA_WRITE_RTR = cpu_to_be16(0x8000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	MPA_V2_RDMA_READ_RTR = cpu_to_be16(0x4000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	MPA_V2_RDMA_NO_RTR = cpu_to_be16(0x0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	MPA_V2_MASK_IRD_ORD = cpu_to_be16(0x3fff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) struct mpa_v2_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	__be16 ird;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	__be16 ord;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) struct mpa_marker {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	__be16 rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	__be16 fpdu_hmd; /* FPDU header-marker distance (= MPA's FPDUPTR) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80)  * maximum MPA trailer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) struct mpa_trailer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	__u8 pad[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	__be32 crc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define MPA_HDR_SIZE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define MPA_CRC_SIZE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91)  * Common portion of iWARP headers (MPA, DDP, RDMAP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)  * for any FPDU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) struct iwarp_ctrl {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	__be16 mpa_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	__be16 ddp_rdmap_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)  * DDP/RDMAP Hdr bits & fields
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	DDP_FLAG_TAGGED = cpu_to_be16(0x8000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	DDP_FLAG_LAST = cpu_to_be16(0x4000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	DDP_MASK_RESERVED = cpu_to_be16(0x3C00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	DDP_MASK_VERSION = cpu_to_be16(0x0300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	RDMAP_MASK_VERSION = cpu_to_be16(0x00C0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	RDMAP_MASK_RESERVED = cpu_to_be16(0x0030),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	RDMAP_MASK_OPCODE = cpu_to_be16(0x000f)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) static inline u8 __ddp_get_version(struct iwarp_ctrl *ctrl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	return be16_to_cpu(ctrl->ddp_rdmap_ctrl & DDP_MASK_VERSION) >> 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) static inline void __ddp_set_version(struct iwarp_ctrl *ctrl, u8 version)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	ctrl->ddp_rdmap_ctrl =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 		(ctrl->ddp_rdmap_ctrl & ~DDP_MASK_VERSION) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 		(cpu_to_be16((u16)version << 8) & DDP_MASK_VERSION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) static inline u8 __rdmap_get_version(struct iwarp_ctrl *ctrl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	__be16 ver = ctrl->ddp_rdmap_ctrl & RDMAP_MASK_VERSION;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	return be16_to_cpu(ver) >> 6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) static inline void __rdmap_set_version(struct iwarp_ctrl *ctrl, u8 version)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	ctrl->ddp_rdmap_ctrl = (ctrl->ddp_rdmap_ctrl & ~RDMAP_MASK_VERSION) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 			       (cpu_to_be16(version << 6) & RDMAP_MASK_VERSION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) static inline u8 __rdmap_get_opcode(struct iwarp_ctrl *ctrl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	return be16_to_cpu(ctrl->ddp_rdmap_ctrl & RDMAP_MASK_OPCODE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) static inline void __rdmap_set_opcode(struct iwarp_ctrl *ctrl, u8 opcode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	ctrl->ddp_rdmap_ctrl = (ctrl->ddp_rdmap_ctrl & ~RDMAP_MASK_OPCODE) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 			       (cpu_to_be16(opcode) & RDMAP_MASK_OPCODE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) struct iwarp_rdma_write {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	__be32 sink_stag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	__be64 sink_to;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) struct iwarp_rdma_rreq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	__be32 rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	__be32 ddp_qn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	__be32 ddp_msn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	__be32 ddp_mo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	__be32 sink_stag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	__be64 sink_to;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	__be32 read_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	__be32 source_stag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	__be64 source_to;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) struct iwarp_rdma_rresp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	__be32 sink_stag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	__be64 sink_to;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) struct iwarp_send {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	__be32 rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	__be32 ddp_qn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	__be32 ddp_msn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	__be32 ddp_mo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) struct iwarp_send_inv {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	__be32 inval_stag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	__be32 ddp_qn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	__be32 ddp_msn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	__be32 ddp_mo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct iwarp_terminate {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	__be32 rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	__be32 ddp_qn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	__be32 ddp_msn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	__be32 ddp_mo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #if defined(__LITTLE_ENDIAN_BITFIELD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	__be32 layer : 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	__be32 etype : 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	__be32 ecode : 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	__be32 flag_m : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	__be32 flag_d : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	__be32 flag_r : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	__be32 reserved : 13;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #elif defined(__BIG_ENDIAN_BITFIELD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	__be32 reserved : 13;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	__be32 flag_r : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	__be32 flag_d : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	__be32 flag_m : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	__be32 ecode : 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	__be32 etype : 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	__be32 layer : 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #error "undefined byte order"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  * Terminate Hdr bits & fields
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	TERM_MASK_LAYER = cpu_to_be32(0xf0000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	TERM_MASK_ETYPE = cpu_to_be32(0x0f000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	TERM_MASK_ECODE = cpu_to_be32(0x00ff0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	TERM_FLAG_M = cpu_to_be32(0x00008000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	TERM_FLAG_D = cpu_to_be32(0x00004000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	TERM_FLAG_R = cpu_to_be32(0x00002000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	TERM_MASK_RESVD = cpu_to_be32(0x00001fff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) static inline u8 __rdmap_term_layer(struct iwarp_terminate *term)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	return term->layer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) static inline void __rdmap_term_set_layer(struct iwarp_terminate *term,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 					  u8 layer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	term->layer = layer & 0xf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) static inline u8 __rdmap_term_etype(struct iwarp_terminate *term)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	return term->etype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) static inline void __rdmap_term_set_etype(struct iwarp_terminate *term,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 					  u8 etype)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	term->etype = etype & 0xf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) static inline u8 __rdmap_term_ecode(struct iwarp_terminate *term)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	return term->ecode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) static inline void __rdmap_term_set_ecode(struct iwarp_terminate *term,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 					  u8 ecode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	term->ecode = ecode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)  * Common portion of iWARP headers (MPA, DDP, RDMAP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)  * for an FPDU carrying an untagged DDP segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) struct iwarp_ctrl_untagged {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	__be32 rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	__be32 ddp_qn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	__be32 ddp_msn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	__be32 ddp_mo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)  * Common portion of iWARP headers (MPA, DDP, RDMAP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)  * for an FPDU carrying a tagged DDP segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) struct iwarp_ctrl_tagged {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	__be32 ddp_stag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	__be64 ddp_to;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) union iwarp_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	struct iwarp_ctrl ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	struct iwarp_ctrl_untagged c_untagged;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	struct iwarp_ctrl_tagged c_tagged;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	struct iwarp_rdma_write rwrite;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	struct iwarp_rdma_rreq rreq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	struct iwarp_rdma_rresp rresp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	struct iwarp_terminate terminate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	struct iwarp_send send;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	struct iwarp_send_inv send_inv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) enum term_elayer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	TERM_ERROR_LAYER_RDMAP = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	TERM_ERROR_LAYER_DDP = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	TERM_ERROR_LAYER_LLP = 0x02 /* eg., MPA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) enum ddp_etype {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	DDP_ETYPE_CATASTROPHIC = 0x0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	DDP_ETYPE_TAGGED_BUF = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	DDP_ETYPE_UNTAGGED_BUF = 0x2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	DDP_ETYPE_RSVD = 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) enum ddp_ecode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	/* unspecified, set to zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	DDP_ECODE_CATASTROPHIC = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	/* Tagged Buffer Errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	DDP_ECODE_T_INVALID_STAG = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	DDP_ECODE_T_BASE_BOUNDS = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	DDP_ECODE_T_STAG_NOT_ASSOC = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	DDP_ECODE_T_TO_WRAP = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	DDP_ECODE_T_VERSION = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	/* Untagged Buffer Errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	DDP_ECODE_UT_INVALID_QN = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	DDP_ECODE_UT_INVALID_MSN_NOBUF = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	DDP_ECODE_UT_INVALID_MSN_RANGE = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	DDP_ECODE_UT_INVALID_MO = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	DDP_ECODE_UT_MSG_TOOLONG = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	DDP_ECODE_UT_VERSION = 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) enum rdmap_untagged_qn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	RDMAP_UNTAGGED_QN_SEND = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	RDMAP_UNTAGGED_QN_RDMA_READ = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	RDMAP_UNTAGGED_QN_TERMINATE = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	RDMAP_UNTAGGED_QN_COUNT = 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) enum rdmap_etype {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	RDMAP_ETYPE_CATASTROPHIC = 0x0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	RDMAP_ETYPE_REMOTE_PROTECTION = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	RDMAP_ETYPE_REMOTE_OPERATION = 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) enum rdmap_ecode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	RDMAP_ECODE_INVALID_STAG = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	RDMAP_ECODE_BASE_BOUNDS = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	RDMAP_ECODE_ACCESS_RIGHTS = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	RDMAP_ECODE_STAG_NOT_ASSOC = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	RDMAP_ECODE_TO_WRAP = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	RDMAP_ECODE_VERSION = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	RDMAP_ECODE_OPCODE = 0x06,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	RDMAP_ECODE_CATASTROPHIC_STREAM = 0x07,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	RDMAP_ECODE_CATASTROPHIC_GLOBAL = 0x08,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	RDMAP_ECODE_CANNOT_INVALIDATE = 0x09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	RDMAP_ECODE_UNSPECIFIED = 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) enum llp_ecode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	LLP_ECODE_TCP_STREAM_LOST = 0x01, /* How to transfer this ?? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	LLP_ECODE_RECEIVED_CRC = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	LLP_ECODE_FPDU_START = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	LLP_ECODE_INVALID_REQ_RESP = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	/* Errors for Enhanced Connection Establishment only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	LLP_ECODE_LOCAL_CATASTROPHIC = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	LLP_ECODE_INSUFFICIENT_IRD = 0x06,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	LLP_ECODE_NO_MATCHING_RTR = 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) enum llp_etype { LLP_ETYPE_MPA = 0x00 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) enum rdma_opcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	RDMAP_RDMA_WRITE = 0x0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	RDMAP_RDMA_READ_REQ = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	RDMAP_RDMA_READ_RESP = 0x2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	RDMAP_SEND = 0x3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	RDMAP_SEND_INVAL = 0x4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	RDMAP_SEND_SE = 0x5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	RDMAP_SEND_SE_INVAL = 0x6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	RDMAP_TERMINATE = 0x7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	RDMAP_NOT_SUPPORTED = RDMAP_TERMINATE + 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) #endif