New upstream version 18.02
[deb_dpdk.git] / examples / ip_pipeline / pipeline.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2015 Intel Corporation
3  */
4
5 #ifndef __INCLUDE_PIPELINE_H__
6 #define __INCLUDE_PIPELINE_H__
7
8 #include <cmdline_parse.h>
9
10 #include "pipeline_be.h"
11
12 /*
13  * Pipeline type front-end operations
14  */
15
16 typedef void* (*pipeline_fe_op_init)(struct pipeline_params *params,
17         void *arg);
18
19 typedef int (*pipeline_fe_op_post_init)(void *pipeline);
20
21 typedef int (*pipeline_fe_op_free)(void *pipeline);
22
23 typedef int (*pipeline_fe_op_track)(struct pipeline_params *params,
24         uint32_t port_in,
25         uint32_t *port_out);
26
27 struct pipeline_fe_ops {
28         pipeline_fe_op_init f_init;
29         pipeline_fe_op_post_init f_post_init;
30         pipeline_fe_op_free f_free;
31         pipeline_fe_op_track f_track;
32         cmdline_parse_ctx_t *cmds;
33 };
34
35 /*
36  * Pipeline type
37  */
38
39 struct pipeline_type {
40         const char *name;
41
42         /* pipeline back-end */
43         struct pipeline_be_ops *be_ops;
44
45         /* pipeline front-end */
46         struct pipeline_fe_ops *fe_ops;
47 };
48
49 static inline uint32_t
50 pipeline_type_cmds_count(struct pipeline_type *ptype)
51 {
52         cmdline_parse_ctx_t *cmds;
53         uint32_t n_cmds;
54
55         if (ptype->fe_ops == NULL)
56                 return 0;
57
58         cmds = ptype->fe_ops->cmds;
59         if (cmds == NULL)
60                 return 0;
61
62         for (n_cmds = 0; cmds[n_cmds]; n_cmds++);
63
64         return n_cmds;
65 }
66
67 int
68 parse_pipeline_core(uint32_t *socket,
69         uint32_t *core,
70         uint32_t *ht,
71         const char *entry);
72
73 #endif