Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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_ */