net/sfc: implement Rx queue start and stop operations
[dpdk.git] / drivers / net / sfc / sfc.c
index 8d18def..4245fb8 100644 (file)
@@ -36,6 +36,8 @@
 
 #include "sfc.h"
 #include "sfc_log.h"
+#include "sfc_ev.h"
+#include "sfc_rx.h"
 
 
 int
@@ -261,10 +263,31 @@ sfc_start(struct sfc_adapter *sa)
        if (rc != 0)
                goto fail_intr_start;
 
+       rc = sfc_ev_start(sa);
+       if (rc != 0)
+               goto fail_ev_start;
+
+       rc = sfc_port_start(sa);
+       if (rc != 0)
+               goto fail_port_start;
+
+       rc = sfc_rx_start(sa);
+       if (rc != 0)
+               goto fail_rx_start;
+
        sa->state = SFC_ADAPTER_STARTED;
        sfc_log_init(sa, "done");
        return 0;
 
+fail_rx_start:
+       sfc_port_stop(sa);
+
+fail_port_start:
+       sfc_ev_stop(sa);
+
+fail_ev_start:
+       sfc_intr_stop(sa);
+
 fail_intr_start:
        efx_nic_fini(sa->nic);
 
@@ -297,6 +320,9 @@ sfc_stop(struct sfc_adapter *sa)
 
        sa->state = SFC_ADAPTER_STOPPING;
 
+       sfc_rx_stop(sa);
+       sfc_port_stop(sa);
+       sfc_ev_stop(sa);
        sfc_intr_stop(sa);
        efx_nic_fini(sa->nic);
 
@@ -324,10 +350,31 @@ sfc_configure(struct sfc_adapter *sa)
        if (rc != 0)
                goto fail_intr_init;
 
+       rc = sfc_ev_init(sa);
+       if (rc != 0)
+               goto fail_ev_init;
+
+       rc = sfc_port_init(sa);
+       if (rc != 0)
+               goto fail_port_init;
+
+       rc = sfc_rx_init(sa);
+       if (rc != 0)
+               goto fail_rx_init;
+
        sa->state = SFC_ADAPTER_CONFIGURED;
        sfc_log_init(sa, "done");
        return 0;
 
+fail_rx_init:
+       sfc_port_fini(sa);
+
+fail_port_init:
+       sfc_ev_fini(sa);
+
+fail_ev_init:
+       sfc_intr_fini(sa);
+
 fail_intr_init:
 fail_check_conf:
        sa->state = SFC_ADAPTER_INITIALIZED;
@@ -345,6 +392,9 @@ sfc_close(struct sfc_adapter *sa)
        SFC_ASSERT(sa->state == SFC_ADAPTER_CONFIGURED);
        sa->state = SFC_ADAPTER_CLOSING;
 
+       sfc_rx_fini(sa);
+       sfc_port_fini(sa);
+       sfc_ev_fini(sa);
        sfc_intr_fini(sa);
 
        sa->state = SFC_ADAPTER_INITIALIZED;