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

tribblix@gmail.com :: GitHub :: Privacy