summaryrefslogtreecommitdiffstats
path: root/sys/dev/firewire/fwmem.c
diff options
context:
space:
mode:
authorsimokawa <simokawa@FreeBSD.org>2003-03-07 02:51:59 +0000
committersimokawa <simokawa@FreeBSD.org>2003-03-07 02:51:59 +0000
commit1b3633143fdb2e192176f97dc5bff972877570e3 (patch)
treebd087a1f67b70f63d44e508f886d7d895242ff31 /sys/dev/firewire/fwmem.c
parentc015426a4191ad0d400bb24d2fd2c1fac1726086 (diff)
downloadFreeBSD-src-1b3633143fdb2e192176f97dc5bff972877570e3.zip
FreeBSD-src-1b3633143fdb2e192176f97dc5bff972877570e3.tar.gz
- improve timeout handling in fwmem.c
- stop processing of TX db if we reaches the end of active db.
Diffstat (limited to 'sys/dev/firewire/fwmem.c')
-rw-r--r--sys/dev/firewire/fwmem.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/sys/dev/firewire/fwmem.c b/sys/dev/firewire/fwmem.c
index 182ea6a..891fc7a 100644
--- a/sys/dev/firewire/fwmem.c
+++ b/sys/dev/firewire/fwmem.c
@@ -304,11 +304,12 @@ fwmem_read (dev_t dev, struct uio *uio, int ioflag)
err = EINVAL;
break;
}
- err = tsleep((caddr_t)xfer, FWPRI, "fwmrq", hz);
- if (err !=0 || xfer->resp != 0
- || xfer->recv.buf == NULL)
+ err = tsleep((caddr_t)xfer, FWPRI, "fwmrq", 0);
+ if (xfer->recv.buf == NULL)
err = EIO;
- else
+ else if (xfer->resp != 0)
+ err = xfer->resp;
+ else if (err == 0)
err = uiomove(xfer->recv.buf
+ xfer->recv.off + 4*3, 4, uio);
} else {
@@ -320,11 +321,12 @@ fwmem_read (dev_t dev, struct uio *uio, int ioflag)
err = EINVAL;
break;
}
- err = tsleep((caddr_t)xfer, FWPRI, "fwmrb", hz);
- if (err != 0 || xfer->resp != 0
- || xfer->recv.buf == NULL)
+ err = tsleep((caddr_t)xfer, FWPRI, "fwmrb", 0);
+ if (xfer->recv.buf == NULL)
err = EIO;
- else
+ else if (xfer->resp != 0)
+ err = xfer->resp;
+ else if (err == 0)
err = uiomove(xfer->recv.buf
+ xfer->recv.off + 4*4, len, uio);
}
@@ -372,9 +374,9 @@ fwmem_write (dev_t dev, struct uio *uio, int ioflag)
err = EINVAL;
break;
}
- err = tsleep((caddr_t)xfer, FWPRI, "fwmwq", hz);
- if (err !=0 || xfer->resp != 0)
- err = EIO;
+ err = tsleep((caddr_t)xfer, FWPRI, "fwmwq", 0);
+ if (xfer->resp != 0)
+ err = xfer->resp;
} else {
if (len > MAXLEN)
len = MAXLEN;
@@ -387,9 +389,9 @@ fwmem_write (dev_t dev, struct uio *uio, int ioflag)
err = EINVAL;
break;
}
- err = tsleep((caddr_t)xfer, FWPRI, "fwmwb", hz);
- if (err != 0 || xfer->resp != 0)
- err = EIO;
+ err = tsleep((caddr_t)xfer, FWPRI, "fwmwb", 0);
+ if (xfer->resp != 0)
+ err = xfer->resp;
}
fw_xfer_free(xfer);
}
OpenPOWER on IntegriCloud