Probably the best way to describe what a book is about is to show you what it contains. Here is the table of contents for "The Programmer's Guide to SCSI."
Intended Audience
How This Book is Organized
What You Will Need
Acknowledgements
The SCSI Solution
SCSI-1
SCSI-1 Features
Intelligent Devices
Multitasking I/O
Synchronous Data Transfer
Multiple Device Types on a Single InterfaceThe Birth of SCSI-2
New Features in SCSI-2
Fast SCSI
Wide SCSI
Fast Wide SCSI
Queued I/O Processes
New Command SetsImproved SCSI-1 Features
Data Parity Required
Message Support Required
Terminator Power Provided by InitiatorSCSI-3 on the Horizon
Fast-20 and Fast-40 SCSI
Serial SCSI Standards
Fibre Channel
Serial Standard Architecture
P1394
Layered Architecture
Plug and Play SCSI
SCSI Transactions: an Overview
SCSI Phases
Bus Free
Arbitration
Selection
Reselection
Message Out
Command
Data In and Data Out
Status
Message In
Phase Sequence
Message Types
The Identify Message
Extended Messages
Synchronous Data Transfer Request
Wide Data Transfer RequestOther Common Messages
No Operation
Abort
Bus Device Reset
Disconnect
Ignore Wide Residue
Queue Tag Messages
Simple Queue Tag
Head of Queue Tag
Ordered Queue Tag
Command Structure
Operation Codes
Logical Unit Number
Command Parameters
Control Field
Parameter ListsByte Order
Mandatory SCSI Commands
Test Unit Ready
InquiryExample: Iomega Zip Drive
Optional Commands
Device Type-Specific Commands
Mode Select
Mode SenseMode Sense Data Format
Example: Iomega Zip DriveReading and Writing
Read
WriteOther Commands
Status
Status Codes
Sense Data
Sense Key
Unit Attention
Additional Sense Codes
Example: Iomega Zip Drive
What is ASPI?
Why Should I Use ASPI?
ASPI Concepts
Adapter and Device Addressing
Issuing SCSI Commands
Building the SCSI Request BlockSending an SRB to the ASPI Manager
Waiting for an SRB to Complete
Processing Returned Status InformationAdapter Specific Properties
Connecting to the ASPI ManagerASPI Commands
Host Adapter Inquiry (SC_HA_INQUIRY)
Get Device Type (SC_GET_DEV_TYPE)
Execute SCSI Command (SC_EXEC_SCSI_CMD)
Abort SRB (SC_ABORT_SRB)
Reset SCSI Device (SC_RESET_DEV)
Rescan SCSI Bus (SC_RESCAN_SCSI_BUS)
Get/Set Timeouts (SC_GETSET_TIMEOUTS)ASPI Error and Status Codes
ASPI SRB Status (SRB_Status)
SS_PENDING
SS_COMP
SS_ERR
SS_INVALID_CMD
SS_INVALID_HA
SS_NO_DEVICE
SS_INVALID_SRB
SS_FAILED_INIT
SS_ASPI_IS_BUSY
SS_BUFFER_TOO_BIG
SS_BUFFER_ALIGN
SS_SECURITY_VIOLATION
SS_ABORTED
SS_ABORT_FAIL
SS_NO_ASPI
SS_ILLEGAL_MODE
SS_MISMATCHED_COMPONENTS
SS_NO_ADAPTERS
SS_INSUFFICIENT RESOURCESHost Adapter Status (SRB_HaStat)
HASTAT_OK
HASTAT_SEL_TO
HASTAT_DO_DU
HASTAT_BUS_FREE
HASTAT_PHASE_ERR
HASTAT_TIMEOUT
HASTAT_COMMAND_TIMEOUT
HASTAT_MESSAGE_REJECT
HASTAT_BUS_RESET
HASTAT_PARITY_ERROR
HASTAT_REQUEST_SENSE_FAILEDTarget Device Status (SRB_TargStat)
Additional ASPI for Win32 Functions
Working with SCRIPTS
An Overview of SCRIPTS
SCRIPTS Instructions
Logical Operators and Conditional TestsEmbedding SCRIPTS in C Code
Changing Run-Time Parameters
Patching
Table Indirect AddressingDetecting SCRIPTS Program Completion
Polling for Completion
Hardware Interrupt on CompletionInitialization and Housekeeping
PCI BIOS Functions
Initializing SCSI Control RegistersSample Code
Generic SCRIPTS Code
Hardware
Handling SCSI Phases
Target-mode API
Adapter Inquiry (TSPI_CMD_AdapterInfo)
Attach LUN (TSPI_CMD_AttachLUN)
Detach LUN (TSPI_CMD_DetachLUN)
Get Event (TSPI_CMD_GetEvent)
Read Data From Host (TSPI_CMD_ ReadFromHost)
Write Data To Host (TSPI_CMD_ WriteToHost)
Complete Command (TSPI_CMD_CompleteCommand)
Send Message To Host (TSPI_CMD_SendMessage)
Get Message From Host (TSPI_CMD_GetMessage)
Disconnect (TSPI_CMD_Disconnect)
Reconnect (TSPI_CMD_Reconnect)Connecting to the TSPI Manager
Using the TSPI Interface
ASPI for Windows 3.x
ASPI for Win32 (Windows 95 and NT)
The Windows 95 and NT SCSI Model
Windows NT SCSI Pass-Through Interface
IOCTL_SCSI_GET_INQUIRY_DATA
IOCTL_SCSI_GET_CAPABILITIES
IOCTL_SCSI_GET_ADDRESS
IOCTL_SCSI_RESCAN_BUS
IOCTL_SCSI_PASS_THROUGH and IOCTL_SCSI_PASS_THROUGH_DIRECT
A Brief Description of UNIX Device Drivers
Comparison of UNIX Implementations
The Linux SCSI Disk Driver
The Linux SCSI Pass-through Driver
Example SCSI Pass-through Application Program
Summary
Acknowledgements
Start With a Clean Hardware Layer
SCSI Bus Termination
SCSI Termination PowerBe Cautious With Cables
Don't Take Documentation at Face Value
Watch Out for Platform Dependencies
SCSI Byte Order
ASPI Byte Order
Structure Alignment
Buffer AlignmentDebugging Tools
Interactive Command Utilities
Virtual Devices
SCSI Bus AnalyzersKeep a Record
An Overview of the SCSI Snooper
The ASPI Class Library
The ScsiInterface Class
The ScsiDevice Class
The ScsiCmdBlock Class
Initializing the ScsiInterface Class
Executing a ScsiCmdBlock
Using the ASPI Class Library
Deriving SCSI Device Types
The SCSI Snooper Application Framework
SCSI Snooper Application Structure
General Terms
SCSI-2 Definitions
SCSI-2 Protocols
SCSI-3 Definitions
SCSI-3 Architecture
SCSI-3 Command Sets
SCSI-3 ProtocolsSCSI Software Interfaces
Books
Magazines and Journals
Online Information
Web Sites
Usenet Newsgroups
FTP Sites
Bulletin Board SystemsManufacturer Contacts
Sample Code
SCRIPTS Sample Code
SCSI Snooper Application
TSPI Target-mode SCSI Programming InterfaceSCSI Specifications
SCSI Frequently Asked Questions
Symbios SCRIPTS Support
Linux SCSI Documentation
Last Updated: October 23, 2002