Index
Prev
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