From owner-p4-projects@FreeBSD.ORG Mon Jun 18 02:17:22 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 070B916A46E; Mon, 18 Jun 2007 02:17:22 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id ACE0316A468 for ; Mon, 18 Jun 2007 02:17:21 +0000 (UTC) (envelope-from ryanb@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 98A6813C45B for ; Mon, 18 Jun 2007 02:17:21 +0000 (UTC) (envelope-from ryanb@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l5I2HL7n008136 for ; Mon, 18 Jun 2007 02:17:21 GMT (envelope-from ryanb@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l5I2HJr4008075 for perforce@freebsd.org; Mon, 18 Jun 2007 02:17:19 GMT (envelope-from ryanb@FreeBSD.org) Date: Mon, 18 Jun 2007 02:17:19 GMT Message-Id: <200706180217.l5I2HJr4008075@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ryanb@FreeBSD.org using -f From: Ryan Beasley To: Perforce Change Reviews Cc: Subject: PERFORCE change 121886 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jun 2007 02:17:22 -0000 http://perforce.freebsd.org/chv.cgi?CH=121886 Change 121886 by ryanb@ryanb_yuki on 2007/06/18 02:16:56 Integrate from -CURRENT. Haven't tested build yet. (Minor merging required.) Will test that on -CURRENT box next. (Presumably after the new gcc import, can no longer build -CURRENT from a 6.2-R machine.) Affected files ... .. //depot/projects/soundsystem/src/sys/dev/sound/clone.c#1 branch .. //depot/projects/soundsystem/src/sys/dev/sound/clone.h#1 branch .. //depot/projects/soundsystem/src/sys/dev/sound/isa/ad1816.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/isa/ess.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/isa/mss.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/isa/sb16.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/isa/sb8.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/midi/midi.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/als4000.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/atiixp.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/au88x0.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/aureal.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/cmi.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/cs4281.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/csa.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/csapcm.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/ds1.c#6 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/emu10k1.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/emu10kx-pcm.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/emu10kx.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/envy24.c#6 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/envy24.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/envy24ht.c#6 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/envy24ht.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/es137x.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/fm801.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/hda/hdac.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/hda/hdac_private.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/ich.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/maestro.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/maestro3.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/neomagic.c#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/solo.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/spicds.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/spicds.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/t4dwave.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/via8233.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/via82c686.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pci/vibes.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/ac97.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/ac97.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/ac97_patch.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/ac97_patch.h#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/buffer.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/buffer.h#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/channel.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/channel.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/dsp.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/dsp.h#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/feeder.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/feeder_fmt.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/feeder_rate.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/feeder_volume.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/mixer.c#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/mixer.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/sndstat.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/sound.c#5 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/sound.h#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/vchan.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/pcm/vchan.h#2 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/sbus/cs4231.c#3 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/unit.c#1 branch .. //depot/projects/soundsystem/src/sys/dev/sound/unit.h#1 branch .. //depot/projects/soundsystem/src/sys/dev/sound/usb/uaudio.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/usb/uaudio_pcm.c#4 integrate .. //depot/projects/soundsystem/src/sys/dev/sound/version.h#1 branch .. //depot/projects/soundsystem/src/sys/modules/sound/sound/Makefile#2 integrate .. //depot/projects/soundsystem/src/usr.sbin/mixer/mixer.8#2 integrate Differences ... ==== //depot/projects/soundsystem/src/sys/dev/sound/isa/ad1816.c#5 (text+ko) ==== @@ -33,7 +33,7 @@ #include "mixer_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/ad1816.c,v 1.42 2007/03/15 16:41:25 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/ad1816.c,v 1.45 2007/06/17 06:10:40 ariff Exp $"); struct ad1816_info; @@ -318,7 +318,7 @@ ch->parent = ad1816; ch->channel = c; ch->buffer = b; - if (sndbuf_alloc(ch->buffer, ad1816->parent_dmat, ad1816->bufsize) != 0) + if (sndbuf_alloc(ch->buffer, ad1816->parent_dmat, 0, ad1816->bufsize) != 0) return NULL; return ch; } @@ -411,7 +411,7 @@ struct ad1816_info *ad1816 = ch->parent; int wr, reg; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; sndbuf_dma(ch->buffer, go); @@ -598,9 +598,7 @@ struct ad1816_info *ad1816; char status[SND_STATUSLEN], status2[SND_STATUSLEN]; - ad1816 = (struct ad1816_info *)malloc(sizeof *ad1816, M_DEVBUF, M_NOWAIT | M_ZERO); - if (!ad1816) return ENXIO; - + ad1816 = malloc(sizeof(*ad1816), M_DEVBUF, M_WAITOK | M_ZERO); ad1816->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_ad1816 softc"); ad1816->io_rid = 2; ==== //depot/projects/soundsystem/src/sys/dev/sound/isa/ess.c#4 (text+ko) ==== @@ -38,7 +38,7 @@ #include "mixer_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/ess.c,v 1.38 2007/02/23 13:47:33 netchild Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/ess.c,v 1.42 2007/06/17 06:10:40 ariff Exp $"); #define ESS_BUFFSIZE (4096) #define ABS(x) (((x) < 0)? -(x) : (x)) @@ -97,7 +97,8 @@ bus_dma_tag_t parent_dmat; unsigned int bufsize; - int type, duplex:1, newspeed:1; + int type; + unsigned int duplex:1, newspeed:1; u_long bd_flags; /* board-specific flags */ struct ess_chinfo pch, rch; }; @@ -563,7 +564,7 @@ ch->parent = sc; ch->channel = c; ch->buffer = b; - if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsize) != 0) + if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsize) != 0) return NULL; ch->dir = dir; ch->hwch = 1; @@ -610,7 +611,7 @@ { struct ess_chinfo *ch = data; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; switch (go) { @@ -808,10 +809,7 @@ char status[SND_STATUSLEN], buf[64]; int ver; - sc = (struct ess_info *)malloc(sizeof *sc, M_DEVBUF, M_NOWAIT | M_ZERO); - if (!sc) - return ENXIO; - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->parent_dev = device_get_parent(dev); sc->bufsize = pcm_getbuffersize(dev, 4096, ESS_BUFFSIZE, 65536); if (ess_alloc_resources(sc, dev)) ==== //depot/projects/soundsystem/src/sys/dev/sound/isa/mss.c#5 (text+ko) ==== @@ -29,7 +29,7 @@ #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/mss.c,v 1.108 2007/03/15 16:41:25 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/mss.c,v 1.112 2007/06/17 06:10:40 ariff Exp $"); /* board-specific include files */ #include @@ -1152,7 +1152,7 @@ ch->channel = c; ch->buffer = b; ch->dir = dir; - if (sndbuf_alloc(ch->buffer, mss->parent_dmat, mss->bufsize) != 0) + if (sndbuf_alloc(ch->buffer, mss->parent_dmat, 0, mss->bufsize) != 0) return NULL; sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? mss->drq1 : mss->drq2); return ch; @@ -1201,7 +1201,7 @@ struct mss_chinfo *ch = data; struct mss_info *mss = ch->parent; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; sndbuf_dma(ch->buffer, go); @@ -1320,7 +1320,7 @@ goto mss_probe_end; } tmp &= 0x3f; - if (!(tmp == 0x04 || tmp == 0x0f || tmp == 0x00)) { + if (!(tmp == 0x04 || tmp == 0x0f || tmp == 0x00 || tmp == 0x05)) { BVDDB(printf("No MSS signature detected on port 0x%lx (0x%x)\n", rman_get_start(mss->io_base), tmpx)); goto no; @@ -1979,10 +1979,7 @@ { struct mss_info *mss; - mss = (struct mss_info *)malloc(sizeof *mss, M_DEVBUF, M_NOWAIT | M_ZERO); - if (!mss) - return ENXIO; - + mss = malloc(sizeof(*mss), M_DEVBUF, M_WAITOK | M_ZERO); mss->io_rid = 0; mss->conf_rid = -1; mss->irq_rid = 0; ==== //depot/projects/soundsystem/src/sys/dev/sound/isa/sb16.c#4 (text+ko) ==== @@ -38,7 +38,7 @@ #include "mixer_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/sb16.c,v 1.94 2007/02/23 13:47:33 netchild Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/sb16.c,v 1.97 2007/06/17 06:10:40 ariff Exp $"); #define SB16_BUFFSIZE 4096 #define PLAIN_SB16(x) ((((x)->bd_flags) & (BD_F_SB16|BD_F_SB16X)) == BD_F_SB16) @@ -681,7 +681,7 @@ ch->buffer = b; ch->dir = dir; - if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) != 0) + if (sndbuf_alloc(ch->buffer, sb->parent_dmat, 0, sb->bufsize) != 0) return NULL; return ch; @@ -724,7 +724,7 @@ struct sb_chinfo *ch = data; struct sb_info *sb = ch->parent; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; if (go == PCMTRIG_START) @@ -813,10 +813,7 @@ uintptr_t ver; char status[SND_STATUSLEN], status2[SND_STATUSLEN]; - sb = (struct sb_info *)malloc(sizeof *sb, M_DEVBUF, M_NOWAIT | M_ZERO); - if (!sb) - return ENXIO; - + sb = malloc(sizeof(*sb), M_DEVBUF, M_WAITOK | M_ZERO); sb->parent_dev = device_get_parent(dev); BUS_READ_IVAR(sb->parent_dev, dev, 1, &ver); sb->bd_id = ver & 0x0000ffff; ==== //depot/projects/soundsystem/src/sys/dev/sound/isa/sb8.c#4 (text+ko) ==== @@ -38,7 +38,7 @@ #include "mixer_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/sb8.c,v 1.83 2007/02/23 13:47:33 netchild Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/isa/sb8.c,v 1.86 2007/06/17 06:10:41 ariff Exp $"); #define SB_DEFAULT_BUFSZ 4096 @@ -599,7 +599,7 @@ ch->channel = c; ch->dir = dir; ch->buffer = b; - if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) != 0) + if (sndbuf_alloc(ch->buffer, sb->parent_dmat, 0, sb->bufsize) != 0) return NULL; sndbuf_dmasetup(ch->buffer, sb->drq); return ch; @@ -637,7 +637,7 @@ { struct sb_chinfo *ch = data; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; sndbuf_dma(ch->buffer, go); @@ -714,10 +714,7 @@ char status[SND_STATUSLEN]; uintptr_t ver; - sb = (struct sb_info *)malloc(sizeof *sb, M_DEVBUF, M_NOWAIT | M_ZERO); - if (!sb) - return ENXIO; - + sb = malloc(sizeof(*sb), M_DEVBUF, M_WAITOK | M_ZERO); sb->parent_dev = device_get_parent(dev); BUS_READ_IVAR(device_get_parent(dev), dev, 1, &ver); sb->bd_id = ver & 0x0000ffff; ==== //depot/projects/soundsystem/src/sys/dev/sound/midi/midi.c#4 (text) ==== @@ -42,7 +42,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/sound/midi/midi.c,v 1.23 2007/03/15 14:57:54 ariff Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/sound/midi/midi.c,v 1.24 2007/04/02 06:03:47 ariff Exp $"); #include #include @@ -1453,14 +1453,18 @@ switch (type) { case MOD_LOAD: retval = midi_load(); +#if 0 if (retval == 0) retval = seq_modevent(mod, type, data); +#endif break; case MOD_UNLOAD: retval = midi_unload(); +#if 0 if (retval == 0) retval = seq_modevent(mod, type, data); +#endif break; default: ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/als4000.c#5 (text+ko) ==== @@ -42,7 +42,7 @@ #include "mixer_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/als4000.c,v 1.24 2007/03/15 16:41:26 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/als4000.c,v 1.27 2007/06/17 06:10:41 ariff Exp $"); /* Debugging macro's */ #undef DEB @@ -221,7 +221,7 @@ ch->buffer = b; snd_mtxunlock(sc->lock); - if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) != 0) + if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) return NULL; return ch; @@ -391,14 +391,20 @@ struct sc_chinfo *ch = data; struct sc_info *sc = ch->parent; + if (!PCMTRIG_COMMON(go)) + return 0; + snd_mtxlock(sc->lock); switch(go) { case PCMTRIG_START: als_playback_start(ch); break; + case PCMTRIG_STOP: case PCMTRIG_ABORT: als_playback_stop(ch); break; + default: + break; } snd_mtxunlock(sc->lock); return 0; @@ -489,6 +495,7 @@ case PCMTRIG_START: als_capture_start(ch); break; + case PCMTRIG_STOP: case PCMTRIG_ABORT: als_capture_stop(ch); break; @@ -798,11 +805,7 @@ u_int32_t data; char status[SND_STATUSLEN]; - if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return ENXIO; - } - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_als4000 softc"); sc->dev = dev; ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/atiixp.c#5 (text+ko) ==== @@ -63,7 +63,7 @@ #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/atiixp.c,v 1.12 2007/03/16 17:18:17 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/atiixp.c,v 1.18 2007/06/14 11:13:37 ariff Exp $"); #define ATI_IXP_DMA_RETRY_MAX 100 @@ -459,7 +459,7 @@ atiixp_unlock(sc); - if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) == -1) + if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) == -1) return (NULL); atiixp_lock(sc); @@ -712,6 +712,9 @@ uint32_t value; int pollticks; + if (!PCMTRIG_COMMON(go)) + return (0); + atiixp_lock(sc); switch (go) { @@ -896,6 +899,7 @@ enable = atiixp_rd(sc, ATI_REG_IER); enable &= ~detected_codecs; atiixp_wr(sc, ATI_REG_IER, enable); + wakeup(sc); } /* acknowledge */ @@ -957,7 +961,7 @@ atiixp_lock(sc); val = sc->polling; atiixp_unlock(sc); - err = sysctl_handle_int(oidp, &val, sizeof(val), req); + err = sysctl_handle_int(oidp, &val, 0, req); if (err || req->newptr == NULL) return (err); @@ -1002,18 +1006,20 @@ polling = sc->polling; sc->polling = 0; - /* wait for the interrupts to happen */ - timeout = 100; - do { - msleep(sc, sc->lock, PWAIT, "ixpslp", 1); - if (sc->codec_not_ready_bits) - break; - } while (--timeout); + timeout = 10; + if (sc->codec_not_ready_bits == 0) { + /* wait for the interrupts to happen */ + do { + msleep(sc, sc->lock, PWAIT, "ixpslp", max(hz / 10, 1)); + if (sc->codec_not_ready_bits != 0) + break; + } while (--timeout); + } sc->polling = polling; atiixp_disable_interrupts(sc); - if (timeout == 0) { + if (sc->codec_not_ready_bits == 0 && timeout == 0) { device_printf(sc->dev, "WARNING: timeout during codec detection; " "codecs might be present but haven't interrupted\n"); @@ -1105,38 +1111,49 @@ { if (sc == NULL) return; + if (sc->registered_channels != 0) { + atiixp_lock(sc); + sc->polling = 0; + callout_stop(&sc->poll_timer); + atiixp_unlock(sc); + callout_drain(&sc->poll_timer); + } if (sc->codec) { ac97_destroy(sc->codec); sc->codec = NULL; } if (sc->ih) { bus_teardown_intr(sc->dev, sc->irq, sc->ih); - sc->ih = 0; + sc->ih = NULL; } if (sc->reg) { bus_release_resource(sc->dev, sc->regtype, sc->regid, sc->reg); - sc->reg = 0; + sc->reg = NULL; } if (sc->irq) { bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irqid, sc->irq); - sc->irq = 0; + sc->irq = NULL; } if (sc->parent_dmat) { bus_dma_tag_destroy(sc->parent_dmat); - sc->parent_dmat = 0; + sc->parent_dmat = NULL; } - if (sc->sgd_dmamap) { + if (sc->sgd_dmamap) bus_dmamap_unload(sc->sgd_dmat, sc->sgd_dmamap); - sc->sgd_dmamap = 0; + if (sc->sgd_table) { + bus_dmamem_free(sc->sgd_dmat, sc->sgd_table, sc->sgd_dmamap); + sc->sgd_table = NULL; } + sc->sgd_dmamap = NULL; if (sc->sgd_dmat) { bus_dma_tag_destroy(sc->sgd_dmat); - sc->sgd_dmat = 0; + sc->sgd_dmat = NULL; } if (sc->lock) { snd_mtxfree(sc->lock); sc->lock = NULL; } + free(sc, M_DEVBUF); } static int @@ -1164,11 +1181,7 @@ struct atiixp_info *sc; int i; - if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return (ENXIO); - } - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_atiixp softc"); sc->dev = dev; @@ -1303,7 +1316,6 @@ if (sc->st != 0 && sc->sh != 0) atiixp_disable_interrupts(sc); atiixp_release_resource(sc); - free(sc, M_DEVBUF); } return (0); } ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/au88x0.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/sound/pci/au88x0.c,v 1.11 2007/02/23 13:47:34 netchild Exp $ + * $FreeBSD: src/sys/dev/sound/pci/au88x0.c,v 1.13 2007/06/17 06:10:41 ariff Exp $ */ #include @@ -332,7 +332,7 @@ struct au88x0_info *aui = arg; struct au88x0_chan_info *auci = au88x0_channel(aui, dir); - if (sndbuf_alloc(buf, aui->aui_dmat, aui->aui_bufsize) != 0) + if (sndbuf_alloc(buf, aui->aui_dmat, 0, aui->aui_bufsize) != 0) return (NULL); auci->auci_aui = aui; auci->auci_pcmchan = chan; @@ -572,10 +572,7 @@ uint32_t config; int error; - if ((aui = malloc(sizeof *aui, M_DEVBUF, M_NOWAIT|M_ZERO)) == NULL) { - device_printf(dev, "failed to allocate softc\n"); - return (ENXIO); - } + aui = malloc(sizeof(*aui), M_DEVBUF, M_WAITOK | M_ZERO); aui->aui_dev = dev; /* Model-specific parameters */ ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/aureal.c#4 (text+ko) ==== @@ -31,7 +31,7 @@ #include #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/aureal.c,v 1.33 2007/02/23 13:47:34 netchild Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/aureal.c,v 1.36 2007/06/17 06:10:41 ariff Exp $"); /* PCI IDs of supported chips */ #define AU8820_PCI_ID 0x000112eb @@ -303,7 +303,7 @@ ch->channel = c; ch->buffer = b; ch->dir = dir; - if (sndbuf_alloc(ch->buffer, au->parent_dmat, AU_BUFFSIZE) != 0) + if (sndbuf_alloc(ch->buffer, au->parent_dmat, 0, AU_BUFFSIZE) != 0) return NULL; return ch; } @@ -339,12 +339,12 @@ struct au_chinfo *ch = data; struct au_info *au = ch->parent; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; if (ch->dir == PCMDIR_PLAY) { au_setadb(au, 0x11, (go)? 1 : 0); - if (!go) { + if (go != PCMTRIG_START) { au_wr(au, 0, 0xf800, 0, 4); au_wr(au, 0, 0xf804, 0, 4); au_delroute(au, 0x58); @@ -558,11 +558,7 @@ struct ac97_info *codec; char status[SND_STATUSLEN]; - if ((au = malloc(sizeof(*au), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return ENXIO; - } - + au = malloc(sizeof(*au), M_DEVBUF, M_WAITOK | M_ZERO); au->unit = device_get_unit(dev); data = pci_read_config(dev, PCIR_COMMAND, 2); ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/cmi.c#5 (text+ko) ==== @@ -53,7 +53,7 @@ #include "mixer_if.h" #include "mpufoi_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/cmi.c,v 1.40 2007/03/15 16:41:26 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/cmi.c,v 1.44 2007/06/17 06:10:41 ariff Exp $"); /* Supported chip ID's */ #define CMI8338A_PCI_ID 0x010013f6 @@ -349,7 +349,7 @@ ch->spd = DSP_DEFAULT_SPEED; ch->buffer = b; ch->dma_active = 0; - if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) != 0) { + if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) { DEB(printf("cmichan_init failed\n")); return NULL; } @@ -475,12 +475,16 @@ struct sc_chinfo *ch = data; struct sc_info *sc = ch->parent; + if (!PCMTRIG_COMMON(go)) + return 0; + snd_mtxlock(sc->lock); if (ch->dir == PCMDIR_PLAY) { switch(go) { case PCMTRIG_START: cmi_ch0_start(sc, ch); break; + case PCMTRIG_STOP: case PCMTRIG_ABORT: cmi_ch0_stop(sc, ch); break; @@ -490,6 +494,7 @@ case PCMTRIG_START: cmi_ch1_start(sc, ch); break; + case PCMTRIG_STOP: case PCMTRIG_ABORT: cmi_ch1_stop(sc, ch); break; @@ -923,12 +928,7 @@ u_int32_t data; char status[SND_STATUSLEN]; - sc = malloc(sizeof(struct sc_info), M_DEVBUF, M_NOWAIT | M_ZERO); - if (sc == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return ENXIO; - } - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_cmi softc"); data = pci_read_config(dev, PCIR_COMMAND, 2); data |= (PCIM_CMD_PORTEN|PCIM_CMD_BUSMASTEREN); @@ -946,7 +946,8 @@ sc->st = rman_get_bustag(sc->reg); sc->sh = rman_get_bushandle(sc->reg); - cmi_midiattach(sc); + if (0) + cmi_midiattach(sc); sc->irqid = 0; sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid, ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/cs4281.c#4 (text+ko) ==== @@ -37,7 +37,7 @@ #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/cs4281.c,v 1.23 2007/02/23 13:47:34 netchild Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/cs4281.c,v 1.26 2007/06/17 06:10:41 ariff Exp $"); #define CS4281_DEFAULT_BUFSZ 16384 @@ -314,7 +314,7 @@ struct sc_chinfo *ch = (dir == PCMDIR_PLAY) ? &sc->pch : &sc->rch; ch->buffer = b; - if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) != 0) { + if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) { return NULL; } ch->parent = sc; @@ -425,6 +425,7 @@ adcdac_prog(ch); adcdac_go(ch, 1); break; + case PCMTRIG_STOP: case PCMTRIG_ABORT: adcdac_go(ch, 0); break; @@ -753,11 +754,7 @@ u_int32_t data; char status[SND_STATUSLEN]; - if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return ENXIO; - } - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->dev = dev; sc->type = pci_get_devid(dev); ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/csa.c#4 (text+ko) ==== @@ -48,7 +48,7 @@ #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/csa.c,v 1.36 2007/02/23 19:40:13 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/csa.c,v 1.37 2007/03/17 19:37:09 ariff Exp $"); /* This is the pci device id. */ #define CS4610_PCI_ID 0x60011013 @@ -339,23 +339,31 @@ { csa_res *resp; sc_p scp; + struct sndcard_func *func; int err; scp = device_get_softc(dev); resp = &scp->res; - err = 0; - if (scp->midi != NULL) + if (scp->midi != NULL) { + func = device_get_ivars(scp->midi); err = device_delete_child(dev, scp->midi); - if (err) - return err; - scp->midi = NULL; + if (err != 0) + return err; + if (func != NULL) + free(func, M_DEVBUF); + scp->midi = NULL; + } - if (scp->pcm != NULL) + if (scp->pcm != NULL) { + func = device_get_ivars(scp->pcm); err = device_delete_child(dev, scp->pcm); - if (err) - return err; - scp->pcm = NULL; + if (err != 0) + return err; + if (func != NULL) + free(func, M_DEVBUF); + scp->pcm = NULL; + } bus_teardown_intr(dev, resp->irq, scp->ih); bus_release_resource(dev, SYS_RES_IRQ, resp->irq_rid, resp->irq); ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/csapcm.c#4 (text+ko) ==== @@ -38,7 +38,7 @@ #include #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/csapcm.c,v 1.38 2007/02/23 13:47:34 netchild Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/csapcm.c,v 1.41 2007/06/17 06:10:41 ariff Exp $"); /* Buffer size on dma transfer. Fixed for CS416x. */ #define CS461x_BUFFSIZE (4 * 1024) @@ -534,7 +534,7 @@ ch->channel = c; ch->buffer = b; ch->dir = dir; - if (sndbuf_alloc(ch->buffer, csa->parent_dmat, CS461x_BUFFSIZE) != 0) + if (sndbuf_alloc(ch->buffer, csa->parent_dmat, 0, CS461x_BUFFSIZE) != 0) return NULL; return ch; } @@ -569,7 +569,7 @@ struct csa_chinfo *ch = data; struct csa_info *csa = ch->parent; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; if (go == PCMTRIG_START) { @@ -777,9 +777,7 @@ struct ac97_info *codec; struct sndcard_func *func; - csa = malloc(sizeof(*csa), M_DEVBUF, M_NOWAIT | M_ZERO); - if (csa == NULL) - return (ENOMEM); + csa = malloc(sizeof(*csa), M_DEVBUF, M_WAITOK | M_ZERO); unit = device_get_unit(dev); func = device_get_ivars(dev); csa->binfo = func->varinfo; ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/ds1.c#6 (text+ko) ==== @@ -33,7 +33,7 @@ #include #include -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/ds1.c,v 1.49 2007/03/15 16:41:26 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/ds1.c,v 1.52 2007/06/17 06:10:41 ariff Exp $"); /* -------------------------------------------------------------------- */ @@ -490,7 +490,7 @@ ch->fmt = AFMT_U8; ch->spd = 8000; ch->run = 0; - if (sndbuf_alloc(ch->buffer, sc->buffer_dmat, sc->bufsz) != 0) + if (sndbuf_alloc(ch->buffer, sc->buffer_dmat, 0, sc->bufsz) != 0) return NULL; else { ch->lsnum = sc->pslotfree; @@ -545,7 +545,7 @@ struct sc_info *sc = ch->parent; int stereo; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; stereo = (ch->fmt & AFMT_STEREO)? 1 : 0; if (go == PCMTRIG_START) { @@ -621,7 +621,7 @@ ch->dir = dir; ch->fmt = AFMT_U8; ch->spd = 8000; - if (sndbuf_alloc(ch->buffer, sc->buffer_dmat, sc->bufsz) != 0) + if (sndbuf_alloc(ch->buffer, sc->buffer_dmat, 0, sc->bufsz) != 0) return NULL; else { ch->slot = (ch->num == DS1_RECPRIMARY)? sc->rbank + 2: sc->rbank; @@ -673,7 +673,7 @@ struct sc_info *sc = ch->parent; u_int32_t x; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; if (go == PCMTRIG_START) { ch->run = 1; @@ -943,11 +943,7 @@ struct ac97_info *codec = NULL; char status[SND_STATUSLEN]; - if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return ENXIO; - } - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_ds1 softc"); sc->dev = dev; subdev = (pci_get_subdevice(dev) << 16) | pci_get_subvendor(dev); ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/emu10k1.c#5 (text+ko) ==== @@ -37,7 +37,7 @@ #include #include "mpufoi_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/emu10k1.c,v 1.65 2007/03/15 16:41:26 ariff Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/emu10k1.c,v 1.69 2007/06/17 06:10:42 ariff Exp $"); /* -------------------------------------------------------------------- */ @@ -87,7 +87,7 @@ struct emu_voice { int vnum; - int b16:1, stereo:1, busy:1, running:1, ismaster:1; + unsigned int b16:1, stereo:1, busy:1, running:1, ismaster:1; int speed; int start, end, vol; int fxrt1; /* FX routing */ @@ -795,7 +795,7 @@ struct sc_pchinfo *ch = data; struct sc_info *sc = ch->parent; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return 0; snd_mtxlock(sc->lock); @@ -895,7 +895,7 @@ break; } sc->rnum++; - if (sndbuf_alloc(ch->buffer, sc->parent_dmat, sc->bufsz) != 0) + if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) return NULL; else { snd_mtxlock(sc->lock); @@ -958,6 +958,9 @@ struct sc_info *sc = ch->parent; u_int32_t val, sz; + if (!PCMTRIG_COMMON(go)) + return 0; + switch(sc->bufsz) { case 4096: sz = ADCBS_BUFSIZE_4096; @@ -1981,11 +1984,7 @@ int i, gotmic; char status[SND_STATUSLEN]; - if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) { - device_printf(dev, "cannot allocate softc\n"); - return ENXIO; - } - + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_emu10k1 softc"); sc->dev = dev; sc->type = pci_get_devid(dev); ==== //depot/projects/soundsystem/src/sys/dev/sound/pci/emu10kx-pcm.c#3 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/sound/pci/emu10kx-pcm.c,v 1.7 2007/03/15 16:41:26 ariff Exp $ + * $FreeBSD: src/sys/dev/sound/pci/emu10kx-pcm.c,v 1.10 2007/06/17 06:10:42 ariff Exp $ */ #include @@ -513,8 +513,9 @@ struct emu_pcm_pchinfo *ch = c_devinfo; struct emu_pcm_info *sc = ch->pcm; - if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD) + if (!PCMTRIG_COMMON(go)) return (0); + snd_mtxlock(sc->lock); /* XXX can we trigger on parallel threads ? */ if (go == PCMTRIG_START) { emu_vsetup(ch->master, ch->fmt, ch->spd); @@ -602,7 +603,7 @@ ch->irqmask = INTE_ADCBUFENABLE; ch->iprmask = IPR_ADCBUFFULL | IPR_ADCBUFHALFFULL; - if (sndbuf_alloc(ch->buffer, emu_gettag(sc->card), sc->bufsz) != 0) + if (sndbuf_alloc(ch->buffer, emu_gettag(sc->card), 0, sc->bufsz) != 0) return (NULL); else { emu_wrptr(sc->card, 0, ch->basereg, sndbuf_getbufaddr(ch->buffer)); >>> TRUNCATED FOR MAIL (1000 lines) <<<