testpmd: queue start and stop
[dpdk.git] / app / test-pmd / config.c
index 66fcd74..606e34a 100644 (file)
@@ -252,6 +252,7 @@ void
 port_infos_display(portid_t port_id)
 {
        struct rte_port *port;
+       struct ether_addr mac_addr;
        struct rte_eth_link link;
        int vlan_offload;
        struct rte_mempool * mp;
@@ -265,7 +266,8 @@ port_infos_display(portid_t port_id)
        rte_eth_link_get_nowait(port_id, &link);
        printf("\n%s Infos for port %-2d %s\n",
               info_border, port_id, info_border);
-       print_ethaddr("MAC address: ", &port->eth_addr);
+       rte_eth_macaddr_get(port_id, &mac_addr);
+       print_ethaddr("MAC address: ", &mac_addr);
        printf("\nConnect to socket: %u", port->socket_id);
 
        if (port_numa[port_id] != NUMA_NO_CONFIG) {
@@ -309,7 +311,7 @@ port_infos_display(portid_t port_id)
        }
 }
 
-static int
+int
 port_id_is_invalid(portid_t port_id)
 {
        if (port_id < nb_ports)
@@ -503,10 +505,23 @@ port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t reg_v)
        display_port_reg_value(port_id, reg_off, reg_v);
 }
 
+void
+port_mtu_set(portid_t port_id, uint16_t mtu)
+{
+       int diag;
+
+       if (port_id_is_invalid(port_id))
+               return;
+       diag = rte_eth_dev_set_mtu(port_id, mtu);
+       if (diag == 0)
+               return;
+       printf("Set MTU failed. diag=%d\n", diag);
+}
+
 /*
  * RX/TX ring descriptors display functions.
  */
-static int
+int
 rx_queue_id_is_invalid(queueid_t rxq_id)
 {
        if (rxq_id < nb_rxq)
@@ -515,7 +530,7 @@ rx_queue_id_is_invalid(queueid_t rxq_id)
        return 1;
 }
 
-static int
+int
 tx_queue_id_is_invalid(queueid_t txq_id)
 {
        if (txq_id < nb_txq)
@@ -550,7 +565,7 @@ ring_dma_zone_lookup(const char *ring_name, uint8_t port_id, uint16_t q_id)
        char mz_name[RTE_MEMZONE_NAMESIZE];
        const struct rte_memzone *mz;
 
-       rte_snprintf(mz_name, sizeof(mz_name), "%s_%s_%d_%d",
+       snprintf(mz_name, sizeof(mz_name), "%s_%s_%d_%d",
                 ports[port_id].dev_info.driver_name, ring_name, port_id, q_id);
        mz = rte_memzone_lookup(mz_name);
        if (mz == NULL)
@@ -568,23 +583,78 @@ union igb_ring_dword {
        } words;
 };
 
-struct igb_ring_desc {
+struct igb_ring_desc_32_bytes {
        union igb_ring_dword lo_dword;
        union igb_ring_dword hi_dword;
+       union igb_ring_dword resv1;
+       union igb_ring_dword resv2;
 };
 
+struct igb_ring_desc_16_bytes {
+       union igb_ring_dword lo_dword;
+       union igb_ring_dword hi_dword;
+};
+
+static void
+ring_rxd_display_dword(union igb_ring_dword dword)
+{
+       printf("    0x%08X - 0x%08X\n", (unsigned)dword.words.lo,
+                                       (unsigned)dword.words.hi);
+}
+
+static void
+ring_rx_descriptor_display(const struct rte_memzone *ring_mz,
+#ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC
+                          uint8_t port_id,
+#else
+                          __rte_unused uint8_t port_id,
+#endif
+                          uint16_t desc_id)
+{
+       struct igb_ring_desc_16_bytes *ring =
+               (struct igb_ring_desc_16_bytes *)ring_mz->addr;
+#ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC
+       struct rte_eth_dev_info dev_info;
+
+       memset(&dev_info, 0, sizeof(dev_info));
+       rte_eth_dev_info_get(port_id, &dev_info);
+       if (strstr(dev_info.driver_name, "i40e") != NULL) {
+               /* 32 bytes RX descriptor, i40e only */
+               struct igb_ring_desc_32_bytes *ring =
+                       (struct igb_ring_desc_32_bytes *)ring_mz->addr;
+
+               ring_rxd_display_dword(rte_le_to_cpu_64(
+                               ring[desc_id].lo_dword));
+               ring_rxd_display_dword(rte_le_to_cpu_64(
+                               ring[desc_id].hi_dword));
+               ring_rxd_display_dword(rte_le_to_cpu_64(
+                               ring[desc_id].resv1));
+               ring_rxd_display_dword(rte_le_to_cpu_64(
+                               ring[desc_id].resv2));
+               return;
+       }
+#endif
+       /* 16 bytes RX descriptor */
+       ring_rxd_display_dword(rte_le_to_cpu_64(
+                       ring[desc_id].lo_dword));
+       ring_rxd_display_dword(rte_le_to_cpu_64(
+                       ring[desc_id].hi_dword));
+}
+
 static void
-ring_descriptor_display(const struct rte_memzone *ring_mz, uint16_t desc_id)
+ring_tx_descriptor_display(const struct rte_memzone *ring_mz, uint16_t desc_id)
 {
-       struct igb_ring_desc *ring;
-       struct igb_ring_desc rd;
+       struct igb_ring_desc_16_bytes *ring;
+       struct igb_ring_desc_16_bytes txd;
 
-       ring = (struct igb_ring_desc *) ring_mz->addr;
-       rd.lo_dword = rte_le_to_cpu_64(ring[desc_id].lo_dword);
-       rd.hi_dword = rte_le_to_cpu_64(ring[desc_id].hi_dword);
+       ring = (struct igb_ring_desc_16_bytes *)ring_mz->addr;
+       txd.lo_dword = rte_le_to_cpu_64(ring[desc_id].lo_dword);
+       txd.hi_dword = rte_le_to_cpu_64(ring[desc_id].hi_dword);
        printf("    0x%08X - 0x%08X / 0x%08X - 0x%08X\n",
-               (unsigned)rd.lo_dword.words.lo, (unsigned)rd.lo_dword.words.hi,
-               (unsigned)rd.hi_dword.words.lo, (unsigned)rd.hi_dword.words.hi);
+                       (unsigned)txd.lo_dword.words.lo,
+                       (unsigned)txd.lo_dword.words.hi,
+                       (unsigned)txd.hi_dword.words.lo,
+                       (unsigned)txd.hi_dword.words.hi);
 }
 
 void
@@ -601,7 +671,7 @@ rx_ring_desc_display(portid_t port_id, queueid_t rxq_id, uint16_t rxd_id)
        rx_mz = ring_dma_zone_lookup("rx_ring", port_id, rxq_id);
        if (rx_mz == NULL)
                return;
-       ring_descriptor_display(rx_mz, rxd_id);
+       ring_rx_descriptor_display(rx_mz, port_id, rxd_id);
 }
 
 void
@@ -618,7 +688,7 @@ tx_ring_desc_display(portid_t port_id, queueid_t txq_id, uint16_t txd_id)
        tx_mz = ring_dma_zone_lookup("tx_ring", port_id, txq_id);
        if (tx_mz == NULL)
                return;
-       ring_descriptor_display(tx_mz, txd_id);
+       ring_tx_descriptor_display(tx_mz, txd_id);
 }
 
 void