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