root/include/rdma/signature.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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_ */

/* [<][>][^][v][top][bottom][index][help] */