[rtems commit] bsp/mpc55xx: Implement network interface off

Sebastian Huber sebh at rtems.org
Wed Jul 18 07:44:02 UTC 2012


Module:    rtems
Branch:    master
Commit:    356c9285e3303371af78bf7fdabebccf713d238f
Changeset: http://git.rtems.org/rtems/commit/?id=356c9285e3303371af78bf7fdabebccf713d238f

Author:    Christian Mauderer <Christian.Mauderer at embedded-brains.de>
Date:      Tue Apr  3 14:35:55 2012 +0200

bsp/mpc55xx: Implement network interface off

---

 .../libbsp/powerpc/mpc55xxevb/network/smsc9218i.c  |   32 ++++++++++++++++++--
 1 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c
index 3ec27b5..c32486c 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c
@@ -1788,6 +1788,33 @@ static void smsc9218i_interface_stats(smsc9218i_driver_entry *e)
   printf("frame compact count:       %u\n", jc->frame_compact_count);
 }
 
+static void smsc9218i_interface_off(struct ifnet *ifp)
+{
+  smsc9218i_driver_entry *e = (smsc9218i_driver_entry *) ifp->if_softc;
+  rtems_status_code sc = RTEMS_SUCCESSFUL;
+  rtems_interrupt_level level;
+  union SIU_DIRER_tag direr = MPC55XX_ZERO_FLAGS;
+
+  /* remove interrupt handler */
+  sc = rtems_interrupt_handler_remove(
+    MPC55XX_IRQ_SIU_EXTERNAL_0,
+    smsc9218i_interrupt_handler,
+    e
+  );
+  ASSERT_SC(sc);
+
+  mpc55xx_edma_release_channel(
+    &e->edma_receive
+  );
+
+  mpc55xx_edma_release_channel(
+    &e->edma_transmit
+  );
+
+  /* set in reset state */
+  smsc9218i_reset_signal(false);
+}
+
 static int smsc9218i_interface_ioctl(
   struct ifnet *ifp,
   ioctl_command_t command,
@@ -1808,12 +1835,11 @@ static int smsc9218i_interface_ioctl(
       ether_ioctl(ifp, command, data);
       break;
     case SIOCSIFFLAGS:
-      if (ifp->if_flags & IFF_RUNNING) {
-        /* TODO: off */
-      }
       if (ifp->if_flags & IFF_UP) {
         ifp->if_flags |= IFF_RUNNING;
         /* TODO: init */
+      } else {
+    	smsc9218i_interface_off(ifp);
       }
       break;
     case SIO_RTEMS_SHOW_STATS:




More information about the vc mailing list