brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · d16b0fc Raw
125 lines · c
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 types24 * @IB_SIG_TYPE_NONE: Unprotected.25 * @IB_SIG_TYPE_T10_DIF: Type T10-DIF26 */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 types34 * @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-DIF44 *     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 block49 * @ref_tag: initial guard block reference tag.50 * @ref_remap: Indicate wethear the reftag increments each block51 * @app_escape: Indicate to skip block check if apptag=0xffff52 * @ref_escape: Indicate to skip block check if reftag=0xffffffff53 * @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 domain69 * @sig_type: specific signauture type70 * @sig: union of all signature domain attributes that may71 *     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 operation82 * @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 length86 */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 descriptor115 */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