1f0129207SStephen Hemminger /* SPDX-License-Identifier: BSD-3-Clause 27525ebd8STal Shnaiderman * Copyright (C) Mellanox Technologies, Ltd. 2001-2020. 37525ebd8STal Shnaiderman */ 4f0129207SStephen Hemminger 58ce24f0cSThomas Monjalon #ifndef MLX5_WIN_DEFS_H 68ce24f0cSThomas Monjalon #define MLX5_WIN_DEFS_H 78ce24f0cSThomas Monjalon 88ce24f0cSThomas Monjalon #include <rte_bitops.h> 97525ebd8STal Shnaiderman 107525ebd8STal Shnaiderman enum { 117525ebd8STal Shnaiderman MLX5_CQE_OWNER_MASK = 1, 127525ebd8STal Shnaiderman MLX5_CQE_REQ = 0, 137525ebd8STal Shnaiderman MLX5_CQE_RESP_WR_IMM = 1, 147525ebd8STal Shnaiderman MLX5_CQE_RESP_SEND = 2, 157525ebd8STal Shnaiderman MLX5_CQE_RESP_SEND_IMM = 3, 167525ebd8STal Shnaiderman MLX5_CQE_RESP_SEND_INV = 4, 177525ebd8STal Shnaiderman MLX5_CQE_RESIZE_CQ = 5, 187525ebd8STal Shnaiderman MLX5_CQE_NO_PACKET = 6, 197525ebd8STal Shnaiderman MLX5_CQE_REQ_ERR = 13, 207525ebd8STal Shnaiderman MLX5_CQE_RESP_ERR = 14, 217525ebd8STal Shnaiderman MLX5_CQE_INVALID = 15, 227525ebd8STal Shnaiderman }; 23b0f5afabSOphir Munk 24b0f5afabSOphir Munk enum { 25b0f5afabSOphir Munk MLX5_OPCODE_NOP = 0x00, 26b0f5afabSOphir Munk MLX5_OPCODE_SEND_INVAL = 0x01, 27b0f5afabSOphir Munk MLX5_OPCODE_RDMA_WRITE = 0x08, 28b0f5afabSOphir Munk MLX5_OPCODE_RDMA_WRITE_IMM = 0x09, 29b0f5afabSOphir Munk MLX5_OPCODE_SEND = 0x0a, 30b0f5afabSOphir Munk MLX5_OPCODE_SEND_IMM = 0x0b, 31b0f5afabSOphir Munk MLX5_OPCODE_TSO = 0x0e, 32b0f5afabSOphir Munk MLX5_OPCODE_RDMA_READ = 0x10, 33b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_CS = 0x11, 34b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_FA = 0x12, 35b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_MASKED_CS = 0x14, 36b0f5afabSOphir Munk MLX5_OPCODE_ATOMIC_MASKED_FA = 0x15, 37b0f5afabSOphir Munk MLX5_OPCODE_FMR = 0x19, 38b0f5afabSOphir Munk MLX5_OPCODE_LOCAL_INVAL = 0x1b, 39b0f5afabSOphir Munk MLX5_OPCODE_CONFIG_CMD = 0x1f, 40b0f5afabSOphir Munk MLX5_OPCODE_UMR = 0x25, 41b0f5afabSOphir Munk MLX5_OPCODE_TAG_MATCHING = 0x28 42b0f5afabSOphir Munk }; 43b0f5afabSOphir Munk 44b0f5afabSOphir Munk enum mlx5dv_cq_init_attr_mask { 458ce24f0cSThomas Monjalon MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE = RTE_BIT32(0), 468ce24f0cSThomas Monjalon MLX5DV_CQ_INIT_ATTR_MASK_FLAG = RTE_BIT32(1), 478ce24f0cSThomas Monjalon MLX5DV_CQ_INIT_ATTR_MASK_CQE_SIZE = RTE_BIT32(2), 48b0f5afabSOphir Munk }; 49b0f5afabSOphir Munk 50b0f5afabSOphir Munk enum mlx5dv_cqe_comp_res_format { 518ce24f0cSThomas Monjalon MLX5DV_CQE_RES_FORMAT_HASH = RTE_BIT32(0), 528ce24f0cSThomas Monjalon MLX5DV_CQE_RES_FORMAT_CSUM = RTE_BIT32(1), 538ce24f0cSThomas Monjalon MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX = RTE_BIT32(2), 54b0f5afabSOphir Munk }; 55b0f5afabSOphir Munk 56b0f5afabSOphir Munk enum ibv_access_flags { 578ce24f0cSThomas Monjalon IBV_ACCESS_LOCAL_WRITE = RTE_BIT32(0), 588ce24f0cSThomas Monjalon IBV_ACCESS_REMOTE_WRITE = RTE_BIT32(1), 598ce24f0cSThomas Monjalon IBV_ACCESS_REMOTE_READ = RTE_BIT32(2), 608ce24f0cSThomas Monjalon IBV_ACCESS_REMOTE_ATOMIC = RTE_BIT32(3), 618ce24f0cSThomas Monjalon IBV_ACCESS_MW_BIND = RTE_BIT32(4), 628ce24f0cSThomas Monjalon IBV_ACCESS_ZERO_BASED = RTE_BIT32(5), 638ce24f0cSThomas Monjalon IBV_ACCESS_ON_DEMAND = RTE_BIT32(6), 64b0f5afabSOphir Munk }; 65b0f5afabSOphir Munk 66b0f5afabSOphir Munk enum mlx5_ib_uapi_devx_create_event_channel_flags { 678ce24f0cSThomas Monjalon MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA = RTE_BIT32(0), 68b0f5afabSOphir Munk }; 69b0f5afabSOphir Munk 70b0f5afabSOphir Munk #define MLX5DV_DEVX_CREATE_EVENT_CHANNEL_FLAGS_OMIT_EV_DATA \ 71b0f5afabSOphir Munk MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA 72b0f5afabSOphir Munk 73b0f5afabSOphir Munk enum { 74b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_LENGTH_ERR = 0x01, 75b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR = 0x02, 76b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_PROT_ERR = 0x04, 77b0f5afabSOphir Munk MLX5_CQE_SYNDROME_WR_FLUSH_ERR = 0x05, 78b0f5afabSOphir Munk MLX5_CQE_SYNDROME_MW_BIND_ERR = 0x06, 79b0f5afabSOphir Munk MLX5_CQE_SYNDROME_BAD_RESP_ERR = 0x10, 80b0f5afabSOphir Munk MLX5_CQE_SYNDROME_LOCAL_ACCESS_ERR = 0x11, 81b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR = 0x12, 82b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_ACCESS_ERR = 0x13, 83b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_OP_ERR = 0x14, 84b0f5afabSOphir Munk MLX5_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR = 0x15, 85b0f5afabSOphir Munk MLX5_CQE_SYNDROME_RNR_RETRY_EXC_ERR = 0x16, 86b0f5afabSOphir Munk MLX5_CQE_SYNDROME_REMOTE_ABORTED_ERR = 0x22, 87b0f5afabSOphir Munk }; 88b0f5afabSOphir Munk 89b0f5afabSOphir Munk enum { 908ce24f0cSThomas Monjalon MLX5_ETH_WQE_L3_CSUM = RTE_BIT32(6), 918ce24f0cSThomas Monjalon MLX5_ETH_WQE_L4_CSUM = RTE_BIT32(7), 92b0f5afabSOphir Munk }; 93b0f5afabSOphir Munk 9411f99cfcSTal Shnaiderman enum { 958ce24f0cSThomas Monjalon MLX5_WQE_CTRL_SOLICITED = RTE_BIT32(1), 968ce24f0cSThomas Monjalon MLX5_WQE_CTRL_CQ_UPDATE = RTE_BIT32(3), 978ce24f0cSThomas Monjalon MLX5_WQE_CTRL_INITIATOR_SMALL_FENCE = RTE_BIT32(5), 988ce24f0cSThomas Monjalon MLX5_WQE_CTRL_FENCE = RTE_BIT32(7), 9911f99cfcSTal Shnaiderman }; 10011f99cfcSTal Shnaiderman 10111f99cfcSTal Shnaiderman enum { 10211f99cfcSTal Shnaiderman MLX5_SEND_WQE_BB = 64, 10311f99cfcSTal Shnaiderman MLX5_SEND_WQE_SHIFT = 6, 10411f99cfcSTal Shnaiderman }; 10511f99cfcSTal Shnaiderman 1068ce24f0cSThomas Monjalon /* Verbs headers do not support -pedantic. */ 1078ce24f0cSThomas Monjalon #ifdef PEDANTIC 1088ce24f0cSThomas Monjalon #pragma GCC diagnostic ignored "-Wpedantic" 1098ce24f0cSThomas Monjalon #endif 1108ce24f0cSThomas Monjalon 111b0f5afabSOphir Munk /* 112b0f5afabSOphir Munk * RX Hash fields enable to set which incoming packet's field should 113b0f5afabSOphir Munk * participates in RX Hash. Each flag represent certain packet's field, 114b0f5afabSOphir Munk * when the flag is set the field that is represented by the flag will 115b0f5afabSOphir Munk * participate in RX Hash calculation. 116b0f5afabSOphir Munk * Note: IPV4 and IPV6 flags can't be enabled together on the same QP, 117b0f5afabSOphir Munk * TCP and UDP flags can't be enabled together on the same QP. 118b0f5afabSOphir Munk */ 119b0f5afabSOphir Munk enum ibv_rx_hash_fields { 1208ce24f0cSThomas Monjalon IBV_RX_HASH_SRC_IPV4 = RTE_BIT32(0), 1218ce24f0cSThomas Monjalon IBV_RX_HASH_DST_IPV4 = RTE_BIT32(1), 1228ce24f0cSThomas Monjalon IBV_RX_HASH_SRC_IPV6 = RTE_BIT32(2), 1238ce24f0cSThomas Monjalon IBV_RX_HASH_DST_IPV6 = RTE_BIT32(3), 1248ce24f0cSThomas Monjalon IBV_RX_HASH_SRC_PORT_TCP = RTE_BIT32(4), 1258ce24f0cSThomas Monjalon IBV_RX_HASH_DST_PORT_TCP = RTE_BIT32(5), 1268ce24f0cSThomas Monjalon IBV_RX_HASH_SRC_PORT_UDP = RTE_BIT32(6), 1278ce24f0cSThomas Monjalon IBV_RX_HASH_DST_PORT_UDP = RTE_BIT32(7), 1288ce24f0cSThomas Monjalon IBV_RX_HASH_IPSEC_SPI = RTE_BIT32(8), 1298ce24f0cSThomas Monjalon IBV_RX_HASH_INNER = RTE_BIT32(31), 130b0f5afabSOphir Munk }; 131b0f5afabSOphir Munk 1328ce24f0cSThomas Monjalon #ifdef PEDANTIC 1338ce24f0cSThomas Monjalon #pragma GCC diagnostic error "-Wpedantic" 1348ce24f0cSThomas Monjalon #endif 1358ce24f0cSThomas Monjalon 136b0f5afabSOphir Munk enum { 137b0f5afabSOphir Munk MLX5_RCV_DBR = 0, 138b0f5afabSOphir Munk MLX5_SND_DBR = 1, 139b0f5afabSOphir Munk }; 140b0f5afabSOphir Munk 141b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 142b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 0x0 143b0f5afabSOphir Munk #endif 144b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL 145b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL 0x1 146b0f5afabSOphir Munk #endif 147b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 148b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 0x2 149b0f5afabSOphir Munk #endif 150b0f5afabSOphir Munk #ifndef MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL 151b0f5afabSOphir Munk #define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL 0x3 152b0f5afabSOphir Munk #endif 153b0f5afabSOphir Munk 15403e1f7f7SOphir Munk enum ibv_flow_flags { 1558ce24f0cSThomas Monjalon IBV_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK = RTE_BIT32(0), 1568ce24f0cSThomas Monjalon IBV_FLOW_ATTR_FLAGS_DONT_TRAP = RTE_BIT32(1), 1578ce24f0cSThomas Monjalon IBV_FLOW_ATTR_FLAGS_EGRESS = RTE_BIT32(2), 15803e1f7f7SOphir Munk }; 15903e1f7f7SOphir Munk 16003e1f7f7SOphir Munk enum ibv_flow_attr_type { 16103e1f7f7SOphir Munk /* Steering according to rule specifications. */ 16203e1f7f7SOphir Munk IBV_FLOW_ATTR_NORMAL = 0x0, 16303e1f7f7SOphir Munk /* 16403e1f7f7SOphir Munk * Default unicast and multicast rule - 16503e1f7f7SOphir Munk * receive all Eth traffic which isn't steered to any QP. 16603e1f7f7SOphir Munk */ 16703e1f7f7SOphir Munk IBV_FLOW_ATTR_ALL_DEFAULT = 0x1, 16803e1f7f7SOphir Munk /* 16903e1f7f7SOphir Munk * Default multicast rule - 17003e1f7f7SOphir Munk * receive all Eth multicast traffic which isn't steered to any QP. 17103e1f7f7SOphir Munk */ 17203e1f7f7SOphir Munk IBV_FLOW_ATTR_MC_DEFAULT = 0x2, 17303e1f7f7SOphir Munk /* Sniffer rule - receive all port traffic. */ 17403e1f7f7SOphir Munk IBV_FLOW_ATTR_SNIFFER = 0x3, 17503e1f7f7SOphir Munk }; 17603e1f7f7SOphir Munk 17703e1f7f7SOphir Munk enum mlx5dv_flow_table_type { 17803e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX = 0x0, 17903e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX = 0x1, 18003e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB = 0x2, 18103e1f7f7SOphir Munk MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX = 0x3, 18203e1f7f7SOphir Munk }; 18303e1f7f7SOphir Munk 18403e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_NIC_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX 18503e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_NIC_TX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX 18603e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_FDB MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB 18703e1f7f7SOphir Munk #define MLX5DV_FLOW_TABLE_TYPE_RDMA_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX 18803e1f7f7SOphir Munk 18903e1f7f7SOphir Munk struct mlx5dv_flow_match_parameters { 19003e1f7f7SOphir Munk size_t match_sz; 19103e1f7f7SOphir Munk uint64_t match_buf[]; /* Device spec format */ 19203e1f7f7SOphir Munk }; 19303e1f7f7SOphir Munk 19403e1f7f7SOphir Munk struct mlx5dv_flow_matcher_attr { 19503e1f7f7SOphir Munk enum ibv_flow_attr_type type; 19603e1f7f7SOphir Munk uint32_t flags; /* From enum ibv_flow_flags. */ 19703e1f7f7SOphir Munk uint16_t priority; 19803e1f7f7SOphir Munk uint8_t match_criteria_enable; /* Device spec format. */ 19903e1f7f7SOphir Munk struct mlx5dv_flow_match_parameters *match_mask; 20003e1f7f7SOphir Munk uint64_t comp_mask; /* Use mlx5dv_flow_matcher_attr_mask. */ 20103e1f7f7SOphir Munk enum mlx5dv_flow_table_type ft_type; 20203e1f7f7SOphir Munk }; 20303e1f7f7SOphir Munk 20403e1f7f7SOphir Munk /* Windows specific mlx5_matcher. */ 20503e1f7f7SOphir Munk struct mlx5_matcher { 20603e1f7f7SOphir Munk void *ctx; 20703e1f7f7SOphir Munk struct mlx5dv_flow_matcher_attr attr; 20803e1f7f7SOphir Munk uint64_t match_buf[]; 20903e1f7f7SOphir Munk }; 21003e1f7f7SOphir Munk 21168e28591SOphir Munk /* 21268e28591SOphir Munk * Windows mlx5_action. This struct is the 21368e28591SOphir Munk * equivalent of rdma-core struct mlx5dv_dr_action. 21468e28591SOphir Munk */ 21568e28591SOphir Munk struct mlx5_action { 21668e28591SOphir Munk int type; 21768e28591SOphir Munk struct { 21868e28591SOphir Munk uint32_t id; 21968e28591SOphir Munk } dest_tir; 22068e28591SOphir Munk }; 22168e28591SOphir Munk 222b0f5afabSOphir Munk struct mlx5_wqe_srq_next_seg { 223b0f5afabSOphir Munk uint8_t rsvd0[2]; 224b0f5afabSOphir Munk rte_be16_t next_wqe_index; 225b0f5afabSOphir Munk uint8_t signature; 226b0f5afabSOphir Munk uint8_t rsvd1[11]; 227b0f5afabSOphir Munk }; 228b0f5afabSOphir Munk 229b0f5afabSOphir Munk enum ibv_wq_state { 230b0f5afabSOphir Munk IBV_WQS_RESET, 231b0f5afabSOphir Munk IBV_WQS_RDY, 232b0f5afabSOphir Munk IBV_WQS_ERR, 233b0f5afabSOphir Munk IBV_WQS_UNKNOWN 234b0f5afabSOphir Munk }; 235b0f5afabSOphir Munk 236b0f5afabSOphir Munk struct mlx5_wqe_data_seg { 237b0f5afabSOphir Munk rte_be32_t byte_count; 238b0f5afabSOphir Munk rte_be32_t lkey; 239b0f5afabSOphir Munk rte_be64_t addr; 240b0f5afabSOphir Munk }; 24193f4ece9SOphir Munk 2428ce24f0cSThomas Monjalon #define MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP RTE_BIT32(4) 2438ce24f0cSThomas Monjalon #define IBV_DEVICE_RAW_IP_CSUM RTE_BIT32(26) 2448ce24f0cSThomas Monjalon #define IBV_RAW_PACKET_CAP_CVLAN_STRIPPING RTE_BIT32(0) 2458ce24f0cSThomas Monjalon #define IBV_RAW_PACKET_CAP_SCATTER_FCS RTE_BIT32(1) 24693f4ece9SOphir Munk #define IBV_QPT_RAW_PACKET 8 24788259515SOphir Munk 24888259515SOphir Munk enum { 24988259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_VPORT = 0x0, 25088259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_FLOW_TABLE = 0x1, 25188259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_TIR = 0x2, 25288259515SOphir Munk MLX5_FLOW_CONTEXT_DEST_TYPE_QP = 0x3, 25388259515SOphir Munk }; 25468e28591SOphir Munk 25568e28591SOphir Munk enum { 2568ce24f0cSThomas Monjalon MLX5_MATCH_OUTER_HEADERS = RTE_BIT32(0), 2578ce24f0cSThomas Monjalon MLX5_MATCH_MISC_PARAMETERS = RTE_BIT32(1), 2588ce24f0cSThomas Monjalon MLX5_MATCH_INNER_HEADERS = RTE_BIT32(2), 25968e28591SOphir Munk }; 2608ce24f0cSThomas Monjalon 261*358fbb01STal Shnaiderman #define MLX5_MIN_SINGLE_WQE_LOG_NUM_STRIDES 9 262*358fbb01STal Shnaiderman #define MLX5_MAX_SINGLE_WQE_LOG_NUM_STRIDES 16 263*358fbb01STal Shnaiderman #define MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES 6 264*358fbb01STal Shnaiderman #define MLX5_MAX_SINGLE_STRIDE_LOG_NUM_BYTES 13 265*358fbb01STal Shnaiderman #define MLX5_EXT_MIN_SINGLE_WQE_LOG_NUM_STRIDES 3 266*358fbb01STal Shnaiderman #define IB_QPT_RAW_PACKET 8 267*358fbb01STal Shnaiderman 2688ce24f0cSThomas Monjalon #endif /* MLX5_WIN_DEFS_H */ 269