spl->critical section conversion.
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 10 Jun 2005 23:07:02 +0000 (23:07 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 10 Jun 2005 23:07:02 +0000 (23:07 +0000)
12 files changed:
sys/dev/sound/isa/gusc.c
sys/dev/sound/isa/mss.c
sys/dev/sound/isa/sbc.c
sys/dev/sound/pci/es137x.c
sys/dev/sound/pci/maestro.c
sys/dev/sound/pci/solo.c
sys/dev/sound/pcm/channel.c
sys/dev/sound/pcm/dsp.c
sys/dev/sound/pcm/mixer.c
sys/dev/sound/pcm/sndstat.c
sys/dev/sound/pcm/sound.h
sys/dev/sound/usb/uaudio.c

index d3c2d4c..b638bb3 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/isa/gusc.c,v 1.5.2.6 2002/04/22 15:49:30 cg Exp $
- * $DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.4 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.5 2005/06/10 23:06:58 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -48,7 +48,7 @@
 #include <alpha/isa/isavar.h>
 #endif
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.4 2005/05/24 20:59:04 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/gusc.c,v 1.5 2005/06/10 23:06:58 dillon Exp $");
 
 #define LOGICALID_NOPNP 0
 #define LOGICALID_PCM   0x0000561e
@@ -182,7 +182,7 @@ gusisa_probe(device_t dev)
 {
        device_t child;
        struct resource *res, *res2;
-       int base, rid, rid2, s, flags;
+       int base, rid, rid2, flags;
        unsigned char val;
 
        base = isa_get_port(dev);
@@ -209,7 +209,7 @@ gusisa_probe(device_t dev)
        port_wr(res, 5, 1);
        DELAY(30 * 1000);
 
-       s = splhigh();
+       crit_enter();
 
        /* Write to DRAM.  */
 
@@ -231,7 +231,7 @@ gusisa_probe(device_t dev)
        port_wr(res, 4, 0);             /* High addr */
        val = port_rd(res, 7);          /* DRAM */
 
-       splx(s);
+       crit_exit();
 
        if (val != 0x55)
                goto fail;
@@ -243,10 +243,10 @@ gusisa_probe(device_t dev)
        if (res2 == NULL)
                goto fail;
 
-       s = splhigh();
+       crit_enter();
        port_wr(res2, 0x0f, 0x20);
        val = port_rd(res2, 0x0f);
-       splx(s);
+       crit_exit();
 
        if (val == 0xff || (val & 0x06) == 0)
                val = 0;
index d82d748..257023e 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/isa/mss.c,v 1.48.2.11 2002/12/24 21:17:41 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/mss.c,v 1.4 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/isa/mss.c,v 1.5 2005/06/10 23:06:58 dillon Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/mss.c,v 1.4 2005/05/24 20:59:04 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/mss.c,v 1.5 2005/06/10 23:06:58 dillon Exp $");
 
 /* board-specific include files */
 #include <dev/sound/isa/mss.h>
@@ -631,9 +631,8 @@ gusmax_setup(struct mss_info *mss, device_t dev, struct resource *alt)
        };
        device_t parent = device_get_parent(dev);
        unsigned char irqctl, dmactl;
-       int s;
 
-       s = splhigh();
+       crit_enter();
 
        port_wr(alt, 0x0f, 0x05);
        port_wr(alt, 0x00, 0x0c);
@@ -666,7 +665,7 @@ gusmax_setup(struct mss_info *mss, device_t dev, struct resource *alt)
        port_wr(alt, 0x00, 0x0c);
        port_wr(mss->conf_base, 2, 0);
 
-       splx(s);
+       crit_exit();
 }
 
 static int
index 034c685..0348e17 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/isa/sbc.c,v 1.19.2.12 2002/12/24 21:17:42 semenu Exp $
- * $DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.3 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.4 2005/06/10 23:06:58 dillon Exp $
  */
 
 #include <dev/sound/chip.h>
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/isa/sb.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.3 2005/05/24 20:59:04 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/isa/sbc.c,v 1.4 2005/06/10 23:06:58 dillon Exp $");
 
 #define IO_MAX 3
 #define IRQ_MAX        1
@@ -185,14 +185,12 @@ sb_cmd(struct resource *io, u_char val)
 static void
 sb_setmixer(struct resource *io, u_int port, u_int value)
 {
-       u_long   flags;
-
-       flags = spltty();
+       crit_enter();
        sb_wr(io, SB_MIX_ADDR, (u_char) (port & 0xff)); /* Select register */
        DELAY(10);
        sb_wr(io, SB_MIX_DATA, (u_char) (value & 0xff));
        DELAY(10);
-       splx(flags);
+       crit_exit();
 }
 
 static u_int
