| /* |
| * Copyright (c) 2012 Mellanox Technologies, Inc. All rights reserved. |
| * |
| * This software is available to you under a choice of one of two |
| * licenses. You may choose to be licensed under the terms of the GNU |
| * General Public License (GPL) Version 2, available from the file |
| * COPYING in the main directory of this source tree, or the |
| * OpenIB.org BSD license below: |
| * |
| * Redistribution and use in source and binary forms, with or |
| * without modification, are permitted provided that the following |
| * conditions are met: |
| * |
| * - Redistributions of source code must retain the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer in the documentation and/or other materials |
| * provided with the distribution. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| * SOFTWARE. |
| */ |
| |
| #ifndef WQE_H |
| #define WQE_H |
| |
| #include <stdint.h> |
| |
| #include "mlx5dv.h" |
| |
| struct mlx5_sg_copy_ptr { |
| int index; |
| int offset; |
| }; |
| |
| struct mlx5_eqe_comp { |
| uint32_t reserved[6]; |
| uint32_t cqn; |
| }; |
| |
| struct mlx5_eqe_qp_srq { |
| uint32_t reserved[6]; |
| uint32_t qp_srq_n; |
| }; |
| |
| struct mlx5_wqe_eth_pad { |
| uint8_t rsvd0[16]; |
| }; |
| |
| struct mlx5_wqe_xrc_seg { |
| __be32 xrc_srqn; |
| uint8_t rsvd[12]; |
| }; |
| |
| struct mlx5_wqe_masked_atomic_seg { |
| uint64_t swap_add; |
| uint64_t compare; |
| uint64_t swap_add_mask; |
| uint64_t compare_mask; |
| }; |
| |
| enum { |
| MLX5_IPOIB_INLINE_MIN_HEADER_SIZE = 4, |
| MLX5_SOURCE_QPN_INLINE_MAX_HEADER_SIZE = 18, |
| MLX5_ETH_L2_INLINE_HEADER_SIZE = 18, |
| MLX5_ETH_L2_MIN_HEADER_SIZE = 14, |
| }; |
| |
| struct mlx5_seg_set_psv { |
| uint8_t rsvd[4]; |
| uint16_t syndrome; |
| uint16_t status; |
| uint16_t block_guard; |
| uint16_t app_tag; |
| uint32_t ref_tag; |
| uint32_t mkey; |
| uint64_t va; |
| }; |
| |
| struct mlx5_seg_get_psv { |
| uint8_t rsvd[19]; |
| uint8_t num_psv; |
| uint32_t l_key; |
| uint64_t va; |
| uint32_t psv_index[4]; |
| }; |
| |
| struct mlx5_seg_check_psv { |
| uint8_t rsvd0[2]; |
| uint16_t err_coalescing_op; |
| uint8_t rsvd1[2]; |
| uint16_t xport_err_op; |
| uint8_t rsvd2[2]; |
| uint16_t xport_err_mask; |
| uint8_t rsvd3[7]; |
| uint8_t num_psv; |
| uint32_t l_key; |
| uint64_t va; |
| uint32_t psv_index[4]; |
| }; |
| |
| struct mlx5_rwqe_sig { |
| uint8_t rsvd0[4]; |
| uint8_t signature; |
| uint8_t rsvd1[11]; |
| }; |
| |
| struct mlx5_wqe_signature_seg { |
| uint8_t rsvd0[4]; |
| uint8_t signature; |
| uint8_t rsvd1[11]; |
| }; |
| |
| struct mlx5_wqe_inline_seg { |
| __be32 byte_count; |
| }; |
| |
| enum { |
| MLX5_WQE_MKEY_CONTEXT_FLAGS_BSF_ENABLE = 1 << 30, |
| MLX5_WQE_MKEY_CONTEXT_SIG_ERR_CNT_MASK = 1, |
| MLX5_WQE_MKEY_CONTEXT_SIG_ERR_CNT_SHIFT = 26, |
| }; |
| |
| enum { |
| MLX5_BSF_SIZE_BASIC = 0, |
| MLX5_BSF_SIZE_EXTENDED = 1, |
| MLX5_BSF_SIZE_WITH_INLINE = 2, |
| MLX5_BSF_SIZE_SIG_AND_CRYPTO = 3, |
| MLX5_BSF_TYPE_CRYPTO = 1, |
| MLX5_BSF_SIZE_SHIFT = 6, |
| MLX5_BSF_SBS_SHIFT = 4, |
| |
| /* Block Format Selector */ |
| MLX5_BFS_CRC32_BASE = 0x20, |
| MLX5_BFS_CRC32C_BASE = 0x40, |
| MLX5_BFS_CRC64_XP10_BASE = 0x50, |
| MLX5_BFS_CRC_REPEAT_BIT = 0x2, |
| MLX5_BFS_CRC_BLOCK_SIGS_COV_BIT = 0x2, |
| MLX5_BFS_CRC_SEED_BIT = 0x1, |
| MLX5_BFS_SHIFT = 24, |
| |
| MLX5_BSF_PSV_INDEX_MASK = 0xFFFFFF, |
| /* Inline section */ |
| MLX5_BSF_INL_VALID = 1 << 15, |
| MLX5_BSF_REFRESH_DIF = 1 << 14, |
| MLX5_BSF_REPEAT_BLOCK = 1 << 7, |
| MLX5_BSF_INC_REFTAG = 1 << 6, |
| MLX5_BSF_SEED = 1 << 3, |
| MLX5_BSF_APPTAG_ESCAPE = 0x1, |
| MLX5_BSF_APPREF_ESCAPE = 0x2, |
| MLX5_T10DIF_CRC = 0x1, |
| MLX5_T10DIF_IPCS = 0x2, |
| }; |
| |
| struct mlx5_bsf_inl { |
| __be16 vld_refresh; |
| __be16 dif_apptag; |
| __be32 dif_reftag; |
| uint8_t sig_type; |
| uint8_t rp_inv_seed; |
| uint8_t rsvd[3]; |
| uint8_t dif_inc_ref_guard_check; |
| __be16 dif_app_bitmask_check; |
| }; |
| |
| struct mlx5_crypto_bsf { |
| uint8_t bsf_size_type; |
| uint8_t enc_order; |
| uint8_t rsvd0; |
| uint8_t enc_standard; |
| __be32 raw_data_size; |
| uint8_t bs_pointer; |
| uint8_t rsvd1[7]; |
| __be32 xts_init_tweak[4]; |
| __be32 rsvd_dek_ptr; |
| uint8_t rsvd2[4]; |
| uint8_t keytag[8]; |
| uint8_t rsvd3[16]; |
| }; |
| |
| struct mlx5_bsf { |
| struct mlx5_bsf_basic { |
| uint8_t bsf_size_sbs; |
| uint8_t check_byte_mask; |
| union { |
| uint8_t copy_byte_mask; |
| uint8_t bs_selector; |
| uint8_t rsvd_wflags; |
| } wire; |
| union { |
| uint8_t bs_selector; |
| uint8_t rsvd_mflags; |
| } mem; |
| __be32 raw_data_size; |
| __be32 w_bfs_psv; |
| __be32 m_bfs_psv; |
| } basic; |
| struct mlx5_bsf_ext { |
| __be32 t_init_gen_pro_size; |
| __be32 rsvd_epi_size; |
| __be32 w_tfs_psv; |
| __be32 m_tfs_psv; |
| } ext; |
| struct mlx5_bsf_inl w_inl; |
| struct mlx5_bsf_inl m_inl; |
| }; |
| |
| struct mlx5_wqe_set_psv_seg { |
| __be32 psv_index; |
| __be16 syndrome; |
| uint8_t reserved[2]; |
| __be64 transient_signature; |
| }; |
| |
| enum { |
| MLX5_OPC_MOD_MMO_DMA = 0x1, |
| }; |
| |
| struct mlx5_mmo_metadata_seg { |
| __be32 mmo_control_31_0; |
| __be32 local_key; |
| __be64 local_address; |
| }; |
| |
| struct mlx5_mmo_wqe { |
| struct mlx5_wqe_ctrl_seg ctrl; |
| struct mlx5_mmo_metadata_seg mmo_meta; |
| struct mlx5_wqe_data_seg src; |
| struct mlx5_wqe_data_seg dest; |
| }; |
| |
| struct mlx5_wqe_flow_update_ctrl_seg { |
| __be32 flow_idx_update; |
| __be32 dest_handle; |
| uint8_t reserved0[40]; |
| }; |
| |
| struct mlx5_wqe_header_modify_argument_update_seg { |
| uint8_t argument_list[64]; |
| }; |
| |
| #endif /* WQE_H */ |