FWIW, port and hook in the urio(4) storage driver.
authorSascha Wildner <saw@online.de>
Sat, 6 Dec 2014 18:57:40 +0000 (19:57 +0100)
committerSascha Wildner <saw@online.de>
Sat, 6 Dec 2014 18:59:44 +0000 (19:59 +0100)
Taken-from: FreeBSD

etc/devd/usb.conf
share/man/man4/urio.4
share/man/man4/usb.4
sys/bus/u4b/storage/Makefile
sys/bus/u4b/storage/rio500_usb.h
sys/bus/u4b/storage/urio.c
sys/bus/u4b/storage/urio/Makefile [new file with mode: 0644]
sys/conf/files
sys/config/LINT
sys/config/LINT64

index 0f69cd1..4b49e02 100644 (file)
@@ -219,6 +219,14 @@ nomatch 32 {
        action "kldload -n uipaq";
 };
 
+nomatch 32 {
+       match "bus" "uhub[0-9]+";
+       match "mode" "host";
+       match "vendor" "0x045a";
+       match "product" "(0x5001|0x5002)";
+       action "kldload -n urio";
+};
+
 nomatch 32 {
        match "bus" "uhub[0-9]+";
        match "mode" "host";
@@ -1267,6 +1275,14 @@ nomatch 32 {
        action "kldload -n if_run";
 };
 
+nomatch 32 {
+       match "bus" "uhub[0-9]+";
+       match "mode" "host";
+       match "vendor" "0x0841";
+       match "product" "0x0001";
+       action "kldload -n urio";
+};
+
 nomatch 32 {
        match "bus" "uhub[0-9]+";
        match "mode" "host";
@@ -3423,5 +3439,5 @@ nomatch 32 {
        action "kldload -n umass";
 };
 
-# 1535 USB entries processed
+# 1538 USB entries processed
 
index 961f01a..b7956f6 100644 (file)
@@ -1,5 +1,5 @@
-.\" Copyright (c) 2000 Dirk-Willem van Gulik
-.\"    <dirkx@webweaving.org>. All rights reserved.
+.\" Copyright (c) 2000 Dirk-Willem van Gulik <dirkx@webweaving.org>
+.\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
@@ -9,39 +9,45 @@
 .\" 2. Redistributions in binary form must reproduce the above copyright
 .\"    notice, this list of conditions and the following disclaimer in the
 .\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by Bill Paul.
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"   without specific prior written permission.
 .\"
-.\" THIS SOFTWARE IS PROVIDED BY NICK HIBMA AND CONTRIBUTORS ``AS IS'' AND
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL NICK HIBMA OR THE VOICES IN HIS HEAD
-.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-.\" THE POSSIBILITY OF SUCH DAMAGE.
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (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/share/man/man4/urio.4,v 1.5.2.3 2001/08/17 13:08:39 ru Exp $
+.\" $FreeBSD: head/share/man/man4/urio.4 267938 2014-06-26 21:46:14Z bapt $
 .\"
-.Dd August 6, 2009
+.Dd December 6, 2014
 .Dt URIO 4
 .Os
 .Sh NAME
 .Nm urio
-.Nd USB driver for the Rio500 MP3 player
+.Nd "USB driver for the Rio MP3 players"
 .Sh SYNOPSIS
-.Cd "device urio0"
+To compile this driver into the kernel,
+place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device urio"
+.Ed
+.Pp
+Alternatively, to load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+urio_load="YES"
+.Ed
 .Sh DESCRIPTION
 The
 .Nm
-driver provides support for the Rio500 MP3 player from Diamond MultiMedia
+driver provides support for Rio MP3 players from Diamond MultiMedia
 which attaches to the USB port.
 The
 .Nm
@@ -55,7 +61,20 @@ controllers.
 .Pp
 Subsequently, the
 .Pa /dev/urio0
-device can be used by the Rio500 userland applications.
+device can be used by the Rio userland applications.
+.Sh HARDWARE
+The following devices are supported by the
+.Nm
+driver:
+.Pp
+.Bl -bullet -compact
+.It
+Diamond MultiMedia Rio 500
+.It
+Diamond MultiMedia Rio 600
+.It
+Diamond MultiMedia Rio 800
+.El
 .Sh FILES
 .Bl -tag -width /dev/ums0 -compact
 .It Pa /dev/urio0
@@ -69,12 +88,12 @@ driver to the kernel:
 .Pp
 To download a song over the
 .Tn USB
-connection into the Rio500 using the
+connection into the Rio using the
 .Xr rio_add_song 1
 utility (see the
 .Sx SEE ALSO
 section):
-.Dl rio_add_song /usr/local/MP3/TraceyChapman/02-Fast-Car.mp3
+.Dl rio_add_song /usr/local/MP3/TracyChapman/02-Fast-Car.mp3
 .Sh SEE ALSO
 .Xr ohci 4 ,
 .Xr uhci 4 ,
@@ -97,6 +116,7 @@ and that the device used is
 CFLAGS="-I/usr/include/dev/usb" ./configure \\
     --with-devicepath='/dev' --with-deviceentry='urio0'
 .Ed
+.\".Sh HISTORY
 .Sh AUTHORS
 .An -nosplit
 The
index ec1ab21..bafe7ac 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: head/share/man/man4/usb.4 258618 2013-11-26 07:52:40Z lwhsu $
 .\"
-.Dd November 15, 2014
+.Dd December 6, 2014
 .Dt USB 4
 .Os
 .Sh NAME
@@ -89,6 +89,8 @@ provides support for the following devices.
 .\"...
 .It Xr umass 4
 Mass Storage Devices, e.g., external disk drives
+.It Xr urio 4
+Diamond Rio 500 MP3 player
 .It Xr usfs 4
 Mass storage driver for device-side mode
 .El
index 13cbccc..de97c12 100644 (file)
@@ -1,3 +1,3 @@
-SUBDIR=        umass usfs
+SUBDIR=        umass urio usfs
 
 .include <bsd.subdir.mk> 
index 5b53e2c..6e3e943 100644 (file)
@@ -20,7 +20,7 @@
 
     ---------------------------------------------------------------------- */
 
-/*  $FreeBSD$ */
+/*  $FreeBSD: head/sys/dev/usb/storage/rio500_usb.h 196219 2009-08-14 20:03:53Z jhb $ */
 
 #include <sys/ioccom.h>
 #ifndef USB_VENDOR_DIAMOND
index 9953f84..9c45937 100644 (file)
  * This code is based on ugen.c and ulpt.c developed by Lennart Augustsson.
  * This code includes software developed by the NetBSD Foundation, Inc. and
  * its contributors.
+ *
+ * $FreeBSD: head/sys/dev/usb/storage/urio.c 246128 2013-01-30 18:01:20Z sbz $
  */
 
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-
 /*
  * 2000/3/24  added NetBSD/OpenBSD support (from Alex Nemirovsky)
  * 2000/3/07  use two bulk-pipe handles for read and write (Dirk)
@@ -45,7 +43,6 @@ __FBSDID("$FreeBSD$");
  */
 
 #include <sys/stdint.h>
-#include <sys/stddef.h>
 #include <sys/param.h>
 #include <sys/queue.h>
 #include <sys/types.h>
@@ -54,10 +51,8 @@ __FBSDID("$FreeBSD$");
 #include <sys/bus.h>
 #include <sys/module.h>
 #include <sys/lock.h>
-#include <sys/mutex.h>
 #include <sys/condvar.h>
 #include <sys/sysctl.h>
-#include <sys/sx.h>
 #include <sys/unistd.h>
 #include <sys/callout.h>
 #include <sys/malloc.h>
@@ -65,17 +60,17 @@ __FBSDID("$FreeBSD$");
 #include <sys/conf.h>
 #include <sys/fcntl.h>
 
-#include <dev/usb/usb.h>
-#include <dev/usb/usbdi.h>
+#include <bus/u4b/usb.h>
+#include <bus/u4b/usbdi.h>
 #include "usbdevs.h"
 
-#include <dev/usb/usb_ioctl.h>
-#include <dev/usb/usb_generic.h>
+#include <bus/u4b/usb_ioctl.h>
+#include <bus/u4b/usb_generic.h>
 
 #define        USB_DEBUG_VAR urio_debug
-#include <dev/usb/usb_debug.h>
+#include <bus/u4b/usb_debug.h>
 
-#include <dev/usb/storage/rio500_usb.h>
+#include <bus/u4b/storage/rio500_usb.h>
 
 #ifdef USB_DEBUG
 static int urio_debug = 0;
@@ -96,7 +91,7 @@ SYSCTL_INT(_hw_usb_urio, OID_AUTO, debug, CTLFLAG_RW,
 
 struct urio_softc {
        struct usb_fifo_sc sc_fifo;
-       struct mtx sc_mtx;
+       struct lock sc_lock;
 
        struct usb_device *sc_udev;
        struct usb_xfer *sc_xfer[URIO_T_MAX];
@@ -185,6 +180,7 @@ static device_method_t urio_methods[] = {
        DEVMETHOD(device_probe, urio_probe),
        DEVMETHOD(device_attach, urio_attach),
        DEVMETHOD(device_detach, urio_detach),
+
        DEVMETHOD_END
 };
 
@@ -194,7 +190,7 @@ static driver_t urio_driver = {
        .size = sizeof(struct urio_softc),
 };
 
-DRIVER_MODULE(urio, uhub, urio_driver, urio_devclass, NULL, NULL);
+DRIVER_MODULE(urio, uhub, urio_driver, urio_devclass, NULL, 0);
 MODULE_DEPEND(urio, usb, 1, 1, 1);
 MODULE_VERSION(urio, 1);
 
@@ -230,21 +226,21 @@ urio_attach(device_t dev)
 
        sc->sc_udev = uaa->device;
 
-       mtx_init(&sc->sc_mtx, "urio lock", NULL, MTX_DEF | MTX_RECURSE);
+       lockinit(&sc->sc_lock, "urio lock", 0, LK_CANRECURSE);
 
-       snprintf(sc->sc_name, sizeof(sc->sc_name),
+       ksnprintf(sc->sc_name, sizeof(sc->sc_name),
            "%s", device_get_nameunit(dev));
 
        error = usbd_transfer_setup(uaa->device,
            &uaa->info.bIfaceIndex, sc->sc_xfer,
-           urio_config, URIO_T_MAX, sc, &sc->sc_mtx);
+           urio_config, URIO_T_MAX, sc, &sc->sc_lock);
 
        if (error) {
                DPRINTF("error=%s\n", usbd_errstr(error));
                goto detach;
        }
 
-       error = usb_fifo_attach(uaa->device, sc, &sc->sc_mtx,
+       error = usb_fifo_attach(uaa->device, sc, &sc->sc_lock,
            &urio_fifo_methods, &sc->sc_fifo,
            device_get_unit(dev), -1, uaa->info.bIfaceIndex,
            UID_ROOT, GID_OPERATOR, 0644);
@@ -395,9 +391,9 @@ urio_open(struct usb_fifo *fifo, int fflags)
 
        if (fflags & FREAD) {
                /* clear stall first */
-               mtx_lock(&sc->sc_mtx);
+               lockmgr(&sc->sc_lock, LK_EXCLUSIVE);
                sc->sc_flags |= URIO_FLAG_READ_STALL;
-               mtx_unlock(&sc->sc_mtx);
+               lockmgr(&sc->sc_lock, LK_RELEASE);
 
                if (usb_fifo_alloc_buffer(fifo,
                    usbd_xfer_max_len(sc->sc_xfer[URIO_T_RD]),
@@ -489,7 +485,7 @@ urio_detach(device_t dev)
 
        usbd_transfer_unsetup(sc->sc_xfer, URIO_T_MAX);
 
-       mtx_destroy(&sc->sc_mtx);
+       lockuninit(&sc->sc_lock);
 
        return (0);
 }
diff --git a/sys/bus/u4b/storage/urio/Makefile b/sys/bus/u4b/storage/urio/Makefile
new file mode 100644 (file)
index 0000000..5272766
--- /dev/null
@@ -0,0 +1,33 @@
+#
+# $FreeBSD: head/sys/modules/usb/urio/Makefile 249213 2013-04-06 19:12:49Z marius $
+#
+# Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+.PATH: ${.CURDIR}/..
+
+KMOD=  urio
+SRCS=   bus_if.h device_if.h opt_bus.h opt_usb.h usb_if.h usbdevs.h urio.c
+
+.include <bsd.kmod.mk>
index 4f74f90..5f95506 100644 (file)
@@ -2261,6 +2261,7 @@ bus/u4b/controller/usb_controller.c     optional usb
 # USB storage drivers
 #
 bus/u4b/storage/umass.c                        optional umass usb
+bus/u4b/storage/urio.c                 optional urio usb
 bus/u4b/storage/ustorage_fs.c          optional usfs usb
 #
 # USB network drivers
index 13fa354..96b6563 100644 (file)
@@ -2121,6 +2121,8 @@ device            umodem
 device         ums
 # eGalax USB touch screen
 device         uep
+# Diamond Rio 500 MP3 player
+device         urio
 # USB com devices
 device         "u3g"
 device         uark
index 90a3f86..f3aa278 100644 (file)
@@ -1955,6 +1955,8 @@ device            umodem
 device         ums
 # eGalax USB touch screen
 device         uep
+# Diamond Rio 500 MP3 player
+device         urio
 # USB com devices
 device         "u3g"
 device         uark