FD.io VPP  v18.04-17-g3a0d853
Vector Packet Processing
avf.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 #include <avf/virtchnl.h>
19 
20 #define foreach_avf_device_flags \
21  _(0, INITIALIZED, "initialized") \
22  _(1, ERROR, "error") \
23  _(2, ADMIN_UP, "admin-up") \
24  _(3, IOVA, "iova") \
25  _(4, LINK_UP, "link-up") \
26  _(5, SHARED_TXQ_LOCK, "shared-txq-lock") \
27  _(6, ELOG, "elog")
28 
29 enum
30 {
31 #define _(a, b, c) AVF_DEVICE_F_##b = (1 << a),
33 #undef _
34 };
35 
36 typedef struct
37 {
38  u64 qword[4];
40 
42 
43 typedef struct
44 {
45  union
46  {
47  u64 qword[2];
48  u64x2 as_u64x2;
49  };
51 
53 
54 typedef struct
55 {
56  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
57  volatile u32 *qrx_tail;
63 } avf_rxq_t;
64 
65 typedef struct
66 {
67  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
68  volatile u32 *qtx_tail;
75 } avf_txq_t;
76 
77 typedef struct
78 {
79  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
82 
87  void *bar0;
88 
89  /* queues */
92 
93  /* Admin queues */
96  void *atq_bufs;
97  void *arq_bufs;
103 
106  u8 hwaddr[6];
113 
114  /* stats */
116 
117  /* error */
119 } avf_device_t;
120 
121 typedef struct
122 {
130 
132 
133 #define AVF_RX_VECTOR_SZ VLIB_FRAME_SIZE
134 
135 enum
136 {
141 
142 typedef struct
143 {
144  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
148 
149 typedef struct
150 {
154 } avf_ptype_t;
155 
156 STATIC_ASSERT (VNET_DEVICE_INPUT_N_NEXT_NODES < 256, "too many next nodes");
157 
158 typedef struct
159 {
164 
165  /* 256 element array for ptype based lookup */
167 } avf_main_t;
168 
169 extern avf_main_t avf_main;
170 
171 typedef struct
172 {
173  vlib_pci_addr_t addr;
175  /* return */
176  int rv;
179 
182 
186  vlib_frame_t * frame);
187 
188 /* format.c */
192 
193 static inline u32
194 avf_get_u32 (void *start, int offset)
195 {
196  return *(u32 *) (((u8 *) start) + offset);
197 }
198 
199 static inline u64
200 avf_get_u64 (void *start, int offset)
201 {
202  return *(u64 *) (((u8 *) start) + offset);
203 }
204 
205 static inline u32
206 avf_get_u32_bits (void *start, int offset, int first, int last)
207 {
208  u32 value = avf_get_u32 (start, offset);
209  if ((last == 0) && (first == 31))
210  return value;
211  value >>= last;
212  value &= (1 << (first - last + 1)) - 1;
213  return value;
214 }
215 
216 static inline u64
217 avf_get_u64_bits (void *start, int offset, int first, int last)
218 {
219  u64 value = avf_get_u64 (start, offset);
220  if ((last == 0) && (first == 63))
221  return value;
222  value >>= last;
223  value &= (1 << (first - last + 1)) - 1;
224  return value;
225 }
226 
227 static inline void
228 avf_set_u32 (void *start, int offset, u32 value)
229 {
230  (*(u32 *) (((u8 *) start) + offset)) = value;
231 }
232 
233 static inline void
235 {
236  *(volatile u32 *) ((u8 *) ad->bar0 + addr) = val;
237 }
238 
239 static inline u32
241 {
242  return *(volatile u32 *) (ad->bar0 + addr);
243 }
244 
245 static inline void
247 {
249  asm volatile ("":::"memory");
250 }
251 
252 typedef struct
253 {
258 
259 /*
260  * fd.io coding-style-patch-verification: ON
261  *
262  * Local Variables:
263  * eval: (c-set-style "gnu")
264  * End:
265  */
u8 next_node
Definition: avf.h:151
u32 hw_if_index
Definition: avf.h:85
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:60
STATIC_ASSERT(VNET_DEVICE_INPUT_N_NEXT_NODES< 256,"too many next nodes")
static u64 avf_get_u64_bits(void *start, int offset, int first, int last)
Definition: avf.h:217
avf_ptype_t * ptypes
Definition: avf.h:166
u64x2 as_u64x2
Definition: avf.h:48
clib_error_t * error
Definition: avf.h:118
u64 atq_bufs_pa
Definition: avf.h:98
virtchnl_link_speed_t link_speed
Definition: avf.h:112
static u64 avf_get_u64(void *start, int offset)
Definition: avf.h:200
static heap_elt_t * last(heap_header_t *h)
Definition: heap.c:53
format_function_t format_avf_device
Definition: avf.h:189
vlib_pci_addr_t addr
Definition: avf.h:173
u32 dev_instance
Definition: avf.h:83
virtchnl_link_speed_t
Definition: virtchnl.h:169
u32 next_index
Definition: avf.h:254
u8 *( format_function_t)(u8 *s, va_list *args)
Definition: format.h:48
avf_device_t * devices
Definition: avf.h:160
struct _vnet_device_class vnet_device_class_t
format_function_t format_avf_input_trace
Definition: avf.h:191
volatile u32 * qtx_tail
Definition: avf.h:68
#define foreach_avf_device_flags
Definition: avf.h:20
vnet_device_class_t avf_device_class
avf_rx_vector_entry_t rxve
Definition: avf.h:256
clib_spinlock_t lock
Definition: avf.h:71
static u32 avf_reg_read(avf_device_t *ad, u32 addr)
Definition: avf.h:240
static u32 avf_get_u32_bits(void *start, int offset, int first, int last)
Definition: avf.h:206
volatile u32 * qrx_tail
Definition: avf.h:57
char i8
Definition: types.h:45
int physmem_region_alloc
Definition: avf.h:163
unsigned long u64
Definition: types.h:89
vlib_pci_dev_handle_t pci_dev_handle
Definition: avf.h:86
u32 status
Definition: avf.h:124
void * arq_bufs
Definition: avf.h:97
avf_aq_desc_t * arq
Definition: avf.h:95
void avf_create_if(vlib_main_t *vm, avf_create_if_args_t *args)
Definition: device.c:1052
static heap_elt_t * first(heap_header_t *h)
Definition: heap.c:59
u32 hw_if_index
Definition: avf.h:255
i8 buffer_advance
Definition: avf.h:152
static u32 avf_get_u32(void *start, int offset)
Definition: avf.h:194
u32 vlib_pci_dev_handle_t
Definition: pci.h:97
u8 ptype
Definition: avf.h:127
#define AVF_RX_VECTOR_SZ
Definition: avf.h:133
static void avf_reg_flush(avf_device_t *ad)
Definition: avf.h:246
u16 atq_next_slot
Definition: avf.h:100
vlib_main_t * vm
Definition: buffer.c:294
vlib_node_registration_t avf_input_node
(constructor) VLIB_REGISTER_NODE (avf_input_node)
Definition: input.c:404
Definition: avf.h:121
Definition: avf.h:54
u32 flags
Definition: avf.h:153
avf_tx_desc_t * descs
Definition: avf.h:72
u16 vsi_id
Definition: avf.h:104
u32 per_interface_next_index
Definition: avf.h:81
u32 bi
Definition: avf.h:123
u32 feature_bitmap
Definition: avf.h:105
u32 * bufs
Definition: avf.h:73
avf_aq_desc_t * atq
Definition: avf.h:94
unsigned int u32
Definition: types.h:88
u32 flags
Definition: avf.h:80
u8 error
Definition: avf.h:128
Definition: avf.h:65
static void avf_set_u32(void *start, int offset, u32 value)
Definition: avf.h:228
u32 * bufs
Definition: avf.h:61
void * bar0
Definition: avf.h:87
virtchnl_pf_event_t * events
Definition: avf.h:102
static void avf_reg_write(avf_device_t *ad, u32 addr, u32 val)
Definition: avf.h:234
avf_main_t avf_main
Definition: device.c:36
virtchnl_eth_stats_t eth_stats
Definition: avf.h:115
void * atq_bufs
Definition: avf.h:96
#define AVFGEN_RSTAT
Definition: virtchnl.h:36
u64 uword
Definition: types.h:112
u16 num_queue_pairs
Definition: avf.h:107
u16 next
Definition: avf.h:69
struct _vlib_node_registration vlib_node_registration_t
template key/value backing page structure
Definition: bihash_doc.h:44
void avf_delete_if(vlib_main_t *vm, avf_device_t *ad)
Definition: device.c:997
u32 rss_lut_size
Definition: avf.h:111
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
format_function_t format_avf_device_name
Definition: avf.h:190
u16 size
Definition: avf.h:59
u16 arq_next_slot
Definition: avf.h:101
avf_rxq_t * rxqs
Definition: avf.h:90
struct clib_bihash_value offset
template key/value backing page structure
enum @356 avf_process_event_t
clib_error_t * error
Definition: avf.h:177
avf_per_thread_data_t * per_thread_data
Definition: avf.h:161
u16 size
Definition: avf.h:70
u32 sw_if_index
Definition: avf.h:84
u64 arq_bufs_pa
Definition: avf.h:99
vhost_vring_addr_t addr
Definition: vhost-user.h:83
u16 n_bufs
Definition: avf.h:74
STATIC_ASSERT_SIZEOF(avf_rx_desc_t, 32)
u8 vlib_physmem_region_index_t
Definition: physmem.h:43
u16 tail_length
Definition: avf.h:126
vlib_physmem_region_index_t physmem_region
Definition: avf.h:162
u16 next
Definition: avf.h:58
uword avf_interface_tx(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: output.c:37
avf_txq_t * txqs
Definition: avf.h:91
avf_rx_desc_t * descs
Definition: avf.h:60
u16 length
Definition: avf.h:125
u16 n_bufs
Definition: avf.h:62
u16 max_vectors
Definition: avf.h:108
u32 rss_key_size
Definition: avf.h:110
u16 max_mtu
Definition: avf.h:109