Index

#define FLAGS
dsreq Structure

ABI
open – Gain Access to a Device

About This Guide
About This Guide

address mapping
Virtual to Physical Memory Mapping

addresses for VME devices
Determining VME Device Addresses
Determining GIO Device Addresses

brk
symmon's dbgmon Mode Commands
brk Command

andh_rmw
VME-bus Read-Modify-Write Cycle

asc
Introduction

asq
Introduction

Audience
Audience

autoconfig
edt Type Structure
Distribution of VME Interrupts on Multiprocessors

b_bcount
strategy – Perform Block I/O

b_biodone
strategy – Perform Block I/O

b_blkno
strategy – Perform Block I/O

b_dev
strategy – Perform Block I/O

b_flags
strategy – Perform Block I/O

b_resid
strategy – Perform Block I/O
strategy – Perform Block I/O

b_un.b_addr
strategy – Perform Block I/O

big-endian byte ordering
Byte Swapping

biodone
strategy – Perform Block I/O
Shared Data between Upper-half and Interrupt Routines

bioerror
strategy – Perform Block I/O

biowait
Shared Data between Upper-half and Interrupt Routines
strategy – Perform Block I/O

block versus character devices
Hardware Devices

bold
Notation and Syntax Conventions

boot file
Including a Device Driver in the Kernel

brackets
Notation and Syntax Conventions

bt
bt Command
symmon's dbgmon Mode Commands

buf type structures
used by physiock
strategy – Perform Block I/O

bus request levels
VME-bus Adapter Requests

bus virtual addresses
Using DMA Maps

bus-watching caches
Data Cache Write Back and Invalidation

byte ordering
Byte Swapping

c command
c Command

cache
bus-watching
Data Cache Write Back and Invalidation
data cache invalidation
Data Cache Write Back and Invalidation
integrated page (kernel buffer cache)
Hardware Devices
write back
Data Cache Write Back and Invalidation
write through
Data Cache Write Back and Invalidation

cache miss
Data Cache Write Back and Invalidation

caches
write back vs. write through
DMA Operations

call command
call Command

cdevsw
Driver Entry Points
Driver Entry Points

character device switch table
Driver Entry Points

character versus block devices
Hardware Devices

class type
Hardware Devices

close
close – Relinquish Access to a Device

close entry point
close – Relinquish Access to a Device

close vs. dsclose
Using the dslib Routines

cmdbuf
fillg0cmd – Set Up the dsreq Structure
macro
dsreq Structure

CMDLEN
macro
dsreq Structure

cmdnametab
vtostr – Return a Pointer to a String Describing Table Entry

CMDSENT
macro
dsreq Structure

cmdstatustab
vtostr – Return a Pointer to a String Describing Table Entry

coherent I/O
Data Cache Write Back and Invalidation

commands
from kernel-level driver
scsi_command – Executing a SCSI Command

courier
Notation and Syntax Conventions

courier bold
Notation and Syntax Conventions

cpsema
cpsema

cvsema
cvsema

data cache invalidation
Data Cache Write Back and Invalidation

DATABUF
macro
dsreq Structure

DATALEN
macro
dsreq Structure

DATASENT
macro
dsreq Structure

DDI/DKI
Module Entry Points

debugger
mode commands
symmon's dbgmon Mode Commands

define flags
dsreq Structure

device driver
kernel-level
Kernel-level SCSI Device Driver
VME device
Kernel-level VME Device Driver
user level
User-level SCSI-bus Device Driver
user-level special files
Creating Device-special Files for User-level SCSI Drivers

device numbers
Major and Minor Device Numbers

device special file
creating
Creating Device-special Files

device-special file
Device-special File
creating
Device-special File Example

devscsi
SCSI Controller Error Messages

direct memory access (DMA)
Writing a VME Device Driver

dis command
dis Command

disable_sysad_parity
Memory Parity Workarounds

dki_dcache_inval
Data Cache Write Back and Invalidation
Data Cache Write Back and Invalidation

dki_dcache_inval(K)
DMA on A24 Devices with No DMA Mapping
DMA on A24 Devices with No DMA Mapping

dki_dcache_wb
Data Cache Write Back and Invalidation
Data Cache Write Back and Invalidation

dki_dcache_wbinval(K)
DMA on A24 Devices with No DMA Mapping
DMA Operations

