enum efa_io_comp_status { /* Successful completion */
EFA_IO_COMP_STATUS_OK = 0, /* Flushed during QP destroy */
EFA_IO_COMP_STATUS_FLUSHED = 1, /* Internal QP error */
EFA_IO_COMP_STATUS_LOCAL_ERROR_QP_INTERNAL_ERROR = 2, /* Unsupported operation */
EFA_IO_COMP_STATUS_LOCAL_ERROR_UNSUPPORTED_OP = 3, /* Bad AH */
EFA_IO_COMP_STATUS_LOCAL_ERROR_INVALID_AH = 4, /* LKEY not registered or does not match IOVA */
EFA_IO_COMP_STATUS_LOCAL_ERROR_INVALID_LKEY = 5, /* Message too long */
EFA_IO_COMP_STATUS_LOCAL_ERROR_BAD_LENGTH = 6, /* RKEY not registered or does not match remote IOVA */
EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_ADDRESS = 7, /* Connection was reset by remote side */
EFA_IO_COMP_STATUS_REMOTE_ERROR_ABORT = 8, /* Bad dest QP number (QP does not exist or is in error state) */
EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_DEST_QPN = 9, /* Destination resource not ready (no WQEs posted on RQ) */
EFA_IO_COMP_STATUS_REMOTE_ERROR_RNR = 10, /* Receiver SGL too short */
EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_LENGTH = 11, /* Unexpected status returned by responder */
EFA_IO_COMP_STATUS_REMOTE_ERROR_BAD_STATUS = 12, /* Unresponsive remote - was previously responsive */
EFA_IO_COMP_STATUS_LOCAL_ERROR_UNRESP_REMOTE = 13, /* No valid AH at remote side (required for RDMA operations) */
EFA_IO_COMP_STATUS_REMOTE_ERROR_UNKNOWN_PEER = 14, /* Unreachable remote - never received a response */
EFA_IO_COMP_STATUS_LOCAL_ERROR_UNREACH_REMOTE = 15,
};
struct efa_io_tx_meta_desc { /* Verbs-generated Request ID */
u16 req_id;
/* * control flags * 3:0 : op_type - enum efa_io_send_op_type * 4 : has_imm - immediate_data field carries valid * data. * 5 : inline_msg - inline mode - inline message data * follows this descriptor (no buffer descriptors). * Note that it is different from immediate data * 6 : meta_extension - Extended metadata. MBZ * 7 : meta_desc - Indicates metadata descriptor. * Must be set.
*/
u8 ctrl1;
/* * control flags * 0 : phase * 1 : reserved25 - MBZ * 2 : first - Indicates first descriptor in * transaction. Must be set. * 3 : last - Indicates last descriptor in * transaction. Must be set. * 4 : comp_req - Indicates whether completion should * be posted, after packet is transmitted. Valid only * for the first descriptor * 7:5 : reserved29 - MBZ
*/
u8 ctrl2;
u16 dest_qp_num;
/* * If inline_msg bit is set, length of inline message in bytes, * otherwise length of SGL (number of buffers).
*/
u16 length;
/* * immediate data: if has_imm is set, then this field is included within * Tx message and reported in remote Rx completion.
*/
u32 immediate_data;
u16 ah;
u16 reserved;
/* Queue key */
u32 qkey;
u8 reserved2[12];
};
/* * Tx queue buffer descriptor, for any transport type. Preceded by metadata * descriptor.
*/ struct efa_io_tx_buf_desc { /* length in bytes */
u32 length;
/* Local memory address */ struct efa_io_tx_buf_desc local_mem[1];
};
struct efa_io_fast_mr_reg_req { /* Updated local key of the MR after lkey/rkey increment */
u32 lkey;
/* * permissions * 0 : local_write_enable - Local write permissions: * must be set for RQ buffers and buffers posted for * RDMA Read requests * 1 : remote_write_enable - Remote write * permissions: must be set to enable RDMA write to * the region * 2 : remote_read_enable - Remote read permissions: * must be set to enable RDMA read from the region * 7:3 : reserved2 - MBZ
*/
u8 permissions;
/* IO Virtual Address associated with this MR */
u64 iova;
/* Memory region length, in bytes */
u64 mr_length;
/* Physical Buffer List, each element is page-aligned. */ union { /* * Inline array of physical page addresses (optimization * for short region activation).
*/
u64 inline_array[1];
/* points to PBL (Currently only direct) */
u64 dma_addr;
} pbl;
};
struct efa_io_fast_mr_inv_req { /* Local key of the MR to invalidate */
u32 lkey;
/* MBZ */
u8 reserved[28];
};
/* * Tx WQE, composed of tx meta descriptors followed by either tx buffer * descriptors or inline data
*/ struct efa_io_tx_wqe { /* TX meta */ struct efa_io_tx_meta_desc meta;
union { /* Send buffer descriptors */ struct efa_io_tx_buf_desc sgl[2];
u8 inline_data[32];
/* RDMA local and remote memory addresses */ struct efa_io_rdma_req rdma_req;
/* Fast registration */ struct efa_io_fast_mr_reg_req reg_mr_req;
/* Fast invalidation */ struct efa_io_fast_mr_inv_req inv_mr_req;
} data;
};
/* * Rx buffer descriptor; RX WQE is composed of one or more RX buffer * descriptors.
*/ struct efa_io_rx_desc { /* Buffer address bits[31:0] */
u32 buf_addr_lo;
/* Buffer Pointer[63:32] */
u32 buf_addr_hi;
/* Verbs-generated request id. */
u16 req_id;
/* Length in bytes. */
u16 length;
/* * LKey and control flags * 23:0 : lkey * 29:24 : reserved - MBZ * 30 : first - Indicates first descriptor in WQE * 31 : last - Indicates last descriptor in WQE
*/
u32 lkey_ctrl;
};
/* Common IO completion descriptor */ struct efa_io_cdesc_common { /* * verbs-generated request ID, as provided in the completed tx or rx * descriptor.
*/
u16 req_id;
u8 status;
/* * flags * 0 : phase - Phase bit * 2:1 : q_type - enum efa_io_queue_type: send/recv * 3 : has_imm - indicates that immediate data is * present - for RX completions only * 6:4 : op_type - enum efa_io_send_op_type * 7 : unsolicited - indicates that there is no * matching request - for RDMA with imm. RX only
*/
u8 flags;
/* local QP number */
u16 qp_num;
};
/* Tx completion descriptor */ struct efa_io_tx_cdesc { /* Common completion info */ struct efa_io_cdesc_common common;
/* MBZ */
u16 reserved16;
};
/* Rx Completion Descriptor */ struct efa_io_rx_cdesc { /* Common completion info */ struct efa_io_cdesc_common common;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.