- 32-bit address space
- See address space, 32-bit
- Reader Comments
- 64-bit address format
- 64-Bit Address Format
- 64-bit address space
- See address space, 64-bit
- Reader Comments
- 64-bit mode
- Allowing for 64-Bit Mode
- 64-bit physical address format
- Physical Address
- address exception
- Address Exceptions
- address space
- 32-bit
- The 32-Bit Address Space
- embedding in 64-bit
- Compatibility of 32-Bit and 64-Bit Spaces
- kseg0
- Cached Physical Memory—kseg0
- Cached Physical Memory—kseg0
- kseg1
- Uncached Physical Memory—kseg1
- kseg2
- Kernel Virtual Space—kseg2
- kuseg
- User Process Space—kuseg
- segments of
- Segments of the 32-bit Address Space
- virtual mapping
- Virtual Address Mapping
- 64-bit
- The 64-Bit Address Space
- address format
- 64-Bit Address Format
- cache-controlled
- Cache-Controlled Physical Memory—xkphys
- physical address format
- Physical Address
- segments of
- Segments of the 64-Bit Address Space
- sign extension
- Compatibility of 32-Bit and 64-Bit Spaces
- virtual mapping
- Virtual Address Mapping
- xkseg
- Kernel Virtual Space—xkseg
- xksseg
- Supervisor Mode Space—xksseg
- xkuseg
- User Process Space—xkuseg
- bus virtual
- PIO Addresses and DMA Addresses
- data transfer between
- Transferring Data
- kernel
- Kernel Virtual Space—kseg2
- Kernel Virtual Space—xkseg
- map to user
- Memory Use in User-Level Drivers
- physical
- Converting Virtual Addresses to Physical
- supervisor
- Supervisor Mode Space—xksseg
- user process
- User Process Space—kuseg
- User Process Space—xkuseg
- See also execution model
- Reader Comments
- addressing
- Physical and Virtual Memory
- address/length list
- Address/Length Lists
- Using Address/Length Lists
- cursor use
- Using Alenlist Cursors
- alternate console
- Specifying a Separate System Console
- ASSERT macro
- Using ASSERT
- audio not covered
- User-Level Access to SCSI Devices
- authorized binary interface (ABI)
- Handling 32-Bit and 64-Bit Execution Models
- bdevsw table
- Kernel Switch Tables
- block device
- Kinds of Kernel-Level Drivers
- combined with character
- Combined Block and Character Drivers
- Use of the Open Type
- versus character
- Block and Character Device Access
- buffer (buf_t)
- See data types, buf_t
- Reader Comments
- bus adapter
- translates addresses
- PIO Addresses and DMA Addresses
- bus virtual address
- PIO Addresses and DMA Addresses
- cache
- Cache Use and Cache Coherency
- The IO4 Problem
- 64-bit access
- Cache-Controlled Physical Memory—xkphys
- alignment of buffers
- DMA Buffer Alignment
- coherency
- Cache Coherency in Multiprocessors
- control functions
- Managing Memory for Cache Coherency
- device access always uncached
- CPU Access to Device Registers
- primary
- CPU Access to Memory
- secondary
- CPU Access to Memory
- cache algorithm
- Cache-Controlled Physical Memory—xkphys
- cdevsw table
- Kernel Switch Tables
- Challenge/Onyx
- directing interrupts
- Using the IPL Statement
- DMA engine in
- Operation of the DMA Engine
- Operation of the DMA Engine
- IO4 board
- VME Hardware Architecture
- Challenge DMA with Multiple IO4 Boards
- limit on VME DMA space
- Mapping DMA Addresses
- Mapping DMA Addresses
- no uncached memory
- Uncached Memory Access in SGI Origin 2000 and in Challenge and Onyx Series
- VME address windows
- Fixed PIO Maps
- Fixed PIO Maps
- VME bus address mapping in
- PIO Addressing in Challenge and Onyx Systems
- VME bus numbers
- VME Bus Numbering
- VME design constraints
- VME Hardware Features and Restrictions
- VME hardware
- VME Hardware in Challenge and Onyx Systems
- character device
- Kinds of Kernel-Level Drivers
- combined with block
- Combined Block and Character Drivers
- Use of the Open Type
- versus block
- Block and Character Device Access
- COFF file format not supported
- Compiling and Linking
- command
- See IRIX commands
- Reader Comments
- compiler options
- Compiler Options
- for loadable driver
- Compile Options for Loadable Drivers
- for network driver
- Compiler Flags for MP TCP/IP
- configuration files
- Configuration Files
- /dev/MAKEDEV
- Dynamic Definition of Device Special Files
- /etc/inittab
- Specifying a Separate System Console
- /etc/ioconfig.config
- Configuration Control File
- VME Bus Numbers Assigned by ioconfig
- /etc/ioperms
- Permissions Control File
- /etc/rc2.d
- The Script MAKEDEV
- /etc/rc2/S23autoconfig
- Registration
- /usr/cpu/sysgen/IPnnboot
- Placing the Object File in /var/sysgen/boot
- /usr/lib/X11/input/config
- X Display Manager Configuration
- /var/sysgen/boot
- Master Configuration Database
- Configuring a Nonloadable Driver
- How Names Are Used in Configuration
- /var/sysgen/irix.sm
- Directing VME Interrupts
- Defining VME Devices with the VECTOR Statement
- /var/sysgen/Makefile.kernio
- Using /var/sysgen/Makefile.kernio
- /var/sysgen/master.d
- Master Configuration Database
- Selecting a Major Number
- Configuring a Nonloadable Driver
- How Names Are Used in Configuration
- Describing the Driver in /var/sysgen/master.d
- dependencies
- Listing Dependencies
- example
- Example Driver Source Files
- format
- Descriptive Line
- Master File for Loadable Drivers
- stubs
- Stubs Section
- variables
- Variables Section
- /var/sysgen/master.d/mem
- Access Using mmap()
- /var/sysgen/mtune/*
- System Tuning Parameters
- /var/sysgen/system
- Kernel Configuration Files
- Configuring a Nonloadable Driver
- How Names Are Used in Configuration
- example
- Example Driver Source Files
- /var/sysgen/system/irix.sm
- Learning EISA Device Addresses
- for debugging
- Enabling Debugging in irix.sm
- /var/sysgen/system/irix.sm VME devices
- Configuring the System Files
- configuration flags
- Descriptive Line
- configuring a driver
- loadable
- Configuring a Loadable Driver
- nonloadable
- Configuring a Nonloadable Driver
- Controller number, assigned in hwgraph
- Using ioconfig for Global Controller Numbers
- CPU
- CPU Modules
- device access
- CPU Access to Device Registers
- IP26
- Uncached Memory Access in the IP26 and IP28
- memory access by
- CPU Access to Memory
- model number from inventory
- Testing the Inventory In Software
- processors in
- CPU Modules
- type numbers
- CPU Modules
- watchpoint registers
- Commands to Control Execution Flow
- D_MP flag
- Flag D_MP
- D_MT flag
- Flag D_MT
- D_OLD flag
- Flag D_OLD Not Supported
- Entry Point open()
- D_PCI_HOT_PLUG_ATTACH flag
- Flag D_PCI_HOT_PLUG_ATTACH
- D_PCI_HOT_PLUG_DETACH flag
- Flag D_PCI_HOT_PLUG_DETACH
- D_WBACK flag
- Flag D_WBACK
- Data Link Provider Interface (DLPI)
- Application Interfaces
- data transfer
- Transferring Data
- data types
- summary table
- Kernel Data Structures and Declarations
- alenlist_t
- Address/Length Lists
- Using Address/Length Lists
- buf_t
- Structure buf_t
- Entry Point strategy()
- BP_ISMAPPED
- Buffer Location and b_flags
- displaying
- Commands to Display buf_t Objects
- for syncronization
- Coordinating Through the buf_t
- functions
- Managing Buffer Virtual Addresses
- interrupt handling
- Completing Block I/O
- management
- Strategies of the strategy() Entry Point
- caddr_t
- Address Types
- cred_t
- Use of the cred_t Object
- User Process Administration
- dev_t
- Minor Device Number
- Use of the Device Handle
- Device Number Types
- same as vertex_hdl_t
- Vertex Handle and dev_t
- device_desc_t
- Preparing a device_desc_t
- Preparing a device_desc_t
- Preparing a device_desc_t
- struct dsconf
- Testing the Driver Configuration
- struct dsreq
- ds_flags
- Values for ds_flags
- ds_msg
- Return Codes and Status Values
- ds_ret
- Return Codes and Status Values
- ds_status
- Return Codes and Status Values
- edt_t
- Entry Point edtinit()
- graph_error_t
- Graph Error Numbers
- iopaddr_t
- Address Types
- iovec_t
- Data Location and the iovec_t
- lock_t
- Lock and Semaphore Types
- Basic Locks
- mrlock_t
- Lock and Semaphore Types
- Reader/Writer Locks
- mutex_t
- Lock and Semaphore Types
- Using Mutex Locks
- paddr_t
- Address Types
- struct pollhead
- Use and Operation of poll(2)
- proc_t (not available)
- Sending a Process Signal
- scsi_request
- Using scsi_command()
- struct scsi_target_info
- Using scsi_info()
- sema_t
- Lock and Semaphore Types
- sleep_t
- Using Sleep Locks
- struct dsreq
- The dsreq Structure
- sv_t
- Lock and Semaphore Types
- Using Synchronization Variables
- uio_t
- Structure uio_t
- Entry Points read() and write()
- Transferring Data Through a uio_t Object
- __userabi_t
- Handling 32-Bit and 64-Bit Execution Models
- vertex_hdl_t
- Vertex Handle Type
- vhandl_t
- Entry Point map()
- Managing Mapped Memory
- debugging kernel
- Preparing the System for Debugging
- device access
- CPU Access to Device Registers
- device number
- See major device number, minor device number
- Reader Comments
- device special file
- Device Special Files
- as normal file
- Devices as Files
- defining
- Static Definition of Device Special Files
- /dev/dsk
- IRIX Conventional Device Names
- /dev/ei
- External Interrupts in Challenge and Onyx Systems
- External Interrupts In Origin 2000 and Origin 200
- /dev/kmem
- Access Using a Device Model
- /dev/mem
- Access Using a Device Model
- Access Using mmap()
- /dev/mmem
- Access Using mmap()
- /dev/scsi/*
- Generic SCSI Device Special Files
- EISA mapping
- Opening a Device Special File
- /hw/external_interrupt
- External Interrupts In Origin 2000 and Origin 200
- multiple names for
- Multiple Device Names
- name format
- IRIX Conventional Device Names
- Form of Filenames in /dev/scsi
- PCI mapping
- PCI Device Special Files
- VME mapping
- Opening a Device Special File
- device special file/dev/kmem
- Access Using mmap()
- digital media not covered
- User-Level Access to SCSI Devices
- Direct Memory Access (DMA)
- Direct Memory Access
- Overview of Block I/O
- buffer alignment for
- DMA Buffer Alignment
- cache control
- Managing Memory for Cache Coherency
- The IO4 Problem
- DMA engine for VME bus
- Operation of the DMA Engine
- Operation of the DMA Engine
- EISA bus slave
- Programming Slave DMA
- EISA bus-master
- Programming Bus-Master DMA
- GIO bus
- Using DMA
- IO4 hardware problem
- The IO4 Problem
- mapping
- Creating and Using DMA Maps
- Using DMA Maps
- maximum size
- Maximum DMA Transfer Size
- setting up
- Setting Up a DMA Transfer
- user-level
- VME User-Level DMA
- user-level SCSI
- Data Transfer Options
- VME bus
- VME DMA Operations
- PIO Addressing and DMA Addressing
- VME DMA Operations
- PIO Addressing and DMA Addressing
- disk volume header
- Placing symmon in the Volume Header
- driver
- compiling
- Compiler Flags for MP TCP/IP
- configuring
- Configuring a Nonloadable Driver
- debugging
- Preparing the System for Debugging
- examples
- EISA
- Initialization Sketch
- GIO bus
- Example GIO Driver
- network
- Example ifnet Driver
- SCSI bus
- Creating Device Aliases
- VME
- Sample VME Device Driver
- Sample VME Device Driver
- flag constant
- Driver Flag Constant
- Public Global Variables
- Driver Flag Constant
- initialization
- Initialization Entry Points
- lower half
- Upper and Lower Halves
- Driver Lower Half
- prefix
- Driver Name Prefix
- How Names Are Used in Configuration
- in master.d
- Master Configuration Database
- process context
- User Process Administration
- types
- GIO bus
- GIO Device Drivers
- types of
- About This Guide
- User-Level Device Control
- block
- Kinds of Kernel-Level Drivers
- character
- Kinds of Kernel-Level Drivers
- EISA bus
- EISA Device Drivers
- kernel-level
- About This Guide
- Memory Use in Kernel-Level Drivers
- Kernel-Level Device Control
- layered
- Layered Drivers
- loadable
- Loadable Drivers
- network
- Network Device Drivers
- process-level
- About This Guide
- pseudo-device
- Overview of Memory Mapping
- SCSI bus
- Accessing a SCSI Device
- STREAMS
- About This Guide
- Kinds of Kernel-Level Drivers
- updating
- Updating Device Drivers from Previous Releases to IRIX 6.5
- upper half
- Upper and Lower Halves
- in multiprocessor
- Uniprocessor Assumptions
- Synchronizing Within Upper-Half Functions
- user-level
- Memory Use in User-Level Drivers
- User-Level Device Control
- See also entry points
- Reader Comments
- Reader Comments
- driver debugging
- alternate console
- Specifying a Separate System Console
- breakpoints
- Commands to Control Execution Flow
- circular buffer output
- Displaying to the Circular Message Buffer
- lock metering
- Including Lock Metering in the Kernel Image
- memory display
- Commands to Display Memory
- multiprocessor
- Using symmon in a Multiprocessor Workstation
- setsym use
- Generating a Debugging Kernel
- stopping during bootstrap
- Entering symmon at Boot Time
- symbol lookup
- Commands for Symbol Conversion and Lookup
- symbols
- Enabling Debugging in irix.sm
- symmon use
- Using symmon
- system log output
- Displaying to the System Log
- driver operations
- Typical Driver Operations
- DMA
- Overview of Block I/O
- ioctl
- Overview of Device Control
- mmap
- Overview of Memory Mapping
- open
- Overview of Device Open
- read
- Overview of Character Device I/O
- write
- Overview of Character Device I/O
- dslib library
- Using dslib Functions
- function summary
- dslib Functions
- data transfer options
- Data Transfer Options
- doscsireq()
- Issuing a Request With doscsireq()
- ds_ctostr ()
- Using ds_vtostr() and ds_ctostr()
- ds_vtostr()
- Using ds_vtostr() and ds_ctostr()
- dsclose()
- Using dsopen() and dsclose()
- dsopen()
- Using dsopen() and dsclose()
- filldsreq()
- Using filldsreq()
- fillg0cmd()
- Using fillg0cmd() and fillg1cmd()
- fillg1cmd()
- Using fillg0cmd() and fillg1cmd()
- inquiry12()
- inquiry12()—Issue an Inquiry Command
- modeselect15()
- modeselect15()—Issue a Group 0 Mode Select Command
- modesense1a()
- modesense1a()—Send a Group 0 Mode Sense Command
- read08()
- read08() and readextended28()—Issue a Read Command
- readcapacity25()
- readcapacity25()—Issue a Read Capacity Command
- readextended28()
- read08() and readextended28()—Issue a Read Command
- releaseunit17()
- reserveunit16() and releaseunit17()—Control Logical Units
- requestsense03()
- requestsense03()—Issue a Request Sense Command
- reserveunit16()
- reserveunit16() and releaseunit17()—Control Logical Units
- senddiagnostic1d()
- senddiagnostic1d()—Issue a Send Diagnostic Command
- testunitready00()
- testunitready00—Issue a Test Unit Ready Command
- write0a()
- write0a() and writeextended2a()—Issue a Write Command
- writeextended2a()
- write0a() and writeextended2a()—Issue a Write Command
- dsreq driver
- Overview of the dsreq Driver
- data transfer options
- Data Transfer Options
- DS_ABORT
- Using DS_ABORT
- DS_CONF
- Testing the Driver Configuration
- DS_RESET
- Using DS_RESET
- exclusive open
- Relationship to Other Device Special Files
- flags
- Values for ds_flags
- return codes
- Return Codes and Status Values
- scatter/gather
- Data Transfer Options
- struct dsconf
- Testing the Driver Configuration
- struct dsreq
- The dsreq Structure
- ds_flags
- Values for ds_flags
- ds_msg
- Return Codes and Status Values
- ds_ret
- Return Codes and Status Values
- ds_status
- Return Codes and Status Values
- EISA bus
- EISA Device Drivers
- address mapping
- EISA Address Mapping
- address spaces
- EISA Address Spaces
- allocate DMA channel
- Allocating a DMA Channel
- allocate IRQ
- Allocating IRQs and Channels
- byte order
- EISA Byte Ordering
- card slots
- Available Card Slots
- configuring
- EISA Configuration
- DMA to bus master
- Programming Bus-Master DMA
- example driver
- Initialization Sketch
- interrupts
- EISA Interrupts
- Interrupt Priority Scheduling
- kernel services
- Kernel Functions for EISA Support
- locked cycles
- EISA Locked Cycles
- mapping into user process
- EISA Mapping Support
- overview
- EISA Bus Overview
- PIO bandwidth
- EISA PIO Bandwidth
- PIO mapping
- Mapping PIO Addresses
- product identifier
- EISA Product Identifier
- request arbitration
- EISA Request Arbitration
- user-level PIO
- EISA Programmed I/O
- ELF object format
- Compiling and Linking
- entry points
- summary table
- Entry Point Summary
- Driver Exported Names
- attach
- Entry Point attach()
- About Attaching a Device
- About Attaching a Device
- PCI Hot Plug insert operation
- PCI Hot Plug Insert Operation
- close
- Entry Point close()
- Persistent Mappings
- Entry Point close()
- detach
- Entry Point detach()
- PCI Hot Plug detach operation
- PCI Hot Plug Detach Operation
- devflag
- Driver Flag Constant
- Public Global Variables
- edtinit
- Entry Point edtinit()
- Loading
- Initializing a VME Device
- GIO Driver edtinit() Entry Point
- halt
- Entry Point halt()
- info
- Streamtab Structure
- init
- Entry Point init()
- Loading
- Initialization Entry Points
- interrupt
- Interrupt Entry Point and Handler
- GIO Driver Interrupt Handler
- ioctl
- Control Entry Point
- Handling 32-Bit and 64-Bit Execution Models
- map
- Entry Point map()
- mmap
- Entry Point mmap()
- mversion
- Configuring a Loadable Driver
- Public Global Variables
- open
- Entry Point open()
- Entry Point open()
- mode flag
- Use of the Open Flag
- type flag
- Use of the Open Type
- poll
- Poll Entry Point
- and interrupts
- Calling pollwakeup()
- print
- Entry Point print()
- read
- Entry Points read() and write()
- reg
- Entry Point reg()
- Loading
- Designing a SCSI Driver
- About PCI Drivers
- size
- Saving the Size of a Block Device
- Entry Point size()
- start
- Entry Point start()
- Loading
- Initialization Entry Points
- strategy
- Entry Point strategy()
- called from read or write
- Calling Entry Point strategy() From Entry Point read() or write()
- design models
- Waiting for Block I/O to Complete
- unload
- Persistent Mappings
- Entry Point unload()
- Unloading
- About Unloading a SCSI Driver
- About Unloading
- unmap
- Entry Point unmap()
- unreg
- Entry Point unreg()
- when called
- Entry Point Calling Sequence
- write
- Entry Points read() and write()
- example driver
- Example ifnet Driver
- Driver Example
- Sample VME Device Driver
- Sample VME Device Driver
- Creating Device Aliases
- Initialization Sketch
- Example GIO Driver
- execution model
- Handling 32-Bit and 64-Bit Execution Models
- external interrupt
- Managing External Interrupts
- Control of External Interrupts
- Challenge architecture
- External Interrupts in Challenge and Onyx Systems
- generate
- Generating Outgoing Signals
- Generating Outgoing Signals
- input is level-triggered
- Responding to Incoming External Interrupts
- Responding to Incoming External Interrupts
- Origin2000 architecture
- External Interrupts In Origin 2000 and Origin 200
- pulse widths
- Detecting Invalid External Interrupts
- set pulse widths
- Setting the Expected Pulse Width
- FibreChannel
- A Note on FibreChannel Drivers
- fixed PIO map
- Fixed PIO Maps
- Fixed PIO Maps
- Flag D_PCI_HOT_PLUG_ATTACH
- Flag D_PCI_HOT_PLUG_ATTACH
- Flag D_PCI_HOT_PLUG_DETACH
- Flag D_PCI_HOT_PLUG_DETACH
- fmodsw table
- Kernel Switch Tables
- function
- See IRIX functions, kernel functions
- Reader Comments
- GIO bus
- GIO Device Drivers
- address space mapping
- GIO Bus Address Spaces
- configuring
- Configuring a GIO Device
- edtinit entry point
- GIO Driver edtinit() Entry Point
- example driver
- Example GIO Driver
- interrupt handler
- GIO Driver Interrupt Handler
- kernel services
- GIO-Specific Kernel Functions
- memory parity checking with
- Memory Parity Workarounds
- hardware graph
- See hwgraph
- Reader Comments
- hardware inventory
- Hardware Inventory
- adding entries to
- Creating an Inventory Entry
- contents
- Contents of the Inventory
- hinv displays
- Displaying the Inventory with hinv
- network driver use
- Network Inventory Entries
- software interface to
- Testing the Inventory In Software
- header files
- summary table
- Important Header Files
- dslib.h
- dslib Functions
- for network drivers
- Principal ifnet Header Files
- sgidefs.h
- Allowing for 64-Bit Mode
- sys/cmnerr.h
- Using cmn_err
- sys/debug.h
- Using ASSERT
- sys/file.h
- Use of the Open Flag
- sys/immu.h
- Working With Page and Sector Units
- sys/invent.h
- Testing the Inventory In Software
- Creating an Inventory Entry
- sys/open.h
- Use of the Open Type
- sys/param.h
- Structure buf_t
- sys/PCI/pciio.h
- About Registration
- About PCI Drivers
- sys/poll.h
- Use and Operation of poll(2)
- sys/region.h
- Entry Point map()
- sys/sema.h
- Lock and Semaphore Types
- sys/sysmacros.h
- Working With Page and Sector Units
- sys/types.h
- Allowing for 64-Bit Mode
- sys/uio.h
- Structure uio_t
- sys/var.h
- System Tuning Parameters
- /hw filesystem
- See hwgraph
- Reader Comments
- hwgraph
- Hardware Graph
- and attach entry point
- Completing the hwgraph
- About Attaching a Device
- and top-half entry point
- Use of the Device Handle
- and VME
- VME Bus and Interrupt Naming
- controller numbers assigned
- Using ioconfig for Global Controller Numbers
- data types in
- Hardware Graph Types
- definition
- Hardware Graph Features
- display by symmon
- Commands to Display the hwgraph
- edge
- Hwgraph Nomenclature
- implicit
- Implicit Edges
- hardware inventory in
- Creating an Inventory Entry
- /hw filesystem reflects
- /hw Filesystem
- implicit edge
- Implicit Edges
- justification for
- UNIX Hardware Assumptions, Old and New
- nomenclature
- Hwgraph Nomenclature
- relation to driver
- Definition and Use of /hw Entries
- use by SCSI driver
- SCSI Devices in the hwgraph
- vertex
- Hwgraph Nomenclature
- properties
- Properties of Edges and Vertexes
- idbg debugger
- Enabling Debugging in irix.sm
- Using idbg
- command line use
- Invoking idbg for a Single Command
- command syntax
- Commands of idbg
- configuring in kernel
- Including idbg in the Kernel Image
- display I/O status
- Commands to Display I/O Status
- display process data
- Commands to Display Process Information
- interactive mode
- Invoking idbg for Interactive Use
- invoking
- Loading and Invoking idbg
- loading
- Loading and Invoking idbg
- lock meter display
- Commands to Display Locks and Semaphores
- log file output
- Invoking idbg with a Log File
- memory display
- Commands to Display Memory and Symbols
- ide PROM monitor
- Placing symmon in the Volume Header
- include file
- See header files
- Reader Comments
- INCLUDE statement
- Entry Point edtinit()
- Configuring a Kernel
- Loading
- initialization
- Initialization Entry Points
- inode
- Overview of Device Open
- interrupt
- Driver Lower Half
- and strategy entry point
- Completing Block I/O
- associating to a driver
- Associating Interrupt to Driver
- concurrent with processing
- Uniprocessor Assumptions
- enabled during initialization
- When Initialization Is Performed
- handler runs as thread
- Interrupts as Threads
- latency
- Interrupt Performance and Latency
- mutual exclusion with
- Mutual Exclusion
- on multiprocessor
- Mutual Exclusion
- preemption of
- Hardware Exclusion Is Ineffective
- inventory
- See hardware inventory
- Reader Comments
- IO4 board
- VME Hardware Architecture
- multiple DMA problem
- Challenge DMA with Multiple IO4 Boards
- IP26 CPU
- Uncached Memory Access in the IP26 and IP28
- IPL statement
- Using the IPL Statement
- IRIX 6.5 and PCI drivers
- IRIX 6.5 PCI Drivers
- IRIX 6.5 device drivers
- Updating Device Drivers from Previous Releases to IRIX 6.5
- IRIX commands
- autoconfig
- Configuring a Nonloadable Driver
- Configuring a Kernel
- Generating a Debugging Kernel
- dvhtool
- Placing symmon in the Volume Header
- hinv
- Displaying the Inventory with hinv
- and MAKEDEV
- The Script MAKEDEV
- for CPU type
- Interrogating the CPU Type
- install
- Making Conventional Device Files
- Static Definition of Device Special Files
- ioconfig
- Using ioconfig for Global Controller Numbers
- with VME
- VME Bus Numbers Assigned by ioconfig
- lboot
- Kernel Configuration Files
- builds switch tables
- Kernel Switch Tables
- driver prefix with
- Entry Point Naming and lboot
- mknod
- Making Conventional Device Files
- Static Definition of Device Special Files
- ml
- Loadable Drivers
- mount
- Overview of Device Open
- Entry Point open()
- nvram
- Specifying a Separate System Console
- setsym
- Generating a Debugging Kernel
- systune
- System Tuning Parameters
- Unloading
- max DMA size
- Maximum DMA Transfer Size
- switch table size
- Kernel Switch Tables
- umount
- Entry Point close()
- uname
- Interrogating the CPU Type
- versions
- Placing symmon in the Volume Header
- IRIX functions
- close()
- Entry Point close()
- endinvent()
- Testing the Inventory In Software
- getinvent()
- Testing the Inventory In Software
- getpagesize()
- Virtual Address Mapping
- ioctl()
- User-Level Control of SCSI Devices
- Managing External Interrupts
- Overview of Device Control
- kmem_alloc()
- Driver Upper Half
- mmap ()
- EISA PIO
- Using the mmap() Function
- PCI PIO
- Using mmap() With PCI Devices
- VME PIO
- Using the mmap() Function
- mmap()
- Access Using mmap()
- Overview of Memory Mapping
- Concepts and Use of mmap()
- munmap()
- Entry Point unmap()
- open ()
- with dsreq driver
- Relationship to Other Device Special Files
- open()
- Overview of Device Open
- Entry Point open()
- pio_badaddr ()
- Testing the PIO Map
- Testing the PIO Map
- poll()
- Use and Operation of poll(2)
- read()
- Overview of Character Device I/O
- Overview of Block I/O
- setinvent()
- Testing the Inventory In Software
- syslog()
- Displaying to the System Log
- write()
- Overview of Character Device I/O
- Overview of Block I/O
- jag (SCSI-toVME) adapter
- Names of SCSI Devices on the Jag (VME Bus) Controller
- kernel address space
- driver runs in
- Memory Use in Kernel-Level Drivers
- mapping to user space
- Memory Use in User-Level Drivers
- kernel execution model
- Handling 32-Bit and 64-Bit Execution Models
- kernel functions
- summary table
- Kernel Functions
- add_to_inventory()
- Creating an Inventory Entry
- alenlist_create()
- Creating Alenlists
- alenlist_cursor_offset()
- Using Alenlist Cursors
- alenlist_destroy()
- Creating Alenlists
- alenlist_get()
- Using Alenlist Cursors
- badaddr()
- Testing Device Physical Addresses
- bcopy()
- Block Copy Functions
- biodone()
- Completing Block I/O
- Strategies of the strategy() Entry Point
- bioerror()
- Completing Block I/O
- biowait()
- Strategies of the strategy() Entry Point
- bp_mapin()
- Managing Buffer Virtual Addresses
- brelse()
- Allocating buf_t Objects and Buffers
- buf_to_alenlist()
- Loading Alenlists
- bzero()
- Block Copy Functions
- cmn_err()
- Producing Diagnostic Displays
- buffer output
- Displaying to the Circular Message Buffer
- system log output
- Displaying to the System Log
- copyin()
- Control Entry Point
- Block Copy Functions
- copyout()
- Control Entry Point
- Block Copy Functions
- device_admin_info_get()
- Retrieving Administrator Attributes
- device_controller_number_get()
- Attaching Inventory Information
- device_controller_number_set()
- Attaching Inventory Information
- device_driver_admin_info_get()
- Retrieving Administrator Attributes
- device_info_get()
- Interrogating the hwgraph
- device_info_set()
- Extending the Graph With a Single Vertex
- Setting Up the Hardware Graph
- device_inventory_add()
- Extending the Graph With a Single Vertex
- Attaching Inventory Information
- device_inventory_get_next()
- Interrogating the hwgraph
- dki_dcache_inval()
- Managing Memory for Cache Coherency
- dki_dcache_wb()
- Managing Memory for Cache Coherency
- dma_map ()
- Using a DMA Map
- Using a DMA Map
- Programming Bus-Master DMA
- dma_mapaddr ()
- Using a DMA Map
- Using a DMA Map
- Programming Bus-Master DMA
- dma_mapalloc ()
- Mapping DMA Addresses
- Mapping DMA Addresses
- Programming Bus-Master DMA
- drv_getparm()
- User Process Administration
- drv_priv()
- Use of the cred_t Object
- User Process Administration
- drvhztousec()
- Time Units
- drvusectohz()
- Time Units
- eisa_dmachan_alloc ()
- Allocating a DMA Channel
- eisa_ivec_alloc ()
- Allocating and Programming an IRQ
- fasthzto()
- Time Units
- flushbus()
- Managing Memory for Cache Coherency
- fubyte()
- Byte and Word Functions
- get_current_abi()
- Handling 32-Bit and 64-Bit Execution Models
- geteblk()
- Allocating buf_t Objects and Buffers
- getemajor()
- Historical Use of the Device Numbers
- geteminor()
- Historical Use of the Device Numbers
- getinvent()
- Interrogating the CPU Type
- getrbuf()
- Allocating buf_t Objects and Buffers
- hwgraph_block_device_add()
- Extending the Graph With Multiple Vertexes
- hwgraph_char_device_add()
- Extending the Graph With a Single Vertex
- Extending the Graph With Multiple Vertexes
- Vertexes for Modes of Use
- Setting Up the Hardware Graph
- hwgraph_edge_add()
- Extending the Graph With Multiple Vertexes
- Vertexes for Modes of Use
- hwgraph_edge_remove()
- Vertexes for Modes of Use
- hwgraph_info_add_LBL()
- Attaching Attributes
- hwgraph_info_export_LBL()
- Attaching Attributes
- hwgraph_info_get_LBL()
- Attaching Attributes
- Retrieving Administrator Attributes
- hwgraph_info_remove_LBL()
- Attaching Attributes
- hwgraph_info_replace_LBL()
- Attaching Attributes
- hwgraph_info_unexport_LBL()
- Attaching Attributes
- hwgraph_inventory_get_next()
- Attaching Inventory Information
- hwgraph_vertex_create()
- Extending the Graph With Multiple Vertexes
- Vertexes for Modes of Use
- hwgraph_vertex_destroy()
- Vertexes for Modes of Use
- initnsema()
- Converting a Uniprocessor Driver
- initnsema_mutex() (not supported)
- Semaphores
- ip26_enable_ucmem()
- Program Access to Uncached Memory
- ip26_return_ucmem()
- Program Access to Uncached Memory
- itimeout()
- Use of pollwakeup() Without Interrupts
- Timer Support
- kmem_alloc()
- Kernel Virtual Space—kseg2
- General-Purpose Allocation
- kmem_free()
- Extending the Graph With a Single Vertex
- Vertexes for Modes of Use
- Setting Up the Hardware Graph
- kmem_zalloc()
- General-Purpose Allocation
- Extending the Graph With a Single Vertex
- Vertexes for Modes of Use
- Setting Up the Hardware Graph
- kvaddr_to_alenlist()
- Loading Alenlists
- kvtophys()
- Converting Virtual Addresses to Physical
- makedevice()
- Historical Use of the Device Numbers
- pciio_dmamap_addr()
- Mapping a Specific Buffer
- pciio_dmamap_alloc()
- Allocating DMA Maps
- pciio_dmamap_done()
- Deactivating Addresses and Maps
- pciio_dmamap_list()
- Mapping an Address/Length List
- pciio_dmatrans_addr()
- Using One-Step DMA Translation
- pciio_dmatrans_list()
- Using One-Step DMA Translation
- pciio_driver_register()
- About Registration
- About Registration
- pciio_error_register()
- Registering an Error Handler
- pciio_intr_alloc()
- Creating an Interrupt Object
- pciio_intr_connect()
- Connecting the Handler
- pciio_intr_disconnect()
- Disconnecting the Handler
- pciio_piomap_addr()
- Performing PIO With a PIO Map
- pciio_piomap_alloc()
- Allocating PIO Maps
- Interrogating PIO Maps
- pciio_piomap_done()
- Deactivating an Address and Map
- pciio_piotrans_addr()
- Using One-Step PIO Translation
- phalloc()
- Use and Operation of poll(2)
- Allocating pollhead Objects
- phfree()
- Allocating pollhead Objects
- physiock()
- Flag D_WBACK
- Calling Entry Point strategy() From Entry Point read() or write()
- pio_baddr ()
- Testing the PIO Map
- pio_bcopyin ()
- Using the PIO Map in Functions
- Using the PIO Map in Functions
- Using the PIO Map in Functions
- pio_bcopyout ()
- Using the PIO Map in Functions
- Using the PIO Map in Functions
- Using the PIO Map in Functions
- pio_map_alloc ()
- Initialization Sketch
- pio_mapaddr ()
- Using the Mapped Address
- Using the Mapped Address
- pio_mapalloc ()
- PIO Addressing in Challenge and Onyx Systems
- Mapping PIO Addresses
- Mapping PIO Addresses
- pio_wbadaddr ()
- Testing the PIO Map
- Testing the PIO Map
- pollwakeup()
- Use of pollwakeup()
- Calling pollwakeup()
- printf()
- Using printf()
- psema()
- Converting a Uniprocessor Driver
- Using a Semaphore for Mutual Exclusion
- ptob()
- Virtual Address Mapping
- setgioconfig ()
- Configuring a Slot
- setgiovector ()
- Registering an Interrupt Handler
- sleep()
- Using sleep() and wakeup()
- splhi()
- denigrated
- Priority Level Functions
- meaningless
- Uniprocessor Assumptions
- splnet()
- ineffective
- Ineffective spl*() Functions
- splvme()
- useless
- Converting a Uniprocessor Driver
- subyte()
- Byte and Word Functions
- timeout()
- Timer Support
- uiomove()
- Transferring Data Through a uio_t Object
- uiophysio()
- Calling Entry Point strategy() From Entry Point read() or write()
- untimeout()
- Timer Support
- userabi()
- Handling 32-Bit and 64-Bit Execution Models
- uvaddr_to_alenlist()
- Loading Alenlists
- v_getaddr()
- Managing Mapped Memory
- v_gethandle()
- Managing Mapped Memory
- v_mapphys()
- Entry Point map()
- Managing Mapped Memory
- vme_ivec_alloc ()
- Allocating a Vector
- Allocating a Vector
- vme_ivec_free ()
- Releasing a Vector
- Releasing a Vector
- vme_ivec_set ()
- Allocating a Vector
- Allocating a Vector
- vsema()
- Converting a Uniprocessor Driver
- Using a Semaphore for Mutual Exclusion
- vt_gethandle()
- Entry Point map()
- Entry Point unmap()
- wakeup()
- Using sleep() and wakeup()
- kernel mode of processor
- Processor Operating Modes
- kernel panic
- address exception
- Address Exceptions
- moving data
- Transferring Data
- kernel switch tables
- Kernel Switch Tables
- kernel-level driver
- About This Guide
- Kernel-Level Device Control
- Structure of a Kernel-Level Driver
- structure of
- Summary of Driver Structure
- layered driver
- Layered Drivers
- lboot
- See IRIX commands
- Reader Comments
- loadable driver
- Loadable Drivers
- and switch table
- Kernel Switch Tables
- autoregister
- Initialization of Loadable Drivers
- compiler options
- Compile Options for Loadable Drivers
- configuring
- Configuring a Loadable Driver
- initialization
- Initialization of Loadable Drivers
- loading
- Loading
- master.d
- Master File for Loadable Drivers
- mversion entry
- Public Global Variables
- not in miniroot
- Loadable Drivers
- registration
- Registration
- unloading
- Unloading
- loadable driver attach() entry point
- Return Value from Attach
- loadable driver reg() entry point
- Return Value from Attach
- loading a driver
- Loading
- lock metering support
- Including Lock Metering in the Kernel Image
- Commands to Display Locks and Semaphores
- locking
- See mutual exclusion
- Reader Comments
- lower half of driver
- Driver Lower Half
- major device number
- Major Device Number
- Device Number Types
- for STREAMS clone
- Using the CLONE Driver
- Recognizing a Clone Request Independently
- in /dev/scsi
- Major and Minor Device Numbers in /dev/scsi
- in inode
- Devices as Files
- in master.d
- Master Configuration Database
- Descriptive Line
- in variables in master.d
- Variables Section
- input to open
- Overview of Device Open
- selecting
- Selecting a Major Number
- /dev/MAKEDEV
- Creating Conventional Device Names
- Generic SCSI Device Special Files
- Device Number Types
- Dynamic Definition of Device Special Files
- adding to /dev/scsi
- Creating Additional Names in /dev/scsi
- master.d configuration files
- See configuration files, /var/sysgen/master.d
- Reader Comments
- memory
- Physical and Virtual Memory
- memory address
- cached
- Cached Physical Memory—kseg0
- physical
- EISA Address Mapping
- Commands to Control Execution Flow
- uncached
- Uncached Physical Memory—kseg1
- memory allocation
- Kernel Memory Allocation
- memory display
- Commands to Display Memory
- memory mapping
- Memory Use in User-Level Drivers
- Memory Map Entry Points
- migrating drivers from previous releases
- Updating Device Drivers from Previous Releases to IRIX 6.5
- miniroot
- no loadable drivers
- Loadable Drivers
- minor device number
- Minor Device Number
- Device Number Types
- encoding
- Historical Use of Minor Number
- for STREAMS clone driver
- Using the CLONE Driver
- Recognizing a Clone Request Independently
- in /dev/scsi
- Major and Minor Device Numbers in /dev/scsi
- in inode
- Devices as Files
- input to open
- Overview of Device Open
- Use of the Device Handle
- selecting
- Selecting Minor Numbers
- multiprocessor
- converting to
- Converting a Uniprocessor Driver
- driver design for
- Designing for Multiprocessor Use
- Special Considerations for Multiprocessing
- driver flag D_MP
- Flag D_MP
- drivers for
- Drivers for Multiprocessors
- interrupt handling on
- Mutual Exclusion
- network drivers in
- Multiprocessor Considerations
- splhi() useless in
- Uniprocessor Assumptions
- synchronizing upper-half code
- Synchronizing Within Upper-Half Functions
- uniprocessor assumptions invalid
- Uniprocessor Assumptions
- uniprocessor drivers use CPU 0
- Drivers for Multiprocessors
- using symmon in
- Using symmon in a Multiprocessor Workstation
- mutex locks
- Using Mutex Locks
- mutual exclusion
- Mutual Exclusion Compared to Waiting
- Basic Locks
- basic locks
- Basic Locks
- in multiprocessor drivers
- Protecting Common Data
- in network driver
- Mutual Exclusion Macros
- mutex locks
- Using Mutex Locks
- priority inheritance
- Using Mutex Locks
- reader/writer locks
- Reader/Writer Locks
- semaphore
- Using a Semaphore for Mutual Exclusion
- sleep locks
- Using Sleep Locks
- names of devices
- IRIX Conventional Device Names
- Form of Filenames in /dev/scsi
- network
- Network Device Drivers
- based on 4.3BSD
- Network Driver Interfaces
- driver interfaces
- Network Driver Interfaces
- example driver
- Example ifnet Driver
- header files
- Principal ifnet Header Files
- multiprocessor considerations
- Multiprocessor Considerations
- overview
- Overview of Network Drivers
- STREAMS protocol stack
- Application Interfaces
- network driver
- debugging
- Commands to Display Network-Related Structures
- Network File System (NFS)
- Application Interfaces
- O2 PCI driver
- PCI Drivers for the O2 (IP32) Platform
- page size
- I/O
- Working With Page and Sector Units
- macros
- Working With Page and Sector Units
- memory
- Virtual Address Mapping
- Working With Page and Sector Units
- parity check with GIO
- Memory Parity Workarounds
- PCI bus
- arbitration
- Slot Priority and Bus Arbitration
- Bus Arbitration
- base address register
- Configuration Register Initialization
- Configuration Register Initialization
- byte order
- Byte Order Considerations
- cache line size
- Configuration Register Initialization
- Configuration Register Initialization
- configuration
- initialized
- Configuration Register Initialization
- Configuration Register Initialization
- configuration space
- Byte Order for PIO
- Accessing the Device Configuration
- device ID
- About Registration
- About Attaching a Device
- driver structure
- Designing a SCSI Driver
- About PCI Drivers
- endianness
- Byte Order Considerations
- error handler
- Registering an Error Handler
- implementation
- PCI Device Attachment
- interrupt handler
- Registering an Interrupt Handler
- interrupt lines
- Interrupt Signal Distribution
- Interrupt Signal Distribution
- kernel services
- Services for PCI Drivers
- latency of
- Architectural Implications
- latency timer
- Configuration Register Initialization
- Configuration Register Initialization
- register driver
- About Registration
- slot versus device
- Buses, Slots, Cards, and Devices
- user-level PIO
- PCI Programmed I/O
- vendor ID
- About Registration
- About Registration
- About Attaching a Device
- versus system bus
- PCI Bus and System Bus
- PCI card
- Interrupt Signal Distribution
- interrupts
- Interrupt Signal Distribution
- overloaded
- Interrupt Signal Distribution
- PCI drivers and IRIX 6.5
- IRIX 6.5 PCI Drivers
- PCI drivers for O2
- PCI Drivers for the O2 (IP32) Platform
- PCI Hot Plug insert operation
- PCI Hot Plug Insert Operation
- PCI Hot Plug Insert Operation
- PCI Hot Plug removal operation
- PCI Hot Plug Detach Operation
- pciba, usrpci
- PCI Programmed I/O
- pcibr_get_dmatrans_node() function
- Using One-Step DMA Translation
- pciio_driver_register()
- Return Value from Attach
- pciio_pio_* routines
- PCI Drivers for the O2 (IP32) Platform
- physical address format
- 64-bit
- Physical Address
- pipe semantics
- Support for Pipes
- prefix
- Master Configuration Database
- Driver Name Prefix
- How Names Are Used in Configuration
- primary cache
- CPU Access to Memory
- priority inheritance
- Using Mutex Locks
- priority level functions
- Priority Level Functions
- privilege checking
- User Process Administration
- process
- User Process Administration
- display data about
- Commands to Display Process Information
- handle of
- Sending a Process Signal
- sending signal to
- Sending a Process Signal
- table of in kernel
- Commands to Display Process Information
- process-level driver
- About This Guide
- processor
- kernel mode
- Processor Operating Modes
- types
- CPU Modules
- user mode
- Processor Operating Modes
- Programmed I/O (PIO)
- CPU Access to Device Registers
- User-Level Access to Devices
- VME PIO Operations
- address maps for
- Creating and Using PIO Maps
- PIO Addressing in Challenge and Onyx Systems
- Mapping PIO Addresses
- Using PIO Maps
- EISA bus
- EISA Programmed I/O
- Mapping PIO Addresses
- GIO bus
- Using PIO
- PCI bus
- PCI Programmed I/O
- VME bus
- VME Programmed I/O
- VME PIO Operations
- PIO Addressing and DMA Addressing
- VME PIO Operations
- VME PIO Operations
- PIO Addressing and DMA Addressing
- pseudo-device driver
- Overview of Memory Mapping
- putbuf circular buffer
- Displaying to the Circular Message Buffer
- Commands to Display Memory and Symbols
- raw device
- See character device
- Reader Comments
- reader/writer locks
- Reader/Writer Locks
- register a driver
- loadable driver for callback
- Registration
- PCI driver
- About Registration
- About Registration
- reg entry point
- Entry Point reg()
- sash standalone shell
- Placing symmon in the Volume Header
- SCSI bus
- SCSI Device Drivers
- adapter error codes
- Adapter Error Codes (Table scsi_adaperrs_tab)
- adapter number
- Names of SCSI Devices on a SCSI Bus
- command
- Inquiry
- inquiry12()—Issue an Inquiry Command
- Using scsi_info()
- Mode Select
- modeselect15()—Issue a Group 0 Mode Select Command
- Mode Sense
- modesense1a()—Send a Group 0 Mode Sense Command
- Read
- read08() and readextended28()—Issue a Read Command
- Read Capacity
- readcapacity25()—Issue a Read Capacity Command
- Request Sense
- requestsense03()—Issue a Request Sense Command
- Reserve Unit
- reserveunit16() and releaseunit17()—Control Logical Units
- Send Diagnostic
- senddiagnostic1d()—Issue a Send Diagnostic Command
- Test Unit Ready
- testunitready00—Issue a Test Unit Ready Command
- Write
- write0a() and writeextended2a()—Issue a Write Command
- display request structure
- Commands to Display I/O Status
- driver
- Accessing a SCSI Device
- error messages
- SCSI Error Messages
- example driver
- Creating Device Aliases
- hardware support overview
- SCSI Hardware Support
- host adapter
- Host Adapter Drivers
- functions of
- Overview of Host Adapter Functions
- purpose
- Purpose of the Host Adapter Driver
- scsi_abort ()
- Using scsi_abort()
- scsi_alloc ()
- Using scsi_alloc()
- scsi_command ()
- Using scsi_command()
- scsi_free ()
- Using scsi_free()
- scsi_info ()
- Using scsi_info()
- vectors to
- How the Host Adapter Functions Are Found
- kernel overview
- IRIX Kernel SCSI Support
- LUN
- Names of SCSI Devices on a SCSI Bus
- Logical Unit Numbers (LUNs)
- message string tables
- SCSI Error Message Tables
- sense codes
- SCSI Sense Codes (Table scsi_key_msgtab)
- target ID
- Names of SCSI Devices on a SCSI Bus
- target number
- Target Numbers
- user-level access
- User-Level Control of SCSI Devices
- User-Level Access to SCSI Devices
- See also dsreq driver
- User-Level Access to SCSI Devices
- secondary cache
- CPU Access to Memory
- sector unit macros
- Working With Page and Sector Units
- semaphore
- Semaphores
- for mutual exclusion
- Using a Semaphore for Mutual Exclusion
- for waiting
- Using a Semaphore for Waiting
- sign extension of 32-bit addresses
- Compatibility of 32-Bit and 64-Bit Spaces
- signal
- Sending a Process Signal
- SIGSEGV
- Address Exceptions
- Silicon Graphics
- developer program
- Developer Program
- FTP server
- Internet Resources
- VME bus hardware
- About VME Bus Attachment
- VME Bus in Challenge and Onyx Systems
- WWW server
- Internet Resources
- 64-bit address space
- See address space, 64-bit
- Reader Comments
- See Numbers
- Reader Comments
- sleep locks
- Using Sleep Locks
- socket interface
- Application Interfaces
- stray VME interrupt
- Vector Errors
- Vector Errors
- STREAMS
- STREAMS Drivers
- function summary
- Summary of Standard STREAMS Functions
- clone driver
- Support for CLONE Drivers
- close entry point
- Entry Point close()
- debugging
- Commands to Display STREAMS Structures
- display data structures
- Commands to Display STREAMS Structures
- driver
- About This Guide
- extended poll support
- Extension of Poll and Select
- module_info structure
- Streamtab Structure
- multiprocessor design
- Special Considerations for Multiprocessing
- multithreaded monitor
- Special Considerations for Multiprocessing
- open entry point
- Entry Point open()
- put functions
- Put Functions wput() and rput()
- service scheduling
- Service Scheduling
- srv functions
- Service Functions rsrv() and wsrv()
- streamtab structure
- Streamtab Structure
- supplied drivers
- Supplied STREAMS Modules
- STREAMS protocol stack
- Application Interfaces
- structure of driver
- Summary of Driver Structure
- switch table
- Kernel Switch Tables
- symmon debugger
- Placing symmon in the Volume Header
- Using symmon
- breakpoints
- Commands to Control Execution Flow
- command syntax
- Commands of symmon
- how invoked
- How symmon Is Entered
- hwgraph display
- Commands to Display the hwgraph
- in multiprocessor
- Using symmon in a Multiprocessor Workstation
- in uniprocessor
- Using symmon in a Uniprocessor Workstation
- invoking at bootstrap
- Entering symmon at Boot Time
- memory display
- Commands to Display Memory
- prompt
- How symmon Is Entered
- symbol lookup
- Commands for Symbol Conversion and Lookup
- virtual memory commands
- Commands to Manage Virtual Memory
- watchpoint register use
- Commands to Control Execution Flow
- synchronization variable
- Using Synchronization Variables
- SysAD bus parity checks
- Memory Parity Workarounds
- sysgen files
- See configuration files
- Reader Comments
- system console
- alternate
- Specifying a Separate System Console
- system log display
- Displaying to the System Log
- systune
- See IRIX commands
- Reader Comments
- terminal as console
- Specifying a Separate System Console
- 32-bit entries see Numbers
- Reader Comments
- thread
- interrupt runs on
- Interrupts as Threads
- tick
- Time Units
- time unit functions
- Time Units
- TLI interface
- Application Interfaces
- Translate Lookaside Buffer (TLB)
- CPU Access to Memory
- Translation Lookaside Buffer (TLB)
- Virtual Address Mapping
- maps kernel space
- Kernel Virtual Space—xkseg
- maps kuseg
- User Process Space—kuseg
- number of entries in
- TLB Misses and TLB Sizes
- udmalib
- VME User-Level DMA
- uncached memory access
- 32-bit
- Uncached Physical Memory—kseg1
- 64-bit
- Cache-Controlled Physical Memory—xkphys
- do not map
- Entry Point map()
- IP26
- Uncached Memory Access in the IP26 and IP28
- none in Challenge
- Uncached Memory Access in SGI Origin 2000 and in Challenge and Onyx Series
- uniprocessor
- converting driver
- Converting a Uniprocessor Driver
- using symmon
- Using symmon in a Uniprocessor Workstation
- unloading a driver
- Unloading
- updating drivers
- Updating Device Drivers from Previous Releases to IRIX 6.5
- upper half of driver
- Upper and Lower Halves
- upper half of of driver
- Uniprocessor Assumptions
- Synchronizing Within Upper-Half Functions
- USE statement
- Entry Point edtinit()
- Configuring a Kernel
- user mode of processor
- Processor Operating Modes
- user-level DMA
- VME User-Level DMA
- user-level driver
- User-Level Device Control
- user-level process
- User-Level Device Control
- usrpci, pciba
- PCI Programmed I/O
- variables in master.d
- Variables Section
- VECTOR statement
- Associating Interrupt to Driver
- Configuring a Kernel
- Loading
- edtinit entry point
- Entry Point edtinit()
- EISA kernel driver
- Configuring IRIX
- EISA PIO
- Learning EISA Device Addresses
- GIO bus
- GIO VECTOR Line
- use of probe=
- Using the probe and exprobe Parameters
- VME devices
- Configuring the System Files
- vfssw table
- Kernel Switch Tables
- virtual memory
- CPU Access to Memory
- Virtual Address Mapping
- 32-bit mapping
- Virtual Address Mapping
- 64-bit mapping
- Virtual Address Mapping
- debug display of
- Commands to Manage Virtual Memory
- page size
- Virtual Address Mapping
- virtual page number (VPN)
- 32-bit
- Virtual Address Mapping
- VME bus
- VME Device Attachment on Origin 2000/Onyx2
- VME Device Attachment on Challenge/Onyx
- adapter number
- Names of SCSI Devices on the Jag (VME Bus) Controller
- address modifier
- VME Address Spaces
- bus address spaces
- VME Address Spaces
- About VME Bus Addresses and System Addresses
- VME Address Spaces
- VME Bus Addresses and System Addresses
- mapping
- User-Level and Kernel-Level Addressing
- User-Level and Kernel-Level Addressing
- bus cycles
- VME Transactions
- VME Transactions
- configuring
- Configuring VME Devices
- DMA engine
- Operation of the DMA Engine
- Operation of the DMA Engine
- DMA to
- address maps
- Creating and Using DMA Maps
- Mapping DMA Addresses
- Mapping DMA Addresses
- addresses
- DMA Addressing
- example driver
- Sample VME Device Driver
- Sample VME Device Driver
- hardware
- Challenge
- VME Hardware in Challenge and Onyx Systems
- design constraints
- VME Hardware Features and Restrictions
- DMA cycle
- VME DMA Operations
- VME DMA Operations
- interrupt priority
- VME Interrupt Priority
- overview
- About VME Bus Attachment
- VME Bus in Challenge and Onyx Systems
- PIO cycle
- VME PIO Operations
- VME PIO Operations
- relation to system bus
- The VME Bus Controller
- The VME Bus Controller
- history
- VME History
- VME History
- hwgraph use
- VME Bus and Interrupt Naming
- interrupt levels
- VME Transactions
- VME Transactions
- interrupt vector
- Handling VME Interrupts
- Allocating an Interrupt Vector Dynamically
- Allocating an Interrupt Vector Dynamically
- jag adapter
- Names of SCSI Devices on the Jag (VME Bus) Controller
- kernel services
- Services for VME Drivers on Origin 2000/Onyx2
- Kernel Services for VME
- mapping into user process
- VME Mapping Support
- master device
- Master and Slave Devices
- Master and Slave Devices
- overview
- Overview of the VME Bus
- PIO to
- address maps
- Creating and Using PIO Maps
- PIO Addressing in Challenge and Onyx Systems
- Mapping PIO Addresses
- addresses
- PIO Addressing and DMA Addressing
- PIO Addressing and DMA Addressing
- addressing in
- PIO Addressing and DMA Addressing
- addressing in Challenge
- PIO Addressing in Challenge and Onyx Systems
- bandwidth
- VME PIO Bandwidth
- fixed, unfixed maps
- Fixed PIO Maps
- Fixed PIO Maps
- slave device
- Master and Slave Devices
- Master and Slave Devices
- stray interrupt cause
- Vector Errors
- Vector Errors
- user-level DMA
- User-Level DMA From the VME Bus
- VME User-Level DMA
- user-level DMA bandwidth
- DMA Engine Bandwidth
- user-level PIO
- VME Programmed I/O
- VME PIO Operations
- VME bus, configuration
- Configuring VME Devices
- VME bus, hardware
- VME Device Attachment on Origin 2000/Onyx2
- VME Cache Controller (VMECC)
- VMECC
- VMEbus Channel Adapter Module (VCAM) board
- VME Hardware Architecture
- VMEbus Channel Adapter Module (VCAM) Board
- volume header
- Placing symmon in the Volume Header
- waiting
- Mutual Exclusion Compared to Waiting
- Waiting for Time to Pass
- for a general event
- Waiting for a General Event
- for an interrupt
- Waiting for Block I/O to Complete
- for memory
- Waiting for Memory to Become Available
- semaphore
- Using a Semaphore for Waiting
- synchronization variables
- Using Synchronization Variables
- time units
- Time Units
- timed events
- Time Units