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


Solaris DDI specific (Solaris 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(1M), ports(1M), tapes(1M), devlinks(1M).
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(1M), devlinks(1M), disks(1M), drvconfig(1M), ports(1M),
tapes(1M), attach(9E), ddi_remove_minor_node(9F)


Writing Device Drivers

NOTES


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(7P). 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(7D)-based DLPI network streams drivers are encouraged to switch
to gld(7D). 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(1M) of the driver or a cfgadm(1M) 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 under Solaris 10 and
later versions.


May 1, 2020 DDI_CREATE_MINOR_NODE(9F)