INTRO(9S) Data Structures for Drivers INTRO(9S)
Intro - introduction to kernel data structures
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.
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 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)
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)
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)
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, 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)
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)
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 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)
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)
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.
Intro(9), Intro(9E), Intro(9F)
illumos April 28, 2024 illumos
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