|
75 | 75 |
|
76 | 76 | /* Default size for MTU and freelist buffer sizes */
|
77 | 77 | #define NFP_NET_DEFAULT_MTU 1500
|
78 |
| -#define NFP_NET_DEFAULT_RX_BUFSZ 2048 |
79 | 78 |
|
80 | 79 | /* Maximum number of bytes prepended to a packet */
|
81 | 80 | #define NFP_NET_MAX_PREPEND 64
|
|
88 | 87 | /* Queue/Ring definitions */
|
89 | 88 | #define NFP_NET_MAX_TX_RINGS 64 /* Max. # of Tx rings per device */
|
90 | 89 | #define NFP_NET_MAX_RX_RINGS 64 /* Max. # of Rx rings per device */
|
| 90 | +#define NFP_NET_MAX_R_VECS (NFP_NET_MAX_TX_RINGS > NFP_NET_MAX_RX_RINGS ? \ |
| 91 | + NFP_NET_MAX_TX_RINGS : NFP_NET_MAX_RX_RINGS) |
| 92 | +#define NFP_NET_MAX_IRQS (NFP_NET_NON_Q_VECTORS + NFP_NET_MAX_R_VECS) |
91 | 93 |
|
92 | 94 | #define NFP_NET_MIN_TX_DESCS 256 /* Min. # of Tx descs per ring */
|
93 | 95 | #define NFP_NET_MIN_RX_DESCS 256 /* Min. # of Rx descs per ring */
|
|
102 | 104 | /* Offload definitions */
|
103 | 105 | #define NFP_NET_N_VXLAN_PORTS (NFP_NET_CFG_VXLAN_SZ / sizeof(__be16))
|
104 | 106 |
|
| 107 | +#define NFP_NET_RX_BUF_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN) |
| 108 | +#define NFP_NET_RX_BUF_NON_DATA (NFP_NET_RX_BUF_HEADROOM + \ |
| 109 | + SKB_DATA_ALIGN(sizeof(struct skb_shared_info))) |
| 110 | + |
105 | 111 | /* Forward declarations */
|
106 | 112 | struct nfp_net;
|
107 | 113 | struct nfp_net_r_vector;
|
@@ -278,11 +284,11 @@ struct nfp_net_rx_hash {
|
278 | 284 |
|
279 | 285 | /**
|
280 | 286 | * struct nfp_net_rx_buf - software RX buffer descriptor
|
281 |
| - * @skb: sk_buff associated with this buffer |
| 287 | + * @frag: page fragment buffer |
282 | 288 | * @dma_addr: DMA mapping address of the buffer
|
283 | 289 | */
|
284 | 290 | struct nfp_net_rx_buf {
|
285 |
| - struct sk_buff *skb; |
| 291 | + void *frag; |
286 | 292 | dma_addr_t dma_addr;
|
287 | 293 | };
|
288 | 294 |
|
@@ -421,7 +427,6 @@ struct nfp_stat_pair {
|
421 | 427 | * @netdev: Backpointer to net_device structure
|
422 | 428 | * @nfp_fallback: Is the driver used in fallback mode?
|
423 | 429 | * @is_vf: Is the driver attached to a VF?
|
424 |
| - * @is_nfp3200: Is the driver for a NFP-3200 card? |
425 | 430 | * @fw_loaded: Is the firmware loaded?
|
426 | 431 | * @bpf_offload_skip_sw: Offloaded BPF program will not be rerun by cls_bpf
|
427 | 432 | * @ctrl: Local copy of the control register/word.
|
@@ -451,7 +456,7 @@ struct nfp_stat_pair {
|
451 | 456 | * @rxd_cnt: Size of the RX ring in number of descriptors
|
452 | 457 | * @tx_rings: Array of pre-allocated TX ring structures
|
453 | 458 | * @rx_rings: Array of pre-allocated RX ring structures
|
454 |
| - * @num_irqs: Number of allocated interrupt vectors |
| 459 | + * @max_r_vecs: Number of allocated interrupt vectors for RX/TX |
455 | 460 | * @num_r_vecs: Number of used ring vectors
|
456 | 461 | * @r_vecs: Pre-allocated array of ring vectors
|
457 | 462 | * @irq_entries: Pre-allocated array of MSI-X entries
|
@@ -487,7 +492,6 @@ struct nfp_net {
|
487 | 492 |
|
488 | 493 | unsigned nfp_fallback:1;
|
489 | 494 | unsigned is_vf:1;
|
490 |
| - unsigned is_nfp3200:1; |
491 | 495 | unsigned fw_loaded:1;
|
492 | 496 | unsigned bpf_offload_skip_sw:1;
|
493 | 497 |
|
@@ -524,23 +528,22 @@ struct nfp_net {
|
524 | 528 | struct timer_list rx_filter_stats_timer;
|
525 | 529 | spinlock_t rx_filter_lock;
|
526 | 530 |
|
527 |
| - int max_tx_rings; |
528 |
| - int max_rx_rings; |
| 531 | + unsigned int max_tx_rings; |
| 532 | + unsigned int max_rx_rings; |
529 | 533 |
|
530 |
| - int num_tx_rings; |
531 |
| - int num_rx_rings; |
| 534 | + unsigned int num_tx_rings; |
| 535 | + unsigned int num_rx_rings; |
532 | 536 |
|
533 | 537 | int stride_tx;
|
534 | 538 | int stride_rx;
|
535 | 539 |
|
536 | 540 | int txd_cnt;
|
537 | 541 | int rxd_cnt;
|
538 | 542 |
|
539 |
| - u8 num_irqs; |
540 |
| - u8 num_r_vecs; |
541 |
| - struct nfp_net_r_vector r_vecs[NFP_NET_MAX_TX_RINGS]; |
542 |
| - struct msix_entry irq_entries[NFP_NET_NON_Q_VECTORS + |
543 |
| - NFP_NET_MAX_TX_RINGS]; |
| 543 | + unsigned int max_r_vecs; |
| 544 | + unsigned int num_r_vecs; |
| 545 | + struct nfp_net_r_vector r_vecs[NFP_NET_MAX_R_VECS]; |
| 546 | + struct msix_entry irq_entries[NFP_NET_MAX_IRQS]; |
544 | 547 |
|
545 | 548 | irq_handler_t lsc_handler;
|
546 | 549 | char lsc_name[IFNAMSIZ + 8];
|
@@ -593,16 +596,13 @@ static inline void nn_writeb(struct nfp_net *nn, int off, u8 val)
|
593 | 596 | writeb(val, nn->ctrl_bar + off);
|
594 | 597 | }
|
595 | 598 |
|
596 |
| -/* NFP-3200 can't handle 16-bit accesses too well */ |
597 | 599 | static inline u16 nn_readw(struct nfp_net *nn, int off)
|
598 | 600 | {
|
599 |
| - WARN_ON_ONCE(nn->is_nfp3200); |
600 | 601 | return readw(nn->ctrl_bar + off);
|
601 | 602 | }
|
602 | 603 |
|
603 | 604 | static inline void nn_writew(struct nfp_net *nn, int off, u16 val)
|
604 | 605 | {
|
605 |
| - WARN_ON_ONCE(nn->is_nfp3200); |
606 | 606 | writew(val, nn->ctrl_bar + off);
|
607 | 607 | }
|
608 | 608 |
|
@@ -650,7 +650,7 @@ static inline void nn_pci_flush(struct nfp_net *nn)
|
650 | 650 | #define NFP_QCP_QUEUE_STS_HI 0x000c
|
651 | 651 | #define NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask 0x3ffff
|
652 | 652 |
|
653 |
| -/* The offset of a QCP queues in the PCIe Target (same on NFP3200 and NFP6000 */ |
| 653 | +/* The offset of a QCP queues in the PCIe Target */ |
654 | 654 | #define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff)))
|
655 | 655 |
|
656 | 656 | /* nfp_qcp_ptr - Read or Write Pointer of a queue */
|
@@ -757,8 +757,9 @@ extern const char nfp_net_driver_version[];
|
757 | 757 | void nfp_net_get_fw_version(struct nfp_net_fw_version *fw_ver,
|
758 | 758 | void __iomem *ctrl_bar);
|
759 | 759 |
|
760 |
| -struct nfp_net *nfp_net_netdev_alloc(struct pci_dev *pdev, |
761 |
| - int max_tx_rings, int max_rx_rings); |
| 760 | +struct nfp_net * |
| 761 | +nfp_net_netdev_alloc(struct pci_dev *pdev, |
| 762 | + unsigned int max_tx_rings, unsigned int max_rx_rings); |
762 | 763 | void nfp_net_netdev_free(struct nfp_net *nn);
|
763 | 764 | int nfp_net_netdev_init(struct net_device *netdev);
|
764 | 765 | void nfp_net_netdev_clean(struct net_device *netdev);
|
|
0 commit comments