Before 1.5:
-----------
-Add isoc to OHCI driver.
+Reset toggle on SET_INTERFACE (USB 1.1)
-Port FreeBSD umass driver.
+Allow interrupt out endpoints. (USB 1.1)
-----------
+Make flow control work in ucom.
+
+Figure out why uvisor is so slow.
+
+Translate UFI commands?
+
Add lots of bus_dmamap_sync().
Do bandwidth accounting.
Make it possible to open any device in a "generic" way, i.e., like ugen.
-Rewrite mouse and keyboard driver to handle devices which use the
-report ID. One way would be to attach ums and ukbd to uhid.
-
Rotate the QHs for bulk transport to get fairer scheduling.
Change HC drivers to queue multiple request for an endpoint
Change what's done at watchdog timeout inb if_{a,c,k}ue.c; what we have
now doesn't work because it's done in an interrupt context.
+Factor out the common code from the Ethernet drivers and reuse that.
+
Rewrite HID driver to handle report IDs properly. Perhaps there should
be a hiddev to which hid with different IDs can attach?
+Get rid of hcpriv.
-/* $OpenBSD: hid.c,v 1.6 2000/03/30 16:19:32 aaron Exp $ */
-/* $NetBSD: hid.c,v 1.13 2000/03/27 12:33:53 augustss Exp $ */
+/* $OpenBSD: hid.c,v 1.7 2000/04/14 22:50:24 aaron Exp $ */
+/* $NetBSD: hid.c,v 1.14 2000/04/06 22:58:32 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/hid.c,v 1.11 1999/11/17 22:33:39 n_hibma Exp $ */
/*
{
struct hid_item *c = &s->cur;
unsigned int bTag, bType, bSize;
- struct hid_location oldloc;
+ u_int32_t oldpos;
u_char *data;
int32_t dval;
u_char *p;
break;
case 11: /* Pop */
hi = c->next;
- oldloc = c->loc;
+ oldpos = c->loc.pos;
s->cur = *hi;
- c->loc = oldloc;
+ c->loc.pos = oldpos;
free(hi, M_TEMP);
break;
default:
-/* $OpenBSD: if_aue.c,v 1.3 2000/04/04 22:52:29 aaron Exp $ */
-/* $NetBSD: if_aue.c,v 1.37 2000/04/02 21:25:41 augustss Exp $ */
+/* $OpenBSD: if_aue.c,v 1.4 2000/04/14 22:50:24 aaron Exp $ */
+/* $NetBSD: if_aue.c,v 1.38 2000/04/04 20:16:19 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) {
return;
}
- printf("%s: usb error on intr: %s\n", USBDEVNAME(sc->aue_dev),
- usbd_errstr(status));
+ sc->aue_intr_errs++;
+ if (usbd_ratecheck(&sc->aue_rx_notice)) {
+ printf("%s: %u usb errors on intr: %s\n",
+ USBDEVNAME(sc->aue_dev), sc->aue_rx_errs,
+ usbd_errstr(status));
+ sc->aue_intr_errs = 0;
+ }
if (status == USBD_STALLED)
usbd_clear_endpoint_stall(sc->aue_ep[AUE_ENDPT_RX]);
return;
/*
* A frame has been uploaded: pass the resulting mbuf chain up to
* the higher level protocols.
- *
- * Grrr. Receiving transfers larger than about 1152 bytes sometimes
- * doesn't work. We get an incomplete frame. In order to avoid
- * this, we queue up RX transfers that are shorter than a full sized
- * frame. If the received frame is larger than our transfer size,
- * we snag the rest of the data using a second transfer. Does this
- * hurt performance? Yes. But after fighting with this stupid thing
- * for three days, I'm willing to settle. I'd rather have reliable
- * receive performance that fast but spotty performance.
*/
Static void
aue_rxeof(xfer, priv, status)
-/* $OpenBSD: if_auereg.h,v 1.1 2000/03/28 19:37:47 aaron Exp $ */
-/* $NetBSD: if_auereg.h,v 1.9 2000/03/24 22:13:23 augustss Exp $ */
+/* $OpenBSD: if_auereg.h,v 1.2 2000/04/14 22:50:25 aaron Exp $ */
+/* $NetBSD: if_auereg.h,v 1.12 2000/04/04 20:16:19 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
char aue_dying;
char aue_attached;
u_int aue_rx_errs;
+ u_int aue_intr_errs;
struct timeval aue_rx_notice;
};
-/* $OpenBSD: if_cuereg.h,v 1.1 2000/03/28 19:37:47 aaron Exp $ */
-/* $NetBSD: if_cuereg.h,v 1.9 2000/03/24 22:13:24 augustss Exp $ */
+/* $OpenBSD: if_cuereg.h,v 1.2 2000/04/14 22:50:25 aaron Exp $ */
+/* $NetBSD: if_cuereg.h,v 1.11 2000/04/08 20:54:38 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
u_int16_t cue_product;
int cue_ed[CUE_ENDPT_MAX];
usbd_pipe_handle cue_ep[CUE_ENDPT_MAX];
- int cue_unit;
u_int8_t cue_mctab[CUE_MCAST_TABLE_LEN];
int cue_if_flags;
u_int16_t cue_rxfilt;
-/* $OpenBSD: ucom.c,v 1.2 2000/04/08 20:03:33 aaron Exp $ */
-/* $NetBSD: ucom.c,v 1.16 2000/03/27 12:33:55 augustss Exp $ */
+/* $OpenBSD: ucom.c,v 1.3 2000/04/14 22:50:25 aaron Exp $ */
+/* $NetBSD: ucom.c,v 1.22 2000/04/14 14:21:55 augustss Exp $ */
/*
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
+ * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
+/*
+ * This code is very heavily based on the 16550 driver, com.c.
+ */
#include <sys/param.h>
#include <sys/systm.h>
#define UCOMDIALOUT(x) (minor(x) & UCOMDIALOUT_MASK)
#define UCOMCALLUNIT(x) (minor(x) & UCOMCALLUNIT_MASK)
-/*
- * These are the maximum number of bytes transferred per frame.
- * If some really high speed devices should use this driver they
- * may need to be increased, but this is good enough for modems.
- */
-#define UCOMIBUFSIZE 64
-#define UCOMOBUFSIZE 256
-
struct ucom_softc {
USBBASEDEVICE sc_dev; /* base device */
usbd_pipe_handle sc_bulkin_pipe; /* bulk in pipe */
usbd_xfer_handle sc_ixfer; /* read request */
u_char *sc_ibuf; /* read buffer */
+ u_int sc_ibufsize; /* read buffer size */
+ u_int sc_ibufsizepad; /* read buffer size padded */
int sc_bulkout_no; /* bulk out endpoint address */
usbd_pipe_handle sc_bulkout_pipe;/* bulk out pipe */
usbd_xfer_handle sc_oxfer; /* write request */
u_char *sc_obuf; /* write buffer */
+ u_int sc_obufsize; /* write buffer size */
+ u_int sc_obufsizepad; /* write buffer size padded */
struct ucom_methods *sc_methods;
void *sc_parent;
int sc_swflags;
u_char sc_opening; /* lock during open */
+ int sc_refcnt;
u_char sc_dying; /* disconnecting */
};
Static int ucomparam __P((struct tty *, struct termios *));
Static void ucomstart __P((struct tty *));
Static void ucom_shutdown __P((struct ucom_softc *));
+Static int ucom_do_ioctl __P((struct ucom_softc *, u_long, caddr_t,
+ int, struct proc *));
Static void ucom_dtr __P((struct ucom_softc *, int));
Static void ucom_rts __P((struct ucom_softc *, int));
Static void ucom_break __P((struct ucom_softc *, int));
sc->sc_iface = uca->iface;
sc->sc_bulkout_no = uca->bulkout;
sc->sc_bulkin_no = uca->bulkin;
+ sc->sc_ibufsize = uca->ibufsize;
+ sc->sc_ibufsizepad = uca->ibufsizepad;
+ sc->sc_obufsize = uca->obufsize;
+ sc->sc_obufsizepad = uca->obufsizepad;
sc->sc_methods = uca->methods;
sc->sc_parent = uca->arg;
sc->sc_portno = uca->portno;
{
struct ucom_softc *sc = (struct ucom_softc *)self;
int maj, mn;
+ int s;
DPRINTF(("ucom_detach: sc=%p flags=%d tp=%p\n",
sc, flags, sc->sc_tty));
}
#endif
- /* XXX Use reference count? */
+ s = splusb();
+ if (--sc->sc_refcnt >= 0) {
+ /* Wake everyone.. how? */
+ /* Wait for processes to go away. */
+ usb_detach_wait(USBDEV(sc->sc_dev));
+ }
+ splx(s);
/* locate the major number */
for (maj = 0; maj < nchrdev; maj++)
/* Nuke the vnodes for any open instances. */
mn = self->dv_unit;
+ DPRINTF(("ucom_detach: maj=%d mn=%d\n", maj, mn));
vdevgone(maj, mn, mn, VCHR);
- vdevgone(maj, mn, mn | UCOMDIALOUT_MASK, VCHR);
- vdevgone(maj, mn, mn | UCOMCALLUNIT_MASK, VCHR);
+ vdevgone(maj, mn | UCOMDIALOUT_MASK, mn | UCOMDIALOUT_MASK, VCHR);
+ vdevgone(maj, mn | UCOMCALLUNIT_MASK, mn | UCOMCALLUNIT_MASK, VCHR);
/* Detach and free the tty. */
tty_detach(sc->sc_tty);
*/
while (sc->sc_opening)
tsleep(&sc->sc_opening, PRIBIO, "ucomop", 0);
+
+ if (sc->sc_dying) {
+ splx(s);
+ return (EIO);
+ }
sc->sc_opening = 1;
#if defined(__NetBSD__)
tp->t_dev = dev;
+ if (sc->sc_methods->ucom_open != NULL) {
+ error = sc->sc_methods->ucom_open(sc->sc_parent,
+ sc->sc_portno);
+ if (error) {
+ ucom_cleanup(sc);
+ return (error);
+ }
+ }
+
ucom_status_change(sc);
/*
usbd_close_pipe(sc->sc_bulkout_pipe);
return (ENOMEM);
}
- sc->sc_ibuf = usbd_alloc_buffer(sc->sc_ixfer, UCOMIBUFSIZE);
+ sc->sc_ibuf = usbd_alloc_buffer(sc->sc_ixfer,
+ sc->sc_ibufsizepad);
if (sc->sc_ibuf == NULL) {
usbd_free_xfer(sc->sc_ixfer);
usbd_close_pipe(sc->sc_bulkin_pipe);
usbd_close_pipe(sc->sc_bulkout_pipe);
return (ENOMEM);
}
- sc->sc_obuf = usbd_alloc_buffer(sc->sc_oxfer, UCOMOBUFSIZE);
+ sc->sc_obuf = usbd_alloc_buffer(sc->sc_oxfer,
+ sc->sc_obufsizepad);
if (sc->sc_obuf == NULL) {
usbd_free_xfer(sc->sc_oxfer);
usbd_free_xfer(sc->sc_ixfer);
return (ENOMEM);
}
- if (sc->sc_methods->ucom_open != NULL)
- sc->sc_methods->ucom_open(sc->sc_parent, sc->sc_portno);
-
ucomstartread(sc);
}
sc->sc_opening = 0;
if (!ISSET(tp->t_state, TS_ISOPEN))
return (0);
+ sc->sc_refcnt++;
+
(*linesw[tp->t_line].l_close)(tp, flag);
ttyclose(tp);
- if (sc->sc_dying)
- return (0);
-
#if defined(__NetBSD__)
if (!ISSET(tp->t_state, TS_ISOPEN) && tp->t_wopen == 0) {
#else
if (sc->sc_methods->ucom_close != NULL)
sc->sc_methods->ucom_close(sc->sc_parent, sc->sc_portno);
+ if (--sc->sc_refcnt < 0)
+ usb_detach_wakeup(USBDEV(sc->sc_dev));
+
return (0);
}
{
struct ucom_softc *sc = ucom_cd.cd_devs[UCOMUNIT(dev)];
struct tty *tp = sc->sc_tty;
+ int error;
if (sc->sc_dying)
return (EIO);
- return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
+ sc->sc_refcnt++;
+ error = ((*linesw[tp->t_line].l_read)(tp, uio, flag));
+ if (--sc->sc_refcnt < 0)
+ usb_detach_wakeup(USBDEV(sc->sc_dev));
+ return (error);
}
int
{
struct ucom_softc *sc = ucom_cd.cd_devs[UCOMUNIT(dev)];
struct tty *tp = sc->sc_tty;
+ int error;
if (sc->sc_dying)
return (EIO);
- return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
+ sc->sc_refcnt++;
+ error = ((*linesw[tp->t_line].l_write)(tp, uio, flag));
+ if (--sc->sc_refcnt < 0)
+ usb_detach_wakeup(USBDEV(sc->sc_dev));
+ return (error);
}
struct tty *
struct proc *p;
{
struct ucom_softc *sc = ucom_cd.cd_devs[UCOMUNIT(dev)];
+ int error;
+
+ sc->sc_refcnt++;
+ error = ucom_do_ioctl(sc, cmd, data, flag, p);
+ if (--sc->sc_refcnt < 0)
+ usb_detach_wakeup(USBDEV(sc->sc_dev));
+ return (error);
+}
+
+Static int
+ucom_do_ioctl(sc, cmd, data, flag, p)
+ struct ucom_softc *sc;
+ u_long cmd;
+ caddr_t data;
+ int flag;
+ struct proc *p;
+{
struct tty *tp = sc->sc_tty;
int error;
int s;
return (error);
}
-void
+Static void
tiocm_to_ucom(sc, how, ttybits)
struct ucom_softc *sc;
int how, ttybits;
ucom_rts(sc, (sc->sc_mcr & UMCR_RTS) != 0);
}
-int
+Static int
ucom_to_tiocm(sc)
struct ucom_softc *sc;
{
return (ttybits);
}
-void
+Static void
ucom_break(sc, onoff)
struct ucom_softc *sc;
int onoff;
UCOM_SET_BREAK, onoff);
}
-void
+Static void
ucom_dtr(sc, onoff)
struct ucom_softc *sc;
int onoff;
UCOM_SET_DTR, onoff);
}
-void
+Static void
ucom_rts(sc, onoff)
struct ucom_softc *sc;
int onoff;
}
}
-int
+Static int
ucomparam(tp, t)
struct tty *tp;
struct termios *t;
/*
* (un)block input via hw flowcontrol
*/
-void
+Static void
ucom_hwiflow(sc)
struct ucom_softc *sc;
{
+ DPRINTF(("ucom_hwiflow:\n"));
#if 0
XXX
bus_space_tag_t iot = sc->sc_iot;
#endif
}
-void
+Static void
ucomstart(tp)
struct tty *tp;
{
s = spltty();
if (ISSET(tp->t_state, TS_BUSY | TS_TIMEOUT | TS_TTSTOP)) {
- DPRINTFN(4,("ucomstart: stopped\n"));
+ DPRINTFN(4,("ucomstart: no go, state=0x%x\n", tp->t_state));
goto out;
}
if (sc->sc_tx_stopped)
SET(tp->t_state, TS_BUSY);
- if (cnt > UCOMOBUFSIZE) {
+ if (cnt > sc->sc_obufsize) {
DPRINTF(("ucomstart: big buffer %d chars\n", cnt));
- cnt = UCOMOBUFSIZE;
+ cnt = sc->sc_obufsize;
}
- memcpy(sc->sc_obuf, data, cnt);
+ if (sc->sc_methods->ucom_write != NULL)
+ sc->sc_methods->ucom_write(sc->sc_parent, sc->sc_portno,
+ sc->sc_obuf, data, &cnt);
+ else
+ memcpy(sc->sc_obuf, data, cnt);
DPRINTFN(4,("ucomstart: %d chars\n", cnt));
usbd_setup_xfer(sc->sc_oxfer, sc->sc_bulkout_pipe,
struct tty *tp;
int flag;
{
- struct ucom_softc *sc = ucom_cd.cd_devs[UCOMUNIT(tp->t_dev)];
+ DPRINTF(("ucomstop: flag=%d\n", flag));
+#if 0
+ /*struct ucom_softc *sc = ucom_cd.cd_devs[UCOMUNIT(tp->t_dev)];*/
int s;
- DPRINTF(("ucomstop: %d\n", flag));
s = spltty();
if (ISSET(tp->t_state, TS_BUSY)) {
DPRINTF(("ucomstop: XXX\n"));
- sc->sc_tx_stopped = 1;
+ /* sc->sc_tx_stopped = 1; */
if (!ISSET(tp->t_state, TS_TTSTOP))
SET(tp->t_state, TS_FLUSH);
}
splx(s);
-
+#endif
#if !defined(__NetBSD__)
return 0;
#endif
}
-void
+Static void
ucomwritecb(xfer, p, status)
usbd_xfer_handle xfer;
usbd_private_handle p;
splx(s);
}
-usbd_status
+Static usbd_status
ucomstartread(sc)
struct ucom_softc *sc;
{
DPRINTFN(5,("ucomstartread: start\n"));
usbd_setup_xfer(sc->sc_ixfer, sc->sc_bulkin_pipe,
(usbd_private_handle)sc,
- sc->sc_ibuf, UCOMIBUFSIZE,
+ sc->sc_ibuf, sc->sc_ibufsize,
USBD_SHORT_XFER_OK | USBD_NO_COPY,
USBD_NO_TIMEOUT, ucomreadcb);
err = usbd_transfer(sc->sc_ixfer);
return (USBD_NORMAL_COMPLETION);
}
-void
+Static void
ucomreadcb(xfer, p, status)
usbd_xfer_handle xfer;
usbd_private_handle p;
usbd_get_xfer_status(xfer, NULL, (void **)&cp, &cc, NULL);
DPRINTFN(5,("ucomreadcb: got %d chars, tp=%p\n", cc, tp));
+ if (sc->sc_methods->ucom_read != NULL)
+ sc->sc_methods->ucom_read(sc->sc_parent, sc->sc_portno,
+ &cp, &cc);
+
s = spltty();
/* Give characters to tty layer. */
while (cc-- > 0) {
DPRINTFN(7,("ucomreadcb: char=0x%02x\n", *cp));
if ((*rint)(*cp++, tp) == -1) {
/* XXX what should we do? */
+ printf("%s: lost %d chars\n", USBDEVNAME(sc->sc_dev),
+ cc);
break;
}
}
}
}
-void
+Static void
ucom_cleanup(sc)
struct ucom_softc *sc;
{
-/* $OpenBSD: ucomvar.h,v 1.2 2000/04/12 16:19:12 aaron Exp $ */
-/* $NetBSD: ucomvar.h,v 1.2 2000/02/08 09:18:02 augustss Exp $ */
+/* $OpenBSD: ucomvar.h,v 1.3 2000/04/14 22:50:25 aaron Exp $ */
+/* $NetBSD: ucomvar.h,v 1.5 2000/04/14 14:21:55 augustss Exp $ */
/*
* Copyright (c) 1999 The NetBSD Foundation, Inc.
#define CLR(t, f) (t) &= ~(f)
#define ISSET(t, f) ((t) & (f))
-#if !defined(__OpenBSD__)
+#if defined(__NetBSD__)
#include "locators.h"
#endif
int (*ucom_param)__P((void *sc, int portno, struct termios *));
int (*ucom_ioctl)__P((void *sc, int portno, u_long cmd,
caddr_t data, int flag, struct proc *p));
- void (*ucom_open)__P((void *sc, int portno));
+ int (*ucom_open)__P((void *sc, int portno));
void (*ucom_close)__P((void *sc, int portno));
+ void (*ucom_read)__P((void *sc, int portno, u_char **ptr,
+ u_int32_t *count));
+ void (*ucom_write)__P((void *sc, int portno, u_char *to, u_char *from,
+ u_int32_t *count));
};
/* modem control register */
int portno;
int bulkin;
int bulkout;
+ u_int ibufsize;
+ u_int ibufsizepad;
+ u_int obufsize;
+ u_int obufsizepad;
usbd_device_handle device;
usbd_interface_handle iface;
struct ucom_methods *methods;
int ucomprint __P((void *aux, const char *pnp));
#if defined(__OpenBSD__)
-int ucomsubmatch __P((struct device *parent, void *cf, void *aux));
+int ucomsubmatch __P((struct device *parent, void *match, void *aux));
#else
int ucomsubmatch __P((struct device *parent, struct cfdata *cf, void *aux));
#endif
-void ucom_status_change __P((struct ucom_softc *sc));
+void ucom_status_change __P((struct ucom_softc *));
-/* $OpenBSD: uhci.c,v 1.11 2000/03/30 16:19:33 aaron Exp $ */
-/* $NetBSD: uhci.c,v 1.108 2000/03/29 18:55:36 augustss Exp $ */
+/* $OpenBSD: uhci.c,v 1.12 2000/04/14 22:50:25 aaron Exp $ */
+/* $NetBSD: uhci.c,v 1.110 2000/04/14 14:11:36 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/uhci.c,v 1.33 1999/11/17 22:33:41 n_hibma Exp $ */
/*
__P((uhci_soft_qh_t *, uhci_soft_qh_t *));
#ifdef UHCI_DEBUG
+Static void uhci_dump_all __P((uhci_softc_t *));
Static void uhci_dumpregs __P((uhci_softc_t *));
Static void uhci_dump_qhs __P((uhci_soft_qh_t *));
Static void uhci_dump_qh __P((uhci_soft_qh_t *));
Static void uhci_dump_tds __P((uhci_soft_td_t *));
Static void uhci_dump_td __P((uhci_soft_td_t *));
Static void uhci_dump_ii __P((uhci_intr_info_t *ii));
+Static void uhci_dump __P((void));
#endif
#define UWRITE1(sc, r, x) bus_space_write_1((sc)->iot, (sc)->ioh, (r), (x))
for (; pqh->hlink != sqh; pqh = pqh->hlink) {
#if defined(DIAGNOSTIC) || defined(UHCI_DEBUG)
if (le32toh(pqh->qh.qh_hlink) & UHCI_PTR_T) {
- printf("uhci_find_qh: QH not found\n");
+ printf("uhci_find_prev_qh: QH not found\n");
return (NULL);
}
#endif
SIMPLEQ_REMOVE_HEAD(&sc->sc_free_xfers, xfer, next);
#ifdef DIAGNOSTIC
if (xfer->busy_free != XFER_FREE) {
- printf("uhci_freex: xfer=%p not free, 0x%08x\n", xfer,
+ printf("uhci_allocx: xfer=%p not free, 0x%08x\n", xfer,
xfer->busy_free);
}
#endif
* Handle suspend/resume.
*
* We need to switch to polling mode here, because this routine is
- * called from an intterupt context. This is all right since we
+ * called from an interrupt context. This is all right since we
* are almost suspended anyway.
*/
void
}
-#if 0
+#if 1
void
uhci_dump()
{
- uhci_softc_t *sc = thesc;
+ uhci_dump_all(thesc);
+}
+#endif
+void
+uhci_dump_all(sc)
+ uhci_softc_t *sc;
+{
uhci_dumpregs(sc);
printf("intrs=%d\n", sc->sc_bus.no_intrs);
- printf("framelist[i].link = %08x\n", sc->sc_framelist[0].link);
- uhci_dump_qh(sc->sc_ctl_start->qh.hlink);
+ /*printf("framelist[i].link = %08x\n", sc->sc_framelist[0].link);*/
+ uhci_dump_qh(sc->sc_ctl_start);
}
-#endif
void
printf("%s: host controller halted\n",
USBDEVNAME(sc->sc_bus.bdev));
sc->sc_dying = 1;
+#ifdef UHCI_DEBUG
+ uhci_dump_all(sc);
+#endif
+
}
if (ack) /* acknowledge the ints */
-/* $OpenBSD: uhcireg.h,v 1.4 2000/03/28 19:37:49 aaron Exp $ */
-/* $NetBSD: uhcireg.h,v 1.9 1999/11/20 00:57:09 augustss Exp $ */
+/* $OpenBSD: uhcireg.h,v 1.5 2000/04/14 22:50:26 aaron Exp $ */
+/* $NetBSD: uhcireg.h,v 1.10 2000/04/06 23:44:21 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/uhcireg.h,v 1.12 1999/11/17 22:33:42 n_hibma Exp $ */
/*
#define UHCI_PTR_VF 0x00000004
/*
- * The Queue Heads and Transfer Descriptors and accessed
- * by both the CPU and the USB controller which runs
+ * The Queue Heads and Transfer Descriptors are accessed
+ * by both the CPU and the USB controller which run
* concurrently. This means that they have to be accessed
* with great care. As long as the data structures are
* not linked into the controller's frame list they cannot
-/* $OpenBSD: uhcivar.h,v 1.7 2000/03/28 19:37:49 aaron Exp $ */
-/* $NetBSD: uhcivar.h,v 1.27 2000/03/25 18:02:33 augustss Exp $ */
+/* $OpenBSD: uhcivar.h,v 1.8 2000/04/14 22:50:26 aaron Exp $ */
+/* $NetBSD: uhcivar.h,v 1.28 2000/04/06 23:44:21 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/uhcivar.h,v 1.14 1999/11/17 22:33:42 n_hibma Exp $ */
/*
/*
* To avoid having 1024 TDs for each isochronous transfer we introduce
* a virtual frame list. Every UHCI_VFRAMELIST_COUNT entries in the real
- * frame list points to a non-active TD. These, in turn, which form the
+ * frame list points to a non-active TD. These, in turn, form the
* starts of the virtual frame list. This also has the advantage that it
- * simplifies linking in/out TD/QH in the schedule.
+ * simplifies linking in/out of TDs/QHs in the schedule.
* Furthermore, initially each of the inactive TDs point to an inactive
* QH that forms the start of the interrupt traffic for that slot.
* Each of these QHs point to the same QH that is the start of control
- * traffic.
+ * traffic. This QH points at another QH which is the start of the
+ * bulk traffic.
*
* UHCI_VFRAMELIST_COUNT should be a power of 2 and <= UHCI_FRAMELIST_COUNT.
*/
LIST_HEAD(, uhci_intr_info) sc_intrhead;
- /* Info for the root hub interrupt channel. */
- int sc_ival; /* time between root hug intrs */
+ /* Info for the root hub interrupt "pipe". */
+ int sc_ival; /* time between root hub intrs */
usbd_xfer_handle sc_intr_xfer; /* root hub interrupt transfer */
usb_callout_t sc_poll_handle;
void *sc_powerhook; /* cookie from power hook */
void *sc_shutdownhook; /* cookie from shutdown hook */
- device_ptr_t sc_child; /* /dev/usb device */
+ device_ptr_t sc_child; /* /dev/usb# device */
} uhci_softc_t;
usbd_status uhci_init __P((uhci_softc_t *));
-/* $OpenBSD: uhid.c,v 1.9 2000/03/30 16:19:33 aaron Exp $ */
-/* $NetBSD: uhid.c,v 1.36 2000/03/27 12:33:56 augustss Exp $ */
+/* $OpenBSD: uhid.c,v 1.10 2000/04/14 22:50:26 aaron Exp $ */
+/* $NetBSD: uhid.c,v 1.37 2000/04/14 14:12:47 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/uhid.c,v 1.22 1999/11/17 22:33:43 n_hibma Exp $ */
/*
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
+#include <sys/signalvar.h>
#if defined(__NetBSD__) || defined(__OpenBSD__)
#include <sys/device.h>
#include <sys/ioctl.h>
struct clist sc_q;
struct selinfo sc_rsel;
+ struct proc *sc_async; /* process that wants SIGIO */
u_char sc_state; /* driver state */
#define UHID_OPEN 0x01 /* device is open */
#define UHID_ASLP 0x02 /* waiting for device data */
wakeup(&sc->sc_q);
}
selwakeup(&sc->sc_rsel);
+ if (sc->sc_async != NULL) {
+ DPRINTFN(3, ("uhid_intr: sending SIGIO %p\n", sc->sc_async));
+ psignal(sc->sc_async, SIGIO);
+ }
}
int
sc->sc_state &= ~UHID_IMMED;
+ sc->sc_async = 0;
+
return (0);
}
sc->sc_state &= ~UHID_OPEN;
+ sc->sc_async = 0;
+
return (0);
}
/* All handled in the upper FS layer. */
break;
+ case FIOASYNC:
+ if (*(int *)addr) {
+ if (sc->sc_async != NULL)
+ return (EBUSY);
+ sc->sc_async = p;
+ DPRINTF(("uhid_do_ioctl: FIOASYNC %p\n", p));
+ } else
+ sc->sc_async = NULL;
+ break;
+
+ /* XXX this is not the most general solution. */
+ case TIOCSPGRP:
+ if (sc->sc_async == NULL)
+ return (EINVAL);
+ if (*(int *)addr != sc->sc_async->p_pgid)
+ return (EPERM);
+ break;
+
case USB_GET_REPORT_DESC:
rd = (struct usb_ctl_report_desc *)addr;
size = min(sc->sc_repdesc_size, sizeof rd->data);
-/* $OpenBSD: ulpt.c,v 1.2 2000/03/30 16:19:33 aaron Exp $ */
-/* $NetBSD: ulpt.c,v 1.35 2000/03/29 18:24:53 augustss Exp $ */
+/* $OpenBSD: ulpt.c,v 1.3 2000/04/14 22:50:27 aaron Exp $ */
+/* $NetBSD: ulpt.c,v 1.36 2000/04/14 14:12:11 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/ulpt.c,v 1.24 1999/11/17 22:33:44 n_hibma Exp $ */
/*
#if 0
/*
- * This code is disabled because for some mysterious it causes
+ * This code is disabled because for some mysterious reason it causes
* printing not to work. But only sometimes, and mostly with
* UHCI and less often with OHCI. *sigh*
*/
-/* $OpenBSD: umass.c,v 1.5 2000/04/08 20:28:07 csapuntz Exp $ */
-/* $NetBSD: umass.c,v 1.31 2000/04/03 12:31:34 augustss Exp $ */
+/* $OpenBSD: umass.c,v 1.6 2000/04/14 22:50:28 aaron Exp $ */
+/* $NetBSD: umass.c,v 1.33 2000/04/06 13:52:04 augustss Exp $ */
/*-
* Copyright (c) 1999 MAEKAWA Masahide <bishop@rr.iij4u.or.jp>,
* Nick Hibma <n_hibma@freebsd.org>
USB_ATTACH_START(umass, sc, uaa);
usb_interface_descriptor_t *id;
usb_endpoint_descriptor_t *ed;
+ const char *sSubclass, *sProto;
char devinfo[1024];
int i, bno;
int err;
id = usbd_get_interface_descriptor(sc->iface);
printf("%s: %s\n", USBDEVNAME(sc->sc_dev), devinfo);
- printf("%s: using ", USBDEVNAME(sc->sc_dev));
- switch (sc->proto & PROTO_COMMAND) {
- case PROTO_SCSI:
- printf("SCSI");
+ switch (id->bInterfaceSubClass) {
+ case UISUBCLASS_SCSI:
+ sSubclass = "SCSI";
break;
- case PROTO_8070:
- printf("8070i");
+ case UISUBCLASS_UFI:
+ sSubclass = "UFI";
break;
- case PROTO_UFI:
- printf("UFI");
+ case UISUBCLASS_SFF8020I:
+ sSubclass = "SFF8020i";
+ break;
+ case UISUBCLASS_SFF8070I:
+ sSubclass = "SFF8070i";
+ break;
+ case UISUBCLASS_QIC157:
+ sSubclass = "QIC157";
break;
default:
- printf("(unknown 0x%02x)", sc->proto&PROTO_COMMAND);
+ sSubclass = "unknown";
break;
}
- printf(" over ");
- switch (sc->proto & PROTO_WIRE) {
- case PROTO_BBB:
- printf("Bulk-Only");
+ switch (id->bInterfaceProtocol) {
+ case UIPROTO_MASS_CBI:
+ sProto = "CBI";
break;
- case PROTO_CBI: /* uses Command/Bulk pipes */
- printf("CBI");
+ case UIPROTO_MASS_CBI_I:
+ sProto = "CBI-I";
break;
- case PROTO_CBI_I: /* uses Command/Bulk/Interrupt pipes */
- printf("CBI with CCI");
+ case UIPROTO_MASS_BBB:
+ sProto = "BBB";
+ break;
+ case UIPROTO_MASS_BBB_P:
+ sProto = "BBB-P";
break;
default:
- printf("(unknown 0x%02x)", sc->proto&PROTO_WIRE);
+ sProto = "unknown";
+ break;
}
- printf("\n");
+ printf("%s: using %s over %s\n", USBDEVNAME(sc->sc_dev), sSubclass,
+ sProto);
/*
* In addition to the Control endpoint the following endpoints
-/* $OpenBSD: umodem.c,v 1.2 2000/04/08 20:03:34 aaron Exp $ */
-/* $NetBSD: umodem.c,v 1.25 2000/03/27 12:33:57 augustss Exp $ */
+/* $OpenBSD: umodem.c,v 1.3 2000/04/14 22:50:28 aaron Exp $ */
+/* $NetBSD: umodem.c,v 1.27 2000/04/14 14:21:55 augustss Exp $ */
/*
* Copyright (c) 1998 The NetBSD Foundation, Inc.
#endif
#define DPRINTF(x) DPRINTFN(0, x)
+/*
+ * These are the maximum number of bytes transferred per frame.
+ * If some really high speed devices should use this driver they
+ * may need to be increased, but this is good enough for normal modems.
+ */
+#define UMODEMIBUFSIZE 64
+#define UMODEMOBUFSIZE 256
+
struct umodem_softc {
USBBASEDEVICE sc_dev; /* base device */
umodem_ioctl,
NULL,
NULL,
+ NULL,
+ NULL,
};
USB_DECLARE_DRIVER(umodem);
uca.portno = UCOM_UNK_PORTNO;
/* bulkin, bulkout set above */
+ uca.ibufsize = UMODEMIBUFSIZE;
+ uca.obufsize = UMODEMOBUFSIZE;
+ uca.ibufsizepad = UMODEMIBUFSIZE;
+ uca.obufsizepad = UMODEMOBUFSIZE;
uca.device = sc->sc_udev;
uca.iface = sc->sc_data_iface;
uca.methods = &umodem_methods;
umodem_set(addr, portno, reg, onoff)
void *addr;
int portno;
+ int reg;
int onoff;
{
struct umodem_softc *sc = addr;
-/* $OpenBSD: usb_subr.c,v 1.10 2000/04/08 20:55:41 aaron Exp $ */
-/* $NetBSD: usb_subr.c,v 1.71 2000/03/29 18:24:53 augustss Exp $ */
+/* $OpenBSD: usb_subr.c,v 1.11 2000/04/14 22:50:28 aaron Exp $ */
+/* $NetBSD: usb_subr.c,v 1.72 2000/04/14 14:13:56 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $ */
/*
#endif
uaa.device = dev;
- uaa.iface = 0;
- uaa.ifaces = 0;
+ uaa.iface = NULL;
+ uaa.ifaces = NULL;
uaa.nifaces = 0;
uaa.usegeneric = 0;
uaa.port = port;
DPRINTF(("usbd_probe_and_attach: no interface drivers found\n"));
/* Finally try the generic driver. */
- uaa.iface = 0;
+ uaa.iface = NULL;
uaa.usegeneric = 1;
uaa.configno = UHUB_UNK_CONFIGURATION;
uaa.ifaceno = UHUB_UNK_INTERFACE;
- uaa.vendor = UHUB_UNK_VENDOR;
- uaa.product = UHUB_UNK_PRODUCT;
- uaa.release = UHUB_UNK_RELEASE;
dv = USB_DO_ATTACH(dev, bdev, parent, &uaa, usbd_print, usbd_submatch);
if (dv != NULL) {
dev->subdevs = malloc(2 * sizeof dv, M_USB, M_NOWAIT);
int addr;
int i;
- DPRINTF(("usbd_new_device bus=%p depth=%d lowspeed=%d\n",
- bus, depth, lowspeed));
+ DPRINTF(("usbd_new_device bus=%p port=%d depth=%d lowspeed=%d\n",
+ bus, port, depth, lowspeed));
addr = usbd_getnewaddr(bus);
if (addr < 0) {
printf("%s: No free USB addresses, new device ignored.\n",
#endif
struct usb_attach_arg *uaa = aux;
- if ((uaa->port != 0 &&
- cf->uhubcf_port != UHUB_UNK_PORT &&
- cf->uhubcf_port != uaa->port) ||
- (uaa->configno != UHUB_UNK_CONFIGURATION &&
- cf->uhubcf_configuration != UHUB_UNK_CONFIGURATION &&
- cf->uhubcf_configuration != uaa->configno) ||
- (uaa->ifaceno != UHUB_UNK_INTERFACE &&
- cf->uhubcf_interface != UHUB_UNK_INTERFACE &&
- cf->uhubcf_interface != uaa->ifaceno) ||
- (uaa->vendor != UHUB_UNK_VENDOR &&
- cf->uhubcf_vendor != UHUB_UNK_VENDOR &&
- cf->uhubcf_vendor != uaa->vendor) ||
- (uaa->product != UHUB_UNK_PRODUCT &&
- cf->uhubcf_product != UHUB_UNK_PRODUCT &&
- cf->uhubcf_product != uaa->product) ||
- (uaa->release != UHUB_UNK_RELEASE &&
- cf->uhubcf_release != UHUB_UNK_RELEASE &&
- cf->uhubcf_release != uaa->release)
+ DPRINTFN(5,("usbd_submatch port=%d,%d configno=%d,%d "
+ "ifaceno=%d,%d vendor=%d,%d product=%d,%d release=%d,%d\n",
+ uaa->port, cf->uhubcf_port,
+ uaa->configno, cf->uhubcf_configuration,
+ uaa->ifaceno, cf->uhubcf_interface,
+ uaa->vendor, cf->uhubcf_vendor,
+ uaa->product, cf->uhubcf_product,
+ uaa->release, cf->uhubcf_release));
+ if (uaa->port != 0 && /* root hub has port 0, it should match */
+ ((uaa->port != 0 &&
+ cf->uhubcf_port != UHUB_UNK_PORT &&
+ cf->uhubcf_port != uaa->port) ||
+ (uaa->configno != UHUB_UNK_CONFIGURATION &&
+ cf->uhubcf_configuration != UHUB_UNK_CONFIGURATION &&
+ cf->uhubcf_configuration != uaa->configno) ||
+ (uaa->ifaceno != UHUB_UNK_INTERFACE &&
+ cf->uhubcf_interface != UHUB_UNK_INTERFACE &&
+ cf->uhubcf_interface != uaa->ifaceno) ||
+ (uaa->vendor != UHUB_UNK_VENDOR &&
+ cf->uhubcf_vendor != UHUB_UNK_VENDOR &&
+ cf->uhubcf_vendor != uaa->vendor) ||
+ (uaa->product != UHUB_UNK_PRODUCT &&
+ cf->uhubcf_product != UHUB_UNK_PRODUCT &&
+ cf->uhubcf_product != uaa->product) ||
+ (uaa->release != UHUB_UNK_RELEASE &&
+ cf->uhubcf_release != UHUB_UNK_RELEASE &&
+ cf->uhubcf_release != uaa->release)
+ )
)
return 0;
return ((*cf->cf_attach->ca_match)(parent, cf, aux));
-$OpenBSD: usbdevs,v 1.18 2000/04/11 19:03:19 jakob Exp $
+$OpenBSD: usbdevs,v 1.19 2000/04/14 22:50:29 aaron Exp $
/* $NetBSD: usbdevs,v 1.88 2000/04/03 12:09:43 augustss Exp $ */
/*
vendor HP 0x03f0 Hewlett Packard
vendor ADAPTEC 0x03f3 Adaptec, Inc.
vendor ACERLABS 0x0402 Acer Labs, Inc.
-vendor FUTURE 0x0403 Future Technology Devices
+vendor FTDI 0x0403 Future Technology Devices
vendor NEC 0x0409 NEC
vendor KODAK 0x040a Eastman Kodak Corp.
vendor MELCO 0x0411 Melco, Inc.
vendor ACERSA 0x066e Acer Semiconductor America, Inc.
vendor AIWA 0x0677 Aiwa Co., Ltd.
vendor ACARD 0x0678 ACARD Technology Corp.
+vendor PROLIFIC 0x067b Prolific Technology Inc.
vendor ADVANCELOGIC 0x0680 Avance Logic, Inc.
vendor ASKEY 0x069a Askey Computer Corp.
vendor ALCATELT 0x06b9 Alcatel Telecom
/* Cypress Semiconductor products */
product CYPRESS MOUSE 0x0001 mouse
product CYPRESS THERMO 0x0002 thermometer
+product CYPRESS FMRADIO 0x1002 FM Radio
/* D-Link products */
/*product DLINK DSBS25 0x0100 DSB-S25 serial adapter*/
product FREECOM DVD 0xfc01 Connector for DVD drive
/* Future Technology Devices products */
-product FUTURE SERIAL 0x8372 Serial converter
+product FTDI SERIAL 0x8372 Serial converter
/* Handspring, Inc. */
product HANDSPRING VISOR 0x0100 Handspring Visor
/* In-System products */
product INSYSTEM F5U002 0x0002 Parallel printer adapter
-product INSYSTEM ISD110 0x0200 IDE adapter
+product INSYSTEM ISD110 0x0200 IDE adapter ISD110
+product INSYSTEM ISD105 0x0202 IDE adapter ISD105
/* Intel products */
product INTEL TESTBOARD 0x9890 82930 test board
product PHILIPS DSS 0x0104 DSS XXX Digital Speaker System
product PHILIPS HUB 0x0201 hub
product PHILIPS DSS150 0x0471 DSS 150 Digital Speaker System
-product PHILIPS PCVC680K 0x0308 PCVC680K Vesta Pro PC Camera
/* P.I. Engineering products */
product PIENGINEERING PS2USB 0x020b PS2 to Mac USB Adapter
product PRIMAX MOUSEINABOX 0x4d02 Mouse-in-a-Box
product PRIMAX PCGAUMS1 0x4d04 Sony PCGA-UMS1
+/* Prolific products */
+product PROLIFIC PL2301 0x0000 PL2301 Host-Host interface
+product PROLIFIC PL2302 0x0001 PL2302 Host-Host interface
+
/* Quickshot products */
product QUICKSHOT STRIKEPAD 0x6238 USB StrikePad
-/* $OpenBSD: usbdevs.h,v 1.17 2000/04/11 19:04:10 jakob Exp $ */
+/* $OpenBSD: usbdevs.h,v 1.18 2000/04/14 22:50:29 aaron Exp $ */
/*
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
#define USB_VENDOR_HP 0x03f0 /* Hewlett Packard */
#define USB_VENDOR_ADAPTEC 0x03f3 /* Adaptec, Inc. */
#define USB_VENDOR_ACERLABS 0x0402 /* Acer Labs, Inc. */
-#define USB_VENDOR_FUTURE 0x0403 /* Future Technology Devices */
+#define USB_VENDOR_FTDI 0x0403 /* Future Technology Devices */
#define USB_VENDOR_NEC 0x0409 /* NEC */
#define USB_VENDOR_KODAK 0x040a /* Eastman Kodak Corp. */
#define USB_VENDOR_MELCO 0x0411 /* Melco, Inc. */
#define USB_VENDOR_ACERSA 0x066e /* Acer Semiconductor America, Inc. */
#define USB_VENDOR_AIWA 0x0677 /* Aiwa Co., Ltd. */
#define USB_VENDOR_ACARD 0x0678 /* ACARD Technology Corp. */
+#define USB_VENDOR_PROLIFIC 0x067b /* Prolific Technology Inc. */
#define USB_VENDOR_ADVANCELOGIC 0x0680 /* Avance Logic, Inc. */
#define USB_VENDOR_ASKEY 0x069a /* Askey Computer Corp. */
#define USB_VENDOR_ALCATELT 0x06b9 /* Alcatel Telecom */
/* Cypress Semiconductor products */
#define USB_PRODUCT_CYPRESS_MOUSE 0x0001 /* mouse */
#define USB_PRODUCT_CYPRESS_THERMO 0x0002 /* thermometer */
+#define USB_PRODUCT_CYPRESS_FMRADIO 0x1002 /* FM Radio */
/* D-Link products */
/*product DLINK DSBS25 0x0100 DSB-S25 serial adapter*/
#define USB_PRODUCT_FREECOM_DVD 0xfc01 /* Connector for DVD drive */
/* Future Technology Devices products */
-#define USB_PRODUCT_FUTURE_SERIAL 0x8372 /* Serial converter */
+#define USB_PRODUCT_FTDI_SERIAL 0x8372 /* Serial converter */
/* Handspring, Inc. */
#define USB_PRODUCT_HANDSPRING_VISOR 0x0100 /* Handspring Visor */
/* In-System products */
#define USB_PRODUCT_INSYSTEM_F5U002 0x0002 /* Parallel printer adapter */
-#define USB_PRODUCT_INSYSTEM_ISD110 0x0200 /* IDE adapter */
+#define USB_PRODUCT_INSYSTEM_ISD110 0x0200 /* IDE adapter ISD110 */
+#define USB_PRODUCT_INSYSTEM_ISD105 0x0202 /* IDE adapter ISD105 */
/* Intel products */
#define USB_PRODUCT_INTEL_TESTBOARD 0x9890 /* 82930 test board */
#define USB_PRODUCT_PHILIPS_DSS 0x0104 /* DSS XXX Digital Speaker System */
#define USB_PRODUCT_PHILIPS_HUB 0x0201 /* hub */
#define USB_PRODUCT_PHILIPS_DSS150 0x0471 /* DSS 150 Digital Speaker System */
-#define USB_PRODUCT_PHILIPS_PCVC680K 0x0308 /* PCVC680K Vesta Pro PC Camera */
/* P.I. Engineering products */
#define USB_PRODUCT_PIENGINEERING_PS2USB 0x020b /* PS2 to Mac USB Adapter */
#define USB_PRODUCT_PRIMAX_MOUSEINABOX 0x4d02 /* Mouse-in-a-Box */
#define USB_PRODUCT_PRIMAX_PCGAUMS1 0x4d04 /* Sony PCGA-UMS1 */
+/* Prolific products */
+#define USB_PRODUCT_PROLIFIC_PL2301 0x0000 /* PL2301 Host-Host interface */
+#define USB_PRODUCT_PROLIFIC_PL2302 0x0001 /* PL2302 Host-Host interface */
+
/* Quickshot products */
#define USB_PRODUCT_QUICKSHOT_STRIKEPAD 0x6238 /* USB StrikePad */
-/* $OpenBSD: usbdevs_data.h,v 1.17 2000/04/11 19:04:10 jakob Exp $ */
+/* $OpenBSD: usbdevs_data.h,v 1.18 2000/04/14 22:50:29 aaron Exp $ */
/*
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
"Cypress Semiconductor",
"thermometer",
},
+ {
+ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_FMRADIO,
+ 0,
+ "Cypress Semiconductor",
+ "FM Radio",
+ },
{
USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650C,
0,
"Connector for DVD drive",
},
{
- USB_VENDOR_FUTURE, USB_PRODUCT_FUTURE_SERIAL,
+ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL,
0,
"Future Technology Devices",
"Serial converter",
USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD110,
0,
"In-System Design",
- "IDE adapter",
+ "IDE adapter ISD110",
+ },
+ {
+ USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ISD105,
+ 0,
+ "In-System Design",
+ "IDE adapter ISD105",
},
{
USB_VENDOR_INTEL, USB_PRODUCT_INTEL_TESTBOARD,
"Philips",
"DSS 150 Digital Speaker System",
},
- {
- USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_PCVC680K,
- 0,
- "Philips",
- "PCVC680K Vesta Pro PC Camera",
- },
{
USB_VENDOR_PIENGINEERING, USB_PRODUCT_PIENGINEERING_PS2USB,
0,
"Primax Electronics",
"Sony PCGA-UMS1",
},
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2301,
+ 0,
+ "Prolific Technology Inc.",
+ "PL2301 Host-Host interface",
+ },
+ {
+ USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2302,
+ 0,
+ "Prolific Technology Inc.",
+ "PL2302 Host-Host interface",
+ },
{
USB_VENDOR_QUICKSHOT, USB_PRODUCT_QUICKSHOT_STRIKEPAD,
0,
NULL,
},
{
- USB_VENDOR_FUTURE, 0,
+ USB_VENDOR_FTDI, 0,
USB_KNOWNDEV_NOPROD,
"Future Technology Devices",
NULL,
"ACARD Technology Corp.",
NULL,
},
+ {
+ USB_VENDOR_PROLIFIC, 0,
+ USB_KNOWNDEV_NOPROD,
+ "Prolific Technology Inc.",
+ NULL,
+ },
{
USB_VENDOR_ADVANCELOGIC, 0,
USB_KNOWNDEV_NOPROD,