diff options
author | raj <raj@FreeBSD.org> | 2008-10-04 13:10:38 +0000 |
---|---|---|
committer | raj <raj@FreeBSD.org> | 2008-10-04 13:10:38 +0000 |
commit | 2a77c29adae965cd014d2d82376d68280e2846a4 (patch) | |
tree | b761593699187a27c02dd46c0d6e88ccedafd035 /sys/boot/uboot/lib/net.c | |
parent | aa0d5826064a4ef4cf0e7827a6b587eebc679f74 (diff) | |
download | FreeBSD-src-2a77c29adae965cd014d2d82376d68280e2846a4.zip FreeBSD-src-2a77c29adae965cd014d2d82376d68280e2846a4.tar.gz |
U-Boot API glue improvements:
- extend ub_dev_read() and ub_dev_recv() so that the actual len and
all error codes can be passed and processed properly; unify behaviour of
these routines
- introduce syscall general error code (API_ESYSC)
Diffstat (limited to 'sys/boot/uboot/lib/net.c')
-rw-r--r-- | sys/boot/uboot/lib/net.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/sys/boot/uboot/lib/net.c b/sys/boot/uboot/lib/net.c index 5902a1b..bef6898 100644 --- a/sys/boot/uboot/lib/net.c +++ b/sys/boot/uboot/lib/net.c @@ -173,35 +173,40 @@ net_get(struct iodesc *desc, void *pkt, size_t len, time_t timeout) struct netif *nif = desc->io_netif; struct uboot_softc *sc = nif->nif_devdata; time_t t; - int length; + int err, rlen; #if defined(NETIF_DEBUG) printf("net_get: pkt %x, len %d, timeout %d\n", pkt, len, timeout); #endif t = getsecs(); do { - length = ub_dev_recv(sc->sc_handle, sc->sc_rxbuf, len); - } while ((length == -1 || length == 0) && - (getsecs() - t < timeout)); + err = ub_dev_recv(sc->sc_handle, sc->sc_rxbuf, len, &rlen); + + if (err != 0) { + printf("net_get: ub_dev_recv() failed, error=%d\n", + err); + rlen = 0; + break; + } + } while ((rlen == -1 || rlen == 0) && (getsecs() - t < timeout)); #if defined(NETIF_DEBUG) - printf("net_get: received len %d (%x)\n", length, length); + printf("net_get: received len %d (%x)\n", rlen, rlen); #endif - if (length > 0) { - memcpy(pkt, sc->sc_rxbuf, MIN(len, length)); - if (length != len) { + if (rlen > 0) { + memcpy(pkt, sc->sc_rxbuf, MIN(len, rlen)); + if (rlen != len) { #if defined(NETIF_DEBUG) - printf("net_get: len %x, length %x\n", len, length); + printf("net_get: len %x, rlen %x\n", len, rlen); #endif } - return (length); + return (rlen); } return (-1); } - static void net_init(struct iodesc *desc, void *machdep_hint) { |