dksc
SCSI Controller Error Messages

DMA (direct memory access)
Writing a VME Device Driver

DMA for A24 devices
code example
DMA on A24 Devices with No DMA Mapping

DMA mapping
DMA Mapping for High-end Systems and Older Systems

DMA maps
code example
Example Using DMA Maps

DMA on A32 devices
no scatter-gather
code example
DMA on A32 Devices with No Scatter/Gather Capability
DMA on GIO Devices Without Scatter/Gather Capability

DMA operations
DMA Operations
Data Cache Write Back and Invalidation
A32 devices
A32 Addressing Scatter/Gather Support

DMA read
DMA Operations
DMA Operations
Data Cache Write Back and Invalidation

DMA writes
DMA Operations
Data Cache Write Back and Invalidation
DMA Operations

dma_allocbuf
User-level DMA Library (udmalib)

dma_close
User-level DMA Library (udmalib)

dma_freebuf
User-level DMA Library (udmalib)

dma_freeparms
User-level DMA Library (udmalib)

dma_mkparms
User-level DMA Library (udmalib)

dma_open
User-level DMA Library (udmalib)

dma_start
User-level DMA Library (udmalib)

document contents summary
Document Overview

dofl
senddiagnostic1d – Issue a Send Diagnostic Command

doscsireq
requestsense03 – Issue a Request Sense Command
Sending Commands to a SCSI Device
doscsireq – Send a Command to the SCSI Device
dsreq Structure

driver entry points
Driver Entry Points

driver models
Choosing a Driver Model
Choosing a Driver Model
Choosing a Driver Model

driver routines
poll
poll – Poll Entry Point for a Non-STREAMS Character Driver

drv
prefix
Writing a SCSI init()

drvdevflag
devflag – driver flags
devflag – driver flags
devflag – driver flags

drvedtinit
edtinit and init – Initialize a Device

drvinit
edtinit and init – Initialize a Device
Writing a SCSI init()
Writing a SCSI init()
Writing a SCSI init()
Writing a SCSI init()
Writing a SCSI init()

drvintr
read or write – Read/Write Data from/to a Device
DMA Operations

drvmap
mmap – Mapping the Device
drvmmap – Mapping the Device
Writing Kernel-level General
Memory-mapping Device Drivers
map or unmap – Check Virtual Mapping for a Memory-mapped Device
Character and Block Entry Point Driver Routines

drvmmap
mmap – Mapping the Device
drvmmap – Mapping the Device

drvopen
open – Gain Access to a Device

drvread
read or write – Read/Write Data from/to a Device
Writing Kernel-level General
Memory-mapping Device Drivers
Character and Block Entry Point Driver Routines

drvstrategy
GIO Devices with Hardware-supported Scatter/Gather Capability
strategy – Perform Block I/O
strategy – Perform Block I/O

drvstrategy
read or write – Read/Write Data from/to a Device

drvunmap
Writing Kernel-level General
Memory-mapping Device Drivers
map or unmap – Check Virtual Mapping for a Memory-mapped Device
Character and Block Entry Point Driver Routines

drvwrite
Character and Block Entry Point Driver Routines
Writing Kernel-level General
Memory-mapping Device Drivers
read or write – Read/Write Data from/to a Device

ds_cmdbuf
dsreq Structure

ds_cmdlen
dsreq Structure

ds_cmdsent
dsreq Structure

ds_databuf
dsreq Structure

ds_datalen
dsreq Structure

ds_datasent
dsreq Structure

ds_flags
dsreq Structure
dsreq Structure

ds_iovbuf
dsreq Structure

ds_iovlen
dsreq Structure

ds_link
dsreq Structure

ds_msg
dsreq Structure

ds_private
dsreq Structure

ds_ret
dsreq Structure

ds_revcode
dsreq Structure

ds_sensebuf
dsreq Structure

ds_senselen
dsreq Structure

ds_sensesent
dsreq Structure

ds_status
dsreq Structure

ds_time
dsreq Structure

dsclose
dsclose – Free the dsreq Structure and Close the Device
Using the dslib Routines

dsdebug
vtostr – Return a Pointer to a String Describing Table Entry

dsiovec
dsreq Structure

dslib
Using the dslib Routines
User-level SCSI Device Drivers

