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
|
K
- _KERNEL symbol, Compiling and Linking the Driver
- kernel
- debugger
- See kmdb debugger
device tree, What Is the Kernel?
- memory
- allocation, Dynamic Memory Allocation
- associating with user applications, Associating Kernel Memory With User Mappings
- detecting leaks with mdb, Detecting Kernel Memory Leaks
module directory, Copying the Driver to a Module Directory
- overview, What Is the Kernel?
- kernel data structures, Obtaining Kernel Data Structure Information
- kernel logging functions, Kernel Logging and Printing Functions
- kernel statistics, See kstats
- kernel statistics functions, Kernel Statistics Functions
- kernel terminal emulator, Solaris Consoles and the Kernel Terminal Emulator
- kernel thread functions, Kernel Thread Control and Synchronization Functions
- kernel variables
- setting, Setting Kernel Variables
- use with debuggers, Modifying Kernel Variables
- using, Setting Up Test Modules
- kmdb debugger, Using the kmdb Kernel Debugger
- booting on SPARC systems, Booting kmdb With an Alternate Kernel on the SPARC Platform
- booting on x86 systems, Booting kmdb With an Alternate Kernel on the x86 Platform
- macros, kmdb Macros for Driver Developers
- setting breakpoints, Setting Breakpoints in kmdb
- kmdb kernel debugger, Enable the Deadman Feature to Avoid a Hard Hang
- kmem_alloc() function, Dynamic Memory Allocation
- kmem_flags kernel variable, Setting kmem_flags Debugging Flags
- kmem_free() function, Retrieving Target Device Information
- kstats
- See also network statistics
- definition, Kernel Statistics
- Ethernet drivers, Kernel Statistics for Solaris Ethernet Drivers
- functions
- Kernel Statistics Functions
- Kernel Statistics Functions
- structure members, Kernel Statistics Structure Members
- structures, Kernel Statistics Structures
- task queues, Task Queue Kernel Statistics Counters
L
- latent fault, definition of, Periodic Health Checks
- layered driver handle, See LDI
- Layered Driver Interface, See LDI
- layered identifier, See LDI
- ld command, Compiling and Linking the Driver
- LDI, Layered Driver Interface (LDI)
- definition, What Is the Kernel?
- device access, Kernel Interfaces
- device consumer, LDI Overview
- device information, Kernel Interfaces
- device layering, User Interfaces
- device usage
- Kernel Interfaces
- User Interfaces
- Print System Configuration Command Interfaces
- Device User Command Interfaces
- event notification interfaces, Receiving Asynchronous Device Event Notification
- fuser command, Device User Command Interfaces
- kernel device consumer, LDI Overview
- layered driver, LDI Overview
- layered driver handle
- Layered Driver Handles – Target Devices
- Driver Source File
- layered identifier
- Layered Identifiers – Kernel Device Consumers
- Driver Source File
- libdevinfo interfaces, User Interfaces
- prtconf command, Print System Configuration Command Interfaces
- target device
- LDI Overview
- Layered Driver Handles – Target Devices
- LDI functions
- ldi_add_event_handler() function, Receiving Asynchronous Device Event Notification
- ldi_aread() function, Accessing Target Devices
- ldi_awrite() function, Accessing Target Devices
- ldi_close() function
- Opening and Closing Target Devices
- Driver Source File
- ldi_devmap() function, Accessing Target Devices
- ldi_dump() function, Accessing Target Devices
- ldi_get_dev() function, Retrieving Target Device Information
- ldi_get_devid() function, Retrieving Target Device Information
- ldi_get_eventcookie() function, Receiving Asynchronous Device Event Notification
- ldi_get_minor_name() function, Retrieving Target Device Information
- ldi_get_otyp() function, Retrieving Target Device Information
- ldi_get_size() function, Retrieving Target Device Information
- ldi_getmsg() function, Accessing Target Devices
- ldi_ident_from_dev() function
- Layered Identifiers – Kernel Device Consumers
- Driver Source File
- ldi_ident_from_dip() function, Layered Identifiers – Kernel Device Consumers
- ldi_ident_from_stream() function, Layered Identifiers – Kernel Device Consumers
- ldi_ident_release() function
- Layered Identifiers – Kernel Device Consumers
- Driver Source File
- ldi_ioctl() function, Accessing Target Devices
- ldi_open_by_dev() function, Opening and Closing Target Devices
- ldi_open_by_devid() function, Opening and Closing Target Devices
- ldi_open_by_name() function
- Opening and Closing Target Devices
- Driver Source File
- ldi_poll() function, Accessing Target Devices
- ldi_prop_exists() function, Retrieving Target Device Property Values
- ldi_prop_get_int() function, Retrieving Target Device Property Values
- ldi_prop_get_int64() function, Retrieving Target Device Property Values
- ldi_prop_lookup_byte_array() function, Retrieving Target Device Property Values
- ldi_prop_lookup_int_array() function, Retrieving Target Device Property Values
- ldi_prop_lookup_int64_array() function, Retrieving Target Device Property Values
- ldi_prop_lookup_string_array() function, Retrieving Target Device Property Values
- ldi_prop_lookup_string() function, Retrieving Target Device Property Values
- ldi_putmsg() function, Accessing Target Devices
- ldi_read() function, Accessing Target Devices
- ldi_remove_event_handler() function, Receiving Asynchronous Device Event Notification
- ldi_strategy() function, Accessing Target Devices
- ldi_write() function
- Accessing Target Devices
- Driver Source File
- LDI types
- ldi_callback_id_t, Receiving Asynchronous Device Event Notification
- ldi_handle_t, Layered Driver Handles – Target Devices
- ldi_ident_t, Layered Identifiers – Kernel Device Consumers
- leaf devices, description of, Device Tree Components
- leaf nodes, Fault Injection
- legacy interrupts
- defined, Device Interrupts
- using, Legacy Interrupts
- length argument, ddi_dma_mem_alloc(), changes to, ddi_dma_mem_alloc() Argument Changes
- libdevinfo(), displaying the device tree, libdevinfo Library
- libdevinfo device information library, User Interfaces
- linking drivers, Compiling and Linking the Driver
- lint command, 64-bit environment, General Conversion Steps
- list suspect, definition, Diagnosis, Suspect Lists, and Fault Events
- lnode, Device Information Library Interfaces
- loadable module functions, Module Functions
- loading drivers, Compiling and Linking the Driver
- add_drv command, Installing Drivers with add_drv
- hardware configuration file, Writing a Hardware Configuration File
- loading modules
- Loadable Module Entry Points
- Copying the Driver to a Module Directory
- loading test modules, Loading and Unloading Test Modules
- locking primitives, types of, Locking Primitives
- locks
- manipulating, Kernel Thread Control and Synchronization Functions
- mutex, Mutual-Exclusion Locks
- readers/writer, Readers/Writer Locks
- scheme for, Choosing a Locking Scheme
- LP64
- use in devmap(), Data Sharing in devmap()
- use in ioctl(), Data Sharing in ioctl()
- LUN bits, Building a Command
|