122681deeSAlex Vesker /* SPDX-License-Identifier: BSD-3-Clause
222681deeSAlex Vesker * Copyright (c) 2022 NVIDIA Corporation & Affiliates
322681deeSAlex Vesker */
422681deeSAlex Vesker
522681deeSAlex Vesker #ifndef MLX5DR_INTERNAL_H_
622681deeSAlex Vesker #define MLX5DR_INTERNAL_H_
722681deeSAlex Vesker
822681deeSAlex Vesker #include <stdint.h>
922681deeSAlex Vesker #include <sys/queue.h>
1022681deeSAlex Vesker /* Verbs headers do not support -pedantic. */
1122681deeSAlex Vesker #ifdef PEDANTIC
1222681deeSAlex Vesker #pragma GCC diagnostic ignored "-Wpedantic"
1322681deeSAlex Vesker #endif
1422681deeSAlex Vesker #include <infiniband/verbs.h>
1522681deeSAlex Vesker #include <infiniband/mlx5dv.h>
1622681deeSAlex Vesker #ifdef PEDANTIC
1722681deeSAlex Vesker #pragma GCC diagnostic error "-Wpedantic"
1822681deeSAlex Vesker #endif
1922681deeSAlex Vesker #include <rte_flow.h>
2022681deeSAlex Vesker #include <rte_gtp.h>
21ce946c7dSErez Shitrit #include <rte_random.h>
2222681deeSAlex Vesker
2322681deeSAlex Vesker #include "mlx5_prm.h"
2422681deeSAlex Vesker #include "mlx5_glue.h"
2522681deeSAlex Vesker #include "mlx5_flow.h"
2622681deeSAlex Vesker #include "mlx5_utils.h"
2722681deeSAlex Vesker #include "mlx5_malloc.h"
2822681deeSAlex Vesker
2922681deeSAlex Vesker #include "mlx5dr.h"
3022681deeSAlex Vesker #include "mlx5dr_pool.h"
3122681deeSAlex Vesker #include "mlx5dr_context.h"
3222681deeSAlex Vesker #include "mlx5dr_table.h"
3322681deeSAlex Vesker #include "mlx5dr_send.h"
3422681deeSAlex Vesker #include "mlx5dr_rule.h"
3522681deeSAlex Vesker #include "mlx5dr_cmd.h"
3622681deeSAlex Vesker #include "mlx5dr_action.h"
3722681deeSAlex Vesker #include "mlx5dr_definer.h"
3827ac2da9SAlex Vesker #include "mlx5dr_matcher.h"
3922681deeSAlex Vesker #include "mlx5dr_debug.h"
4022681deeSAlex Vesker #include "mlx5dr_pat_arg.h"
417f5e6de5SItamar Gozlan #include "mlx5dr_crc32.h"
42*87026d2eSYevgeny Kliteynik #include "mlx5dr_bwc.h"
4322681deeSAlex Vesker
4413769225SHamdan Igbaria #define W_SIZE 2
4522681deeSAlex Vesker #define DW_SIZE 4
4622681deeSAlex Vesker #define BITS_IN_BYTE 8
4722681deeSAlex Vesker #define BITS_IN_DW (BITS_IN_BYTE * DW_SIZE)
4822681deeSAlex Vesker
4922681deeSAlex Vesker #define BIT(_bit) (1ULL << (_bit))
5022681deeSAlex Vesker #define IS_BIT_SET(_value, _bit) ((_value) & (1ULL << (_bit)))
5122681deeSAlex Vesker
5222681deeSAlex Vesker #ifndef ARRAY_SIZE
5322681deeSAlex Vesker #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
5422681deeSAlex Vesker #endif
5522681deeSAlex Vesker
5622681deeSAlex Vesker #ifdef RTE_LIBRTE_MLX5_DEBUG
5722681deeSAlex Vesker /* Prevent double function name print when debug is set */
5822681deeSAlex Vesker #define DR_LOG DRV_LOG
5922681deeSAlex Vesker #else
6022681deeSAlex Vesker /* Print function name as part of the log */
6122681deeSAlex Vesker #define DR_LOG(level, ...) \
6222681deeSAlex Vesker DRV_LOG(level, RTE_FMT("[%s]: " RTE_FMT_HEAD(__VA_ARGS__,), __func__, RTE_FMT_TAIL(__VA_ARGS__,)))
6322681deeSAlex Vesker #endif
6422681deeSAlex Vesker
simple_malloc(size_t size)6522681deeSAlex Vesker static inline void *simple_malloc(size_t size)
6622681deeSAlex Vesker {
6722681deeSAlex Vesker return mlx5_malloc(MLX5_MEM_SYS,
6822681deeSAlex Vesker size,
6922681deeSAlex Vesker MLX5_MALLOC_ALIGNMENT,
7022681deeSAlex Vesker SOCKET_ID_ANY);
7122681deeSAlex Vesker }
7222681deeSAlex Vesker
simple_calloc(size_t nmemb,size_t size)7322681deeSAlex Vesker static inline void *simple_calloc(size_t nmemb, size_t size)
7422681deeSAlex Vesker {
7522681deeSAlex Vesker return mlx5_malloc(MLX5_MEM_SYS | MLX5_MEM_ZERO,
7622681deeSAlex Vesker nmemb * size,
7722681deeSAlex Vesker MLX5_MALLOC_ALIGNMENT,
7822681deeSAlex Vesker SOCKET_ID_ANY);
7922681deeSAlex Vesker }
8022681deeSAlex Vesker
simple_free(void * addr)8122681deeSAlex Vesker static inline void simple_free(void *addr)
8222681deeSAlex Vesker {
8322681deeSAlex Vesker mlx5_free(addr);
8422681deeSAlex Vesker }
8522681deeSAlex Vesker
is_mem_zero(const uint8_t * mem,size_t size)8622681deeSAlex Vesker static inline bool is_mem_zero(const uint8_t *mem, size_t size)
8722681deeSAlex Vesker {
8822681deeSAlex Vesker assert(size);
8922681deeSAlex Vesker return (*mem == 0) && memcmp(mem, mem + 1, size - 1) == 0;
9022681deeSAlex Vesker }
9122681deeSAlex Vesker
roundup_pow_of_two(uint64_t n)9222681deeSAlex Vesker static inline uint64_t roundup_pow_of_two(uint64_t n)
9322681deeSAlex Vesker {
9422681deeSAlex Vesker return n == 1 ? 1 : 1ULL << log2above(n);
9522681deeSAlex Vesker }
9622681deeSAlex Vesker
align(unsigned long val,unsigned long align)9725cb2d2aSHamdan Igbaria static inline unsigned long align(unsigned long val, unsigned long align)
9825cb2d2aSHamdan Igbaria {
9925cb2d2aSHamdan Igbaria return (val + align - 1) & ~(align - 1);
10025cb2d2aSHamdan Igbaria }
10125cb2d2aSHamdan Igbaria
10222681deeSAlex Vesker #endif /* MLX5DR_INTERNAL_H_ */
103