diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-09-10 12:16:39 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-09-10 12:16:39 +0000 |
commit | eff217e095ea1f77e0549a32e170e43b4e637eee (patch) | |
tree | 0343667169379aaf282f0c183a4de94411845bfe /c/src/lib/libbsp/i386/pc386/network/network.c | |
parent | Added section on format of the configuration space file. (diff) | |
download | rtems-eff217e095ea1f77e0549a32e170e43b4e637eee.tar.bz2 |
Patch from Emmanuel Raguet <raguet@crf.canon.fr>:
After some good comments from Eric Norum [thanks, Eric !],
I have added some modifications to my previous driver patch :
- wait for transmitter ready before sending a packet,
- new delay management in case of ring-overwritting.
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/i386/pc386/network/network.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/c/src/lib/libbsp/i386/pc386/network/network.c b/c/src/lib/libbsp/i386/pc386/network/network.c index 1f937bc009..ab12f1c0e7 100644 --- a/c/src/lib/libbsp/i386/pc386/network/network.c +++ b/c/src/lib/libbsp/i386/pc386/network/network.c @@ -129,7 +129,7 @@ static struct wd_softc wd_softc[NWDDRIVER]; static rtems_isr wd8003Enet_interrupt_handler (rtems_vector_number v) { - unsigned int tport, nowTicks, bootTicks; + unsigned int tport; unsigned char status, status2; tport = wd_softc[0].port ; @@ -146,9 +146,7 @@ wd8003Enet_interrupt_handler (rtems_vector_number v) if (status & MSK_OVW){ outport_byte(tport+CMDR, MSK_STP + MSK_RD2); /* stop 8390 */ - rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &bootTicks ); - while(nowTicks < bootTicks+loopc) /* 2ms delay */ - rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &nowTicks ); + Wait_X_ms(2); outport_byte(tport+RBCR0, 0); /* clear byte count */ outport_byte(tport+RBCR1, 0); inport_byte(tport+ISR, status2); @@ -361,11 +359,16 @@ sendpacket (struct ifnet *ifp, struct mbuf *m) struct wd_softc *dp = ifp->if_softc; struct mbuf *n; unsigned int len, tport; - char *shp; + char *shp, txReady; tport = dp->port; - + /* + * Waiting for Transmitter ready + */ + inport_byte(tport+CMDR, txReady); + while(txReady & MSK_TXP) + inport_byte(tport+CMDR, txReady); len = 0; shp = dp->base + (SHAPAGE * OUTPAGE); @@ -639,10 +642,6 @@ rtems_wd_driver_attach (struct rtems_bsdnet_ifconfig *config) if (ifp->if_snd.ifq_maxlen == 0) ifp->if_snd.ifq_maxlen = ifqmaxlen; - /* calibrate a delay loop for 2 milliseconds */ - rtems_clock_get(RTEMS_CLOCK_GET_TICKS_PER_SECOND, &loopc ); - loopc /= 500; - /* * init some variables */ |