summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorChristian Mauderer <christian.mauderer@embedded-brains.de>2012-08-09 15:47:08 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-08-21 11:06:23 +0200
commit6f89813f42af1eb8f8c8d33ff729630c41f1e4a9 (patch)
tree2790025eba69ad89387cd6db2a21c562e1bc42b2 /c
parentbsp/gen83xx: Add br_uid BSP variant (diff)
downloadrtems-6f89813f42af1eb8f8c8d33ff729630c41f1e4a9.tar.bz2
bsp/mpc55xx: Move work from ISR to task context
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c14
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 0dbfa59843..cf5072a5a6 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);
}