Xinu7/src/cmd/download/vax/eload/src/eread.c

/* eread.c - eread */

#include "../h/eload.h"
#include "../h/deqna.h"
#include "../h/ether.h"

/*------------------------------------------------------------------------
 *  eread - read a single packet from the ethernet
 *------------------------------------------------------------------------
 */
eread(dcmptr, buf, len)
struct	dcmd	*dcmptr;
char	*buf;
int	len;
{
	int	i, j, err;

	while (1) {
	   err = FALSE;
	   erstart(dcmptr, buf, len);		/* start read operation */
	   /* simulate ~2 second timeout (HACK!!) */
	   for (j = 0; j < 9 && !err; j++)
		for (i = 0; i < 30000; i++) {
			if (dcmptr->dc_st1 != DC_INIT) {
				if ( (dcmptr->dc_st1 & DC_LUSE) != DC_ERRU) {
					len = (dcmptr->dc_st1 & DC_HLEN) |
						(dcmptr->dc_st2 & DC_LLEN);
					len += DC_XLEN;
					return(len);
				} else {
					err = TRUE;
					break;
				}
			}
		}
	   estrt();		/* device locked up?	*/
	}
}