xref: /linux/Documentation/driver-api/scsi.rst (revision 621cde16e49b3ecf7d59a8106a20aaebfb4a59a9)
160202365SMauro Carvalho Chehab=====================
260202365SMauro Carvalho ChehabSCSI Interfaces Guide
360202365SMauro Carvalho Chehab=====================
460202365SMauro Carvalho Chehab
560202365SMauro Carvalho Chehab:Author: James Bottomley
660202365SMauro Carvalho Chehab:Author: Rob Landley
760202365SMauro Carvalho Chehab
860202365SMauro Carvalho ChehabIntroduction
960202365SMauro Carvalho Chehab============
1060202365SMauro Carvalho Chehab
1160202365SMauro Carvalho ChehabProtocol vs bus
1260202365SMauro Carvalho Chehab---------------
1360202365SMauro Carvalho Chehab
1460202365SMauro Carvalho ChehabOnce upon a time, the Small Computer Systems Interface defined both a
1560202365SMauro Carvalho Chehabparallel I/O bus and a data protocol to connect a wide variety of
1660202365SMauro Carvalho Chehabperipherals (disk drives, tape drives, modems, printers, scanners,
1760202365SMauro Carvalho Chehaboptical drives, test equipment, and medical devices) to a host computer.
1860202365SMauro Carvalho Chehab
1960202365SMauro Carvalho ChehabAlthough the old parallel (fast/wide/ultra) SCSI bus has largely fallen
2060202365SMauro Carvalho Chehabout of use, the SCSI command set is more widely used than ever to
2160202365SMauro Carvalho Chehabcommunicate with devices over a number of different busses.
2260202365SMauro Carvalho Chehab
23*293fcea5SRandy DunlapThe `SCSI protocol <https://www.t10.org/scsi-3.htm>`__ is a big-endian
2460202365SMauro Carvalho Chehabpeer-to-peer packet based protocol. SCSI commands are 6, 10, 12, or 16
2560202365SMauro Carvalho Chehabbytes long, often followed by an associated data payload.
2660202365SMauro Carvalho Chehab
2760202365SMauro Carvalho ChehabSCSI commands can be transported over just about any kind of bus, and
2860202365SMauro Carvalho Chehabare the default protocol for storage devices attached to USB, SATA, SAS,
2960202365SMauro Carvalho ChehabFibre Channel, FireWire, and ATAPI devices. SCSI packets are also
3060202365SMauro Carvalho Chehabcommonly exchanged over Infiniband,
31*293fcea5SRandy DunlapTCP/IP (`iSCSI <https://en.wikipedia.org/wiki/ISCSI>`__), even `Parallel
3260202365SMauro Carvalho Chehabports <http://cyberelk.net/tim/parport/parscsi.html>`__.
3360202365SMauro Carvalho Chehab
3460202365SMauro Carvalho ChehabDesign of the Linux SCSI subsystem
3560202365SMauro Carvalho Chehab----------------------------------
3660202365SMauro Carvalho Chehab
3760202365SMauro Carvalho ChehabThe SCSI subsystem uses a three layer design, with upper, mid, and low
3860202365SMauro Carvalho Chehablayers. Every operation involving the SCSI subsystem (such as reading a
3960202365SMauro Carvalho Chehabsector from a disk) uses one driver at each of the 3 levels: one upper
4060202365SMauro Carvalho Chehablayer driver, one lower layer driver, and the SCSI midlayer.
4160202365SMauro Carvalho Chehab
4260202365SMauro Carvalho ChehabThe SCSI upper layer provides the interface between userspace and the
4360202365SMauro Carvalho Chehabkernel, in the form of block and char device nodes for I/O and ioctl().
4460202365SMauro Carvalho ChehabThe SCSI lower layer contains drivers for specific hardware devices.
4560202365SMauro Carvalho Chehab
4660202365SMauro Carvalho ChehabIn between is the SCSI mid-layer, analogous to a network routing layer
4760202365SMauro Carvalho Chehabsuch as the IPv4 stack. The SCSI mid-layer routes a packet based data
4860202365SMauro Carvalho Chehabprotocol between the upper layer's /dev nodes and the corresponding
4960202365SMauro Carvalho Chehabdevices in the lower layer. It manages command queues, provides error
5060202365SMauro Carvalho Chehabhandling and power management functions, and responds to ioctl()
5160202365SMauro Carvalho Chehabrequests.
5260202365SMauro Carvalho Chehab
5360202365SMauro Carvalho ChehabSCSI upper layer
5460202365SMauro Carvalho Chehab================
5560202365SMauro Carvalho Chehab
5660202365SMauro Carvalho ChehabThe upper layer supports the user-kernel interface by providing device
5760202365SMauro Carvalho Chehabnodes.
5860202365SMauro Carvalho Chehab
5960202365SMauro Carvalho Chehabsd (SCSI Disk)
6060202365SMauro Carvalho Chehab--------------
6160202365SMauro Carvalho Chehab
6260202365SMauro Carvalho Chehabsd (sd_mod.o)
6360202365SMauro Carvalho Chehab
6460202365SMauro Carvalho Chehabsr (SCSI CD-ROM)
6560202365SMauro Carvalho Chehab----------------
6660202365SMauro Carvalho Chehab
6760202365SMauro Carvalho Chehabsr (sr_mod.o)
6860202365SMauro Carvalho Chehab
6960202365SMauro Carvalho Chehabst (SCSI Tape)
7060202365SMauro Carvalho Chehab--------------
7160202365SMauro Carvalho Chehab
7260202365SMauro Carvalho Chehabst (st.o)
7360202365SMauro Carvalho Chehab
7460202365SMauro Carvalho Chehabsg (SCSI Generic)
7560202365SMauro Carvalho Chehab-----------------
7660202365SMauro Carvalho Chehab
7760202365SMauro Carvalho Chehabsg (sg.o)
7860202365SMauro Carvalho Chehab
7960202365SMauro Carvalho Chehabch (SCSI Media Changer)
8060202365SMauro Carvalho Chehab-----------------------
8160202365SMauro Carvalho Chehab
8260202365SMauro Carvalho Chehabch (ch.c)
8360202365SMauro Carvalho Chehab
8460202365SMauro Carvalho ChehabSCSI mid layer
8560202365SMauro Carvalho Chehab==============
8660202365SMauro Carvalho Chehab
8760202365SMauro Carvalho ChehabSCSI midlayer implementation
8860202365SMauro Carvalho Chehab----------------------------
8960202365SMauro Carvalho Chehab
9060202365SMauro Carvalho Chehabinclude/scsi/scsi_device.h
9160202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~
9260202365SMauro Carvalho Chehab
9360202365SMauro Carvalho Chehab.. kernel-doc:: include/scsi/scsi_device.h
9460202365SMauro Carvalho Chehab   :internal:
9560202365SMauro Carvalho Chehab
9660202365SMauro Carvalho Chehabdrivers/scsi/scsi.c
9760202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~
9860202365SMauro Carvalho Chehab
9960202365SMauro Carvalho ChehabMain file for the SCSI midlayer.
10060202365SMauro Carvalho Chehab
10160202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi.c
10260202365SMauro Carvalho Chehab   :export:
10360202365SMauro Carvalho Chehab
10460202365SMauro Carvalho Chehabdrivers/scsi/scsicam.c
10560202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~
10660202365SMauro Carvalho Chehab
10760202365SMauro Carvalho Chehab`SCSI Common Access
10860202365SMauro Carvalho ChehabMethod <http://www.t10.org/ftp/t10/drafts/cam/cam-r12b.pdf>`__ support
10960202365SMauro Carvalho Chehabfunctions, for use with HDIO_GETGEO, etc.
11060202365SMauro Carvalho Chehab
11160202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsicam.c
11260202365SMauro Carvalho Chehab   :export:
11360202365SMauro Carvalho Chehab
11460202365SMauro Carvalho Chehabdrivers/scsi/scsi_error.c
11560202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~
11660202365SMauro Carvalho Chehab
11760202365SMauro Carvalho ChehabCommon SCSI error/timeout handling routines.
11860202365SMauro Carvalho Chehab
11960202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_error.c
12060202365SMauro Carvalho Chehab   :export:
12160202365SMauro Carvalho Chehab
12260202365SMauro Carvalho Chehabdrivers/scsi/scsi_devinfo.c
12360202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12460202365SMauro Carvalho Chehab
12560202365SMauro Carvalho ChehabManage scsi_dev_info_list, which tracks blacklisted and whitelisted
12660202365SMauro Carvalho Chehabdevices.
12760202365SMauro Carvalho Chehab
12860202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_devinfo.c
12960202365SMauro Carvalho Chehab   :internal:
13060202365SMauro Carvalho Chehab
13160202365SMauro Carvalho Chehabdrivers/scsi/scsi_ioctl.c
13260202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~
13360202365SMauro Carvalho Chehab
13460202365SMauro Carvalho ChehabHandle ioctl() calls for SCSI devices.
13560202365SMauro Carvalho Chehab
13660202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_ioctl.c
13760202365SMauro Carvalho Chehab   :export:
13860202365SMauro Carvalho Chehab
13960202365SMauro Carvalho Chehabdrivers/scsi/scsi_lib.c
14060202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~
14160202365SMauro Carvalho Chehab
14260202365SMauro Carvalho ChehabSCSI queuing library.
14360202365SMauro Carvalho Chehab
14460202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_lib.c
14560202365SMauro Carvalho Chehab   :export:
14660202365SMauro Carvalho Chehab
14760202365SMauro Carvalho Chehabdrivers/scsi/scsi_lib_dma.c
14860202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14960202365SMauro Carvalho Chehab
15060202365SMauro Carvalho ChehabSCSI library functions depending on DMA (map and unmap scatter-gather
15160202365SMauro Carvalho Chehablists).
15260202365SMauro Carvalho Chehab
15360202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_lib_dma.c
15460202365SMauro Carvalho Chehab   :export:
15560202365SMauro Carvalho Chehab
15660202365SMauro Carvalho Chehabdrivers/scsi/scsi_proc.c
15760202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~
15860202365SMauro Carvalho Chehab
15960202365SMauro Carvalho ChehabThe functions in this file provide an interface between the PROC file
16060202365SMauro Carvalho Chehabsystem and the SCSI device drivers It is mainly used for debugging,
16160202365SMauro Carvalho Chehabstatistics and to pass information directly to the lowlevel driver. I.E.
16260202365SMauro Carvalho Chehabplumbing to manage /proc/scsi/\*
16360202365SMauro Carvalho Chehab
16460202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_proc.c
16560202365SMauro Carvalho Chehab   :internal:
16660202365SMauro Carvalho Chehab
16760202365SMauro Carvalho Chehabdrivers/scsi/scsi_netlink.c
16860202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16960202365SMauro Carvalho Chehab
17060202365SMauro Carvalho ChehabInfrastructure to provide async events from transports to userspace via
17160202365SMauro Carvalho Chehabnetlink, using a single NETLINK_SCSITRANSPORT protocol for all
172*293fcea5SRandy Dunlaptransports. See `the original patch submission
173*293fcea5SRandy Dunlap<https://lore.kernel.org/linux-scsi/1155070439.6275.5.camel@localhost.localdomain/>`__
174*293fcea5SRandy Dunlapfor more details.
17560202365SMauro Carvalho Chehab
17660202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_netlink.c
17760202365SMauro Carvalho Chehab   :internal:
17860202365SMauro Carvalho Chehab
17960202365SMauro Carvalho Chehabdrivers/scsi/scsi_scan.c
18060202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~
18160202365SMauro Carvalho Chehab
18260202365SMauro Carvalho ChehabScan a host to determine which (if any) devices are attached. The
18360202365SMauro Carvalho Chehabgeneral scanning/probing algorithm is as follows, exceptions are made to
18460202365SMauro Carvalho Chehabit depending on device specific flags, compilation options, and global
18560202365SMauro Carvalho Chehabvariable (boot or module load time) settings. A specific LUN is scanned
18660202365SMauro Carvalho Chehabvia an INQUIRY command; if the LUN has a device attached, a scsi_device
18760202365SMauro Carvalho Chehabis allocated and setup for it. For every id of every channel on the
18860202365SMauro Carvalho Chehabgiven host, start by scanning LUN 0. Skip hosts that don't respond at
18960202365SMauro Carvalho Chehaball to a scan of LUN 0. Otherwise, if LUN 0 has a device attached,
19060202365SMauro Carvalho Chehaballocate and setup a scsi_device for it. If target is SCSI-3 or up,
19160202365SMauro Carvalho Chehabissue a REPORT LUN, and scan all of the LUNs returned by the REPORT LUN;
19260202365SMauro Carvalho Chehabelse, sequentially scan LUNs up until some maximum is reached, or a LUN
19360202365SMauro Carvalho Chehabis seen that cannot have a device attached to it.
19460202365SMauro Carvalho Chehab
19560202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_scan.c
19660202365SMauro Carvalho Chehab   :internal:
19760202365SMauro Carvalho Chehab
19860202365SMauro Carvalho Chehabdrivers/scsi/scsi_sysctl.c
19960202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~
20060202365SMauro Carvalho Chehab
20160202365SMauro Carvalho ChehabSet up the sysctl entry: "/dev/scsi/logging_level"
20260202365SMauro Carvalho Chehab(DEV_SCSI_LOGGING_LEVEL) which sets/returns scsi_logging_level.
20360202365SMauro Carvalho Chehab
20460202365SMauro Carvalho Chehabdrivers/scsi/scsi_sysfs.c
20560202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~
20660202365SMauro Carvalho Chehab
20760202365SMauro Carvalho ChehabSCSI sysfs interface routines.
20860202365SMauro Carvalho Chehab
20960202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_sysfs.c
21060202365SMauro Carvalho Chehab   :export:
21160202365SMauro Carvalho Chehab
21260202365SMauro Carvalho Chehabdrivers/scsi/hosts.c
21360202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~
21460202365SMauro Carvalho Chehab
21560202365SMauro Carvalho Chehabmid to lowlevel SCSI driver interface
21660202365SMauro Carvalho Chehab
21760202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/hosts.c
21860202365SMauro Carvalho Chehab   :export:
21960202365SMauro Carvalho Chehab
220e8fd31c5SRandy Dunlapdrivers/scsi/scsi_common.c
221e8fd31c5SRandy Dunlap~~~~~~~~~~~~~~~~~~~~~~~~~~
222e8fd31c5SRandy Dunlap
223e8fd31c5SRandy Dunlapgeneral support functions
224e8fd31c5SRandy Dunlap
225e8fd31c5SRandy Dunlap.. kernel-doc:: drivers/scsi/scsi_common.c
226e8fd31c5SRandy Dunlap   :export:
227e8fd31c5SRandy Dunlap
22860202365SMauro Carvalho ChehabTransport classes
22960202365SMauro Carvalho Chehab-----------------
23060202365SMauro Carvalho Chehab
23160202365SMauro Carvalho ChehabTransport classes are service libraries for drivers in the SCSI lower
23260202365SMauro Carvalho Chehablayer, which expose transport attributes in sysfs.
23360202365SMauro Carvalho Chehab
23460202365SMauro Carvalho ChehabFibre Channel transport
23560202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~
23660202365SMauro Carvalho Chehab
23760202365SMauro Carvalho ChehabThe file drivers/scsi/scsi_transport_fc.c defines transport attributes
23860202365SMauro Carvalho Chehabfor Fibre Channel.
23960202365SMauro Carvalho Chehab
24060202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_transport_fc.c
24160202365SMauro Carvalho Chehab   :export:
24260202365SMauro Carvalho Chehab
24360202365SMauro Carvalho ChehabiSCSI transport class
24460202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~
24560202365SMauro Carvalho Chehab
24660202365SMauro Carvalho ChehabThe file drivers/scsi/scsi_transport_iscsi.c defines transport
24760202365SMauro Carvalho Chehabattributes for the iSCSI class, which sends SCSI packets over TCP/IP
24860202365SMauro Carvalho Chehabconnections.
24960202365SMauro Carvalho Chehab
25060202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_transport_iscsi.c
25160202365SMauro Carvalho Chehab   :export:
25260202365SMauro Carvalho Chehab
25360202365SMauro Carvalho ChehabSerial Attached SCSI (SAS) transport class
25460202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25560202365SMauro Carvalho Chehab
25660202365SMauro Carvalho ChehabThe file drivers/scsi/scsi_transport_sas.c defines transport
25760202365SMauro Carvalho Chehabattributes for Serial Attached SCSI, a variant of SATA aimed at large
25860202365SMauro Carvalho Chehabhigh-end systems.
25960202365SMauro Carvalho Chehab
26060202365SMauro Carvalho ChehabThe SAS transport class contains common code to deal with SAS HBAs, an
261da51bbcdSRemington Brasgaapproximated representation of SAS topologies in the driver model, and
26260202365SMauro Carvalho Chehabvarious sysfs attributes to expose these topologies and management
26360202365SMauro Carvalho Chehabinterfaces to userspace.
26460202365SMauro Carvalho Chehab
26560202365SMauro Carvalho ChehabIn addition to the basic SCSI core objects this transport class
26660202365SMauro Carvalho Chehabintroduces two additional intermediate objects: The SAS PHY as
26760202365SMauro Carvalho Chehabrepresented by struct sas_phy defines an "outgoing" PHY on a SAS HBA or
26860202365SMauro Carvalho ChehabExpander, and the SAS remote PHY represented by struct sas_rphy defines
26960202365SMauro Carvalho Chehaban "incoming" PHY on a SAS Expander or end device. Note that this is
27060202365SMauro Carvalho Chehabpurely a software concept, the underlying hardware for a PHY and a
27160202365SMauro Carvalho Chehabremote PHY is the exactly the same.
27260202365SMauro Carvalho Chehab
27360202365SMauro Carvalho ChehabThere is no concept of a SAS port in this code, users can see what PHYs
27460202365SMauro Carvalho Chehabform a wide port based on the port_identifier attribute, which is the
27560202365SMauro Carvalho Chehabsame for all PHYs in a port.
27660202365SMauro Carvalho Chehab
27760202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_transport_sas.c
27860202365SMauro Carvalho Chehab   :export:
27960202365SMauro Carvalho Chehab
28060202365SMauro Carvalho ChehabSATA transport class
28160202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~
28260202365SMauro Carvalho Chehab
28360202365SMauro Carvalho ChehabThe SATA transport is handled by libata, which has its own book of
28460202365SMauro Carvalho Chehabdocumentation in this directory.
28560202365SMauro Carvalho Chehab
28660202365SMauro Carvalho ChehabParallel SCSI (SPI) transport class
28760202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28860202365SMauro Carvalho Chehab
28960202365SMauro Carvalho ChehabThe file drivers/scsi/scsi_transport_spi.c defines transport
29060202365SMauro Carvalho Chehabattributes for traditional (fast/wide/ultra) SCSI busses.
29160202365SMauro Carvalho Chehab
29260202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_transport_spi.c
29360202365SMauro Carvalho Chehab   :export:
29460202365SMauro Carvalho Chehab
29560202365SMauro Carvalho ChehabSCSI RDMA (SRP) transport class
29660202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29760202365SMauro Carvalho Chehab
29860202365SMauro Carvalho ChehabThe file drivers/scsi/scsi_transport_srp.c defines transport
29960202365SMauro Carvalho Chehabattributes for SCSI over Remote Direct Memory Access.
30060202365SMauro Carvalho Chehab
30160202365SMauro Carvalho Chehab.. kernel-doc:: drivers/scsi/scsi_transport_srp.c
30260202365SMauro Carvalho Chehab   :export:
30360202365SMauro Carvalho Chehab
30460202365SMauro Carvalho ChehabSCSI lower layer
30560202365SMauro Carvalho Chehab================
30660202365SMauro Carvalho Chehab
30760202365SMauro Carvalho ChehabHost Bus Adapter transport types
30860202365SMauro Carvalho Chehab--------------------------------
30960202365SMauro Carvalho Chehab
31060202365SMauro Carvalho ChehabMany modern device controllers use the SCSI command set as a protocol to
31160202365SMauro Carvalho Chehabcommunicate with their devices through many different types of physical
31260202365SMauro Carvalho Chehabconnections.
31360202365SMauro Carvalho Chehab
31460202365SMauro Carvalho ChehabIn SCSI language a bus capable of carrying SCSI commands is called a
31560202365SMauro Carvalho Chehab"transport", and a controller connecting to such a bus is called a "host
31660202365SMauro Carvalho Chehabbus adapter" (HBA).
31760202365SMauro Carvalho Chehab
31860202365SMauro Carvalho ChehabDebug transport
31960202365SMauro Carvalho Chehab~~~~~~~~~~~~~~~
32060202365SMauro Carvalho Chehab
32160202365SMauro Carvalho ChehabThe file drivers/scsi/scsi_debug.c simulates a host adapter with a
32260202365SMauro Carvalho Chehabvariable number of disks (or disk like devices) attached, sharing a
32360202365SMauro Carvalho Chehabcommon amount of RAM. Does a lot of checking to make sure that we are
32460202365SMauro Carvalho Chehabnot getting blocks mixed up, and panics the kernel if anything out of
32560202365SMauro Carvalho Chehabthe ordinary is seen.
32660202365SMauro Carvalho Chehab
32760202365SMauro Carvalho ChehabTo be more realistic, the simulated devices have the transport
32860202365SMauro Carvalho Chehabattributes of SAS disks.
32960202365SMauro Carvalho Chehab
330*293fcea5SRandy DunlapFor documentation see http://sg.danny.cz/sg/scsi_debug.html
33160202365SMauro Carvalho Chehab
33260202365SMauro Carvalho Chehabtodo
33360202365SMauro Carvalho Chehab~~~~
33460202365SMauro Carvalho Chehab
33560202365SMauro Carvalho ChehabParallel (fast/wide/ultra) SCSI, USB, SATA, SAS, Fibre Channel,
336*293fcea5SRandy DunlapFireWire, ATAPI devices, Infiniband, Parallel ports,
33760202365SMauro Carvalho Chehabnetlink...
338