hs-test: temp skip some tests
[vpp.git] / src / plugins / dev_octeon / octeon.h
1
2 /* SPDX-License-Identifier: Apache-2.0
3  * Copyright (c) 2023 Cisco Systems, Inc.
4  */
5 #ifndef _OCTEON_H_
6 #define _OCTEON_H_
7 #include <vppinfra/clib.h>
8 #include <vppinfra/error_bootstrap.h>
9 #include <vppinfra/format.h>
10 #include <vnet/vnet.h>
11 #include <vnet/dev/dev.h>
12 #include <vnet/flow/flow.h>
13 #include <vnet/udp/udp.h>
14 #include <vnet/ipsec/esp.h>
15 #include <base/roc_api.h>
16 #include <dev_octeon/hw_defs.h>
17
18 #define OCT_BATCH_ALLOC_IOVA0_MASK 0xFFFFFFFFFFFFFF80
19
20 typedef enum
21 {
22   OCT_DEVICE_TYPE_UNKNOWN = 0,
23   OCT_DEVICE_TYPE_RVU_PF,
24   OCT_DEVICE_TYPE_RVU_VF,
25   OCT_DEVICE_TYPE_SDP_VF,
26   OCT_DEVICE_TYPE_CPT_VF,
27 } __clib_packed oct_device_type_t;
28
29 typedef struct
30 {
31   oct_device_type_t type;
32   u8 nix_initialized : 1;
33   u8 status : 1;
34   u8 full_duplex : 1;
35   u32 speed;
36   struct plt_pci_device plt_pci_dev;
37   struct roc_cpt cpt;
38   struct roc_nix *nix;
39 } oct_device_t;
40
41 typedef struct
42 {
43   /* vnet flow index */
44   u32 vnet_flow_index;
45
46   u32 index;
47   /* Internal flow object */
48   struct roc_npc_flow *npc_flow;
49 } oct_flow_entry_t;
50
51 typedef struct
52 {
53   u8 lf_allocated : 1;
54   u8 tm_initialized : 1;
55   u8 npc_initialized : 1;
56   struct roc_npc npc;
57   oct_flow_entry_t *flow_entries;
58 } oct_port_t;
59
60 typedef struct
61 {
62   u8 npa_pool_initialized : 1;
63   u8 cq_initialized : 1;
64   u8 rq_initialized : 1;
65   u16 hdr_off;
66   u32 n_enq;
67   u64 aura_handle;
68   u64 aura_batch_free_ioaddr;
69   u64 lmt_base_addr;
70   CLIB_CACHE_LINE_ALIGN_MARK (data0);
71   struct roc_nix_cq cq;
72   struct roc_nix_rq rq;
73 } oct_rxq_t;
74
75 typedef struct
76 {
77   CLIB_ALIGN_MARK (cl, 128);
78   u64 iova[16];
79 } oct_npa_batch_alloc_cl128_t;
80
81 typedef union
82 {
83   struct npa_batch_alloc_status_s status;
84   u64 as_u64;
85 } oct_npa_batch_alloc_status_t;
86
87 STATIC_ASSERT_SIZEOF (oct_npa_batch_alloc_cl128_t, 128);
88
89 typedef struct
90 {
91   u8 sq_initialized : 1;
92   u8 npa_pool_initialized : 1;
93   u16 hdr_off;
94   u32 n_enq;
95   u64 aura_handle;
96   u64 io_addr;
97   void *lmt_addr;
98
99   oct_npa_batch_alloc_cl128_t *ba_buffer;
100   u8 ba_first_cl;
101   u8 ba_num_cl;
102   CLIB_CACHE_LINE_ALIGN_MARK (data0);
103   struct roc_nix_sq sq;
104 } oct_txq_t;
105
106 /* format.c */
107 format_function_t format_oct_port_status;
108 format_function_t format_oct_rx_trace;
109 format_function_t format_oct_tx_trace;
110 format_function_t format_oct_port_flow;
111
112 /* port.c */
113 vnet_dev_rv_t oct_port_init (vlib_main_t *, vnet_dev_port_t *);
114 vnet_dev_rv_t oct_port_start (vlib_main_t *, vnet_dev_port_t *);
115 void oct_port_stop (vlib_main_t *, vnet_dev_port_t *);
116 void oct_port_deinit (vlib_main_t *, vnet_dev_port_t *);
117 vnet_dev_rv_t oct_port_cfg_change (vlib_main_t *, vnet_dev_port_t *,
118                                    vnet_dev_port_cfg_change_req_t *);
119 vnet_dev_rv_t oct_port_cfg_change_validate (vlib_main_t *, vnet_dev_port_t *,
120                                             vnet_dev_port_cfg_change_req_t *);
121
122 /* queue.c */
123 vnet_dev_rv_t oct_rx_queue_alloc (vlib_main_t *, vnet_dev_rx_queue_t *);
124 vnet_dev_rv_t oct_tx_queue_alloc (vlib_main_t *, vnet_dev_tx_queue_t *);
125 void oct_rx_queue_free (vlib_main_t *, vnet_dev_rx_queue_t *);
126 void oct_tx_queue_free (vlib_main_t *, vnet_dev_tx_queue_t *);
127 vnet_dev_rv_t oct_rxq_init (vlib_main_t *, vnet_dev_rx_queue_t *);
128 vnet_dev_rv_t oct_txq_init (vlib_main_t *, vnet_dev_tx_queue_t *);
129 void oct_rxq_deinit (vlib_main_t *, vnet_dev_rx_queue_t *);
130 void oct_txq_deinit (vlib_main_t *, vnet_dev_tx_queue_t *);
131 format_function_t format_oct_rxq_info;
132 format_function_t format_oct_txq_info;
133
134 /* flow.c */
135 vnet_dev_rv_t oct_flow_ops_fn (vlib_main_t *, vnet_dev_port_t *,
136                                vnet_dev_port_cfg_type_t, u32, uword *);
137 vnet_dev_rv_t oct_flow_validate_params (vlib_main_t *, vnet_dev_port_t *,
138                                         vnet_dev_port_cfg_type_t, u32,
139                                         uword *);
140 vnet_dev_rv_t oct_flow_query (vlib_main_t *, vnet_dev_port_t *, u32, uword,
141                               u64 *);
142
143 #define log_debug(dev, f, ...)                                                \
144   vlib_log (VLIB_LOG_LEVEL_DEBUG, oct_log.class, "%U: " f,                    \
145             format_vnet_dev_addr, (dev), ##__VA_ARGS__)
146 #define log_info(dev, f, ...)                                                 \
147   vlib_log (VLIB_LOG_LEVEL_INFO, oct_log.class, "%U: " f,                     \
148             format_vnet_dev_addr, (dev), ##__VA_ARGS__)
149 #define log_notice(dev, f, ...)                                               \
150   vlib_log (VLIB_LOG_LEVEL_NOTICE, oct_log.class, "%U: " f,                   \
151             format_vnet_dev_addr, (dev), ##__VA_ARGS__)
152 #define log_warn(dev, f, ...)                                                 \
153   vlib_log (VLIB_LOG_LEVEL_WARNING, oct_log.class, "%U: " f,                  \
154             format_vnet_dev_addr, (dev), ##__VA_ARGS__)
155 #define log_err(dev, f, ...)                                                  \
156   vlib_log (VLIB_LOG_LEVEL_ERR, oct_log.class, "%U: " f,                      \
157             format_vnet_dev_addr, (dev), ##__VA_ARGS__)
158
159 #define foreach_oct_tx_node_counter                                           \
160   _ (CHAIN_TOO_LONG, chain_too_long, ERROR, "drop due to buffer chain > 6")   \
161   _ (NO_FREE_SLOTS, no_free_slots, ERROR, "no free tx slots")                 \
162   _ (AURA_BATCH_ALLOC_ISSUE_FAIL, aura_batch_alloc_issue_fail, ERROR,         \
163      "aura batch alloc issue failed")                                         \
164   _ (AURA_BATCH_ALLOC_NOT_READY, aura_batch_alloc_not_ready, ERROR,           \
165      "aura batch alloc not ready")
166
167 typedef enum
168 {
169 #define _(f, n, s, d) OCT_TX_NODE_CTR_##f,
170   foreach_oct_tx_node_counter
171 #undef _
172 } oct_tx_node_counter_t;
173
174 typedef struct
175 {
176   u32 sw_if_index;
177   u32 next_index;
178   oct_nix_rx_cqe_desc_t desc;
179 } oct_rx_trace_t;
180
181 typedef struct
182 {
183   u32 sw_if_index;
184   oct_tx_desc_t desc;
185 } oct_tx_trace_t;
186 #endif /* _OCTEON_H_ */