FD.io VPP
v19.08.2-294-g37e99c22d
Vector Packet Processing
pp2.h
Go to the documentation of this file.
1
/*
2
*------------------------------------------------------------------
3
* Copyright (c) 2018 Cisco and/or its affiliates.
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at:
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*------------------------------------------------------------------
16
*/
17
18
#define MVCONF_DBG_LEVEL 0
19
#define MVCONF_PP2_BPOOL_COOKIE_SIZE 32
20
#define MVCONF_PP2_BPOOL_DMA_ADDR_SIZE 64
21
#define MVCONF_DMA_PHYS_ADDR_T_SIZE 64
22
#define MVCONF_SYS_DMA_UIO
23
#define MVCONF_TYPES_PUBLIC
24
#define MVCONF_DMA_PHYS_ADDR_T_PUBLIC
25
26
#include <
vlib/vlib.h
>
27
28
#include "mv_std.h"
29
#include "env/mv_sys_dma.h"
30
#include "drivers/mv_pp2.h"
31
#include <drivers/mv_pp2_bpool.h>
32
#include <drivers/mv_pp2_ppio.h>
33
34
typedef
struct
35
{
36
CLIB_CACHE_LINE_ALIGN_MARK
(cacheline0);
37
u16
size
;
38
struct
pp2_bpool *
bpool
;
39
}
mrvl_pp2_inq_t
;
40
41
typedef
struct
42
{
43
CLIB_CACHE_LINE_ALIGN_MARK
(cacheline0);
44
u16
size
;
45
u32
*
buffers
;
46
u16
head
;
47
u16
tail
;
48
}
mrvl_pp2_outq_t
;
49
50
typedef
struct
51
{
52
CLIB_CACHE_LINE_ALIGN_MARK
(cacheline0);
53
u32
flags
;
54
#define MRVL_PP2_IF_F_ADMIN_UP (1 << 0)
55
struct
pp2_ppio *
ppio
;
56
u32
per_interface_next_index
;
57
58
mrvl_pp2_inq_t
*
inqs
;
59
mrvl_pp2_outq_t
*
outqs
;
60
61
u32
dev_instance
;
62
u32
sw_if_index
;
63
u32
hw_if_index
;
64
}
mrvl_pp2_if_t
;
65
66
#define MRVL_PP2_BUFF_BATCH_SZ VLIB_FRAME_SIZE
67
68
typedef
struct
69
{
70
CLIB_CACHE_LINE_ALIGN_MARK
(cacheline0);
71
struct
pp2_hif *
hif
;
72
struct
pp2_ppio_desc *
descs
;
73
struct
buff_release_entry bre[
MRVL_PP2_BUFF_BATCH_SZ
];
74
u32
buffers[
VLIB_FRAME_SIZE
];
75
}
mrvl_pp2_per_thread_data_t
;
76
77
typedef
struct
78
{
79
mrvl_pp2_if_t
*
interfaces
;
80
mrvl_pp2_per_thread_data_t
*
per_thread_data
;
81
82
/* API message ID base */
83
u16
msg_id_base
;
84
}
mrvl_pp2_main_t
;
85
86
extern
vnet_device_class_t
mrvl_pp2_device_class
;
87
extern
mrvl_pp2_main_t
mrvl_pp2_main
;
88
89
typedef
struct
90
{
91
u8
*
name
;
92
u16
rx_q_sz
;
93
u16
tx_q_sz
;
94
95
/* return */
96
i32
rv
;
97
u32
sw_if_index
;
98
clib_error_t
*
error
;
99
}
mrvl_pp2_create_if_args_t
;
100
101
void
mrvl_pp2_create_if
(
mrvl_pp2_create_if_args_t
* args);
102
void
mrvl_pp2_delete_if
(
mrvl_pp2_if_t
* dfif);
103
clib_error_t
*
mrvl_pp2_plugin_api_hookup
(
vlib_main_t
*
vm
);
104
105
/* output.c */
106
107
#define foreach_mrvl_pp2_tx_func_error \
108
_(NO_FREE_SLOTS, "no free tx slots") \
109
_(PPIO_SEND, "pp2_ppio_send errors") \
110
_(PPIO_GET_NUM_OUTQ_DONE, "pp2_ppio_get_num_outq_done errors")
111
112
typedef
enum
113
{
114
#define _(f,s) MRVL_PP2_TX_ERROR_##f,
115
foreach_mrvl_pp2_tx_func_error
116
#undef _
117
MRVL_PP2_TX_N_ERROR
,
118
}
mrvl_pp2_tx_func_error_t
;
119
120
uword
mrvl_pp2_interface_tx
(
vlib_main_t
*
vm
,
vlib_node_runtime_t
* node,
121
vlib_frame_t
* frame);
122
123
/* input.c */
124
125
typedef
struct
126
{
127
u32
next_index
;
128
u32
hw_if_index
;
129
struct
pp2_ppio_desc desc;
130
}
mrvl_pp2_input_trace_t
;
131
132
extern
vlib_node_registration_t
mrvl_pp2_input_node
;
133
134
/* format.c */
135
format_function_t
format_mrvl_pp2_input_trace
;
136
format_function_t
format_mrvl_pp2_interface
;
137
format_function_t
format_mrvl_pp2_interface_name
;
138
139
140
/*
141
* fd.io coding-style-patch-verification: ON
142
*
143
* Local Variables:
144
* eval: (c-set-style "gnu")
145
* End:
146
*/
mrvl_pp2_if_t::ppio
struct pp2_ppio * ppio
Definition:
pp2.h:55
mrvl_pp2_input_trace_t::next_index
u32 next_index
Definition:
pp2.h:127
mrvl_pp2_if_t::outqs
mrvl_pp2_outq_t * outqs
Definition:
pp2.h:59
CLIB_CACHE_LINE_ALIGN_MARK
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition:
cache.h:60
mrvl_pp2_if_t::dev_instance
u32 dev_instance
Definition:
pp2.h:61
mrvl_pp2_outq_t::head
u16 head
Definition:
pp2.h:46
format_mrvl_pp2_input_trace
format_function_t format_mrvl_pp2_input_trace
Definition:
pp2.h:135
mrvl_pp2_per_thread_data_t::descs
struct pp2_ppio_desc * descs
Definition:
pp2.h:72
mrvl_pp2_create_if_args_t::rx_q_sz
u16 rx_q_sz
Definition:
pp2.h:92
mrvl_pp2_if_t::per_interface_next_index
u32 per_interface_next_index
Definition:
pp2.h:56
mrvl_pp2_device_class
vnet_device_class_t mrvl_pp2_device_class
mrvl_pp2_delete_if
void mrvl_pp2_delete_if(mrvl_pp2_if_t *dfif)
Definition:
pp2.c:115
mrvl_pp2_create_if_args_t
Definition:
pp2.h:89
mrvl_pp2_input_trace_t
Definition:
pp2.h:125
vnet_device_class_t
struct _vnet_device_class vnet_device_class_t
mrvl_pp2_create_if_args_t::tx_q_sz
u16 tx_q_sz
Definition:
pp2.h:93
u8
unsigned char u8
Definition:
types.h:56
vlib_frame_t
Definition:
node.h:382
mrvl_pp2_if_t::hw_if_index
u32 hw_if_index
Definition:
pp2.h:63
mrvl_pp2_create_if
void mrvl_pp2_create_if(mrvl_pp2_create_if_args_t *args)
Definition:
pp2.c:180
format_function_t
u8 *() format_function_t(u8 *s, va_list *args)
Definition:
format.h:48
mrvl_pp2_inq_t::bpool
struct pp2_bpool * bpool
Definition:
pp2.h:38
vlib_node_runtime_t
Definition:
node.h:464
MRVL_PP2_TX_N_ERROR
Definition:
pp2.h:117
mrvl_pp2_per_thread_data_t
Definition:
pp2.h:68
foreach_mrvl_pp2_tx_func_error
#define foreach_mrvl_pp2_tx_func_error
Definition:
pp2.h:107
format_mrvl_pp2_interface
format_function_t format_mrvl_pp2_interface
Definition:
pp2.h:136
mrvl_pp2_if_t::sw_if_index
u32 sw_if_index
Definition:
pp2.h:62
mrvl_pp2_tx_func_error_t
mrvl_pp2_tx_func_error_t
Definition:
pp2.h:112
mrvl_pp2_if_t
Definition:
pp2.h:50
u32
unsigned int u32
Definition:
types.h:88
mrvl_pp2_outq_t::size
u16 size
Definition:
pp2.h:44
VLIB_FRAME_SIZE
#define VLIB_FRAME_SIZE
Definition:
node.h:378
mrvl_pp2_per_thread_data_t::hif
struct pp2_hif * hif
Definition:
pp2.h:71
MRVL_PP2_BUFF_BATCH_SZ
#define MRVL_PP2_BUFF_BATCH_SZ
Definition:
pp2.h:66
u16
unsigned short u16
Definition:
types.h:57
mrvl_pp2_if_t::flags
u32 flags
Definition:
pp2.h:53
mrvl_pp2_main
mrvl_pp2_main_t mrvl_pp2_main
Definition:
pp2.c:36
mrvl_pp2_main_t::msg_id_base
u16 msg_id_base
Definition:
pp2.h:83
mrvl_pp2_input_trace_t::hw_if_index
u32 hw_if_index
Definition:
pp2.h:128
mrvl_pp2_plugin_api_hookup
clib_error_t * mrvl_pp2_plugin_api_hookup(vlib_main_t *vm)
Definition:
pp2_api.c:155
mrvl_pp2_create_if_args_t::rv
i32 rv
Definition:
pp2.h:96
vm
vlib_main_t * vm
Definition:
buffer.c:323
mrvl_pp2_outq_t::buffers
u32 * buffers
Definition:
pp2.h:45
vlib.h
mrvl_pp2_create_if_args_t::sw_if_index
u32 sw_if_index
Definition:
pp2.h:97
i32
signed int i32
Definition:
types.h:77
mrvl_pp2_input_node
vlib_node_registration_t mrvl_pp2_input_node
(constructor) VLIB_REGISTER_NODE (mrvl_pp2_input_node)
Definition:
input.c:375
mrvl_pp2_outq_t::tail
u16 tail
Definition:
pp2.h:47
clib_error_t
Definition:
clib_error.h:21
vlib_node_registration_t
struct _vlib_node_registration vlib_node_registration_t
mrvl_pp2_outq_t
Definition:
pp2.h:41
mrvl_pp2_create_if_args_t::name
u8 * name
Definition:
pp2.h:91
vlib_main_t
Definition:
main.h:83
uword
u64 uword
Definition:
types.h:112
format_mrvl_pp2_interface_name
format_function_t format_mrvl_pp2_interface_name
Definition:
pp2.h:137
mrvl_pp2_main_t
Definition:
pp2.h:77
mrvl_pp2_create_if_args_t::error
clib_error_t * error
Definition:
pp2.h:98
mrvl_pp2_inq_t
Definition:
pp2.h:34
mrvl_pp2_main_t::interfaces
mrvl_pp2_if_t * interfaces
Definition:
pp2.h:79
mrvl_pp2_main_t::per_thread_data
mrvl_pp2_per_thread_data_t * per_thread_data
Definition:
pp2.h:80
mrvl_pp2_interface_tx
uword mrvl_pp2_interface_tx(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition:
output.c:31
mrvl_pp2_if_t::inqs
mrvl_pp2_inq_t * inqs
Definition:
pp2.h:58
mrvl_pp2_inq_t::size
u16 size
Definition:
pp2.h:37
src
plugins
marvell
pp2
pp2.h
Generated on Tue Aug 25 2020 19:17:22 for FD.io VPP by
1.8.13