1*f0129207SStephen Hemminger /* SPDX-License-Identifier: BSD-3-Clause 27525ebd8STal Shnaiderman * Copyright (C) Mellanox Technologies, Ltd. 2001-2020. 37525ebd8STal Shnaiderman */ 4*f0129207SStephen Hemminger 57525ebd8STal Shnaiderman #ifndef __MLX5_WIN_DEFS_H__ 67525ebd8STal Shnaiderman #define __MLX5_WIN_DEFS_H__ 77525ebd8STal Shnaiderman 87525ebd8STal Shnaiderman #ifdef __cplusplus 97525ebd8STal Shnaiderman extern "C" { 107525ebd8STal Shnaiderman #endif 117525ebd8STal Shnaiderman 127525ebd8STal Shnaiderman enum { 137525ebd8STal Shnaiderman MLX5_CQE_OWNER_MASK = 1, 147525ebd8STal Shnaiderman MLX5_CQE_REQ = 0, 157525ebd8STal Shnaiderman MLX5_CQE_RESP_WR_IMM = 1, 167525ebd8STal Shnaiderman MLX5_CQE_RESP_SEND = 2, 177525ebd8STal Shnaiderman MLX5_CQE_RESP_SEND_IMM = 3, 187525ebd8STal Shnaiderman MLX5_CQE_RESP_SEND_INV = 4, 197525ebd8STal Shnaiderman MLX5_CQE_RESIZE_CQ = 5, 207525ebd8STal Shnaiderman MLX5_CQE_NO_PACKET = 6, 217525ebd8STal Shnaiderman MLX5_CQE_REQ_ERR = 13, 227525ebd8STal Shnaiderman MLX5_CQE_RESP_ERR = 14, 237525ebd8STal Shnaiderman MLX5_CQE_INVALID = 15, 247525ebd8STal Shnaiderman }; 25b0f5afabSOphir Munk 26b0f5afabSOphir Munk enum { 27b0f5afabSOphir Munk MLX5_OPCODE_NOP = 0x00, 28b0f5afabSOphir Munk MLX5_OPCODE_SEND_INVAL = 0x01, 29b0f5afabSOphir Munk MLX5_OPCODE_RDMA_WRITE = 0x08, 30b0f5afabSOphir Munk MLX5_OPCODE_RDMA_WRITE_IMM = 0x09, 31b0f5afabSOphir Munk MLX5_OPCODE_SEND = 0x0a, 32b0f5afabSOphir Munk MLX5_OPCODE_SEND_IMM = 0x0b, 33b0f5afabSOphir Munk MLX5_OPCODE_TSO = 0x0e, 34b0f5afabSOphir Munk MLX5_OPCODE_RDMA_READ = 0x10, 35b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_CS = 0x11, 36b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_FA = 0x12, 37b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_MASKED_CS = 0x14, 38b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_MASKED_FA = 0x15, 39b0f5afabSOphir Munk MLX5_OPCODE_FMR = 0x19, 40b0f5afabSOphir Munk MLX5_OPCODE_LOCAL_INVAL = 0x1b, 41b0f5afabSOphir Munk MLX5_OPCODE_CONFIG_CMD = 0x1f, 42b0f5afabSOphir Munk MLX5_OPCODE_UMR = 0x25, 43b0f5afabSOphir Munk MLX5_OPCODE_TAG_MATCHING = 0x28 44b0f5afabSOphir Munk }; 45b0f5afabSOphir Munk 46b0f5afabSOphir Munk enum mlx5dv_cq_init_attr_mask { 47b0f5afabSOphir Munk MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE = 1 << 0, 48b0f5afabSOphir Munk MLX5DV_CQ_INIT_ATTR_MASK_FLAGS = 1 << 1, 49b0f5afabSOphir Munk MLX5DV_CQ_INIT_ATTR_MASK_CQE_SIZE = 1 << 2, 50b0f5afabSOphir Munk }; 51b0f5afabSOphir Munk 52b0f5afabSOphir Munk enum mlx5dv_cqe_comp_res_format { 53b0f5afabSOphir Munk MLX5DV_CQE_RES_FORMAT_HASH = 1 << 0, 54b0f5afabSOphir Munk MLX5DV_CQE_RES_FORMAT_CSUM = 1 << 1, 55b0f5afabSOphir Munk MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX = 1 << 2, 56b0f5afabSOphir Munk }; 57b0f5afabSOphir Munk 58b0f5afabSOphir Munk enum ibv_access_flags { 59b0f5afabSOphir Munk IBV_ACCESS_LOCAL_WRITE = 1, 60b0f5afabSOphir Munk IBV_ACCESS_REMOTE_WRITE = 1 << 1, 61b0f5afabSOphir Munk IBV_ACCESS_REMOTE_READ = 1 << 2, 62b0f5afabSOphir Munk IBV_ACCESS_REMOTE_ATOMIC = 1 << 3, 63b0f5afabSOphir Munk IBV_ACCESS_MW_BIND = 1 << 4, 64b0f5afabSOphir Munk IBV_ACCESS_ZERO_BASED = 1 << 5, 65b0f5afabSOphir Munk IBV_ACCESS_ON_DEMAND = 1 << 6, 66b0f5afabSOphir Munk }; 67b0f5afabSOphir Munk 68b0f5afabSOphir Munk enum mlx5_ib_uapi_devx_create_event_channel_flags { 69b0f5afabSOphir Munk MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA = 1 << 0, 70b0f5afabSOphir Munk }; 71b0f5afabSOphir Munk 72b0f5afabSOphir Munk #define MLX5DV_DEVX_CREATE_EVENT_CHANNEL_FLAGS_OMIT_EV_DATA \ 73b0f5afabSOphir Munk MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA 74b0f5afabSOphir Munk 75b0f5afabSOphir Munk enum { 76b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_LENGTH_ERR = 0x01, 77b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR = 0x02, 78b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_PROT_ERR = 0x04, 79b0f5afabSOphir Munk MLX5_CQE_SYNDROME_WR_FLUSH_ERR = 0x05, 80b0f5afabSOphir Munk MLX5_CQE_SYNDROME_MW_BIND_ERR = 0x06, 81b0f5afabSOphir Munk MLX5_CQE_SYNDROME_BAD_RESP_ERR = 0x10, 82b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_ACCESS_ERR = 0x11, 83b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR = 0x12, 84b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_ACCESS_ERR = 0x13, 85b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_OP_ERR = 0x14, 86b0f5afabSOphir Munk MLX5_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR = 0x15, 87b0f5afabSOphir Munk MLX5_CQE_SYNDROME_RNR_RETRY_EXC_ERR = 0x16, 88b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_ABORTED_ERR = 0x22, 89b0f5afabSOphir Munk }; 90b0f5afabSOphir Munk 91b0f5afabSOphir Munk enum { 92b0f5afabSOphir Munk MLX5_ETH_WQE_L3_CSUM = (1 << 6), 93b0f5afabSOphir Munk MLX5_ETH_WQE_L4_CSUM = (1 << 7), 94b0f5afabSOphir Munk }; 95b0f5afabSOphir Munk 96b0f5afabSOphir Munk /* 97b0f5afabSOphir Munk * RX Hash fields enable to set which incoming packet's field should 98b0f5afabSOphir Munk * participates in RX Hash. Each flag represent certain packet's field, 99b0f5afabSOphir Munk * when the flag is set the field that is represented by the flag will 100b0f5afabSOphir Munk * participate in RX Hash calculation. 101b0f5afabSOphir Munk * Note: IPV4 and IPV6 flags can't be enabled together on the same QP, 102b0f5afabSOphir Munk * TCP and UDP flags can't be enabled together on the same QP. 103b0f5afabSOphir Munk */ 104b0f5afabSOphir Munk enum ibv_rx_hash_fields { 105b0f5afabSOphir Munk IBV_RX_HASH_SRC_IPV4 = 1 << 0, 106b0f5afabSOphir Munk IBV_RX_HASH_DST_IPV4 = 1 << 1, 107b0f5afabSOphir Munk IBV_RX_HASH_SRC_IPV6 = 1 << 2, 108b0f5afabSOphir Munk IBV_RX_HASH_DST_IPV6 = 1 << 3, 109b0f5afabSOphir Munk IBV_RX_HASH_SRC_PORT_TCP = 1 << 4, 110b0f5afabSOphir Munk IBV_RX_HASH_DST_PORT_TCP = 1 << 5, 111b0f5afabSOphir Munk IBV_RX_HASH_SRC_PORT_UDP = 1 << 6, 112b0f5afabSOphir Munk IBV_RX_HASH_DST_PORT_UDP = 1 << 7, 113b0f5afabSOphir Munk IBV_RX_HASH_IPSEC_SPI = 1 << 8, 114b0f5afabSOphir Munk IBV_RX_HASH_INNER = (1 << 31), 115b0f5afabSOphir Munk }; 116b0f5afabSOphir Munk 117b0f5afabSOphir Munk enum { 118b0f5afabSOphir Munk MLX5_RCV_DBR = 0, 119b0f5afabSOphir Munk MLX5_SND_DBR = 1, 120b0f5afabSOphir Munk }; 121b0f5afabSOphir Munk 122b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 123b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 0x0 124b0f5afabSOphir Munk #endif 125b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL 126b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL 0x1 127b0f5afabSOphir Munk #endif 128b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 129b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 0x2 130b0f5afabSOphir Munk #endif 131b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL 132b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL 0x3 133b0f5afabSOphir Munk #endif 134b0f5afabSOphir Munk 13503e1f7f7SOphir Munk enum ibv_flow_flags { 13603e1f7f7SOphir Munk IBV_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK = 1 << 0, 13703e1f7f7SOphir Munk IBV_FLOW_ATTR_FLAGS_DONT_TRAP = 1 << 1, 13803e1f7f7SOphir Munk IBV_FLOW_ATTR_FLAGS_EGRESS = 1 << 2, 13903e1f7f7SOphir Munk }; 14003e1f7f7SOphir Munk 14103e1f7f7SOphir Munk enum ibv_flow_attr_type { 14203e1f7f7SOphir Munk /* Steering according to rule specifications. */ 14303e1f7f7SOphir Munk IBV_FLOW_ATTR_NORMAL = 0x0, 14403e1f7f7SOphir Munk /* 14503e1f7f7SOphir Munk * Default unicast and multicast rule - 14603e1f7f7SOphir Munk * receive all Eth traffic which isn't steered to any QP. 14703e1f7f7SOphir Munk */ 14803e1f7f7SOphir Munk IBV_FLOW_ATTR_ALL_DEFAULT = 0x1, 14903e1f7f7SOphir Munk /* 15003e1f7f7SOphir Munk * Default multicast rule - 15103e1f7f7SOphir Munk * receive all Eth multicast traffic which isn't steered to any QP. 15203e1f7f7SOphir Munk */ 15303e1f7f7SOphir Munk IBV_FLOW_ATTR_MC_DEFAULT = 0x2, 15403e1f7f7SOphir Munk /* Sniffer rule - receive all port traffic. */ 15503e1f7f7SOphir Munk IBV_FLOW_ATTR_SNIFFER = 0x3, 15603e1f7f7SOphir Munk }; 15703e1f7f7SOphir Munk 15803e1f7f7SOphir Munk enum mlx5dv_flow_table_type { 15903e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX = 0x0, 16003e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX = 0x1, 16103e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB = 0x2, 16203e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX = 0x3, 16303e1f7f7SOphir Munk }; 16403e1f7f7SOphir Munk 16503e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_NIC_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX 16603e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_NIC_TX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX 16703e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_FDB MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB 16803e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_RDMA_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX 16903e1f7f7SOphir Munk 17003e1f7f7SOphir Munk struct mlx5dv_flow_match_parameters { 17103e1f7f7SOphir Munk size_t match_sz; 17203e1f7f7SOphir Munk uint64_t match_buf[]; /* Device spec format */ 17303e1f7f7SOphir Munk }; 17403e1f7f7SOphir Munk 17503e1f7f7SOphir Munk struct mlx5dv_flow_matcher_attr { 17603e1f7f7SOphir Munk enum ibv_flow_attr_type type; 17703e1f7f7SOphir Munk uint32_t flags; /* From enum ibv_flow_flags. */ 17803e1f7f7SOphir Munk uint16_t priority; 17903e1f7f7SOphir Munk uint8_t match_criteria_enable; /* Device spec format. */ 18003e1f7f7SOphir Munk struct mlx5dv_flow_match_parameters *match_mask; 18103e1f7f7SOphir Munk uint64_t comp_mask; /* Use mlx5dv_flow_matcher_attr_mask. */ 18203e1f7f7SOphir Munk enum mlx5dv_flow_table_type ft_type; 18303e1f7f7SOphir Munk }; 18403e1f7f7SOphir Munk 18503e1f7f7SOphir Munk /* Windows specific mlx5_matcher. */ 18603e1f7f7SOphir Munk struct mlx5_matcher { 18703e1f7f7SOphir Munk void *ctx; 18803e1f7f7SOphir Munk struct mlx5dv_flow_matcher_attr attr; 18903e1f7f7SOphir Munk uint64_t match_buf[]; 19003e1f7f7SOphir Munk }; 19103e1f7f7SOphir Munk 19268e28591SOphir Munk /* 19368e28591SOphir Munk * Windows mlx5_action. This struct is the 19468e28591SOphir Munk * equivalent of rdma-core struct mlx5dv_dr_action. 19568e28591SOphir Munk */ 19668e28591SOphir Munk struct mlx5_action { 19768e28591SOphir Munk int type; 19868e28591SOphir Munk struct { 19968e28591SOphir Munk uint32_t id; 20068e28591SOphir Munk } dest_tir; 20168e28591SOphir Munk }; 20268e28591SOphir Munk 203b0f5afabSOphir Munk struct mlx5_err_cqe { 204b0f5afabSOphir Munk uint8_t rsvd0[32]; 205b0f5afabSOphir Munk uint32_t srqn; 206b0f5afabSOphir Munk uint8_t rsvd1[18]; 207b0f5afabSOphir Munk uint8_t vendor_err_synd; 208b0f5afabSOphir Munk uint8_t syndrome; 209b0f5afabSOphir Munk uint32_t s_wqe_opcode_qpn; 210b0f5afabSOphir Munk uint16_t wqe_counter; 211b0f5afabSOphir Munk uint8_t signature; 212b0f5afabSOphir Munk uint8_t op_own; 213b0f5afabSOphir Munk }; 214b0f5afabSOphir Munk 215b0f5afabSOphir Munk struct mlx5_wqe_srq_next_seg { 216b0f5afabSOphir Munk uint8_t rsvd0[2]; 217b0f5afabSOphir Munk rte_be16_t next_wqe_index; 218b0f5afabSOphir Munk uint8_t signature; 219b0f5afabSOphir Munk uint8_t rsvd1[11]; 220b0f5afabSOphir Munk }; 221b0f5afabSOphir Munk 222b0f5afabSOphir Munk enum ibv_wq_state { 223b0f5afabSOphir Munk IBV_WQS_RESET, 224b0f5afabSOphir Munk IBV_WQS_RDY, 225b0f5afabSOphir Munk IBV_WQS_ERR, 226b0f5afabSOphir Munk IBV_WQS_UNKNOWN 227b0f5afabSOphir Munk }; 228b0f5afabSOphir Munk 229b0f5afabSOphir Munk struct mlx5_wqe_data_seg { 230b0f5afabSOphir Munk rte_be32_t byte_count; 231b0f5afabSOphir Munk rte_be32_t lkey; 232b0f5afabSOphir Munk rte_be64_t addr; 233b0f5afabSOphir Munk }; 23493f4ece9SOphir Munk 23593f4ece9SOphir Munk #define MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP (1 << 4) 23693f4ece9SOphir Munk #define IBV_DEVICE_RAW_IP_CSUM (1 << 26) 23793f4ece9SOphir Munk #define IBV_RAW_PACKET_CAP_CVLAN_STRIPPING (1 << 0) 23893f4ece9SOphir Munk #define IBV_RAW_PACKET_CAP_SCATTER_FCS (1 << 1) 23993f4ece9SOphir Munk #define IBV_QPT_RAW_PACKET 8 24088259515SOphir Munk 24188259515SOphir Munk enum { 24288259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_VPORT = 0x0, 24388259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_FLOW_TABLE = 0x1, 24488259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_TIR = 0x2, 24588259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_QP = 0x3, 24688259515SOphir Munk }; 24768e28591SOphir Munk 24868e28591SOphir Munk enum { 24968e28591SOphir Munk MLX5_MATCH_OUTER_HEADERS = 1 << 0, 25068e28591SOphir Munk MLX5_MATCH_MISC_PARAMETERS = 1 << 1, 25168e28591SOphir Munk MLX5_MATCH_INNER_HEADERS = 1 << 2, 25268e28591SOphir Munk }; 2537525ebd8STal Shnaiderman #endif /* __MLX5_WIN_DEFS_H__ */ 254