diff options
author | mjacob <mjacob@FreeBSD.org> | 2007-06-10 04:31:55 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2007-06-10 04:31:55 +0000 |
commit | 16bebbfda68e1121a5e7ff0b9c664afe1711751a (patch) | |
tree | e8a3a530f4573f32a3ae87cf879eaf2bf428fd3f /sys | |
parent | e3a01e3402e691c82652f0e8d4a1a6e210571515 (diff) | |
download | FreeBSD-src-16bebbfda68e1121a5e7ff0b9c664afe1711751a.zip FreeBSD-src-16bebbfda68e1121a5e7ff0b9c664afe1711751a.tar.gz |
Commit for Nate his "guidelines for submitting quirks".
Diffstat (limited to 'sys')
-rw-r--r-- | sys/cam/README.quirks | 212 |
1 files changed, 210 insertions, 2 deletions
diff --git a/sys/cam/README.quirks b/sys/cam/README.quirks index 4118e89..707862b 100644 --- a/sys/cam/README.quirks +++ b/sys/cam/README.quirks @@ -1,4 +1,212 @@ /* $FreeBSD$ */ -This is a place holder for instructions about how both committers -and non-committers should submit device quirks. + FreeBSD Quirk Guidelines + + Nate Lawson - njl at freebsd org + +0. Introduction + +FreeBSD drivers make every attempt possible to support the standards +behind hardware. Where possible and not in conflict with the standard, +they also attempt to work around hardware which doesn't strictly +conform. However, some devices have flaws which can't be worked +around while keeping the driver compatible with the standard. For +these devices, we have created a quirks mechanism to indicate to +the driver that it must avoid certain commands or use them differently +with a specific model and/or version of hardware. This document +focuses on identifying and committing quirks for storage hardware +involving CAM and UMASS but is applicable to other areas. + +CAM provides a generic transport for SCSI-like devices. Many different +transports use SCSI command sets including parallel SCSI, firewire +(1394), USB UMASS, fibre channel, and ATAPI. For block devices (i.e. +hard drives, flash adapters, cameras) there are two standards, SBC +and RBC. SCSI hard drives are usually SBC-compliant and smaller +devices like flash drives are usually RBC-compliant. Multimedia +devices including CDROMs and DVD-RW are usually MMC-compliant. + +Please follow these guidelines to get your device working as soon +as possible. If you are a committer, please do NOT commit quirks +directly but follow this process also. + +1. Determing the problem + +The first step is to determine what's wrong. If the device should +be supported but hangs while attaching, it's possible a quirk can +help. The types of things a quirk can fix are: +` + * cam/cam_xpt.c quirks + + o CAM_QUIRK_NOLUNS - do not probe luns other than 0 since device + responds to all inquiries with "lun present". + + o CAM_QUIRK_NOSERIAL - do not send an inquiry for serial number. + + o CAM_QUIRK_HILUNS - probe all luns even if some respond "not present" + since device has a sparse lun space. + + * cam/scsi/scsi_da.c quirks + + o DA_Q_NO_SYNC_CACHE - The sync cache command is used to force a + drive to write out all changes to disk before shutting down. Some + drives hang when receiving this command even though it is required + by all SBC and RBC standards. Note that a warning message on + console is NOT sufficient to add this quirk. The warning messages + are harmless and only a device or system hang is cause for adding + this quirk. + + o DA_Q_NO_6_BYTE - The RBC spec (see Links below) does not allow + for 6-byte READ/WRITE commands. Some manufacturers took that too + literally and crash when receiving 6-byte commands. This quirk + causes FreeBSD to only send 10-byte commands. Since the CAM subsystem + has been modified to not send 6-byte commands to USB, 1394, and + other transports that don't support SBC, this quirk should be very + rare. + + o DA_Q_NO_PREVENT - Don't use the prevent/allow commands to keep a + removable medium from being ejected. Some systems can't handle these + commands (rare). + + * cam/scsi/scsi_cd.c quirks + + o CD_Q_NO_TOUCH - not implemented + + o CD_Q_BCD_TRACKS - convert start/end track to BCD + + o CD_Q_NO_CHANGER - never treat as a changer + + o CD_Q_CHANGER - always treat as a changer + + * cam/scsi/scsi_ch.c quirks + o CH_Q_NO_DBD - disable block descriptors in mode sense + + * cam/scsi/scsi_sa.c quirks + + o SA_QUIRK_NOCOMP - Can't deal with compression at all + + o SA_QUIRK_FIXED - Force fixed mode + + o SA_QUIRK_VARIABLE - Force variable mode + + o SA_QUIRK_2FM - Needs Two File Marks at EOD + + o SA_QUIRK_1FM - No more than 1 File Mark at EOD + + o SA_QUIRK_NODREAD - Don't try and dummy read density + + o SA_QUIRK_NO_MODESEL - Don't do mode select at all + + o SA_QUIRK_NO_CPAGE - Don't use DEVICE COMPRESSION page + + * dev/usb/umass.c quirks + + o NO_TEST_UNIT_READY - The drive does not support Test Unit Ready. + Convert to Start Unit. This command is a simple no-op for most + firmware but some of them hang when this command is sent. + + o RS_NO_CLEAR_UA - The drive does not reset the Unit Attention state + after REQUEST SENSE has been sent. The INQUIRY command does not + reset the UA either, and so CAM runs in circles trying to retrieve + the initial INQUIRY data. This quirk signifies that after a unit + attention condition, don't try to clear the condition with a request + sense command. + + o NO_START_STOP - Like test unit ready, don't send this command if it hangs the device. + + o FORCE_SHORT_INQUIRY - Don't ask for full inquiry data (256 + bytes). Some drives can only handle the shorter inquiry length + (36 bytes). + + o SHUTTLE_INIT - Needs to be initialised the Shuttle way. Haven't + looked into what this does but apparently it's mostly Shuttle + devices. + + o ALT_IFACE_1 - Drive needs to be switched to alternate interface 1. Rare. + + o FLOPPY_SPEED - Drive does not do 1Mb/s, but just floppy speeds (20kb/s). + + o IGNORE_RESIDUE - The device can't count and gets the residue + of transfers wrong. This is sometimes needed for devices where + large transfers cause stalls. + + o NO_GETMAXLUN - Get maximum LUN is a command to identify multiple + devices sharing the same ID. For instance, a multislot compact + flash reader might be on two LUNS. Some non-standard devices hang + when receiving this command so this quirk disables it. + + o WRONG_CSWSIG - The device uses a weird CSWSIGNATURE. Rare. + + o NO_INQUIRY - Device cannot handle INQUIRY so fake a generic + response. INQUIRY is one of the most basic commands but some + drives can't even handle it. (No idea how such devices even work + at all on other OS's.) This quirk fakes up a valid but generic + response for devices that can't handle INQUIRY. + + o NO_INQUIRY_EVPD - Device cannot handle an extended INQUIRY + asking for vital product data (EVPD) so just return a "no data" + response (check condition) without sending the command to the + device. + +2. Testing a Quirk + +After you have an idea what you want to try, edit the proper file +above, using wildcarding to be sure your device is matched. Here +is a list of the common things to try. Note that some devices require +multiple quirks or quirks in different drivers. For example, some +USB pen drives or flash readers require quirks in both da(4) and +umass(4). + +* umass(4) device (sys/dev/usb/umass.c) -- this quirk matches an Asahi Optical device with any product ID or revision ID. +* +* { USB_VENDOR_ASAHIOPTICAL, PID_WILDCARD, RID_WILDCARD, +* UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I, +* RS_NO_CLEAR_UA +* }, +* da(4) device (sys/cam/scsi/scsi_da.c) -- this quirk matches a Creative device with a name of "NOMAD_MUVO" and any revision. +* +* { +* /* +* * Creative Nomad MUVO mp3 player (USB) +* * PR: kern/53094 +* */ +* {T_DIRECT, SIP_MEDIA_REMOVABLE, "CREATIVE", "NOMAD_MUVO", "*"}, +* /*quirks*/ DA_Q_NO_SYNC_CACHE|DA_Q_NO_PREVENT +* }, + +3. Filing a PR + +All quirk submissions MUST go through GNATS. For information on how +to submit a PR, see this page. + +Please include the following in your PR: + + * Subject: QUIRK: FooCo USB DVD-RAM drive + * Output of "camcontrol inquiry yourdevice" + * Manufacturer name, model number, etc. + * Transport type (FC, SCSI, USB, Firewire) + * Output from dmesg for failed attach attempts + * Output from dmesg for successful attach attempts (after quirk added) + * Output of "usbdevs -v" with device attached + * Valid email address + +Here are some examples of well-formed PRs: + + * kern/43580 + * kern/49054 + +4. What happens next + +I will review your submission, respond with comments, and once the +quirk is deemed necessary and ready for committing, I'll commit it, +referencing the PR. (Again, all quirks must be submitted as PRs). +Questions? Email njl AT freebsd.org. + +5. Note to Committers + +Please insert quirks in the right section in scsi_da.c, sorted by +PR number. Always include the name and PR number for scsi_da.c (see +above for an example.) Please sort quirks alphabetically in umass.c. +Follow the surrounding style in all drivers. Be sure to correspond +with the submitter to be sure the quirk you are adding is the minimum +necessary, not quirking other useful features and not overly broad +(i.e., too many wildcards). |