app: no more bare metal environment
[dpdk.git] / app / test-pmd / testpmd.c
index 546d429..79620c6 100644 (file)
@@ -174,7 +174,7 @@ uint16_t tx_pkt_seg_lengths[RTE_MAX_SEGS_PER_PKT] = {
 uint8_t  tx_pkt_nb_segs = 1; /**< Number of segments in TXONLY packets */
 
 uint16_t nb_pkt_per_burst = DEF_PKT_BURST; /**< Number of packets per burst. */
-uint16_t mb_mempool_cache = DEF_PKT_BURST; /**< Size of mbuf mempool cache. */
+uint16_t mb_mempool_cache = DEF_MBUF_CACHE; /**< Size of mbuf mempool cache. */
 
 /* current configuration is in DCB or not,0 means it is not in DCB mode */
 uint8_t dcb_config = 0;
@@ -204,9 +204,9 @@ uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; /**< Number of TX descriptors. */
  */
 #define RX_PTHRESH 8 /**< Default value of RX prefetch threshold register. */
 #define RX_HTHRESH 8 /**< Default value of RX host threshold register. */
-#define RX_WTHRESH 4 /**< Default value of RX write-back threshold register. */
+#define RX_WTHRESH 0 /**< Default value of RX write-back threshold register. */
 
-#define TX_PTHRESH 36 /**< Default value of TX prefetch threshold register. */
+#define TX_PTHRESH 32 /**< Default value of TX prefetch threshold register. */
 #define TX_HTHRESH 0 /**< Default value of TX host threshold register. */
 #define TX_WTHRESH 0 /**< Default value of TX write-back threshold register. */
 
@@ -225,7 +225,9 @@ struct rte_eth_thresh tx_thresh = {
 /*
  * Configurable value of RX free threshold.
  */
-uint16_t rx_free_thresh = 0; /* Immediately free RX descriptors by default. */
+uint16_t rx_free_thresh = 32; /* Refill RX descriptors once every 32 packets,
+               This setting is needed for ixgbe to enable bulk alloc or vector
+               receive functionality. */
 
 /*
  * Configurable value of RX drop enable.
@@ -300,7 +302,7 @@ struct rte_fdir_conf fdir_conf = {
        .drop_queue = 127,
 };
 
-static volatile int test_done = 1; /* stop packet forwarding when set to 1. */
+volatile int test_done = 1; /* stop packet forwarding when set to 1. */
 
 struct queue_stats_mappings tx_queue_stats_mappings_array[MAX_TX_QUEUE_STATS_MAPPINGS];
 struct queue_stats_mappings rx_queue_stats_mappings_array[MAX_RX_QUEUE_STATS_MAPPINGS];
@@ -398,18 +400,17 @@ testpmd_mbuf_ctor(struct rte_mempool *mp,
        mb_ctor_arg = (struct mbuf_ctor_arg *) opaque_arg;
        mb = (struct rte_mbuf *) raw_mbuf;
 
-       mb->type         = RTE_MBUF_PKT;
        mb->pool         = mp;
        mb->buf_addr     = (void *) ((char *)mb + mb_ctor_arg->seg_buf_offset);
        mb->buf_physaddr = (uint64_t) (rte_mempool_virt2phy(mp, mb) +
                        mb_ctor_arg->seg_buf_offset);
        mb->buf_len      = mb_ctor_arg->seg_buf_size;
-       mb->type         = RTE_MBUF_PKT;
        mb->ol_flags     = 0;
-       mb->pkt.data     = (char *) mb->buf_addr + RTE_PKTMBUF_HEADROOM;
-       mb->pkt.nb_segs  = 1;
-       mb->pkt.vlan_macip.data = 0;
-       mb->pkt.hash.rss = 0;
+       mb->data_off     = RTE_PKTMBUF_HEADROOM;
+       mb->nb_segs      = 1;
+       mb->tx_offload   = 0;
+       mb->vlan_tci     = 0;
+       mb->hash.rss     = 0;
 }
 
 static void
@@ -614,7 +615,9 @@ init_config(void)
         * Records which Mbuf pool to use by each logical core, if needed.
         */
        for (lc_id = 0; lc_id < nb_lcores; lc_id++) {
-               mbp = mbuf_pool_find(rte_lcore_to_socket_id(lc_id));
+               mbp = mbuf_pool_find(
+                       rte_lcore_to_socket_id(fwd_lcores_cpuids[lc_id]));
+
                if (mbp == NULL)
                        mbp = mbuf_pool_find(0);
                fwd_lcores[lc_id]->mbp = mbp;
@@ -625,6 +628,33 @@ init_config(void)
                rte_exit(EXIT_FAILURE, "FAIL from init_fwd_streams()\n");
 }
 
+
+void
+reconfig(portid_t new_port_id, unsigned socket_id)
+{
+       struct rte_port *port;
+
+       /* Reconfiguration of Ethernet ports. */
+       ports = rte_realloc(ports,
+                           sizeof(struct rte_port) * nb_ports,
+                           CACHE_LINE_SIZE);
+       if (ports == NULL) {
+               rte_exit(EXIT_FAILURE, "rte_realloc(%d struct rte_port) failed\n",
+                               nb_ports);
+       }
+
+       port = &ports[new_port_id];
+       rte_eth_dev_info_get(new_port_id, &port->dev_info);
+
+       /* set flag to initialize port/queue */
+       port->need_reconfig = 1;
+       port->need_reconfig_queues = 1;
+       port->socket_id = socket_id;
+
+       init_port_config();
+}
+
+
 int
 init_fwd_streams(void)
 {
@@ -1252,7 +1282,7 @@ start_port(portid_t pid)
        portid_t pi;
        queueid_t qi;
        struct rte_port *port;
-       uint8_t *mac_addr;
+       struct ether_addr mac_addr;
 
        if (test_done == 0) {
                printf("Please stop forwarding first\n");
@@ -1380,10 +1410,11 @@ start_port(portid_t pid)
                        RTE_PORT_HANDLING, RTE_PORT_STARTED) == 0)
                        printf("Port %d can not be set into started\n", pi);
 
-               mac_addr = port->eth_addr.addr_bytes;
+               rte_eth_macaddr_get(pi, &mac_addr);
                printf("Port %d: %02X:%02X:%02X:%02X:%02X:%02X\n", pi,
-                      mac_addr[0], mac_addr[1], mac_addr[2],
-                      mac_addr[3], mac_addr[4], mac_addr[5]);
+                               mac_addr.addr_bytes[0], mac_addr.addr_bytes[1],
+                               mac_addr.addr_bytes[2], mac_addr.addr_bytes[3],
+                               mac_addr.addr_bytes[4], mac_addr.addr_bytes[5]);
 
                /* at least one port started, need checking link status */
                need_check_link_status = 1;
@@ -1486,6 +1517,18 @@ all_ports_stopped(void)
        return 1;
 }
 
