|
@@ -122,7 +122,19 @@ enum ib_device_cap_flags {
|
|
|
IB_DEVICE_BLOCK_MULTICAST_LOOPBACK = (1<<22),
|
|
|
IB_DEVICE_MEM_WINDOW_TYPE_2A = (1<<23),
|
|
|
IB_DEVICE_MEM_WINDOW_TYPE_2B = (1<<24),
|
|
|
- IB_DEVICE_MANAGED_FLOW_STEERING = (1<<29)
|
|
|
+ IB_DEVICE_MANAGED_FLOW_STEERING = (1<<29),
|
|
|
+ IB_DEVICE_SIGNATURE_HANDOVER = (1<<30)
|
|
|
+};
|
|
|
+
|
|
|
+enum ib_signature_prot_cap {
|
|
|
+ IB_PROT_T10DIF_TYPE_1 = 1,
|
|
|
+ IB_PROT_T10DIF_TYPE_2 = 1 << 1,
|
|
|
+ IB_PROT_T10DIF_TYPE_3 = 1 << 2,
|
|
|
+};
|
|
|
+
|
|
|
+enum ib_signature_guard_cap {
|
|
|
+ IB_GUARD_T10DIF_CRC = 1,
|
|
|
+ IB_GUARD_T10DIF_CSUM = 1 << 1,
|
|
|
};
|
|
|
|
|
|
enum ib_atomic_cap {
|
|
@@ -172,6 +184,8 @@ struct ib_device_attr {
|
|
|
unsigned int max_fast_reg_page_list_len;
|
|
|
u16 max_pkeys;
|
|
|
u8 local_ca_ack_delay;
|
|
|
+ int sig_prot_cap;
|
|
|
+ int sig_guard_cap;
|
|
|
};
|
|
|
|
|
|
enum ib_mtu {
|
|
@@ -477,6 +491,114 @@ struct ib_mr_init_attr {
|
|
|
u32 flags;
|
|
|
};
|
|
|
|
|
|
+enum ib_signature_type {
|
|
|
+ IB_SIG_TYPE_T10_DIF,
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * T10-DIF Signature types
|
|
|
+ * T10-DIF types are defined by SCSI
|
|
|
+ * specifications.
|
|
|
+ */
|
|
|
+enum ib_t10_dif_type {
|
|
|
+ IB_T10DIF_NONE,
|
|
|
+ IB_T10DIF_TYPE1,
|
|
|
+ IB_T10DIF_TYPE2,
|
|
|
+ IB_T10DIF_TYPE3
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * Signature T10-DIF block-guard types
|
|
|
+ * IB_T10DIF_CRC: Corresponds to T10-PI mandated CRC checksum rules.
|
|
|
+ * IB_T10DIF_CSUM: Corresponds to IP checksum rules.
|
|
|
+ */
|
|
|
+enum ib_t10_dif_bg_type {
|
|
|
+ IB_T10DIF_CRC,
|
|
|
+ IB_T10DIF_CSUM
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct ib_t10_dif_domain - Parameters specific for T10-DIF
|
|
|
+ * domain.
|
|
|
+ * @type: T10-DIF type (0|1|2|3)
|
|
|
+ * @bg_type: T10-DIF block guard type (CRC|CSUM)
|
|
|
+ * @pi_interval: protection information interval.
|
|
|
+ * @bg: seed of guard computation.
|
|
|
+ * @app_tag: application tag of guard block
|
|
|
+ * @ref_tag: initial guard block reference tag.
|
|
|
+ * @type3_inc_reftag: T10-DIF type 3 does not state
|
|
|
+ * about the reference tag, it is the user
|
|
|
+ * choice to increment it or not.
|
|
|
+ */
|
|
|
+struct ib_t10_dif_domain {
|
|
|
+ enum ib_t10_dif_type type;
|
|
|
+ enum ib_t10_dif_bg_type bg_type;
|
|
|
+ u16 pi_interval;
|
|
|
+ u16 bg;
|
|
|
+ u16 app_tag;
|
|
|
+ u32 ref_tag;
|
|
|
+ bool type3_inc_reftag;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct ib_sig_domain - Parameters for signature domain
|
|
|
+ * @sig_type: specific signauture type
|
|
|
+ * @sig: union of all signature domain attributes that may
|
|
|
+ * be used to set domain layout.
|
|
|
+ */
|
|
|
+struct ib_sig_domain {
|
|
|
+ enum ib_signature_type sig_type;
|
|
|
+ union {
|
|
|
+ struct ib_t10_dif_domain dif;
|
|
|
+ } sig;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct ib_sig_attrs - Parameters for signature handover operation
|
|
|
+ * @check_mask: bitmask for signature byte check (8 bytes)
|
|
|
+ * @mem: memory domain layout desciptor.
|
|
|
+ * @wire: wire domain layout desciptor.
|
|
|
+ */
|
|
|
+struct ib_sig_attrs {
|
|
|
+ u8 check_mask;
|
|
|
+ struct ib_sig_domain mem;
|
|
|
+ struct ib_sig_domain wire;
|
|
|
+};
|
|
|
+
|
|
|
+enum ib_sig_err_type {
|
|
|
+ IB_SIG_BAD_GUARD,
|
|
|
+ IB_SIG_BAD_REFTAG,
|
|
|
+ IB_SIG_BAD_APPTAG,
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct ib_sig_err - signature error descriptor
|
|
|
+ */
|
|
|
+struct ib_sig_err {
|
|
|
+ enum ib_sig_err_type err_type;
|
|
|
+ u32 expected;
|
|
|
+ u32 actual;
|
|
|
+ u64 sig_err_offset;
|
|
|
+ u32 key;
|
|
|
+};
|
|
|
+
|
|
|
+enum ib_mr_status_check {
|
|
|
+ IB_MR_CHECK_SIG_STATUS = 1,
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct ib_mr_status - Memory region status container
|
|
|
+ *
|
|
|
+ * @fail_status: Bitmask of MR checks status. For each
|
|
|
+ * failed check a corresponding status bit is set.
|
|
|
+ * @sig_err: Additional info for IB_MR_CEHCK_SIG_STATUS
|
|
|
+ * failure.
|
|
|
+ */
|
|
|
+struct ib_mr_status {
|
|
|
+ u32 fail_status;
|
|
|
+ struct ib_sig_err sig_err;
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
|
|
|
* enum.
|
|
@@ -660,6 +782,7 @@ enum ib_qp_create_flags {
|
|
|
IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0,
|
|
|
IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1,
|
|
|
IB_QP_CREATE_NETIF_QP = 1 << 5,
|
|
|
+ IB_QP_CREATE_SIGNATURE_EN = 1 << 6,
|
|
|
/* reserve bits 26-31 for low level drivers' internal use */
|
|
|
IB_QP_CREATE_RESERVED_START = 1 << 26,
|
|
|
IB_QP_CREATE_RESERVED_END = 1 << 31,
|
|
@@ -824,6 +947,7 @@ enum ib_wr_opcode {
|
|
|
IB_WR_MASKED_ATOMIC_CMP_AND_SWP,
|
|
|
IB_WR_MASKED_ATOMIC_FETCH_AND_ADD,
|
|
|
IB_WR_BIND_MW,
|
|
|
+ IB_WR_REG_SIG_MR,
|
|
|
/* reserve values for low level drivers' internal use.
|
|
|
* These values will not be used at all in the ib core layer.
|
|
|
*/
|
|
@@ -929,6 +1053,12 @@ struct ib_send_wr {
|
|
|
u32 rkey;
|
|
|
struct ib_mw_bind_info bind_info;
|
|
|
} bind_mw;
|
|
|
+ struct {
|
|
|
+ struct ib_sig_attrs *sig_attrs;
|
|
|
+ struct ib_mr *sig_mr;
|
|
|
+ int access_flags;
|
|
|
+ struct ib_sge *prot;
|
|
|
+ } sig_handover;
|
|
|
} wr;
|
|
|
u32 xrc_remote_srq_num; /* XRC TGT QPs only */
|
|
|
};
|
|
@@ -1474,6 +1604,8 @@ struct ib_device {
|
|
|
*flow_attr,
|
|
|
int domain);
|
|
|
int (*destroy_flow)(struct ib_flow *flow_id);
|
|
|
+ int (*check_mr_status)(struct ib_mr *mr, u32 check_mask,
|
|
|
+ struct ib_mr_status *mr_status);
|
|
|
|
|
|
struct ib_dma_mapping_ops *dma_ops;
|
|
|
|
|
@@ -2473,4 +2605,19 @@ static inline int ib_check_mr_access(int flags)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * ib_check_mr_status: lightweight check of MR status.
|
|
|
+ * This routine may provide status checks on a selected
|
|
|
+ * ib_mr. first use is for signature status check.
|
|
|
+ *
|
|
|
+ * @mr: A memory region.
|
|
|
+ * @check_mask: Bitmask of which checks to perform from
|
|
|
+ * ib_mr_status_check enumeration.
|
|
|
+ * @mr_status: The container of relevant status checks.
|
|
|
+ * failed checks will be indicated in the status bitmask
|
|
|
+ * and the relevant info shall be in the error item.
|
|
|
+ */
|
|
|
+int ib_check_mr_status(struct ib_mr *mr, u32 check_mask,
|
|
|
+ struct ib_mr_status *mr_status);
|
|
|
+
|
|
|
#endif /* IB_VERBS_H */
|