forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.9 KiB
124 lines
2.9 KiB
/* SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB) */ |
|
/* |
|
* Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved. |
|
*/ |
|
|
|
#ifndef _RDMA_SIGNATURE_H_ |
|
#define _RDMA_SIGNATURE_H_ |
|
|
|
#include <linux/types.h> |
|
|
|
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_signature_type - Signature types |
|
* @IB_SIG_TYPE_NONE: Unprotected. |
|
* @IB_SIG_TYPE_T10_DIF: Type T10-DIF |
|
*/ |
|
enum ib_signature_type { |
|
IB_SIG_TYPE_NONE, |
|
IB_SIG_TYPE_T10_DIF, |
|
}; |
|
|
|
/** |
|
* enum ib_t10_dif_bg_type - 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. |
|
* @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. |
|
* @ref_remap: Indicate wethear the reftag increments each block |
|
* @app_escape: Indicate to skip block check if apptag=0xffff |
|
* @ref_escape: Indicate to skip block check if reftag=0xffffffff |
|
* @apptag_check_mask: check bitmask of application tag. |
|
*/ |
|
struct ib_t10_dif_domain { |
|
enum ib_t10_dif_bg_type bg_type; |
|
u16 pi_interval; |
|
u16 bg; |
|
u16 app_tag; |
|
u32 ref_tag; |
|
bool ref_remap; |
|
bool app_escape; |
|
bool ref_escape; |
|
u16 apptag_check_mask; |
|
}; |
|
|
|
/** |
|
* 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 descriptor. |
|
* @wire: wire domain layout descriptor. |
|
* @meta_length: metadata length |
|
*/ |
|
struct ib_sig_attrs { |
|
u8 check_mask; |
|
struct ib_sig_domain mem; |
|
struct ib_sig_domain wire; |
|
int meta_length; |
|
}; |
|
|
|
enum ib_sig_err_type { |
|
IB_SIG_BAD_GUARD, |
|
IB_SIG_BAD_REFTAG, |
|
IB_SIG_BAD_APPTAG, |
|
}; |
|
|
|
/* |
|
* Signature check masks (8 bytes in total) according to the T10-PI standard: |
|
* -------- -------- ------------ |
|
* | GUARD | APPTAG | REFTAG | |
|
* | 2B | 2B | 4B | |
|
* -------- -------- ------------ |
|
*/ |
|
enum { |
|
IB_SIG_CHECK_GUARD = 0xc0, |
|
IB_SIG_CHECK_APPTAG = 0x30, |
|
IB_SIG_CHECK_REFTAG = 0x0f, |
|
}; |
|
|
|
/* |
|
* 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; |
|
}; |
|
|
|
#endif /* _RDMA_SIGNATURE_H_ */
|
|
|