Index: sys/dev/pci/uhci_pci.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/pci/uhci_pci.c,v retrieving revision 1.4 diff -u -u -r1.4 uhci_pci.c --- uhci_pci.c 1999/04/11 14:29:34 1.4 +++ uhci_pci.c 1999/04/17 03:45:23 @@ -1,4 +1,4 @@ -/* FreeBSD $Id: uhci_pci.c,v 1.4 1999/04/06 23:09:58 n_hibma Exp $ */ +/* FreeBSD $Id: uhci_pci.c,v 1.5 1999/04/11 14:24:20 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -196,7 +196,10 @@ memset(sc, 0, sizeof(uhci_softc_t)); #endif /* NEW_CONFIG */ - sc->sc_iobase = pci_conf_read(config_id, PCI_UHCI_BASE_REG) & 0xffe0; + if ( !pci_map_port(config_id, PCI_UHCI_BASE_REG, &sc->sc_iobase) ) { + printf("uhci%d: could not map port\n", unit); + return; + } if ( !pci_map_int(config_id, (pci_inthand_t *)uhci_intr, (void *) sc, &bio_imask)) { Index: sys/dev/usb/files.usb =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/files.usb,v retrieving revision 1.2 diff -u -u -r1.2 files.usb --- files.usb 1999/03/09 21:21:43 1.2 +++ files.usb 1999/04/17 03:48:58 @@ -55,5 +55,14 @@ file dev/usb/ums.c ums needs-flag # options for USB support +defopt opt_usb.h UHCI_DEBUG +defopt opt_usb.h OHCI_DEBUG defopt opt_usb.h USB_DEBUG +defopt opt_usb.h UGEN_DEBUG +defopt opt_usb.h UHID_DEBUG +defopt opt_usb.h UHUB_DEBUG +defopt opt_usb.h UKBD_DEBUG +defopt opt_usb.h ULPT_DEBUG +defopt opt_usb.h UMASS_DEBUG +defopt opt_usb.h UMS_DEBUG defopt opt_usb.h USBVERBOSE Index: sys/dev/usb/hid.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/hid.c,v retrieving revision 1.3 diff -u -u -r1.3 hid.c --- hid.c 1999/03/30 00:04:24 1.3 +++ hid.c 1999/04/17 02:51:34 @@ -1,5 +1,5 @@ /* $NetBSD: hid.c,v 1.7 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/hid.c,v 1.7 1999/01/22 00:51:11 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/hid.c,v 1.8 1999/04/11 20:50:32 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -53,9 +53,9 @@ #include -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x +#ifdef UHID_DEBUG +#define DPRINTF(x) if (usbdebug) logprintf x +#define DPRINTFN(n,x) if (usbdebug>(n)) logprintf x extern int usbdebug; #else #define DPRINTF(x) Index: sys/dev/usb/ohci.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ohci.c,v retrieving revision 1.3 diff -u -u -r1.3 ohci.c --- ohci.c 1999/03/30 00:04:24 1.3 +++ ohci.c 1999/04/17 03:49:53 @@ -1,5 +1,5 @@ /* $NetBSD: ohci.c,v 1.27 1999/01/13 10:33:53 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ohci.c,v 1.11 1999/01/22 00:51:11 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ohci.c,v 1.12 1999/04/11 20:50:32 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -79,9 +79,18 @@ #include #define delay(d) DELAY(d) +#endif +#ifdef OHCI_DEBUG +#define DPRINTF(x) if (ohcidebug) logprintf x +#define DPRINTFN(n,x) if (ohcidebug>(n)) logprintf x +int ohcidebug = 1; +#else +#define DPRINTF(x) +#define DPRINTFN(n,x) #endif + /* * The OHCI controller is little endian, so on big endian machines * the data strored in memory needs to be swapped. @@ -149,7 +158,7 @@ void ohci_timeout __P((void *)); void ohci_rhsc_able __P((ohci_softc_t *, int)); -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG ohci_softc_t *thesc; void ohci_dumpregs __P((ohci_softc_t *)); void ohci_dump_tds __P((ohci_soft_td_t *)); @@ -462,7 +471,7 @@ r = USBD_IOERROR; goto bad3; } -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG thesc = sc; if (ohcidebug > 15) ohci_dumpregs(sc); @@ -498,7 +507,7 @@ sc->sc_noport = OHCI_GET_NDP(OREAD4(sc, OHCI_RH_DESCRIPTOR_A)); -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG if (ohcidebug > 5) ohci_dumpregs(sc); #endif @@ -519,7 +528,7 @@ return (r); } -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG void ohcidump(void); void ohcidump(void) { ohci_dumpregs(thesc); } @@ -654,7 +663,7 @@ } } -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG char *ohci_cc_strs[] = { "NO_ERROR", "CRC", @@ -690,7 +699,7 @@ sdone = std; } -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG if (ohcidebug > 10) { printf("ohci_process_done: TD done:\n"); ohci_dump_tds(sdone); @@ -941,7 +950,7 @@ usb_delay_ms(&sc->sc_bus, 1); intrs = OREAD4(sc, OHCI_INTERRUPT_STATUS) & sc->sc_eintrs; DPRINTFN(15,("ohci_waitintr: 0x%04x\n", intrs)); -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG if (ohcidebug > 15) ohci_dumpregs(sc); #endif @@ -1069,7 +1078,7 @@ reqh->hcpriv = stat; -#if USB_DEBUG +#if OHCI_DEBUG if (ohcidebug > 5) { printf("ohci_device_request:\n"); ohci_dump_ed(sed); @@ -1092,7 +1101,7 @@ } splx(s); -#if USB_DEBUG +#if OHCI_DEBUG if (ohcidebug > 5) { delay(5000); printf("ohci_device_request: status=%x\n", @@ -1210,7 +1219,7 @@ #endif } -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG void ohci_dump_tds(std) ohci_soft_td_t *std; @@ -2075,7 +2084,7 @@ reqh->hcpriv = xfer; -#if USB_DEBUG +#if OHCI_DEBUG if (ohcidebug > 5) { printf("ohci_device_intr_transfer:\n"); ohci_dump_ed(sed); @@ -2096,7 +2105,7 @@ #endif sed->ed->ed_flags &= LE(~OHCI_ED_SKIP); -#ifdef USB_DEBUG +#ifdef OHCI_DEBUG if (ohcidebug > 5) { delay(5000); printf("ohci_device_intr_transfer: status=%x\n", Index: sys/dev/usb/ohcivar.h =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ohcivar.h,v retrieving revision 1.2 diff -u -u -r1.2 ohcivar.h --- ohcivar.h 1999/03/30 00:04:24 1.2 +++ ohcivar.h 1999/04/17 02:52:35 @@ -1,5 +1,5 @@ /* $NetBSD: ohcivar.h,v 1.4 1998/12/26 12:53:01 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ohcivar.h,v 1.6 1999/01/22 00:51:11 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ohcivar.h,v 1.8 1999/04/11 20:50:32 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -73,7 +73,6 @@ #elif defined(__FreeBSD__) int sc_iobase; - int unit; #endif /* __FreeBSD__ */ usb_dma_t sc_hccadma; @@ -105,11 +104,3 @@ #define MS_TO_TICKS(ms) ((ms) * hz / 1000) -#ifdef USB_DEBUG -#define DPRINTF(x) if (ohcidebug) printf x -#define DPRINTFN(n,x) if (ohcidebug>(n)) printf x -extern int ohcidebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif Index: sys/dev/usb/ucom.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ucom.c,v retrieving revision 1.3 diff -u -u -r1.3 ucom.c --- ucom.c 1999/03/30 00:04:24 1.3 +++ ucom.c 1999/04/17 02:59:44 @@ -1,5 +1,5 @@ /* $NetBSD: ucom.c,v 1.6 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ucom.c,v 1.11 1999/01/28 01:59:49 dillon Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ucom.c,v 1.12 1999/04/11 20:50:32 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -38,9 +38,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#if defined(__FreeBSD__) && !defined(NEW_CONFIG) #include -#endif /* NEW_CONFIG */ #include #include @@ -75,9 +73,9 @@ #include #include -#ifdef USB_DEBUG -#define DPRINTF(x) if (ucomdebug) printf x -#define DPRINTFN(n,x) if (ucomdebug>(n)) printf x +#ifdef UCOM_DEBUG +#define DPRINTF(x) if (ucomdebug) logprintf x +#define DPRINTFN(n,x) if (ucomdebug>(n)) logprintf x int ucomdebug = 1; #else #define DPRINTF(x) @@ -101,12 +99,14 @@ if (!uaa->iface) return (UMATCH_NONE); + id = usbd_get_interface_descriptor(uaa->iface); - if ((id && - id->bInterfaceClass != UCLASS_CDC) || - id->bInterfaceSubClass != USUBCLASS_ABSTRACT_CONTROL_MODEL) - return (UMATCH_NONE); - return (UMATCH_IFACECLASS_IFACESUBCLASS); + if ((id + && id->bInterfaceClass == UCLASS_CDC) + && id->bInterfaceSubClass == USUBCLASS_ABSTRACT_CONTROL_MODEL) + return (UMATCH_IFACECLASS_IFACESUBCLASS); + + return (UMATCH_NONE); } USB_ATTACH(ucom) Index: sys/dev/usb/ugen.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ugen.c,v retrieving revision 1.3 diff -u -u -r1.3 ugen.c --- ugen.c 1999/03/30 00:04:24 1.3 +++ ugen.c 1999/04/17 03:07:11 @@ -1,5 +1,5 @@ /* $NetBSD: ugen.c,v 1.11 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ugen.c,v 1.10 1999/01/28 00:57:47 dillon Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ugen.c,v 1.11 1999/04/11 20:50:32 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -73,9 +73,9 @@ #include "ioconf.h" #endif /* NEW_CONFIG */ -#ifdef USB_DEBUG -#define DPRINTF(x) if (ugendebug) printf x -#define DPRINTFN(n,x) if (ugendebug>(n)) printf x +#ifdef UGEN_DEBUG +#define DPRINTF(x) if (ugendebug) logprintf x +#define DPRINTFN(n,x) if (ugendebug>(n)) logprintf x int ugendebug = 1; #else #define DPRINTF(x) @@ -743,7 +743,7 @@ return (EINVAL); switch (cmd) { -#ifdef USB_DEBUG +#ifdef UGEN_DEBUG case USB_SETDEBUG: ugendebug = *(int *)addr; break; Index: sys/dev/usb/uhci.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/uhci.c,v retrieving revision 1.3 diff -u -u -r1.3 uhci.c --- uhci.c 1999/03/30 00:04:24 1.3 +++ uhci.c 1999/04/17 03:01:21 @@ -1,5 +1,5 @@ -/* $NetBSD: uhci.c,v 1.22 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/uhci.c,v 1.16 1999/03/23 21:35:57 n_hibma Exp $ */ +/* $NetBSD: uhci.c,v 1.24 1999/02/20 23:26:16 augustss Exp $ */ +/* $FreeBSD: src/sys/dev/usb/uhci.c,v 1.18 1999/04/11 20:50:32 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -45,7 +45,8 @@ * Data sheets: ftp://download.intel.com/design/intarch/datashts/29055002.pdf * ftp://download.intel.com/design/intarch/datashts/29056201.pdf * UHCI spec: http://www.intel.com/design/usb/uhci11d.pdf - * USB spec: http://www.teleport.com/cgi-bin/mailmerge.cgi/~usb/cgiform.tpl + * USB spec: http://www.usb.org/cgi-usb/mailmerge.cgi/home/usb/docs/developers/ +cgiform.tpl */ #include @@ -83,6 +84,15 @@ #define delay(d) DELAY(d) #endif +#ifdef UHCI_DEBUG +#define DPRINTF(x) if (uhcidebug) logprintf x +#define DPRINTFN(n,x) if (uhcidebug>(n)) logprintf x +int uhcidebug = 1; +#else +#define DPRINTF(x) +#define DPRINTFN(n,x) +#endif + #define MS_TO_TICKS(ms) ((ms) * hz / 1000) struct uhci_pipe { @@ -205,7 +215,7 @@ void uhci_intr_done __P((uhci_intr_info_t *ii)); void uhci_isoc_done __P((uhci_intr_info_t *ii)); -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG static void uhci_dumpregs __P((uhci_softc_t *)); void uhci_dump_tds __P((uhci_soft_td_t *)); void uhci_dump_qh __P((uhci_soft_qh_t *)); @@ -385,7 +395,7 @@ return (uhci_run(sc, 1)); /* and here we go... */ } -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG static void uhci_dumpregs(sc) uhci_softc_t *sc; @@ -585,7 +595,7 @@ DPRINTFN(10, ("uhci_remove_ctrl: sqh=%p\n", sqh)); for (pqh = sc->sc_ctl_start; pqh->qh->hlink != sqh; pqh=pqh->qh->hlink) -#if defined(DIAGNOSTIC) || defined(USB_DEBUG) +#if defined(DIAGNOSTIC) || defined(UHCI_DEBUG) if (pqh->qh->qh_hlink & UHCI_PTR_T) { printf("uhci_remove_ctrl: QH not found\n"); return; @@ -628,7 +638,7 @@ for (pqh = sc->sc_bulk_start; pqh->qh->hlink != sqh; pqh = pqh->qh->hlink) -#if defined(DIAGNOSTIC) || defined(USB_DEBUG) +#if defined(DIAGNOSTIC) || defined(UHCI_DEBUG) if (pqh->qh->qh_hlink & UHCI_PTR_T) { printf("uhci_remove_bulk: QH not found\n"); return; @@ -651,7 +661,7 @@ uhci_intr_info_t *ii; sc->sc_intrs++; -#if defined(USB_DEBUG) +#if defined(UHCI_DEBUG) if (uhcidebug > 9) { printf("uhci_intr %p\n", sc); uhci_dumpregs(sc); @@ -785,7 +795,7 @@ std = std->td->link.std) { tst = std->td->td_status; status |= tst; -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if ((tst & UHCI_TD_ERROR) && uhcidebug) { printf("uhci_ii_done: intr error TD:\n"); uhci_dump_td(std); @@ -795,9 +805,9 @@ len += UHCI_TD_GET_ACTLEN(tst); } status &= UHCI_TD_ERROR; - DPRINTFN(10, ("uhci_check_intr: len=%d, status=0x%x\n", len, status)); + DPRINTFN(10, ("uhci_ii_done: len=%d, status=0x%x\n", len, status)); if (status != 0) { - DPRINTFN(-1+(status==UHCI_TD_STALLED), + DPRINTFN(-1+(status & UHCI_TD_STALLED), ("uhci_ii_done: error, addr=%d, endpt=0x%02x, " "status 0x%b\n", reqh->pipe->device->address, @@ -805,7 +815,7 @@ (int)status, "\20\22BITSTUFF\23CRCTO\24NAK\25BABBLE\26DBUFFER\27" "STALLED\30ACTIVE")); - if (status == UHCI_TD_STALLED) + if (status & UHCI_TD_STALLED) reqh->status = USBD_STALLED; else reqh->status = USBD_IOERROR; /* more info XXX */ @@ -1228,7 +1238,7 @@ if (!isread && len != 0) memcpy(KERNADDR(dmap), reqh->buffer, len); -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 10) { printf("uhci_device_bulk_transfer: xfer(1)\n"); uhci_dump_tds(xfer); @@ -1260,7 +1270,7 @@ } splx(s); -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 10) { printf("uhci_device_bulk_transfer: xfer(2)\n"); uhci_dump_tds(xfer); @@ -1388,7 +1398,7 @@ goto ret2; xferend->td->td_status |= UHCI_TD_IOC; -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 10) { printf("uhci_device_intr_transfer: xfer(1)\n"); uhci_dump_tds(xfer); @@ -1414,7 +1424,7 @@ } splx(s); -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 10) { printf("uhci_device_intr_transfer: xfer(2)\n"); uhci_dump_tds(xfer); @@ -1580,7 +1590,7 @@ UHCI_TD_IN (0, endpt, addr, 1); stat->td->td_buffer = 0; -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 20) { printf("uhci_device_request: setup\n"); uhci_dump_td(setup); @@ -1607,7 +1617,7 @@ s = splusb(); uhci_add_ctrl(sc, sqh); LIST_INSERT_HEAD(&sc->sc_intrhead, ii, list); -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 12) { uhci_soft_td_t *std; uhci_soft_qh_t *xqh; @@ -1653,7 +1663,7 @@ usbd_request_handle reqh; { struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG usbd_device_handle dev = upipe->pipe.device; uhci_softc_t *sc = (uhci_softc_t *)dev->bus; #endif @@ -1854,7 +1864,7 @@ dma, &xfer, &xferend); xferend->td->td_status |= UHCI_TD_IOC; -#ifdef USB_DEBUG +#ifdef UHCI_DEBUG if (uhcidebug > 10) { printf("uhci_device_intr_done: xfer(1)\n"); uhci_dump_tds(xfer); @@ -1970,7 +1980,7 @@ DPRINTFN(4, ("uhci_remove_intr: n=%d sqh=%p\n", n, sqh)); for (pqh = vf->hqh; pqh->qh->hlink != sqh; pqh = pqh->qh->hlink) -#if defined(DIAGNOSTIC) || defined(USB_DEBUG) +#if defined(DIAGNOSTIC) || defined(UHCI_DEBUG) if (pqh->qh->qh_hlink & UHCI_PTR_T) { printf("uhci_remove_intr: QH not found\n"); return; Index: sys/dev/usb/uhcivar.h =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/uhcivar.h,v retrieving revision 1.2 diff -u -u -r1.2 uhcivar.h --- uhcivar.h 1999/03/30 00:04:25 1.2 +++ uhcivar.h 1999/04/17 03:01:47 @@ -1,5 +1,5 @@ /* $NetBSD: uhcivar.h,v 1.5 1998/12/26 12:53:02 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/uhcivar.h,v 1.6 1999/01/22 00:51:12 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/uhcivar.h,v 1.8 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -126,7 +126,6 @@ /* XXX should keep track of all DMA memory */ #elif defined(__FreeBSD__) int sc_iobase; - int unit; #endif /* defined(__FreeBSD__) */ uhci_physaddr_t *sc_pframes; @@ -167,14 +166,5 @@ int uhci_intr __P((void *)); #if 0 void uhci_reset __P((void *)); -#endif - -#ifdef USB_DEBUG -#define DPRINTF(x) if (uhcidebug) printf x -#define DPRINTFN(n,x) if (uhcidebug>(n)) printf x -extern int uhcidebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) #endif Index: sys/dev/usb/uhid.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/uhid.c,v retrieving revision 1.3 diff -u -u -r1.3 uhid.c --- uhid.c 1999/03/30 00:04:25 1.3 +++ uhid.c 1999/04/17 03:08:30 @@ -1,5 +1,5 @@ /* $NetBSD: uhid.c,v 1.14 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/uhid.c,v 1.10 1999/01/28 01:59:49 dillon Exp $ */ +/* $FreeBSD: src/sys/dev/usb/uhid.c,v 1.11 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -76,9 +76,9 @@ #include "ioconf.h" #endif /* NEW_CONFIG */ -#ifdef USB_DEBUG -#define DPRINTF(x) if (uhiddebug) printf x -#define DPRINTFN(n,x) if (uhiddebug>(n)) printf x +#ifdef UHID_DEBUG +#define DPRINTF(x) if (uhiddebug) logprintf x +#define DPRINTFN(n,x) if (uhiddebug>(n)) logprintf x int uhiddebug = 1; #else #define DPRINTF(x) Index: sys/dev/usb/uhub.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/uhub.c,v retrieving revision 1.3 diff -u -u -r1.3 uhub.c --- uhub.c 1999/03/30 00:04:25 1.3 +++ uhub.c 1999/04/17 03:42:38 @@ -1,5 +1,5 @@ -/* $NetBSD: uhub.c,v 1.14 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/uhub.c,v 1.10 1999/03/22 19:58:58 n_hibma Exp $ */ +/* $NetBSD: uhub.c,v 1.16 1999/01/10 19:13:15 augustss Exp $ */ +/* $FreeBSD: src/sys/dev/usb/uhub.c,v 1.12 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -38,6 +38,10 @@ * POSSIBILITY OF SUCH DAMAGE. */ +/* + * USB spec: http://www.usb.org/cgi-usb/mailmerge.cgi/home/usb/docs/developers/cgiform.tpl + */ + #include #include #include @@ -61,10 +65,9 @@ #include #ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x +#define DPRINTF(x) if (usbdebug) logprintf x +#define DPRINTFN(n,x) if (usbdebug>(n)) logprintf x extern int usbdebug; -extern char *usbd_error_strs[]; #else #define DPRINTF(x) #define DPRINTFN(n,x) @@ -153,8 +156,8 @@ r = usbd_set_config_index(dev, 0, 1); if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("%s: configuration failed, error=%d(%s)\n", - USBDEVNAME(sc->sc_dev), r, usbd_error_strs[r])); + DPRINTF(("%s: configuration failed, %s\n", + USBDEVNAME(sc->sc_dev), usbd_errstr(r))); USB_ATTACH_ERROR_RETURN; } @@ -178,8 +181,8 @@ r = usbd_do_request(dev, &req, &hubdesc); } if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("%s: getting hub descriptor failed, error=%d(%s)\n", - USBDEVNAME(sc->sc_dev), r, usbd_error_strs[r])); + DPRINTF(("%s: getting hub descriptor failed, %s\n", + USBDEVNAME(sc->sc_dev), usbd_errstr(r))); USB_ATTACH_ERROR_RETURN; } @@ -352,9 +355,8 @@ up = &dev->hub->ports[port-1]; r = usbd_get_port_status(dev, port, &up->status); if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("uhub_explore: get port status failed, on port %d " - "error=%d(%s)\n", - port, r, usbd_error_strs[r])); + DPRINTF(("uhub_explore: get port %d status failed, %s\n", + port, usbd_errstr(r))); continue; } status = UGETW(up->status.wPortStatus); @@ -364,18 +366,16 @@ if (change & UPS_C_PORT_ENABLED) { usbd_clear_port_feature(dev, port, UHF_C_PORT_ENABLE); if (status & UPS_PORT_ENABLED) { - printf("%s: illegal enable change, port %d\n", + printf("%s: port %d illegal enable change\n", USBDEVNAME(sc->sc_dev), port); } else { /* Port error condition. */ if (up->restartcnt++ < USBD_RESTART_MAX) { - printf("%s: port error, restarting " - "port %d\n", + printf("%s: port %d error, restarting\n", USBDEVNAME(sc->sc_dev), port); goto disco; } else { - printf("%s: port error, giving up " - "port %d\n", + printf("%s: port %d error, giving up\n", USBDEVNAME(sc->sc_dev), port); } } @@ -427,8 +427,8 @@ port, up); /* XXX retry a few times? */ if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1,("uhub_explore: usb_new_device failed, " - "error=%d(%s)\n", r, usbd_error_strs[r])); + DPRINTFN(-1,("uhub_explore: usb_new_device failed, %s\n", + usbd_errstr(r))); /* Avoid addressing problems by disabling. */ /* usbd_reset_port(dev, port, &up->status); */ /* XXX @@ -492,30 +492,6 @@ } /* Remove the device */ -#if defined(__NetBSD__) - for (i = 0; i < dev->cdesc->bNumInterface; i++) { - for (p = LIST_FIRST(&dev->ifaces[i].pipes); p; p = n) { - n = LIST_NEXT(p, next); - if (p->disco) - p->disco(p->discoarg); - } - } - - /* XXX Free all data structures and disable further I/O. */ - if (dev->hub) { - struct usbd_port *rup; - int p, nports; - - DPRINTFN(3,("usb_disconnect: hub, recursing\n")); - nports = dev->hub->hubdesc.bNbrPorts; - for(p = 0; p < nports; p++) { - rup = &dev->hub->ports[p]; - if (rup->device) - uhub_disconnect_port(rup); - } - } -#elif defined(__FreeBSD__) -#ifdef NEW_CONFIG for (i = 0; i < dev->cdesc->bNumInterface; i++) { for (p = LIST_FIRST(&dev->ifaces[i].pipes); p; p = n) { n = LIST_NEXT(p, next); @@ -537,7 +513,8 @@ uhub_disconnect_port(rup); } } -#else /* NEW_CONFIG */ +#if defined(__FreeBSD__) +#ifndef NEW_CONFIG device_delete_child(scp->sc_dev, sc->sc_dev); #endif /* NEW_CONFIG */ #endif Index: sys/dev/usb/ukbd.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ukbd.c,v retrieving revision 1.3 diff -u -u -r1.3 ukbd.c --- ukbd.c 1999/03/30 00:04:25 1.3 +++ ukbd.c 1999/04/17 04:06:57 @@ -1,5 +1,5 @@ /* $NetBSD: ukbd.c,v 1.22 1999/01/09 12:10:36 drochner Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ukbd.c,v 1.11 1999/03/22 19:55:30 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ukbd.c,v 1.13 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -39,7 +39,7 @@ */ /* - * Information about USB keyboard can be found in the USB HID spec. + * HID spec: http://www.usb.org/developers/data/usbhid10.pdf */ #include "ukbd.h" @@ -51,6 +51,7 @@ #include #ifdef NEW_CONFIG #include +#include "ioconf.h" #else /* NEW_CONFIG */ #include #include @@ -74,19 +75,15 @@ #include #include -#ifdef NEW_CONFIG -#include "ioconf.h" -#endif - #define UKBD_EMULATE_ATSCANCODE 1 #define DRIVER_NAME "ukbd" #define delay(d) DELAY(d) -#ifdef USB_DEBUG -#define DPRINTF(x) if (ukbddebug) printf x -#define DPRINTFN(n,x) if (ukbddebug>(n)) printf x +#ifdef UKBD_DEBUG +#define DPRINTF(x) if (ukbddebug) logprintf x +#define DPRINTFN(n,x) if (ukbddebug>(n)) logprintf x int ukbddebug = 1; #else #define DPRINTF(x) @@ -130,7 +127,11 @@ #define UKBD_BSIZE 1020 /* buffer size */ typedef void usbd_intr_t(usbd_request_handle, usbd_private_handle, usbd_status); -usbd_intr_t ukbd_intr; +typedef void usbd_disco_t(void *); + +static usbd_intr_t ukbd_intr; +static usbd_disco_t ukbd_disconnect; +static int ukbd_remove_kbd(struct ukbd_softc *sc); #ifdef KBD_INSTALL_CDEV @@ -156,10 +157,11 @@ USB_MATCH_START(ukbd, uaa); keyboard_switch_t *sw; - void *arg[2]; + void *arg[4]; #ifdef NEW_CONFIG + struct ukbd_softc ukbd_sc; int unit = match->cf_unit; -#else /* NEW_CONFIG */ +#else /* NEW_CONIFIG */ int unit = device_get_unit(device); #endif /* NEW_CONFIG */ @@ -167,8 +169,17 @@ if (sw == NULL) return (UMATCH_NONE); +#ifdef NEW_CONFIG + bzero(&ukbd_sc, sizeof(struct ukbd_softc)); +#endif /* NEW_CONFIG */ arg[0] = (void *)uaa; arg[1] = (void *)ukbd_intr; + arg[2] = (void *)ukbd_disconnect; +#ifdef NEW_CONFIG + arg[3] = (void *)&ukbd_sc; +#else /* NEW_CONFIG */ + arg[3] = (void *)device; +#endif /* NEW_CONFIG */ if ((*sw->probe)(unit, (void *)arg, 0)) return (UMATCH_NONE); @@ -183,7 +194,7 @@ char devinfo[1024]; keyboard_switch_t *sw; - void *arg[2]; + void *arg[4]; #ifdef NEW_CONFIG int unit = self->dv_unit; #else /* NEW_CONFIG */ @@ -203,6 +214,8 @@ arg[0] = (void *)uaa; arg[1] = (void *)ukbd_intr; + arg[2] = (void *)ukbd_disconnect; + arg[3] = (void *)self; sc->sc_kbd = NULL; if ((*sw->probe)(unit, (void *)arg, 0)) USB_ATTACH_ERROR_RETURN; @@ -211,7 +224,7 @@ (*sw->enable)(sc->sc_kbd); #ifdef KBD_INSTALL_CDEV - if (kbd_attach(makedev(0,unit), sc->sc_kbd, &ukbd_cdevsw)) + if (kbd_attach(makedev(0, unit), sc->sc_kbd, &ukbd_cdevsw)) USB_ATTACH_ERROR_RETURN; #endif if (bootverbose) @@ -229,11 +242,14 @@ const char *devinfo = device_get_desc(self); int error; - DPRINTF(("%s: disconnected\n", USBDEVNAME(self))); - error = (*kbdsw[sc->sc_kbd->kb_index]->term)(sc->sc_kbd); + error = ukbd_remove_kbd(sc); if (error) return error; + sc->sc_flags &= ~UKBD_ATTACHED; + + DPRINTF(("%s: disconnected\n", USBDEVNAME(self))); + if (devinfo) { device_set_desc(self, NULL); free((void *)devinfo, M_USB); @@ -243,6 +259,43 @@ } #endif /* NEW_CONFIG */ +static void +ukbd_disconnect(void *p) +{ +#ifdef NEW_CONFIG + struct ukbd_softc *sc = p; +#else /* NEW_CONFIG */ + device_t self = (device_t)p; + struct ukbd_softc *sc = device_get_softc(self); +#endif /* NEW_CONFIG */ + + DPRINTF(("ukbd_disconnect: sc:%p\n", sc)); + (*kbdsw[sc->sc_kbd->kb_index]->disable)(sc->sc_kbd); + +#ifdef NEW_CONFIG + ukbd_remove_kbd(sc); +#endif /* NEW_CONFIG */ +} + +static int +ukbd_remove_kbd(struct ukbd_softc *sc) +{ + int error; + +#ifdef KBD_INSTALL_CDEV + error = kbd_detach(makedev(0, sc->sc_kbd->kb_unit), sc->sc_kbd, + &ukbd_cdevsw); + if (error) + return error; +#endif + error = (*kbdsw[sc->sc_kbd->kb_index]->term)(sc->sc_kbd); + if (error) + return error; + sc->sc_kbd = NULL; + + return 0; +} + /* cdev driver functions */ #ifdef KBD_INSTALL_CDEV @@ -298,12 +351,10 @@ (*kbdsw[kbd->kb_index]->intr)(kbd, (void *)status); } - #ifndef NEW_CONFIG DRIVER_MODULE(ukbd, uhub, ukbd_driver, ukbd_devclass, usbd_driver_load, 0); #endif /* NEW_CONFIG */ - #include #include #include @@ -338,22 +389,21 @@ { MOD_ALT_R, 0xe6 }, { MOD_WIN_L, 0xe3 }, { MOD_WIN_R, 0xe7 }, -#if 0 - { MOD_CONTROL_L, 29 }, - { MOD_CONTROL_R, 90 }, - { MOD_SHIFT_L, 42 }, - { MOD_SHIFT_R, 54 }, - { MOD_ALT_L, 56 }, - { MOD_ALT_R, 93 }, - { MOD_WIN_L, 105 }, - { MOD_WIN_R, 106 }, -#endif }; #define NN 0 /* no translation */ /* - * Translate USB keycodes to US keyboard AT scancodes. + * Translate USB keycodes to AT keyboard scancodes. */ +/* + * FIXME: Mac USB keyboard generates: + * 0x53: keypad NumLock/Clear + * 0x66: Power + * 0x67: keypad = + * 0x68: F13 + * 0x69: F14 + * 0x6a: F15 + */ static u_int8_t ukbd_trtab[256] = { 0, 0, 0, 0, 30, 48, 46, 32, /* 00 - 07 */ 18, 33, 34, 35, 23, 36, 37, 38, /* 08 - 0F */ @@ -392,7 +442,6 @@ typedef struct ukbd_state { usbd_interface_handle ks_iface; /* interface */ usbd_pipe_handle ks_intrpipe; /* interrupt pipe */ - usbd_intr_t *ks_intrfunc; struct usb_attach_arg *ks_uaa; int ks_ep_addr; @@ -432,7 +481,7 @@ static kbd_term_t ukbd_term; static kbd_intr_t ukbd_interrupt; static kbd_test_if_t ukbd_test_if; -static kbd_enable_t ukbd_enable_kbd; +static kbd_enable_t ukbd_enable; static kbd_disable_t ukbd_disable; static kbd_read_t ukbd_read; static kbd_check_t ukbd_check; @@ -451,7 +500,7 @@ ukbd_term, ukbd_interrupt, ukbd_test_if, - ukbd_enable_kbd, + ukbd_enable, ukbd_disable, ukbd_read, ukbd_check, @@ -470,7 +519,6 @@ KEYBOARD_DRIVER(ukbd, ukbdsw, ukbd_configure); /* local functions */ -static void ukbd_disconnect(void *p); static int ukbd_enable_intr(keyboard_t *kbd, int on, usbd_intr_t *func); static timeout_t ukbd_timeout; @@ -519,7 +567,7 @@ keyboard_t *kbd; device_t device; struct usb_attach_arg *uaa; - void **arg[2]; + void *arg[4]; device = devclass_get_device(ukbd_devclass, UKBD_DEFAULT); if (device == NULL) @@ -531,6 +579,8 @@ /* probe the default keyboard */ arg[0] = (void *)uaa; arg[1] = (void *)ukbd_intr; + arg[2] = (void *)ukbd_disconnect; + arg[3] = (void *)device; kbd = NULL; if (ukbd_probe(UKBD_DEFAULT, arg, flags)) return 0; @@ -576,7 +626,6 @@ int fkeymap_size; void **data = (void **)arg; struct usb_attach_arg *uaa = (struct usb_attach_arg *)data[0]; - usbd_intr_t *func = (usbd_intr_t *)data[1]; /* XXX */ if (unit == UKBD_DEFAULT) { @@ -612,13 +661,11 @@ free(kbd, M_DEVBUF); return ENOMEM; } - bzero(state, sizeof(*state)); } else if (KBD_IS_INITIALIZED(*kbdp) && KBD_IS_CONFIGURED(*kbdp)) { return 0; } else { kbd = *kbdp; state = (ukbd_state_t *)kbd->kb_data; - bzero(state, sizeof(*state)); keymap = kbd->kb_keymap; accmap = kbd->kb_accentmap; fkeymap = kbd->kb_fkeytab; @@ -627,6 +674,7 @@ if (!KBD_IS_PROBED(kbd)) { kbd_init_struct(kbd, DRIVER_NAME, KB_OTHER, unit, flags, 0, 0); + bzero(state, sizeof(*state)); bcopy(&key_map, keymap, sizeof(key_map)); bcopy(&accent_map, accmap, sizeof(accent_map)); bcopy(fkey_tab, fkeymap, @@ -642,7 +690,6 @@ state->ks_mode = K_XLATE; state->ks_iface = uaa->iface; state->ks_uaa = uaa; - state->ks_intrfunc = func; state->ks_ifstate = 0; callout_handle_init(&state->ks_timeout_handle); /* @@ -662,28 +709,17 @@ if (!KBD_IS_CONFIGURED(kbd)) { if (kbd_register(kbd) < 0) return ENXIO; - ukbd_enable_intr(kbd, TRUE, state->ks_intrfunc); - ukbd_timeout((void *)kbd); + if (ukbd_enable_intr(kbd, TRUE, (usbd_intr_t *)data[1]) == 0) { + usbd_set_disco(state->ks_intrpipe, + (usbd_disco_t *)data[2], data[3]); + ukbd_timeout((void *)kbd); + } KBD_CONFIG_DONE(kbd); } return 0; } -static void -ukbd_disconnect(void *p) -{ - keyboard_t *kbd; - ukbd_state_t *state; - - kbd = p; - state = (ukbd_state_t *)kbd->kb_data; - untimeout(ukbd_timeout, (void *)kbd, state->ks_timeout_handle); - DPRINTF(("ukbd_disconnect: state=%p\n", state)); - usbd_abort_pipe(state->ks_intrpipe); - state->ks_ifstate |= DISCONNECTED; -} - static int ukbd_enable_intr(keyboard_t *kbd, int on, usbd_intr_t *func) { @@ -703,7 +739,6 @@ sizeof(state->ks_ndata), func); if (r != USBD_NORMAL_COMPLETION) return (EIO); - usbd_set_disco(state->ks_intrpipe, ukbd_disconnect, kbd); } else { /* Disable interrupts. */ usbd_abort_pipe(state->ks_intrpipe); @@ -720,27 +755,40 @@ ukbd_term(keyboard_t *kbd) { ukbd_state_t *state; + int error; + int s; + + s = splusb(); state = (ukbd_state_t *)kbd->kb_data; + DPRINTF(("ukbd_term: ks_ifstate=0x%x\n", state->ks_ifstate)); + + untimeout(ukbd_timeout, (void *)kbd, state->ks_timeout_handle); + callout_handle_init(&state->ks_timeout_handle); + if (state->ks_ifstate & INTRENABLED) + ukbd_enable_intr(kbd, FALSE, NULL); + if (state->ks_ifstate & INTRENABLED) { + splx(s); + DPRINTF(("ukbd_term: INTRENABLED!\n")); return ENXIO; - -#ifdef USB_DEBUG - /* good bye, and thanks for all the fish */ - set_leds(state, LED_NUM); - DELAY(50000); - set_leds(state, LED_CAP); - DELAY(30000); - set_leds(state, LED_SCR); - DELAY(20000); - set_leds(state, LED_CAP); - DELAY(15000); - set_leds(state, LED_NUM); -#endif /* USB_DEBUG */ + } - kbd_unregister(kbd); + error = kbd_unregister(kbd); + DPRINTF(("ukbd_term: kbd_unregister() %d\n", error)); + if (error == 0) { + kbd->kb_flags = 0; + if (kbd != &default_kbd) { + free(kbd->kb_keymap, M_DEVBUF); + free(kbd->kb_accentmap, M_DEVBUF); + free(kbd->kb_fkeytab, M_DEVBUF); + free(state, M_DEVBUF); + free(kbd, M_DEVBUF); + } + } - return 0; + splx(s); + return error; } @@ -850,8 +898,7 @@ if (state->ks_inputs <= 0) return 0; -#if 0 -#if USB_DEBUG +#if UKBD_DEBUG for (i = state->ks_inputhead, j = 0; j < state->ks_inputs; ++j, i = (i + 1)%INPUTBUFSIZE) { c = state->ks_input[i]; @@ -865,8 +912,7 @@ printf("%d ", ud->keycode[i]); } printf("\n"); -#endif /* USB_DEBUG */ -#endif +#endif /* UKBD_DEBUG */ if (state->ks_polling) return 0; @@ -923,7 +969,7 @@ * the client cannot read from the keyboard. */ static int -ukbd_enable_kbd(keyboard_t *kbd) +ukbd_enable(keyboard_t *kbd) { int s; @@ -1412,15 +1458,17 @@ { usb_interface_descriptor_t *id; - /* Check that this is a keyboard that speaks the boot protocol. */ if (!uaa->iface) return EINVAL; + + /* Check that this is a keyboard that speaks the boot protocol. */ id = usbd_get_interface_descriptor(uaa->iface); - if (id->bInterfaceClass != UCLASS_HID || - id->bInterfaceSubClass != USUBCLASS_BOOT || - id->bInterfaceProtocol != UPROTO_BOOT_KEYBOARD) - return EINVAL; - return 0; + if (id + && id->bInterfaceClass == UCLASS_HID + && id->bInterfaceSubClass == USUBCLASS_BOOT + && id->bInterfaceProtocol == UPROTO_BOOT_KEYBOARD) + return 0; + return EINVAL; } static int Index: sys/dev/usb/ulpt.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ulpt.c,v retrieving revision 1.3 diff -u -u -r1.3 ulpt.c --- ulpt.c 1999/03/30 00:04:25 1.3 +++ ulpt.c 1999/04/17 03:12:33 @@ -1,5 +1,5 @@ /* $NetBSD: ulpt.c,v 1.10 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ulpt.c,v 1.11 1999/03/22 19:58:59 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ulpt.c,v 1.12 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -75,9 +75,9 @@ #define LPTPRI (PZERO+8) #define ULPT_BSIZE 1024 -#ifdef USB_DEBUG -#define DPRINTF(x) if (ulptdebug) printf x -#define DPRINTFN(n,x) if (ulptdebug>(n)) printf x +#ifdef ULPT_DEBUG +#define DPRINTF(x) if (ulptdebug) logprintf x +#define DPRINTFN(n,x) if (ulptdebug>(n)) logprintf x int ulptdebug = 1; #else #define DPRINTF(x) @@ -308,7 +308,7 @@ sc->sc_flags = flags; DPRINTF(("ulptopen: flags=0x%x\n", (unsigned)flags)); -#if defined(USB_DEBUG) && defined(__FreeBSD__) +#if defined(ULPT_DEBUG) && defined(__FreeBSD__) /* Ignoring these flags might not be a good idea */ if ((flags & ~ULPT_NOPRIME) != 0) printf("ulptopen: flags ignored: %b\n", flags, Index: sys/dev/usb/umodem.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/umodem.c,v retrieving revision 1.3 diff -u -u -r1.3 umodem.c --- umodem.c 1999/03/30 00:04:25 1.3 +++ umodem.c 1999/04/17 03:13:35 @@ -69,9 +69,9 @@ #include #include -#ifdef USB_DEBUG -#define DPRINTF(x) if (umodemdebug) printf x -#define DPRINTFN(n,x) if (umodemdebug>(n)) printf x +#ifdef UMODEM_DEBUG +#define DPRINTF(x) if (umodemdebug) logprintf x +#define DPRINTFN(n,x) if (umodemdebug>(n)) logprintf x int umodemdebug = 1; #else #define DPRINTF(x) Index: sys/dev/usb/ums.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/ums.c,v retrieving revision 1.3 diff -u -u -r1.3 ums.c --- ums.c 1999/03/30 00:04:25 1.3 +++ ums.c 1999/04/17 03:14:48 @@ -1,5 +1,5 @@ /* $NetBSD: ums.c,v 1.19 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/ums.c,v 1.15 1999/02/21 16:20:19 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/ums.c,v 1.16 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -81,9 +81,9 @@ #endif /* NEW_CONFIG */ #endif -#ifdef USB_DEBUG -#define DPRINTF(x) if (umsdebug) printf x -#define DPRINTFN(n,x) if (umsdebug>(n)) printf x +#ifdef UMS_DEBUG +#define DPRINTF(x) if (umsdebug) logprintf x +#define DPRINTFN(n,x) if (umsdebug>(n)) logprintf x int umsdebug = 1; #else #define DPRINTF(x) @@ -314,7 +314,7 @@ sc->sc_disconnected = 0; free(desc, M_TEMP); -#ifdef USB_DEBUG +#ifdef UMS_DEBUG DPRINTF(("ums_attach: sc=%p\n", sc)); DPRINTF(("ums_attach: X\t%d/%d\n", sc->sc_loc_x.pos, sc->sc_loc_x.size)); @@ -504,7 +504,7 @@ sc->qhead += sc->mode.packetsize; sc->qcount += sc->mode.packetsize; -#ifdef USB_DEBUG +#ifdef UMS_DEBUG if (sc->qhead > sizeof(sc->qbuf)) DPRINTF(("Buffer overrun! %d %d\n", sc->qhead, sizeof(sc->qbuf))); @@ -575,7 +575,7 @@ sc->sc_enabled = 0; -#if defined(USBVERBOSE) && defined(__FreeBSD__) +#if defined(__FreeBSD__) if (sc->qcount != 0) DPRINTF(("Discarded %d bytes in queue\n", sc->qcount)); #endif Index: sys/dev/usb/usb.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/usb.c,v retrieving revision 1.3 diff -u -u -r1.3 usb.c --- usb.c 1999/03/30 00:04:25 1.3 +++ usb.c 1999/04/17 03:34:20 @@ -1,5 +1,5 @@ /* $NetBSD: usb.c,v 1.11 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/usb.c,v 1.8 1999/01/22 00:51:12 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/usb.c,v 1.9 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -83,11 +83,10 @@ #include #ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x +#define DPRINTF(x) if (usbdebug) logprintf x +#define DPRINTFN(n,x) if (usbdebug>(n)) logprintf x int usbdebug = 1; -int uhcidebug = 1; -int ohcidebug = 1; +extern int uhcidebug, ohcidebug; #else #define DPRINTF(x) #define DPRINTFN(n,x) Index: sys/dev/usb/usb_subr.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/usb_subr.c,v retrieving revision 1.3 diff -u -u -r1.3 usb_subr.c --- usb_subr.c 1999/03/30 00:04:25 1.3 +++ usb_subr.c 1999/04/17 03:32:42 @@ -1,5 +1,5 @@ -/* $NetBSD: usb_subr.c,v 1.27 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.9 1999/03/22 19:58:59 n_hibma Exp $ */ +/* $NetBSD: usb_subr.c,v 1.29 1999/03/18 12:08:43 augustss Exp $ */ +/* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.10 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -69,8 +69,8 @@ #endif #ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x +#define DPRINTF(x) if (usbdebug) logprintf x +#define DPRINTFN(n,x) if (usbdebug>(n)) logprintf x extern int usbdebug; #else #define DPRINTF(x) @@ -94,50 +94,6 @@ __P((bdevice *parent, usbd_device_handle dev, int port, int addr)); -#ifdef USBVERBOSE -typedef u_int16_t usb_vendor_id_t; -typedef u_int16_t usb_product_id_t; - -/* - * Descriptions of of known vendors and devices ("products"). - */ -struct usb_knowndev { - usb_vendor_id_t vendor; - usb_product_id_t product; - int flags; - char *vendorname, *productname; -}; -#define USB_KNOWNDEV_NOPROD 0x01 /* match on vendor only */ - -#include -#endif /* USBVERBOSE */ - -#ifdef USB_DEBUG -char *usbd_error_strs[] = { - "NORMAL_COMPLETION", - "IN_PROGRESS", - "PENDING_REQUESTS", - "NOT_STARTED", - "INVAL", - "IS_IDLE", - "NOMEM", - "CANCELLED", - "BAD_ADDRESS", - "IN_USE", - "INTERFACE_NOT_ACTIVE", - "NO_ADDR", - "SET_ADDR_FAILED", - "NO_POWER", - "TOO_DEEP", - "IOERROR", - "NOT_CONFIGURED", - "TIMEOUT", - "SHORT_XFER", - "STALLED", - "XXX", -}; -#endif - usbd_status usbd_get_string_desc(dev, sindex, langid, sdesc) usbd_device_handle dev; @@ -213,31 +169,10 @@ { usb_device_descriptor_t *udd = &dev->ddesc; char *vendor = 0, *product = 0; -#ifdef USBVERBOSE - struct usb_knowndev *kdp; -#endif vendor = usbd_get_string(dev, udd->iManufacturer, v); product = usbd_get_string(dev, udd->iProduct, p); -#ifdef USBVERBOSE - if (!vendor) { - for(kdp = usb_knowndevs; - kdp->vendorname != NULL; - kdp++) { - if (kdp->vendor == UGETW(udd->idVendor) && - (kdp->product == UGETW(udd->idProduct) || - (kdp->flags & USB_KNOWNDEV_NOPROD) != 0)) - break; - } - if (kdp->vendorname == NULL) - vendor = product = NULL; - else { - vendor = kdp->vendorname; - product = (kdp->flags & USB_KNOWNDEV_NOPROD) == 0 ? - kdp->productname : NULL; - } - } -#endif + if (vendor) strcpy(v, vendor); else @@ -320,20 +255,23 @@ USETW(req.wIndex, port); USETW(req.wLength, 0); r = usbd_do_request(dev, &req, 0); - DPRINTFN(1,("usbd_reset_port: port %d reset done, error=%d(%s)\n", - port, r, usbd_error_strs[r])); + DPRINTFN(1,("usbd_reset_port: port %d reset done, %s\n", + port, usbd_errstr(r))); if (r != USBD_NORMAL_COMPLETION) - return (r); + return(r); + n = 10; do { /* Wait for device to recover from reset. */ usbd_delay_ms(dev, USB_PORT_RESET_DELAY); r = usbd_get_port_status(dev, port, ps); if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("usbd_reset_port: get status failed %d\n",r)); + DPRINTF(("usbd_reset_port: get port %d status failed %s\n", + port, usbd_errstr(r))); return (r); } } while ((UGETW(ps->wPortChange) & UPS_C_PORT_RESET) == 0 && --n > 0); + if (n == 0) { printf("usbd_reset_port: timeout\n"); return (USBD_IOERROR); @@ -341,7 +279,8 @@ r = usbd_clear_port_feature(dev, port, UHF_C_PORT_RESET); #ifdef USB_DEBUG if (r != USBD_NORMAL_COMPLETION) - DPRINTF(("usbd_reset_port: clear port feature failed %d\n",r)); + DPRINTF(("usbd_reset_port: clear port %d feature failed %d\n", + port, r)); #endif /* Wait for the device to recover from reset. */ @@ -593,9 +532,8 @@ (UGETW(ds.wStatus) & UDS_SELF_POWERED)) selfpowered = 1; } - DPRINTF(("usbd_set_config_index: status=0x%04x, " - "error=%d(%s)\n", - UGETW(ds.wStatus), r, usbd_error_strs[r])); + DPRINTF(("usbd_set_config_index: status=0x%04x, %s\n", + UGETW(ds.wStatus), usbd_errstr(r))); } else selfpowered = 1; } @@ -629,9 +567,8 @@ cdp->bConfigurationValue)); r = usbd_set_config(dev, cdp->bConfigurationValue); if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("usbd_set_config_index: setting config=%d failed, " - "error=%d(%s)\n", - cdp->bConfigurationValue, r, usbd_error_strs[r])); + DPRINTF(("usbd_set_config_index: setting config=%d failed, %s\n", + cdp->bConfigurationValue, usbd_errstr(r))); goto bad; } DPRINTF(("usbd_set_config_index: setting new config %d\n", @@ -688,12 +625,13 @@ p->refcnt = 1; p->intrreqh = 0; p->running = 0; + p->disco = 0; + p->discoarg = 0; SIMPLEQ_INIT(&p->queue); r = dev->bus->open_pipe(p); if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1,("usbd_setup_pipe: endpoint=0x%x failed, error=%d" - "(%s)\n", - ep->edesc->bEndpointAddress, r, usbd_error_strs[r])); + DPRINTFN(-1,("usbd_setup_pipe: endpoint=0x%x failed, %s\n", + ep->edesc->bEndpointAddress, usbd_errstr(r))); free(p, M_USB); return (r); } @@ -790,6 +728,8 @@ device_delete_child(*parent, bdev); #endif /* NEW_CONFIG */ #endif + printf("%s: port %d, set config at addr %d failed, %s\n", + USBDEVNAME(*parent), port, addr, usbd_errstr(r)); return (r); } nifaces = dev->cdesc->bNumInterface; @@ -1204,3 +1144,4 @@ } else di->nports = 0; } + Index: sys/dev/usb/usbdi.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/usbdi.c,v retrieving revision 1.4 diff -u -u -r1.4 usbdi.c --- usbdi.c 1999/04/11 14:38:56 1.4 +++ usbdi.c 1999/04/17 04:03:20 @@ -1,5 +1,5 @@ /* $NetBSD: usbdi.c,v 1.20 1999/01/08 11:58:26 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/usbdi.c,v 1.13 1999/04/05 17:01:52 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/usbdi.c,v 1.14 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -70,8 +70,8 @@ #endif #ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x +#define DPRINTF(x) if (usbdebug) logprintf x +#define DPRINTFN(n,x) if (usbdebug>(n)) logprintf x extern int usbdebug; #else #define DPRINTF(x) @@ -94,6 +94,33 @@ extern struct cdevsw usb_cdevsw; #endif +#ifdef USB_DEBUG +char *usbd_error_strs[USBD_ERROR_MAX] = { + "NORMAL_COMPLETION", + "IN_PROGRESS", + "PENDING_REQUESTS", + "NOT_STARTED", + "INVAL", + "IS_IDLE", + "NOMEM", + "CANCELLED", + "BAD_ADDRESS", + "IN_USE", + "INTERFACE_NOT_ACTIVE", + "NO_ADDR", + "SET_ADDR_FAILED", + "NO_POWER", + "TOO_DEEP", + "IOERROR", + "NOT_CONFIGURED", + "TIMEOUT", + "SHORT_XFER", + "STALLED", + "XXX", +}; +#endif + + usbd_status usbd_open_pipe(iface, address, flags, pipe) usbd_interface_handle iface; @@ -1332,3 +1359,21 @@ #endif /* NEW_CONFIG */ #endif + +char * +usbd_errstr(usbd_status err) +{ + static char buffer[5]; /* XXX static buffer */ + +#ifdef USB_DEBUG + if ( err < USBD_ERROR_MAX ) { + return usbd_error_strs[err]; + } else { + snprintf(buffer, 4, "%d", err); + return buffer; + } +#else + snprintf(buffer, 4, "%d", err); + return buffer; +#endif +} Index: sys/dev/usb/usbdi.h =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/usbdi.h,v retrieving revision 1.4 diff -u -u -r1.4 usbdi.h --- usbdi.h 1999/04/11 14:39:35 1.4 +++ usbdi.h 1999/04/17 03:15:49 @@ -1,5 +1,5 @@ /* $NetBSD: usbdi.h,v 1.16 1999/01/08 11:58:26 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/usbdi.h,v 1.8 1999/04/05 17:19:48 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/usbdi.h,v 1.9 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -96,6 +96,7 @@ USBD_INTERRUPTED, USBD_XXX, +#define USBD_ERROR_MAX 21 /* used for usbd_error_strs */ } usbd_status; typedef int usbd_lock_token; @@ -242,6 +243,9 @@ usb_endpoint_descriptor_t *usbd_find_edesc __P((usb_config_descriptor_t *cd, int ifaceidx, int altidx, int endptidx)); + +char * usbd_errstr(usbd_status err); + void usbd_dopoll __P((usbd_interface_handle)); void usbd_set_polling __P((usbd_interface_handle iface, int on)); Index: sys/dev/usb/usbdi_util.c =================================================================== RCS file: /home/cvs/newconfig/sys/dev/usb/usbdi_util.c,v retrieving revision 1.3 diff -u -u -r1.3 usbdi_util.c --- usbdi_util.c 1999/03/30 00:04:25 1.3 +++ usbdi_util.c 1999/04/17 02:53:59 @@ -1,5 +1,5 @@ /* $NetBSD: usbdi_util.c,v 1.13 1999/01/08 11:58:26 augustss Exp $ */ -/* $FreeBSD: src/sys/dev/usb/usbdi_util.c,v 1.7 1999/01/22 00:51:12 n_hibma Exp $ */ +/* $FreeBSD: src/sys/dev/usb/usbdi_util.c,v 1.8 1999/04/11 20:50:33 n_hibma Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -56,8 +56,8 @@ #include #ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x +#define DPRINTF(x) if (usbdebug) logprintf x +#define DPRINTFN(n,x) if (usbdebug>(n)) logprintf x extern int usbdebug; #else #define DPRINTF(x) Index: sys/i386/conf/NEWCONF =================================================================== RCS file: /home/cvs/newconfig/sys/i386/conf/NEWCONF,v retrieving revision 1.31 diff -u -u -r1.31 NEWCONF --- NEWCONF 1999/03/30 22:17:06 1.31 +++ NEWCONF 1999/04/17 04:13:50 @@ -273,7 +273,16 @@ xrpu* at pci? dev ? func ? # USB Controller and Devices +#options UHCI_DEBUG +#options OHCI_DEBUG #options USB_DEBUG +#options UGEN_DEBUG +#options UHID_DEBUG +#options UHUB_DEBUG +#options UKBD_DEBUG +#options ULPT_DEBUG +#options UMASS_DEBUG +#options UMS_DEBUG #options USBVERBOSE # PCI USB controllers