summaryrefslogtreecommitdiffstats
path: root/sys/boot/uboot/lib/net.c
diff options
context:
space:
mode:
authorraj <raj@FreeBSD.org>2008-10-04 13:10:38 +0000
committerraj <raj@FreeBSD.org>2008-10-04 13:10:38 +0000
commit2a77c29adae965cd014d2d82376d68280e2846a4 (patch)
treeb761593699187a27c02dd46c0d6e88ccedafd035 /sys/boot/uboot/lib/net.c
parentaa0d5826064a4ef4cf0e7827a6b587eebc679f74 (diff)
downloadFreeBSD-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.c27
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)
{
OpenPOWER on IntegriCloud