forked from mirrors/linux
		
	So that rdma can work with CONFIG_KERNEL_HEADER_TEST and CONFIG_HEADERS_CHECK. Link: https://lore.kernel.org/r/20190722170126.GA16453@ziepe.ca Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB) */
 | 
						|
/*
 | 
						|
 * Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _RDMA_SIGNATURE_H_
 | 
						|
#define _RDMA_SIGNATURE_H_
 | 
						|
 | 
						|
#include <linux/types.h>
 | 
						|
 | 
						|
enum ib_signature_prot_cap {
 | 
						|
	IB_PROT_T10DIF_TYPE_1 = 1,
 | 
						|
	IB_PROT_T10DIF_TYPE_2 = 1 << 1,
 | 
						|
	IB_PROT_T10DIF_TYPE_3 = 1 << 2,
 | 
						|
};
 | 
						|
 | 
						|
enum ib_signature_guard_cap {
 | 
						|
	IB_GUARD_T10DIF_CRC	= 1,
 | 
						|
	IB_GUARD_T10DIF_CSUM	= 1 << 1,
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * enum ib_signature_type - Signature types
 | 
						|
 * @IB_SIG_TYPE_NONE: Unprotected.
 | 
						|
 * @IB_SIG_TYPE_T10_DIF: Type T10-DIF
 | 
						|
 */
 | 
						|
enum ib_signature_type {
 | 
						|
	IB_SIG_TYPE_NONE,
 | 
						|
	IB_SIG_TYPE_T10_DIF,
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * enum ib_t10_dif_bg_type - Signature T10-DIF block-guard types
 | 
						|
 * @IB_T10DIF_CRC: Corresponds to T10-PI mandated CRC checksum rules.
 | 
						|
 * @IB_T10DIF_CSUM: Corresponds to IP checksum rules.
 | 
						|
 */
 | 
						|
enum ib_t10_dif_bg_type {
 | 
						|
	IB_T10DIF_CRC,
 | 
						|
	IB_T10DIF_CSUM,
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * struct ib_t10_dif_domain - Parameters specific for T10-DIF
 | 
						|
 *     domain.
 | 
						|
 * @bg_type: T10-DIF block guard type (CRC|CSUM)
 | 
						|
 * @pi_interval: protection information interval.
 | 
						|
 * @bg: seed of guard computation.
 | 
						|
 * @app_tag: application tag of guard block
 | 
						|
 * @ref_tag: initial guard block reference tag.
 | 
						|
 * @ref_remap: Indicate wethear the reftag increments each block
 | 
						|
 * @app_escape: Indicate to skip block check if apptag=0xffff
 | 
						|
 * @ref_escape: Indicate to skip block check if reftag=0xffffffff
 | 
						|
 * @apptag_check_mask: check bitmask of application tag.
 | 
						|
 */
 | 
						|
struct ib_t10_dif_domain {
 | 
						|
	enum ib_t10_dif_bg_type bg_type;
 | 
						|
	u16			pi_interval;
 | 
						|
	u16			bg;
 | 
						|
	u16			app_tag;
 | 
						|
	u32			ref_tag;
 | 
						|
	bool			ref_remap;
 | 
						|
	bool			app_escape;
 | 
						|
	bool			ref_escape;
 | 
						|
	u16			apptag_check_mask;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * struct ib_sig_domain - Parameters for signature domain
 | 
						|
 * @sig_type: specific signauture type
 | 
						|
 * @sig: union of all signature domain attributes that may
 | 
						|
 *     be used to set domain layout.
 | 
						|
 */
 | 
						|
struct ib_sig_domain {
 | 
						|
	enum ib_signature_type sig_type;
 | 
						|
	union {
 | 
						|
		struct ib_t10_dif_domain dif;
 | 
						|
	} sig;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * struct ib_sig_attrs - Parameters for signature handover operation
 | 
						|
 * @check_mask: bitmask for signature byte check (8 bytes)
 | 
						|
 * @mem: memory domain layout descriptor.
 | 
						|
 * @wire: wire domain layout descriptor.
 | 
						|
 * @meta_length: metadata length
 | 
						|
 */
 | 
						|
struct ib_sig_attrs {
 | 
						|
	u8			check_mask;
 | 
						|
	struct ib_sig_domain	mem;
 | 
						|
	struct ib_sig_domain	wire;
 | 
						|
	int			meta_length;
 | 
						|
};
 | 
						|
 | 
						|
enum ib_sig_err_type {
 | 
						|
	IB_SIG_BAD_GUARD,
 | 
						|
	IB_SIG_BAD_REFTAG,
 | 
						|
	IB_SIG_BAD_APPTAG,
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * Signature check masks (8 bytes in total) according to the T10-PI standard:
 | 
						|
 *  -------- -------- ------------
 | 
						|
 * | GUARD  | APPTAG |   REFTAG   |
 | 
						|
 * |  2B    |  2B    |    4B      |
 | 
						|
 *  -------- -------- ------------
 | 
						|
 */
 | 
						|
enum {
 | 
						|
	IB_SIG_CHECK_GUARD = 0xc0,
 | 
						|
	IB_SIG_CHECK_APPTAG = 0x30,
 | 
						|
	IB_SIG_CHECK_REFTAG = 0x0f,
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * struct ib_sig_err - signature error descriptor
 | 
						|
 */
 | 
						|
struct ib_sig_err {
 | 
						|
	enum ib_sig_err_type	err_type;
 | 
						|
	u32			expected;
 | 
						|
	u32			actual;
 | 
						|
	u64			sig_err_offset;
 | 
						|
	u32			key;
 | 
						|
};
 | 
						|
 | 
						|
#endif /* _RDMA_SIGNATURE_H_ */
 |