Please consider a donation to the Higher Intellect project. See or the Donate to Higher Intellect page for more info.


From Higher Intellect Vintage Wiki


SCSI stands for Small Computer System Interface. Industry standards allowed for cooperation between vendors, before the empire, before the dark times. SCSI devices included floppy drives, scanners, hard disk drives, optical media (CD, DVDs,etc), and mag-optical.

It originated from Shugart's 1979' SASI (Shugart Associates System Interface) and Shugart and NCR presented it to the ANSI in 1981. It became official in 1986, when the ANSI-committee X3T9.2 defined the SCSI-1 spec as document X3.131-1986.



SCSI-1 defined a universal 8 bit I/O-Bus that allows connection of up to 8 devices including the so-called "host adapter". Every device must have a unique ID in the range of 0 to 7. SCSI-1 was a high-speed bus system, compared to this time's peripheral devices.


SCSI-1 was the first approved standard and lacked some points and some definitions. So SCSI-2 development and approval started while SCSI-1 still wasn't officially approved. In 1986, when SCSI-1 was officially approved, SCSI-2 already was in the works until now, when on January 31, 1994, the draft in revision 10L was approved by the ANSI Board of Standards Review. The official SCSI-2 designation (doc. nr.) will be X3.131-1994. As you might remember, most manufacturers used the term "SCSI-2" from about 1988 in marketing. This isn't real approved SCSI-2, of course, but mostly you can trust this, as the changes were not big for "standard" devices. SCSI-2 merely entered a better formal definition, removed some oddities and obsolete things, added some extensions, and most importantly, added the ability to double and even quadruple data transfer speed on the SCSI bus with it's "Fast" SCSI and "Wide" SCSI options.

  • The Type-1 connector (DB-50) was removed, high density SCSI-2 connector alternatives were added to the official options
  • Synchronous Transfers became a standard feature, with optional
  • Fast Synchronous Transfer Mode (Fast SCSI-2)
  • Sync. Negotiation can be invoked by Initiator _and_ Target.
  • 16Bit- and 32Bit-Wide SCSI became a defined option.
  • SCSI bus parity changed from "optional" to "mandatory"
  • Initiators now must provide terminator power
  • Message support became mandatory
  • Command Queueing became a defined option. For a device with command queueing needs memory to reorder the commands, this - with a little step further - introduced device caches, that can be manipulated through the Mode Sense Pages.
  • the Common Command Sets (CCS) for several device classes became formally defined.

Fast SCSI[edit]

With SCSI-2, Fast SCSI was defined as an option. Despite the tendency of the market to define Fast-SCSI as "different, but faster SCSI", Fast SCSI is only an additional synchronous data transfer mode with tighter timing to achieve the 10MB/sec max. data rate. As with any other synchronous transfer mode, only data transfers are synchronous, the commands are transferred asynchronous. Fast SCSI is _very_ picky with the SCSI cabling, especially with round external cabling. Most external cables doesn't support reliable Fast SCSI, the few that do are _very_ expensive. Fast SCSI is "not recommended" with passive terminators.

Wide SCSI[edit]

Another SCSI-2 option is Wide SCSI. Two flavors are defined, 16 Bit and 32 Bit. Wide SCSI can be combined with Fast SCSI and so can give up to 40 MB/sec data rate. Every 8 bits have their own parity bit and also with every 8 bits you have the possibility to address another 8 devices. For every data bit line selects a device, with 16 Bit Wide SCSI, you can address 16 devices, 32 Bit Wide SCSI has 32 possible ID's. The X3T9.2 committee defined a 68-pin SCSI cable for 16 Bit and a combination of a standard 8 Bit 'A' and a 68 pin 'B' cable for 16 Bit and 32 Bit Wide SCSI. However, there is a 110 pin 'L'-cable at least in discussion that will support 8, 16 and 32 Bit connections and should be standardized with SCSI-3.


SCSI-3 is somewhat a revolution in the SCSI world - it defines high speed _serial_ interfaces. At the moment, there seem to be three of these serial interfaces in the works: Fiber Channel, Fiber Channel Low cost and P1394.