index cfad17c..90e56ee 100644 (file)
@@ -39,7 +39,7 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pci/es137x.c,v 1.13.2.10 2002/05/07 17:02:25 greid Exp $
- * $DragonFly: src/sys/dev/sound/pci/es137x.c,v 1.4 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pci/es137x.c,v 1.5 2005/06/10 23:06:59 dillon Exp $
  */
 
 /*
@@ -62,7 +62,7 @@
 
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/es137x.c,v 1.4 2005/05/24 20:59:04 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/es137x.c,v 1.5 2005/06/10 23:06:59 dillon Exp $");
 
 static int debug = 0;
 SYSCTL_INT(_debug, OID_AUTO, es_debug, CTLFLAG_RW, &debug, 0, "");
@@ -555,7 +555,6 @@ es1371_init(struct es_info *es, device_t dev)
 static int
 es1371_wrcd(kobj_t obj, void *s, int addr, u_int32_t data)
 {
-       int sl;
        unsigned t, x;
        struct es_info *es = (struct es_info*)s;
 
@@ -564,7 +563,7 @@ es1371_wrcd(kobj_t obj, void *s, int addr, u_int32_t data)
        for (t = 0; t < 0x1000; t++)
                if (!(bus_space_read_4(es->st, es->sh,(ES1371_REG_CODEC & CODEC_WIP))))
                        break;
-       sl = spltty();
+       crit_enter();
        /* save the current state for later */
        x = bus_space_read_4(es->st, es->sh, ES1371_REG_SMPRATE);
        /* enable SRC state data in SRC mux */
@@ -591,7 +590,7 @@ es1371_wrcd(kobj_t obj, void *s, int addr, u_int32_t data)
                printf("two b_s_w: 0x%lx 0x%x 0x%x\n",
                       rman_get_start(es->reg), ES1371_REG_SMPRATE, x);
        bus_space_write_4(es->st, es->sh, ES1371_REG_SMPRATE, x);
-       splx(sl);
+       crit_exit();
 
        return 0;
 }
@@ -599,7 +598,6 @@ es1371_wrcd(kobj_t obj, void *s, int addr, u_int32_t data)
 static int
 es1371_rdcd(kobj_t obj, void *s, int addr)
 {
-       int sl;
        unsigned t, x = 0;
        struct es_info *es = (struct es_info *)s;
 
@@ -610,7 +608,7 @@ es1371_rdcd(kobj_t obj, void *s, int addr)
                        break;
        if (debug > 0) printf("loop 1 t 0x%x x 0x%x ", t, x);
 
-       sl = spltty();
+       crit_enter();
 
        /* save the current state for later */
        x = bus_space_read_4(es->st, es->sh, ES1371_REG_SMPRATE);
@@ -630,7 +628,7 @@ es1371_rdcd(kobj_t obj, void *s, int addr)
        es1371_wait_src_ready(s);
        bus_space_write_4(es->st, es->sh, ES1371_REG_SMPRATE, x);
 
-       splx(sl);
+       crit_exit();
 
        /* now wait for the stinkin' data (RDY) */
        for (t = 0; t < 0x1000; t++)
index ac3952e..d51aeea 100644 (file)
@@ -25,7 +25,7 @@
  *
  * $Id: maestro.c,v 1.12 2000/09/06 03:32:34 taku Exp $
  * $FreeBSD: src/sys/dev/sound/pci/maestro.c,v 1.2.2.5 2002/04/22 15:49:32 cg Exp $
- * $DragonFly: src/sys/dev/sound/pci/maestro.c,v 1.4 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pci/maestro.c,v 1.5 2005/06/10 23:06:59 dillon Exp $
  */
 
 /*
@@ -53,7 +53,7 @@
 
 #include <dev/sound/pci/maestro_reg.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/maestro.c,v 1.4 2005/05/24 20:59:04 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/maestro.c,v 1.5 2005/06/10 23:06:59 dillon Exp $");
 
 #define inline __inline
 
@@ -1102,9 +1102,9 @@ static int
 agg_suspend(device_t dev)
 {
        struct agg_info *ess = pcm_getdevinfo(dev);
-       int i, x;
+       int i;
 
-       x = spltty();
+       crit_enter();
        wp_stoptimer(ess);
        bus_space_write_2(ess->st, ess->sh, PORT_HOSTINT_CTRL, 0);
 
@@ -1114,7 +1114,7 @@ agg_suspend(device_t dev)
 #if 0  /* XXX - RECORDING */
        aggch_stop_adc(&ess->rch);
 #endif
-       splx(x);
+       crit_exit();
        /* Power down everything except clock. */
        agg_wrcodec(NULL, ess, AC97_REG_POWER, 0xdf00);
        DELAY(20);
@@ -1128,7 +1128,7 @@ agg_suspend(device_t dev)
 static int
 agg_resume(device_t dev)
 {
-       int i, x;
+       int i;
        struct agg_info *ess = pcm_getdevinfo(dev);
 
        agg_power(ess, PPMI_D0);
@@ -1139,7 +1139,7 @@ agg_resume(device_t dev)
                return ENXIO;
        }
 
-       x = spltty();
+       crit_enter();
        for (i = 0; i < ess->playchns; i++)
                if (ess->active & (1 << i))
                        aggch_start_dac(ess->pch + i);
@@ -1151,7 +1151,7 @@ agg_resume(device_t dev)
                set_timer(ess);
                wp_starttimer(ess);
        }
