The branch main has been updated by hselasky:

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

commit a00718e1dfcd9b1f0a1b2706f552cd003ea082d8
Author:     Hans Petter Selasky <hsela...@freebsd.org>
AuthorDate: 2021-01-08 11:12:02 +0000
Commit:     Hans Petter Selasky <hsela...@freebsd.org>
CommitDate: 2021-01-08 11:35:55 +0000

    Implement SIOCGIFRSSKEY and SIOCGIFRSSHASH and mlx5en(4).
    
    MFC after: 1 week
    Sponsored by: Mellanox Technologies // NVIDIA Networking
---
 sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 62 ++++++++++++++++++++++++++++++-------
 1 file changed, 51 insertions(+), 11 deletions(-)

diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c 
b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
index c23335eb712e..37a494e35629 100644
--- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
+++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
@@ -2756,6 +2756,31 @@ mlx5e_close_rqt(struct mlx5e_priv *priv)
        mlx5_cmd_exec(priv->mdev, in, sizeof(in), out, sizeof(out));
 }
 
+#define        MLX5E_RSS_KEY_SIZE (10 * 4)     /* bytes */
+
+static void
+mlx5e_get_rss_key(void *key_ptr)
+{
+#ifdef RSS
+       rss_getkey(key_ptr);
+#else
+       static const u32 rsskey[] = {
+           cpu_to_be32(0xD181C62C),
+           cpu_to_be32(0xF7F4DB5B),
+           cpu_to_be32(0x1983A2FC),
+           cpu_to_be32(0x943E1ADB),
+           cpu_to_be32(0xD9389E6B),
+           cpu_to_be32(0xD1039C2C),
+           cpu_to_be32(0xA74499AD),
+           cpu_to_be32(0x593D56D9),
+           cpu_to_be32(0xF3253C06),
+           cpu_to_be32(0x2ADC1FFC),
+       };
+       CTASSERT(sizeof(rsskey) == MLX5E_RSS_KEY_SIZE);
+       memcpy(key_ptr, rsskey, MLX5E_RSS_KEY_SIZE);
+#endif
+}
+
 static void
 mlx5e_build_tir_ctx(struct mlx5e_priv *priv, u32 * tirc, int tt)
 {
@@ -2807,26 +2832,19 @@ mlx5e_build_tir_ctx(struct mlx5e_priv *priv, u32 * 
tirc, int tt)
                MLX5_SET(tirc, tirc, rx_hash_fn,
                    MLX5_TIRC_RX_HASH_FN_HASH_TOEPLITZ);
                hkey = (__be32 *) MLX5_ADDR_OF(tirc, tirc, 
rx_hash_toeplitz_key);
+
+               CTASSERT(MLX5_FLD_SZ_BYTES(tirc, rx_hash_toeplitz_key) >=
+                   MLX5E_RSS_KEY_SIZE);
 #ifdef RSS
                /*
                 * The FreeBSD RSS implementation does currently not
                 * support symmetric Toeplitz hashes:
                 */
                MLX5_SET(tirc, tirc, rx_hash_symmetric, 0);
-               rss_getkey((uint8_t *)hkey);
 #else
                MLX5_SET(tirc, tirc, rx_hash_symmetric, 1);
-               hkey[0] = cpu_to_be32(0xD181C62C);
-               hkey[1] = cpu_to_be32(0xF7F4DB5B);
-               hkey[2] = cpu_to_be32(0x1983A2FC);
-               hkey[3] = cpu_to_be32(0x943E1ADB);
-               hkey[4] = cpu_to_be32(0xD9389E6B);
-               hkey[5] = cpu_to_be32(0xD1039C2C);
-               hkey[6] = cpu_to_be32(0xA74499AD);
-               hkey[7] = cpu_to_be32(0x593D56D9);
-               hkey[8] = cpu_to_be32(0xF3253C06);
-               hkey[9] = cpu_to_be32(0x2ADC1FFC);
 #endif
+               mlx5e_get_rss_key(hkey);
                break;
        }
 
@@ -3259,6 +3277,8 @@ mlx5e_ioctl(struct ifnet *ifp, u_long command, caddr_t 
data)
        struct ifreq *ifr;
        struct ifdownreason *ifdr;
        struct ifi2creq i2c;
+       struct ifrsskey *ifrk;
+       struct ifrsshash *ifrh;
        int error = 0;
        int mask = 0;
        int size_read = 0;
@@ -3541,6 +3561,26 @@ err_i2c:
                        ifdr->ifdr_reason = IFDR_REASON_MSG;
                break;
 
+       case SIOCGIFRSSKEY:
+               ifrk = (struct ifrsskey *)data;
+               ifrk->ifrk_func = RSS_FUNC_TOEPLITZ;
+               ifrk->ifrk_keylen = MLX5E_RSS_KEY_SIZE;
+               CTASSERT(sizeof(ifrk->ifrk_key) >= MLX5E_RSS_KEY_SIZE);
+               mlx5e_get_rss_key(ifrk->ifrk_key);
+               break;
+
+       case SIOCGIFRSSHASH:
+               ifrh = (struct ifrsshash *)data;
+               ifrh->ifrh_func = RSS_FUNC_TOEPLITZ;
+               ifrh->ifrh_types =
+                   RSS_TYPE_IPV4 |
+                   RSS_TYPE_TCP_IPV4 |
+                   RSS_TYPE_UDP_IPV4 |
+                   RSS_TYPE_IPV6 |
+                   RSS_TYPE_TCP_IPV6 |
+                   RSS_TYPE_UDP_IPV6;
+               break;
+
        default:
                error = ether_ioctl(ifp, command, data);
                break;
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to