Table of Contents


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."

Preface

Intended Audience

How This Book is Organized

What You Will Need

Acknowledgements

About the Authors

Introduction

Chapter 1 - An Overview of SCSI Technology

The SCSI Solution

SCSI-1

SCSI-1 Features

Intelligent Devices
Multitasking I/O
Synchronous Data Transfer
Multiple Device Types on a Single Interface

The Birth of SCSI-2

New Features in SCSI-2

Fast SCSI
Wide SCSI
Fast Wide SCSI
Queued I/O Processes
New Command Sets

Improved SCSI-1 Features

Data Parity Required
Message Support Required
Terminator Power Provided by Initiator

SCSI-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

Chapter 2 - SCSI Fundamentals

SCSI Transactions: an Overview

Chapter 3 - SCSI Phases

SCSI Phases

Bus Free
Arbitration
Selection
Reselection
Message Out
Command
Data In and Data Out
Status
Message In
Phase Sequence

Chapter 4 - SCSI Messages

Message Types

The Identify Message

Extended Messages

Synchronous Data Transfer Request
Wide Data Transfer Request

Other 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

Chapter 5 - SCSI Commands

Command Structure

Operation Codes
Logical Unit Number
Command Parameters
Control Field
Parameter Lists

Byte Order

Mandatory SCSI Commands

Test Unit Ready
Inquiry

Example: Iomega Zip Drive

Optional Commands

Device Type-Specific Commands

Mode Select
Mode Sense

Mode Sense Data Format
Example: Iomega Zip Drive

Reading and Writing

Read
Write

Other Commands

Chapter 6 - Status, Sense, and Errors

Status

Status Codes

Sense Data

Sense Key

Unit Attention

Additional Sense Codes

Example: Iomega Zip Drive

Chapter 7- ASPI: The Advanced SCSI Programming Interface

What is ASPI?

Why Should I Use ASPI?

ASPI Concepts

Adapter and Device Addressing
Issuing SCSI Commands
Building the SCSI Request Block

Sending an SRB to the ASPI Manager
Waiting for an SRB to Complete
Processing Returned Status Information

Adapter Specific Properties
Connecting to the ASPI Manager

ASPI 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 RESOURCES

Host 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_FAILED

Target Device Status (SRB_TargStat)

Additional ASPI for Win32 Functions

Chapter 8 - Low Level SCSI Programming with SCRIPTS

Working with SCRIPTS

An Overview of SCRIPTS

SCRIPTS Instructions
Logical Operators and Conditional Tests

Embedding SCRIPTS in C Code

Changing Run-Time Parameters

Patching
Table Indirect Addressing

Detecting SCRIPTS Program Completion

Polling for Completion
Hardware Interrupt on Completion

Initialization and Housekeeping

PCI BIOS Functions
Initializing SCSI Control Registers

Sample Code

Generic SCRIPTS Code

Chapter 9 - SCSI Target Mode Programming

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

Chapter 10 - SCSI Support Under Windows

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

Chapter 11 - Unix SCSI Implementations

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

Chapter 12 - Troubleshooting and Common Mistakes

Start With a Clean Hardware Layer

SCSI Bus Termination
SCSI Termination Power

Be Cautious With Cables

Don't Take Documentation at Face Value

Watch Out for Platform Dependencies

SCSI Byte Order
ASPI Byte Order
Structure Alignment
Buffer Alignment

Debugging Tools

Interactive Command Utilities
Virtual Devices
SCSI Bus Analyzers

Keep a Record

Chapter 13 - Sample Application: SCSI Snooper

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

Appendix A - Glossary of Acronyms

General Terms

SCSI-2 Definitions

SCSI-2 Protocols

SCSI-3 Definitions

SCSI-3 Architecture
SCSI-3 Command Sets
SCSI-3 Protocols

SCSI Software Interfaces

Appendix B - SCSI Resources

Books

Magazines and Journals

Online Information

Web Sites
Usenet Newsgroups
FTP Sites
Bulletin Board Systems

Manufacturer Contacts

Appendix C - Installing the Windows NT ASPI32 Service

Appendix D - Companion CD-ROM Contents

Sample Code

SCRIPTS Sample Code
SCSI Snooper Application
TSPI Target-mode SCSI Programming Interface

SCSI Specifications

SCSI Frequently Asked Questions

Symbios SCRIPTS Support

Linux SCSI Documentation


Last Updated: October 23, 2002