INTRO(9S)                Data Structures for Drivers               INTRO(9S)
NAME
     Intro - introduction to kernel data structures
DESCRIPTION
     Section 9S describes the data structures that are used by the kernel
     and the various device driver frameworks.  The structure manual pages
     should generally be considered documentation for the structure itself
     and the companions in sections 9, 9E, and 9F, provide more of the
     surrounding context.
     The structures listed here have varying ABI guarantees.  While the
     majority of structures documented here are part of committed
     interfaces, that is not true of all of them.  Uncommitted structures
     have no ABI guarantees and may change at any time.  They are documented
     to aid folks working on the system.
     The rest of this manual groups documented structures into categories
     with additional information about what to read for more information.
   Module and Driver Initialization
     The structures here are all fundamental to initializing a device
     driver.  See 
Intro(9E) for more on their use and the examples in
     _
init(9E) for more information.  These structures are generally
     required for every kernel module.            
cb_ops(9S)               dev_ops(9S)            modldrv(9S)              modlinkage(9S)            modlmisc(9S)             modlstrmod(9S)   Character and Block I/O     These structures are used as part of the fundamental units of
     performing I/O for character and block devices and are related to how a
     driver will implement the corresponding 
read(9E), 
write(9E), and     
strategy(9E) entry points.            
aio_req(9S)              buf(9S)            iovec(9S)                uio(9S)   Message Block Structures
     Message blocks, 
mblk_t, are the fundamental building block of
     networking, USB, and STREAMS device drivers.  An overview to their
     design and structure can be found in the 
Message Block Functions of     
Intro(9F).  The data for a message block is generally found in a
     corresponding data block structure.  The following structures are
     relevant:            
dblk(9S)                 free_rtn(9S)            mblk(9S)   DMA Related Structures
     Direct Memory Access is one of the primary things that most device
     drivers facilitate.  See 
Intro(9F) for more on DMA itself and how these
     structures fit into those functions.            
ddi_device_acc_attr(9S)  ddi_dma_attr(9S)            ddi_dma_cookie(9S)       ddi_dmae_req(9S)   MAC Related Structures
     The following structures are all part of the 
mac(9E) device driver
     framework that is used for networking device drivers.  See 
mac(9E) for
     more information on how they fit in.  Networking device drivers use the     
Message Blocks related data structures for I/O purposes.  These
     structures describe specific parts of interfacing with the MAC
     framework.            
mac_callbacks(9S)        mac_group_info(9S)            mac_intr(9S)             mac_register(9S)            mac_ring_info(9S)   SCSA Related Structures
     These structures are part of the SCSI/SAS device driver framework and
     are used in implementing device drivers for host bus adapters (HBAs).            
scsi_address(9S)         scsi_arq_status(9S)            scsi_asc_key_strings(9S) scsi_device(9S)            scsi_extended_sense(9S)  scsi_hba_tran(9S)            scsi_inquiry(9S)         scsi_pkt(9S)            scsi_status(9S)   Kernel Statistics
     Kernel statistics, or kstats, are a means for communicating data to
     userland through the 
kstat(4D) driver, 
libkstat(3LIB) library, and     
kstat(8) command.  Drivers can create their own kstats through the use
     of 
kstat_create(9F) and some device driver frameworks create and manage
     kstats on behalf of drivers.  The root kstat structure is discussed in     
kstat(9S).  The other manuals listed discuss the different types of
     kstats that exist.            
kstat_intr(9S)           kstat_io(9S)            kstat_named(9S)          kstat(9S)   Miscellaneous Device Driver Interfaces
     The following structures are all related to the broader device driver
     interface and serve different parts of it.  They cover memory mapping,
     error handling, interrupts, etc.            
ddi_fm_error(9S)         ddi_idevice_cookie(9S)            devmap_callback_ctl(9S)   STREAMS Related Structures
     These structures include the fundamental structures required for
     registering a STREAMS based device driver with the kernel as well as
     the different structures, such as the 
copyreq(9S), that are used as
     part of handling specific classes of operations.  The 
queue(9S) is the
     fundamental building block of STREAMS communication.  Like with
     networking device drivers, STREAMS drivers also leverage the 
Message     Blocks data structures for communication.            
copyreq(9S)              copyresp(9S)            fmodsw(9S)               iocblk(9S)            linkblk(9S)              module_info(9S)            qband(9S)                qinit(9S)            queclass(9S)             queue(9S)            streamtab(9S)            stroptions(9S)   Network Hooks
     Network hooks provide a way for firewalls to participate and manipulate
     packets as they flow through the system.  The following structures are
     related to the network hooks interfaces.            
hook_nic_event(9S)       hook_pkt_event(9S)            hook_t(9S)               net_inject_t(9S)            net_instance_t(9S)   Historical Structures
     The following structures correspond to subsystems that generally are no
     longer used (
mac(9E) aka GLDv3 has replaced the GLDv2 functions
     mentioned below) or refer to hardware that is no longer commonly found.            
gld_mac_info(9S)         gld_stats(9S)            tuple(9S)   Manual Organization
     In addition to the standard manual sections that exist, entries in 9S
     contain an additional section titled "STRUCTURE MEMBERS".  This
     enumerates and describes the different members of the structures, their
     types, their purposes, and any constraints on when they should be used
     or how they should be interpreted.
SEE ALSO
     Intro(9), 
Intro(9E), 
Intro(9F)illumos                        April 28, 2024                        illumos