- 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
This commit is contained in:
alfred 2009-08-24 04:59:09 +00:00
parent 43da066a8e
commit d60feafc03
2 changed files with 4 additions and 14 deletions

View File

@ -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",
};
@ -178,15 +176,6 @@ ufm_detach(device_t dev)
return (0);
}
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);

View File

@ -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);