diff options
Diffstat (limited to 'include/linux/mlx5')
| -rw-r--r-- | include/linux/mlx5/device.h | 11 | ||||
| -rw-r--r-- | include/linux/mlx5/driver.h | 49 | ||||
| -rw-r--r-- | include/linux/mlx5/fs.h | 12 | ||||
| -rw-r--r-- | include/linux/mlx5/mlx5_ifc.h | 293 | ||||
| -rw-r--r-- | include/linux/mlx5/port.h | 16 | ||||
| -rw-r--r-- | include/linux/mlx5/qp.h | 1 | ||||
| -rw-r--r-- | include/linux/mlx5/vport.h | 2 | 
7 files changed, 356 insertions, 28 deletions
| diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h index 73a48479892d..0b6d15cddb2f 100644 --- a/include/linux/mlx5/device.h +++ b/include/linux/mlx5/device.h @@ -129,6 +129,13 @@ __mlx5_mask(typ, fld))  		tmp;							  \  		}) +enum mlx5_inline_modes { +	MLX5_INLINE_MODE_NONE, +	MLX5_INLINE_MODE_L2, +	MLX5_INLINE_MODE_IP, +	MLX5_INLINE_MODE_TCP_UDP, +}; +  enum {  	MLX5_MAX_COMMANDS		= 32,  	MLX5_CMD_DATA_BLOCK_SIZE	= 512, @@ -1330,6 +1337,7 @@ enum mlx5_cap_type {  	MLX5_CAP_ESWITCH,  	MLX5_CAP_RESERVED,  	MLX5_CAP_VECTOR_CALC, +	MLX5_CAP_QOS,  	/* NUM OF CAP Types */  	MLX5_CAP_NUM  }; @@ -1414,6 +1422,9 @@ enum mlx5_cap_type {  	MLX5_GET(vector_calc_cap, \  		 mdev->hca_caps_cur[MLX5_CAP_VECTOR_CALC], cap) +#define MLX5_CAP_QOS(mdev, cap)\ +	MLX5_GET(qos_cap, mdev->hca_caps_cur[MLX5_CAP_QOS], cap) +  enum {  	MLX5_CMD_STAT_OK			= 0x0,  	MLX5_CMD_STAT_INT_ERR			= 0x1, diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h index 80776d0c52dc..a041b99fceac 100644 --- a/include/linux/mlx5/driver.h +++ b/include/linux/mlx5/driver.h @@ -469,7 +469,7 @@ struct mlx5_irq_info {  };  struct mlx5_fc_stats { -	struct list_head list; +	struct rb_root counters;  	struct list_head addlist;  	/* protect addlist add/splice operations */  	spinlock_t addlist_lock; @@ -481,6 +481,21 @@ struct mlx5_fc_stats {  struct mlx5_eswitch; +struct mlx5_rl_entry { +	u32                     rate; +	u16                     index; +	u16                     refcount; +}; + +struct mlx5_rl_table { +	/* protect rate limit table */ +	struct mutex            rl_lock; +	u16                     max_size; +	u32                     max_rate; +	u32                     min_rate; +	struct mlx5_rl_entry   *rl_entry; +}; +  struct mlx5_priv {  	char			name[MLX5_MAX_NAME_LEN];  	struct mlx5_eq_table	eq_table; @@ -535,15 +550,12 @@ struct mlx5_priv {  	struct list_head        ctx_list;  	spinlock_t              ctx_lock; +	struct mlx5_flow_steering *steering;  	struct mlx5_eswitch     *eswitch;  	struct mlx5_core_sriov	sriov;  	unsigned long		pci_dev_data; -	struct mlx5_flow_root_namespace *root_ns; -	struct mlx5_flow_root_namespace *fdb_root_ns; -	struct mlx5_flow_root_namespace *esw_egress_root_ns; -	struct mlx5_flow_root_namespace *esw_ingress_root_ns; -  	struct mlx5_fc_stats		fc_stats; +	struct mlx5_rl_table            rl_table;  };  enum mlx5_device_state { @@ -562,6 +574,18 @@ enum mlx5_pci_status {  	MLX5_PCI_STATUS_ENABLED,  }; +struct mlx5_td { +	struct list_head tirs_list; +	u32              tdn; +}; + +struct mlx5e_resources { +	struct mlx5_uar            cq_uar; +	u32                        pdn; +	struct mlx5_td             td; +	struct mlx5_core_mkey      mkey; +}; +  struct mlx5_core_dev {  	struct pci_dev	       *pdev;  	/* sync pci state */ @@ -586,6 +610,7 @@ struct mlx5_core_dev {  	struct mlx5_profile	*profile;  	atomic_t		num_qps;  	u32			issi; +	struct mlx5e_resources  mlx5e_res;  #ifdef CONFIG_RFS_ACCEL  	struct cpu_rmap         *rmap;  #endif @@ -629,6 +654,7 @@ struct mlx5_cmd_work_ent {  	void		       *uout;  	int			uout_size;  	mlx5_cmd_cbk_t		callback; +	struct delayed_work	cb_timeout_work;  	void		       *context;  	int			idx;  	struct completion	done; @@ -861,6 +887,12 @@ int mlx5_query_odp_caps(struct mlx5_core_dev *dev,  int mlx5_core_query_ib_ppcnt(struct mlx5_core_dev *dev,  			     u8 port_num, void *out, size_t sz); +int mlx5_init_rl_table(struct mlx5_core_dev *dev); +void mlx5_cleanup_rl_table(struct mlx5_core_dev *dev); +int mlx5_rl_add_rate(struct mlx5_core_dev *dev, u32 rate, u16 *index); +void mlx5_rl_remove_rate(struct mlx5_core_dev *dev, u32 rate); +bool mlx5_rl_is_in_range(struct mlx5_core_dev *dev, u32 rate); +  static inline int fw_initializing(struct mlx5_core_dev *dev)  {  	return ioread32be(&dev->iseg->initializing) >> 31; @@ -938,6 +970,11 @@ static inline int mlx5_get_gid_table_len(u16 param)  	return 8 * (1 << param);  } +static inline bool mlx5_rl_is_supported(struct mlx5_core_dev *dev) +{ +	return !!(dev->priv.rl_table.max_size); +} +  enum {  	MLX5_TRIGGERED_CMD_COMP = (u64)1 << 32,  }; diff --git a/include/linux/mlx5/fs.h b/include/linux/mlx5/fs.h index 4b7a107d9c19..e036d6030867 100644 --- a/include/linux/mlx5/fs.h +++ b/include/linux/mlx5/fs.h @@ -54,6 +54,8 @@ static inline void build_leftovers_ft_param(int *priority,  enum mlx5_flow_namespace_type {  	MLX5_FLOW_NAMESPACE_BYPASS, +	MLX5_FLOW_NAMESPACE_OFFLOADS, +	MLX5_FLOW_NAMESPACE_ETHTOOL,  	MLX5_FLOW_NAMESPACE_KERNEL,  	MLX5_FLOW_NAMESPACE_LEFTOVERS,  	MLX5_FLOW_NAMESPACE_ANCHOR, @@ -67,6 +69,12 @@ struct mlx5_flow_group;  struct mlx5_flow_rule;  struct mlx5_flow_namespace; +struct mlx5_flow_spec { +	u8   match_criteria_enable; +	u32  match_criteria[MLX5_ST_SZ_DW(fte_match_param)]; +	u32  match_value[MLX5_ST_SZ_DW(fte_match_param)]; +}; +  struct mlx5_flow_destination {  	enum mlx5_flow_destination_type	type;  	union { @@ -115,9 +123,7 @@ void mlx5_destroy_flow_group(struct mlx5_flow_group *fg);   */  struct mlx5_flow_rule *  mlx5_add_flow_rule(struct mlx5_flow_table *ft, -		   u8 match_criteria_enable, -		   u32 *match_criteria, -		   u32 *match_value, +		   struct mlx5_flow_spec *spec,  		   u32 action,  		   u32 flow_tag,  		   struct mlx5_flow_destination *dest); diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h index e955a2859009..21bc4557b67a 100644 --- a/include/linux/mlx5/mlx5_ifc.h +++ b/include/linux/mlx5/mlx5_ifc.h @@ -123,6 +123,10 @@ enum {  	MLX5_CMD_OP_DRAIN_DCT                     = 0x712,  	MLX5_CMD_OP_QUERY_DCT                     = 0x713,  	MLX5_CMD_OP_ARM_DCT_FOR_KEY_VIOLATION     = 0x714, +	MLX5_CMD_OP_CREATE_XRQ                    = 0x717, +	MLX5_CMD_OP_DESTROY_XRQ                   = 0x718, +	MLX5_CMD_OP_QUERY_XRQ                     = 0x719, +	MLX5_CMD_OP_ARM_XRQ                       = 0x71a,  	MLX5_CMD_OP_QUERY_VPORT_STATE             = 0x750,  	MLX5_CMD_OP_MODIFY_VPORT_STATE            = 0x751,  	MLX5_CMD_OP_QUERY_ESW_VPORT_CONTEXT       = 0x752, @@ -139,6 +143,8 @@ enum {  	MLX5_CMD_OP_ALLOC_Q_COUNTER               = 0x771,  	MLX5_CMD_OP_DEALLOC_Q_COUNTER             = 0x772,  	MLX5_CMD_OP_QUERY_Q_COUNTER               = 0x773, +	MLX5_CMD_OP_SET_RATE_LIMIT                = 0x780, +	MLX5_CMD_OP_QUERY_RATE_LIMIT              = 0x781,  	MLX5_CMD_OP_ALLOC_PD                      = 0x800,  	MLX5_CMD_OP_DEALLOC_PD                    = 0x801,  	MLX5_CMD_OP_ALLOC_UAR                     = 0x802, @@ -362,7 +368,8 @@ struct mlx5_ifc_fte_match_set_lyr_2_4_bits {  };  struct mlx5_ifc_fte_match_set_misc_bits { -	u8         reserved_at_0[0x20]; +	u8         reserved_at_0[0x8]; +	u8         source_sqn[0x18];  	u8         reserved_at_20[0x10];  	u8         source_port[0x10]; @@ -508,6 +515,17 @@ struct mlx5_ifc_e_switch_cap_bits {  	u8         reserved_at_20[0x7e0];  }; +struct mlx5_ifc_qos_cap_bits { +	u8         packet_pacing[0x1]; +	u8         reserved_0[0x1f]; +	u8         reserved_1[0x20]; +	u8         packet_pacing_max_rate[0x20]; +	u8         packet_pacing_min_rate[0x20]; +	u8         reserved_2[0x10]; +	u8         packet_pacing_rate_table_size[0x10]; +	u8         reserved_3[0x760]; +}; +  struct mlx5_ifc_per_protocol_networking_offload_caps_bits {  	u8         csum_cap[0x1];  	u8         vlan_cap[0x1]; @@ -518,7 +536,8 @@ struct mlx5_ifc_per_protocol_networking_offload_caps_bits {  	u8         self_lb_en_modifiable[0x1];  	u8         reserved_at_9[0x2];  	u8         max_lso_cap[0x5]; -	u8         reserved_at_10[0x4]; +	u8         reserved_at_10[0x2]; +	u8	   wqe_inline_mode[0x2];  	u8         rss_ind_tbl_cap[0x4];  	u8         reg_umr_sq[0x1];  	u8         scatter_fcs[0x1]; @@ -747,7 +766,8 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         out_of_seq_cnt[0x1];  	u8         vport_counters[0x1]; -	u8         reserved_at_182[0x4]; +	u8         retransmission_q_counters[0x1]; +	u8         reserved_at_183[0x3];  	u8         max_qp_cnt[0xa];  	u8         pkey_table_size[0x10]; @@ -774,7 +794,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         log_max_msg[0x5];  	u8         reserved_at_1c8[0x4];  	u8         max_tc[0x4]; -	u8         reserved_at_1d0[0x6]; +	u8         reserved_at_1d0[0x1]; +	u8         dcbx[0x1]; +	u8         reserved_at_1d2[0x4];  	u8         rol_s[0x1];  	u8         rol_g[0x1];  	u8         reserved_at_1d8[0x1]; @@ -806,7 +828,7 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         tph[0x1];  	u8         rf[0x1];  	u8         dct[0x1]; -	u8         reserved_at_21b[0x1]; +	u8         qos[0x1];  	u8         eth_net_offloads[0x1];  	u8         roce[0x1];  	u8         atomic[0x1]; @@ -872,7 +894,10 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         reserved_at_330[0xb];  	u8         log_max_xrcd[0x5]; -	u8         reserved_at_340[0x20]; +	u8         reserved_at_340[0x8]; +	u8         log_max_flow_counter_bulk[0x8]; +	u8         max_flow_counter[0x10]; +  	u8         reserved_at_360[0x3];  	u8         log_max_rq[0x5]; @@ -932,7 +957,15 @@ struct mlx5_ifc_cmd_hca_cap_bits {  	u8         cqe_compression_timeout[0x10];  	u8         cqe_compression_max_num[0x10]; -	u8         reserved_at_5e0[0x220]; +	u8         reserved_at_5e0[0x10]; +	u8         tag_matching[0x1]; +	u8         rndv_offload_rc[0x1]; +	u8         rndv_offload_dc[0x1]; +	u8         log_tag_matching_list_sz[0x5]; +	u8         reserved_at_5e8[0x3]; +	u8         log_max_xrq[0x5]; + +	u8         reserved_at_5f0[0x200];  };  enum mlx5_flow_destination_type { @@ -951,7 +984,8 @@ struct mlx5_ifc_dest_format_struct_bits {  };  struct mlx5_ifc_flow_counter_list_bits { -	u8         reserved_at_0[0x10]; +	u8         clear[0x1]; +	u8         num_of_counters[0xf];  	u8         flow_counter_id[0x10];  	u8         reserved_at_20[0x20]; @@ -1970,7 +2004,7 @@ struct mlx5_ifc_qpc_bits {  	u8         reserved_at_560[0x5];  	u8         rq_type[0x3]; -	u8         srqn_rmpn[0x18]; +	u8         srqn_rmpn_xrqn[0x18];  	u8         reserved_at_580[0x8];  	u8         rmsn[0x18]; @@ -2021,6 +2055,7 @@ union mlx5_ifc_hca_cap_union_bits {  	struct mlx5_ifc_flow_table_eswitch_cap_bits flow_table_eswitch_cap;  	struct mlx5_ifc_e_switch_cap_bits e_switch_cap;  	struct mlx5_ifc_vector_calc_cap_bits vector_calc_cap; +	struct mlx5_ifc_qos_cap_bits qos_cap;  	u8         reserved_at_0[0x8000];  }; @@ -2236,7 +2271,8 @@ struct mlx5_ifc_sqc_bits {  	u8         cd_master[0x1];  	u8         fre[0x1];  	u8         flush_in_error_en[0x1]; -	u8         reserved_at_4[0x4]; +	u8         reserved_at_4[0x1]; +	u8	   min_wqe_inline_mode[0x3];  	u8         state[0x4];  	u8         reg_umr[0x1];  	u8         reserved_at_d[0x13]; @@ -2247,8 +2283,9 @@ struct mlx5_ifc_sqc_bits {  	u8         reserved_at_40[0x8];  	u8         cqn[0x18]; -	u8         reserved_at_60[0xa0]; +	u8         reserved_at_60[0x90]; +	u8         packet_pacing_rate_limit_index[0x10];  	u8         tis_lst_sz[0x10];  	u8         reserved_at_110[0x10]; @@ -2332,7 +2369,9 @@ struct mlx5_ifc_rmpc_bits {  };  struct mlx5_ifc_nic_vport_context_bits { -	u8         reserved_at_0[0x1f]; +	u8         reserved_at_0[0x5]; +	u8         min_wqe_inline_mode[0x3]; +	u8         reserved_at_8[0x17];  	u8         roce_en[0x1];  	u8         arm_change_event[0x1]; @@ -2596,7 +2635,7 @@ struct mlx5_ifc_dctc_bits {  	u8         reserved_at_98[0x8];  	u8         reserved_at_a0[0x8]; -	u8         srqn[0x18]; +	u8         srqn_xrqn[0x18];  	u8         reserved_at_c0[0x8];  	u8         pd[0x18]; @@ -2648,6 +2687,7 @@ enum {  enum {  	MLX5_CQ_PERIOD_MODE_START_FROM_EQE = 0x0,  	MLX5_CQ_PERIOD_MODE_START_FROM_CQE = 0x1, +	MLX5_CQ_PERIOD_NUM_MODES  };  struct mlx5_ifc_cqc_bits { @@ -2725,6 +2765,54 @@ struct mlx5_ifc_query_adapter_param_block_bits {  	u8         vsd_contd_psid[16][0x8];  }; +enum { +	MLX5_XRQC_STATE_GOOD   = 0x0, +	MLX5_XRQC_STATE_ERROR  = 0x1, +}; + +enum { +	MLX5_XRQC_TOPOLOGY_NO_SPECIAL_TOPOLOGY = 0x0, +	MLX5_XRQC_TOPOLOGY_TAG_MATCHING        = 0x1, +}; + +enum { +	MLX5_XRQC_OFFLOAD_RNDV = 0x1, +}; + +struct mlx5_ifc_tag_matching_topology_context_bits { +	u8         log_matching_list_sz[0x4]; +	u8         reserved_at_4[0xc]; +	u8         append_next_index[0x10]; + +	u8         sw_phase_cnt[0x10]; +	u8         hw_phase_cnt[0x10]; + +	u8         reserved_at_40[0x40]; +}; + +struct mlx5_ifc_xrqc_bits { +	u8         state[0x4]; +	u8         rlkey[0x1]; +	u8         reserved_at_5[0xf]; +	u8         topology[0x4]; +	u8         reserved_at_18[0x4]; +	u8         offload[0x4]; + +	u8         reserved_at_20[0x8]; +	u8         user_index[0x18]; + +	u8         reserved_at_40[0x8]; +	u8         cqn[0x18]; + +	u8         reserved_at_60[0xa0]; + +	struct mlx5_ifc_tag_matching_topology_context_bits tag_matching_topology_context; + +	u8         reserved_at_180[0x180]; + +	struct mlx5_ifc_wq_bits wq; +}; +  union mlx5_ifc_modify_field_select_resize_field_select_auto_bits {  	struct mlx5_ifc_modify_field_select_bits modify_field_select;  	struct mlx5_ifc_resize_field_select_bits resize_field_select; @@ -3147,6 +3235,30 @@ struct mlx5_ifc_rst2init_qp_in_bits {  	u8         reserved_at_800[0x80];  }; +struct mlx5_ifc_query_xrq_out_bits { +	u8         status[0x8]; +	u8         reserved_at_8[0x18]; + +	u8         syndrome[0x20]; + +	u8         reserved_at_40[0x40]; + +	struct mlx5_ifc_xrqc_bits xrq_context; +}; + +struct mlx5_ifc_query_xrq_in_bits { +	u8         opcode[0x10]; +	u8         reserved_at_10[0x10]; + +	u8         reserved_at_20[0x10]; +	u8         op_mod[0x10]; + +	u8         reserved_at_40[0x8]; +	u8         xrqn[0x18]; + +	u8         reserved_at_60[0x20]; +}; +  struct mlx5_ifc_query_xrc_srq_out_bits {  	u8         status[0x8];  	u8         reserved_at_8[0x18]; @@ -3550,7 +3662,27 @@ struct mlx5_ifc_query_q_counter_out_bits {  	u8         out_of_sequence[0x20]; -	u8         reserved_at_1e0[0x620]; +	u8         reserved_at_1e0[0x20]; + +	u8         duplicate_request[0x20]; + +	u8         reserved_at_220[0x20]; + +	u8         rnr_nak_retry_err[0x20]; + +	u8         reserved_at_260[0x20]; + +	u8         packet_seq_err[0x20]; + +	u8         reserved_at_2a0[0x20]; + +	u8         implied_nak_seq_err[0x20]; + +	u8         reserved_at_2e0[0x20]; + +	u8         local_ack_timeout_err[0x20]; + +	u8         reserved_at_320[0x4e0];  };  struct mlx5_ifc_query_q_counter_in_bits { @@ -5004,6 +5136,28 @@ struct mlx5_ifc_detach_from_mcg_in_bits {  	u8         multicast_gid[16][0x8];  }; +struct mlx5_ifc_destroy_xrq_out_bits { +	u8         status[0x8]; +	u8         reserved_at_8[0x18]; + +	u8         syndrome[0x20]; + +	u8         reserved_at_40[0x40]; +}; + +struct mlx5_ifc_destroy_xrq_in_bits { +	u8         opcode[0x10]; +	u8         reserved_at_10[0x10]; + +	u8         reserved_at_20[0x10]; +	u8         op_mod[0x10]; + +	u8         reserved_at_40[0x8]; +	u8         xrqn[0x18]; + +	u8         reserved_at_60[0x20]; +}; +  struct mlx5_ifc_destroy_xrc_srq_out_bits {  	u8         status[0x8];  	u8         reserved_at_8[0x18]; @@ -5589,6 +5743,30 @@ struct mlx5_ifc_dealloc_flow_counter_in_bits {  	u8         reserved_at_60[0x20];  }; +struct mlx5_ifc_create_xrq_out_bits { +	u8         status[0x8]; +	u8         reserved_at_8[0x18]; + +	u8         syndrome[0x20]; + +	u8         reserved_at_40[0x8]; +	u8         xrqn[0x18]; + +	u8         reserved_at_60[0x20]; +}; + +struct mlx5_ifc_create_xrq_in_bits { +	u8         opcode[0x10]; +	u8         reserved_at_10[0x10]; + +	u8         reserved_at_20[0x10]; +	u8         op_mod[0x10]; + +	u8         reserved_at_40[0x40]; + +	struct mlx5_ifc_xrqc_bits xrq_context; +}; +  struct mlx5_ifc_create_xrc_srq_out_bits {  	u8         status[0x8];  	u8         reserved_at_8[0x18]; @@ -6130,6 +6308,29 @@ struct mlx5_ifc_attach_to_mcg_in_bits {  	u8         multicast_gid[16][0x8];  }; +struct mlx5_ifc_arm_xrq_out_bits { +	u8         status[0x8]; +	u8         reserved_at_8[0x18]; + +	u8         syndrome[0x20]; + +	u8         reserved_at_40[0x40]; +}; + +struct mlx5_ifc_arm_xrq_in_bits { +	u8         opcode[0x10]; +	u8         reserved_at_10[0x10]; + +	u8         reserved_at_20[0x10]; +	u8         op_mod[0x10]; + +	u8         reserved_at_40[0x8]; +	u8         xrqn[0x18]; + +	u8         reserved_at_60[0x10]; +	u8         lwm[0x10]; +}; +  struct mlx5_ifc_arm_xrc_srq_out_bits {  	u8         status[0x8];  	u8         reserved_at_8[0x18]; @@ -6167,7 +6368,8 @@ struct mlx5_ifc_arm_rq_out_bits {  };  enum { -	MLX5_ARM_RQ_IN_OP_MOD_SRQ_  = 0x1, +	MLX5_ARM_RQ_IN_OP_MOD_SRQ = 0x1, +	MLX5_ARM_RQ_IN_OP_MOD_XRQ = 0x2,  };  struct mlx5_ifc_arm_rq_in_bits { @@ -6360,6 +6562,30 @@ struct mlx5_ifc_add_vxlan_udp_dport_in_bits {  	u8         vxlan_udp_port[0x10];  }; +struct mlx5_ifc_set_rate_limit_out_bits { +	u8         status[0x8]; +	u8         reserved_at_8[0x18]; + +	u8         syndrome[0x20]; + +	u8         reserved_at_40[0x40]; +}; + +struct mlx5_ifc_set_rate_limit_in_bits { +	u8         opcode[0x10]; +	u8         reserved_at_10[0x10]; + +	u8         reserved_at_20[0x10]; +	u8         op_mod[0x10]; + +	u8         reserved_at_40[0x10]; +	u8         rate_limit_index[0x10]; + +	u8         reserved_at_60[0x20]; + +	u8         rate_limit[0x20]; +}; +  struct mlx5_ifc_access_register_out_bits {  	u8         status[0x8];  	u8         reserved_at_8[0x18]; @@ -6484,12 +6710,15 @@ struct mlx5_ifc_pude_reg_bits {  };  struct mlx5_ifc_ptys_reg_bits { -	u8         reserved_at_0[0x8]; +	u8         an_disable_cap[0x1]; +	u8         an_disable_admin[0x1]; +	u8         reserved_at_2[0x6];  	u8         local_port[0x8];  	u8         reserved_at_10[0xd];  	u8         proto_mask[0x3]; -	u8         reserved_at_20[0x40]; +	u8         an_status[0x4]; +	u8         reserved_at_24[0x3c];  	u8         eth_proto_capability[0x20]; @@ -7450,4 +7679,34 @@ struct mlx5_ifc_mcia_reg_bits {  	u8         dword_11[0x20];  }; +struct mlx5_ifc_dcbx_param_bits { +	u8         dcbx_cee_cap[0x1]; +	u8         dcbx_ieee_cap[0x1]; +	u8         dcbx_standby_cap[0x1]; +	u8         reserved_at_0[0x5]; +	u8         port_number[0x8]; +	u8         reserved_at_10[0xa]; +	u8         max_application_table_size[6]; +	u8         reserved_at_20[0x15]; +	u8         version_oper[0x3]; +	u8         reserved_at_38[5]; +	u8         version_admin[0x3]; +	u8         willing_admin[0x1]; +	u8         reserved_at_41[0x3]; +	u8         pfc_cap_oper[0x4]; +	u8         reserved_at_48[0x4]; +	u8         pfc_cap_admin[0x4]; +	u8         reserved_at_50[0x4]; +	u8         num_of_tc_oper[0x4]; +	u8         reserved_at_58[0x4]; +	u8         num_of_tc_admin[0x4]; +	u8         remote_willing[0x1]; +	u8         reserved_at_61[3]; +	u8         remote_pfc_cap[4]; +	u8         reserved_at_68[0x14]; +	u8         remote_num_of_tc[0x4]; +	u8         reserved_at_80[0x18]; +	u8         error[0x8]; +	u8         reserved_at_a0[0x160]; +};  #endif /* MLX5_IFC_H */ diff --git a/include/linux/mlx5/port.h b/include/linux/mlx5/port.h index 9851862c0ec5..e3012cc64b8a 100644 --- a/include/linux/mlx5/port.h +++ b/include/linux/mlx5/port.h @@ -47,6 +47,14 @@ enum mlx5_module_id {  	MLX5_MODULE_ID_QSFP28           = 0x11,  }; +enum mlx5_an_status { +	MLX5_AN_UNAVAILABLE = 0, +	MLX5_AN_COMPLETE    = 1, +	MLX5_AN_FAILED      = 2, +	MLX5_AN_LINK_UP     = 3, +	MLX5_AN_LINK_DOWN   = 4, +}; +  #define MLX5_EEPROM_MAX_BYTES			32  #define MLX5_EEPROM_IDENTIFIER_BYTE_MASK	0x000000ff  #define MLX5_I2C_ADDR_LOW		0x50 @@ -65,13 +73,17 @@ int mlx5_query_port_link_width_oper(struct mlx5_core_dev *dev,  int mlx5_query_port_proto_oper(struct mlx5_core_dev *dev,  			       u8 *proto_oper, int proto_mask,  			       u8 local_port); -int mlx5_set_port_proto(struct mlx5_core_dev *dev, u32 proto_admin, -			int proto_mask); +int mlx5_set_port_ptys(struct mlx5_core_dev *dev, bool an_disable, +		       u32 proto_admin, int proto_mask); +void mlx5_toggle_port_link(struct mlx5_core_dev *dev);  int mlx5_set_port_admin_status(struct mlx5_core_dev *dev,  			       enum mlx5_port_status status);  int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,  				 enum mlx5_port_status *status);  int mlx5_set_port_beacon(struct mlx5_core_dev *dev, u16 beacon_duration); +void mlx5_query_port_autoneg(struct mlx5_core_dev *dev, int proto_mask, +			     u8 *an_status, +			     u8 *an_disable_cap, u8 *an_disable_admin);  int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port);  void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu, u8 port); diff --git a/include/linux/mlx5/qp.h b/include/linux/mlx5/qp.h index 266320feb160..ab310819ac36 100644 --- a/include/linux/mlx5/qp.h +++ b/include/linux/mlx5/qp.h @@ -172,6 +172,7 @@ enum {  enum {  	MLX5_FENCE_MODE_NONE			= 0 << 5,  	MLX5_FENCE_MODE_INITIATOR_SMALL		= 1 << 5, +	MLX5_FENCE_MODE_FENCE			= 2 << 5,  	MLX5_FENCE_MODE_STRONG_ORDERING		= 3 << 5,  	MLX5_FENCE_MODE_SMALL_AND_FENCE		= 4 << 5,  }; diff --git a/include/linux/mlx5/vport.h b/include/linux/mlx5/vport.h index 6c16c198f680..e087b7d047ac 100644 --- a/include/linux/mlx5/vport.h +++ b/include/linux/mlx5/vport.h @@ -43,6 +43,8 @@ int mlx5_modify_vport_admin_state(struct mlx5_core_dev *mdev, u8 opmod,  				  u16 vport, u8 state);  int mlx5_query_nic_vport_mac_address(struct mlx5_core_dev *mdev,  				     u16 vport, u8 *addr); +void mlx5_query_nic_vport_min_inline(struct mlx5_core_dev *mdev, +				     u8 *min_inline);  int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *dev,  				      u16 vport, u8 *addr);  int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu); |