1
2
3
4
5
6
7#ifndef _SYS_RHEAD_IMPL_H
8#define _SYS_RHEAD_IMPL_H
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14
15
16
17
18
19
20#define RHEAD_EVQ_MAXNBUFS 32
21
22#define RHEAD_EVQ_MAXNEVS 16384
23#define RHEAD_EVQ_MINNEVS 256
24
25#define RHEAD_RXQ_MAXNDESCS 16384
26#define RHEAD_RXQ_MINNDESCS 256
27
28#define RHEAD_TXQ_MAXNDESCS 16384
29#define RHEAD_TXQ_MINNDESCS 256
30
31#define RHEAD_EVQ_DESC_SIZE (sizeof (efx_qword_t))
32#define RHEAD_RXQ_DESC_SIZE (sizeof (efx_qword_t))
33#define RHEAD_TXQ_DESC_SIZE (sizeof (efx_oword_t))
34
35#if EFSYS_OPT_EV_EXTENDED_WIDTH
36#define RHEAD_EVQ_EW_DESC_SIZE (sizeof (efx_xword_t))
37#endif
38
39
40
41
42LIBEFX_INTERNAL
43extern __checkReturn efx_rc_t
44rhead_board_cfg(
45 __in efx_nic_t *enp);
46
47LIBEFX_INTERNAL
48extern __checkReturn efx_rc_t
49rhead_nic_probe(
50 __in efx_nic_t *enp);
51
52LIBEFX_INTERNAL
53extern __checkReturn efx_rc_t
54rhead_nic_set_drv_limits(
55 __inout efx_nic_t *enp,
56 __in efx_drv_limits_t *edlp);
57
58LIBEFX_INTERNAL
59extern __checkReturn efx_rc_t
60rhead_nic_get_vi_pool(
61 __in efx_nic_t *enp,
62 __out uint32_t *vi_countp);
63
64LIBEFX_INTERNAL
65extern __checkReturn efx_rc_t
66rhead_nic_get_bar_region(
67 __in efx_nic_t *enp,
68 __in efx_nic_region_t region,
69 __out uint32_t *offsetp,
70 __out size_t *sizep);
71
72LIBEFX_INTERNAL
73extern __checkReturn efx_rc_t
74rhead_nic_reset(
75 __in efx_nic_t *enp);
76
77LIBEFX_INTERNAL
78extern __checkReturn efx_rc_t
79rhead_nic_init(
80 __in efx_nic_t *enp);
81
82LIBEFX_INTERNAL
83extern __checkReturn boolean_t
84rhead_nic_hw_unavailable(
85 __in efx_nic_t *enp);
86
87LIBEFX_INTERNAL
88extern void
89rhead_nic_set_hw_unavailable(
90 __in efx_nic_t *enp);
91
92#if EFSYS_OPT_DIAG
93
94LIBEFX_INTERNAL
95extern __checkReturn efx_rc_t
96rhead_nic_register_test(
97 __in efx_nic_t *enp);
98
99#endif
100
101LIBEFX_INTERNAL
102extern void
103rhead_nic_fini(
104 __in efx_nic_t *enp);
105
106LIBEFX_INTERNAL
107extern void
108rhead_nic_unprobe(
109 __in efx_nic_t *enp);
110
111
112
113
114LIBEFX_INTERNAL
115extern __checkReturn efx_rc_t
116rhead_ev_init(
117 __in efx_nic_t *enp);
118
119LIBEFX_INTERNAL
120extern void
121rhead_ev_fini(
122 __in efx_nic_t *enp);
123
124LIBEFX_INTERNAL
125extern __checkReturn efx_rc_t
126rhead_ev_qcreate(
127 __in efx_nic_t *enp,
128 __in unsigned int index,
129 __in efsys_mem_t *esmp,
130 __in size_t ndescs,
131 __in uint32_t id,
132 __in uint32_t us,
133 __in uint32_t flags,
134 __in efx_evq_t *eep);
135
136LIBEFX_INTERNAL
137extern void
138rhead_ev_qdestroy(
139 __in efx_evq_t *eep);
140
141LIBEFX_INTERNAL
142extern __checkReturn efx_rc_t
143rhead_ev_qprime(
144 __in efx_evq_t *eep,
145 __in unsigned int count);
146
147LIBEFX_INTERNAL
148extern void
149rhead_ev_qpost(
150 __in efx_evq_t *eep,
151 __in uint16_t data);
152
153LIBEFX_INTERNAL
154extern void
155rhead_ev_qpoll(
156 __in efx_evq_t *eep,
157 __inout unsigned int *countp,
158 __in const efx_ev_callbacks_t *eecp,
159 __in_opt void *arg);
160
161LIBEFX_INTERNAL
162extern __checkReturn efx_rc_t
163rhead_ev_qmoderate(
164 __in efx_evq_t *eep,
165 __in unsigned int us);
166
167#if EFSYS_OPT_QSTATS
168
169LIBEFX_INTERNAL
170extern void
171rhead_ev_qstats_update(
172 __in efx_evq_t *eep,
173 __inout_ecount(EV_NQSTATS) efsys_stat_t *stat);
174
175#endif
176
177
178
179
180LIBEFX_INTERNAL
181extern __checkReturn efx_rc_t
182rhead_intr_init(
183 __in efx_nic_t *enp,
184 __in efx_intr_type_t type,
185 __in efsys_mem_t *esmp);
186
187LIBEFX_INTERNAL
188extern void
189rhead_intr_enable(
190 __in efx_nic_t *enp);
191
192LIBEFX_INTERNAL
193extern void
194rhead_intr_disable(
195 __in efx_nic_t *enp);
196
197LIBEFX_INTERNAL
198extern void
199rhead_intr_disable_unlocked(
200 __in efx_nic_t *enp);
201
202LIBEFX_INTERNAL
203extern __checkReturn efx_rc_t
204rhead_intr_trigger(
205 __in efx_nic_t *enp,
206 __in unsigned int level);
207
208LIBEFX_INTERNAL
209extern void
210rhead_intr_status_line(
211 __in efx_nic_t *enp,
212 __out boolean_t *fatalp,
213 __out uint32_t *qmaskp);
214
215LIBEFX_INTERNAL
216extern void
217rhead_intr_status_message(
218 __in efx_nic_t *enp,
219 __in unsigned int message,
220 __out boolean_t *fatalp);
221
222LIBEFX_INTERNAL
223extern void
224rhead_intr_fatal(
225 __in efx_nic_t *enp);
226
227LIBEFX_INTERNAL
228extern void
229rhead_intr_fini(
230 __in efx_nic_t *enp);
231
232
233
234
235LIBEFX_INTERNAL
236extern __checkReturn efx_rc_t
237rhead_rx_init(
238 __in efx_nic_t *enp);
239
240LIBEFX_INTERNAL
241extern void
242rhead_rx_fini(
243 __in efx_nic_t *enp);
244
245#if EFSYS_OPT_RX_SCATTER
246
247LIBEFX_INTERNAL
248extern __checkReturn efx_rc_t
249rhead_rx_scatter_enable(
250 __in efx_nic_t *enp,
251 __in unsigned int buf_size);
252
253#endif
254
255#if EFSYS_OPT_RX_SCALE
256
257LIBEFX_INTERNAL
258extern __checkReturn efx_rc_t
259rhead_rx_scale_context_alloc(
260 __in efx_nic_t *enp,
261 __in efx_rx_scale_context_type_t type,
262 __in uint32_t num_queues,
263 __out uint32_t *rss_contextp);
264
265LIBEFX_INTERNAL
266extern __checkReturn efx_rc_t
267rhead_rx_scale_context_free(
268 __in efx_nic_t *enp,
269 __in uint32_t rss_context);
270
271LIBEFX_INTERNAL
272extern __checkReturn efx_rc_t
273rhead_rx_scale_mode_set(
274 __in efx_nic_t *enp,
275 __in uint32_t rss_context,
276 __in efx_rx_hash_alg_t alg,
277 __in efx_rx_hash_type_t type,
278 __in boolean_t insert);
279
280LIBEFX_INTERNAL
281extern __checkReturn efx_rc_t
282rhead_rx_scale_key_set(
283 __in efx_nic_t *enp,
284 __in uint32_t rss_context,
285 __in_ecount(n) uint8_t *key,
286 __in size_t n);
287
288LIBEFX_INTERNAL
289extern __checkReturn efx_rc_t
290rhead_rx_scale_tbl_set(
291 __in efx_nic_t *enp,
292 __in uint32_t rss_context,
293 __in_ecount(n) unsigned int *table,
294 __in size_t n);
295
296LIBEFX_INTERNAL
297extern __checkReturn uint32_t
298rhead_rx_prefix_hash(
299 __in efx_nic_t *enp,
300 __in efx_rx_hash_alg_t func,
301 __in uint8_t *buffer);
302
303#endif
304
305LIBEFX_INTERNAL
306extern __checkReturn efx_rc_t
307rhead_rx_prefix_pktlen(
308 __in efx_nic_t *enp,
309 __in uint8_t *buffer,
310 __out uint16_t *lengthp);
311
312LIBEFX_INTERNAL
313extern void
314rhead_rx_qpost(
315 __in efx_rxq_t *erp,
316 __in_ecount(ndescs) efsys_dma_addr_t *addrp,
317 __in size_t size,
318 __in unsigned int ndescs,
319 __in unsigned int completed,
320 __in unsigned int added);
321
322LIBEFX_INTERNAL
323extern void
324rhead_rx_qpush(
325 __in efx_rxq_t *erp,
326 __in unsigned int added,
327 __inout unsigned int *pushedp);
328
329LIBEFX_INTERNAL
330extern __checkReturn efx_rc_t
331rhead_rx_qflush(
332 __in efx_rxq_t *erp);
333
334LIBEFX_INTERNAL
335extern void
336rhead_rx_qenable(
337 __in efx_rxq_t *erp);
338
339union efx_rxq_type_data_u;
340
341LIBEFX_INTERNAL
342extern __checkReturn efx_rc_t
343rhead_rx_qcreate(
344 __in efx_nic_t *enp,
345 __in unsigned int index,
346 __in unsigned int label,
347 __in efx_rxq_type_t type,
348 __in const union efx_rxq_type_data_u *type_data,
349 __in efsys_mem_t *esmp,
350 __in size_t ndescs,
351 __in uint32_t id,
352 __in unsigned int flags,
353 __in efx_evq_t *eep,
354 __in efx_rxq_t *erp);
355
356LIBEFX_INTERNAL
357extern void
358rhead_rx_qdestroy(
359 __in efx_rxq_t *erp);
360
361
362
363
364LIBEFX_INTERNAL
365extern __checkReturn efx_rc_t
366rhead_tx_init(
367 __in efx_nic_t *enp);
368
369LIBEFX_INTERNAL
370extern void
371rhead_tx_fini(
372 __in efx_nic_t *enp);
373
374LIBEFX_INTERNAL
375extern __checkReturn efx_rc_t
376rhead_tx_qcreate(
377 __in efx_nic_t *enp,
378 __in unsigned int index,
379 __in unsigned int label,
380 __in efsys_mem_t *esmp,
381 __in size_t ndescs,
382 __in uint32_t id,
383 __in uint16_t flags,
384 __in efx_evq_t *eep,
385 __in efx_txq_t *etp,
386 __out unsigned int *addedp);
387
388LIBEFX_INTERNAL
389extern void
390rhead_tx_qdestroy(
391 __in efx_txq_t *etp);
392
393LIBEFX_INTERNAL
394extern __checkReturn efx_rc_t
395rhead_tx_qpost(
396 __in efx_txq_t *etp,
397 __in_ecount(ndescs) efx_buffer_t *ebp,
398 __in unsigned int ndescs,
399 __in unsigned int completed,
400 __inout unsigned int *addedp);
401
402LIBEFX_INTERNAL
403extern void
404rhead_tx_qpush(
405 __in efx_txq_t *etp,
406 __in unsigned int added,
407 __in unsigned int pushed);
408
409LIBEFX_INTERNAL
410extern __checkReturn efx_rc_t
411rhead_tx_qpace(
412 __in efx_txq_t *etp,
413 __in unsigned int ns);
414
415LIBEFX_INTERNAL
416extern __checkReturn efx_rc_t
417rhead_tx_qflush(
418 __in efx_txq_t *etp);
419
420LIBEFX_INTERNAL
421extern void
422rhead_tx_qenable(
423 __in efx_txq_t *etp);
424
425LIBEFX_INTERNAL
426extern __checkReturn efx_rc_t
427rhead_tx_qdesc_post(
428 __in efx_txq_t *etp,
429 __in_ecount(n) efx_desc_t *ed,
430 __in unsigned int n,
431 __in unsigned int completed,
432 __inout unsigned int *addedp);
433
434#if EFSYS_OPT_QSTATS
435
436LIBEFX_INTERNAL
437extern void
438rhead_tx_qstats_update(
439 __in efx_txq_t *etp,
440 __inout_ecount(TX_NQSTATS) efsys_stat_t *stat);
441
442#endif
443
444#if EFSYS_OPT_TUNNEL
445
446LIBEFX_INTERNAL
447extern __checkReturn efx_rc_t
448rhead_tunnel_reconfigure(
449 __in efx_nic_t *enp);
450
451LIBEFX_INTERNAL
452extern void
453rhead_tunnel_fini(
454 __in efx_nic_t *enp);
455
456#endif
457
458#if EFSYS_OPT_PCI
459
460
461
462
463
464LIBEFX_INTERNAL
465extern __checkReturn efx_rc_t
466rhead_pci_nic_membar_lookup(
467 __in efsys_pci_config_t *espcp,
468 __in const efx_pci_ops_t *epop,
469 __out efx_bar_region_t *ebrp);
470
471#endif
472
473LIBEFX_INTERNAL
474extern __checkReturn efx_rc_t
475rhead_nic_xilinx_cap_tbl_read_ef100_locator(
476 __in efsys_bar_t *esbp,
477 __in efsys_dma_addr_t offset,
478 __out efx_bar_region_t *ebrp);
479
480#if EFSYS_OPT_VIRTIO
481
482LIBEFX_INTERNAL
483extern __checkReturn efx_rc_t
484rhead_virtio_qstart(
485 __in efx_virtio_vq_t *evvp,
486 __in efx_virtio_vq_cfg_t *evvcp,
487 __in_opt efx_virtio_vq_dyncfg_t *evvdp);
488
489LIBEFX_INTERNAL
490extern __checkReturn efx_rc_t
491rhead_virtio_qstop(
492 __in efx_virtio_vq_t *evvp,
493 __out_opt efx_virtio_vq_dyncfg_t *evvdp);
494
495LIBEFX_INTERNAL
496extern __checkReturn efx_rc_t
497rhead_virtio_get_doorbell_offset(
498 __in efx_virtio_vq_t *evvp,
499 __out uint32_t *offsetp);
500
501LIBEFX_INTERNAL
502extern __checkReturn efx_rc_t
503rhead_virtio_get_features(
504 __in efx_nic_t *enp,
505 __in efx_virtio_device_type_t type,
506 __out uint64_t *featuresp);
507
508LIBEFX_INTERNAL
509extern __checkReturn efx_rc_t
510rhead_virtio_verify_features(
511 __in efx_nic_t *enp,
512 __in efx_virtio_device_type_t type,
513 __in uint64_t features);
514
515#endif
516
517#ifdef __cplusplus
518}
519#endif
520
521#endif
522