1
2
3
4
5
6
7
8
9
10
11
12#ifndef _NFP_NET_H_
13#define _NFP_NET_H_
14
15#include <linux/interrupt.h>
16#include <linux/list.h>
17#include <linux/netdevice.h>
18#include <linux/pci.h>
19#include <linux/io-64-nonatomic-hi-lo.h>
20#include <linux/semaphore.h>
21#include <net/xdp.h>
22
23#include "nfp_net_ctrl.h"
24
25#define nn_pr(nn, lvl, fmt, args...) \
26 ({ \
27 struct nfp_net *__nn = (nn); \
28 \
29 if (__nn->dp.netdev) \
30 netdev_printk(lvl, __nn->dp.netdev, fmt, ## args); \
31 else \
32 dev_printk(lvl, __nn->dp.dev, "ctrl: " fmt, ## args); \
33 })
34
35#define nn_err(nn, fmt, args...) nn_pr(nn, KERN_ERR, fmt, ## args)
36#define nn_warn(nn, fmt, args...) nn_pr(nn, KERN_WARNING, fmt, ## args)
37#define nn_info(nn, fmt, args...) nn_pr(nn, KERN_INFO, fmt, ## args)
38#define nn_dbg(nn, fmt, args...) nn_pr(nn, KERN_DEBUG, fmt, ## args)
39
40#define nn_dp_warn(dp, fmt, args...) \
41 ({ \
42 struct nfp_net_dp *__dp = (dp); \
43 \
44 if (unlikely(net_ratelimit())) { \
45 if (__dp->netdev) \
46 netdev_warn(__dp->netdev, fmt, ## args); \
47 else \
48 dev_warn(__dp->dev, fmt, ## args); \
49 } \
50 })
51
52
53#define NFP_NET_POLL_TIMEOUT 5
54
55
56#define NFP_NET_STAT_POLL_IVL msecs_to_jiffies(100)
57
58
59#define NFP_NET_CTRL_BAR 0
60#define NFP_NET_Q0_BAR 2
61#define NFP_NET_Q1_BAR 4
62
63
64#define NFP_NET_MAX_DMA_BITS 40
65
66
67#define NFP_NET_DEFAULT_MTU 1500
68
69
70#define NFP_NET_MAX_PREPEND 64
71
72
73#define NFP_NET_NON_Q_VECTORS 2
74#define NFP_NET_IRQ_LSC_IDX 0
75#define NFP_NET_IRQ_EXN_IDX 1
76#define NFP_NET_MIN_VNIC_IRQS (NFP_NET_NON_Q_VECTORS + 1)
77
78
79#define NFP_NET_MAX_TX_RINGS 64
80#define NFP_NET_MAX_RX_RINGS 64
81#define NFP_NET_MAX_R_VECS (NFP_NET_MAX_TX_RINGS > NFP_NET_MAX_RX_RINGS ? \
82 NFP_NET_MAX_TX_RINGS : NFP_NET_MAX_RX_RINGS)
83#define NFP_NET_MAX_IRQS (NFP_NET_NON_Q_VECTORS + NFP_NET_MAX_R_VECS)
84
85#define NFP_NET_MIN_TX_DESCS 256
86#define NFP_NET_MIN_RX_DESCS 256
87#define NFP_NET_MAX_TX_DESCS (256 * 1024)
88#define NFP_NET_MAX_RX_DESCS (256 * 1024)
89
90#define NFP_NET_TX_DESCS_DEFAULT 4096
91#define NFP_NET_RX_DESCS_DEFAULT 4096
92
93#define NFP_NET_FL_BATCH 16
94#define NFP_NET_XDP_MAX_COMPLETE 2048
95
96
97#define NFP_NET_N_VXLAN_PORTS (NFP_NET_CFG_VXLAN_SZ / sizeof(__be16))
98
99#define NFP_NET_RX_BUF_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN)
100#define NFP_NET_RX_BUF_NON_DATA (NFP_NET_RX_BUF_HEADROOM + \
101 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
102
103
104struct nfp_cpp;
105struct nfp_eth_table_port;
106struct nfp_net;
107struct nfp_net_r_vector;
108struct nfp_port;
109
110
111#define D_IDX(ring, idx) ((idx) & ((ring)->cnt - 1))
112
113
114#define nfp_desc_set_dma_addr(desc, dma_addr) \
115 do { \
116 __typeof(desc) __d = (desc); \
117 dma_addr_t __addr = (dma_addr); \
118 \
119 __d->dma_addr_lo = cpu_to_le32(lower_32_bits(__addr)); \
120 __d->dma_addr_hi = upper_32_bits(__addr) & 0xff; \
121 } while (0)
122
123
124
125#define PCIE_DESC_TX_EOP BIT(7)
126#define PCIE_DESC_TX_OFFSET_MASK GENMASK(6, 0)
127#define PCIE_DESC_TX_MSS_MASK GENMASK(13, 0)
128
129
130#define PCIE_DESC_TX_CSUM BIT(7)
131#define PCIE_DESC_TX_IP4_CSUM BIT(6)
132#define PCIE_DESC_TX_TCP_CSUM BIT(5)
133#define PCIE_DESC_TX_UDP_CSUM BIT(4)
134#define PCIE_DESC_TX_VLAN BIT(3)
135#define PCIE_DESC_TX_LSO BIT(2)
136#define PCIE_DESC_TX_ENCAP BIT(1)
137#define PCIE_DESC_TX_O_IP4_CSUM BIT(0)
138
139struct nfp_net_tx_desc {
140 union {
141 struct {
142 u8 dma_addr_hi;
143 __le16 dma_len;
144 u8 offset_eop;
145
146
147 __le32 dma_addr_lo;
148
149 __le16 mss;
150 u8 lso_hdrlen;
151 u8 flags;
152 union {
153 struct {
154 u8 l3_offset;
155 u8 l4_offset;
156 };
157 __le16 vlan;
158 };
159 __le16 data_len;
160 } __packed;
161 __le32 vals[4];
162 __le64 vals8[2];
163 };
164};
165
166
167
168
169
170
171
172
173
174
175
176
177
178struct nfp_net_tx_buf {
179 union {
180 struct sk_buff *skb;
181 void *frag;
182 };
183 dma_addr_t dma_addr;
184 short int fidx;
185 u16 pkt_cnt;
186 u32 real_len;
187};
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207struct nfp_net_tx_ring {
208 struct nfp_net_r_vector *r_vec;
209
210 u32 idx;
211 int qcidx;
212 u8 __iomem *qcp_q;
213
214 u32 cnt;
215 u32 wr_p;
216 u32 rd_p;
217 u32 qcp_rd_p;
218
219 u32 wr_ptr_add;
220
221 struct nfp_net_tx_buf *txbufs;
222 struct nfp_net_tx_desc *txds;
223
224 dma_addr_t dma;
225 size_t size;
226 bool is_xdp;
227} ____cacheline_aligned;
228
229
230
231#define PCIE_DESC_RX_DD BIT(7)
232#define PCIE_DESC_RX_META_LEN_MASK GENMASK(6, 0)
233
234
235#define PCIE_DESC_RX_RSS cpu_to_le16(BIT(15))
236#define PCIE_DESC_RX_I_IP4_CSUM cpu_to_le16(BIT(14))
237#define PCIE_DESC_RX_I_IP4_CSUM_OK cpu_to_le16(BIT(13))
238#define PCIE_DESC_RX_I_TCP_CSUM cpu_to_le16(BIT(12))
239#define PCIE_DESC_RX_I_TCP_CSUM_OK cpu_to_le16(BIT(11))
240#define PCIE_DESC_RX_I_UDP_CSUM cpu_to_le16(BIT(10))
241#define PCIE_DESC_RX_I_UDP_CSUM_OK cpu_to_le16(BIT(9))
242#define PCIE_DESC_RX_BPF cpu_to_le16(BIT(8))
243#define PCIE_DESC_RX_EOP cpu_to_le16(BIT(7))
244#define PCIE_DESC_RX_IP4_CSUM cpu_to_le16(BIT(6))
245#define PCIE_DESC_RX_IP4_CSUM_OK cpu_to_le16(BIT(5))
246#define PCIE_DESC_RX_TCP_CSUM cpu_to_le16(BIT(4))
247#define PCIE_DESC_RX_TCP_CSUM_OK cpu_to_le16(BIT(3))
248#define PCIE_DESC_RX_UDP_CSUM cpu_to_le16(BIT(2))
249#define PCIE_DESC_RX_UDP_CSUM_OK cpu_to_le16(BIT(1))
250#define PCIE_DESC_RX_VLAN cpu_to_le16(BIT(0))
251
252#define PCIE_DESC_RX_CSUM_ALL (PCIE_DESC_RX_IP4_CSUM | \
253 PCIE_DESC_RX_TCP_CSUM | \
254 PCIE_DESC_RX_UDP_CSUM | \
255 PCIE_DESC_RX_I_IP4_CSUM | \
256 PCIE_DESC_RX_I_TCP_CSUM | \
257 PCIE_DESC_RX_I_UDP_CSUM)
258#define PCIE_DESC_RX_CSUM_OK_SHIFT 1
259#define __PCIE_DESC_RX_CSUM_ALL le16_to_cpu(PCIE_DESC_RX_CSUM_ALL)
260#define __PCIE_DESC_RX_CSUM_ALL_OK (__PCIE_DESC_RX_CSUM_ALL >> \
261 PCIE_DESC_RX_CSUM_OK_SHIFT)
262
263struct nfp_net_rx_desc {
264 union {
265 struct {
266 u8 dma_addr_hi;
267 __le16 reserved;
268 u8 meta_len_dd;
269
270 __le32 dma_addr_lo;
271 } __packed fld;
272
273 struct {
274 __le16 data_len;
275 u8 reserved;
276 u8 meta_len_dd;
277
278
279
280 __le16 flags;
281 __le16 vlan;
282 } __packed rxd;
283
284 __le32 vals[2];
285 };
286};
287
288#define NFP_NET_META_FIELD_MASK GENMASK(NFP_NET_META_FIELD_SIZE - 1, 0)
289
290struct nfp_meta_parsed {
291 u8 hash_type;
292 u8 csum_type;
293 u32 hash;
294 u32 mark;
295 u32 portid;
296 __wsum csum;
297};
298
299struct nfp_net_rx_hash {
300 __be32 hash_type;
301 __be32 hash;
302};
303
304
305
306
307
308
309struct nfp_net_rx_buf {
310 void *frag;
311 dma_addr_t dma_addr;
312};
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329struct nfp_net_rx_ring {
330 struct nfp_net_r_vector *r_vec;
331
332 u32 cnt;
333 u32 wr_p;
334 u32 rd_p;
335
336 u32 idx;
337
338 int fl_qcidx;
339 u8 __iomem *qcp_fl;
340
341 struct nfp_net_rx_buf *rxbufs;
342 struct nfp_net_rx_desc *rxds;
343
344 struct xdp_rxq_info xdp_rxq;
345
346 dma_addr_t dma;
347 size_t size;
348} ____cacheline_aligned;
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389struct nfp_net_r_vector {
390 struct nfp_net *nfp_net;
391 union {
392 struct napi_struct napi;
393 struct {
394 struct tasklet_struct tasklet;
395 struct sk_buff_head queue;
396 spinlock_t lock;
397 };
398 };
399
400 struct nfp_net_tx_ring *tx_ring;
401 struct nfp_net_rx_ring *rx_ring;
402
403 u16 irq_entry;
404
405 struct u64_stats_sync rx_sync;
406 u64 rx_pkts;
407 u64 rx_bytes;
408 u64 rx_drops;
409 u64 hw_csum_rx_ok;
410 u64 hw_csum_rx_inner_ok;
411 u64 hw_csum_rx_complete;
412
413 struct nfp_net_tx_ring *xdp_ring;
414
415 struct u64_stats_sync tx_sync;
416 u64 tx_pkts;
417 u64 tx_bytes;
418 u64 hw_csum_tx;
419 u64 hw_csum_tx_inner;
420 u64 tx_gather;
421 u64 tx_lso;
422
423 u64 hw_csum_rx_error;
424 u64 rx_replace_buf_alloc_fail;
425 u64 tx_errors;
426 u64 tx_busy;
427
428 u32 irq_vector;
429 irq_handler_t handler;
430 char name[IFNAMSIZ + 8];
431 cpumask_t affinity_mask;
432} ____cacheline_aligned;
433
434
435struct nfp_net_fw_version {
436 u8 minor;
437 u8 major;
438 u8 class;
439 u8 resv;
440} __packed;
441
442static inline bool nfp_net_fw_ver_eq(struct nfp_net_fw_version *fw_ver,
443 u8 resv, u8 class, u8 major, u8 minor)
444{
445 return fw_ver->resv == resv &&
446 fw_ver->class == class &&
447 fw_ver->major == major &&
448 fw_ver->minor == minor;
449}
450
451struct nfp_stat_pair {
452 u64 pkts;
453 u64 bytes;
454};
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480struct nfp_net_dp {
481 struct device *dev;
482 struct net_device *netdev;
483
484 u8 is_vf:1;
485 u8 chained_metadata_format:1;
486
487 u8 rx_dma_dir;
488 u8 rx_offset;
489
490 u32 rx_dma_off;
491
492 u32 ctrl;
493 u32 fl_bufsz;
494
495 struct bpf_prog *xdp_prog;
496
497 struct nfp_net_tx_ring *tx_rings;
498 struct nfp_net_rx_ring *rx_rings;
499
500 u8 __iomem *ctrl_bar;
501
502
503
504 unsigned int txd_cnt;
505 unsigned int rxd_cnt;
506
507 unsigned int num_r_vecs;
508
509 unsigned int num_tx_rings;
510 unsigned int num_stack_tx_rings;
511 unsigned int num_rx_rings;
512
513 unsigned int mtu;
514};
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579struct nfp_net {
580 struct nfp_net_dp dp;
581
582 struct nfp_net_fw_version fw_ver;
583
584 u32 id;
585
586 u32 cap;
587 u32 max_mtu;
588
589 u8 rss_hfunc;
590 u32 rss_cfg;
591 u8 rss_key[NFP_NET_CFG_RSS_KEY_SZ];
592 u8 rss_itbl[NFP_NET_CFG_RSS_ITBL_SZ];
593
594 struct xdp_attachment_info xdp;
595 struct xdp_attachment_info xdp_hw;
596
597 unsigned int max_tx_rings;
598 unsigned int max_rx_rings;
599
600 int stride_tx;
601 int stride_rx;
602
603 unsigned int max_r_vecs;
604 struct nfp_net_r_vector r_vecs[NFP_NET_MAX_R_VECS];
605 struct msix_entry irq_entries[NFP_NET_MAX_IRQS];
606
607 irq_handler_t lsc_handler;
608 char lsc_name[IFNAMSIZ + 8];
609
610 irq_handler_t exn_handler;
611 char exn_name[IFNAMSIZ + 8];
612
613 irq_handler_t shared_handler;
614 char shared_name[IFNAMSIZ + 8];
615
616 u32 me_freq_mhz;
617
618 bool link_up;
619 spinlock_t link_status_lock;
620
621 spinlock_t reconfig_lock;
622 u32 reconfig_posted;
623 bool reconfig_timer_active;
624 bool reconfig_sync_present;
625 struct timer_list reconfig_timer;
626 u32 reconfig_in_progress_update;
627
628 struct semaphore bar_lock;
629
630 u32 rx_coalesce_usecs;
631 u32 rx_coalesce_max_frames;
632 u32 tx_coalesce_usecs;
633 u32 tx_coalesce_max_frames;
634
635 __be16 vxlan_ports[NFP_NET_N_VXLAN_PORTS];
636 u8 vxlan_usecnt[NFP_NET_N_VXLAN_PORTS];
637
638 u8 __iomem *qcp_cfg;
639
640 u8 __iomem *tx_bar;
641 u8 __iomem *rx_bar;
642
643 struct nfp_net_tlv_caps tlv_caps;
644
645 struct {
646 struct sk_buff_head queue;
647 wait_queue_head_t wq;
648 u16 tag;
649 } mbox_cmsg;
650
651 struct dentry *debugfs_dir;
652
653 struct list_head vnic_list;
654
655 struct pci_dev *pdev;
656 struct nfp_app *app;
657
658 bool vnic_no_name;
659
660 struct nfp_port *port;
661
662 void *app_priv;
663};
664
665
666
667
668static inline u16 nn_readb(struct nfp_net *nn, int off)
669{
670 return readb(nn->dp.ctrl_bar + off);
671}
672
673static inline void nn_writeb(struct nfp_net *nn, int off, u8 val)
674{
675 writeb(val, nn->dp.ctrl_bar + off);
676}
677
678static inline u16 nn_readw(struct nfp_net *nn, int off)
679{
680 return readw(nn->dp.ctrl_bar + off);
681}
682
683static inline void nn_writew(struct nfp_net *nn, int off, u16 val)
684{
685 writew(val, nn->dp.ctrl_bar + off);
686}
687
688static inline u32 nn_readl(struct nfp_net *nn, int off)
689{
690 return readl(nn->dp.ctrl_bar + off);
691}
692
693static inline void nn_writel(struct nfp_net *nn, int off, u32 val)
694{
695 writel(val, nn->dp.ctrl_bar + off);
696}
697
698static inline u64 nn_readq(struct nfp_net *nn, int off)
699{
700 return readq(nn->dp.ctrl_bar + off);
701}
702
703static inline void nn_writeq(struct nfp_net *nn, int off, u64 val)
704{
705 writeq(val, nn->dp.ctrl_bar + off);
706}
707
708
709static inline void nn_pci_flush(struct nfp_net *nn)
710{
711 nn_readl(nn, NFP_NET_CFG_VERSION);
712}
713
714
715
716
717
718
719
720
721
722
723#define NFP_QCP_QUEUE_ADDR_SZ 0x800
724#define NFP_QCP_QUEUE_AREA_SZ 0x80000
725#define NFP_QCP_QUEUE_OFF(_x) ((_x) * NFP_QCP_QUEUE_ADDR_SZ)
726#define NFP_QCP_QUEUE_ADD_RPTR 0x0000
727#define NFP_QCP_QUEUE_ADD_WPTR 0x0004
728#define NFP_QCP_QUEUE_STS_LO 0x0008
729#define NFP_QCP_QUEUE_STS_LO_READPTR_mask 0x3ffff
730#define NFP_QCP_QUEUE_STS_HI 0x000c
731#define NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask 0x3ffff
732
733
734#define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff)))
735
736
737enum nfp_qcp_ptr {
738 NFP_QCP_READ_PTR = 0,
739 NFP_QCP_WRITE_PTR
740};
741
742
743
744
745
746#define NFP_QCP_MAX_ADD 0x3f
747
748static inline void _nfp_qcp_ptr_add(u8 __iomem *q,
749 enum nfp_qcp_ptr ptr, u32 val)
750{
751 u32 off;
752
753 if (ptr == NFP_QCP_READ_PTR)
754 off = NFP_QCP_QUEUE_ADD_RPTR;
755 else
756 off = NFP_QCP_QUEUE_ADD_WPTR;
757
758 while (val > NFP_QCP_MAX_ADD) {
759 writel(NFP_QCP_MAX_ADD, q + off);
760 val -= NFP_QCP_MAX_ADD;
761 }
762
763 writel(val, q + off);
764}
765
766
767
768
769
770
771
772
773
774static inline void nfp_qcp_rd_ptr_add(u8 __iomem *q, u32 val)
775{
776 _nfp_qcp_ptr_add(q, NFP_QCP_READ_PTR, val);
777}
778
779
780
781
782
783
784
785
786
787static inline void nfp_qcp_wr_ptr_add(u8 __iomem *q, u32 val)
788{
789 _nfp_qcp_ptr_add(q, NFP_QCP_WRITE_PTR, val);
790}
791
792static inline u32 _nfp_qcp_read(u8 __iomem *q, enum nfp_qcp_ptr ptr)
793{
794 u32 off;
795 u32 val;
796
797 if (ptr == NFP_QCP_READ_PTR)
798 off = NFP_QCP_QUEUE_STS_LO;
799 else
800 off = NFP_QCP_QUEUE_STS_HI;
801
802 val = readl(q + off);
803
804 if (ptr == NFP_QCP_READ_PTR)
805 return val & NFP_QCP_QUEUE_STS_LO_READPTR_mask;
806 else
807 return val & NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask;
808}
809
810
811
812
813
814
815
816static inline u32 nfp_qcp_rd_ptr_read(u8 __iomem *q)
817{
818 return _nfp_qcp_read(q, NFP_QCP_READ_PTR);
819}
820
821
822
823
824
825
826
827static inline u32 nfp_qcp_wr_ptr_read(u8 __iomem *q)
828{
829 return _nfp_qcp_read(q, NFP_QCP_WRITE_PTR);
830}
831
832static inline bool nfp_net_is_data_vnic(struct nfp_net *nn)
833{
834 WARN_ON_ONCE(!nn->dp.netdev && nn->port);
835 return !!nn->dp.netdev;
836}
837
838static inline bool nfp_net_running(struct nfp_net *nn)
839{
840 return nn->dp.ctrl & NFP_NET_CFG_CTRL_ENABLE;
841}
842
843static inline const char *nfp_net_name(struct nfp_net *nn)
844{
845 return nn->dp.netdev ? nn->dp.netdev->name : "ctrl";
846}
847
848static inline void nfp_ctrl_lock(struct nfp_net *nn)
849 __acquires(&nn->r_vecs[0].lock)
850{
851 spin_lock_bh(&nn->r_vecs[0].lock);
852}
853
854static inline void nfp_ctrl_unlock(struct nfp_net *nn)
855 __releases(&nn->r_vecs[0].lock)
856{
857 spin_unlock_bh(&nn->r_vecs[0].lock);
858}
859
860static inline void nn_ctrl_bar_lock(struct nfp_net *nn)
861{
862 down(&nn->bar_lock);
863}
864
865static inline void nn_ctrl_bar_unlock(struct nfp_net *nn)
866{
867 up(&nn->bar_lock);
868}
869
870
871extern const char nfp_driver_version[];
872
873extern const struct net_device_ops nfp_net_netdev_ops;
874
875static inline bool nfp_netdev_is_nfp_net(struct net_device *netdev)
876{
877 return netdev->netdev_ops == &nfp_net_netdev_ops;
878}
879
880
881void nfp_net_get_fw_version(struct nfp_net_fw_version *fw_ver,
882 void __iomem *ctrl_bar);
883
884struct nfp_net *
885nfp_net_alloc(struct pci_dev *pdev, void __iomem *ctrl_bar, bool needs_netdev,
886 unsigned int max_tx_rings, unsigned int max_rx_rings);
887void nfp_net_free(struct nfp_net *nn);
888
889int nfp_net_init(struct nfp_net *nn);
890void nfp_net_clean(struct nfp_net *nn);
891
892int nfp_ctrl_open(struct nfp_net *nn);
893void nfp_ctrl_close(struct nfp_net *nn);
894
895void nfp_net_set_ethtool_ops(struct net_device *netdev);
896void nfp_net_info(struct nfp_net *nn);
897int __nfp_net_reconfig(struct nfp_net *nn, u32 update);
898int nfp_net_reconfig(struct nfp_net *nn, u32 update);
899unsigned int nfp_net_rss_key_sz(struct nfp_net *nn);
900void nfp_net_rss_write_itbl(struct nfp_net *nn);
901void nfp_net_rss_write_key(struct nfp_net *nn);
902void nfp_net_coalesce_write_cfg(struct nfp_net *nn);
903int nfp_net_mbox_lock(struct nfp_net *nn, unsigned int data_size);
904int nfp_net_mbox_reconfig(struct nfp_net *nn, u32 mbox_cmd);
905int nfp_net_mbox_reconfig_and_unlock(struct nfp_net *nn, u32 mbox_cmd);
906
907unsigned int
908nfp_net_irqs_alloc(struct pci_dev *pdev, struct msix_entry *irq_entries,
909 unsigned int min_irqs, unsigned int want_irqs);
910void nfp_net_irqs_disable(struct pci_dev *pdev);
911void
912nfp_net_irqs_assign(struct nfp_net *nn, struct msix_entry *irq_entries,
913 unsigned int n);
914
915struct nfp_net_dp *nfp_net_clone_dp(struct nfp_net *nn);
916int nfp_net_ring_reconfig(struct nfp_net *nn, struct nfp_net_dp *new,
917 struct netlink_ext_ack *extack);
918
919#ifdef CONFIG_NFP_DEBUG
920void nfp_net_debugfs_create(void);
921void nfp_net_debugfs_destroy(void);
922struct dentry *nfp_net_debugfs_device_add(struct pci_dev *pdev);
923void nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir);
924void nfp_net_debugfs_dir_clean(struct dentry **dir);
925#else
926static inline void nfp_net_debugfs_create(void)
927{
928}
929
930static inline void nfp_net_debugfs_destroy(void)
931{
932}
933
934static inline struct dentry *nfp_net_debugfs_device_add(struct pci_dev *pdev)
935{
936 return NULL;
937}
938
939static inline void
940nfp_net_debugfs_vnic_add(struct nfp_net *nn, struct dentry *ddir)
941{
942}
943
944static inline void nfp_net_debugfs_dir_clean(struct dentry **dir)
945{
946}
947#endif
948
949#endif
950