Changeset 8e65e1b in rtems-libbsd


Ignore:
Timestamp:
Aug 23, 2016, 1:51:45 PM (3 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
5283630d2c9d40deb0183696d278e02644fe4326, freebsd-9.3, bc2ba9a9cdc7381c2a4f2ae6ee303be636f31368
Children:
a439410
Parents:
7c77211
git-author:
Sebastian Huber <sebastian.huber@…> (08/23/16 13:51:45)
git-committer:
Sebastian Huber <sebastian.huber@…> (08/23/16 14:07:16)
Message:

usb: Update to FreeBSD trunk 2016-08-23

FreeBSD trunk, 2016-08-23, 9fe7c416e6abb28b1398fd3e5687099846800cfd.

Files:
22 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/dev/usb/controller/dwc_otg.c

    r7c77211 r8e65e1b  
    9696   (USB_DMATAG_TO_XROOT((pc)->tag_parent)->udev)
    9797
    98 #define DWC_OTG_MSK_GINT_ENABLED        \
    99    (GINTMSK_ENUMDONEMSK |               \
    100    GINTMSK_USBRSTMSK |                  \
    101    GINTMSK_USBSUSPMSK |                 \
    102    GINTMSK_IEPINTMSK |                  \
    103    GINTMSK_SESSREQINTMSK |              \
    104    GINTMSK_RXFLVLMSK |                  \
    105    GINTMSK_HCHINTMSK |                  \
    106    GINTMSK_OTGINTMSK |                  \
    107    GINTMSK_PRTINTMSK)
    108 
    10998#define DWC_OTG_MSK_GINT_THREAD_IRQ                             \
    11099   (GINTSTS_USBRST | GINTSTS_ENUMDONE | GINTSTS_PRTINT |        \
     
    379368                DWC_OTG_WRITE_4(sc, DOTG_HAINTMSK,
    380369                    (1U << sc->sc_host_ch_max) - 1U);
     370
     371                /* enable proper host channel interrupts */
     372                sc->sc_irq_mask |= GINTMSK_HCHINTMSK;
     373                sc->sc_irq_mask &= ~GINTMSK_IEPINTMSK;
     374                DWC_OTG_WRITE_4(sc, DOTG_GINTMSK, sc->sc_irq_mask);
    381375        }
    382376
     
    439433                    pf->usb.max_out_frame_size);
    440434            }
     435
     436            /* enable proper device channel interrupts */
     437            sc->sc_irq_mask &= ~GINTMSK_HCHINTMSK;
     438            sc->sc_irq_mask |= GINTMSK_IEPINTMSK;
     439            DWC_OTG_WRITE_4(sc, DOTG_GINTMSK, sc->sc_irq_mask);
    441440        }
    442441
     
    28732872                for (x = 0; x != sc->sc_dev_in_ep_max; x++) {
    28742873                        temp = DWC_OTG_READ_4(sc, DOTG_DIEPINT(x));
    2875                         if (temp & DIEPMSK_XFERCOMPLMSK) {
    2876                                 DWC_OTG_WRITE_4(sc, DOTG_DIEPINT(x),
    2877                                     DIEPMSK_XFERCOMPLMSK);
    2878                         }
     2874                        /*
     2875                         * NOTE: Need to clear all interrupt bits,
     2876                         * because some appears to be unmaskable and
     2877                         * can cause an interrupt loop:
     2878                         */
     2879                        if (temp != 0)
     2880                                DWC_OTG_WRITE_4(sc, DOTG_DIEPINT(x), temp);
    28792881                }
    28802882        }
     
    29882990                        sc->sc_flags.status_bus_reset = 0;
    29892991
    2990                 if (hprt & HPRT_PRTENCHNG)
     2992                if ((hprt & HPRT_PRTENCHNG) &&
     2993                    (hprt & HPRT_PRTENA) == 0)
    29912994                        sc->sc_flags.change_enabled = 1;
    29922995
     
    33353338                 * that. This trick should work for both FULL and LOW
    33363339                 * speed USB traffic going through a TT. For non-TT
    3337                  * traffic it works aswell. The reason for using
     3340                 * traffic it works as well. The reason for using
    33383341                 * CONTROL type instead of BULK is that some TTs might
    33393342                 * reject LOW speed BULK traffic.
     
    39823985
    39833986        /* enable interrupts */
    3984         sc->sc_irq_mask = DWC_OTG_MSK_GINT_ENABLED;
     3987        sc->sc_irq_mask |= DWC_OTG_MSK_GINT_THREAD_IRQ;
    39853988        DWC_OTG_WRITE_4(sc, DOTG_GINTMSK, sc->sc_irq_mask);
    39863989
     
    47484751        value = 0;
    47494752
     4753        if (sc->sc_flags.change_enabled)
     4754                value |= UPS_C_PORT_ENABLED;
    47504755        if (sc->sc_flags.change_connect)
    47514756                value |= UPS_C_CONNECT_STATUS;
  • freebsd/sys/dev/usb/controller/ehci.c

    r7c77211 r8e65e1b  
    192192                hcr = EOREAD4(sc, EHCI_USBCMD) & EHCI_CMD_HCRESET;
    193193                if (!hcr) {
    194                         if (sc->sc_flags & (EHCI_SCFLG_SETMODE | EHCI_SCFLG_BIGEMMIO)) {
    195                                 /*
    196                                  * Force USBMODE as requested.  Controllers
    197                                  * may have multiple operating modes.
    198                                  */
    199                                 uint32_t usbmode = EOREAD4(sc, EHCI_USBMODE);
    200                                 if (sc->sc_flags & EHCI_SCFLG_SETMODE) {
    201                                         usbmode = (usbmode &~ EHCI_UM_CM) | EHCI_UM_CM_HOST;
    202                                         device_printf(sc->sc_bus.bdev,
    203                                             "set host controller mode\n");
    204                                 }
    205                                 if (sc->sc_flags & EHCI_SCFLG_BIGEMMIO) {
    206                                         usbmode = (usbmode &~ EHCI_UM_ES) | EHCI_UM_ES_BE;
    207                                         device_printf(sc->sc_bus.bdev,
    208                                             "set big-endian mode\n");
    209                                 }
    210                                 EOWRITE4(sc,  EHCI_USBMODE, usbmode);
    211                         }
     194                        if (sc->sc_vendor_post_reset != NULL)
     195                                sc->sc_vendor_post_reset(sc);
    212196                        return (0);
    213197                }
     
    16861670                                /* update data toggle */
    16871671
    1688                                 if (((average + temp->max_frame_size - 1) /
    1689                                     temp->max_frame_size) & 1) {
     1672                                if (howmany(average, temp->max_frame_size) & 1) {
    16901673                                        temp->qtd_status ^=
    16911674                                            htohc32(temp->sc, EHCI_QTD_TOGGLE_MASK);
     
    30233006        64,                             /* max packet */
    30243007        {0}, {0}, {0x00, 0x01},         /* device id */
    3025         1, 2, 0,                        /* string indicies */
     3008        1, 2, 0,                        /* string indexes */
    30263009        1                               /* # of configurations */
    30273010};
     
    30763059        .bDescriptorType = UDESC_HUB,
    30773060};
     3061
     3062uint16_t
     3063ehci_get_port_speed_portsc(struct ehci_softc *sc, uint16_t index)
     3064{
     3065        uint32_t v;
     3066
     3067        v = EOREAD4(sc, EHCI_PORTSC(index));
     3068        v = (v >> EHCI_PORTSC_PSPD_SHIFT) & EHCI_PORTSC_PSPD_MASK;
     3069
     3070        if (v == EHCI_PORT_SPEED_HIGH)
     3071                return (UPS_HIGH_SPEED);
     3072        if (v == EHCI_PORT_SPEED_LOW)
     3073                return (UPS_LOW_SPEED);
     3074        return (0);
     3075}
     3076
     3077uint16_t
     3078ehci_get_port_speed_hostc(struct ehci_softc *sc, uint16_t index)
     3079{
     3080        uint32_t v;
     3081
     3082        v = EOREAD4(sc, EHCI_HOSTC(index));
     3083        v = (v >> EHCI_HOSTC_PSPD_SHIFT) & EHCI_HOSTC_PSPD_MASK;
     3084
     3085        if (v == EHCI_PORT_SPEED_HIGH)
     3086                return (UPS_HIGH_SPEED);
     3087        if (v == EHCI_PORT_SPEED_LOW)
     3088                return (UPS_LOW_SPEED);
     3089        return (0);
     3090}
    30783091
    30793092static void
     
    33413354                v = EOREAD4(sc, EHCI_PORTSC(index));
    33423355                DPRINTFN(9, "port status=0x%04x\n", v);
    3343                 if (sc->sc_flags & (EHCI_SCFLG_FORCESPEED | EHCI_SCFLG_TT)) {
    3344                         if ((v & 0xc000000) == 0x8000000)
     3356                if (sc->sc_flags & EHCI_SCFLG_TT) {
     3357                        if (sc->sc_vendor_get_port_speed != NULL) {
     3358                                i = sc->sc_vendor_get_port_speed(sc, index);
     3359                        } else {
     3360                                device_printf(sc->sc_bus.bdev,
     3361                                    "EHCI_SCFLG_TT quirk is set but "
     3362                                    "sc_vendor_get_hub_speed() is NULL\n");
    33453363                                i = UPS_HIGH_SPEED;
    3346                         else if ((v & 0xc000000) == 0x4000000)
    3347                                 i = UPS_LOW_SPEED;
    3348                         else
    3349                                 i = 0;
     3364                        }
    33503365                } else {
    33513366                        i = UPS_HIGH_SPEED;
  • freebsd/sys/dev/usb/controller/ehci.h

    r7c77211 r8e65e1b  
    338338        uint16_t sc_id_vendor;          /* vendor ID for root hub */
    339339        uint16_t sc_flags;              /* chip specific flags */
    340 #define EHCI_SCFLG_SETMODE      0x0001  /* set bridge mode again after init */
    341 #define EHCI_SCFLG_FORCESPEED   0x0002  /* force speed */
    342340#define EHCI_SCFLG_NORESTERM    0x0004  /* don't terminate reset sequence */
    343341#define EHCI_SCFLG_BIGEDESC     0x0008  /* big-endian byte order descriptors */
    344 #define EHCI_SCFLG_BIGEMMIO     0x0010  /* big-endian byte order MMIO */
    345342#define EHCI_SCFLG_TT           0x0020  /* transaction translator present */
    346343#define EHCI_SCFLG_LOSTINTRBUG  0x0040  /* workaround for VIA / ATI chipsets */
     
    358355
    359356        char    sc_vendor[16];          /* vendor string for root hub */
     357
     358        void    (*sc_vendor_post_reset)(struct ehci_softc *sc);
     359        uint16_t (*sc_vendor_get_port_speed)(struct ehci_softc *sc,
     360            uint16_t index);
    360361
    361362} ehci_softc_t;
     
    477478void    ehci_resume(ehci_softc_t *sc);
    478479#endif /* __rtems__ */
     480uint16_t ehci_get_port_speed_portsc(struct ehci_softc *sc, uint16_t index);
     481uint16_t ehci_get_port_speed_hostc(struct ehci_softc *sc, uint16_t index);
    479482
    480483#endif                                  /* _EHCI_H_ */
  • freebsd/sys/dev/usb/controller/ehcireg.h

    r7c77211 r8e65e1b  
    158158#define EHCI_PS_CLEAR           (EHCI_PS_OCC | EHCI_PS_PEC | EHCI_PS_CSC)
    159159
    160 #define EHCI_USBMODE            0x68    /* RW USB Device mode register */
     160#define EHCI_PORT_RESET_COMPLETE        2       /* ms */
     161
     162/*
     163 * Registers not covered by EHCI specification
     164 *
     165 *
     166 * EHCI_USBMODE register offset is different for cores with LPM support,
     167 * bits are equal
     168 */
     169#define EHCI_USBMODE_NOLPM      0x68    /* RW USB Device mode reg (no LPM) */
     170#define EHCI_USBMODE_LPM        0xC8    /* RW USB Device mode reg (LPM) */
    161171#define EHCI_UM_CM              0x00000003      /* R/WO Controller Mode */
    162172#define EHCI_UM_CM_IDLE         0x0     /* Idle */
     
    167177#define EHCI_UM_SDIS            0x00000010      /* R/WO Stream Disable Mode */
    168178
    169 #define EHCI_PORT_RESET_COMPLETE        2       /* ms */
     179/*
     180 * Actual port speed bits depends on EHCI_HOSTC(n) registers presence,
     181 * speed encoding is equal
     182 */
     183#define EHCI_HOSTC(n)           (0x80+(4*(n)))  /* RO, RW Host mode control reg */
     184#define EHCI_HOSTC_PSPD_SHIFT   25
     185#define EHCI_HOSTC_PSPD_MASK    0x3
    170186
     187#define EHCI_PORTSC_PSPD_SHIFT  26
     188#define EHCI_PORTSC_PSPD_MASK   0x3
     189
     190#define EHCI_PORT_SPEED_FULL    0
     191#define EHCI_PORT_SPEED_LOW     1
     192#define EHCI_PORT_SPEED_HIGH    2
    171193#endif  /* _EHCIREG_H_ */
  • freebsd/sys/dev/usb/controller/ohci.c

    r7c77211 r8e65e1b  
    20462046        64,                             /* max packet */
    20472047        {0}, {0}, {0x00, 0x01},         /* device id */
    2048         1, 2, 0,                        /* string indicies */
     2048        1, 2, 0,                        /* string indexes */
    20492049        1                               /* # of configurations */
    20502050};
     
    24402440
    24412441                nitd = ((xfer->max_data_length / OHCI_PAGE_SIZE) +
    2442                     ((xfer->nframes + OHCI_ITD_NOFFSET - 1) / OHCI_ITD_NOFFSET) +
     2442                    howmany(xfer->nframes, OHCI_ITD_NOFFSET) +
    24432443                    1 /* EXTRA */ );
    24442444                ntd = 0;
  • freebsd/sys/dev/usb/controller/xhcireg.h

    r7c77211 r8e65e1b  
    4646#define XHCI_HCIVERSION_0_9     0x0090  /* xHCI version 0.9 */
    4747#define XHCI_HCIVERSION_1_0     0x0100  /* xHCI version 1.0 */
    48 #define XHCI_HCSPARAMS1         0x04    /* RO structual parameters 1 */
     48#define XHCI_HCSPARAMS1         0x04    /* RO structural parameters 1 */
    4949#define XHCI_HCS1_DEVSLOT_MAX(x)((x) & 0xFF)
    5050#define XHCI_HCS1_IRQ_MAX(x)    (((x) >> 8) & 0x3FF)
    5151#define XHCI_HCS1_N_PORTS(x)    (((x) >> 24) & 0xFF)
    52 #define XHCI_HCSPARAMS2         0x08    /* RO structual parameters 2 */
     52#define XHCI_HCSPARAMS2         0x08    /* RO structural parameters 2 */
    5353#define XHCI_HCS2_IST(x)        ((x) & 0xF)
    5454#define XHCI_HCS2_ERST_MAX(x)   (((x) >> 4) & 0xF)
    55 #define XHCI_HCS2_SPR(x)        (((x) >> 24) & 0x1)
    56 #define XHCI_HCS2_SPB_MAX(x)    (((x) >> 27) & 0x7F)
    57 #define XHCI_HCSPARAMS3         0x0C    /* RO structual parameters 3 */
     55#define XHCI_HCS2_SPR(x)        (((x) >> 26) & 0x1)
     56#define XHCI_HCS2_SPB_MAX(x)    ((((x) >> 16) & 0x3E0) | (((x) >> 27) & 0x1F))
     57#define XHCI_HCSPARAMS3         0x0C    /* RO structural parameters 3 */
    5858#define XHCI_HCS3_U1_DEL(x)     ((x) & 0xFF)
    5959#define XHCI_HCS3_U2_DEL(x)     (((x) >> 16) & 0xFFFF)
  • freebsd/sys/dev/usb/quirk/usb_quirk.c

    r7c77211 r8e65e1b  
    139139        /* Quirk for Corsair Vengeance K70 keyboard */
    140140        USB_QUIRK(CORSAIR, K70, 0x0000, 0xffff, UQ_KBD_BOOTPROTO),
     141        /* Quirk for Corsair STRAFE Gaming keyboard */
     142        USB_QUIRK(CORSAIR, STRAFE, 0x0000, 0xffff, UQ_KBD_BOOTPROTO),
    141143        /* umodem(4) device quirks */
    142144        USB_QUIRK(METRICOM, RICOCHET_GS, 0x100, 0x100, UQ_ASSUME_CM_OVER_DATA),
     
    201203        USB_QUIRK(FUJIPHOTO, MASS0100, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI_I,
    202204            UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_RS_CLEAR_UA, UQ_MSC_NO_SYNC_CACHE),
     205        USB_QUIRK(GARMIN, FORERUNNER230, 0x0000, 0xffff, UQ_MSC_NO_INQUIRY),
    203206        USB_QUIRK(GENESYS, GL641USB2IDE, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
    204207            UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
     
    532535        /* DYMO LabelManager Pnp */
    533536        USB_QUIRK(DYMO, LABELMANAGERPNP, 0x0000, 0xffff, UQ_MSC_DYMO_EJECT),
     537
     538        /* Holtek USB gaming keyboard */
     539        USB_QUIRK(HOLTEK, F85, 0x0000, 0xffff, UQ_KBD_BOOTPROTO),
    534540};
    535541#undef USB_QUIRK_VP
     
    685691                        }
    686692                }
    687                 /* no quirk found */
    688                 break;
    689693        }
    690694        mtx_unlock(&usb_quirk_mtx);
  • freebsd/sys/dev/usb/storage/umass.c

    r7c77211 r8e65e1b  
    711711};
    712712
     713static const STRUCT_USB_HOST_ID __used umass_devs[] = {
     714        /* generic mass storage class */
     715        {USB_IFACE_CLASS(UICLASS_MASS),},
     716};
     717
    713718DRIVER_MODULE(umass, uhub, umass_driver, umass_devclass, NULL, 0);
    714719MODULE_DEPEND(umass, usb, 1, 1, 1);
    715720MODULE_DEPEND(umass, cam, 1, 1, 1);
    716721MODULE_VERSION(umass, 1);
     722#ifndef __rtems__
     723USB_PNP_HOST_INFO(umass_devs);
     724#endif /* __rtems__ */
    717725
    718726/*
    719727 * USB device probe/attach/detach
    720728 */
    721 
    722 static const STRUCT_USB_HOST_ID __used umass_devs[] = {
    723         /* generic mass storage class */
    724         {USB_IFACE_CLASS(UICLASS_MASS),},
    725 };
    726729
    727730static uint16_t
     
    27312734                }
    27322735                sc->sc_transfer.cmd_len = cmd_len;
    2733                 return (1);             /* sucess */
     2736                return (1);             /* success */
    27342737
    27352738                /* All other commands are not legal in RBC */
  • freebsd/sys/dev/usb/usb_busdma.c

    r7c77211 r8e65e1b  
    470470        off = 0;
    471471        pg = pc->page_start;
    472         pg->physaddr = segs->ds_addr & ~(USB_PAGE_SIZE - 1);
     472        pg->physaddr = rounddown2(segs->ds_addr, USB_PAGE_SIZE);
    473473        rem = segs->ds_addr & (USB_PAGE_SIZE - 1);
    474474        pc->page_offset_buf = rem;
    475475        pc->page_offset_end += rem;
    476476#ifdef USB_DEBUG
    477         if (nseg > 1 &&
    478             ((segs->ds_addr + segs->ds_len) & (USB_PAGE_SIZE - 1)) !=
    479             ((segs + 1)->ds_addr & (USB_PAGE_SIZE - 1))) {
    480                 /*
    481                  * This check verifies there is no page offset hole
    482                  * between the first and second segment. See the
    483                  * BUS_DMA_KEEP_PG_OFFSET flag.
    484                  */
    485                 DPRINTFN(0, "Page offset was not preserved\n");
    486                 error = 1;
    487                 goto done;
     477        if (nseg > 1) {
     478                int x;
     479
     480                for (x = 0; x != nseg - 1; x++) {
     481                        if (((segs[x].ds_addr + segs[x].ds_len) & (USB_PAGE_SIZE - 1)) ==
     482                            ((segs[x + 1].ds_addr & (USB_PAGE_SIZE - 1))))
     483                                continue;
     484                        /*
     485                         * This check verifies there is no page offset
     486                         * hole between any of the segments. See the
     487                         * BUS_DMA_KEEP_PG_OFFSET flag.
     488                         */
     489                        DPRINTFN(0, "Page offset was not preserved\n");
     490                        error = 1;
     491                        goto done;
     492                }
    488493        }
    489494#endif
     
    500505                }
    501506                pg++;
    502                 pg->physaddr = (segs->ds_addr + off) & ~(USB_PAGE_SIZE - 1);
     507                pg->physaddr = rounddown2(segs->ds_addr + off, USB_PAGE_SIZE);
    503508        }
    504509
  • freebsd/sys/dev/usb/usb_cdc.h

    r7c77211 r8e65e1b  
    162162
    163163/*
    164  * Bits set in the SERIAL STATE notifcation (first byte of data)
     164 * Bits set in the SERIAL STATE notification (first byte of data)
    165165 */
    166166
  • freebsd/sys/dev/usb/usb_dev.c

    r7c77211 r8e65e1b  
    182182 * This function is used to atomically refer an USB device by its
    183183 * device location. If this function returns success the USB device
    184  * will not dissappear until the USB device is unreferenced.
     184 * will not disappear until the USB device is unreferenced.
    185185 *
    186186 * Return values:
     
    231231                 * grabbing the FIFO refs to avoid deadlock at detach!
    232232                 */
    233                 crd->do_unlock = usbd_enum_lock(cpd->udev);
     233                crd->do_unlock = usbd_enum_lock_sig(cpd->udev);
    234234
    235235                mtx_lock(&usb_ref_lock);
     
    239239                 */
    240240                crd->is_uref = 1;
     241
     242                /* check for signal */
     243                if (crd->do_unlock > 1) {
     244                        crd->do_unlock = 0;
     245                        goto error;
     246                }
    241247        }
    242248
  • freebsd/sys/dev/usb/usb_device.c

    r7c77211 r8e65e1b  
    197197
    198198        /*
    199          * Iterate accross all the USB endpoints searching for a match
     199         * Iterate across all the USB endpoints searching for a match
    200200         * based on the endpoint address:
    201201         */
     
    307307
    308308        /*
    309          * Iterate accross all the USB endpoints searching for a match
     309         * Iterate across all the USB endpoints searching for a match
    310310         * based on the endpoint address. Note that we are searching
    311311         * the endpoints from the beginning of the "udev->endpoints" array.
     
    17311731                err = (usb_temp_setup_by_index_p) (udev, usb_template);
    17321732                if (err) {
    1733                         DPRINTFN(0, "setting up USB template failed maybe the USB "
    1734                             "template module has not been loaded\n");
     1733                        DPRINTFN(0, "setting up USB template failed - "
     1734                            "usb_template(4) not loaded?\n");
    17351735                        goto done;
    17361736                }
     
    17811781        scratch_ptr = udev->scratch.data;
    17821782
    1783         if (udev->ddesc.iManufacturer ||
     1783        if (udev->flags.no_strings) {
     1784                err = USB_ERR_INVAL;
     1785        } else if (udev->ddesc.iManufacturer ||
    17841786            udev->ddesc.iProduct ||
    17851787            udev->ddesc.iSerialNumber) {
     
    19691971{
    19701972        struct usb_fs_privdata* pd;
     1973        struct make_dev_args args;
    19711974        char buffer[32];
    19721975
     
    19871990        }
    19881991
    1989         pd->cdev = make_dev(&usb_devsw, 0, uid, gid, mode, "%s", devname);
    1990 
    1991         if (pd->cdev == NULL) {
     1992        /* Setup arguments for make_dev_s() */
     1993        make_dev_args_init(&args);
     1994        args.mda_devsw = &usb_devsw;
     1995        args.mda_uid = uid;
     1996        args.mda_gid = gid;
     1997        args.mda_mode = mode;
     1998        args.mda_si_drv1 = pd;
     1999
     2000        if (make_dev_s(&args, &pd->cdev, "%s", devname) != 0) {
    19922001                DPRINTFN(0, "Failed to create device %s\n", devname);
    19932002                free(pd, M_USBDEV);
    19942003                return (NULL);
    19952004        }
    1996 
    1997         /* XXX setting si_drv1 and creating the device is not atomic! */
    1998         pd->cdev->si_drv1 = pd;
    1999 
    20002005        return (pd);
    20012006}
     
    27422747 * The following function locks enumerating the given USB device. If
    27432748 * the lock is already grabbed this function returns zero. Else a
    2744  * non-zero value is returned.
     2749 * a value of one is returned.
    27452750 */
    27462751uint8_t
     
    27612766}
    27622767
     2768#if USB_HAVE_UGEN
     2769/*
     2770 * This function is the same like usbd_enum_lock() except a value of
     2771 * 255 is returned when a signal is pending:
     2772 */
     2773uint8_t
     2774usbd_enum_lock_sig(struct usb_device *udev)
     2775{
     2776        if (sx_xlocked(&udev->enum_sx))
     2777                return (0);
     2778        if (sx_xlock_sig(&udev->enum_sx))
     2779                return (255);
     2780        if (sx_xlock_sig(&udev->sr_sx)) {
     2781                sx_xunlock(&udev->enum_sx);
     2782                return (255);
     2783        }
     2784        mtx_lock(&Giant);
     2785        return (1);
     2786}
     2787#endif
     2788
    27632789/* The following function unlocks enumerating the given USB device. */
    27642790
  • freebsd/sys/dev/usb/usb_device.h

    r7c77211 r8e65e1b  
    315315
    316316uint8_t usbd_enum_lock(struct usb_device *);
     317#if USB_HAVE_UGEN
     318uint8_t usbd_enum_lock_sig(struct usb_device *);
     319#endif
    317320void    usbd_enum_unlock(struct usb_device *);
    318321void    usbd_sr_lock(struct usb_device *);
  • freebsd/sys/dev/usb/usb_handle_request.c

    r7c77211 r8e65e1b  
    316316                        /*
    317317                         * We assume that the endpoints are the same
    318                          * accross the alternate settings.
     318                         * across the alternate settings.
    319319                         *
    320320                         * Reset the endpoints, because re-attaching
  • freebsd/sys/dev/usb/usb_hid.c

    r7c77211 r8e65e1b  
    357357                                        if (c->loc.count > 255) {
    358358                                                DPRINTFN(0, "Number of "
    359                                                     "items truncated to 255\n");
     359                                                    "items(%u) truncated to 255\n",
     360                                                    (unsigned)(c->loc.count));
    360361                                                s->ncount = 255;
    361362                                        } else
     
    578579        for (d = hid_start_parse(buf, len, 1 << k); hid_get_item(d, &h);) {
    579580                if (h.kind == k) {
    580                         /* check for ID-byte presense */
     581                        /* check for ID-byte presence */
    581582                        if ((h.report_ID != 0) && !any_id) {
    582583                                if (id != NULL)
  • freebsd/sys/dev/usb/usb_hub.c

    r7c77211 r8e65e1b  
    17351735                snprintf(buf, buflen, "vendor=0x%04x product=0x%04x "
    17361736                    "devclass=0x%02x devsubclass=0x%02x "
     1737                    "devproto=0x%02x "
    17371738                    "sernum=\"%s\" "
    17381739                    "release=0x%04x "
     
    17441745                    res.udev->ddesc.bDeviceClass,
    17451746                    res.udev->ddesc.bDeviceSubClass,
     1747                    res.udev->ddesc.bDeviceProtocol,
    17461748                    usb_get_serial(res.udev),
    17471749                    UGETW(res.udev->ddesc.bcdDevice),
     
    17681770 * ===============================
    17691771 *
    1770  * When doing LOW- and FULL-speed USB transfers accross a HIGH-speed
     1772 * When doing LOW- and FULL-speed USB transfers across a HIGH-speed
    17711773 * USB HUB, bandwidth must be allocated for ISOCHRONOUS and INTERRUPT
    17721774 * USB transfers. To utilize bandwidth dynamically the "scatter and
     
    18401842 *      usb_hs_bandwidth_adjust
    18411843 *
    1842  * This function will update the bandwith usage for the microframe
     1844 * This function will update the bandwidth usage for the microframe
    18431845 * having index "slot" by "len" bytes. "len" can be negative.  If the
    18441846 * "slot" argument is greater or equal to "USB_HS_MICRO_FRAMES_MAX"
     
    23122314        }
    23132315        /*
    2314          * Explore all USB busses in parallell.
     2316         * Explore all USB busses in parallel.
    23152317         */
    23162318        max = devclass_get_maxunit(dc);
  • freebsd/sys/dev/usb/usb_lookup.c

    r7c77211 r8e65e1b  
    157157 *      Export the USB device ID format we use to userspace tools.
    158158 *------------------------------------------------------------------------*/
    159 #if BYTE_ORDER == BIG_ENDIAN
     159#if BYTE_ORDER == LITTLE_ENDIAN
     160#define U16_XOR "0"
     161#else
    160162#define U16_XOR "8"
    161 #define U32_XOR "12"
    162 #define U64_XOR "56"
    163 #define U8_BITFIELD_XOR "7"
    164 #define U16_BITFIELD_XOR "15"
    165 #define U32_BITFIELD_XOR "31"
    166 #define U64_BITFIELD_XOR "63"
    167 #else
    168 #define U16_XOR "0"
    169 #define U32_XOR "0"
    170 #define U64_XOR "0"
    171 #define U8_BITFIELD_XOR "0"
    172 #define U16_BITFIELD_XOR "0"
    173 #define U32_BITFIELD_XOR "0"
    174 #define U64_BITFIELD_XOR "0"
    175 #endif
    176 
    177 #if USB_HAVE_COMPAT_LINUX
    178 #define MFL_SIZE "1"
    179 #else
    180 #define MFL_SIZE "0"
    181163#endif
    182164
     
    192174        /* List size of fields in the usb_device_id structure */
    193175
    194 #if ULONG_MAX >= 0xFFFFFFFFUL
    195         "unused{0,8}"
    196         "unused{0,8}"
    197         "unused{0,8}"
    198         "unused{0,8}"
    199 #if ULONG_MAX >= 0xFFFFFFFFFFFFFFFFULL
    200         "unused{0,8}"
    201         "unused{0,8}"
    202         "unused{0,8}"
    203         "unused{0,8}"
    204 #endif
    205 #else
    206 #error "Please update code."
    207 #endif
     176        "mf_vendor{" U16_XOR ",1}"
     177        "mf_product{" U16_XOR ",1}"
     178        "mf_dev_lo{" U16_XOR ",1}"
     179        "mf_dev_hi{" U16_XOR ",1}"
     180
     181        "mf_dev_class{" U16_XOR ",1}"
     182        "mf_dev_subclass{" U16_XOR ",1}"
     183        "mf_dev_protocol{" U16_XOR ",1}"
     184        "mf_int_class{" U16_XOR ",1}"
     185
     186        "mf_int_subclass{" U16_XOR ",1}"
     187        "mf_int_protocol{" U16_XOR ",1}"
     188        "unused{" U16_XOR ",6}"
    208189
    209190        "idVendor[0]{" U16_XOR ",8}"
     
    223204        "bInterfaceProtocol{0,8}"
    224205
    225         "mf_vendor{" U8_BITFIELD_XOR ",1}"
    226         "mf_product{" U8_BITFIELD_XOR ",1}"
    227         "mf_dev_lo{" U8_BITFIELD_XOR ",1}"
    228         "mf_dev_hi{" U8_BITFIELD_XOR ",1}"
    229 
    230         "mf_dev_class{" U8_BITFIELD_XOR ",1}"
    231         "mf_dev_subclass{" U8_BITFIELD_XOR ",1}"
    232         "mf_dev_protocol{" U8_BITFIELD_XOR ",1}"
    233         "mf_int_class{" U8_BITFIELD_XOR ",1}"
    234 
    235         "mf_int_subclass{" U8_BITFIELD_XOR ",1}"
    236         "mf_int_protocol{" U8_BITFIELD_XOR ",1}"
    237         "unused{" U8_BITFIELD_XOR ",6}"
    238 
    239         "mfl_vendor{" U16_XOR "," MFL_SIZE "}"
    240         "mfl_product{" U16_XOR "," MFL_SIZE "}"
    241         "mfl_dev_lo{" U16_XOR "," MFL_SIZE "}"
    242         "mfl_dev_hi{" U16_XOR "," MFL_SIZE "}"
    243 
    244         "mfl_dev_class{" U16_XOR "," MFL_SIZE "}"
    245         "mfl_dev_subclass{" U16_XOR "," MFL_SIZE "}"
    246         "mfl_dev_protocol{" U16_XOR "," MFL_SIZE "}"
    247         "mfl_int_class{" U16_XOR "," MFL_SIZE "}"
    248 
    249         "mfl_int_subclass{" U16_XOR "," MFL_SIZE "}"
    250         "mfl_int_protocol{" U16_XOR "," MFL_SIZE "}"
    251         "unused{" U16_XOR "," MFL_SIZE "}"
    252         "unused{" U16_XOR "," MFL_SIZE "}"
    253 
    254         "unused{" U16_XOR "," MFL_SIZE "}"
    255         "unused{" U16_XOR "," MFL_SIZE "}"
    256         "unused{" U16_XOR "," MFL_SIZE "}"
    257         "unused{" U16_XOR "," MFL_SIZE "}"
     206#if USB_HAVE_COMPAT_LINUX
     207        "mfl_vendor{" U16_XOR ",1}"
     208        "mfl_product{" U16_XOR ",1}"
     209        "mfl_dev_lo{" U16_XOR ",1}"
     210        "mfl_dev_hi{" U16_XOR ",1}"
     211
     212        "mfl_dev_class{" U16_XOR ",1}"
     213        "mfl_dev_subclass{" U16_XOR ",1}"
     214        "mfl_dev_protocol{" U16_XOR ",1}"
     215        "mfl_int_class{" U16_XOR ",1}"
     216
     217        "mfl_int_subclass{" U16_XOR ",1}"
     218        "mfl_int_protocol{" U16_XOR ",1}"
     219        "unused{" U16_XOR ",6}"
     220#endif
    258221};
    259222#endif
  • freebsd/sys/dev/usb/usb_transfer.c

    r7c77211 r8e65e1b  
    259259                 * to nearest one:
    260260                 */
    261                 n_dma_pc = ((count + n_obj - 1) / n_obj);
     261                n_dma_pc = howmany(count, n_obj);
    262262                n_dma_pg = 1;
    263263        }
     
    628628         * NOTE: we do not allow "max_packet_size" or "max_frame_size"
    629629         * to be equal to zero when setting up USB transfers, hence
    630          * this leads to alot of extra code in the USB kernel.
     630         * this leads to a lot of extra code in the USB kernel.
    631631         */
    632632
     
    956956                return (USB_ERR_INVAL);
    957957        }
    958         if (ifaces == 0) {
     958        if (ifaces == NULL) {
    959959                DPRINTFN(6, "ifaces array is NULL!\n");
    960960                return (USB_ERR_INVAL);
     
    24792479 * This function is called when the DMA delay has been exectuded, and
    24802480 * will make sure that the callback is called to complete the USB
    2481  * transfer. This code path is ususally only used when there is an USB
     2481 * transfer. This code path is usually only used when there is an USB
    24822482 * error like USB_ERR_CANCELLED.
    24832483 *------------------------------------------------------------------------*/
  • freebsd/sys/dev/usb/usbdi.h

    r7c77211 r8e65e1b  
    242242 * Use these macro when defining USB device ID arrays if you want to
    243243 * have your driver module automatically loaded in host, device or
    244  * both modes respectivly:
     244 * both modes respectively:
    245245 */
    246246#if USB_HAVE_ID_SECTION
     
    267267struct usb_device_id {
    268268
    269         /* Hook for driver specific information */
    270         unsigned long driver_info;
     269        /* Select which fields to match against */
     270#if BYTE_ORDER == LITTLE_ENDIAN
     271        uint16_t
     272                match_flag_vendor:1,
     273                match_flag_product:1,
     274                match_flag_dev_lo:1,
     275                match_flag_dev_hi:1,
     276
     277                match_flag_dev_class:1,
     278                match_flag_dev_subclass:1,
     279                match_flag_dev_protocol:1,
     280                match_flag_int_class:1,
     281
     282                match_flag_int_subclass:1,
     283                match_flag_int_protocol:1,
     284                match_flag_unused:6;
     285#else
     286        uint16_t
     287                match_flag_unused:6,
     288                match_flag_int_protocol:1,
     289                match_flag_int_subclass:1,
     290
     291                match_flag_int_class:1,
     292                match_flag_dev_protocol:1,
     293                match_flag_dev_subclass:1,
     294                match_flag_dev_class:1,
     295
     296                match_flag_dev_hi:1,
     297                match_flag_dev_lo:1,
     298                match_flag_product:1,
     299                match_flag_vendor:1;
     300#endif
    271301
    272302        /* Used for product specific matches; the BCD range is inclusive */
     
    285315        uint8_t bInterfaceSubClass;
    286316        uint8_t bInterfaceProtocol;
    287 
    288         /* Select which fields to match against */
    289         uint8_t match_flag_vendor:1;
    290         uint8_t match_flag_product:1;
    291         uint8_t match_flag_dev_lo:1;
    292         uint8_t match_flag_dev_hi:1;
    293 
    294         uint8_t match_flag_dev_class:1;
    295         uint8_t match_flag_dev_subclass:1;
    296         uint8_t match_flag_dev_protocol:1;
    297         uint8_t match_flag_int_class:1;
    298 
    299         uint8_t match_flag_int_subclass:1;
    300         uint8_t match_flag_int_protocol:1;
    301         uint8_t match_flag_unused:6;
    302317
    303318#if USB_HAVE_COMPAT_LINUX
     
    315330#define USB_DEVICE_ID_MATCH_INT_PROTOCOL        0x0200
    316331#endif
     332
     333        /* Hook for driver specific information */
     334        unsigned long driver_info;
    317335} __aligned(32);
     336
     337#define USB_STD_PNP_INFO "M16:mask;U16:vendor;U16:product;L16:product;G16:product;" \
     338        "U8:devclass;U8:devsubclass;U8:devprotocol;" \
     339        "U8:intclass;U8:intsubclass;U8:intprotocol;"
     340#define USB_STD_PNP_HOST_INFO USB_STD_PNP_INFO "T:mode=host;"
     341#define USB_STD_PNP_DEVICE_INFO USB_STD_PNP_INFO "T:mode=device;"
     342#define USB_PNP_HOST_INFO(table)                                        \
     343        MODULE_PNP_INFO(USB_STD_PNP_HOST_INFO, usb, table, table, sizeof(table[0]), \
     344            sizeof(table) / sizeof(table[0]))
     345#define USB_PNP_DEVICE_INFO(table)                                      \
     346        MODULE_PNP_INFO(USB_STD_PNP_DEVICE_INFO, usb, table, table, sizeof(table[0]), \
     347            sizeof(table) / sizeof(table[0]))
     348#define USB_PNP_DUAL_INFO(table)                                        \
     349        MODULE_PNP_INFO(USB_STD_PNP_INFO, usb, table, table, sizeof(table[0]), \
     350            sizeof(table) / sizeof(table[0]))
    318351
    319352/* check that the size of the structure above is correct */
  • libbsd.txt

    r7c77211 r8e65e1b  
    779779. sys/dev/dwc/*, trunk, 2015-03-26, cfc3df2b8f708ce8494d9d556e3472a5c8c21b8a
    780780. sys/dev/mmc/*, trunk, 2016-08-23, 9fe7c416e6abb28b1398fd3e5687099846800cfd
    781 . sys/dev/usb/*, trunk, 2015-10-30, 968dafb4fcf133cb8beb6fa3c558fecd7dc00ef0
     781. sys/dev/usb/*, trunk, 2016-08-23, 9fe7c416e6abb28b1398fd3e5687099846800cfd
    782782. *, stable/9, 2015-04-08, 99a648a912e81e29d9c4c159cbbe263462f2d719
    783783
  • rtemsbsd/include/rtems/bsd/local/usbdevs.h

    r7c77211 r8e65e1b  
    142142#define USB_VENDOR_BTC  0x046e          /* Behavior Tech. Computer */
    143143#define USB_VENDOR_PHILIPS      0x0471          /* Philips */
    144 #define USB_VENDOR_SUN2 0x0472          /* Sun Microsystems (offical) */
     144#define USB_VENDOR_SUN2 0x0472          /* Sun Microsystems (official) */
    145145#define USB_VENDOR_SANYO        0x0474          /* Sanyo Electric */
    146146#define USB_VENDOR_SEAGATE      0x0477          /* Seagate */
     
    843843#define USB_PRODUCT_ABOCOM_RTL8188CU_2  0x8189          /* RTL8188CU */
    844844#define USB_PRODUCT_ABOCOM_RTL8192CU    0x8178          /* RTL8192CU */
     845#define USB_PRODUCT_ABOCOM_RTL8188EU    0x8179          /* RTL8188EU */
    845846#define USB_PRODUCT_ABOCOM_WUG2700      0xb21f          /* WUG2700 */
    846847
     
    11391140#define USB_PRODUCT_APPLE_WELLSPRING8_ISO       0x0291          /* Apple Internal Keyboard/Trackpad */
    11401141#define USB_PRODUCT_APPLE_WELLSPRING8_JIS       0x0292          /* Apple Internal Keyboard/Trackpad */
     1142/* MacbookPro12,1 */
     1143#define USB_PRODUCT_APPLE_WELLSPRING9_ANSI      0x0272          /* Apple Internal Keyboard/Trackpad */
     1144#define USB_PRODUCT_APPLE_WELLSPRING9_ISO       0x0273          /* Apple Internal Keyboard/Trackpad */
     1145#define USB_PRODUCT_APPLE_WELLSPRING9_JIS       0x0274          /* Apple Internal Keyboard/Trackpad */
    11411146#define USB_PRODUCT_APPLE_MOUSE 0x0301          /* Mouse M4848 */
    11421147#define USB_PRODUCT_APPLE_OPTMOUSE      0x0302          /* Optical mouse */
     
    15131518#define USB_PRODUCT_CORSAIR_K60 0x0a60          /* Corsair Vengeance K60 keyboard */
    15141519#define USB_PRODUCT_CORSAIR_K70 0x1b09          /* Corsair Vengeance K70 keyboard */
     1520#define USB_PRODUCT_CORSAIR_STRAFE      0x1b15          /* Cossair STRAFE Gaming keyboard */
    15151521
    15161522/* Creative products */
     
    17031709#define USB_PRODUCT_DISPLAYLINK_POLARIS2        0x0117          /* Polaris2 USB dock */
    17041710#define USB_PRODUCT_DISPLAYLINK_PLUGABLE        0x0377          /* Plugable docking station */
     1711#define USB_PRODUCT_DISPLAYLINK_ITEC    0x02e9          /* i-tec USB 2.0 Docking Station */
    17051712
    17061713/* DMI products */
     
    21522159
    21532160/* Garmin products */
     2161#define USB_PRODUCT_GARMIN_FORERUNNER230        0x086d          /* ForeRunner 230 */
    21542162#define USB_PRODUCT_GARMIN_IQUE_3600    0x0004          /* iQue 3600 */
    21552163
     
    22692277#define USB_PRODUCT_HITACHI_DVDCAM_DZ_MV100A    0x0004          /* DVD-CAM DZ-MV100A Camcorder */
    22702278#define USB_PRODUCT_HITACHI_DVDCAM_USB  0x001e          /* DVDCAM USB HS Interface */
     2279
     2280/* Holtek products */
     2281#define USB_PRODUCT_HOLTEK_F85  0xa030          /* Holtek USB gaming keyboard */
    22712282
    22722283/* HP products */
     
    27262737#define USB_PRODUCT_LOGITECH_RB6        0xc503          /* Cordless keyboard */
    27272738#define USB_PRODUCT_LOGITECH_MX700      0xc506          /* Cordless optical mouse */
     2739#define USB_PRODUCT_LOGITECH_UNIFYING   0xc52b          /* Logitech Unifying Receiver */
    27282740#define USB_PRODUCT_LOGITECH_QUICKCAMPRO2       0xd001          /* QuickCam Pro */
    27292741
     
    37883800#define USB_PRODUCT_REALTEK_RTL8188CTV  0x018a          /* RTL8188CTV */
    37893801#define USB_PRODUCT_REALTEK_USBKR100    0x8150          /* USBKR100 USB Ethernet */
     3802#define USB_PRODUCT_REALTEK_RTL8152     0x8152          /* RTL8152 USB Ethernet */
    37903803#define USB_PRODUCT_REALTEK_RTL8153     0x8153          /* RTL8153 USB Ethernet */
    37913804#define USB_PRODUCT_REALTEK_RTL8188CE_0 0x8170          /* RTL8188CE */
     
    42064219#define USB_PRODUCT_SITECOMEU_RTL8192CU 0x0061          /* RTL8192CU */
    42074220#define USB_PRODUCT_SITECOMEU_LN032     0x0072          /* LN-032 */
     4221#define USB_PRODUCT_SITECOMEU_LN031     0x0056          /* LN-031 */
    42084222#define USB_PRODUCT_SITECOMEU_LN028     0x061c          /* LN-028 */
    42094223#define USB_PRODUCT_SITECOMEU_WL113     0x9071          /* WL-113 */
  • rtemsbsd/include/rtems/bsd/local/usbdevs_data.h

    r7c77211 r8e65e1b  
    305305        },
    306306        {
     307            USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RTL8188EU,
     308            0,
     309            "AboCom Systems",
     310            "RTL8188EU",
     311        },
     312        {
    307313            USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WUG2700,
    308314            0,
     
    13971403        },
    13981404        {
     1405            USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ANSI,
     1406            0,
     1407            "Apple Computer",
     1408            "Apple Internal Keyboard/Trackpad",
     1409        },
     1410        {
     1411            USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_ISO,
     1412            0,
     1413            "Apple Computer",
     1414            "Apple Internal Keyboard/Trackpad",
     1415        },
     1416        {
     1417            USB_VENDOR_APPLE, USB_PRODUCT_APPLE_WELLSPRING9_JIS,
     1418            0,
     1419            "Apple Computer",
     1420            "Apple Internal Keyboard/Trackpad",
     1421        },
     1422        {
    13991423            USB_VENDOR_APPLE, USB_PRODUCT_APPLE_MOUSE,
    14001424            0,
     
    31193143        },
    31203144        {
     3145            USB_VENDOR_CORSAIR, USB_PRODUCT_CORSAIR_STRAFE,
     3146            0,
     3147            "Corsair",
     3148            "Cossair STRAFE Gaming keyboard",
     3149        },
     3150        {
    31213151            USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD_II,
    31223152            0,
     
    40074037        },
    40084038        {
     4039            USB_VENDOR_DISPLAYLINK, USB_PRODUCT_DISPLAYLINK_ITEC,
     4040            0,
     4041            "DisplayLink",
     4042            "i-tec USB 2.0 Docking Station",
     4043        },
     4044        {
    40094045            USB_VENDOR_DMI, USB_PRODUCT_DMI_CFSM_RW,
    40104046            0,
     
    62036239        },
    62046240        {
     6241            USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_FORERUNNER230,
     6242            0,
     6243            "Garmin International",
     6244            "ForeRunner 230",
     6245        },
     6246        {
    62056247            USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_IQUE_3600,
    62066248            0,
     
    66296671        },
    66306672        {
     6673            USB_VENDOR_HOLTEK, USB_PRODUCT_HOLTEK_F85,
     6674            0,
     6675            "Holtek Semiconductor, Inc.",
     6676            "Holtek USB gaming keyboard",
     6677        },
     6678        {
    66316679            USB_VENDOR_HP, USB_PRODUCT_HP_895C,
    66326680            0,
     
    87478795        },
    87488796        {
     8797            USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UNIFYING,
     8798            0,
     8799            "Logitech",
     8800            "Logitech Unifying Receiver",
     8801        },
     8802        {
    87498803            USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO2,
    87508804            0,
     
    1394313997        },
    1394413998        {
     13999            USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8152,
     14000            0,
     14001            "Realtek",
     14002            "RTL8152 USB Ethernet",
     14003        },
     14004        {
    1394514005            USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153,
    1394614006            0,
     
    1606116121        },
    1606216122        {
     16123            USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN031,
     16124            0,
     16125            "Sitecom Europe",
     16126            "LN-031",
     16127        },
     16128        {
    1606316129            USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN028,
    1606416130            0,
     
    1840318469            USB_VENDOR_SUN2, 0,
    1840418470            USB_KNOWNDEV_NOPROD,
    18405             "Sun Microsystems (offical)",
     18471            "Sun Microsystems (official)",
    1840618472            NULL,
    1840718473        },
Note: See TracChangeset for help on using the changeset viewer.