From 6f89813f42af1eb8f8c8d33ff729630c41f1e4a9 Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Thu, 9 Aug 2012 15:47:08 +0200 Subject: bsp/mpc55xx: Move work from ISR to task context --- c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'c') 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); } -- cgit v1.2.3