add prefix to cache line macros
[dpdk.git] / app / test-pmd / testpmd.c
index 546d429..8c69756 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
@@ -443,7 +444,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
        mbp_ctor_arg.seg_buf_size = (uint16_t) (RTE_PKTMBUF_HEADROOM +
                                                mbuf_seg_size);
        mb_ctor_arg.seg_buf_offset =
-               (uint16_t) CACHE_LINE_ROUNDUP(sizeof(struct rte_mbuf));
+               (uint16_t) RTE_CACHE_LINE_ROUNDUP(sizeof(struct rte_mbuf));
        mb_ctor_arg.seg_buf_size = mbp_ctor_arg.seg_buf_size;
        mb_size = mb_ctor_arg.seg_buf_offset + mb_ctor_arg.seg_buf_size;
        mbuf_poolname_build(socket_id, pool_name, sizeof(pool_name));
@@ -519,7 +520,7 @@ init_config(void)
        /* Configuration of logical cores. */
        fwd_lcores = rte_zmalloc("testpmd: fwd_lcores",
                                sizeof(struct fwd_lcore *) * nb_lcores,
-                               CACHE_LINE_SIZE);
+                               RTE_CACHE_LINE_SIZE);
        if (fwd_lcores == NULL) {
                rte_exit(EXIT_FAILURE, "rte_zmalloc(%d (struct fwd_lcore *)) "
                                                        "failed\n", nb_lcores);
@@ -527,7 +528,7 @@ init_config(void)
        for (lc_id = 0; lc_id < nb_lcores; lc_id++) {
                fwd_lcores[lc_id] = rte_zmalloc("testpmd: struct fwd_lcore",
                                               sizeof(struct fwd_lcore),
-                                              CACHE_LINE_SIZE);
+                                              RTE_CACHE_LINE_SIZE);
                if (fwd_lcores[lc_id] == NULL) {
                        rte_exit(EXIT_FAILURE, "rte_zmalloc(struct fwd_lcore) "
                                                                "failed\n");
@@ -565,7 +566,7 @@ init_config(void)
        /* Configuration of Ethernet ports. */
        ports = rte_zmalloc("testpmd: ports",
                            sizeof(struct rte_port) * nb_ports,
-                           CACHE_LINE_SIZE);
+                           RTE_CACHE_LINE_SIZE);
        if (ports == NULL) {
                rte_exit(EXIT_FAILURE, "rte_zmalloc(%d struct rte_port) "
                                                        "failed\n", nb_ports);
@@ -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,
+                           RTE_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)
 {
@@ -684,14 +714,14 @@ init_fwd_streams(void)
        /* init new */
        nb_fwd_streams = nb_fwd_streams_new;
        fwd_streams = rte_zmalloc("testpmd: fwd_streams",
-               sizeof(struct fwd_stream *) * nb_fwd_streams, CACHE_LINE_SIZE);
+               sizeof(struct fwd_stream *) * nb_fwd_streams, RTE_CACHE_LINE_SIZE);
        if (fwd_streams == NULL)
                rte_exit(EXIT_FAILURE, "rte_zmalloc(%d (struct fwd_stream *)) "
                                                "failed\n", nb_fwd_streams);
 
        for (sm_id = 0; sm_id < nb_fwd_streams; sm_id++) {
                fwd_streams[sm_id] = rte_zmalloc("testpmd: struct fwd_stream",
-                               sizeof(struct fwd_stream), CACHE_LINE_SIZE);
+                               sizeof(struct fwd_stream), RTE_CACHE_LINE_SIZE);
                if (fwd_streams[sm_id] == NULL)
                        rte_exit(EXIT_FAILURE, "rte_zmalloc(struct fwd_stream)"
                                                                " failed\n");
@@ -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)