Document Information
Preface
Part I Designing Device Drivers for the Solaris Platform
1. Overview of Solaris Device Drivers
2. Solaris Kernel and Device Tree
3. Multithreading
4. Properties
5. Managing Events and Queueing Tasks
6. Driver Autoconfiguration
7. Device Access: Programmed I/O
8. Interrupt Handlers
9. Direct Memory Access (DMA)
10. Mapping Device and Kernel Memory
11. Device Context Management
12. Power Management
13. Hardening Solaris Drivers
14. Layered Driver Interface (LDI)
Part II Designing Specific Kinds of Device Drivers
15. Drivers for Character Devices
16. Drivers for Block Devices
17. SCSI Target Drivers
18. SCSI Host Bus Adapter Drivers
19. Drivers for Network Devices
20. USB Drivers
Part III Building a Device Driver
21. Compiling, Loading, Packaging, and Testing Drivers
22. Debugging, Testing, and Tuning Device Drivers
23. Recommended Coding Practices
Part IV Appendixes
A. Hardware Overview
B. Summary of Solaris DDI/DKI Services
C. Making a Device Driver 64-Bit Ready
D. Console Frame Buffer Drivers
Index
|
G
- GCC, Compiling and Linking the Driver
- gcc command, Compiling and Linking the Driver
- generic device name, Generic Device Names
- getinfo() entry point, getinfo() Entry Point
- getmajor() function, Block Device Autoconfiguration
- getrbuf() function, changes to, getrbuf() Argument Changes
- getting major numbers, example of, Block Device Autoconfiguration
- GLD
- device types supported by, Generic LAN Driver Overview
- drivers, Drivers for Network Devices
- GLD data structures
- gld_mac_info, gld_mac_info Structure
- gld_stats, gld_stats Structure
- GLD entry points
- gldm_get_stats(), gldm_get_stats() Entry Point
- gldm_intr(), gldm_intr() Entry Point
- gldm_ioctl(), gldm_ioctl() Entry Point
- gldm_reset(), gldm_reset() Entry Point
- gldm_send(), gldm_send() Entry Point
- gldm_set_mac_addr(), gldm_set_mac_addr() Entry Point
- gldm_set_multicast(), gldm_set_multicast() Entry Point
- gldm_set_promiscuous(), gldm_set_promiscuous() Entry Point
- gldm_start(), gldm_start() Entry Point
- gldm_stop(), gldm_stop() Entry Point
- gld_intr() function, gld_intr() Function
- GLD ioctl functions, Implemented ioctl Functions
- gld_mac_alloc() function, gld_mac_alloc() Function
- gld_mac_free() function, gld_mac_free() Function
- gld_mac_info structure
- description of, gld_mac_info Structure
- GLD arguments, GLD Arguments
- network drivers
- Generic LAN Driver Overview
- GLD Driver Requirements
- used in gld_intr() function, gld_intr() Function
- GLD network statistics, Network Statistics
- gld_recv() function, gld_recv() Function
- gld_register() function, gld_register() Function
- gld_sched() function, gld_sched() Function
- GLD service routines
- gld_intr() function, gld_intr() Function
- gld_mac_alloc() function, gld_mac_alloc() Function
- gld_mac_free() function, gld_mac_free() Function
- gld_recv() function, gld_recv() Function
- gld_register() function, gld_register() Function
- gld_sched() function, gld_sched() Function
- gld_unregister() function, gld_unregister() Function
- gld_stats structure, network driver, Network Statistics
- GLD symbols
- GLD_BADARG, GLD Return Values
- GLD_FAILURE, GLD Return Values
- GLD_MAC_PROMISC_MULTI, GLD Arguments
- GLD_MAC_PROMISC_NONE, GLD Arguments
- GLD_MAC_PROMISC_PHYS, GLD Arguments
- GLD_MULTI_DISABLE, gldm_set_multicast() Entry Point
- GLD_MULTI_ENABLE, gldm_set_multicast() Entry Point
- GLD_NOLINK, gldm_send() Entry Point
- GLD_NORESOURCES, gld_sched() Function
- GLD_NOTSUPPORTED, gldm_set_mac_addr() Entry Point
- GLD_SUCCESS, GLD Return Values
- gld_unregister() function, gld_unregister() Function
- gld(9E) entry point, network driver, Generic LAN Driver Overview
- gld(9F) function, Generic LAN Driver Overview
- network driver, GLD Driver Requirements
- gldm_get_stats(), description of, Network Statistics
- gldm_private structure, gld_mac_info Structure
- graphics devices, device context management of, Context Management Model
H
- handle, DMA
- DMA Model
- Allocating a DMA Handle
- Freeing the DMA Handle
- hardening drivers, Hardening Solaris Drivers
- hardware configuration files
- Configuration Files
- Writing a Hardware Configuration File
- PCI devices, PCI Hardware Configuration Files
- SBus devices, SBus Hardware Configuration Files
- SCSI target devices, Hardware Configuration File
- where to place, Copying the Driver to a Module Directory
- hardware context, What Is a Device Context?
- hardware faults
- testing
- Driver Hardening Test Harness
- Testing the Driver
- hardware state in power management, Hardware State
- HBA driver, See SCSI HBA driver
- header files for device drivers, Header Files
- high-level mutexes, interrupts, High-Level Mutexes
- host bus adapter transport layer, SCSI Interface
- hot-plug, See hotplugging
- hotpluggable drivers, See hotplugging
- hotplugging, Hotplugging
- and SCSI HBA driver
- Hotplugging
- Dynamic Reconfiguration
- USB device, Hotplugging USB Devices
- hub driver, USB Client Drivers
- hubd USB hub driver, Hot Insertion
I
- I/O
- asynchronous data transfers
- Differences Between Synchronous and Asynchronous I/O
- Asynchronous Data Transfers (Block Drivers)
- byte stream, Entry Points for Character Device Drivers
- disk controls, Disk ioctls
- DMA transfers, DMA Transfers (Synchronous)
- file system structure, File I/O
- miscellaneous control of, Miscellaneous I/O Control
- multiplexing, Multiplexing I/O on File Descriptors
- polled I/O interfaces
- Polled I/O Interfaces
- Implementing Polled I/O in Console Frame Buffer Drivers
- programmed transfers, Programmed I/O Transfers
- scatter/gather structures, Vectored I/O
- synchronous data transfers
- Differences Between Synchronous and Asynchronous I/O
- Synchronous Data Transfers (Block Drivers)
- visual I/O interfaces, Console Visual I/O Interfaces
- IEEE 802.3, See DL_ETHER
- IEEE 802.5, See DL_TPR
- ILP32
- use in devmap(), Data Sharing in devmap()
- use in ioctl(), Data Sharing in ioctl()
- use in mmap(), Data Sharing in mmap()
- ILP64, use in mmap(), Data Sharing in mmap()
- _info() entry point
- example of, _info() Example
- required implementation, Loadable Module Entry Points
- _init() entry point
- example of, _init() Example
- required implementation, Loadable Module Entry Points
- instance numbers, Device Instances and Instance Numbers
- interface association nodes, Devices With Interface-Association Descriptors
- internal mode registers, Internal Sequencing Logic
- internal sequencing logic, Internal Sequencing Logic
- interrupt functions, Interrupt Functions
- interrupt handlers
- functionality, Interrupt Handler Functionality
- registering, Registering Interrupts
- interrupt handling, Interrupt Handlers
- clearing masks, Interrupt Function Examples
- ddi_intr_add_handler() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- Registering Interrupts
- ddi_intr_add_softint() function, Soft Interrupt Functions
- ddi_intr_alloc() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- ddi_intr_block_disable() function, Interrupt Initialization and Destruction Functions
- ddi_intr_block_enable() function, Interrupt Initialization and Destruction Functions
- ddi_intr_clr_mask() function
- Interrupt Initialization and Destruction Functions
- Interrupt Function Examples
- ddi_intr_disable() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- ddi_intr_dup_handler() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- ddi_intr_enable() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- ddi_intr_free() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- ddi_intr_get_cap() function, Interrupt Capability Functions
- ddi_intr_get_hilevel_pri() function
- Priority Management Functions
- Handling High-Level Interrupts
- ddi_intr_get_navail() function, Interrupt Capability Functions
- ddi_intr_get_nintrs() function, Interrupt Capability Functions
- ddi_intr_get_pending() function
- Interrupt Initialization and Destruction Functions
- Interrupt Function Examples
- ddi_intr_get_pri() function
- Priority Management Functions
- Handling High-Level Interrupts
- ddi_intr_get_softint_pri() function, Soft Interrupt Functions
- ddi_intr_get_supported_types() function, Interrupt Capability Functions
- ddi_intr_hilevel() function, High-Level Interrupts
- ddi_intr_remove_handler() function
- MSI-X Interrupts
- Interrupt Initialization and Destruction Functions
- ddi_intr_remove_softint() function, Soft Interrupt Functions
- ddi_intr_set_cap() function, Interrupt Initialization and Destruction Functions
- ddi_intr_set_mask() function
- Interrupt Initialization and Destruction Functions
- Interrupt Function Examples
- ddi_intr_set_pri() function, Priority Management Functions
- ddi_intr_set_softint_pri() function
- Soft Interrupt Functions
- Interrupt Function Examples
- ddi_intr_trigger_softint() function
- High-Level Interrupts
- Soft Interrupt Functions
- gld_intr() function, gld_intr() Function
- high-level interrupts
- High-Level Interrupts
- Software Interrupts
- Handling High-Level Interrupts
- overview, Interrupt Handling
- pending interrupts, Interrupt Function Examples
- setting masks, Interrupt Function Examples
- software interrupts
- Software Interrupts
- Interrupt Function Examples
- Handling High-Level Interrupts
- interrupt property, definition, Interrupt Handling
- interrupts
- capability functions, Interrupt Capability Functions
- changing soft interrupt priority example, Interrupt Function Examples
- checking pending interrupts example, Interrupt Function Examples
- clearing interrupt masks example, Interrupt Function Examples
- common problems with, Interrupt Issues
- description of, Interrupt Handler Overview
- handling high-level interrupts examples, High-Level Interrupt Handling Example
- handling low-level interrupts example, High-Level Interrupt Handling Example
- high-level mutexes, High-Level Mutexes
- initialization and destruction functions, Interrupt Initialization and Destruction Functions
- interrupt handling example, Interrupt Handler Functionality
- invalid, Handling Stuck Interrupts
- legacy defined, Device Interrupts
- message-signaled defined, Device Interrupts
- MSI defined, Device Interrupts
- MSI implementation, MSI Interrupts
- MSI-X defined, Device Interrupts
- MSI-X implementation, MSI-X Interrupts
- network drivers, GLD Driver Requirements
- priority levels, High-Level Interrupts
- priority management functions, Priority Management Functions
- registering legacy interrupt example, Registering Legacy Interrupts
- registering legacy interrupts, Registering Legacy Interrupts
- registering MSI interrupts, Registering MSI Interrupts
- registering MSI interrupts example, Registering MSI Interrupts
- removing legacy interrupt example, Registering Legacy Interrupts
- removing MSI interrupts example, Registering MSI Interrupts
- setting interrupt masks example, Interrupt Function Examples
- soft interrupt functions, Soft Interrupt Functions
- software interrupts, Handling High-Level Interrupts
- types of, Device Interrupts
- using legacy, Legacy Interrupts
- writing handlers, Interrupt Handlers
- ioctl(9E) driver entry point, SPARC Platform Console Communication
- ioctl() function
- character drivers, ioctl() Entry Point (Character Drivers)
- commands, Well Known ioctl Interfaces
- DLIOCRAW, Implemented ioctl Functions
- IOMMU, DMA Isolation
- iovec structure, Vectored I/O
- ISO 8802-3, See DL_ETHER
- ISO 9314-2, See DL_TPR
- ISR (interrupt service routine), Interrupt Handler Functionality
|