-       splx(x);
+       crit_exit();
        return 0;
 }
 
index ac7ff3d..8853163 100644 (file)
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pci/solo.c,v 1.9.2.8 2002/04/22 15:49:32 cg Exp $
- * $DragonFly: src/sys/dev/sound/pci/solo.c,v 1.4 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pci/solo.c,v 1.5 2005/06/10 23:06:59 dillon Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
@@ -36,7 +36,7 @@
 
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/solo.c,v 1.4 2005/05/24 20:59:04 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pci/solo.c,v 1.5 2005/06/10 23:06:59 dillon Exp $");
 
 #define SOLO_DEFAULT_BUFSZ 16384
 #define ABS(x) (((x) < 0)? -(x) : (x))
@@ -222,29 +222,26 @@ ess_cmd1(struct ess_info *sc, u_char cmd, int val)
 static void
 ess_setmixer(struct ess_info *sc, u_int port, u_int value)
 {
-       u_long   flags;
-
        DEB(printf("ess_setmixer: reg=%x, val=%x\n", port, value);)
-       flags = spltty();
+       crit_enter();
        ess_wr(sc, SB_MIX_ADDR, (u_char) (port & 0xff)); /* Select register */
        DELAY(10);
        ess_wr(sc, SB_MIX_DATA, (u_char) (value & 0xff));
        DELAY(10);
-       splx(flags);
+       crit_exit();
 }
 
 static int
 ess_getmixer(struct ess_info *sc, u_int port)
 {
        int val;
-       u_long flags;
 
-       flags = spltty();
+       crit_enter();
        ess_wr(sc, SB_MIX_ADDR, (u_char) (port & 0xff)); /* Select register */
        DELAY(10);
        val = ess_rd(sc, SB_MIX_DATA);
        DELAY(10);
-       splx(flags);
+       crit_exit();
 
        return val;
 }
@@ -763,16 +760,15 @@ static int
 ess_dmapos(struct ess_info *sc, int ch)
 {
        int p = 0, i = 0, j = 0;
-       u_long flags;
 
        KASSERT(ch == 1 || ch == 2, ("bad ch"));
-       flags = spltty();
+       crit_enter();
        if (ch == 1) {
 
 /*
  * During recording, this register is known to give back
  * garbage if it's not quiescent while being read. That's
- * why we spl, stop the DMA, and try over and over until
+ * why we crit, stop the DMA, and try over and over until
  * adjacent reads are "close", in the right order and not
  * bigger than is otherwise possible.
  */
@@ -790,7 +786,7 @@ ess_dmapos(struct ess_info *sc, int ch)
        }
        else if (ch == 2)
                p = port_rd(sc->io, 0x4, 2);
-       splx(flags);
+       crit_exit();
        return sc->dmasz[ch - 1] - p;
 }
 
index fafeae3..8eb5d09 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pcm/channel.c,v 1.19.2.19 2003/03/11 15:15:41 orion Exp $
- * $DragonFly: src/sys/dev/sound/pcm/channel.c,v 1.6 2003/08/01 17:46:18 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pcm/channel.c,v 1.7 2005/06/10 23:07:01 dillon Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 
 #include "feeder_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/channel.c,v 1.6 2003/08/01 17:46:18 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/channel.c,v 1.7 2005/06/10 23:07:01 dillon Exp $");
 
 #define MIN_CHUNK_SIZE                 256     /* for uiomove etc. */
 #define        DMA_ALIGN_THRESHOLD     4
