@@ -749,6 +749,8 @@ nfb_eth_dev_init(struct rte_eth_dev *dev, void *init_data)
749749 struct rte_ether_addr eth_addr_init ;
750750 struct rte_kvargs * kvlist ;
751751
752+ const char * arg_val ;
753+
752754 internals = (struct pmd_internals * ) rte_zmalloc_socket ("nfb_internals" ,
753755 sizeof (struct pmd_internals ), RTE_CACHE_LINE_SIZE ,
754756 dev -> device -> numa_node );
@@ -758,6 +760,9 @@ nfb_eth_dev_init(struct rte_eth_dev *dev, void *init_data)
758760 }
759761
760762 dev -> process_private = internals ;
763+ internals -> flags = 0 ;
764+
765+ internals -> flags = NFB_QUEUE_DRIVER_NDP_SHARED ;
761766
762767 /* Check validity of device args */
763768 if (dev -> device -> devargs != NULL &&
@@ -778,9 +783,17 @@ nfb_eth_dev_init(struct rte_eth_dev *dev, void *init_data)
778783 }
779784 }
780785
786+ if ((arg_val = rte_kvargs_get (kvlist , NFB_ARG_QUEUE_DRIVER ))) {
787+ if (strcmp (arg_val , "native" ) == 0 ) {
788+ internals -> flags &= ~NFB_QUEUE_DRIVER_NDP_SHARED ;
789+ }
790+ }
791+
781792 rte_kvargs_free (kvlist );
782793 }
783794
795+ internals -> nfb_id = params -> nfb_id ;
796+
784797 /* Open device handle */
785798 internals -> nfb = nfb_open (params -> path );
786799 if (internals -> nfb == NULL ) {
@@ -794,8 +807,17 @@ nfb_eth_dev_init(struct rte_eth_dev *dev, void *init_data)
794807 nfb_nc_eth_init (internals , params );
795808
796809 /* Set rx, tx burst functions */
797- dev -> rx_pkt_burst = nfb_eth_ndp_rx ;
798- dev -> tx_pkt_burst = nfb_eth_ndp_tx ;
810+ if (internals -> flags & NFB_QUEUE_DRIVER_NDP_SHARED ) {
811+ dev -> rx_pkt_burst = nfb_eth_ndp_rx ;
812+ dev -> tx_pkt_burst = nfb_eth_ndp_tx ;
813+ //RTE_LOG(ERR, PMD, "NFB: Using NDP driver for rx/tx\n");
814+ printf ("NFB: Using NDP driver for rx/tx\n" );
815+ } else {
816+ dev -> rx_pkt_burst = nfb_ndp_queue_rx ;
817+ dev -> tx_pkt_burst = nfb_ndp_queue_tx ;
818+ //RTE_LOG(ERR, PMD, "NFB: Using Native driver for rx/tx\n");
819+ printf ("NFB: Using Native driver for rx/tx\n" );
820+ }
799821
800822 /* Get number of available DMA RX and TX queues */
801823 priv -> max_rx_queues = ifc -> rxq_cnt ;
@@ -1020,4 +1042,5 @@ RTE_PMD_REGISTER_PCI(RTE_NFB_DRIVER_NAME, nfb_eth_driver);
10201042RTE_PMD_REGISTER_PCI_TABLE (RTE_NFB_DRIVER_NAME , nfb_pci_id_table );
10211043RTE_PMD_REGISTER_KMOD_DEP (RTE_NFB_DRIVER_NAME , "* nfb" );
10221044RTE_PMD_REGISTER_PARAM_STRING (RTE_NFB_DRIVER_NAME ,
1023- NFB_ARG_RXHDR_DYNFIELD "=<0|1>" );
1045+ NFB_ARG_RXHDR_DYNFIELD "=<0|1> "
1046+ NFB_ARG_QUEUE_DRIVER "=<ndp|native>" );
0 commit comments