git: 21228c67ab10 - main - mlx5en: Implement helper functions to open and close TLS TIR context.

From: Hans Petter Selasky <hselasky_at_FreeBSD.org>
Date: Tue, 01 Feb 2022 15:24:18 UTC
The branch main has been updated by hselasky:

URL: https://cgit.FreeBSD.org/src/commit/?id=21228c67ab10570ed63becf6a8b63418fe5f8a83

commit 21228c67ab10570ed63becf6a8b63418fe5f8a83
Author:     Hans Petter Selasky <hselasky@FreeBSD.org>
AuthorDate: 2022-02-01 15:20:09 +0000
Commit:     Hans Petter Selasky <hselasky@FreeBSD.org>
CommitDate: 2022-02-01 15:21:15 +0000

    mlx5en: Implement helper functions to open and close TLS TIR context.
    
    MFC after:      1 week
    Sponsored by:   NVIDIA Networking
---
 sys/dev/mlx5/mlx5_core/mlx5_tls.c | 31 ++++++++++++++++++++++++++++++-
 sys/dev/mlx5/tls.h                |  4 +++-
 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__ */