net/mlx5: SD, Introduce SD lib
Add Socket-Direct API with empty/minimal implementation. We fill-in the implementation gradually in downstream patches. Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Gal Pressman <gal@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
committed by
Saeed Mahameed
parent
a0873a5d54
commit
75a543962e
@@ -29,7 +29,7 @@ mlx5_core-$(CONFIG_MLX5_CORE_EN) += en/rqt.o en/tir.o en/rss.o en/rx_res.o \
|
||||
en/reporter_tx.o en/reporter_rx.o en/params.o en/xsk/pool.o \
|
||||
en/xsk/setup.o en/xsk/rx.o en/xsk/tx.o en/devlink.o en/ptp.o \
|
||||
en/qos.o en/htb.o en/trap.o en/fs_tt_redirect.o en/selq.o \
|
||||
lib/crypto.o
|
||||
lib/crypto.o lib/sd.o
|
||||
|
||||
#
|
||||
# Netdev extra
|
||||
|
||||
@@ -54,4 +54,15 @@ static inline struct net_device *mlx5_uplink_netdev_get(struct mlx5_core_dev *md
|
||||
{
|
||||
return mdev->mlx5e_res.uplink_netdev;
|
||||
}
|
||||
|
||||
struct mlx5_sd;
|
||||
|
||||
static inline struct mlx5_sd *mlx5_get_sd(struct mlx5_core_dev *dev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void mlx5_set_sd(struct mlx5_core_dev *dev, struct mlx5_sd *sd)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
60
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
Normal file
60
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
Normal file
@@ -0,0 +1,60 @@
|
||||
// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
|
||||
/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
|
||||
|
||||
#include "lib/sd.h"
|
||||
#include "mlx5_core.h"
|
||||
|
||||
#define sd_info(__dev, format, ...) \
|
||||
dev_info((__dev)->device, "Socket-Direct: " format, ##__VA_ARGS__)
|
||||
#define sd_warn(__dev, format, ...) \
|
||||
dev_warn((__dev)->device, "Socket-Direct: " format, ##__VA_ARGS__)
|
||||
|
||||
struct mlx5_sd {
|
||||
};
|
||||
|
||||
static int mlx5_sd_get_host_buses(struct mlx5_core_dev *dev)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct mlx5_core_dev *
|
||||
mlx5_sd_primary_get_peer(struct mlx5_core_dev *primary, int idx)
|
||||
{
|
||||
if (idx == 0)
|
||||
return primary;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int mlx5_sd_ch_ix_get_dev_ix(struct mlx5_core_dev *dev, int ch_ix)
|
||||
{
|
||||
return ch_ix % mlx5_sd_get_host_buses(dev);
|
||||
}
|
||||
|
||||
int mlx5_sd_ch_ix_get_vec_ix(struct mlx5_core_dev *dev, int ch_ix)
|
||||
{
|
||||
return ch_ix / mlx5_sd_get_host_buses(dev);
|
||||
}
|
||||
|
||||
struct mlx5_core_dev *mlx5_sd_ch_ix_get_dev(struct mlx5_core_dev *primary, int ch_ix)
|
||||
{
|
||||
int mdev_idx = mlx5_sd_ch_ix_get_dev_ix(primary, ch_ix);
|
||||
|
||||
return mlx5_sd_primary_get_peer(primary, mdev_idx);
|
||||
}
|
||||
|
||||
int mlx5_sd_init(struct mlx5_core_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mlx5_sd_cleanup(struct mlx5_core_dev *dev)
|
||||
{
|
||||
}
|
||||
|
||||
struct auxiliary_device *mlx5_sd_get_adev(struct mlx5_core_dev *dev,
|
||||
struct auxiliary_device *adev,
|
||||
int idx)
|
||||
{
|
||||
return adev;
|
||||
}
|
||||
38
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.h
Normal file
38
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
|
||||
/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
|
||||
|
||||
#ifndef __MLX5_LIB_SD_H__
|
||||
#define __MLX5_LIB_SD_H__
|
||||
|
||||
#define MLX5_SD_MAX_GROUP_SZ 2
|
||||
|
||||
struct mlx5_sd;
|
||||
|
||||
struct mlx5_core_dev *mlx5_sd_primary_get_peer(struct mlx5_core_dev *primary, int idx);
|
||||
int mlx5_sd_ch_ix_get_dev_ix(struct mlx5_core_dev *dev, int ch_ix);
|
||||
int mlx5_sd_ch_ix_get_vec_ix(struct mlx5_core_dev *dev, int ch_ix);
|
||||
struct mlx5_core_dev *mlx5_sd_ch_ix_get_dev(struct mlx5_core_dev *primary, int ch_ix);
|
||||
struct auxiliary_device *mlx5_sd_get_adev(struct mlx5_core_dev *dev,
|
||||
struct auxiliary_device *adev,
|
||||
int idx);
|
||||
|
||||
int mlx5_sd_init(struct mlx5_core_dev *dev);
|
||||
void mlx5_sd_cleanup(struct mlx5_core_dev *dev);
|
||||
|
||||
#define mlx5_sd_for_each_dev_from_to(i, primary, ix_from, to, pos) \
|
||||
for (i = ix_from; \
|
||||
(pos = mlx5_sd_primary_get_peer(primary, i)) && pos != (to); i++)
|
||||
|
||||
#define mlx5_sd_for_each_dev(i, primary, pos) \
|
||||
mlx5_sd_for_each_dev_from_to(i, primary, 0, NULL, pos)
|
||||
|
||||
#define mlx5_sd_for_each_dev_to(i, primary, to, pos) \
|
||||
mlx5_sd_for_each_dev_from_to(i, primary, 0, to, pos)
|
||||
|
||||
#define mlx5_sd_for_each_secondary(i, primary, pos) \
|
||||
mlx5_sd_for_each_dev_from_to(i, primary, 1, NULL, pos)
|
||||
|
||||
#define mlx5_sd_for_each_secondary_to(i, primary, to, pos) \
|
||||
mlx5_sd_for_each_dev_from_to(i, primary, 1, to, pos)
|
||||
|
||||
#endif /* __MLX5_LIB_SD_H__ */
|
||||
Reference in New Issue
Block a user