From owner-freebsd-bugs@FreeBSD.ORG Mon Dec 20 14:30:36 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 81BB416A4CE for ; Mon, 20 Dec 2004 14:30:36 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2DC8543D45 for ; Mon, 20 Dec 2004 14:30:36 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.1/8.13.1) with ESMTP id iBKEUab2081486 for ; Mon, 20 Dec 2004 14:30:36 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.1/8.13.1/Submit) id iBKEUadF081485; Mon, 20 Dec 2004 14:30:36 GMT (envelope-from gnats) Resent-Date: Mon, 20 Dec 2004 14:30:36 GMT Resent-Message-Id: <200412201430.iBKEUadF081485@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Kazuhito HONDA Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C5B6C16A4CE for ; Mon, 20 Dec 2004 14:22:26 +0000 (GMT) Received: from t-mta1.odn.ne.jp (mfep1.odn.ne.jp [143.90.131.179]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7891D43D6B for ; Mon, 20 Dec 2004 14:22:25 +0000 (GMT) (envelope-from kazuhito@ph.noda.tus.ac.jp) Received: from localhost ([219.66.84.86]) by t-mta1.odn.ne.jp with ESMTP id <20041220142223812.ZPTT.199623.t-mta1.odn.ne.jp@mta1.odn.ne.jp>; Mon, 20 Dec 2004 23:22:23 +0900 Message-Id: <20041220.232218.730550289.kazuhito@ph.noda.tus.ac.jp> Date: Mon, 20 Dec 2004 23:22:18 +0900 (JST) From: Kazuhito HONDA To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 cc: kazuhito@ph.noda.tus.ac.jp Subject: kern/75311: Enable to record with USB audio (uaudio) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Kazuhito HONDA List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Dec 2004 14:30:36 -0000 >Number: 75311 >Category: kern >Synopsis: Enable to record with USB audio (uaudio) >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Dec 20 14:30:35 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Kazuhito HONDA >Release: FreeBSD 6.0-CURRENT i386 >Organization: >Environment: System: FreeBSD kaoru 6.0-CURRENT FreeBSD 6.0-CURRENT #194: Mon Dec 20 23:01:00 JST 2004 root@kaoru:/usr/obj/src/sys/i386/compile/KAORU.6.0B.0 i386 USB device: Sound Blaster Digital Music (SBDM, Creative Labs.) >Description: USB devices couldn't record on FreeBSD, at least SBDM. >How-To-Repeat: >Fix: 1. At first, apply the patch in `kern/75274' 2. apply the patch below, `F_r.diff' But I haven't tested this codes except with SBDM. --- F_r.diff begins here --- --- src/sys/dev/sound/usb/uaudio.c Mon Dec 20 22:56:41 2004 +++ src/sys/dev/sound/usb/uaudio-91-r.c Mon Dec 20 22:49:44 2004 @@ -1,5 +1,5 @@ /* $NetBSD: uaudio.c,v 1.91 2004/11/05 17:46:14 kent Exp $ */ -/* $FreeBSD: src/sys/dev/sound/usb/uaudio-91.c,v $: */ +/* $FreeBSD: src/sys/dev/sound/usb/uaudio-91-r.c,v $: */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -3524,6 +3524,9 @@ uaudio_init_params(struct uaudio_softc * int i, j, enc; int samples_per_frame, sample_size; + if ((sc->sc_playchan.pipe != NULL) || (sc->sc_recchan.pipe != NULL)) + return (-1); + switch(ch->format & 0x0000FFFF) { case AFMT_U8: enc = AUDIO_ENCODING_ULINEAR_LE; @@ -3570,7 +3573,6 @@ uaudio_init_params(struct uaudio_softc * } /* for (mode = ...... */ -/*But this function is used for output only */ for (i = 0; i < sc->sc_nalts; i++) { const struct usb_audio_streaming_type1_descriptor *a1d = sc->sc_alts[i].asf1desc; @@ -3612,7 +3614,10 @@ uaudio_init_params(struct uaudio_softc * } } /* return (EINVAL); */ - printf("uaudio: This device can't play in rate=%d.\n", ch->sample_rate); + if (mode == AUMODE_PLAY) + printf("uaudio: This device can't play in rate=%d.\n", ch->sample_rate); + else + printf("uaudio: This device can't record in rate=%d.\n", ch->sample_rate); return (-1); found: @@ -3840,6 +3845,65 @@ uaudio_halt_out_dma(device_t dev) uaudio_chan_free_buffers(sc, &sc->sc_playchan); } return (0); +} + +int +uaudio_halt_in_dma(device_t dev) +{ + struct uaudio_softc *sc; + + sc = device_get_softc(dev); + + if (sc->sc_dying) + return (EIO); + + DPRINTF(("uaudio_halt_in_dma: enter\n")); + if (sc->sc_recchan.pipe != NULL) { + uaudio_chan_close(sc, &sc->sc_recchan); + sc->sc_recchan.pipe = NULL; + uaudio_chan_free_buffers(sc, &sc->sc_recchan); +/* sc->sc_recchan.intr = NULL; */ + } + return (0); +} + +int +uaudio_trigger_input(device_t dev) +{ + struct uaudio_softc *sc; + struct chan *ch; + usbd_status err; + int i, s; + + sc = device_get_softc(dev); + ch = &sc->sc_recchan; + + if (sc->sc_dying) + return (EIO); + +/* uaudio_chan_set_param(ch, start, end, blksize) */ + if (uaudio_init_params(sc, ch, AUMODE_RECORD)) + return (EIO); + + err = uaudio_chan_alloc_buffers(sc, ch); + if (err) + return (EIO); + + err = uaudio_chan_open(sc, ch); + if (err) { + uaudio_chan_free_buffers(sc, ch); + return (EIO); + } + +/* ch->intr = intr; + ch->arg = arg; */ + + s = splusb(); + for (i = 0; i < UAUDIO_NCHANBUFS-1; i++) /* XXX -1 shouldn't be needed */ + uaudio_chan_rtransfer(ch); + splx(s); + + return (0); } int --- src/sys/dev/sound/usb/uaudio.h Mon Dec 20 22:56:41 2004 +++ src/sys/dev/sound/usb/uaudio-91-r.h Mon Dec 20 22:49:55 2004 @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/sound/usb/uaudio-91.h,v $ */ +/* $FreeBSD: src/sys/dev/sound/usb/uaudio-91-r.h,v $ */ /* * Copyright (c) 2000-2002 Hiroyuki Aizu @@ -25,7 +25,9 @@ * SUCH DAMAGE. */ +#if 0 #define NO_RECORDING /* XXX: some routines missing from uaudio.c */ +#endif /* Defined in uaudio.c, used in uaudio_pcm,c */ --- src/sys/dev/sound/usb/uaudio_pcm.c Mon Dec 20 22:56:41 2004 +++ src/sys/dev/sound/usb/uaudio_pcm-91-r.c Mon Dec 20 22:50:07 2004 @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/sound/usb/uaudio_pcm-91.c,v $ */ +/* $FreeBSD: src/sys/dev/sound/usb/uaudio_pcm-91-r.c,v $ */ /* * Copyright (c) 2000-2002 Hiroyuki Aizu @@ -73,6 +73,7 @@ ua_chan_init(kobj_t obj, void *devinfo, ch->parent = sc; ch->channel = c; ch->buffer = b; + ch->dir = dir; pa_dev = device_get_parent(sc->sc_dev); /* Create ua_playfmt[] & ua_recfmt[] */ @@ -320,7 +321,11 @@ ua_attach(device_t dev) snprintf(status, SND_STATUSLEN, "at addr ?"); +#ifndef NO_RECORDING + if (pcm_register(dev, ua, 1, 1)) { +#else if (pcm_register(dev, ua, 1, 0)) { +#endif return(ENXIO); } --- F_r.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: