summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/pc386/network/network.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-09-10 12:16:39 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-09-10 12:16:39 +0000
commiteff217e095ea1f77e0549a32e170e43b4e637eee (patch)
tree0343667169379aaf282f0c183a4de94411845bfe /c/src/lib/libbsp/i386/pc386/network/network.c
parentAdded section on format of the configuration space file. (diff)
downloadrtems-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.c19
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
*/