event/cnxk: add option for in-flight buffer count
[dpdk.git] / drivers / event / cnxk / cnxk_eventdev.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef __CNXK_EVENTDEV_H__
6 #define __CNXK_EVENTDEV_H__
7
8 #include <rte_devargs.h>
9 #include <rte_kvargs.h>
10 #include <rte_mbuf_pool_ops.h>
11 #include <rte_pci.h>
12
13 #include <eventdev_pmd_pci.h>
14
15 #include "roc_api.h"
16
17 #define CNXK_SSO_XAE_CNT "xae_cnt"
18
19 #define USEC2NSEC(__us) ((__us)*1E3)
20
21 #define CNXK_SSO_FC_NAME       "cnxk_evdev_xaq_fc"
22 #define CNXK_SSO_MZ_NAME       "cnxk_evdev_mz"
23 #define CNXK_SSO_XAQ_CACHE_CNT (0x7)
24 #define CNXK_SSO_XAQ_SLACK     (8)
25
26 struct cnxk_sso_evdev {
27         struct roc_sso sso;
28         uint8_t max_event_queues;
29         uint8_t max_event_ports;
30         uint8_t is_timeout_deq;
31         uint8_t nb_event_queues;
32         uint8_t nb_event_ports;
33         uint32_t deq_tmo_ns;
34         uint32_t min_dequeue_timeout_ns;
35         uint32_t max_dequeue_timeout_ns;
36         int32_t max_num_events;
37         uint64_t *fc_mem;
38         uint64_t xaq_lmt;
39         uint64_t nb_xaq_cfg;
40         rte_iova_t fc_iova;
41         struct rte_mempool *xaq_pool;
42         /* Dev args */
43         uint32_t xae_cnt;
44         /* CN9K */
45         uint8_t dual_ws;
46 } __rte_cache_aligned;
47
48 static inline int
49 parse_kvargs_value(const char *key, const char *value, void *opaque)
50 {
51         RTE_SET_USED(key);
52
53         *(uint32_t *)opaque = (uint32_t)atoi(value);
54         return 0;
55 }
56
57 static inline struct cnxk_sso_evdev *
58 cnxk_sso_pmd_priv(const struct rte_eventdev *event_dev)
59 {
60         return event_dev->data->dev_private;
61 }
62
63 /* Configuration functions */
64 int cnxk_sso_xaq_allocate(struct cnxk_sso_evdev *dev);
65
66 /* Common ops API. */
67 int cnxk_sso_init(struct rte_eventdev *event_dev);
68 int cnxk_sso_fini(struct rte_eventdev *event_dev);
69 int cnxk_sso_remove(struct rte_pci_device *pci_dev);
70 void cnxk_sso_info_get(struct cnxk_sso_evdev *dev,
71                        struct rte_event_dev_info *dev_info);
72 int cnxk_sso_dev_validate(const struct rte_eventdev *event_dev);
73 void cnxk_sso_queue_def_conf(struct rte_eventdev *event_dev, uint8_t queue_id,
74                              struct rte_event_queue_conf *queue_conf);
75 int cnxk_sso_queue_setup(struct rte_eventdev *event_dev, uint8_t queue_id,
76                          const struct rte_event_queue_conf *queue_conf);
77 void cnxk_sso_queue_release(struct rte_eventdev *event_dev, uint8_t queue_id);
78 void cnxk_sso_port_def_conf(struct rte_eventdev *event_dev, uint8_t port_id,
79                             struct rte_event_port_conf *port_conf);
80
81 #endif /* __CNXK_EVENTDEV_H__ */