DDI_CREATE_MINOR_NODE(9F) Kernel Functions for Drivers
NAME
ddi_create_minor_node - Create a minor node for this device
SYNOPSIS
#include <sys/stat.h>
#include <sys/sunddi.h>
int ddi_create_minor_node(
dev_info_t *dip,
const char *name,
int spec_type,
minor_t minor_num,
const char *node_type,
int flag);
INTERFACE LEVEL
illumos DDI specific (illumos DDI).
PARAMETERS
dip A pointer to the device's
dev_info structure.
name The name of this particular minor device.
spec_type S_IFCHR or
S_IFBLK for character or block minor devices
respectively.
minor_num The minor number for this particular minor device.
node_type Any string literal that uniquely identifies the type of
node. The following predefined node types are provided with
this release:
DDI_NT_SERIAL For serial ports
DDI_NT_SERIAL_MB For on board serial ports
DDI_NT_SERIAL_DO For dial out ports
DDI_NT_SERIAL_MB_DO For on board dial out ports
DDI_NT_BLOCK For hard disks
DDI_NT_BLOCK_CHAN For hard disks with channel or
target numbers
DDI_NT_CD For CDROM drives
DDI_NT_CD_CHAN For CDROM drives with channel or
target numbers
DDI_NT_FD For floppy disks
DDI_NT_TAPE For tape drives
DDI_NT_NET For DLPI style 1 or style 2 network
devices
DDI_NT_DISPLAY For display devices
DDI_PSEUDO For pseudo devices
flag If the device is a clone device then this flag is set to
CLONE_DEV else it is set to
0.
DESCRIPTION
ddi_create_minor_node() provides the necessary information to enable the
system to create the
/dev and
/devices hierarchies. The
name is used to
create the minor name of the block or character special file under the
/devices hierarchy. At-sign (
@), slash (
/), and space are not allowed.
The
spec_type specifies whether this is a block or character device. The
minor_num is the minor number for the device. The
node_type is used to
create the names in the
/dev hierarchy that refers to the names in the
/devices hierarchy. See
disks(8),
ports(8),
tapes(8),
devlinks(8).
Finally
flag determines if this is a clone device or not, and what device
class the node belongs to.
RETURN VALUES
ddi_create_minor_node() returns:
DDI_SUCCESS Was able to allocate memory, create the minor data
structure, and place it into the linked list of minor
devices for this driver.
DDI_FAILURE Minor node creation failed.
CONTEXT
The
ddi_create_minor_node() function can be called from user context. It
is typically called from
attach(9E) or
ioctl(9E).
EXAMPLES
Example 1: Create Data Structure Describing Minor Device with Minor Number
of 0
The following example creates a data structure describing a minor device
called
foo which has a minor number of 0. It is of type
DDI_NT_BLOCK (a
block device) and it is not a clone device.
ddi_create_minor_node(dip, "foo", S_IFBLK, 0, DDI_NT_BLOCK, 0);
SEE ALSO
add_drv(8),
devlinks(8),
disks(8),
drvconfig(8),
ports(8),
tapes(8),
attach(9E),
ddi_remove_minor_node(9F) Writing Device DriversNOTES
If the driver is for a network device (
node_type DDI_NT_NET), note that
the driver name will undergo the driver name constraints identified in
the NOTES section of
dlpi(4P). Additionally, the minor name must match
the driver name for a DLPI style 2 provider. If the driver is a DLPI
style 1 provider, the minor name must also match the driver name with the
exception that the ppa is appended to the minor name.
Non-
gld(4D)-based DLPI network streams drivers are encouraged to switch
to
gld(4D). Failing this, a driver that creates DLPI style-2 minor
nodes must specify CLONE_DEV for its style-2
ddi_create_minor_node() nodes and use
qassociate(9F). A driver that supports both style-1 and
style-2 minor nodes should return DDI_FAILURE for DDI_INFO_DEVT2INSTANCE
and DDI_INFO_DEVT2DEVINFO
getinfo(9E) calls to style-2 minor nodes. (The
correct association is already established by
qassociate(9F)). A driver
that only supports style-2 minor nodes can use
ddi_no_info(9F) for its
getinfo(9E) implementation. For drivers that do not follow these rules,
the results of a
modunload(8) of the driver or a
cfgadm(8) remove of
hardware controlled by the driver are undefined.
WARNING
Drivers must remove references to GLOBAL_DEV, NODEBOUND_DEV,
NODESPECIFIC_DEV, and ENUMERATED_DEV to compile.
May 1, 2020
DDI_CREATE_MINOR_NODE(9F)