The Fiber channel and FC/LC should provide up to 100 MBits/sec data throughput, where P1394, also called "FireWire", is defined to give up to 200 MBits/sec. P1394 seems to have one advantage over Fiber Channel - it's an "isochronous" transport layer, that means, it delivers - and should guarantee - a continuous data stream.

There is also a new connector scheme called Single Connector Attachment (SCA). SCA uses an 80-pin connector to provide all neccessary signals for 8- and 16-bit SCSI devices, including power connections, LED-control and so on.


The SCSI bus needs to be "terminated". This means, both ends of the bus must have a circuit of some sort to eliminate signal reflections that would occur from the physical ends of the bus. There are various circuit schemes of termination, the two most popular are drawn below. The termination circuit needs some power, and, to deliver this, there is a line called TERMPWR or Termination Power on the bus. Mostly, the TP source is the host adapter, for this reason you can see fuses on most host adapters, mostly about 1.5 Amp types.

Single-Ended and Differential SCSI[edit]

There are two different electrical SCSI interfaces, Single-Ended and Differential SCSI. Single-Ended, "Standard" SCSI has (sic!) single ended TTL transceivers that allow up to 5 MHz data transfer rates with up to 6 meters cable length or up to 10 MHz data transfer (Fast SCSI) with up to 3 meters cable length. Differential SCSI has RS-485-style transceivers that allow up to 10 MHz data transfer rate, but with cable lengths up to 25 meters and with much better S/N conditions. Important is, Single-Ended and Differential devices are _not_ electrically compatible with each other. If you try to mix them, you'll likely end up in destroying the Single-Ended devices on the bus and - less probably - even the differential device(s).

Synchronous and Asynchronous Transfers[edit]

SCSI can use two handshaking modes, Asynchronous and Synchronous. The main difference is, Asynchronous is basically a "classic" REQ/ACK handshaking system for each data packet, where with Synchronous, multiple REQ's can be issued before receiving ACK's, thus giving a big performance plus.


ASPI stands for Advanced SCSI Programming Interface. Mainly, it originated at Adaptec and was soon adopted by major companies. ASPI provides a communication layer to the SCSI adapter and the devices without the need to know about the host adapter - all communication is made to the ASPI interface. So, basically the host adapter manufacturer writes an ASPI driver for his host adapter and he's in business without the need of writing a new CDROM driver, a disk driver and so on. Most actual tape backup software needs ASPI as a communication layer or - at least - support it.

Headaches: Conflicting IDs, Buses and Termination issues[edit]


Internal to the Octane is 3 U320 drive bays. This is the internal bus. You might have for example a external DVD drive and an external tape daisy chained from the back of your Octane, this is an external bus. A cable from your Octane to the tape unit and another cable from the tape unit to the DVD-ROM and terminator block on the back of DVD-ROM drives case. Or the DVD drive might have a jumper set.


Each device must have a different SCSI ID. If there are 6 people called John in a room and someone calls out "Hey, John" there will be confusion. Likewise, having two devices with SCSI IDs of say 3, won't work. There were some conventions that certain devices have a certain ID but this was never mandatory. The SCSI bus controller usually a card or chip built into the motherboard normally has an ID of 0. This is often a first point of troubleshooting. SCSI hard drives often have a set of jumpers which allows you to set the ID in binary. The U320 drive bays in the SGI Octane, OriginVault, SGI Onyx2, etc override the jumper selections. However a 50 pin drive on an SGI Indy should have the pins set for the SCSI and the termination pin set also. Speaking of termination...


The signals start at a known point (the controller) and head towards devices. Is the first device the last one on the bus or is there one after it? How about the second? The terminator closes the loop and also marks the end of the bus, nothing follows it. Too much termination and the electrical signals are confused (called "echo" or "bounce-back"). Host bus adapters can sit in the middle of the bus or at one end of it. External devices have a block that plugs into back of the last device. An internal SCSI bus might be self terminating (eg Octane) or there might be a jumper on the drive itself which sets termination. Describe Active and passive termination here.