@@ -141,7 +141,7 @@ chn_sleep(struct pcm_channel *c, char *str, int timeout)
 
 /*
  * chn_dmaupdate() tracks the status of a dma transfer,
- * updating pointers. It must be called at spltty().
+ * updating pointers. It must be called from a critical section.
  */
 
 static unsigned int
@@ -321,7 +321,7 @@ chn_rddump(struct pcm_channel *c, unsigned int cnt)
 
 /*
  * Feed new data from the read buffer. Can be called in the bottom half.
- * Hence must be called at spltty.
+ * Hence must be called from a critical section.
  */
 int
 chn_rdfeed(struct pcm_channel *c)
index 2849b30..dde27a3 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pcm/dsp.c,v 1.15.2.13 2002/08/30 13:53:03 orion Exp $
- * $DragonFly: src/sys/dev/sound/pcm/dsp.c,v 1.7 2004/05/21 01:14:27 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pcm/dsp.c,v 1.8 2005/06/10 23:07:01 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -32,7 +32,7 @@
 
 #include <dev/sound/pcm/sound.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/dsp.c,v 1.7 2004/05/21 01:14:27 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/dsp.c,v 1.8 2005/06/10 23:07:01 dillon Exp $");
 
 #define OLDPCM_IOCTL
 
@@ -179,14 +179,13 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
 {
        struct pcm_channel *rdch, *wrch;
        struct snddev_info *d;
-       intrmask_t s;
        u_int32_t fmt;
        int devtype;
        struct proc *p = td->td_proc;
 
        KKASSERT(p != NULL);
 
-       s = spltty();
+       crit_enter();
        d = dsp_get_info(i_dev);
        devtype = PCMDEV(i_dev);
 
@@ -211,7 +210,7 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
        case SND_DEV_DSPREC:
                fmt = AFMT_U8;
                if (mode & FWRITE) {
-                       splx(s);
+                       crit_exit();
                        return EINVAL;
                }
                break;
@@ -229,14 +228,14 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
        if ((dsp_get_flags(i_dev) & SD_F_SIMPLEX) && (rdch || wrch)) {
                /* simplex device, already open, exit */
                pcm_unlock(d);
-               splx(s);
+               crit_exit();
                return EBUSY;
        }
 
        if (((flags & FREAD) && rdch) || ((flags & FWRITE) && wrch)) {
                /* device already open in one or both directions */
                pcm_unlock(d);
-               splx(s);
+               crit_exit();
                return EBUSY;
        }
 
@@ -250,7 +249,7 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
                if (!rdch) {
                        /* no channel available, exit */
                        pcm_unlock(d);
-                       splx(s);
+                       crit_exit();
                        return EBUSY;
                }
                /* got a channel, already locked for us */
@@ -267,7 +266,7 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
                        }
                                /* exit */
                        pcm_unlock(d);
-                       splx(s);
+                       crit_exit();
                        return EBUSY;
                }
                /* got a channel, already locked for us */
@@ -286,7 +285,7 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
                        if (wrch && (flags & FWRITE))
                                pcm_chnrelease(wrch);
                        pcm_unlock(d);
-                       splx(s);
+                       crit_exit();
                        return ENODEV;
                }
                if (flags & O_NONBLOCK)
@@ -305,7 +304,7 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
                                CHN_UNLOCK(rdch);
                        }
                        pcm_unlock(d);
-                       splx(s);
+                       crit_exit();
                        return ENODEV;
                }
                if (flags & O_NONBLOCK)
@@ -313,7 +312,7 @@ dsp_open(dev_t i_dev, int flags, int mode, struct thread *td)
                pcm_chnref(wrch, 1);
                CHN_UNLOCK(wrch);
        }
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -322,10 +321,9 @@ dsp_close(dev_t i_dev, int flags, int mode, struct thread *td)
 {
        struct pcm_channel *rdch, *wrch;
        struct snddev_info *d;
-       intrmask_t s;
        int exit;
 
-       s = spltty();
+       crit_enter();
        d = dsp_get_info(i_dev);
        pcm_lock(d);
        rdch = i_dev->si_drv1;
@@ -350,7 +348,7 @@ dsp_close(dev_t i_dev, int flags, int mode, struct thread *td)
        }
        if (exit) {
                pcm_unlock(d);
-               splx(s);
+               crit_exit();
                return 0;
        }
 
