diff options
| author | Nick Hibma <n_hibma@FreeBSD.org> | 1998-12-13 23:04:35 +0000 |
|---|---|---|
| committer | Nick Hibma <n_hibma@FreeBSD.org> | 1998-12-13 23:04:35 +0000 |
| commit | eca58e5e008428c183aad9d47863e63b442cea31 (patch) | |
| tree | 1c48a1b1693651fec22243622f867c3eb70a86c9 /sys | |
| parent | b3a941181ee88cefdad7e7333d0b7b2708dd7740 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/amd64/conf/GENERIC | 5 | ||||
| -rw-r--r-- | sys/conf/files | 2 | ||||
| -rw-r--r-- | sys/dev/usb/ucom.c | 201 | ||||
| -rw-r--r-- | sys/dev/usb/umodem.c | 202 | ||||
| -rw-r--r-- | sys/i386/conf/GENERIC | 5 |
5 files changed, 413 insertions, 2 deletions
diff --git a/sys/amd64/conf/GENERIC b/sys/amd64/conf/GENERIC index 3f52d5981268a..305e1b63b1ca0 100644 --- a/sys/amd64/conf/GENERIC +++ b/sys/amd64/conf/GENERIC @@ -11,7 +11,7 @@ # device lines is present in the ./LINT configuration file. If you are # in doubt as to the purpose or necessity of a line, check first in LINT. # -# $Id: GENERIC,v 1.133 1998/12/04 18:01:23 wpaul Exp $ +# $Id: GENERIC,v 1.134 1998/12/09 23:28:43 n_hibma Exp $ machine "i386" cpu "I386_CPU" @@ -198,8 +198,11 @@ options SYSVSHM #device ukbd0 #device ulpt0 #device uhub0 +#device ucom0 +#device umodem0 #device hid0 #device ugen0 + # #options USB_DEBUG #options USBVERBOSE diff --git a/sys/conf/files b/sys/conf/files index 94f47c52f3066..9749d33833f1a 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -631,6 +631,8 @@ dev/usb/hid.c optional usb device-driver # be the inverse of the wanted one (MAKE_SET) dev/usb/ugen.c optional ugen device-driver #dev/usb/uhid.c optional hid device-driver +dev/usb/umodem.c optional umodem device-driver +dev/usb/ucom.c optional ucom device-driver dev/usb/ums.c optional ums device-driver dev/usb/ulpt.c optional ulpt device-driver dev/usb/ukbd.c optional ukbd device-driver diff --git a/sys/dev/usb/ucom.c b/sys/dev/usb/ucom.c new file mode 100644 index 0000000000000..235057706cb9b --- /dev/null +++ b/sys/dev/usb/ucom.c @@ -0,0 +1,201 @@ +/* $NetBSD: ucom.c,v 1.1 1998/12/02 22:47:19 augustss Exp $ */ + +/* + * Copyright (c) 1998 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Lennart Augustsson (augustss@carlstedt.se) at + * Carlstedt Research & Technology. + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include <dev/usb/usb_port.h> + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/kernel.h> +#include <sys/malloc.h> +#if defined(__NetBSD__) +#include <sys/device.h> +#include <sys/ioctl.h> +#elif defined(__FreeBSD__) +#include <sys/module.h> +#include <sys/bus.h> +#include <sys/ioccom.h> +#include <sys/conf.h> +#endif +#include <sys/tty.h> +#include <sys/file.h> +#include <sys/select.h> +#include <sys/proc.h> +#include <sys/vnode.h> +#include <sys/device.h> +#include <sys/poll.h> + +#include <dev/usb/usb.h> +#include <dev/usb/usbhid.h> + +#include <dev/usb/usbdi.h> +#include <dev/usb/usbdivar.h> +#include <dev/usb/usbdi_util.h> +#include <dev/usb/usbdevs.h> +#include <dev/usb/usb_quirks.h> +#include <dev/usb/hid.h> + +#ifdef USB_DEBUG +#define DPRINTF(x) if (ucomdebug) printf x +#define DPRINTFN(n,x) if (ucomdebug>(n)) printf x +int ucomdebug = 0; +#else +#define DPRINTF(x) +#define DPRINTFN(n,x) +#endif + +struct ucom_softc { + bdevice sc_dev; /* base device */ + usbd_interface_handle sc_iface; /* interface */ +}; + +#if defined(__NetBSD__) +int ucom_match __P((struct device *, struct cfdata *, void *)); +void ucom_attach __P((struct device *, struct device *, void *)); +#elif defined(__FreeBSD__) +static device_probe_t ucom_match; +static device_attach_t ucom_attach; +static device_detach_t ucom_detach; +#endif + +void ucom_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); +void ucom_disco __P((void *)); + +#if defined(__NetBSD__) +extern struct cfdriver ucom_cd; + +struct cfattach ucom_ca = { + sizeof(struct ucom_softc), ucom_match, ucom_attach +}; +#elif defined(__FreeBSD__) +static devclass_t ucom_devclass; + +static device_method_t ucom_methods[] = { + DEVMETHOD(device_probe, ucom_match), + DEVMETHOD(device_attach, ucom_attach), + DEVMETHOD(device_detach, ucom_detach), + {0,0} +}; + +static driver_t ucom_driver = { + "ucom", + ucom_methods, + DRIVER_TYPE_MISC, + sizeof(struct ucom_softc) +}; +#endif + + +#if defined(__NetBSD__) +int +ucom_match(parent, match, aux) + struct device *parent; + struct cfdata *match; + void *aux; +{ + struct usb_attach_arg *uaa = aux; +#elif defined(__FreeBSD__) +static int +ucom_match(device_t device) +{ + struct usb_attach_arg *uaa = device_get_ivars(device); +#endif + usb_interface_descriptor_t *id; + + if (!uaa->iface) + return (UMATCH_NONE); + id = usbd_get_interface_descriptor(uaa->iface); + if (id->bInterfaceClass != UCLASS_CDC || + id->bInterfaceSubClass != USUBCLASS_MODEM) + return (UMATCH_NONE); + return (UMATCH_IFACECLASS_IFACESUBCLASS); +} + +#if defined(__NetBSD__) +void +ucom_attach(parent, self, aux) + struct device *parent; + struct device *self; + void *aux; +{ + struct ucom_softc *sc = (struct ucom_softc *)self; + struct usb_attach_arg *uaa = aux; +#elif defined(__FreeBSD__) +static int +ucom_attach(device_t self) +{ + struct ucom_softc *sc = device_get_softc(self); + struct usb_attach_arg *uaa = device_get_ivars(self); +#endif + usbd_interface_handle iface = uaa->iface; + usb_interface_descriptor_t *id; + char devinfo[1024]; + + sc->sc_iface = iface; + id = usbd_get_interface_descriptor(iface); + usbd_devinfo(uaa->device, 0, devinfo); +#if defined(__FreeBSD__) + usb_device_set_desc(self, devinfo); + printf("%s%d", device_get_name(self), device_get_unit(self)); +#endif + + printf(": %s, iclass %d/%d\n", devinfo, id->bInterfaceClass, id->bInterfaceSubClass); + + ATTACH_SUCCESS_RETURN; +} + +#if defined(__FreeBSD__) +static int +ucom_detach(device_t self) +{ + struct ucom_softc *sc = device_get_softc(self); + char *devinfo = (char *) device_get_desc(self); + + if (devinfo) { + device_set_desc(self, NULL); + free(devinfo, M_USB); + } + + return 0; +} +#endif + +#if defined(__FreeBSD__) +DRIVER_MODULE(ucom, usb, ucom_driver, ucom_devclass, usb_driver_load, 0); +#endif + diff --git a/sys/dev/usb/umodem.c b/sys/dev/usb/umodem.c new file mode 100644 index 0000000000000..07cf6d418eadf --- /dev/null +++ b/sys/dev/usb/umodem.c @@ -0,0 +1,202 @@ +/* $NetBSD: umodem.c,v 1.1 1998/12/03 19:58:09 augustss Exp $ */ + +/* + * Copyright (c) 1998 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Lennart Augustsson (augustss@carlstedt.se) at + * Carlstedt Research & Technology. + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include <dev/usb/usb_port.h> + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/kernel.h> +#include <sys/malloc.h> +#if defined(__NetBSD__) +#include <sys/device.h> +#include <sys/ioctl.h> +#elif defined(__FreeBSD__) +#include <sys/module.h> +#include <sys/bus.h> +#include <sys/ioccom.h> +#include <sys/conf.h> +#endif +#include <sys/tty.h> +#include <sys/file.h> +#include <sys/select.h> +#include <sys/proc.h> +#include <sys/vnode.h> +#include <sys/device.h> +#include <sys/poll.h> + +#include <dev/usb/usb.h> +#include <dev/usb/usbhid.h> + +#include <dev/usb/usbdi.h> +#include <dev/usb/usbdivar.h> +#include <dev/usb/usbdi_util.h> +#include <dev/usb/usbdevs.h> +#include <dev/usb/usb_quirks.h> +#include <dev/usb/hid.h> + +#ifdef USB_DEBUG +#define DPRINTF(x) if (umodemdebug) printf x +#define DPRINTFN(n,x) if (umodemdebug>(n)) printf x +int umodemdebug = 0; +#else +#define DPRINTF(x) +#define DPRINTFN(n,x) +#endif + +struct umodem_softc { + bdevice sc_dev; /* base device */ + usbd_interface_handle sc_iface; /* interface */ +}; + +#if defined(__NetBSD__) +int umodem_match __P((struct device *, struct cfdata *, void *)); +void umodem_attach __P((struct device *, struct device *, void *)); +#elif defined(__FreeBSD__) +static device_probe_t umodem_match; +static device_attach_t umodem_attach; +static device_detach_t umodem_detach; +#endif + +void umodem_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); +void umodem_disco __P((void *)); + +#if defined(__NetBSD__) +extern struct cfdriver umodem_cd; + +struct cfattach umodem_ca = { + sizeof(struct umodem_softc), umodem_match, umodem_attach +}; +#elif defined(__FreeBSD__) +static devclass_t umodem_devclass; + +static device_method_t umodem_methods[] = { + DEVMETHOD(device_probe, umodem_match), + DEVMETHOD(device_attach, umodem_attach), + DEVMETHOD(device_detach, umodem_detach), + {0,0} +}; + +static driver_t umodem_driver = { + "umodem", + umodem_methods, + DRIVER_TYPE_MISC, + sizeof(struct umodem_softc) +}; +#endif + +#if defined(__NetBSD__) +int +umodem_match(parent, match, aux) + struct device *parent; + struct cfdata *match; + void *aux; +{ + struct usb_attach_arg *uaa = aux; +#elif defined(__FreeBSD__) +static int +umodem_match(device_t device) +{ + struct usb_attach_arg *uaa = device_get_ivars(device); +#endif + + usb_interface_descriptor_t *id; + + if (!uaa->iface) + return (UMATCH_NONE); + id = usbd_get_interface_descriptor(uaa->iface); + if (id->bInterfaceClass != UCLASS_CDC || + id->bInterfaceSubClass != USUBCLASS_MODEM) + return (UMATCH_NONE); + return (UMATCH_IFACECLASS_IFACESUBCLASS); +} + +#if defined(__NetBSD__) +void +umodem_attach(parent, self, aux) + struct device *parent; + struct device *self; + void *aux; +{ + struct umodem_softc *sc = (struct umodem_softc *)self; + struct usb_attach_arg *uaa = aux; +#elif defined(__FreeBSD__) +static int +umodem_attach(device_t self) +{ + struct umodem_softc *sc = device_get_softc(self); + struct usb_attach_arg *uaa = device_get_ivars(self); +#endif + + usbd_interface_handle iface = uaa->iface; + usb_interface_descriptor_t *id; + char devinfo[1024]; + + sc->sc_iface = iface; + id = usbd_get_interface_descriptor(iface); + usbd_devinfo(uaa->device, 0, devinfo); +#if defined(__FreeBSD__) + usb_device_set_desc(self, devinfo); + printf("%s%d", device_get_name(self), device_get_unit(self)); +#endif + + printf(": %s, iclass %d/%d\n", devinfo, id->bInterfaceClass, id->bInterfaceSubClass); + + ATTACH_SUCCESS_RETURN; +} + +#if defined(__FreeBSD__) +static int +umodem_detach(device_t self) +{ + struct umodem_softc *sc = device_get_softc(self); + char *devinfo = (char *) device_get_desc(self); + + if (devinfo) { + device_set_desc(self, NULL); + free(devinfo, M_USB); + } + + return 0; +} +#endif + +#if defined(__FreeBSD__) +DRIVER_MODULE(umodem, usb, umodem_driver, umodem_devclass, usb_driver_load, 0); +#endif + diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC index 3f52d5981268a..305e1b63b1ca0 100644 --- a/sys/i386/conf/GENERIC +++ b/sys/i386/conf/GENERIC @@ -11,7 +11,7 @@ # device lines is present in the ./LINT configuration file. If you are # in doubt as to the purpose or necessity of a line, check first in LINT. # -# $Id: GENERIC,v 1.133 1998/12/04 18:01:23 wpaul Exp $ +# $Id: GENERIC,v 1.134 1998/12/09 23:28:43 n_hibma Exp $ machine "i386" cpu "I386_CPU" @@ -198,8 +198,11 @@ options SYSVSHM #device ukbd0 #device ulpt0 #device uhub0 +#device ucom0 +#device umodem0 #device hid0 #device ugen0 + # #options USB_DEBUG #options USBVERBOSE |