dsopen
modesense1a – Send a Group 0 “Mode Sense” Command
fillg1cmd – Send a Group 1 SCSI Command
testunitready00 – Issue a Test Unit Ready Command to a SCSI Device
dsopen – Allocate a dsreq Type Structure and Open a Device
write0a – Issue a Group 0 Write Command
vtostr – Return a Pointer to a String Describing Table Entry
writeextended2a – Issue a Write Extended Command
Using the dslib Routines
readcapacity25 – Issue a Read Capacity Command
Opening a SCSI Device
dsopen – Allocate a dsreq Type Structure and Open a Device
filldsreq – set Members of a dsreq Type Structure
dsclose – Free the dsreq Structure and Close the Device
readextended28 – Issue a Read Extended Command
inquiry12 – Issue an Inquiry Command
requestsense03 – Issue a Request Sense Command
fillg0cmd – Set Up the dsreq Structure
doscsireq – Send a Command to the SCSI Device
senddiagnostic1d – Issue a Send Diagnostic Command

dsreq
Opening a SCSI Device

dsreq structure
listing
dsreq Structure
members of
dsreq Structure

dsreq type structures
dsreq – User-level Driver Communication Structure
dsreq – User-level Driver Communication Structure
dsreq – User-level Driver Communication Structure

dsreq.h
dsreq Structure

DSRQ_ABORT
dsreq Structure

DSRQ_ACKH
dsreq Structure

DSRQ_ASYNC
dsreq Structure

DSRQ_ATNH
dsreq Structure

DSRQ_BUF
dsreq Structure

DSRQ_CALL
dsreq Structure

DSRQ_CTRL1
dsreq Structure

DSRQ_CTRL2
dsreq Structure

DSRQ_DISC
dsreq Structure

DSRQ_IOV
dsreq Structure

DSRQ_MIXRDWR
dsreq Structure

DSRQ_PRINT
dsreq Structure

DSRQ_READ
dsreq Structure

DSRQ_SELATN
dsreq Structure

DSRQ_SELMSG
dsreq Structure

DSRQ_SENSE
dsreq Structure
requestsense03 – Issue a Request Sense Command
dsreq Structure
dsreq Structure

DSRQ_SYNXFR
dsreq Structure

DSRQ_TARGET
dsreq Structure

DSRQ_TRACE
dsreq Structure

DSRQ_WRITE
dsreq Structure

dsrqnametab
vtostr – Return a Pointer to a String Describing Table Entry

DSRT_AGAIN
dsreq Structure

DSRT_CANCEL
dsreq Structure

DSRT_CMDO
dsreq Structure

DSRT_DEVSCSI
dsreq Structure

DSRT_EBSY
dsreq Structure

DSRT_HOST
dsreq Structure

DSRT_LONG
dsreq Structure

DSRT_MEMORY
dsreq Structure

DSRT_MULT
dsreq Structure

DSRT_NOSEL
dsreq Structure

DSRT_NOSENSE
dsreq Structure

DSRT_OK
dsreq Structure

DSRT_PARITY
dsreq Structure

DSRT_PROTO
dsreq Structure

DSRT_REJECT
dsreq Structure

DSRT_REVCODE
dsreq Structure

DSRT_SENSE
dsreq Structure

DSRT_SHORT
dsreq Structure

DSRT_STAI
dsreq Structure

DSRT_TIMEOUT
dsreq Structure

DSRT_UNIMPL
dsreq Structure

dsrtnametab
vtostr – Return a Pointer to a String Describing Table Entry

dump command
dump Command

dynamically loadable modules
Master File Configuration
Kernel-level Dynamically Loadable Modules (DLMs)

edtinit
Writing edtinit()

entry points
close
close – Relinquish Access to a Device
Character and Block Entry Point Driver Routines
ioctl
ioctl – Control a Character Device
map
Character and Block Entry Point Driver Routines
map or unmap – Check Virtual Mapping for a Memory-mapped Device
missing
Missing Driver Entry Points
open
open – Gain Access to a Device
Character and Block Entry Point Driver Routines
poll
poll – Poll Entry Point for a Non-STREAMS Character Driver
put
put – Coordinate Message Passing Between Queues in a Stream
read
Character and Block Entry Point Driver Routines
read or write – Read/Write Data from/to a Device
write
Character and Block Entry Point Driver Routines
Character and Block Entry Point Driver Routines
read or write – Read/Write Data from/to a Device
Character and Block Entry Point Driver Routines