@@ -378,7 +376,7 @@ dsp_close(dev_t i_dev, int flags, int mode, struct thread *td)
                pcm_chnrelease(wrch);
        }
 
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -386,10 +384,9 @@ static int
 dsp_read(dev_t i_dev, struct uio *buf, int flag)
 {
        struct pcm_channel *rdch, *wrch;
-       intrmask_t s;
        int ret;
 
-       s = spltty();
+       crit_enter();
        getchns(i_dev, &rdch, &wrch, SD_F_PRIO_RD);
 
        KASSERT(rdch, ("dsp_read: nonexistant channel"));
@@ -397,7 +394,7 @@ dsp_read(dev_t i_dev, struct uio *buf, int flag)
 
        if (rdch->flags & (CHN_F_MAPPED | CHN_F_DEAD)) {
                relchns(i_dev, rdch, wrch, SD_F_PRIO_RD);
-               splx(s);
+               crit_exit();
                return EINVAL;
        }
        if (!(rdch->flags & CHN_F_RUNNING))
@@ -405,7 +402,7 @@ dsp_read(dev_t i_dev, struct uio *buf, int flag)
        ret = chn_read(rdch, buf);
        relchns(i_dev, rdch, wrch, SD_F_PRIO_RD);
 
-       splx(s);
+       crit_exit();
        return ret;
 }
 
@@ -413,10 +410,9 @@ static int
 dsp_write(dev_t i_dev, struct uio *buf, int flag)
 {
        struct pcm_channel *rdch, *wrch;
-       intrmask_t s;
        int ret;
 
-       s = spltty();
+       crit_enter();
        getchns(i_dev, &rdch, &wrch, SD_F_PRIO_WR);
 
        KASSERT(wrch, ("dsp_write: nonexistant channel"));
@@ -424,7 +420,7 @@ dsp_write(dev_t i_dev, struct uio *buf, int flag)
 
        if (wrch->flags & (CHN_F_MAPPED | CHN_F_DEAD)) {
                relchns(i_dev, rdch, wrch, SD_F_PRIO_WR);
-               splx(s);
+               crit_exit();
                return EINVAL;
        }
        if (!(wrch->flags & CHN_F_RUNNING))
@@ -432,7 +428,7 @@ dsp_write(dev_t i_dev, struct uio *buf, int flag)
        ret = chn_write(wrch, buf);
        relchns(i_dev, rdch, wrch, SD_F_PRIO_WR);
 
-       splx(s);
+       crit_exit();
        return ret;
 }
 
@@ -441,7 +437,6 @@ dsp_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
 {
        struct pcm_channel *wrch, *rdch;
        struct snddev_info *d;
-       intrmask_t s;
        int kill;
        int ret = 0, *arg_i = (int *)arg, tmp;
 
@@ -458,7 +453,7 @@ dsp_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
                return mixer_ioctl(pdev, cmd, arg, mode, td);
        }
 
-       s = spltty();
+       crit_enter();
        d = dsp_get_info(i_dev);
        getchns(i_dev, &rdch, &wrch, 0);
 
@@ -469,7 +464,7 @@ dsp_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
                kill |= 2;
        if (kill == 3) {
                relchns(i_dev, rdch, wrch, 0);
-               splx(s);
+               crit_exit();
                return EINVAL;
        }
        if (kill & 1)
@@ -964,7 +959,7 @@ dsp_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
                break;
        }
        relchns(i_dev, rdch, wrch, 0);
-       splx(s);
+       crit_exit();
        return ret;
 }
 
@@ -972,10 +967,9 @@ static int
 dsp_poll(dev_t i_dev, int events, struct thread *td)
 {
        struct pcm_channel *wrch = NULL, *rdch = NULL;
-       intrmask_t s;
        int ret, e;
 
-       s = spltty();
+       crit_enter();
        ret = 0;
        getchns(i_dev, &rdch, &wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
 
@@ -991,7 +985,7 @@ dsp_poll(dev_t i_dev, int events, struct thread *td)
        }
        relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
 
-       splx(s);
+       crit_exit();
        return ret;
 }
 
