diff options
Diffstat (limited to 'include/linux/mlx5')
| -rw-r--r-- | include/linux/mlx5/cq.h | 2 | ||||
| -rw-r--r-- | include/linux/mlx5/device.h | 11 | ||||
| -rw-r--r-- | include/linux/mlx5/doorbell.h | 39 | ||||
| -rw-r--r-- | include/linux/mlx5/driver.h | 16 | ||||
| -rw-r--r-- | include/linux/mlx5/eswitch.h | 8 | ||||
| -rw-r--r-- | include/linux/mlx5/fs.h | 7 | ||||
| -rw-r--r-- | include/linux/mlx5/mlx5_ifc.h | 185 | ||||
| -rw-r--r-- | include/linux/mlx5/port.h | 1 | ||||
| -rw-r--r-- | include/linux/mlx5/qp.h | 1 | ||||
| -rw-r--r-- | include/linux/mlx5/transobj.h | 3 | ||||
| -rw-r--r-- | include/linux/mlx5/vport.h | 4 | 
11 files changed, 217 insertions, 60 deletions
| diff --git a/include/linux/mlx5/cq.h b/include/linux/mlx5/cq.h index 612c8c2f2466..769326ea1d9b 100644 --- a/include/linux/mlx5/cq.h +++ b/include/linux/mlx5/cq.h @@ -170,7 +170,7 @@ static inline void mlx5_cq_arm(struct mlx5_core_cq *cq, u32 cmd,  	doorbell[0] = cpu_to_be32(sn << 28 | cmd | ci);  	doorbell[1] = cpu_to_be32(cq->cqn); -	mlx5_write64(doorbell, uar_page + MLX5_CQ_DOORBELL, NULL); +	mlx5_write64(doorbell, uar_page + MLX5_CQ_DOORBELL);  }  static inline void mlx5_cq_hold(struct mlx5_core_cq *cq) diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h index f93a5598b942..fc2b6e807f06 100644 --- a/include/linux/mlx5/device.h +++ b/include/linux/mlx5/device.h @@ -361,6 +361,7 @@ enum {  enum {  	MLX5_GENERAL_SUBTYPE_DELAY_DROP_TIMEOUT = 0x1, +	MLX5_GENERAL_SUBTYPE_PCI_POWER_CHANGE_EVENT = 0x5,  };  enum { @@ -1001,7 +1002,8 @@ enum {  	MLX5_MATCH_OUTER_HEADERS	= 1 << 0,  	MLX5_MATCH_MISC_PARAMETERS	= 1 << 1,  	MLX5_MATCH_INNER_HEADERS	= 1 << 2, - +	MLX5_MATCH_MISC_PARAMETERS_2	= 1 << 3, +	MLX5_MATCH_MISC_PARAMETERS_3	= 1 << 4,  };  enum { @@ -1045,6 +1047,7 @@ enum mlx5_mpls_supported_fields {  };  enum mlx5_flex_parser_protos { +	MLX5_FLEX_PROTO_GENEVE	      = 1 << 3,  	MLX5_FLEX_PROTO_CW_MPLS_GRE   = 1 << 4,  	MLX5_FLEX_PROTO_CW_MPLS_UDP   = 1 << 5,  }; @@ -1166,6 +1169,12 @@ enum mlx5_qcam_feature_groups {  #define MLX5_CAP_FLOWTABLE_SNIFFER_TX_MAX(mdev, cap) \  	MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_transmit_sniffer.cap) +#define MLX5_CAP_FLOWTABLE_RDMA_RX(mdev, cap) \ +	MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_receive_rdma.cap) + +#define MLX5_CAP_FLOWTABLE_RDMA_RX_MAX(mdev, cap) \ +	MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_receive_rdma.cap) +  #define MLX5_CAP_ESW_FLOWTABLE(mdev, cap) \  	MLX5_GET(flow_table_eswitch_cap, \  		 mdev->caps.hca_cur[MLX5_CAP_ESWITCH_FLOW_TABLE], cap) diff --git a/include/linux/mlx5/doorbell.h b/include/linux/mlx5/doorbell.h index 0787de28f2fc..5c267707e1df 100644 --- a/include/linux/mlx5/doorbell.h +++ b/include/linux/mlx5/doorbell.h @@ -36,46 +36,25 @@  #define MLX5_BF_OFFSET	      0x800  #define MLX5_CQ_DOORBELL      0x20 -#if BITS_PER_LONG == 64  /* Assume that we can just write a 64-bit doorbell atomically.  s390   * actually doesn't have writeq() but S/390 systems don't even have   * PCI so we won't worry about it. + * + * Note that the write is not atomic on 32-bit systems! In contrast to 64-bit + * ones, it requires proper locking. mlx5_write64 doesn't do any locking, so use + * it at your own discretion, protected by some kind of lock on 32 bits. + * + * TODO: use write{q,l}_relaxed()   */ -#define MLX5_DECLARE_DOORBELL_LOCK(name) -#define MLX5_INIT_DOORBELL_LOCK(ptr)    do { } while (0) -#define MLX5_GET_DOORBELL_LOCK(ptr)      (NULL) - -static inline void mlx5_write64(__be32 val[2], void __iomem *dest, -				spinlock_t *doorbell_lock) +static inline void mlx5_write64(__be32 val[2], void __iomem *dest)  { +#if BITS_PER_LONG == 64  	__raw_writeq(*(u64 *)val, dest); -} -  #else - -/* Just fall back to a spinlock to protect the doorbell if - * BITS_PER_LONG is 32 -- there's no portable way to do atomic 64-bit - * MMIO writes. - */ - -#define MLX5_DECLARE_DOORBELL_LOCK(name) spinlock_t name; -#define MLX5_INIT_DOORBELL_LOCK(ptr)     spin_lock_init(ptr) -#define MLX5_GET_DOORBELL_LOCK(ptr)      (ptr) - -static inline void mlx5_write64(__be32 val[2], void __iomem *dest, -				spinlock_t *doorbell_lock) -{ -	unsigned long flags; - -	if (doorbell_lock) -		spin_lock_irqsave(doorbell_lock, flags);  	__raw_writel((__force u32) val[0], dest);  	__raw_writel((__force u32) val[1], dest + 4); -	if (doorbell_lock) -		spin_unlock_irqrestore(doorbell_lock, flags); -} -  #endif +}  #endif /* MLX5_DOORBELL_H */ diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h index 022541dc5dbf..5a27246db883 100644 --- a/include/linux/mlx5/driver.h +++ b/include/linux/mlx5/driver.h @@ -56,7 +56,6 @@  enum {  	MLX5_BOARD_ID_LEN = 64, -	MLX5_MAX_NAME_LEN = 16,  };  enum { @@ -133,6 +132,7 @@ enum {  	MLX5_REG_MTRC_CONF	 = 0x9041,  	MLX5_REG_MTRC_STDB	 = 0x9042,  	MLX5_REG_MTRC_CTRL	 = 0x9043, +	MLX5_REG_MPEIN		 = 0x9050,  	MLX5_REG_MPCNT		 = 0x9051,  	MLX5_REG_MTPPS		 = 0x9053,  	MLX5_REG_MTPPSE		 = 0x9054, @@ -512,8 +512,13 @@ struct mlx5_rl_table {  	struct mlx5_rl_entry   *rl_entry;  }; +struct mlx5_core_roce { +	struct mlx5_flow_table *ft; +	struct mlx5_flow_group *fg; +	struct mlx5_flow_handle *allow_rule; +}; +  struct mlx5_priv { -	char			name[MLX5_MAX_NAME_LEN];  	struct mlx5_eq_table	*eq_table;  	/* pages stuff */ @@ -566,6 +571,7 @@ struct mlx5_priv {  	struct mlx5_lag		*lag;  	struct mlx5_devcom	*devcom;  	unsigned long		pci_dev_data; +	struct mlx5_core_roce	roce;  	struct mlx5_fc_stats		fc_stats;  	struct mlx5_rl_table            rl_table; @@ -594,6 +600,8 @@ enum mlx5_pagefault_type_flags {  };  struct mlx5_td { +	/* protects tirs list changes while tirs refresh */ +	struct mutex     list_lock;  	struct list_head tirs_list;  	u32              tdn;  }; @@ -640,6 +648,7 @@ struct mlx5_fw_tracer;  struct mlx5_vxlan;  struct mlx5_core_dev { +	struct device *device;  	struct pci_dev	       *pdev;  	/* sync pci state */  	struct mutex		pci_status_mutex; @@ -660,6 +669,7 @@ struct mlx5_core_dev {  	u64			sys_image_guid;  	phys_addr_t		iseg_base;  	struct mlx5_init_seg __iomem *iseg; +	phys_addr_t             bar_addr;  	enum mlx5_device_state	state;  	/* sync interface state */  	struct mutex		intf_state_mutex; @@ -679,7 +689,6 @@ struct mlx5_core_dev {  #endif  	struct mlx5_clock        clock;  	struct mlx5_ib_clock_info  *clock_info; -	struct page             *clock_info_page;  	struct mlx5_fw_tracer   *tracer;  }; @@ -885,6 +894,7 @@ void mlx5_cmd_mbox_status(void *out, u8 *status, u32 *syndrome);  int mlx5_core_get_caps(struct mlx5_core_dev *dev, enum mlx5_cap_type cap_type);  int mlx5_cmd_alloc_uar(struct mlx5_core_dev *dev, u32 *uarn);  int mlx5_cmd_free_uar(struct mlx5_core_dev *dev, u32 uarn); +void mlx5_health_flush(struct mlx5_core_dev *dev);  void mlx5_health_cleanup(struct mlx5_core_dev *dev);  int mlx5_health_init(struct mlx5_core_dev *dev);  void mlx5_start_health_poll(struct mlx5_core_dev *dev); diff --git a/include/linux/mlx5/eswitch.h b/include/linux/mlx5/eswitch.h index 96d8435421de..cf226c190329 100644 --- a/include/linux/mlx5/eswitch.h +++ b/include/linux/mlx5/eswitch.h @@ -35,7 +35,7 @@ struct mlx5_eswitch_rep_if {  	void		       (*unload)(struct mlx5_eswitch_rep *rep);  	void		       *(*get_proto_dev)(struct mlx5_eswitch_rep *rep);  	void			*priv; -	u8			state; +	atomic_t		state;  };  struct mlx5_eswitch_rep { @@ -51,13 +51,13 @@ void mlx5_eswitch_register_vport_reps(struct mlx5_eswitch *esw,  				      u8 rep_type);  void mlx5_eswitch_unregister_vport_reps(struct mlx5_eswitch *esw, u8 rep_type);  void *mlx5_eswitch_get_proto_dev(struct mlx5_eswitch *esw, -				 int vport, +				 u16 vport_num,  				 u8 rep_type);  struct mlx5_eswitch_rep *mlx5_eswitch_vport_rep(struct mlx5_eswitch *esw, -						int vport); +						u16 vport_num);  void *mlx5_eswitch_uplink_get_proto_dev(struct mlx5_eswitch *esw, u8 rep_type);  u8 mlx5_eswitch_mode(struct mlx5_eswitch *esw);  struct mlx5_flow_handle *  mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *esw, -				    int vport, u32 sqn); +				    u16 vport_num, u32 sqn);  #endif diff --git a/include/linux/mlx5/fs.h b/include/linux/mlx5/fs.h index 9df51da04621..e690ba0f965c 100644 --- a/include/linux/mlx5/fs.h +++ b/include/linux/mlx5/fs.h @@ -73,6 +73,13 @@ enum mlx5_flow_namespace_type {  	MLX5_FLOW_NAMESPACE_SNIFFER_RX,  	MLX5_FLOW_NAMESPACE_SNIFFER_TX,  	MLX5_FLOW_NAMESPACE_EGRESS, +	MLX5_FLOW_NAMESPACE_RDMA_RX, +}; + +enum { +	FDB_BYPASS_PATH, +	FDB_FAST_PATH, +	FDB_SLOW_PATH,  };  struct mlx5_flow_table; diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h index 3b83288749c6..5e74305e2e57 100644 --- a/include/linux/mlx5/mlx5_ifc.h +++ b/include/linux/mlx5/mlx5_ifc.h @@ -81,6 +81,19 @@ enum {  };  enum { +	MLX5_OBJ_TYPE_SW_ICM = 0x0008, +}; + +enum { +	MLX5_GENERAL_OBJ_TYPES_CAP_SW_ICM = (1ULL << MLX5_OBJ_TYPE_SW_ICM), +	MLX5_GENERAL_OBJ_TYPES_CAP_GENEVE_TLV_OPT = (1ULL << 11), +}; + +enum { +	MLX5_OBJ_TYPE_GENEVE_TLV_OPT = 0x000b, +}; + +enum {  	MLX5_CMD_OP_QUERY_HCA_CAP                 = 0x100,  	MLX5_CMD_OP_QUERY_ADAPTER                 = 0x101,  	MLX5_CMD_OP_INIT_HCA                      = 0x102, @@ -299,7 +312,11 @@ struct mlx5_ifc_flow_table_fields_supported_bits {  	u8         outer_gre_protocol[0x1];  	u8         outer_gre_key[0x1];  	u8         outer_vxlan_vni[0x1]; -	u8         reserved_at_1a[0x5]; +	u8         outer_geneve_vni[0x1]; +	u8         outer_geneve_oam[0x1]; +	u8         outer_geneve_protocol_type[0x1]; +	u8         outer_geneve_opt_len[0x1]; +	u8         reserved_at_1e[0x1];  	u8         source_eswitch_port[0x1];  	u8         inner_dmac[0x1]; @@ -327,7 +344,8 @@ struct mlx5_ifc_flow_table_fields_supported_bits {  	u8         inner_tcp_flags[0x1];  	u8         reserved_at_37[0x9]; -	u8         reserved_at_40[0x5]; +	u8         geneve_tlv_option_0_data[0x1]; +	u8         reserved_at_41[0x4];  	u8         outer_first_mpls_over_udp[0x4];  	u8         outer_first_mpls_over_gre[0x4];  	u8         inner_first_mpls[0x4]; @@ -357,11 +375,14 @@ struct mlx5_ifc_flow_table_prop_layout_bits {  	u8         pop_vlan_2[0x1];  	u8         push_vlan_2[0x1];  	u8	   reformat_and_vlan_action[0x1]; -	u8	   reserved_at_10[0x2]; +	u8	   reserved_at_10[0x1]; +	u8         sw_owner[0x1];  	u8	   reformat_l3_tunnel_to_l2[0x1];  	u8	   reformat_l2_to_l3_tunnel[0x1];  	u8	   reformat_and_modify_action[0x1]; -	u8         reserved_at_15[0xb]; +	u8         reserved_at_15[0x2]; +	u8	   table_miss_action_domain[0x1]; +	u8         reserved_at_18[0x8];  	u8         reserved_at_20[0x2];  	u8         log_max_ft_size[0x6];  	u8         log_max_modify_header_context[0x8]; @@ -469,7 +490,9 @@ struct mlx5_ifc_fte_match_set_misc_bits {  	u8         vxlan_vni[0x18];  	u8         reserved_at_b8[0x8]; -	u8         reserved_at_c0[0x20]; +	u8         geneve_vni[0x18]; +	u8         reserved_at_d8[0x7]; +	u8         geneve_oam[0x1];  	u8         reserved_at_e0[0xc];  	u8         outer_ipv6_flow_label[0x14]; @@ -477,7 +500,11 @@ struct mlx5_ifc_fte_match_set_misc_bits {  	u8         reserved_at_100[0xc];  	u8         inner_ipv6_flow_label[0x14]; -	u8         reserved_at_120[0x28]; +	u8         reserved_at_120[0xa]; +	u8         geneve_opt_len[0x6]; +	u8         geneve_protocol_type[0x10]; + +	u8         reserved_at_140[0x8];  	u8         bth_dst_qp[0x18];  	u8	   reserved_at_160[0x20];  	u8	   outer_esp_spi[0x20]; @@ -507,6 +534,12 @@ struct mlx5_ifc_fte_match_set_misc2_bits {  	u8         reserved_at_1a0[0x60];  }; +struct mlx5_ifc_fte_match_set_misc3_bits { +	u8         reserved_at_0[0x120]; +	u8         geneve_tlv_option_0_data[0x20]; +	u8         reserved_at_140[0xc0]; +}; +  struct mlx5_ifc_cmd_pas_bits {  	u8         pa_h[0x20]; @@ -589,7 +622,7 @@ struct mlx5_ifc_flow_table_nic_cap_bits {  	struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive; -	u8         reserved_at_400[0x200]; +	struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive_rdma;  	struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive_sniffer; @@ -770,7 +803,19 @@ struct mlx5_ifc_device_mem_cap_bits {  	u8         max_memic_size[0x20]; -	u8         reserved_at_c0[0x740]; +	u8         steering_sw_icm_start_address[0x40]; + +	u8         reserved_at_100[0x8]; +	u8         log_header_modify_sw_icm_size[0x8]; +	u8         reserved_at_110[0x2]; +	u8         log_sw_icm_alloc_granularity[0x6]; +	u8         log_steering_sw_icm_size[0x8]; + +	u8         reserved_at_120[0x20]; + +	u8         header_modify_sw_icm_start_address[0x40]; + +	u8         reserved_at_180[0x680];  };  enum { @@ -919,6 +964,7 @@ enum {  enum {  	MLX5_UCTX_CAP_RAW_TX = 1UL << 0, +	MLX5_UCTX_CAP_INTERNAL_DEV_RES = 1UL << 1,  };  struct mlx5_ifc_cmd_hca_cap_bits { @@ -929,7 +975,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         log_max_srq_sz[0x8];  	u8         log_max_qp_sz[0x8]; -	u8         reserved_at_90[0xb]; +	u8         reserved_at_90[0x8]; +	u8         prio_tag_required[0x1]; +	u8         reserved_at_99[0x2];  	u8         log_max_qp[0x5];  	u8         reserved_at_a0[0xb]; @@ -1211,7 +1259,11 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8	   num_of_uars_per_page[0x20];  	u8         flex_parser_protocols[0x20]; -	u8         reserved_at_560[0x20]; + +	u8         max_geneve_tlv_options[0x8]; +	u8         reserved_at_568[0x3]; +	u8         max_geneve_tlv_option_data_len[0x5]; +	u8         reserved_at_570[0x10];  	u8         reserved_at_580[0x3c];  	u8         mini_cqe_resp_stride_index[0x1]; @@ -1247,7 +1299,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         uctx_cap[0x20]; -	u8	   reserved_at_6c0[0x140]; +	u8         reserved_at_6c0[0x4]; +	u8         flex_parser_id_geneve_tlv_option_0[0x4]; +	u8         reserved_at_6c8[0x138];  };  enum mlx5_flow_destination_type { @@ -1260,6 +1314,12 @@ enum mlx5_flow_destination_type {  	MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM = 0x101,  }; +enum mlx5_flow_table_miss_action { +	MLX5_FLOW_TABLE_MISS_ACTION_DEF, +	MLX5_FLOW_TABLE_MISS_ACTION_FWD, +	MLX5_FLOW_TABLE_MISS_ACTION_SWITCH_DOMAIN, +}; +  struct mlx5_ifc_dest_format_struct_bits {  	u8         destination_type[0x8];  	u8         destination_id[0x18]; @@ -1299,7 +1359,9 @@ struct mlx5_ifc_fte_match_param_bits {  	struct mlx5_ifc_fte_match_set_misc2_bits misc_parameters_2; -	u8         reserved_at_800[0x800]; +	struct mlx5_ifc_fte_match_set_misc3_bits misc_parameters_3; + +	u8         reserved_at_a00[0x600];  };  enum { @@ -2920,6 +2982,7 @@ enum {  	MLX5_MKC_ACCESS_MODE_MTT   = 0x1,  	MLX5_MKC_ACCESS_MODE_KLMS  = 0x2,  	MLX5_MKC_ACCESS_MODE_KSM   = 0x3, +	MLX5_MKC_ACCESS_MODE_SW_ICM = 0x4,  	MLX5_MKC_ACCESS_MODE_MEMIC = 0x5,  }; @@ -4807,6 +4870,7 @@ enum {  	MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS  = 0x1,  	MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_INNER_HEADERS    = 0x2,  	MLX5_QUERY_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS_2 = 0x3, +	MLX5_QUERY_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS_3 = 0x4,  };  struct mlx5_ifc_query_flow_group_out_bits { @@ -5110,6 +5174,7 @@ enum {  	MLX5_ACTION_IN_FIELD_OUT_DIPV6_31_0    = 0x14,  	MLX5_ACTION_IN_FIELD_OUT_SIPV4         = 0x15,  	MLX5_ACTION_IN_FIELD_OUT_DIPV4         = 0x16, +	MLX5_ACTION_IN_FIELD_OUT_FIRST_VID     = 0x17,  	MLX5_ACTION_IN_FIELD_OUT_IPV6_HOPLIMIT = 0x47,  }; @@ -6874,14 +6939,14 @@ struct mlx5_ifc_create_tis_in_bits {  struct mlx5_ifc_create_tir_out_bits {  	u8         status[0x8]; -	u8         reserved_at_8[0x18]; +	u8         icm_address_63_40[0x18];  	u8         syndrome[0x20]; -	u8         reserved_at_40[0x8]; +	u8         icm_address_39_32[0x8];  	u8         tirn[0x18]; -	u8         reserved_at_60[0x20]; +	u8         icm_address_31_0[0x20];  };  struct mlx5_ifc_create_tir_in_bits { @@ -7279,7 +7344,7 @@ struct mlx5_ifc_create_eq_out_bits {  struct mlx5_ifc_create_eq_in_bits {  	u8         opcode[0x10]; -	u8         reserved_at_10[0x10]; +	u8         uid[0x10];  	u8         reserved_at_20[0x10];  	u8         op_mod[0x10]; @@ -8026,6 +8091,52 @@ struct mlx5_ifc_ppcnt_reg_bits {  	union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits counter_set;  }; +struct mlx5_ifc_mpein_reg_bits { +	u8         reserved_at_0[0x2]; +	u8         depth[0x6]; +	u8         pcie_index[0x8]; +	u8         node[0x8]; +	u8         reserved_at_18[0x8]; + +	u8         capability_mask[0x20]; + +	u8         reserved_at_40[0x8]; +	u8         link_width_enabled[0x8]; +	u8         link_speed_enabled[0x10]; + +	u8         lane0_physical_position[0x8]; +	u8         link_width_active[0x8]; +	u8         link_speed_active[0x10]; + +	u8         num_of_pfs[0x10]; +	u8         num_of_vfs[0x10]; + +	u8         bdf0[0x10]; +	u8         reserved_at_b0[0x10]; + +	u8         max_read_request_size[0x4]; +	u8         max_payload_size[0x4]; +	u8         reserved_at_c8[0x5]; +	u8         pwr_status[0x3]; +	u8         port_type[0x4]; +	u8         reserved_at_d4[0xb]; +	u8         lane_reversal[0x1]; + +	u8         reserved_at_e0[0x14]; +	u8         pci_power[0xc]; + +	u8         reserved_at_100[0x20]; + +	u8         device_status[0x10]; +	u8         port_state[0x8]; +	u8         reserved_at_138[0x8]; + +	u8         reserved_at_140[0x10]; +	u8         receiver_detect_result[0x10]; + +	u8         reserved_at_160[0x20]; +}; +  struct mlx5_ifc_mpcnt_reg_bits {  	u8         reserved_at_0[0x8];  	u8         pcie_index[0x8]; @@ -8345,7 +8456,9 @@ struct mlx5_ifc_pcam_reg_bits {  };  struct mlx5_ifc_mcam_enhanced_features_bits { -	u8         reserved_at_0[0x74]; +	u8         reserved_at_0[0x6e]; +	u8         pci_status_and_power[0x1]; +	u8         reserved_at_6f[0x5];  	u8         mark_tx_action_cnp[0x1];  	u8         mark_tx_action_cqe[0x1];  	u8         dynamic_tx_overflow[0x1]; @@ -8953,6 +9066,7 @@ union mlx5_ifc_ports_control_registers_document_bits {  	struct mlx5_ifc_pmtu_reg_bits pmtu_reg;  	struct mlx5_ifc_ppad_reg_bits ppad_reg;  	struct mlx5_ifc_ppcnt_reg_bits ppcnt_reg; +	struct mlx5_ifc_mpein_reg_bits mpein_reg;  	struct mlx5_ifc_mpcnt_reg_bits mpcnt_reg;  	struct mlx5_ifc_pplm_reg_bits pplm_reg;  	struct mlx5_ifc_pplr_reg_bits pplr_reg; @@ -9442,6 +9556,33 @@ struct mlx5_ifc_uctx_bits {  	u8         reserved_at_20[0x160];  }; +struct mlx5_ifc_sw_icm_bits { +	u8         modify_field_select[0x40]; + +	u8	   reserved_at_40[0x18]; +	u8         log_sw_icm_size[0x8]; + +	u8         reserved_at_60[0x20]; + +	u8         sw_icm_start_addr[0x40]; + +	u8         reserved_at_c0[0x140]; +}; + +struct mlx5_ifc_geneve_tlv_option_bits { +	u8         modify_field_select[0x40]; + +	u8         reserved_at_40[0x18]; +	u8         geneve_option_fte_index[0x8]; + +	u8         option_class[0x10]; +	u8         option_type[0x8]; +	u8         reserved_at_78[0x3]; +	u8         option_data_length[0x5]; + +	u8         reserved_at_80[0x180]; +}; +  struct mlx5_ifc_create_umem_in_bits {  	u8         opcode[0x10];  	u8         uid[0x10]; @@ -9479,6 +9620,16 @@ struct mlx5_ifc_destroy_uctx_in_bits {  	u8         reserved_at_60[0x20];  }; +struct mlx5_ifc_create_sw_icm_in_bits { +	struct mlx5_ifc_general_obj_in_cmd_hdr_bits   hdr; +	struct mlx5_ifc_sw_icm_bits		      sw_icm; +}; + +struct mlx5_ifc_create_geneve_tlv_option_in_bits { +	struct mlx5_ifc_general_obj_in_cmd_hdr_bits   hdr; +	struct mlx5_ifc_geneve_tlv_option_bits        geneve_tlv_opt; +}; +  struct mlx5_ifc_mtrc_string_db_param_bits {  	u8         string_db_base_address[0x20]; diff --git a/include/linux/mlx5/port.h b/include/linux/mlx5/port.h index 64e78394fc9c..de9a272c9f3d 100644 --- a/include/linux/mlx5/port.h +++ b/include/linux/mlx5/port.h @@ -60,6 +60,7 @@ enum mlx5_an_status {  #define MLX5_I2C_ADDR_LOW		0x50  #define MLX5_I2C_ADDR_HIGH		0x51  #define MLX5_EEPROM_PAGE_LENGTH		256 +#define MLX5_EEPROM_HIGH_PAGE_LENGTH	128  enum mlx5e_link_mode {  	MLX5E_1000BASE_CX_SGMII	 = 0, diff --git a/include/linux/mlx5/qp.h b/include/linux/mlx5/qp.h index 0343c81d4c5f..3ba4edbd17a6 100644 --- a/include/linux/mlx5/qp.h +++ b/include/linux/mlx5/qp.h @@ -395,6 +395,7 @@ struct mlx5_wqe_signature_seg {  struct mlx5_wqe_inline_seg {  	__be32	byte_count; +	__be32	data[0];  };  enum mlx5_sig_type { diff --git a/include/linux/mlx5/transobj.h b/include/linux/mlx5/transobj.h index a261d5528ff7..dc6b1e7cb8c4 100644 --- a/include/linux/mlx5/transobj.h +++ b/include/linux/mlx5/transobj.h @@ -50,6 +50,9 @@ int mlx5_core_query_sq(struct mlx5_core_dev *dev, u32 sqn, u32 *out);  int mlx5_core_query_sq_state(struct mlx5_core_dev *dev, u32 sqn, u8 *state);  int mlx5_core_create_tir(struct mlx5_core_dev *dev, u32 *in, int inlen,  			 u32 *tirn); +int mlx5_core_create_tir_out(struct mlx5_core_dev *dev, +			     u32 *in, int inlen, +			     u32 *out, int outlen);  int mlx5_core_modify_tir(struct mlx5_core_dev *dev, u32 tirn, u32 *in,  			 int inlen);  void mlx5_core_destroy_tir(struct mlx5_core_dev *dev, u32 tirn); diff --git a/include/linux/mlx5/vport.h b/include/linux/mlx5/vport.h index 0eef548b9946..3d1c6cdbbba7 100644 --- a/include/linux/mlx5/vport.h +++ b/include/linux/mlx5/vport.h @@ -118,10 +118,6 @@ int mlx5_modify_nic_vport_promisc(struct mlx5_core_dev *mdev,  				  int promisc_uc,  				  int promisc_mc,  				  int promisc_all); -int mlx5_query_nic_vport_vlans(struct mlx5_core_dev *dev, -			       u16 vport, -			       u16 vlans[], -			       int *size);  int mlx5_modify_nic_vport_vlans(struct mlx5_core_dev *dev,  				u16 vlans[],  				int list_size); |