linux/include/rdma/signature.h
<<
>>
Prefs
   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
  11enum 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
  17enum 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 */
  27enum 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 */
  37enum 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 */
  55struct 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 */
  73struct 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 */
  87struct 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
  94enum 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 */
 107enum {
 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 */
 116struct 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