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