For drivers supporting the LSC event, enable it.
This allows to test LSC event support.

Add the --no-lsc-interrupt parameter to explicitly disable the link status
change interrupt.

Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com>
---
 app/test-pmd/parameters.c |  4 ++++
 app/test-pmd/testpmd.c    | 13 +++++++++++++
 app/test-pmd/testpmd.h    |  1 +
 3 files changed, 18 insertions(+)

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 67d8bf2..89231be 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -196,6 +196,7 @@ usage(char* progname)
                " or total packet length.\n");
        printf("  --disable-link-check: disable check on link status when "
               "starting/stopping ports.\n");
+       printf("  --no-lsc-interrupt: disable link status change interrupt.\n");
 }
 
 #ifdef RTE_LIBRTE_CMDLINE
@@ -561,6 +562,7 @@ launch_args_parse(int argc, char** argv)
                { "no-flush-rx",        0, 0, 0 },
                { "txpkts",                     1, 0, 0 },
                { "disable-link-check",         0, 0, 0 },
+               { "no-lsc-interrupt",           0, 0, 0 },
                { 0, 0, 0, 0 },
        };
 
@@ -978,6 +980,8 @@ launch_args_parse(int argc, char** argv)
                                no_flush_rx = 1;
                        if (!strcmp(lgopts[opt_idx].name, "disable-link-check"))
                                no_link_check = 1;
+                       if (!strcmp(lgopts[opt_idx].name, "no-lsc-interrupt"))
+                               lsc_interrupt = 0;
 
                        break;
                case 'h':
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index f2b67d5..8bd1285 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -263,6 +263,11 @@ uint8_t no_flush_rx = 0; /* flush by default */
 uint8_t no_link_check = 0; /* check by default */
 
 /*
+ * Enable link status change notification
+ */
+uint8_t lsc_interrupt = 1; /* enabled by default */
+
+/*
  * NIC bypass mode configuration options.
  */
 #ifdef RTE_NIC_BYPASS
@@ -1698,6 +1703,9 @@ check_all_ports_link_status(uint32_t port_mask)
                if (all_ports_up == 1 || count == (MAX_CHECK_TIME - 1)) {
                        print_flag = 1;
                }
+
+               if (lsc_interrupt)
+                       break;
        }
 }
 
@@ -1892,6 +1900,11 @@ init_port_config(void)
 #ifdef RTE_NIC_BYPASS
                rte_eth_dev_bypass_init(pid);
 #endif
+
+               if (lsc_interrupt &&
+                   (rte_eth_devices[pid].data->dev_flags &
+                    RTE_ETH_DEV_INTR_LSC))
+                       port->dev_conf.intr_conf.lsc = 1;
        }
 }
 
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index e1e4939..77fa7ee 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -305,6 +305,7 @@ extern uint8_t no_flush_rx; /**<set by "--no-flush-rx" 
parameter */
 extern uint8_t  mp_anon; /**< set by "--mp-anon" parameter */
 extern uint8_t no_link_check; /**<set by "--disable-link-check" parameter */
 extern volatile int test_done; /* stop packet forwarding when set to 1. */
+extern uint8_t lsc_interrupt; /**< disabled by "--no-lsc-interrupt" parameter 
*/
 
 #ifdef RTE_NIC_BYPASS
 extern uint32_t bypass_timeout; /**< Store the NIC bypass watchdog timeout */
-- 
2.1.4

Reply via email to