summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2009-08-24 04:59:09 +0000
committeralfred <alfred@FreeBSD.org>2009-08-24 04:59:09 +0000
commitd60feafc030e3cad292897c52e52a4749eda3578 (patch)
tree89314f393d4d70d9649ce2ee0cfb43d87015a1ec
parent43da066a8e3934ba2dcfec381c7796c701be73b3 (diff)
downloadFreeBSD-src-d60feafc030e3cad292897c52e52a4749eda3578.zip
FreeBSD-src-d60feafc030e3cad292897c52e52a4749eda3578.tar.gz
- FIFO's are always opened separately in read and write
direction even if the actual device is opened for read and write. Fix fflags check so that the UFM and URIO drivers work. Reported by: Krassimir Slavchev Submitted by: hps
-rw-r--r--sys/dev/usb/misc/ufm.c15
-rw-r--r--sys/dev/usb/storage/urio.c3
2 files changed, 4 insertions, 14 deletions
diff --git a/sys/dev/usb/misc/ufm.c b/sys/dev/usb/misc/ufm.c
index c10166a..136182a 100644
--- a/sys/dev/usb/misc/ufm.c
+++ b/sys/dev/usb/misc/ufm.c
@@ -86,11 +86,9 @@ static device_attach_t ufm_attach;
static device_detach_t ufm_detach;
static usb_fifo_ioctl_t ufm_ioctl;
-static usb_fifo_open_t ufm_open;
static struct usb_fifo_methods ufm_fifo_methods = {
.f_ioctl = &ufm_ioctl,
- .f_open = &ufm_open,
.basename[0] = "ufm",
};
@@ -179,15 +177,6 @@ ufm_detach(device_t dev)
}
static int
-ufm_open(struct usb_fifo *dev, int fflags)
-{
- if ((fflags & (FWRITE | FREAD)) != (FWRITE | FREAD)) {
- return (EACCES);
- }
- return (0);
-}
-
-static int
ufm_do_req(struct ufm_softc *sc, uint8_t request,
uint16_t value, uint16_t index, uint8_t *retbuf)
{
@@ -315,6 +304,10 @@ ufm_ioctl(struct usb_fifo *fifo, u_long cmd, void *addr,
struct ufm_softc *sc = usb_fifo_softc(fifo);
int error = 0;
+ if ((fflags & (FWRITE | FREAD)) != (FWRITE | FREAD)) {
+ return (EACCES);
+ }
+
switch (cmd) {
case FM_SET_FREQ:
error = ufm_set_freq(sc, addr);
diff --git a/sys/dev/usb/storage/urio.c b/sys/dev/usb/storage/urio.c
index 6bb2e88..403c4c2 100644
--- a/sys/dev/usb/storage/urio.c
+++ b/sys/dev/usb/storage/urio.c
@@ -390,9 +390,6 @@ urio_open(struct usb_fifo *fifo, int fflags)
{
struct urio_softc *sc = usb_fifo_softc(fifo);
- if ((fflags & (FWRITE | FREAD)) != (FWRITE | FREAD)) {
- return (EACCES);
- }
if (fflags & FREAD) {
/* clear stall first */
mtx_lock(&sc->sc_mtx);
OpenPOWER on IntegriCloud