exprobe_space
VECTOR Directive

filldsreq
filldsreq – set Members of a dsreq Type Structure

fillg0cmd
fillg0cmd – Set Up the dsreq Structure
Sending Commands to a SCSI Device

flushbus(K)
Flushing the Write Buffer

FREAD bits
open – Gain Access to a Device
close – Relinquish Access to a Device

freesema
freesema

FWRITE bits
close – Relinquish Access to a Device
open – Gain Access to a Device

g command
g Command

general memory mapping
edtinit and init – Initialize a Device

geterror
strategy – Perform Block I/O

GIO device
slot number
Determining GIO Device Addresses

goto command
goto Command

hinv
Writing User-level VME Device Drivers

hx command
hx Command

idbg
Making an ASCII Terminal the Console

IF_ENQUEUE macro
IF_ENQUEUE(ifq, m)

ifnet drivers
ifnet Drivers

IFNET_LOCK macro
IFNET_LOCK(ifp, s)

IFNET_LOCKNOSPL macro
IFNET_LOCKNOSPL(ifp)

IFNET_UNLOCK macro
IFNET_UNLOCK(ifp,s)

IFNET_UNLOCKNOSPL macro
IFNET_UNLOCKNOSPL(ifp)

IFQ_LOCK/UNLOCK macro
IFQ_LOCK/UNLOCK(ifq)

illg1cmd
fillg1cmd – Send a Group 1 SCSI Command

INCLUDE directive
edtinit and init – Initialize a Device
Configuring a Kernel-level SCSI Driver
Configuring a Kernel-level SCSI Driver

including driver in kernel
Including a Device Driver in the Kernel

init
edtinit and init – Initialize a Device
Writing a SCSI init()

inquiry12
inquiry12 – Issue an Inquiry Command

integrated page cache
Hardware Devices

interrupt masking
MIPS RISC Processors Interrupt Masking

interrupt priority level
MIPS RISC Processors Interrupt Masking

interrupts
sprayed
Distribution of VME Interrupts on Multiprocessors

intr
intr – Process a Device Interrupt

invalidating the data cache
Data Cache Write Back and Invalidation

io_btoc macro
Macros

io_btoct macro
Macros

io_ctob macro
Macros

IO_NBPP
Constants

io_numpages macro
Macros

io_pnum macro
Macros

IO_PNUMSHFT
Constants

io_poff macro
Macros

IO_POFFMASK
Constants

ioctl
Protecting Shared Data Among Upper-half Routines
ifnet Device Driver Example

ioctl entry point
Character and Block Entry Point Driver Routines
ioctl – Control a Character Device
ioctl – Control a Character Device

iodone
read or write – Read/Write Data from/to a Device
buf type structures
strategy – Perform Block I/O

iov_base
dsreq Structure

iov_len
dsreq Structure

IOVBUF
macro
dsreq Structure

IOVLEN
macro
dsreq Structure

irix.sm file
Distribution of VME Interrupts on Multiprocessors

IRQ
Initialization
EISA-Bus Interrupts

italics
Notation and Syntax Conventions

Jaguar (VME-SCSI) board
SCSI-bus Interface Overview

kern_free
Sharing Kernel Memory with a User Program

kern_malloc
Sharing Kernel Memory with a User Program
Sharing Kernel Memory with a User Program

kernel buffer cache
Hardware Devices

kernel mode
Privilege States/Modes
virtual addressing
Kernel Mode Virtual Addressing

kernel module
loadable
Using a Dynamically Loadable Kernel Module

kernel modules
dynamically loadable
Master File Configuration

kernel-level device driver
Kernel-level SCSI Device Driver
VME device
general memory mapping type
Kernel-level General Memory-mapping Device Driver

kmem_alloc
DMA Operations
Using the SCSI Access Routines

kmem_alloc(K)
Data Cache Write Back and Invalidation
DMA Operations

