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