1 /* $OpenBSD: umass_quirks.c,v 1.7 2003/11/27 12:35:58 henning Exp $ */ 2 /* $NetBSD: umass_quirks.c,v 1.39 2003/05/08 15:19:47 augustss 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 #if defined(__NetBSD__) 46 #include <dev/scsipi/scsipi_all.h> /* for scsiconf.h below */ 47 #include <dev/scsipi/scsiconf.h> /* for quirks defines */ 48 #elif defined(__OpenBSD__) 49 #include <scsi/scsi_all.h> 50 #include <scsi/scsiconf.h> 51 #endif 52 53 #include <dev/usb/usb.h> 54 #include <dev/usb/usbdi.h> 55 #include <dev/usb/usbdevs.h> 56 57 #include <dev/usb/umassvar.h> 58 #include <dev/usb/umass_quirks.h> 59 60 Static usbd_status umass_init_insystem(struct umass_softc *); 61 Static usbd_status umass_init_shuttle(struct umass_softc *); 62 63 Static void umass_fixup_sony(struct umass_softc *); 64 Static void umass_fixup_yedata(struct umass_softc *); 65 66 Static const struct umass_quirk umass_quirks[] = { 67 { { USB_VENDOR_ATI, USB_PRODUCT_ATI2_205 }, 68 UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA, 69 0, 70 0, 71 UMATCH_VENDOR_PRODUCT, 72 NULL, NULL 73 }, 74 75 { { USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0 }, 76 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 77 0, 78 PQUIRK_NOMODESENSE, 79 UMATCH_VENDOR_PRODUCT, 80 NULL, NULL 81 }, 82 83 { { USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK }, 84 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 85 0, 86 PQUIRK_NOMODESENSE, 87 UMATCH_VENDOR_PRODUCT, 88 NULL, NULL 89 }, 90 91 { { USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100 }, 92 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 93 UMASS_QUIRK_NO_START_STOP, 94 PQUIRK_NOTUR | PQUIRK_NOSENSE, 95 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 96 NULL, NULL 97 }, 98 99 { { USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB }, 100 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 101 UMASS_QUIRK_FORCE_SHORT_INQUIRY | UMASS_QUIRK_NO_START_STOP, 102 PQUIRK_NOMODESENSE, 103 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 104 NULL, NULL 105 }, 106 107 { { USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS }, 108 UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI, 109 0, 110 PQUIRK_NOSENSE | PQUIRK_NOMODESENSE, 111 UMATCH_VENDOR_PRODUCT, 112 NULL, NULL 113 }, 114 115 { { USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO }, 116 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 117 0, 118 PQUIRK_NODOORLOCK, 119 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 120 NULL, NULL 121 }, 122 123 { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2 }, 124 UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA, 125 0, 126 0, 127 UMATCH_VENDOR_PRODUCT, 128 NULL, NULL 129 }, 130 131 { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI }, 132 UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA, 133 0, 134 0, 135 UMATCH_VENDOR_PRODUCT, 136 NULL, NULL 137 }, 138 139 { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5 }, 140 UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA, 141 0, 142 0, 143 UMATCH_VENDOR_PRODUCT, 144 NULL, NULL 145 }, 146 147 { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2 }, 148 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 149 0, 150 PQUIRK_NOMODESENSE, 151 UMATCH_VENDOR_PRODUCT, 152 NULL, NULL 153 }, 154 155 { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE }, 156 UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI, 157 UMASS_QUIRK_NO_START_STOP, 158 PQUIRK_NOTUR, 159 UMATCH_VENDOR_PRODUCT, 160 umass_init_insystem, NULL 161 }, 162 163 { { USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC }, 164 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 165 0, 166 0, 167 UMATCH_VENDOR_PRODUCT, 168 NULL, NULL 169 }, 170 171 { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100 }, 172 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 173 0, 174 PQUIRK_NOTUR, 175 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 176 NULL, NULL 177 }, 178 179 { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250 }, 180 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 181 0, 182 PQUIRK_NOTUR, 183 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 184 NULL, NULL 185 }, 186 187 { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2 }, 188 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 189 UMASS_QUIRK_NO_START_STOP, 190 PQUIRK_NOTUR, 191 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 192 NULL, NULL 193 }, 194 195 { { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG }, 196 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 197 UMASS_QUIRK_FORCE_SHORT_INQUIRY | UMASS_QUIRK_NO_START_STOP, 198 PQUIRK_NOMODESENSE, 199 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 200 NULL, NULL 201 }, 202 203 { { USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM }, 204 UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI, 205 0, 206 PQUIRK_NOTUR, 207 UMATCH_VENDOR_PRODUCT, 208 NULL, NULL 209 }, 210 211 { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304 }, 212 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 213 UMASS_QUIRK_NO_MAX_LUN | UMASS_QUIRK_NO_START_STOP, 214 0, 215 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 216 NULL, NULL 217 }, 218 219 { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X }, 220 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 221 UMASS_QUIRK_NO_MAX_LUN | UMASS_QUIRK_NO_START_STOP, 222 0, 223 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 224 NULL, NULL 225 }, 226 227 { { USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY }, 228 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 229 UMASS_QUIRK_NO_MAX_LUN, 230 PQUIRK_NOMODESENSE | PQUIRK_NODOORLOCK | PQUIRK_NOBIGMODESENSE, 231 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 232 NULL, NULL 233 }, 234 235 { { USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2 }, 236 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 237 UMASS_QUIRK_NO_MAX_LUN, 238 PQUIRK_NOMODESENSE | PQUIRK_NODOORLOCK | PQUIRK_NOBIGMODESENSE, 239 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 240 NULL, NULL 241 }, 242 243 { { USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050 }, 244 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 245 0, 246 PQUIRK_NOMODESENSE | PQUIRK_FORCELUNS, 247 UMATCH_VENDOR_PRODUCT, 248 NULL, NULL 249 }, 250 251 { { USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010 }, 252 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 253 0, 254 PQUIRK_NOMODESENSE | PQUIRK_FORCELUNS, 255 UMATCH_VENDOR_PRODUCT, 256 NULL, NULL 257 }, 258 259 { { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1 }, 260 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 261 UMASS_QUIRK_WRONG_CSWSIG, 262 0, 263 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 264 NULL, NULL 265 }, 266 267 { { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700 }, 268 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 269 0, 270 PQUIRK_ONLYBIG | SDEV_NOSYNCCACHE, 271 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 272 NULL, NULL 273 }, 274 275 { { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II }, 276 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 277 UMASS_QUIRK_NO_MAX_LUN | UMASS_QUIRK_NO_START_STOP, 278 PQUIRK_NOMODESENSE, 279 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 280 NULL, NULL 281 }, 282 283 { { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2 }, 284 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 285 0, 286 PQUIRK_NOMODESENSE, 287 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 288 NULL, NULL 289 }, 290 291 { { USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID }, 292 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 293 0, 294 PQUIRK_NOMODESENSE | PQUIRK_NOBIGMODESENSE, 295 UMATCH_VENDOR_PRODUCT, 296 NULL, NULL 297 }, 298 299 { { USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE }, 300 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 301 0, 302 PQUIRK_NOMODESENSE | PQUIRK_NODOORLOCK | PQUIRK_FORCELUNS, 303 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 304 NULL, NULL 305 }, 306 307 { { USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK }, 308 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 309 UMASS_QUIRK_NO_MAX_LUN | UMASS_QUIRK_NO_START_STOP, 310 0, 311 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 312 NULL, NULL 313 }, 314 315 { { USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER }, 316 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 317 0, 318 PQUIRK_NOMODESENSE, 319 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 320 NULL, NULL 321 }, 322 323 { { USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600 }, 324 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 325 0, 326 PQUIRK_NOMODESENSE | PQUIRK_FORCELUNS, 327 UMATCH_VENDOR_PRODUCT, 328 NULL, NULL 329 }, 330 331 { { USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH }, 332 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 333 0, 334 PQUIRK_NOMODESENSE | PQUIRK_NODOORLOCK, 335 UMATCH_VENDOR_PRODUCT, 336 NULL, NULL 337 }, 338 339 { { USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R }, 340 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UFI, 341 UMASS_QUIRK_WRONG_CSWTAG, 342 0, 343 UMATCH_VENDOR_PRODUCT, 344 NULL, NULL 345 }, 346 347 { { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB }, 348 UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI, 349 UMASS_QUIRK_NO_START_STOP, 350 PQUIRK_NOTUR, 351 UMATCH_VENDOR_PRODUCT, 352 umass_init_shuttle, NULL 353 }, 354 355 { { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC }, 356 UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI, 357 UMASS_QUIRK_NO_START_STOP, 358 PQUIRK_NOTUR, 359 UMATCH_VENDOR_PRODUCT, 360 NULL, NULL 361 }, 362 363 { { USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER }, 364 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 365 UMASS_QUIRK_NO_START_STOP, 366 0, 367 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 368 NULL,NULL 369 }, 370 371 { { USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2 }, 372 UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA, 373 0, 374 0, 375 UMATCH_VENDOR_PRODUCT, 376 NULL, NULL 377 }, 378 379 { { USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC }, 380 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 381 0, 382 0, 383 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 384 NULL, umass_fixup_sony 385 }, 386 387 { { USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC }, 388 UMASS_WPROTO_CBI, UMASS_CPROTO_UFI, 389 UMASS_QUIRK_FORCE_SHORT_INQUIRY | UMASS_QUIRK_RS_NO_CLEAR_UA, 390 PQUIRK_NOMODESENSE, 391 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 392 NULL, NULL 393 }, 394 395 { { USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB }, 396 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 397 0, 398 PQUIRK_NOMODESENSE, 399 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 400 NULL, NULL 401 }, 402 403 { { USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB }, 404 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 405 0, 406 PQUIRK_NODOORLOCK, 407 UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO, 408 NULL, NULL 409 }, 410 411 { { USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100 }, 412 UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI, 413 0, 414 0, 415 UMATCH_VENDOR_PRODUCT, 416 NULL, NULL 417 }, 418 419 { { USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO }, 420 UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI, 421 UMASS_QUIRK_FORCE_SHORT_INQUIRY, 422 0, 423 UMATCH_VENDOR_PRODUCT, 424 NULL, NULL 425 }, 426 427 { { USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU }, 428 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UFI, 429 UMASS_QUIRK_RS_NO_CLEAR_UA, 430 PQUIRK_NOMODESENSE, 431 UMATCH_VENDOR_PRODUCT_REV, 432 NULL, umass_fixup_yedata 433 }, 434 435 { { USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X}, 436 UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, 437 0, 438 SDEV_NOSYNCCACHE | PQUIRK_NODOORLOCK, 439 UMATCH_VENDOR_PRODUCT, 440 NULL, NULL 441 }, 442 }; 443 444 const struct umass_quirk * 445 umass_lookup(u_int16_t vendor, u_int16_t product) 446 { 447 return ((const struct umass_quirk *) 448 usb_lookup(umass_quirks, vendor, product)); 449 } 450 451 Static usbd_status 452 umass_init_insystem(struct umass_softc *sc) 453 { 454 usbd_status err; 455 456 err = usbd_set_interface(sc->sc_iface, 1); 457 if (err) { 458 DPRINTF(UDMASS_USB, 459 ("%s: could not switch to Alt Interface 1\n", 460 USBDEVNAME(sc->sc_dev))); 461 return (err); 462 } 463 464 return (USBD_NORMAL_COMPLETION); 465 } 466 467 Static usbd_status 468 umass_init_shuttle(struct umass_softc *sc) 469 { 470 usb_device_request_t req; 471 u_int8_t status[2]; 472 473 /* The Linux driver does this */ 474 req.bmRequestType = UT_READ_VENDOR_DEVICE; 475 req.bRequest = 1; 476 USETW(req.wValue, 0); 477 USETW(req.wIndex, sc->sc_ifaceno); 478 USETW(req.wLength, sizeof(status)); 479 480 return (usbd_do_request(sc->sc_udev, &req, &status)); 481 } 482 483 Static void 484 umass_fixup_sony(struct umass_softc *sc) 485 { 486 usb_interface_descriptor_t *id; 487 488 id = usbd_get_interface_descriptor(sc->sc_iface); 489 if (id->bInterfaceSubClass == 0xff) { 490 sc->sc_cmd = UMASS_CPROTO_RBC; 491 } 492 } 493 494 Static void 495 umass_fixup_yedata(struct umass_softc *sc) 496 { 497 usb_device_descriptor_t *dd; 498 499 dd = usbd_get_device_descriptor(sc->sc_udev); 500 501 /* 502 * Revisions < 1.28 do not handle the interrupt endpoint very well. 503 */ 504 if (UGETW(dd->bcdDevice) < 0x128) 505 sc->sc_wire = UMASS_WPROTO_CBI; 506 else 507 sc->sc_wire = UMASS_WPROTO_CBI_I; 508 509 /* 510 * Revisions < 1.28 do not have the TEST UNIT READY command 511 * Revisions == 1.28 have a broken TEST UNIT READY 512 */ 513 if (UGETW(dd->bcdDevice) <= 0x128) 514 sc->sc_busquirks |= PQUIRK_NOTUR; 515 } 516