cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

signature.h (2969B)


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