xref: /freebsd/sys/ofed/include/rdma/signature.h (revision b633e08c705fe43180567eae26923d6f6f98c8d9)
1*b633e08cSHans Petter Selasky /* SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB) */
2*b633e08cSHans Petter Selasky /*
3*b633e08cSHans Petter Selasky  * Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved.
4*b633e08cSHans Petter Selasky  */
5*b633e08cSHans Petter Selasky 
6*b633e08cSHans Petter Selasky #ifndef _RDMA_SIGNATURE_H_
7*b633e08cSHans Petter Selasky #define _RDMA_SIGNATURE_H_
8*b633e08cSHans Petter Selasky 
9*b633e08cSHans Petter Selasky #include <linux/types.h>
10*b633e08cSHans Petter Selasky 
11*b633e08cSHans Petter Selasky enum ib_signature_prot_cap {
12*b633e08cSHans Petter Selasky 	IB_PROT_T10DIF_TYPE_1 = 1,
13*b633e08cSHans Petter Selasky 	IB_PROT_T10DIF_TYPE_2 = 1 << 1,
14*b633e08cSHans Petter Selasky 	IB_PROT_T10DIF_TYPE_3 = 1 << 2,
15*b633e08cSHans Petter Selasky };
16*b633e08cSHans Petter Selasky 
17*b633e08cSHans Petter Selasky enum ib_signature_guard_cap {
18*b633e08cSHans Petter Selasky 	IB_GUARD_T10DIF_CRC	= 1,
19*b633e08cSHans Petter Selasky 	IB_GUARD_T10DIF_CSUM	= 1 << 1,
20*b633e08cSHans Petter Selasky };
21*b633e08cSHans Petter Selasky 
22*b633e08cSHans Petter Selasky /**
23*b633e08cSHans Petter Selasky  * enum ib_signature_type - Signature types
24*b633e08cSHans Petter Selasky  * @IB_SIG_TYPE_NONE: Unprotected.
25*b633e08cSHans Petter Selasky  * @IB_SIG_TYPE_T10_DIF: Type T10-DIF
26*b633e08cSHans Petter Selasky  */
27*b633e08cSHans Petter Selasky enum ib_signature_type {
28*b633e08cSHans Petter Selasky 	IB_SIG_TYPE_NONE,
29*b633e08cSHans Petter Selasky 	IB_SIG_TYPE_T10_DIF,
30*b633e08cSHans Petter Selasky };
31*b633e08cSHans Petter Selasky 
32*b633e08cSHans Petter Selasky /**
33*b633e08cSHans Petter Selasky  * enum ib_t10_dif_bg_type - Signature T10-DIF block-guard types
34*b633e08cSHans Petter Selasky  * @IB_T10DIF_CRC: Corresponds to T10-PI mandated CRC checksum rules.
35*b633e08cSHans Petter Selasky  * @IB_T10DIF_CSUM: Corresponds to IP checksum rules.
36*b633e08cSHans Petter Selasky  */
37*b633e08cSHans Petter Selasky enum ib_t10_dif_bg_type {
38*b633e08cSHans Petter Selasky 	IB_T10DIF_CRC,
39*b633e08cSHans Petter Selasky 	IB_T10DIF_CSUM,
40*b633e08cSHans Petter Selasky };
41*b633e08cSHans Petter Selasky 
42*b633e08cSHans Petter Selasky /**
43*b633e08cSHans Petter Selasky  * struct ib_t10_dif_domain - Parameters specific for T10-DIF
44*b633e08cSHans Petter Selasky  *     domain.
45*b633e08cSHans Petter Selasky  * @bg_type: T10-DIF block guard type (CRC|CSUM)
46*b633e08cSHans Petter Selasky  * @pi_interval: protection information interval.
47*b633e08cSHans Petter Selasky  * @bg: seed of guard computation.
48*b633e08cSHans Petter Selasky  * @app_tag: application tag of guard block
49*b633e08cSHans Petter Selasky  * @ref_tag: initial guard block reference tag.
50*b633e08cSHans Petter Selasky  * @ref_remap: Indicate wethear the reftag increments each block
51*b633e08cSHans Petter Selasky  * @app_escape: Indicate to skip block check if apptag=0xffff
52*b633e08cSHans Petter Selasky  * @ref_escape: Indicate to skip block check if reftag=0xffffffff
53*b633e08cSHans Petter Selasky  * @apptag_check_mask: check bitmask of application tag.
54*b633e08cSHans Petter Selasky  */
55*b633e08cSHans Petter Selasky struct ib_t10_dif_domain {
56*b633e08cSHans Petter Selasky 	enum ib_t10_dif_bg_type bg_type;
57*b633e08cSHans Petter Selasky 	u16			pi_interval;
58*b633e08cSHans Petter Selasky 	u16			bg;
59*b633e08cSHans Petter Selasky 	u16			app_tag;
60*b633e08cSHans Petter Selasky 	u32			ref_tag;
61*b633e08cSHans Petter Selasky 	bool			ref_remap;
62*b633e08cSHans Petter Selasky 	bool			app_escape;
63*b633e08cSHans Petter Selasky 	bool			ref_escape;
64*b633e08cSHans Petter Selasky 	u16			apptag_check_mask;
65*b633e08cSHans Petter Selasky };
66*b633e08cSHans Petter Selasky 
67*b633e08cSHans Petter Selasky /**
68*b633e08cSHans Petter Selasky  * struct ib_sig_domain - Parameters for signature domain
69*b633e08cSHans Petter Selasky  * @sig_type: specific signauture type
70*b633e08cSHans Petter Selasky  * @sig: union of all signature domain attributes that may
71*b633e08cSHans Petter Selasky  *     be used to set domain layout.
72*b633e08cSHans Petter Selasky  */
73*b633e08cSHans Petter Selasky struct ib_sig_domain {
74*b633e08cSHans Petter Selasky 	enum ib_signature_type sig_type;
75*b633e08cSHans Petter Selasky 	union {
76*b633e08cSHans Petter Selasky 		struct ib_t10_dif_domain dif;
77*b633e08cSHans Petter Selasky 	} sig;
78*b633e08cSHans Petter Selasky };
79*b633e08cSHans Petter Selasky 
80*b633e08cSHans Petter Selasky /**
81*b633e08cSHans Petter Selasky  * struct ib_sig_attrs - Parameters for signature handover operation
82*b633e08cSHans Petter Selasky  * @check_mask: bitmask for signature byte check (8 bytes)
83*b633e08cSHans Petter Selasky  * @mem: memory domain layout descriptor.
84*b633e08cSHans Petter Selasky  * @wire: wire domain layout descriptor.
85*b633e08cSHans Petter Selasky  * @meta_length: metadata length
86*b633e08cSHans Petter Selasky  */
87*b633e08cSHans Petter Selasky struct ib_sig_attrs {
88*b633e08cSHans Petter Selasky 	u8			check_mask;
89*b633e08cSHans Petter Selasky 	struct ib_sig_domain	mem;
90*b633e08cSHans Petter Selasky 	struct ib_sig_domain	wire;
91*b633e08cSHans Petter Selasky 	int			meta_length;
92*b633e08cSHans Petter Selasky };
93*b633e08cSHans Petter Selasky 
94*b633e08cSHans Petter Selasky enum ib_sig_err_type {
95*b633e08cSHans Petter Selasky 	IB_SIG_BAD_GUARD,
96*b633e08cSHans Petter Selasky 	IB_SIG_BAD_REFTAG,
97*b633e08cSHans Petter Selasky 	IB_SIG_BAD_APPTAG,
98*b633e08cSHans Petter Selasky };
99*b633e08cSHans Petter Selasky 
100*b633e08cSHans Petter Selasky /*
101*b633e08cSHans Petter Selasky  * Signature check masks (8 bytes in total) according to the T10-PI standard:
102*b633e08cSHans Petter Selasky  *  -------- -------- ------------
103*b633e08cSHans Petter Selasky  * | GUARD  | APPTAG |   REFTAG   |
104*b633e08cSHans Petter Selasky  * |  2B    |  2B    |    4B      |
105*b633e08cSHans Petter Selasky  *  -------- -------- ------------
106*b633e08cSHans Petter Selasky  */
107*b633e08cSHans Petter Selasky enum {
108*b633e08cSHans Petter Selasky 	IB_SIG_CHECK_GUARD = 0xc0,
109*b633e08cSHans Petter Selasky 	IB_SIG_CHECK_APPTAG = 0x30,
110*b633e08cSHans Petter Selasky 	IB_SIG_CHECK_REFTAG = 0x0f,
111*b633e08cSHans Petter Selasky };
112*b633e08cSHans Petter Selasky 
113*b633e08cSHans Petter Selasky /*
114*b633e08cSHans Petter Selasky  * struct ib_sig_err - signature error descriptor
115*b633e08cSHans Petter Selasky  */
116*b633e08cSHans Petter Selasky struct ib_sig_err {
117*b633e08cSHans Petter Selasky 	enum ib_sig_err_type	err_type;
118*b633e08cSHans Petter Selasky 	u32			expected;
119*b633e08cSHans Petter Selasky 	u32			actual;
120*b633e08cSHans Petter Selasky 	u64			sig_err_offset;
121*b633e08cSHans Petter Selasky 	u32			key;
122*b633e08cSHans Petter Selasky };
123*b633e08cSHans Petter Selasky 
124*b633e08cSHans Petter Selasky #endif /* _RDMA_SIGNATURE_H_ */
125