PCI SCSI Host bus adapters working with IRIX[edit]

Host Bus Adapters Known working on IRIX.
Manufacturer Model Description Confirmed on
QLA1040 (SE) Octane, Onyx2
QLA 1040D (HVD) Octane
QLA12160 (LVD) Octane
QLA2200 1Gbit Fibre Channel Adapter Copper/HSSDC interface Octane, O2
QLA-1080 IP35
QLA-1280 IP35
QLA-10160 IP35
QLA-12160 IP35
QLA2200/2200F (single-port, 1Gb/s) IP35, IP30, IP27
QLA2310/2310F (single-port, 2Gb/s, requires IRIX 6.5.18 or later) IP35
QLA2340 (single-port, 2Gb/s, requires IRIX 6.5.18 or later) IP35
QLA2342 2Gb/s Dual-port optical Fibre Channel Adapter (LC-type), requires IRIX 6.5.18 or later Octane (IP30), Origin 300 / Fuel (IP35), Onyx2 / Origin 200 (IP27)
QLA2344 (dual-port, 2Gb/s, requires IRIX6.5.18 or later) IP35
AHA-2940UW O2
Adaptec AHA-2944UW HVD Requires Adaptec 2944 WD SCSI Adapter Hack O2
Adaptec AHA-3940UW Requires hack O2
SAS3442X-R LSI Logic SAS3442X-R 8-port SAS RAID Controller (RAID only works under Windows) Origin 300
LSI7104XP-LC (single-port, 4GB/s, requires IRIX 6.5.28 or later) IP 35
LSI7204XP-LC (dual-port, 4GB/s, requires IRIX 6.5.28 or later) IP35
LSI21320-IS Ultra320 SCSI LVD/SE HBA (OEM functional equivalent to PCIX-SCSI-U4-2P) IP35
SAS3041X-R 4-port SAS/SATA HBA IP35
SAS3442X 8-port SAS/SATA HBA IP35
NetFX ??? FibreChannel Octane
2-Port PCIX Ultra320 SCSI LVD/SE HBA - SGI Part # PCIX-SCSI-U4-2P

