[rtems commit] bsp/mpc55xx: Move work from ISR to task context

Sebastian Huber sebh at rtems.org
Tue Aug 21 09:02:48 UTC 2012


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

Author:    Christian Mauderer <christian.mauderer at embedded-brains.de>
Date:      Thu Aug  9 15:47:08 2012 +0200

bsp/mpc55xx: Move work from ISR to task context

---

 .../libbsp/powerpc/mpc55xxevb/network/smsc9218i.c  |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c
index 0dbfa59..cf5072a 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c
@@ -583,8 +583,6 @@ static void smsc9218i_receive_dma_done(
   ASSERT_SC(sc);
 
   jc->done = jc->produce;
-
-  smsc9218i_setup_receive_dma(e, regs, jc);
 }
 
 static void smsc9218i_transmit_dma_done(
@@ -655,11 +653,11 @@ static void smsc9218i_interrupt_handler(void *arg)
 
   /* Check receive interrupts */
   if ((int_sts & SMSC9218I_INT_RSFL) != 0) {
-    smsc9218i_receive_job_control *jc = &smsc_rx_jc;
-
     int_en &= ~SMSC9218I_INT_RSFL;
     ++e->receive_interrupts;
-    smsc9218i_setup_receive_dma(e, regs, jc);
+
+    sc = rtems_event_send(e->receive_task, SMSC9218I_EVENT_RX);
+    ASSERT_SC(sc);
   }
 
   /* Check PHY interrupts */
@@ -878,13 +876,17 @@ static void smsc9218i_receive_task(void *arg)
     rtems_event_set events;
 
     sc = rtems_bsdnet_event_receive(
-      SMSC9218I_EVENT_DMA | SMSC9218I_EVENT_PHY,
+      SMSC9218I_EVENT_DMA | SMSC9218I_EVENT_PHY | SMSC9218I_EVENT_RX,
       RTEMS_EVENT_ANY | RTEMS_WAIT,
       RTEMS_NO_TIMEOUT,
       &events
     );
     ASSERT_SC(sc);
 
+    if ((events & (SMSC9218I_EVENT_RX | SMSC9218I_EVENT_DMA)) != 0) {
+      smsc9218i_setup_receive_dma(e, regs, jc);
+    }
+
     if ((events & SMSC9218I_EVENT_DMA) != 0) {
       smsc9218i_ether_input(e, regs, jc);
     }




More information about the vc mailing list