2015-05-29 03:28:47 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2013-2015, Mellanox Technologies, Ltd. 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 __MLX5_VPORT_H__
|
|
|
|
#define __MLX5_VPORT_H__
|
|
|
|
|
|
|
|
#include <linux/mlx5/driver.h>
|
2015-12-02 00:03:12 +08:00
|
|
|
#include <linux/mlx5/device.h>
|
2015-05-29 03:28:47 +08:00
|
|
|
|
2018-12-14 23:33:22 +08:00
|
|
|
#define MLX5_VPORT_PF_PLACEHOLDER (1u)
|
|
|
|
#define MLX5_VPORT_UPLINK_PLACEHOLDER (1u)
|
2018-12-11 01:59:33 +08:00
|
|
|
#define MLX5_VPORT_ECPF_PLACEHOLDER(mdev) (mlx5_ecpf_vport_exists(mdev))
|
2018-12-14 23:33:22 +08:00
|
|
|
|
2018-12-11 01:59:33 +08:00
|
|
|
#define MLX5_SPECIAL_VPORTS(mdev) (MLX5_VPORT_PF_PLACEHOLDER + \
|
|
|
|
MLX5_VPORT_UPLINK_PLACEHOLDER + \
|
|
|
|
MLX5_VPORT_ECPF_PLACEHOLDER(mdev))
|
2018-12-14 23:33:22 +08:00
|
|
|
|
2019-02-13 14:55:41 +08:00
|
|
|
#define MLX5_VPORT_MANAGER(mdev) \
|
|
|
|
(MLX5_CAP_GEN(mdev, vport_group_manager) && \
|
|
|
|
(MLX5_CAP_GEN(mdev, port_type) == MLX5_CAP_PORT_TYPE_ETH) && \
|
|
|
|
mlx5_core_is_pf(mdev))
|
|
|
|
|
2016-11-23 05:09:58 +08:00
|
|
|
enum {
|
|
|
|
MLX5_CAP_INLINE_MODE_L2,
|
|
|
|
MLX5_CAP_INLINE_MODE_VPORT_CONTEXT,
|
|
|
|
MLX5_CAP_INLINE_MODE_NOT_REQUIRED,
|
|
|
|
};
|
|
|
|
|
2019-06-29 06:36:22 +08:00
|
|
|
/* Vport number for each function must keep unchanged */
|
2019-02-13 14:55:40 +08:00
|
|
|
enum {
|
2018-11-09 04:37:04 +08:00
|
|
|
MLX5_VPORT_PF = 0x0,
|
net/mlx5: E-Switch, Split VF and special vports for offloads mode
When driver is entering offloads mode, there are two major tasks to
do: initialize flow steering and create representors. Flow steering
should make sure enough flow table/group spaces are reserved for all
reps. Representors will be created in a group, all or none.
With the introduction of ECPF, flow steering should still reserve the
same spaces. But, the representors are not always loaded/unloaded in a
single piece. Once ECPF is in offloads mode, it will get the number
of VF changing event from host PF. In such scenario, only the VF reps
should be loaded/unloaded, not the reps for special vports (such as
the uplink vport).
Thus, when entering offloads mode, driver should specify the total
number of reps, and the number of VF reps separately. When leaving
offloads mode, the cleanup should use the information self-contained
in eswitch such as number of VFs.
This patch doesn't change any functionality.
Signed-off-by: Bodong Wang <bodong@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
2019-02-01 04:40:53 +08:00
|
|
|
MLX5_VPORT_FIRST_VF = 0x1,
|
2018-11-09 04:37:04 +08:00
|
|
|
MLX5_VPORT_ECPF = 0xfffe,
|
2019-02-13 14:55:40 +08:00
|
|
|
MLX5_VPORT_UPLINK = 0xffff
|
|
|
|
};
|
|
|
|
|
2015-12-02 00:03:13 +08:00
|
|
|
u8 mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod, u16 vport);
|
|
|
|
int mlx5_modify_vport_admin_state(struct mlx5_core_dev *mdev, u8 opmod,
|
2019-02-02 07:34:55 +08:00
|
|
|
u16 vport, u8 other_vport, u8 state);
|
2015-12-02 00:03:11 +08:00
|
|
|
int mlx5_query_nic_vport_mac_address(struct mlx5_core_dev *mdev,
|
2019-06-29 06:36:13 +08:00
|
|
|
u16 vport, bool other, u8 *addr);
|
|
|
|
int mlx5_query_mac_address(struct mlx5_core_dev *mdev, u8 *addr);
|
2016-11-23 05:09:58 +08:00
|
|
|
int mlx5_query_nic_vport_min_inline(struct mlx5_core_dev *mdev,
|
|
|
|
u16 vport, u8 *min_inline);
|
2016-12-01 02:23:51 +08:00
|
|
|
void mlx5_query_min_inline(struct mlx5_core_dev *mdev, u8 *min_inline);
|
2016-08-03 22:27:30 +08:00
|
|
|
int mlx5_modify_nic_vport_min_inline(struct mlx5_core_dev *mdev,
|
|
|
|
u16 vport, u8 min_inline);
|
2015-12-02 00:03:11 +08:00
|
|
|
int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *dev,
|
2020-06-19 11:32:50 +08:00
|
|
|
u16 vport, const u8 *addr);
|
2016-04-22 05:33:05 +08:00
|
|
|
int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu);
|
|
|
|
int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu);
|
2015-12-24 00:47:20 +08:00
|
|
|
int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,
|
|
|
|
u64 *system_image_guid);
|
|
|
|
int mlx5_query_nic_vport_node_guid(struct mlx5_core_dev *mdev, u64 *node_guid);
|
2016-06-10 05:07:37 +08:00
|
|
|
int mlx5_modify_nic_vport_node_guid(struct mlx5_core_dev *mdev,
|
2019-02-13 14:55:33 +08:00
|
|
|
u16 vport, u64 node_guid);
|
2015-12-24 00:47:20 +08:00
|
|
|
int mlx5_query_nic_vport_qkey_viol_cntr(struct mlx5_core_dev *mdev,
|
|
|
|
u16 *qkey_viol_cntr);
|
2015-06-05 00:30:41 +08:00
|
|
|
int mlx5_query_hca_vport_gid(struct mlx5_core_dev *dev, u8 other_vport,
|
|
|
|
u8 port_num, u16 vf_num, u16 gid_index,
|
|
|
|
union ib_gid *gid);
|
|
|
|
int mlx5_query_hca_vport_pkey(struct mlx5_core_dev *dev, u8 other_vport,
|
|
|
|
u8 port_num, u16 vf_num, u16 pkey_index,
|
|
|
|
u16 *pkey);
|
|
|
|
int mlx5_query_hca_vport_context(struct mlx5_core_dev *dev,
|
|
|
|
u8 other_vport, u8 port_num,
|
|
|
|
u16 vf_num,
|
|
|
|
struct mlx5_hca_vport_context *rep);
|
|
|
|
int mlx5_query_hca_vport_system_image_guid(struct mlx5_core_dev *dev,
|
2015-06-07 20:44:23 +08:00
|
|
|
u64 *sys_image_guid);
|
2015-06-05 00:30:41 +08:00
|
|
|
int mlx5_query_hca_vport_node_guid(struct mlx5_core_dev *dev,
|
|
|
|
u64 *node_guid);
|
2015-12-02 00:03:12 +08:00
|
|
|
int mlx5_query_nic_vport_mac_list(struct mlx5_core_dev *dev,
|
2019-02-13 14:55:33 +08:00
|
|
|
u16 vport,
|
2015-12-02 00:03:12 +08:00
|
|
|
enum mlx5_list_type list_type,
|
|
|
|
u8 addr_list[][ETH_ALEN],
|
|
|
|
int *list_size);
|
|
|
|
int mlx5_modify_nic_vport_mac_list(struct mlx5_core_dev *dev,
|
|
|
|
enum mlx5_list_type list_type,
|
|
|
|
u8 addr_list[][ETH_ALEN],
|
|
|
|
int list_size);
|
2015-12-02 00:03:14 +08:00
|
|
|
int mlx5_query_nic_vport_promisc(struct mlx5_core_dev *mdev,
|
2019-02-13 14:55:33 +08:00
|
|
|
u16 vport,
|
2015-12-02 00:03:14 +08:00
|
|
|
int *promisc_uc,
|
|
|
|
int *promisc_mc,
|
|
|
|
int *promisc_all);
|
|
|
|
int mlx5_modify_nic_vport_promisc(struct mlx5_core_dev *mdev,
|
|
|
|
int promisc_uc,
|
|
|
|
int promisc_mc,
|
|
|
|
int promisc_all);
|
2015-12-02 00:03:15 +08:00
|
|
|
int mlx5_modify_nic_vport_vlans(struct mlx5_core_dev *dev,
|
|
|
|
u16 vlans[],
|
|
|
|
int list_size);
|
2015-05-29 03:28:47 +08:00
|
|
|
|
2015-12-24 00:47:19 +08:00
|
|
|
int mlx5_nic_vport_enable_roce(struct mlx5_core_dev *mdev);
|
|
|
|
int mlx5_nic_vport_disable_roce(struct mlx5_core_dev *mdev);
|
2018-01-14 06:56:25 +08:00
|
|
|
int mlx5_query_vport_down_stats(struct mlx5_core_dev *mdev, u16 vport,
|
2019-02-02 07:34:55 +08:00
|
|
|
u8 other_vport, u64 *rx_discard_vport_down,
|
2018-01-14 06:56:25 +08:00
|
|
|
u64 *tx_discard_vport_down);
|
2016-02-19 00:14:59 +08:00
|
|
|
int mlx5_core_query_vport_counter(struct mlx5_core_dev *dev, u8 other_vport,
|
2020-04-07 23:59:51 +08:00
|
|
|
int vf, u8 port_num, void *out);
|
2016-03-12 04:58:41 +08:00
|
|
|
int mlx5_core_modify_hca_vport_context(struct mlx5_core_dev *dev,
|
|
|
|
u8 other_vport, u8 port_num,
|
|
|
|
int vf,
|
|
|
|
struct mlx5_hca_vport_context *req);
|
2017-05-30 14:42:53 +08:00
|
|
|
int mlx5_nic_vport_update_local_lb(struct mlx5_core_dev *mdev, bool enable);
|
|
|
|
int mlx5_nic_vport_query_local_lb(struct mlx5_core_dev *mdev, bool *status);
|
{net, IB}/mlx5: Manage port association for multiport RoCE
When mlx5_ib_add is called determine if the mlx5 core device being
added is capable of dual port RoCE operation. If it is, determine
whether it is a master device or a slave device using the
num_vhca_ports and affiliate_nic_vport_criteria capabilities.
If the device is a slave, attempt to find a master device to affiliate it
with. Devices that can be affiliated will share a system image guid. If
none are found place it on a list of unaffiliated ports. If a master is
found bind the port to it by configuring the port affiliation in the NIC
vport context.
Similarly when mlx5_ib_remove is called determine the port type. If it's
a slave port, unaffiliate it from the master device, otherwise just
remove it from the unaffiliated port list.
The IB device is registered as a multiport device, even if a 2nd port is
not available for affiliation. When the 2nd port is affiliated later the
GID cache must be refreshed in order to get the default GIDs for the 2nd
port in the cache. Export roce_rescan_device to provide a mechanism to
refresh the cache after a new port is bound.
In a multiport configuration all IB object (QP, MR, PD, etc) related
commands should flow through the master mlx5_core_dev, other commands
must be sent to the slave port mlx5_core_mdev, an interface is provide
to get the correct mdev for non IB object commands.
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
2018-01-04 23:25:36 +08:00
|
|
|
|
|
|
|
int mlx5_nic_vport_affiliate_multiport(struct mlx5_core_dev *master_mdev,
|
|
|
|
struct mlx5_core_dev *port_mdev);
|
|
|
|
int mlx5_nic_vport_unaffiliate_multiport(struct mlx5_core_dev *port_mdev);
|
2018-09-05 22:06:37 +08:00
|
|
|
|
|
|
|
u64 mlx5_query_nic_system_image_guid(struct mlx5_core_dev *mdev);
|
2015-05-29 03:28:47 +08:00
|
|
|
#endif /* __MLX5_VPORT_H__ */
|