brintos

brintos / linux-shallow public Read only

0
0
Text · 7.6 KiB · 2d8eb96 Raw
306 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */2/*3 * Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All rights reserved.4 */5 6#ifndef _EFA_IO_H_7#define _EFA_IO_H_8 9#define EFA_IO_TX_DESC_NUM_BUFS              210#define EFA_IO_TX_DESC_NUM_RDMA_BUFS         111#define EFA_IO_TX_DESC_INLINE_MAX_SIZE       3212#define EFA_IO_TX_DESC_IMM_DATA_SIZE         413 14enum efa_io_queue_type {15	/* send queue (of a QP) */16	EFA_IO_SEND_QUEUE                           = 1,17	/* recv queue (of a QP) */18	EFA_IO_RECV_QUEUE                           = 2,19};20 21enum efa_io_send_op_type {22	/* send message */23	EFA_IO_SEND                                 = 0,24	/* RDMA read */25	EFA_IO_RDMA_READ                            = 1,26	/* RDMA write */27	EFA_IO_RDMA_WRITE                           = 2,28};29 30enum efa_io_comp_status {31	/* Successful completion */32	EFA_IO_COMP_STATUS_OK                       = 0,33	/* Flushed during QP destroy */34	EFA_IO_COMP_STATUS_FLUSHED                  = 1,35	/* Internal QP error */36	EFA_IO_COMP_STATUS_LOCAL_ERROR_QP_INTERNAL_ERROR = 2,37	/* Bad operation type */38	EFA_IO_COMP_STATUS_LOCAL_ERROR_INVALID_OP_TYPE = 3,39	/* Bad AH */40	EFA_IO_COMP_STATUS_LOCAL_ERROR_INVALID_AH   = 4,41	/* LKEY not registered or does not match IOVA */42	EFA_IO_COMP_STATUS_LOCAL_ERROR_INVALID_LKEY = 5,43	/* Message too long */44	EFA_IO_COMP_STATUS_LOCAL_ERROR_BAD_LENGTH   = 6,45	/* Destination ENI is down or does not run EFA */46	EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_ADDRESS = 7,47	/* Connection was reset by remote side */48	EFA_IO_COMP_STATUS_REMOTE_ERROR_ABORT       = 8,49	/* Bad dest QP number (QP does not exist or is in error state) */50	EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_DEST_QPN = 9,51	/* Destination resource not ready (no WQEs posted on RQ) */52	EFA_IO_COMP_STATUS_REMOTE_ERROR_RNR         = 10,53	/* Receiver SGL too short */54	EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_LENGTH  = 11,55	/* Unexpected status returned by responder */56	EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_STATUS  = 12,57	/* Unresponsive remote - detected locally */58	EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE = 13,59};60 61struct efa_io_tx_meta_desc {62	/* Verbs-generated Request ID */63	u16 req_id;64 65	/*66	 * control flags67	 * 3:0 : op_type - enum efa_io_send_op_type68	 * 4 : has_imm - immediate_data field carries valid69	 *    data.70	 * 5 : inline_msg - inline mode - inline message data71	 *    follows this descriptor (no buffer descriptors).72	 *    Note that it is different from immediate data73	 * 6 : meta_extension - Extended metadata. MBZ74	 * 7 : meta_desc - Indicates metadata descriptor.75	 *    Must be set.76	 */77	u8 ctrl1;78 79	/*80	 * control flags81	 * 0 : phase82	 * 1 : reserved25 - MBZ83	 * 2 : first - Indicates first descriptor in84	 *    transaction. Must be set.85	 * 3 : last - Indicates last descriptor in86	 *    transaction. Must be set.87	 * 4 : comp_req - Indicates whether completion should88	 *    be posted, after packet is transmitted. Valid only89	 *    for the first descriptor90	 * 7:5 : reserved29 - MBZ91	 */92	u8 ctrl2;93 94	u16 dest_qp_num;95 96	/*97	 * If inline_msg bit is set, length of inline message in bytes,98	 *    otherwise length of SGL (number of buffers).99	 */100	u16 length;101 102	/*103	 * immediate data: if has_imm is set, then this field is included104	 *    within Tx message and reported in remote Rx completion.105	 */106	u32 immediate_data;107 108	u16 ah;109 110	u16 reserved;111 112	/* Queue key */113	u32 qkey;114 115	u8 reserved2[12];116};117 118/*119 * Tx queue buffer descriptor, for any transport type. Preceded by metadata120 * descriptor.121 */122struct efa_io_tx_buf_desc {123	/* length in bytes */124	u32 length;125 126	/*127	 * 23:0 : lkey - local memory translation key128	 * 31:24 : reserved - MBZ129	 */130	u32 lkey;131 132	/* Buffer address bits[31:0] */133	u32 buf_addr_lo;134 135	/* Buffer address bits[63:32] */136	u32 buf_addr_hi;137};138 139struct efa_io_remote_mem_addr {140	/* length in bytes */141	u32 length;142 143	/* remote memory translation key */144	u32 rkey;145 146	/* Buffer address bits[31:0] */147	u32 buf_addr_lo;148 149	/* Buffer address bits[63:32] */150	u32 buf_addr_hi;151};152 153struct efa_io_rdma_req {154	/* Remote memory address */155	struct efa_io_remote_mem_addr remote_mem;156 157	/* Local memory address */158	struct efa_io_tx_buf_desc local_mem[1];159};160 161/*162 * Tx WQE, composed of tx meta descriptors followed by either tx buffer163 * descriptors or inline data164 */165struct efa_io_tx_wqe {166	/* TX meta */167	struct efa_io_tx_meta_desc meta;168 169	union {170		/* Send buffer descriptors */171		struct efa_io_tx_buf_desc sgl[2];172 173		u8 inline_data[32];174 175		/* RDMA local and remote memory addresses */176		struct efa_io_rdma_req rdma_req;177	} data;178};179 180/*181 * Rx buffer descriptor; RX WQE is composed of one or more RX buffer182 * descriptors.183 */184struct efa_io_rx_desc {185	/* Buffer address bits[31:0] */186	u32 buf_addr_lo;187 188	/* Buffer Pointer[63:32] */189	u32 buf_addr_hi;190 191	/* Verbs-generated request id. */192	u16 req_id;193 194	/* Length in bytes. */195	u16 length;196 197	/*198	 * LKey and control flags199	 * 23:0 : lkey200	 * 29:24 : reserved - MBZ201	 * 30 : first - Indicates first descriptor in WQE202	 * 31 : last - Indicates last descriptor in WQE203	 */204	u32 lkey_ctrl;205};206 207/* Common IO completion descriptor */208struct efa_io_cdesc_common {209	/*210	 * verbs-generated request ID, as provided in the completed tx or rx211	 *    descriptor.212	 */213	u16 req_id;214 215	u8 status;216 217	/*218	 * flags219	 * 0 : phase - Phase bit220	 * 2:1 : q_type - enum efa_io_queue_type: send/recv221	 * 3 : has_imm - indicates that immediate data is222	 *    present - for RX completions only223	 * 6:4 : op_type - enum efa_io_send_op_type224	 * 7 : reserved31 - MBZ225	 */226	u8 flags;227 228	/* local QP number */229	u16 qp_num;230};231 232/* Tx completion descriptor */233struct efa_io_tx_cdesc {234	/* Common completion info */235	struct efa_io_cdesc_common common;236 237	/* MBZ */238	u16 reserved16;239};240 241/* Rx Completion Descriptor */242struct efa_io_rx_cdesc {243	/* Common completion info */244	struct efa_io_cdesc_common common;245 246	/* Transferred length bits[15:0] */247	u16 length;248 249	/* Remote Address Handle FW index, 0xFFFF indicates invalid ah */250	u16 ah;251 252	u16 src_qp_num;253 254	/* Immediate data */255	u32 imm;256};257 258/* Rx Completion Descriptor RDMA write info */259struct efa_io_rx_cdesc_rdma_write {260	/* Transferred length bits[31:16] */261	u16 length_hi;262};263 264/* Extended Rx Completion Descriptor */265struct efa_io_rx_cdesc_ex {266	/* Base RX completion info */267	struct efa_io_rx_cdesc base;268 269	union {270		struct efa_io_rx_cdesc_rdma_write rdma_write;271 272		/*273		 * Valid only in case of unknown AH (0xFFFF) and CQ274		 * set_src_addr is enabled.275		 */276		u8 src_addr[16];277	} u;278};279 280/* tx_meta_desc */281#define EFA_IO_TX_META_DESC_OP_TYPE_MASK                    GENMASK(3, 0)282#define EFA_IO_TX_META_DESC_HAS_IMM_MASK                    BIT(4)283#define EFA_IO_TX_META_DESC_INLINE_MSG_MASK                 BIT(5)284#define EFA_IO_TX_META_DESC_META_EXTENSION_MASK             BIT(6)285#define EFA_IO_TX_META_DESC_META_DESC_MASK                  BIT(7)286#define EFA_IO_TX_META_DESC_PHASE_MASK                      BIT(0)287#define EFA_IO_TX_META_DESC_FIRST_MASK                      BIT(2)288#define EFA_IO_TX_META_DESC_LAST_MASK                       BIT(3)289#define EFA_IO_TX_META_DESC_COMP_REQ_MASK                   BIT(4)290 291/* tx_buf_desc */292#define EFA_IO_TX_BUF_DESC_LKEY_MASK                        GENMASK(23, 0)293 294/* rx_desc */295#define EFA_IO_RX_DESC_LKEY_MASK                            GENMASK(23, 0)296#define EFA_IO_RX_DESC_FIRST_MASK                           BIT(30)297#define EFA_IO_RX_DESC_LAST_MASK                            BIT(31)298 299/* cdesc_common */300#define EFA_IO_CDESC_COMMON_PHASE_MASK                      BIT(0)301#define EFA_IO_CDESC_COMMON_Q_TYPE_MASK                     GENMASK(2, 1)302#define EFA_IO_CDESC_COMMON_HAS_IMM_MASK                    BIT(3)303#define EFA_IO_CDESC_COMMON_OP_TYPE_MASK                    GENMASK(6, 4)304 305#endif /* _EFA_IO_H_ */306