+int
+port_is_started(portid_t port_id)
+{
+       if (port_id_is_invalid(port_id))
+               return -1;
+
+       if (ports[port_id].port_status != RTE_PORT_STARTED)
+               return 0;
+
+       return 1;
+}
+
 void
 pmd_test_exit(void)
 {
@@ -1812,10 +1855,6 @@ init_port_dcb_config(portid_t pid,struct dcb_config *dcb_conf)
        return 0;
 }
 
-#ifdef RTE_EXEC_ENV_BAREMETAL
-#define main _main
-#endif
-
 int
 main(int argc, char** argv)
 {
@@ -1826,17 +1865,9 @@ main(int argc, char** argv)
        if (diag < 0)
                rte_panic("Cannot init EAL\n");
 
-       if (rte_eal_pci_probe())
-               rte_panic("Cannot probe PCI\n");
-
        nb_ports = (portid_t) rte_eth_dev_count();
        if (nb_ports == 0)
-               rte_exit(EXIT_FAILURE, "No probed ethernet devices - "
-                                                       "check that "
-                         "CONFIG_RTE_LIBRTE_IGB_PMD=y and that "
-                         "CONFIG_RTE_LIBRTE_EM_PMD=y and that "
-                         "CONFIG_RTE_LIBRTE_IXGBE_PMD=y in your "
-                         "configuration file\n");
+               rte_exit(EXIT_FAILURE, "No probed ethernet device\n");
 
        set_def_fwd_config();
        if (nb_lcores == 0)