ena: Amazon Elastic Network Adapter (ENA) native driver
[vpp.git] / src / plugins / dev_ena / ena_inlines.h
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright(c) 2023 Cisco Systems, Inc.
3  */
4
5 #ifndef _ENA_INLINES_H_
6 #define _ENA_INLINES_H_
7
8 #include <vppinfra/clib.h>
9 #include <vppinfra/error_bootstrap.h>
10 #include <dev_ena/ena.h>
11
12 #define ena_log_is_debug()                                                    \
13   vlib_log_is_enabled (VLIB_LOG_LEVEL_DEBUG, ena_log.class)
14
15 #define ena_stats_log_err(dev, f, ...)                                        \
16   vlib_log (VLIB_LOG_LEVEL_ERR, ena_stats_log.class, "%U: " f,                \
17             format_vnet_dev_addr, dev, ##__VA_ARGS__)
18
19 #define ena_stats_log_debug(dev, f, ...)                                      \
20   vlib_log (VLIB_LOG_LEVEL_DEBUG, ena_stats_log.class, "%U: " f,              \
21             format_vnet_dev_addr, dev, ##__VA_ARGS__)
22
23 #define ena_stats_log_is_debug()                                              \
24   vlib_log_is_enabled (VLIB_LOG_LEVEL_DEBUG, ena_stats_log.class)
25
26 static_always_inline void
27 ena_set_mem_addr (vlib_main_t *vm, vnet_dev_t *dev, ena_mem_addr_t *m, void *p)
28 {
29   u64 pa = vnet_dev_get_dma_addr (vm, dev, p);
30   *m = (ena_mem_addr_t){ .addr_lo = (u32) pa, .addr_hi = (u16) (pa >> 32) };
31 }
32
33 static_always_inline int
34 ena_aq_feature_is_supported (vnet_dev_t *dev, ena_aq_feature_id_t feat_id)
35 {
36   ena_device_t *ed = vnet_dev_get_data (dev);
37   return (ed->dev_attr.supported_features & (1U << feat_id)) != 0;
38 }
39
40 #endif /* ENA_INLINES_H */