@@ -999,13 +993,12 @@ static int
 dsp_mmap(dev_t i_dev, vm_offset_t offset, int nprot)
 {
        struct pcm_channel *wrch = NULL, *rdch = NULL, *c;
-       intrmask_t s;
        int ret;
 
        if (nprot & PROT_EXEC)
                return -1;
 
-       s = spltty();
+       crit_enter();
        getchns(i_dev, &rdch, &wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
 #if 0
        /*
@@ -1018,7 +1011,7 @@ dsp_mmap(dev_t i_dev, vm_offset_t offset, int nprot)
        } else if (rdch && (nprot & PROT_READ)) {
                c = rdch;
        } else {
-               splx(s);
+               crit_exit();
                return -1;
        }
 #else
@@ -1027,13 +1020,13 @@ dsp_mmap(dev_t i_dev, vm_offset_t offset, int nprot)
 
        if (c == NULL) {
                relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
-               splx(s);
+               crit_exit();
                return -1;
        }
 
        if (offset >= sndbuf_getsize(c->bufsoft)) {
                relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
-               splx(s);
+               crit_exit();
                return -1;
        }
 
@@ -1043,7 +1036,7 @@ dsp_mmap(dev_t i_dev, vm_offset_t offset, int nprot)
        ret = atop(vtophys(sndbuf_getbufofs(c->bufsoft, offset)));
        relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
 
-       splx(s);
+       crit_exit();
        return ret;
 }
 
index 21af8ff..08b8cde 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pcm/mixer.c,v 1.4.2.8 2002/04/22 15:49:36 cg Exp $
- * $DragonFly: src/sys/dev/sound/pcm/mixer.c,v 1.7 2004/05/21 01:14:27 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pcm/mixer.c,v 1.8 2005/06/10 23:07:01 dillon Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 
 #include "mixer_if.h"
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/mixer.c,v 1.7 2004/05/21 01:14:27 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/mixer.c,v 1.8 2005/06/10 23:07:01 dillon Exp $");
 
 MALLOC_DEFINE(M_MIXER, "mixer", "mixer");
 
@@ -407,16 +407,15 @@ static int
 mixer_open(dev_t i_dev, int flags, int mode, struct thread *td)
 {
        struct snd_mixer *m;
-       intrmask_t s;
 
        m = i_dev->si_drv1;
-       s = spltty();
+       crit_enter();
        snd_mtxlock(m->lock);
 
        m->busy++;
 
        snd_mtxunlock(m->lock);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -424,21 +423,20 @@ static int
 mixer_close(dev_t i_dev, int flags, int mode, struct thread *td)
 {
        struct snd_mixer *m;
-       intrmask_t s;
 
        m = i_dev->si_drv1;
-       s = spltty();
+       crit_enter();
        snd_mtxlock(m->lock);
 
        if (!m->busy) {
                snd_mtxunlock(m->lock);
-               splx(s);
+               crit_exit();
                return EBADF;
        }
        m->busy--;
 
        snd_mtxunlock(m->lock);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -446,7 +444,6 @@ int
 mixer_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
 {
        struct snd_mixer *m;
-       intrmask_t s;
        int ret, *arg_i = (int *)arg;
        int v = -1, j = cmd & 0xff;
 
@@ -454,7 +451,7 @@ mixer_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
        if (!m->busy)
                return EBADF;
 
-       s = spltty();
+       crit_enter();
        snd_mtxlock(m->lock);
        if ((cmd & MIXER_WRITE(0)) == MIXER_WRITE(0)) {
                if (j == SOUND_MIXER_RECSRC)
@@ -462,7 +459,7 @@ mixer_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
                else
                        ret = mixer_set(m, j, *arg_i);
                snd_mtxunlock(m->lock);
-               splx(s);
+               crit_exit();
                return (ret == 0)? 0 : ENXIO;
        }
 
@@ -490,7 +487,7 @@ mixer_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct thread *td)
                return (v != -1)? 0 : ENXIO;
        }
        snd_mtxunlock(m->lock);
-       splx(s);
+       crit_exit();
        return ENXIO;
 }
 
index e77e934..6c31cb9 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pcm/sndstat.c,v 1.4.2.2 2002/04/22 15:49:36 cg Exp $
- * $DragonFly: src/sys/dev/sound/pcm/sndstat.c,v 1.7 2004/05/21 01:14:27 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pcm/sndstat.c,v 1.8 2005/06/10 23:07:01 dillon Exp $
  */
 
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/pcm/vchan.h>
 
-SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/sndstat.c,v 1.7 2004/05/21 01:14:27 dillon Exp $");
+SND_DECLARE_FILE("$DragonFly: src/sys/dev/sound/pcm/sndstat.c,v 1.8 2005/06/10 23:07:01 dillon Exp $");
 
 #define        SS_TYPE_MODULE          0
 #define        SS_TYPE_FIRST           1
@@ -90,18 +90,17 @@ static int sndstat_prepare(struct sbuf *s);
 static int
 sysctl_hw_sndverbose(SYSCTL_HANDLER_ARGS)
 {
-       intrmask_t s;
        int error, verbose;
 
        verbose = sndstat_verbose;
        error = sysctl_handle_int(oidp, &verbose, sizeof(verbose), req);
        if (error == 0 && req->newptr != NULL) {
-               s = spltty();
+               crit_enter();
                if (verbose < 0 || verbose > 3)
                        error = EINVAL;
                else
                        sndstat_verbose = verbose;
-               splx(s);
+               crit_exit();
        }
        return error;
 }
@@ -111,16 +110,15 @@ SYSCTL_PROC(_hw_snd, OID_AUTO, verbose, CTLTYPE_INT | CTLFLAG_RW,
 static int
 sndstat_open(dev_t i_dev, int flags, int mode, struct thread *td)
 {
-       intrmask_t s;
        int err;
 
-       s = spltty();
+       crit_enter();
        if (sndstat_isopen) {
-               splx(s);
+               crit_exit();
                return EBUSY;
        }
        if (sbuf_new(&sndstat_sbuf, NULL, 4096, 0) == NULL) {
-               splx(s);
+               crit_exit();
                return ENXIO;
        }
        sndstat_bufptr = 0;
@@ -128,43 +126,40 @@ sndstat_open(dev_t i_dev, int flags, int mode, struct thread *td)
        if (!err)
                sndstat_isopen = 1;
 
-       splx(s);
+       crit_exit();
        return err;
 }
 
 static int
 sndstat_close(dev_t i_dev, int flags, int mode, struct thread *td)
 {
-       intrmask_t s;
-
-       s = spltty();
+       crit_enter();
        if (!sndstat_isopen) {
-               splx(s);
+               crit_exit();
                return EBADF;
        }
        sbuf_delete(&sndstat_sbuf);
        sndstat_isopen = 0;
 
-       splx(s);
+       crit_exit();
        return 0;
 }
 
 static int
 sndstat_read(dev_t i_dev, struct uio *buf, int flag)
 {
-       intrmask_t s;
        int l, err;
 
-       s = spltty();
+       crit_enter();
        if (!sndstat_isopen) {
-               splx(s);
+               crit_exit();
                return EBADF;
        }
        l = min(buf->uio_resid, sbuf_len(&sndstat_sbuf) - sndstat_bufptr);
        err = (l > 0)? uiomove(sbuf_data(&sndstat_sbuf) + sndstat_bufptr, l, buf) : 0;
        sndstat_bufptr += l;
 
-       splx(s);
+       crit_exit();
        return err;
 }
 
@@ -186,7 +181,6 @@ sndstat_find(int type, int unit)
 int
 sndstat_register(device_t dev, char *str, sndstat_handler handler)
 {
-       intrmask_t s;
        struct sndstat_entry *ent;
        const char *devtype;
        int type, unit;
@@ -217,12 +211,12 @@ sndstat_register(device_t dev, char *str, sndstat_handler handler)
        ent->unit = unit;
        ent->handler = handler;
 
-       s = spltty();
+       crit_enter();
        SLIST_INSERT_HEAD(&sndstat_devlist, ent, link);
        if (type == SS_TYPE_MODULE)
                sndstat_files++;
        sndstat_maxunit = (unit > sndstat_maxunit)? unit : sndstat_maxunit;
-       splx(s);
+       crit_exit();
 
        return 0;
 }
@@ -236,20 +230,19 @@ sndstat_registerfile(char *str)
 int
 sndstat_unregister(device_t dev)
 {
-       intrmask_t s;
        struct sndstat_entry *ent;
 
-       s = spltty();
+       crit_enter();
        SLIST_FOREACH(ent, &sndstat_devlist, link) {
                if (ent->dev == dev) {
                        SLIST_REMOVE(&sndstat_devlist, ent, sndstat_entry, link);
                        free(ent, M_DEVBUF);
-                       splx(s);
+                       crit_exit();
 
                        return 0;
                }
        }
-       splx(s);
+       crit_exit();
 
        return ENXIO;
 }
@@ -257,21 +250,20 @@ sndstat_unregister(device_t dev)
 int
 sndstat_unregisterfile(char *str)
 {
-       intrmask_t s;
        struct sndstat_entry *ent;
 
-       s = spltty();
+       crit_enter();
        SLIST_FOREACH(ent, &sndstat_devlist, link) {
                if (ent->dev == NULL && ent->str == str) {
                        SLIST_REMOVE(&sndstat_devlist, ent, sndstat_entry, link);
                        free(ent, M_DEVBUF);
                        sndstat_files--;
-                       splx(s);
+                       crit_exit();
 
                        return 0;
                }
        }
-       splx(s);
+       crit_exit();
 
        return ENXIO;
 }
@@ -334,15 +326,13 @@ sndstat_init(void)
 static int
 sndstat_uninit(void)
 {
-       intrmask_t s;
-
-       s = spltty();
+       crit_enter();
        if (sndstat_isopen) {
-               splx(s);
+               crit_exit();
                return EBUSY;
        }
        cdevsw_remove(&sndstat_cdevsw, -1, SND_DEV_STATUS);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
index cf913e5..f4e2de8 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/sound/pcm/sound.h,v 1.10.2.11 2002/04/22 15:49:36 cg Exp $
- * $DragonFly: src/sys/dev/sound/pcm/sound.h,v 1.5 2005/05/24 20:59:04 dillon Exp $
+ * $DragonFly: src/sys/dev/sound/pcm/sound.h,v 1.6 2005/06/10 23:07:01 dillon Exp $
  */
 
 /*
@@ -66,6 +66,7 @@
 #include <sys/sbuf.h>
 #include <sys/soundcard.h>
 #include <sys/sysctl.h>
+#include <sys/thread2.h>
 #include <bus/isa/isavar.h>
 #include <sys/kobj.h>
 #include <vm/vm.h>
index 53add78..9703e37 100644 (file)
@@ -1,6 +1,6 @@
 /*     $NetBSD: uaudio.c,v 1.41 2001/01/23 14:04:13 augustss Exp $     */
 /*     $FreeBSD: src/sys/dev/sound/usb/uaudio.c,v 1.6.2.2 2002/11/06 21:18:17 joe Exp $: */
-/*     $DragonFly: src/sys/dev/sound/usb/uaudio.c,v 1.6 2005/06/02 20:40:43 dillon Exp $: */
+/*     $DragonFly: src/sys/dev/sound/usb/uaudio.c,v 1.7 2005/06/10 23:07:02 dillon Exp $: */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -1594,7 +1594,7 @@ uaudio_open(void *addr, int flags)
 }
 
 /*
- * Close function is called at splaudio().
+ * Close function is called from a critical section.
  */
 void
 uaudio_close(void *addr)
@@ -2201,21 +2201,9 @@ uaudio_chan_pintr(usbd_xfer_handle xfer, usbd_private_handle priv,
 #endif
 
        ch->transferred += cb->size;
-#if defined(__DragonFly__)
        crit_enter();
        chn_intr(ch->pcm_ch);
        crit_exit();
-#else
-       s = splaudio();
-       /* Call back to upper layer */
-       while (ch->transferred >= ch->blksize) {
-               ch->transferred -= ch->blksize;
-               DPRINTFN(5,("uaudio_chan_pintr: call %p(%p)\n", 
-                           ch->intr, ch->arg));
-               ch->intr(ch->arg);
-       }
-       splx(s);
-#endif
 
        /* start next transfer */
        uaudio_chan_ptransfer(ch);
@@ -2279,7 +2267,7 @@ uaudio_chan_rintr(usbd_xfer_handle xfer, usbd_private_handle priv,
        struct chanbuf *cb = priv;
        struct chan *ch = cb->chan;
        u_int32_t count;
-       int s, n;
+       int n;
 
        /* Return if we are aborting. */
        if (status == USBD_CANCELLED)
@@ -2319,20 +2307,9 @@ uaudio_chan_rintr(usbd_xfer_handle xfer, usbd_private_handle priv,
 
        /* Call back to upper layer */
        ch->transferred += cb->size;
-#if defined(__DragonFly__)
-       s = spltty();
+       crit_enter();
        chn_intr(ch->pcm_ch);
-       splx(s);
-#else
-       s = splaudio();
-       while (ch->transferred >= ch->blksize) {
-               ch->transferred -= ch->blksize;
-               DPRINTFN(5,("uaudio_chan_rintr: call %p(%p)\n", 
-                           ch->intr, ch->arg));
-               ch->intr(ch->arg);
-       }
-       splx(s);
-#endif
+       crit_exit();
 
        /* start next transfer */
        uaudio_chan_rtransfer(ch);