root/dev/usb/umass_quirks.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. umass_lookup
  2. umass_init_insystem
  3. umass_init_shuttle
  4. umass_fixup_sony
  5. umass_fixup_yedata

    1 /*      $OpenBSD: umass_quirks.c,v 1.29 2007/06/13 10:33:52 mbalmer Exp $       */
    2 /*      $NetBSD: umass_quirks.c,v 1.67 2004/06/28 07:49:16 mycroft Exp $        */
    3 
    4 /*
    5  * Copyright (c) 2001 The NetBSD Foundation, Inc.
    6  * All rights reserved.
    7  *
    8  * This code is derived from software contributed to The NetBSD Foundation
    9  * by MAEKAWA Masahide (gehenna@NetBSD.org).
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  * 3. All advertising materials mentioning features or use of this software
   20  *    must display the following acknowledgement:
   21  *        This product includes software developed by the NetBSD
   22  *        Foundation, Inc. and its contributors.
   23  * 4. Neither the name of The NetBSD Foundation nor the names of its
   24  *    contributors may be used to endorse or promote products derived
   25  *    from this software without specific prior written permission.
   26  *
   27  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   28  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   37  * POSSIBILITY OF SUCH DAMAGE.
   38  */
   39 
   40 #include <sys/param.h>
   41 #include <sys/systm.h>
   42 #include <sys/device.h>
   43 #include <sys/buf.h>
   44 
   45 #include <scsi/scsi_all.h>
   46 #include <scsi/scsiconf.h>
   47 
   48 #include <dev/usb/usb.h>
   49 #include <dev/usb/usbdi.h>
   50 #include <dev/usb/usbdevs.h>
   51 
   52 #include <dev/usb/umassvar.h>
   53 #include <dev/usb/umass_quirks.h>
   54 
   55 usbd_status umass_init_insystem(struct umass_softc *);
   56 usbd_status umass_init_shuttle(struct umass_softc *);
   57 
   58 void umass_fixup_sony(struct umass_softc *);
   59 void umass_fixup_yedata(struct umass_softc *);
   60 
   61 const struct umass_quirk umass_quirks[] = {
   62         { { USB_VENDOR_ATI, USB_PRODUCT_ATI2_205 },
   63           UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
   64           0,
   65           0,
   66           UMATCH_VENDOR_PRODUCT,
   67           NULL, NULL
   68         },
   69 
   70         { { USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0 },
   71           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
   72           0,
   73           0,
   74           UMATCH_VENDOR_PRODUCT,
   75           NULL, NULL
   76         },
   77 
   78         { { USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK },
   79           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
   80           0,
   81           0,
   82           UMATCH_VENDOR_PRODUCT,
   83           NULL, NULL
   84         },
   85 
   86         { { USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100 },
   87           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
   88           0,
   89           ADEV_NOSENSE,
   90           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
   91           NULL, NULL
   92         },
   93 
   94         { { USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB },
   95           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
   96           0,
   97           0,
   98           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
   99           NULL, NULL
  100         },
  101 
  102         { { USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS },
  103           UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
  104           0,
  105           ADEV_NOSENSE,
  106           UMATCH_VENDOR_PRODUCT,
  107           NULL, NULL
  108         },
  109 
  110         { { USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO },
  111           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  112           0,
  113           0,
  114           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  115           NULL, NULL
  116         },
  117 
  118         { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2 },
  119           UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
  120           0,
  121           0,
  122           UMATCH_VENDOR_PRODUCT,
  123           NULL, NULL
  124         },
  125         { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI },
  126           UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
  127           0,
  128           0,
  129           UMATCH_VENDOR_PRODUCT,
  130           NULL, NULL
  131         },
  132         { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5 },
  133           UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
  134           0,
  135           0,
  136           UMATCH_VENDOR_PRODUCT,
  137           NULL, NULL
  138         },
  139 
  140         { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2 },
  141           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  142           0,
  143           0,
  144           UMATCH_VENDOR_PRODUCT,
  145           NULL, NULL
  146         },
  147 
  148         { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE },
  149           UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
  150           0,
  151           0,
  152           UMATCH_VENDOR_PRODUCT,
  153           umass_init_insystem, NULL
  154         },
  155 
  156         { { USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC },
  157           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  158           0,
  159           0,
  160           UMATCH_VENDOR_PRODUCT,
  161           NULL, NULL
  162         },
  163 
  164         { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100 },
  165           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  166           0,
  167           0,
  168           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  169           NULL, NULL
  170         },
  171 
  172         { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250 },
  173           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  174           0,
  175           0,
  176           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  177           NULL, NULL
  178         },
  179 
  180         { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2 },
  181           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  182           0,
  183           0,
  184           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  185           NULL, NULL
  186         },
  187 
  188         { { USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_1XX },
  189           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  190           0,
  191           SDEV_ONLYBIG,
  192           UMATCH_VENDOR_PRODUCT,
  193           NULL, NULL
  194         },
  195 
  196         { { USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_3XX },
  197           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  198           0,
  199           0,
  200           UMATCH_VENDOR_PRODUCT,
  201           NULL, NULL
  202         },
  203 
  204         { { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG },
  205           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  206           0,
  207           0,
  208           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  209           NULL, NULL
  210         },
  211 
  212         { { USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM },
  213           UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
  214           0,
  215           0,
  216           UMATCH_VENDOR_PRODUCT,
  217           NULL, NULL
  218         },
  219 
  220         { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304 },
  221           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  222           0,
  223           0,
  224           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  225           NULL, NULL
  226         },
  227 
  228         { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X },
  229           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  230           0,
  231           0,
  232           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  233           NULL, NULL
  234         },
  235 
  236         { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGEA1 },
  237           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  238           0,
  239           0,
  240           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  241           NULL, NULL
  242         },
  243 
  244         { { USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY },
  245           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  246           0,
  247           0,
  248           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  249           NULL, NULL
  250         },
  251 
  252         { { USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2 },
  253           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_ATAPI,
  254           0,
  255           0,
  256           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  257           NULL, NULL
  258         },
  259 
  260         { { USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050 },
  261           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  262           0,
  263           0,
  264           UMATCH_VENDOR_PRODUCT,
  265           NULL, NULL
  266         },
  267 
  268         { { USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010 },
  269           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  270           0,
  271           0,
  272           UMATCH_VENDOR_PRODUCT,
  273           NULL, NULL
  274         },
  275 
  276         { { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1 },
  277           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  278           UMASS_QUIRK_WRONG_CSWSIG,
  279           0,
  280           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  281           NULL, NULL
  282         },
  283 
  284         { { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700 },
  285           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  286           0,
  287           SDEV_ONLYBIG | SDEV_NOSYNCCACHE,
  288           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  289           NULL, NULL
  290         },
  291 
  292         { { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II },
  293           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  294           0,
  295           0,
  296           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  297           NULL, NULL
  298         },
  299 
  300         { { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2 },
  301           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  302           0,
  303           0,
  304           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  305           NULL, NULL
  306         },
  307 
  308         { { USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID },
  309           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  310           0,
  311           0,
  312           UMATCH_VENDOR_PRODUCT,
  313           NULL, NULL
  314         },
  315 
  316         { { USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE },
  317           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  318           0,
  319           0,
  320           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  321           NULL, NULL
  322         },
  323 
  324         { { USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK },
  325           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  326           0,
  327           0,
  328           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  329           NULL, NULL
  330         },
  331 
  332         { { USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER },
  333           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  334           0,
  335           0,
  336           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  337           NULL, NULL
  338         },
  339 
  340         { { USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600 },
  341           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  342           0,
  343           0,
  344           UMATCH_VENDOR_PRODUCT,
  345           NULL, NULL
  346         },
  347 
  348         { { USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH },
  349           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  350           0,
  351           0,
  352           UMATCH_VENDOR_PRODUCT,
  353           NULL, NULL
  354         },
  355 
  356         { { USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R },
  357           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  358           UMASS_QUIRK_WRONG_CSWTAG,
  359           0,
  360           UMATCH_VENDOR_PRODUCT,
  361           NULL, NULL
  362         },
  363 
  364         { { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB },
  365           UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
  366           0,
  367           ADEV_NOSENSE,
  368           UMATCH_VENDOR_PRODUCT,
  369           umass_init_shuttle, NULL
  370         },
  371 
  372         { { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC },
  373           UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
  374           0,
  375           0,
  376           UMATCH_VENDOR_PRODUCT,
  377           NULL, NULL
  378         },
  379 
  380         { { USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER },
  381           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  382           0,
  383           0,
  384           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  385           NULL,NULL
  386         },
  387 
  388         { { USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2 },
  389           UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
  390           0,
  391           0,
  392           UMATCH_VENDOR_PRODUCT,
  393           NULL, NULL
  394         },
  395 
  396         { { USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC },
  397           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  398           0,
  399           0,
  400           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  401           NULL, umass_fixup_sony
  402         },
  403 
  404         { { USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC },
  405           UMASS_WPROTO_CBI, UMASS_CPROTO_UFI,
  406           0,
  407           0,
  408           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  409           NULL, NULL
  410         },
  411 
  412         { { USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB },
  413           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  414           0,
  415           0,
  416           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  417           NULL, NULL
  418         },
  419 
  420         { { USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB },
  421           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  422           0,
  423           0,
  424           UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
  425           NULL, NULL
  426         },
  427 
  428         { { USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100 },
  429           UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
  430           0,
  431           0,
  432           UMATCH_VENDOR_PRODUCT,
  433           NULL, NULL
  434         },
  435 
  436         { { USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO },
  437           UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
  438           0,
  439           0,
  440           UMATCH_VENDOR_PRODUCT,
  441           NULL, NULL
  442         },
  443 
  444         { { USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU },
  445           UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UFI,
  446           0,
  447           0,
  448           UMATCH_VENDOR_PRODUCT_REV,
  449           NULL, umass_fixup_yedata
  450         },
  451 
  452         { { USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X},
  453          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  454          0,
  455          SDEV_NOSYNCCACHE,
  456          UMATCH_VENDOR_PRODUCT,
  457          NULL, NULL
  458         },
  459 
  460         { { USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD},
  461          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
  462          0,
  463          SDEV_NOSYNCCACHE,
  464          UMATCH_VENDOR_PRODUCT,
  465          NULL, NULL
  466         },
  467 };
  468 
  469 const struct umass_quirk *
  470 umass_lookup(u_int16_t vendor, u_int16_t product)
  471 {
  472         return ((const struct umass_quirk *)
  473                 usb_lookup(umass_quirks, vendor, product));
  474 }
  475 
  476 usbd_status
  477 umass_init_insystem(struct umass_softc *sc)
  478 {
  479         usbd_status err;
  480 
  481         err = usbd_set_interface(sc->sc_iface, 1);
  482         if (err) {
  483                 DPRINTF(UDMASS_USB,
  484                         ("%s: could not switch to Alt Interface 1\n",
  485                         sc->sc_dev.dv_xname));
  486                 return (err);
  487         }
  488 
  489         return (USBD_NORMAL_COMPLETION);
  490 }
  491 
  492 usbd_status
  493 umass_init_shuttle(struct umass_softc *sc)
  494 {
  495         usb_device_request_t req;
  496         u_int8_t status[2];
  497 
  498         /* The Linux driver does this */
  499         req.bmRequestType = UT_READ_VENDOR_DEVICE;
  500         req.bRequest = 1;
  501         USETW(req.wValue, 0);
  502         USETW(req.wIndex, sc->sc_ifaceno);
  503         USETW(req.wLength, sizeof(status));
  504 
  505         return (usbd_do_request(sc->sc_udev, &req, &status));
  506 }
  507 
  508 void
  509 umass_fixup_sony(struct umass_softc *sc)
  510 {
  511         usb_interface_descriptor_t *id;
  512         usb_device_descriptor_t *dd;
  513 
  514         id = usbd_get_interface_descriptor(sc->sc_iface);
  515         if (id->bInterfaceSubClass == 0xff) {
  516                 dd = usbd_get_device_descriptor(sc->sc_udev);
  517                 /*
  518                  * Many Sony DSC cameras share the same product ID, so the
  519                  * revision number is used to distinguish between them.
  520                  */
  521                 switch (UGETW(dd->bcdDevice)) {
  522                 case 0x611: /* Sony DSC-T10, rev 6.11 */
  523                 case 0x600: /* Sony DSC-W50, rev 6.00 */
  524                 case 0x500: /* Sony DSC-P41, rev 5.00 */
  525                         sc->sc_cmd = UMASS_CPROTO_UFI;
  526                         break;
  527                 default:
  528                         sc->sc_cmd = UMASS_CPROTO_SCSI;
  529                 }
  530         }
  531 }
  532 
  533 void
  534 umass_fixup_yedata(struct umass_softc *sc)
  535 {
  536         usb_device_descriptor_t *dd;
  537 
  538         dd = usbd_get_device_descriptor(sc->sc_udev);
  539 
  540         /*
  541          * Revisions < 1.28 do not handle the interrupt endpoint very well.
  542          */
  543         if (UGETW(dd->bcdDevice) < 0x128)
  544                 sc->sc_wire = UMASS_WPROTO_CBI;
  545         else
  546                 sc->sc_wire = UMASS_WPROTO_CBI_I;
  547 }

/* [<][>][^][v][top][bottom][index][help] */