kp
Using symmon's Kernel Print Command
buf
kp buf [index/address] – View a buf Structure
eframe
kp eframe address
inode
kp inode number/address – View an inode Structure
kill
kp kill addr
mlist
kp mlist
msyms
kp msyms id
pb
kp pb — Dump Console Print Buffer
pda
kp pda [index] – View a pda Structure
plist
kp plist [#] – List Process Summaries
proc
kp proc index/address – View a proc Structure
qbuf
kp qbuf device
runq
kp runq – View the runq Structure
sema
kp sema address – View a Semaphore Structure
slpproc
kp slpproc – View Summary of Sleeping Processes
ubt
kp ubt [index] – View Subroutine Backtrace Summary
user
kp user [index] – View a User Structure
wd
kp wd – View SCSI Information

kp (kernel print) mode
Using symmon Commands

kp commands
kp buf [index/address] – View a buf Structure

kseg0
Kernel Mode Virtual Addressing

kseg1
Kernel Mode Virtual Addressing

kseg2
Kernel Mode Virtual Addressing

kuseg
user space
Kernel Mode Virtual Addressing

kvtophys
Creating a System File

lba
readcapacity25 – Issue a Read Capacity Command

lboot
Preliminary Considerations
Distribution of VME Interrupts on Multiprocessors
Configuring a Kernel-level SCSI Driver
Including a Device Driver in the Kernel

little-endian byte ordering
Byte Swapping

lkaddr command
lkaddr Command

lkup command
lkup Command

loadable drivers
Module Entry Points
vme_ivec routines
vme_intrs Structure

loadable library modules
Library Modules

loadable module
Master File Configuration

loadable modules
Migration Overview
Module Entry Points
Debugging Loadable Kernel Modules
Kernel-level Dynamically Loadable Modules (DLMs)
compiling/linking
Module Configuration
registered by lboot
Auto Registration
unload routine
unload – Clean Up a Loadable Kernel Module

LOCK
LOCK

LOCK(D3)
Shared Data between Upper-half and Interrupt Routines
Reliable Multiprocessor Spinlocks

LOCK_ALLOC
LOCK_ALLOC

LOCK_ALLOC(D3)
Reliable Multiprocessor Spinlocks

LOCK_DEALLOC
LOCK_DEALLOC

logical units
SCSI Device Interface Overview

look-aside buffer
Understanding Driver Address Space
Kernel Mode Virtual Addressing

macros
BP_ISMAPPED
GIO Devices with Hardware-supported Scatter/Gather Capability
DMA on GIO Devices Without Scatter/Gather Capability
CMDBUF
dsreq Structure
CMDLEN
dsreq Structure
CMDSENT
dsreq Structure
DATABUF
dsreq Structure
DATALEN
dsreq Structure
DATASENT
dsreq Structure
dsreq type structure
dsreq – User-level Driver Communication Structure
FLAGS
dsreq Structure
getfd
doscsireq – Send a Command to the SCSI Device
IF_ENQUEUE
IF_ENQUEUE(ifq, m)
IFNET_LOCK
IFNET_LOCK(ifp, s)
IFNET_LOCKNOSPL
IFNET_LOCKNOSPL(ifp)
IFNET_UNLOCK
IFNET_UNLOCK(ifp,s)
IFNET_UNLOCKNOSPL
IFNET_UNLOCKNOSPL(ifp)
IFQ_LOCK/UNLOCK
IFQ_LOCK/UNLOCK(ifq)
io_btoc
Macros
io_btoct
Macros
io_ctob
Macros
io_numpages
Macros
io_pnum
Macros
io_poff
Macros
IOVBUF
dsreq Structure
IOVLEN
dsreq Structure
location
Returning Opaque Handle Data
major and minor
mmap – Mapping the Device
drvmmap – Mapping the Device
PRIVATE
dsreq Structure
RET
dsreq Structure
SENSEBUF
dsreq Structure
SENSELEN
dsreq Structure
SENSESENT
dsreq Structure
STATUS
dsreq Structure
TIME
dsreq Structure
v_gethandle
Returning Opaque Handle Data
VME devices
VME-bus Address Space

major and minor macros
mmap – Mapping the Device
drvmmap – Mapping the Device

major device number
Major and Minor Device Numbers

map entry point
map or unmap – Check Virtual Mapping for a Memory-mapped Device

margin comments
EISA-Bus Address Space

masking
interrupt
MIPS RISC Processors Interrupt Masking

master addressing mode
Determining VME Device Addresses
Determining VME Device Addresses

master file
Including a Device Driver in the Kernel
example for VME driver
Including VME Device Drivers in the Kernel
The GBD Example
for a SCSI driver
Configuring a Kernel-level SCSI Driver

master processor
symmon and Multiprocessor Debugging

MAXDMASZ
strategy – Perform Block I/O

memory access
direct
Programmed I/O (PIO)
Programmed I/O (PIO)

memory mapping
virtual-to-physical
Virtual to Physical Memory Mapping

Memory Parity Patch
Memory Parity Workarounds

minor device number
Major and Minor Device Numbers

missing entry points
Missing Driver Entry Points

mknod
Creating Device-special Files for User-level SCSI Drivers
Creating Device-special Files
Creating Device-special Files for User-level SCSI Drivers

mlist command
Debugging Loadable Kernel Modules

mmap
mmap – Mapping the Device
drvmmap – Mapping the Device
Character and Block Entry Point Driver Routines
Using mmap

mode
VME master addressing
Determining VME Device Addresses
Determining VME Device Addresses
VME slave addressing
Writing User-level VME Device Drivers
Determining VME Device Addresses

modeselect15
modeselect15 – Issue a Group 0 “Mode Select” Command

modesense1a
modesense1a – Send a Group 0 “Mode Sense” Command

modules
dynamically loadable
Kernel-level Dynamically Loadable Modules (DLMs)
Master File Configuration

mtune file
Including a Device Driver in the Kernel

multiprocessing
synchronization
Shared Data between Upper-half and Interrupt Routines

munmap
munmap – Unmapping the Device

nm command
nm Command

notation and syntax conventions
Notation and Syntax Conventions

nulldev
Missing Driver Entry Points

offset
map or unmap – Check Virtual Mapping for a Memory-mapped Device

oflags
dsopen – Allocate a dsreq Type Structure and Open a Device

opath
dsopen – Allocate a dsreq Type Structure and Open a Device

open
Character and Block Entry Point Driver Routines
open – Gain Access to a Device

open entry point
open – Gain Access to a Device

open vs. dsopen
Using the dslib Routines

orw_rmw
VME-bus Read-Modify-Write Cycle

OTYP_CHR
open – Gain Access to a Device
close – Relinquish Access to a Device

OTYP_LYR
close – Relinquish Access to a Device
open – Gain Access to a Device

overview of chapters and appendices
Document Overview

p command
p Command

page boundary
protection
Using mmap

parity checking
Memory Parity Workarounds

pb (dump console print buffer)
kp pb — Dump Console Print Buffer

pgcode
modesense1a – Send a Group 0 “Mode Sense” Command

pgctrl
modesense1a – Send a Group 0 “Mode Sense” Command

physio
read or write – Read/Write Data from/to a Device
Data Cache Write Back and Invalidation
GIO Devices with Hardware-supported Scatter/Gather Capability
Using the SCSI Access Routines

physiock
strategy – Perform Block I/O

PIO
Programmed I/O (PIO)
Programmed I/O (PIO)

pio_andh_rmw
VME-bus Read-Modify-Write Cycle

pio_orw_rmw
VME-bus Read-Modify-Write Cycle

pmi
readcapacity25 – Issue a Read Capacity Command

poll driver routine
poll – Poll Entry Point for a Non-STREAMS Character Driver
Character and Block Entry Point Driver Routines

processor
kernel mode
Privilege States/Modes
privilege states/modes
Privilege States/Modes
supervisor mode (R4000)
Privilege States/Modes
user mode
Privilege States/Modes
virtual memory map
Kernel Mode Virtual Addressing

programmed I/O
Programmed I/O (PIO)
Programmed I/O (PIO)

prot
map or unmap – Check Virtual Mapping for a Memory-mapped Device

protection at page boundary
Using mmap

psema
psema
Shared Data between Upper-half and Interrupt Routines
Protecting Shared Data Among Upper-half Routines

put
put – Coordinate Message Passing Between Queues in a Stream

race condition
Programmed I/O (PIO)

read
read or write – Read/Write Data from/to a Device
Character and Block Entry Point Driver Routines
DMA
Data Cache Write Back and Invalidation
DMA Operations

read entry point
read or write – Read/Write Data from/to a Device

readcapacity25
readcapacity25 – Issue a Read Capacity Command

readextended28
readextended28 – Issue a Read Extended Command

real-time processes
Including GIO Device Drivers in the Kernel

requestsense03
requestsense03 – Issue a Request Sense Command

RET
macro
dsreq Structure

s and S commands
s [count] and S [count]

SC_ALIGN
scsi_command – Executing a SCSI Command

SC_ATTN
scsi_command – Executing a SCSI Command

SC_CMDTIME
scsi_command – Executing a SCSI Command

SC_GOOD
scsi_command – Executing a SCSI Command

SC_HARDERR
scsi_command – Executing a SCSI Command

SC_MEMERR
scsi_command – Executing a SCSI Command

SC_PARITY
scsi_command – Executing a SCSI Command

SC_REQUEST
scsi_command – Executing a SCSI Command

SC_TIMEOUT
scsi_command – Executing a SCSI Command

scatter-gather
A32 devices
A32 Addressing Scatter/Gather Support
addressing without
A32 Addressing with No Scatter/Gather

scatter/gather
A32 Addressing Scatter/Gather Support
and VME devices
VME Devices with Scatter/Gather Capability
GIO Devices with Hardware-supported Scatter/Gather Capability

schednetisr
Input Queueing Example

SCSI device driver
User-level SCSI-bus Device Driver

SCSI interface
SCSI-bus Interface Overview
SCSI-bus Interface

scsi_alloc
Using the SCSI Access Routines

scsi_driver_table
Determining Driver Number

scsi_free
scsi_free – Freeing the Connection

scsi_info
Using the SCSI Access Routines

scsisubchan
Sending Commands to a SCSI Device

sdk
Configuring a Kernel-level SCSI Driver

sdkinit
Writing a SCSI init()

select
Character and Block Entry Point Driver Routines
poll – Poll Entry Point for a Non-STREAMS Character Driver

semap
semap

semaphored device driver
Preliminary Considerations

senddiagnostic1d
senddiagnostic1d – Issue a Send Diagnostic Command

SENSELEN
macro
dsreq Structure

SENSESENT
macro
dsreq Structure

setgioconfig
GIO-specific Functions

setgiovector
Creating a System File
GIO-specific Functions

slave addressing mode
Writing User-level VME Device Drivers
Determining VME Device Addresses

slave devices
Writing User-level VME Device Drivers

sleep command
sleep Command

sleep kernel routine
Programmed I/O (PIO)
Programmed I/O (PIO)

sleep/wakeup routines
Shared Data between Upper-half and Interrupt Routines

SLEEP_LOCK
SLEEP_LOCK

SLEEP_LOCK_SIG
SLEEP_LOCK_SIG

SLEEP_TRYLOCK
SLEEP_TRYLOCK

SLEEP_UNLOCK
SLEEP_UNLOCK

special file
device
Creating Device-special Files for User-level SCSI Drivers

specifications, connector
EISA
EISA-bus Interface Overview
EISA-bus Interface

spinlocks
Reliable Multiprocessor Spinlocks

spl(D3)
Shared Data between Upper-half and Interrupt Routines
Programmed I/O (PIO)
Shared Data between Upper-half and Interrupt Routines

splgio
GIO-specific Functions

splgio1
Programmed I/O (PIO)

splN
Shared Data between Upper-half and Interrupt Routines

splockmeter
LOCK_ALLOC

splvme
Programmed I/O (PIO)
Shared Data between Upper-half and Interrupt Routines

splx
Programmed I/O (PIO)
Shared Data between Upper-half and Interrupt Routines

sprayed interrupts
Distribution of VME Interrupts on Multiprocessors

ST_BUSY
scsi_command – Executing a SCSI Command

ST_CHECK
scsi_command – Executing a SCSI Command

ST_COND_MET
scsi_command – Executing a SCSI Command

ST_GOOD
scsi_command – Executing a SCSI Command

ST_INT_GOOD
scsi_command – Executing a SCSI Command

ST_RES_CONF
scsi_command – Executing a SCSI Command

STA_*
defines for ds_status
dsreq Structure

STA_BUSY
dsreq Structure

STA_CHECK
dsreq Structure

STA_GOOD
dsreq Structure

STA_IGOOD
dsreq Structure

STA_RESERV
dsreq Structure

stale data
Data Cache Write Back and Invalidation

stale memory
Data Cache Write Back and Invalidation

STATUS
macro
dsreq Structure

strategy
strategy – Perform Block I/O

STREAMS entry points
put
put – Coordinate Message Passing Between Queues in a Stream

STREAMS monitor
Multiprocessing STREAMS Drivers

streams_interrupt
Multiprocessing STREAMS Drivers

string command
string Command

synchronization issues
multiprocessing
Shared Data between Upper-half and Interrupt Routines

syntax conventin
bold
Notation and Syntax Conventions

syntax convention
courier
Notation and Syntax Conventions
courier bold
Notation and Syntax Conventions
italics
Notation and Syntax Conventions

sys/mman.h
Using mmap

SysAD bus
Memory Parity Workarounds

system file
Distribution of VME Interrupts on Multiprocessors
Including a Device Driver in the Kernel
Including VME Device Drivers in the Kernel
Creating a System File
/var/sysgen
Including a Device Driver in the Kernel

systune command
Example 1

targets
SCSI Device Interface Overview

testunitready00
testunitready00 – Issue a Test Unit Ready Command to a SCSI Device

TFP
Data Cache Write Back and Invalidation

TIME
macro
dsreq Structure
dsreq Structure

TLB (translation look-aside buffer)
Kernel Mode Virtual Addressing
Understanding Driver Address Space

tlbdump command
tlbdump Command

tlbflush command
tlbflush Command

tlbmap command
tlbmap Command

tlbpid command
tlbpid Command

tlbptov command
tlbptov Command

tlbvtop command
tlbvtop Command

tpisocket
IRIX Kernel Networking Design

tpitcp
IRIX Kernel Networking Design

tpiudp
IRIX Kernel Networking Design

tpsc
SCSI Controller Error Messages

translation look-aside buffer
Kernel Mode Virtual Addressing
Kernel Mode Virtual Addressing

TRYLOCK
TRYLOCK

u.u_count
read or write – Read/Write Data from/to a Device

udmalib
User-level DMA Library (udmalib)

unbrk command
unbrk Command

UNLOCK
UNLOCK

UNLOCK(D3)
Shared Data between Upper-half and Interrupt Routines

unmap entry point
map or unmap – Check Virtual Mapping for a Memory-mapped Device

uofl
senddiagnostic1d – Issue a Send Diagnostic Command

upper-half routine
Preliminary Considerations

user mode
Privilege States/Modes
virtual addressing
User Mode Virtual Addressing

userdma
Data Cache Write Back and Invalidation

userdma(K)
DMA on A24 Devices with No DMA Mapping

v_gethandle
Example Program

v_gethandle macro
Returning Opaque Handle Data

v_mapphys
Sharing Kernel Memory with a User Program

/var/sysgen/system file
Including VME Device Drivers in the Kernel
Distribution of VME Interrupts on Multiprocessors

variables
devflag
devflag – driver flags

vdk device
mythical
Example Program

vdkunmap
Example Program

VECTOR directive
edtinit and init – Initialize a Device
Including VME Device Drivers in the Kernel
Creating a System File

virtual addres mapping
Using DMA Maps

virtual address format
Virtual to Physical Memory Mapping

virtual addressing
kernel mode
Kernel Mode Virtual Addressing
user mode
User Mode Virtual Addressing

virtual memory
A32 Addressing Scatter/Gather Support

VME bus addresses
Determining VME Device Addresses

volatile declaration
Programmed I/O (PIO)

volatile memory
Kernel Mode Virtual Addressing

vsema
Shared Data between Upper-half and Interrupt Routines
Protecting Shared Data Among Upper-half Routines
vsema

vtostr
vtostr – Return a Pointer to a String Describing Table Entry

wake command
wake Command

wakeup kernel routine
Programmed I/O (PIO)
Programmed I/O (PIO)

wakeup routine
Shared Data between Upper-half and Interrupt Routines

wpt command
wpt Command

write
Character and Block Entry Point Driver Routines
read or write – Read/Write Data from/to a Device
DMA
Data Cache Write Back and Invalidation
DMA Operations

write back cache
DMA Operations
Data Cache Write Back and Invalidation

write entry point
read or write – Read/Write Data from/to a Device

write through
Data Cache Write Back and Invalidation

write through cache
DMA Operations
Data Cache Write Back and Invalidation

write0a
write0a – Issue a Group 0 Write Command
Sending Commands to a SCSI Device

writeextended2a
writeextended2a – Issue a Write Extended Command