There are two models of QLA12160 the /33 and /66 (ie. PCI bus speed). The QLA12160/33 is best used with Octane/O2K/Onyx2 since the PCI bus is 33MHz anyway, but if you want to put a QLA12160 in Fuel/Tezro/O3K then look for the /66 version as it can run much faster because of the 66MHz bus link (doesn't matter for a single disk connection of course, but very wise for XLV/RAID/etc.)

Variants of SCSI buses on SGI systems[edit]

SCSI-1 devices can be connected to SCSI-2 buses. There is a general backwards compatibility contained in the SCSI specification.

Original SCSI specification[edit]

Original 50 pin flat ribbon cable. The original "narrow" allowed for 8 devices including the host bus adapter (Controller card or chip on motherboard). The "wide" specification allowed for a 68pin cable and 16 devices on the bus including the controller (HBA). SCSI IDs normally range from 0 to 7 on narrow buses to 0 to 15 on wide buses. Each device must have its own unique ID so they can be agreement on the bus as to which data or command is destined for which device.

The SGI Indy has a connector on the main board for a 50 pin ribbon cable.



Wide Specification[edit]

The SGI O2 with an Adaptec 2940 UW has 68 pin connector and can support 15 devices. Much like the original specification but with twice the data throughput.



SCSI-3 specification[edit]



Single Ended

Low Voltage Differential

High Voltage Differential


Octane, Origin 200, 300, Onyx2, Fuel

Fibre Channel[edit]

Serial fiberoptic

QLogic 2342 PCI-X host bus adapter works in at least one IP35 machine:

 Integral SCSI controller 7: Version Fibre Channel QL2342 Port 2, 66 MHz PCI

Fiber Channel reference[edit]

hinv sample:

Location: /hw/module/001c02/node
       IP45_4CPU Board: barcode KJD687     part 030-1797-001 rev -B
Location: /hw/module/001c02/Ibrick/xtalk/14
             IO8 Board: barcode MHL579     part 030-1673-003 rev -E
Location: /hw/module/001c02/Ibrick/xtalk/15
             IO8 Board: barcode MHL579     part 030-1673-003 rev -E
Location: /hw/module/001p04/node
             BIC Board: barcode MJS429     part 030-1740-001 rev -F
Location: /hw/module/001p04/Pbrick/xtalk/8
         PEBRICK Board: barcode MHZ113     part 030-1724-001 rev -E
Location: /hw/module/001p04/Pbrick/xtalk/9
         PEBRICK Board: barcode MHZ113     part 030-1724-001 rev -E
Location: /hw/module/001p04/Pbrick/xtalk/12
         PEBRICK Board: barcode MHZ113     part 030-1724-001 rev -E
Location: /hw/module/001p04/Pbrick/xtalk/13
         PEBRICK Board: barcode MHZ113     part 030-1724-001 rev -E
Location: /hw/module/001p04/Pbrick/xtalk/14
         PEBRICK Board: barcode MHZ113     part 030-1724-001 rev -E
Location: /hw/module/001p04/Pbrick/xtalk/15
         PEBRICK Board: barcode MHZ113     part 030-1724-001 rev -E
4 600 MHZ IP35 Processors
CPU: MIPS R14000 Processor Chip Revision: 2.4
FPU: MIPS R14010 Floating Point Chip Revision: 2.4
CPU 0 at Module 001c02/Slot 0/Slice A: 600 Mhz MIPS R14000 Processor Chip (enabled) 
  Processor revision: 2.4. Scache: Size 4 MB Speed 300 Mhz  Tap 0xa
CPU 1 at Module 001c02/Slot 0/Slice B: 600 Mhz MIPS R14000 Processor Chip (enabled) 
  Processor revision: 2.4. Scache: Size 4 MB Speed 300 Mhz  Tap 0xa
CPU 2 at Module 001c02/Slot 0/Slice C: 600 Mhz MIPS R14000 Processor Chip (enabled) 
  Processor revision: 2.4. Scache: Size 4 MB Speed 300 Mhz  Tap 0xa
CPU 3 at Module 001c02/Slot 0/Slice D: 600 Mhz MIPS R14000 Processor Chip (enabled) 
  Processor revision: 2.4. Scache: Size 4 MB Speed 300 Mhz  Tap 0xa
Main memory size: 4096 Mbytes
Instruction cache size: 32 Kbytes
Data cache size: 32 Kbytes
Secondary unified instruction/data cache size: 4 Mbytes
Memory at Module 001c02/Slot 0: 4096 MB (enabled)
  Bank 0 contains 1024 MB (Premium) DIMMS (enabled)
  Bank 1 contains 1024 MB (Premium) DIMMS (enabled)
  Bank 2 contains 1024 MB (Premium) DIMMS (enabled)
  Bank 3 contains 1024 MB (Premium) DIMMS (enabled)
Memory at Module 001p04/Slot 0: 0 MB (enabled)
Integral SCSI controller 0: Version QL12160, low voltage differential
  Disk drive: unit 1 on SCSI controller 0 (unit 1)
Integral SCSI controller 1: Version QL12160, low voltage differential
Integral SCSI controller 6: Version Fibre Channel QL2342 Port 1, 66 MHz PCI
  Disk drive: unit 30 on SCSI controller 6 (unit 30)
  Disk drive: unit 31 on SCSI controller 6 (unit 31)
  Disk drive: unit 32 on SCSI controller 6 (unit 32)
  Disk drive: unit 33 on SCSI controller 6 (unit 33)
  Disk drive: unit 34 on SCSI controller 6 (unit 34)
  Disk drive: unit 35 on SCSI controller 6 (unit 35)
  Disk drive: unit 36 on SCSI controller 6 (unit 36)
  Disk drive: unit 37 on SCSI controller 6 (unit 37)
  Disk drive: unit 38 on SCSI controller 6 (unit 38)
  Disk drive: unit 39 on SCSI controller 6 (unit 39)
Integral SCSI controller 7: Version Fibre Channel QL2342 Port 2, 66 MHz PCI
IOC3/IOC4 serial port: tty3
IOC3/IOC4 serial port: tty4
Integral Fast Ethernet: ef0, version 1, module 001c02, pci 4
Gigabit Ethernet: tg1, module 001p04, PCI bus 2 slot 1 port 0
Gigabit Ethernet: tg2, module 001p04, PCI bus 2 slot 1 port 1
Gigabit Ethernet: tg3, module 001p04, PCI bus 3 slot 1 port 0
Gigabit Ethernet: tg4, module 001p04, PCI bus 3 slot 1 port 1
  PCI Adapter ID (vendor 0x1077, device 0x1216) PCI slot 1
  PCI Adapter ID (vendor 0x10a9, device 0x0003) PCI slot 4
  PCI Adapter ID (vendor 0x11c1, device 0x5802) PCI slot 5
  PCI Adapter ID (vendor 0x14e4, device 0x1648) PCI slot 1
  PCI Adapter ID (vendor 0x14e4, device 0x1648) PCI slot 1
  PCI Adapter ID (vendor 0x1077, device 0x2312) PCI slot 1
  PCI Adapter ID (vendor 0x1077, device 0x2312) PCI slot 1
  PCI Adapter ID (vendor 0x14e4, device 0x1648) PCI slot 1
  PCI Adapter ID (vendor 0x14e4, device 0x1648) PCI slot 1
IOC3/IOC4 external interrupts: 1
HUB in Module 001c02/Slot 0: Revision 2 Speed 200.00 Mhz (enabled)
IP35prom in Module 001c02/Slot n0: Revision 6.210
USB controller: type OHCI

SAS: Serial Attached SCSI[edit]

Think of it as a bridge between SATA and SCSI.

IP35 machines can use a LSI HBA to open up a world of SAS and SATA drives.

SAS Reference[edit]

Integral SCSI controller 3: Version IEEE1394 SBP2
  Disk drive / removable media: unit 2 on SCSI controller 3
Integral SCSI controller 2: Version SAS/SATA LS1064
  Disk drive: unit 0 on SCSI controller 2
Integral SCSI controller 0: Version QL12160, low voltage differential
  Disk drive: unit 1 on SCSI controller 0
  Disk drive: unit 2 on SCSI controller 0
Integral SCSI controller 1: Version QL12160, single ended
  CDROM: unit 6 on SCSI controller 1

fool 4% df -k
Filesystem             Type  kbytes     use     avail  %use Mounted on
/dev/root               xfs 35705764 29037816  6667948  82  /
/dev/dsk/dks0d2s7       xfs 71676204 25612604 46063600  36  /usr/people/username/disktwo
/dev/dsk/dks2d0s7       xfs 488324920 209052828 279272092  43  /usr/people/username/sata

IDE to SCSI adapters working with SGI machines[edit]

General comments about SCSI on SGI Systems[edit]

Can the O2 be upgraded to permit faster SCSI transfer speeds or am I stuck with the inbuilt SCSI only?

colin wrote:

   40 MB/sec UW SCSI should be plenty fast for even a new drive. Honest. Find a good deal on a recent 18 GB 10K RPM drive. The original 4 and 9 GB drives are 7 or 8 years old now and are SLOW.
 If you want something faster, stripe 3 new drives: one on the internal bus, one on the external bus, and one on an Adaptec 2940WU PCI card. 
 You should be able to hit 90+ MB/sec sustained with 3 modern drives.

traktopel wrote:

 The O2 scsi HBA is Single Ended (SE) SCSI and IBM drives are LVD. It might be not only a SYNC or NEGO issue but due to LVD to SE conversion . 
 I have heard that the Adaptec chip and IBM DDYS drives might have troubles in some cases. 
 I know I should not say that be if you have a PC with an Adaptec 2940 you can test the same config and might not work as well... :(  Check if drives have a "Force SE mode" jumper....

ShadeOfBlue wrote:

  Be sure to enable parity on any drive that you intend to use in an SGI. Most drives have a jumper and some can do it by themselves

LoWeN wrote:

 Be aware that U320 harddrives are not compatible below UW.So it will work with octane/O2/O200...

hamei wrote:

  A reference point for people worried about heat - just swapped a 10k rpm IBM DDYS drive out for a 15k rpm Maxtor Atlas (not even Atlas II) 
  and the newer faster drive runs cooler than the older slower one.

zahal wrote:

  Upgraded my O2's 36GB 10k.6 to a 72GB 15k.4 drive 2 days ago. Works great, there's a hum that I don't recall with the 10k (seems like the O2's plastic case is resonating with the 15k)...
  Gimp and Fireflop now startup quite faster....boot time is also reduced. I recomend O2 owners to upgrade to a 15k.4 if possible (or any good 15k drive)....
  any speed boost on the bloo toaster is appreciated

Recondas wrote:

If you have Impressario installed, there are a number of scanners available through the Impressario Scanner Manager. 
Open Toolchest > Find > Scanners > then select the "scanners" icon to open Scanner Manager; or execute scanners at a command prompt.
Although it primarily deals with SCSI tape drives, there are a number SCSI devices that are <or have been> defined in /var/sysgen/master.d/scsi. 
For instance, there's this brief mention of some scanners that are ID'd as a processor - perhaps your scanner is similar <this segment begins at line 896 in master.d/scsi revision 1.66>:
     * SCSI scanners that like to call themselves Processor types.
     double_inq_str_s scanner_inq_strings[] = {
     { "HP",     8,  "C",        16, 0 },
     { NULL,     0,  NULL,       0,  0 }

Octane and wide SCSI[edit]

> Too bad mine doesn't know that. It refuses to pass POST with the
> external Plextor attached via a 68pin/50pin HD cable (from Reichelt).

Take a look at /var/sysgen/system/ and make an entry like that:

DEVICE_ADMIN: /hw/node/xtalk/15/pci/1/scsi_ctrl/1 ql_wide_enable=0

This sets your external SCSI bus to narrow(8bit)-mode. You can make further entries for disabling wide-mode on selected scsi targets, just read the examples there.

After saving, rebuild the kernel & reboot:

autoconfig -v (or -vf)

IRIX and SCSI[edit]

IRIX manual pages related to SCSI[edit]

scsicontrol(1m)                                                scsicontrol(1m)

     scsicontrol - probe and control scsi devices

     /usr/sbin/scsicontrol [-CDHIRSacdegilmqsv] [-b blockize] device ...

scsiha(1m)                                                          scsiha(1m)

     scsiha - probe and control scsi buses

     scsiha [-lprtTws] [-D debuglevel] [-L targetID|all]
            [-S targetID|all] {bus_number | device} ...

SCSIHA(7M)                                                          SCSIHA(7M)

     scsiha - SCSI bus and loop operation driver


Programming under IRIX[edit]

A user space program would have format like:

   While not user quit, 
            pack and send a command message,  
            wait for a response, unpack it.
            Do something application specific with the data from the packet.

IRIX contains a special kernel-level device driver whose purpose is to give user-level processes the ability to issue commands and read and write data on the SCSI bus. By using ioctl() calls to this driver, a user-level process can interrogate and program devices, and can initiate DMA transfers between buffers in user process memory and devices.

The low-level programming used with the dsreq device driver is eased by the use of a library of utility functions documented in the dslib(3) reference page. The source code of the dslib library is distributed with IRIX.

Command Data Blocks[edit]

Decoding SCSI Errors[edit]

You might see an error like: dksc1d1vol1: [Alert] Illegal request: illegal logical address (asc=0x21, asq=0x0 CDB: 28 00000010

The command data block (CDB) starts with an operation code (op code). The operation codes can be found in a table in a SCSI FAQ.

A device that fails an INQuiry command might might be broken have issues with the bus (termination, echos, etc). A device that fails a read command might have issue with media.

The additional sense code will have different meaning for each kind of command and each kind of device. But should make sense in context.

External Links[edit]

See Also[edit]