aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2022-02-01 15:20:09 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2022-02-01 15:21:15 +0000
commit21228c67ab10570ed63becf6a8b63418fe5f8a83 (patch)
treea333cd2cb49edfeb2aee1213a63180c069f221aa /sys/dev
parent75767cb88997b6b3fc99b2336de8398cff46db2a (diff)
downloadsrc-21228c67ab10570ed63becf6a8b63418fe5f8a83.tar.gz
src-21228c67ab10570ed63becf6a8b63418fe5f8a83.zip
mlx5en: Implement helper functions to open and close TLS TIR context.
MFC after: 1 week Sponsored by: NVIDIA Networking
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/mlx5/mlx5_core/mlx5_tls.c31
-rw-r--r--sys/dev/mlx5/tls.h4
2 files changed, 33 insertions, 2 deletions
diff --git a/sys/dev/mlx5/mlx5_core/mlx5_tls.c b/sys/dev/mlx5/mlx5_core/mlx5_tls.c
index b8de7acd9277..bda1a3954b53 100644
--- a/sys/dev/mlx5/mlx5_core/mlx5_tls.c
+++ b/sys/dev/mlx5/mlx5_core/mlx5_tls.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2019, Mellanox Technologies, Ltd. All rights reserved.
+ * Copyright (c) 2019-2021, Mellanox Technologies, Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -120,3 +120,32 @@ void mlx5_tls_close_tis(struct mlx5_core_dev *mdev, u32 tisn)
mlx5_core_destroy_tis(mdev, tisn, 0);
}
+
+int mlx5_tls_open_tir(struct mlx5_core_dev *mdev, int tdn, int rqtn, u32 *p_tirn)
+{
+ u32 in[MLX5_ST_SZ_DW(create_tir_in)] = {};
+ void *tirc = MLX5_ADDR_OF(create_tir_in, in, tir_context);
+ int err;
+
+ MLX5_SET(tirc, tirc, transport_domain, tdn);
+ MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_INDIRECT);
+ MLX5_SET(tirc, tirc, rx_hash_fn, MLX5_TIRC_RX_HASH_FN_HASH_INVERTED_XOR8);
+ MLX5_SET(tirc, tirc, indirect_table, rqtn);
+ MLX5_SET(tirc, tirc, tls_en, 1);
+ MLX5_SET(tirc, tirc, self_lb_en,
+ MLX5_TIRC_SELF_LB_EN_ENABLE_UNICAST |
+ MLX5_TIRC_SELF_LB_EN_ENABLE_MULTICAST);
+
+ err = mlx5_core_create_tir(mdev, in, sizeof(in), p_tirn);
+ if (err)
+ return (err);
+ else if (*p_tirn == 0)
+ return (-EINVAL);
+ else
+ return (0); /* success */
+}
+
+void mlx5_tls_close_tir(struct mlx5_core_dev *mdev, u32 tirn)
+{
+ mlx5_core_destroy_tir(mdev, tirn, 0);
+}
diff --git a/sys/dev/mlx5/tls.h b/sys/dev/mlx5/tls.h
index 86f56e1aebaa..d9e62540b8fe 100644
--- a/sys/dev/mlx5/tls.h
+++ b/sys/dev/mlx5/tls.h
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2019, Mellanox Technologies, Ltd. All rights reserved.
+ * Copyright (c) 2019-2021, Mellanox Technologies, Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -35,5 +35,7 @@ int mlx5_encryption_key_create(struct mlx5_core_dev *mdev, u32 pdn,
int mlx5_encryption_key_destroy(struct mlx5_core_dev *mdev, u32 oid);
int mlx5_tls_open_tis(struct mlx5_core_dev *mdev, int tc, int tdn, int pdn, u32 *p_tisn);
void mlx5_tls_close_tis(struct mlx5_core_dev *mdev, u32 tisn);
+int mlx5_tls_open_tir(struct mlx5_core_dev *mdev, int tdn, int rqtn, u32 *p_tirn);
+void mlx5_tls_close_tir(struct mlx5_core_dev *mdev, u32 tirn);
#endif /* __MLX5_TLS_H__ */