On Thu, Oct 27, 2022 at 01:08:57PM +0000, Klemens Nanni wrote:
> @@ -1040,6 +1041,9 @@ ad1848_open(void *addr, int flags)
>
> DPRINTF(("ad1848_open: sc=%p\n", sc));
>
> + if ((flags & (FWRITE | FREAD)) && sc->mode != 2)
> + return ENXIO;
> +
> sc->sc_pintr = sc->sc_parg = NULL;
> sc->sc_rintr = sc->sc_rarg = NULL;
>
afaiu, the correct condition for full-duplex check is:
if ((flags & (FWRITE | FREAD)) == (FWRITE | FREAD))
...
(both FWRITE and FREAD set)
> @@ -982,6 +980,15 @@ essattach(struct ess_softc *sc)
> * Various routines to interface to higher level audio driver
> */
>
> +int
> +ess_1788_open(void *addr, int flags)
> +{
> + if (flags & (FWRITE | FREAD))
> + return ENXIO;
> +
> + return ess_open(addr, flags);
> +}
> +
> int
> ess_open(void *addr, int flags)
> {
> @@ -2059,18 +2066,6 @@ ess_round_buffersize(void *addr, int direction, size_t
> size)
same here.
> @@ -307,6 +305,9 @@ gusopen(void *addr, int flags)
>
> DPRINTF(("gusopen() called\n"));
>
> + if ((flags & (FWRITE | FREAD)) && sc->sc_recdrq == sc->sc_drq)
> + return ENXIO;
> +
> if (sc->sc_flags & GUS_OPEN)
> return EBUSY;
>
ditto
> @@ -2132,6 +2126,8 @@ sbdsp_midi_open(void *addr, int flags, void
> (*iintr)(void *, int),
>
> DPRINTF(("sbdsp_midi_open: sc=%p\n", sc));
>
> + if ((flags & (FWRITE | FREAD)) && !sc->sc_fullduplex)
> + return ENXIO;
ditto