1411218d3SSascha Wildner.\" 2411218d3SSascha Wildner.\" Copyright (c) 2010 AnyWi Technologies 3411218d3SSascha Wildner.\" All rights reserved. 4411218d3SSascha Wildner.\" 5411218d3SSascha Wildner.\" Permission to use, copy, modify, and distribute this software for any 6411218d3SSascha Wildner.\" purpose with or without fee is hereby granted, provided that the above 7411218d3SSascha Wildner.\" copyright notice and this permission notice appear in all copies. 8411218d3SSascha Wildner.\" 9411218d3SSascha Wildner.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10411218d3SSascha Wildner.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11411218d3SSascha Wildner.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12411218d3SSascha Wildner.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13411218d3SSascha Wildner.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14411218d3SSascha Wildner.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15411218d3SSascha Wildner.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16411218d3SSascha Wildner.\" 17*520083baSSascha Wildner.\" $FreeBSD: head/share/man/man4/usb_quirk.4 322695 2017-08-19 17:00:10Z wulf $ 18411218d3SSascha Wildner.\" 19*520083baSSascha Wildner.Dd March 16, 2018 20411218d3SSascha Wildner.Dt USB_QUIRK 4 21411218d3SSascha Wildner.Os 22411218d3SSascha Wildner.Sh NAME 23411218d3SSascha Wildner.Nm usb_quirk 24411218d3SSascha Wildner.Nd USB quirks module 25411218d3SSascha Wildner.Sh SYNOPSIS 26411218d3SSascha WildnerTo compile this module into the kernel, 27411218d3SSascha Wildnerplace the following line in your 28411218d3SSascha Wildnerkernel configuration file: 29411218d3SSascha Wildner.Bd -ragged -offset indent 30411218d3SSascha Wildner.Cd "device usb" 31411218d3SSascha Wildner.Ed 32411218d3SSascha Wildner.Pp 33411218d3SSascha WildnerAlternatively, to load the module at boot 34411218d3SSascha Wildnertime, place the following line in 35411218d3SSascha Wildner.Xr loader.conf 5 : 36411218d3SSascha Wildner.Bd -literal -offset indent 37411218d3SSascha Wildnerusb_quirk_load="YES" 38411218d3SSascha Wildner.Ed 39411218d3SSascha Wildner.Sh DESCRIPTION 40411218d3SSascha WildnerThe 41411218d3SSascha Wildner.Nm 42411218d3SSascha Wildnermodule provides support for dynamically adding and removing quirks for 43411218d3SSascha WildnerUSB devices with 44411218d3SSascha Wildner.Xr usbconfig 8 . 45411218d3SSascha Wildner.Sh General quirks: 46411218d3SSascha Wildner.Bl -tag -width Ds 47411218d3SSascha Wildner.It UQ_AUDIO_SWAP_LR 48411218d3SSascha Wildnerswap left and right channels 49411218d3SSascha Wildner.It UQ_AU_INP_ASYNC 50411218d3SSascha Wildnerinput is async despite claim of adaptive 51411218d3SSascha Wildner.It UQ_AU_NO_FRAC 52ff811b0aSSascha Wildnerdo not adjust for fractional samples 53411218d3SSascha Wildner.It UQ_AU_NO_XU 54411218d3SSascha Wildneraudio device has broken extension unit 55*520083baSSascha Wildner.It UQ_AU_VENDOR_CLASS 56*520083baSSascha Wildneraudio device uses vendor class to identify itself 57*520083baSSascha Wildner.It UQ_AU_SET_SPDIF_CM6206 58*520083baSSascha Wildneraudio device needs special programming to enable S/PDIF audio output 59411218d3SSascha Wildner.It UQ_BAD_ADC 60411218d3SSascha Wildnerbad audio spec version number 61411218d3SSascha Wildner.It UQ_BAD_AUDIO 62ff811b0aSSascha Wildnerdevice claims audio class, but is not 63411218d3SSascha Wildner.It UQ_BROKEN_BIDIR 64411218d3SSascha Wildnerprinter has broken bidir mode 65411218d3SSascha Wildner.It UQ_BUS_POWERED 66411218d3SSascha Wildnerdevice is bus powered, despite claim 67411218d3SSascha Wildner.It UQ_HID_IGNORE 68411218d3SSascha Wildnerdevice should be ignored by hid class 69411218d3SSascha Wildner.It UQ_KBD_IGNORE 70411218d3SSascha Wildnerdevice should be ignored by kbd class 71411218d3SSascha Wildner.It UQ_KBD_BOOTPROTO 72411218d3SSascha Wildnerdevice should set the boot protocol 73411218d3SSascha Wildner.It UQ_UMS_IGNORE 74411218d3SSascha Wildnerdevice should be ignored by ums class 75411218d3SSascha Wildner.It UQ_MS_BAD_CLASS 76ff811b0aSSascha Wildnerdoes not identify properly 77411218d3SSascha Wildner.It UQ_MS_LEADING_BYTE 78411218d3SSascha Wildnermouse sends an unknown leading byte 79411218d3SSascha Wildner.It UQ_MS_REVZ 80411218d3SSascha Wildnermouse has Z-axis reversed 81411218d3SSascha Wildner.It UQ_NO_STRINGS 82411218d3SSascha Wildnerstring descriptors are broken 83411218d3SSascha Wildner.It UQ_POWER_CLAIM 84411218d3SSascha Wildnerhub lies about power status 85411218d3SSascha Wildner.It UQ_SPUR_BUT_UP 86411218d3SSascha Wildnerspurious mouse button up events 87411218d3SSascha Wildner.It UQ_SWAP_UNICODE 88411218d3SSascha Wildnerhas some Unicode strings swapped 89411218d3SSascha Wildner.It UQ_CFG_INDEX_1 90411218d3SSascha Wildnerselect configuration index 1 by default 91411218d3SSascha Wildner.It UQ_CFG_INDEX_2 92411218d3SSascha Wildnerselect configuration index 2 by default 93411218d3SSascha Wildner.It UQ_CFG_INDEX_3 94411218d3SSascha Wildnerselect configuration index 3 by default 95411218d3SSascha Wildner.It UQ_CFG_INDEX_4 96411218d3SSascha Wildnerselect configuration index 4 by default 97411218d3SSascha Wildner.It UQ_CFG_INDEX_0 98411218d3SSascha Wildnerselect configuration index 0 by default 99411218d3SSascha Wildner.It UQ_ASSUME_CM_OVER_DATA 100411218d3SSascha Wildnerassume cm over data feature 101*520083baSSascha Wildner.It UQ_WMT_IGNORE 102*520083baSSascha Wildnerdevice should be ignored by wmt driver 103411218d3SSascha Wildner.El 104411218d3SSascha Wildner.Sh USB Mass Storage quirks: 105411218d3SSascha Wildner.Bl -tag -width Ds 106411218d3SSascha Wildner.It UQ_MSC_NO_TEST_UNIT_READY 107411218d3SSascha Wildnersend start/stop instead of TUR 108411218d3SSascha Wildner.It UQ_MSC_NO_RS_CLEAR_UA 109411218d3SSascha Wildnerdoes not reset Unit Att. 110411218d3SSascha Wildner.It UQ_MSC_NO_START_STOP 111411218d3SSascha Wildnerdoes not support start/stop 112411218d3SSascha Wildner.It UQ_MSC_NO_GETMAXLUN 113411218d3SSascha Wildnerdoes not support get max LUN 114411218d3SSascha Wildner.It UQ_MSC_NO_INQUIRY 115411218d3SSascha Wildnerfake generic inq response 116411218d3SSascha Wildner.It UQ_MSC_NO_INQUIRY_EVPD 117411218d3SSascha Wildnerdoes not support inq EVPD 118411218d3SSascha Wildner.It UQ_MSC_NO_SYNC_CACHE 119411218d3SSascha Wildnerdoes not support sync cache 120411218d3SSascha Wildner.It UQ_MSC_SHUTTLE_INIT 121411218d3SSascha Wildnerrequires Shuttle init sequence 122411218d3SSascha Wildner.It UQ_MSC_ALT_IFACE_1 123411218d3SSascha Wildnerswitch to alternate interface 1 124411218d3SSascha Wildner.It UQ_MSC_FLOPPY_SPEED 125411218d3SSascha Wildnerdoes floppy speeds (20kb/s) 126411218d3SSascha Wildner.It UQ_MSC_IGNORE_RESIDUE 127411218d3SSascha Wildnergets residue wrong 128411218d3SSascha Wildner.It UQ_MSC_WRONG_CSWSIG 129411218d3SSascha Wildneruses wrong CSW signature 130411218d3SSascha Wildner.It UQ_MSC_RBC_PAD_TO_12 131411218d3SSascha Wildnerpad RBC requests to 12 bytes 132411218d3SSascha Wildner.It UQ_MSC_READ_CAP_OFFBY1 133411218d3SSascha Wildnerreports sector count, not max sec. 134411218d3SSascha Wildner.It UQ_MSC_FORCE_SHORT_INQ 135411218d3SSascha Wildnerdoes not support full inq. 136411218d3SSascha Wildner.It UQ_MSC_FORCE_WIRE_BBB 137411218d3SSascha Wildnerforce BBB wire protocol 138411218d3SSascha Wildner.It UQ_MSC_FORCE_WIRE_CBI 139411218d3SSascha Wildnerforce CBI wire protocol 140411218d3SSascha Wildner.It UQ_MSC_FORCE_WIRE_CBI_I 141411218d3SSascha Wildnerforce CBI with int. wire protocol 142411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_SCSI 143411218d3SSascha Wildnerforce SCSI command protocol 144411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_ATAPI 145411218d3SSascha Wildnerforce ATAPI command protocol 146411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_UFI 147411218d3SSascha Wildnerforce UFI command protocol 148411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_RBC 149411218d3SSascha Wildnerforce RBC command protocol 150411218d3SSascha Wildner.El 151411218d3SSascha Wildner.Sh 3G Datacard (u3g) quirks: 152411218d3SSascha Wildner.Bl -tag -width Ds 153411218d3SSascha Wildner.It UQ_MSC_EJECT_HUAWEI 154411218d3SSascha Wildnerejects after Huawei USB command 155411218d3SSascha Wildner.It UQ_MSC_EJECT_SIERRA 156411218d3SSascha Wildnerejects after Sierra USB command 157411218d3SSascha Wildner.It UQ_MSC_EJECT_SCSIEJECT 158411218d3SSascha Wildnerejects after SCSI eject command 159ff811b0aSSascha Wildner.Dv 0x1b0000000200 160411218d3SSascha Wildner.It UQ_MSC_EJECT_REZERO 161411218d3SSascha Wildnerejects after SCSI rezero command 162ff811b0aSSascha Wildner.Dv 0x010000000000 163411218d3SSascha Wildner.It UQ_MSC_EJECT_ZTESTOR 164411218d3SSascha Wildnerejects after ZTE SCSI command 165ff811b0aSSascha Wildner.Dv 0x850101011801010101010000 166411218d3SSascha Wildner.It UQ_MSC_EJECT_CMOTECH 167411218d3SSascha Wildnerejects after C-motech SCSI command 168ff811b0aSSascha Wildner.Dv 0xff52444556434847 169411218d3SSascha Wildner.It UQ_MSC_EJECT_WAIT 170411218d3SSascha Wildnerwait for the device to eject 171411218d3SSascha Wildner.It UQ_MSC_EJECT_SAEL_M460 172411218d3SSascha Wildnerejects after Sael USB commands 173411218d3SSascha Wildner.It UQ_MSC_EJECT_HUAWEISCSI 174411218d3SSascha Wildnerejects after Huawei SCSI command 175ff811b0aSSascha Wildner.Dv 0x11060000000000000000000000000000 176411218d3SSascha Wildner.It UQ_MSC_EJECT_TCT 177411218d3SSascha Wildnerejects after TCT SCSI command 178ff811b0aSSascha Wildner.Dv 0x06f504025270 179*520083baSSascha Wildner.It UQ_MSC_DYMO_EJECT 180*520083baSSascha Wildnerejects after HID command 181*520083baSSascha Wildner.Dv 0x1b5a01 182411218d3SSascha Wildner.El 183ff811b0aSSascha Wildner.Pp 184411218d3SSascha WildnerSee 185411218d3SSascha Wildner.Pa /sys/dev/usb/quirk/usb_quirk.h 186*520083baSSascha Wildneror run "usbconfig dump_quirk_names" for the complete list of supported quirks. 187*520083baSSascha Wildner.Sh LOADER TUNABLE 188*520083baSSascha WildnerThe following tunable can be set at the 189*520083baSSascha Wildner.Xr loader 8 190*520083baSSascha Wildnerprompt before booting the kernel, or stored in 191*520083baSSascha Wildner.Xr loader.conf 5 . 192*520083baSSascha Wildner.Bl -tag -width indent 193*520083baSSascha Wildner.It Va hw.usb.quirk.%d 194*520083baSSascha WildnerThe value is a string whose format is: 195*520083baSSascha Wildner.Bd -literal -offset indent 196*520083baSSascha Wildner.Qo VendorId ProductId LowRevision HighRevision UQ_QUIRK,... Qc 197*520083baSSascha Wildner.Ed 198*520083baSSascha Wildner.Pp 199*520083baSSascha WildnerInstalls the quirks 200*520083baSSascha Wildner.Ic UQ_QUIRK,... 201*520083baSSascha Wildnerfor all USB devices matching 202*520083baSSascha Wildner.Ic VendorId 203*520083baSSascha Wildnerand 204*520083baSSascha Wildner.Ic ProductId 205*520083baSSascha Wildnerwhich have a hardware revision between and including 206*520083baSSascha Wildner.Ic LowRevision 207*520083baSSascha Wildnerand 208*520083baSSascha Wildner.Ic HighRevision . 209*520083baSSascha Wildner.Pp 210*520083baSSascha Wildner.Ic VendorId , 211*520083baSSascha Wildner.Ic ProductId , 212*520083baSSascha Wildner.Ic LowRevision 213*520083baSSascha Wildnerand 214*520083baSSascha Wildner.Ic HighRevision 215*520083baSSascha Wildnerare all 16 bits numbers which can be decimal or hexadecimal based. 216*520083baSSascha Wildner.Pp 217*520083baSSascha WildnerA maximum of 100 variables 218*520083baSSascha Wildner.Ic hw.usb.quirk.0, .1, ..., .99 219*520083baSSascha Wildnercan be defined. 220*520083baSSascha Wildner.Pp 221*520083baSSascha WildnerIf a matching entry is found in the kernel's internal quirks table, it 222*520083baSSascha Wildneris replaced by the new definition. 223*520083baSSascha Wildner.Pp 224*520083baSSascha WildnerElse a new entry is created given that the quirk table is not full. 225*520083baSSascha Wildner.Pp 226*520083baSSascha WildnerThe kernel iterates over the 227*520083baSSascha Wildner.Ic hw.usb.quirk.N 228*520083baSSascha Wildnervariables starting at 229*520083baSSascha Wildner.Ic N = 0 230*520083baSSascha Wildnerand stops at 231*520083baSSascha Wildner.Ic N = 99 232*520083baSSascha Wildneror the first non-existing one. 233*520083baSSascha Wildner.El 234411218d3SSascha Wildner.Sh EXAMPLES 235411218d3SSascha WildnerAfter attaching a 236411218d3SSascha Wildner.Nm u3g 237411218d3SSascha Wildnerdevice which appears as a USB device on 238411218d3SSascha Wildner.Pa ugen0.3 : 239411218d3SSascha Wildner.Bd -literal -offset indent 240411218d3SSascha Wildnerusbconfig -d ugen0.3 add_quirk UQ_MSC_EJECT_WAIT 241411218d3SSascha Wildner.Ed 242*520083baSSascha Wildner.Pp 243*520083baSSascha WildnerEnable a Holtec/Keep Out F85 gaming keyboard on 244*520083baSSascha Wildner.Pa ugen1.4 : 245*520083baSSascha Wildner.Bd -literal -offset indent 246*520083baSSascha Wildnerusbconfig -d ugen1.4 add_quirk UQ_KBD_BOOTPROTO 247*520083baSSascha Wildner.Ed 248*520083baSSascha Wildner.Pp 249*520083baSSascha WildnerTo install a quirk at boot time, place one or several lines like the 250*520083baSSascha Wildnerfollowing in 251*520083baSSascha Wildner.Xr loader.conf 5 : 252*520083baSSascha Wildner.Bd -literal -offset indent 253*520083baSSascha Wildnerhw.usb.quirk.0="0x04d9 0xfa50 0 0xffff UQ_KBD_IGNORE" 254*520083baSSascha Wildner.Ed 255411218d3SSascha Wildner.Sh SEE ALSO 256411218d3SSascha Wildner.Xr usbconfig 8 257411218d3SSascha Wildner.Sh HISTORY 258411218d3SSascha WildnerThe 259411218d3SSascha Wildner.Nm 260411218d3SSascha Wildnermodule appeared in 261411218d3SSascha Wildner.Fx 8.0 , 262411218d3SSascha Wildnerand was written by 2639e570176SFranco Fichtner.An Hans Petter Selasky Aq Mt hselasky@FreeBSD.org . 264411218d3SSascha WildnerThis manual page was written by 2659e570176SFranco Fichtner.An Nick Hibma Aq Mt n_hibma@FreeBSD.org . 266