MC_IOCTL(9E) Driver Entry Points MC_IOCTL(9E)
mc_ioctl - device specific I/O control operation
#include <sys/types.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
void
prefix_m_ioctl(void *driver, queue_t *wq, mblk_t *mp);
illumos DDI Specific
driver A pointer to the driver's private data that was passed in via
the m_pdata member of the mac_register(9S) structure to the
mac_register(9F) function.
wq A pointer to a STREAMS write-side queue that the ioctl request
was received upon.
mp A pointer to a message block structure that contains the I/O
control request.
The mc_ioctl() entry point is an optional GLDv3 entry point. It
provides a means for device-specific I/O control operations to be
initiated. In general, this entry point is not recommended for most
devices and is unimplemented.
The I/O control interface is not like a traditional character or block
device's ioctl(9E) entry point, rather it is a STREAMS-based I/O
control operation. The data pointer of the mp argument is a iocblk(9S)
structure. After handling the message, the driver will need to reply
to the message, which is usually done by using the miocack(9F) and
miocnak(9F) functions to prepare mp.
The device driver can access its soft state by casting the value
pointed to in driver. The driver should be careful and ensure that it
performs any necessary locking to access members of that structure
while processing the I/O control operation.
Return information is not conveyed by the return value of this
function, rather it is encoded in the iocblk(9S) structure in the mp
argument.
The following example shows how a device driver might structure its
mc_ioctl() entry point.
#include <sys/types.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
/*
* Note, this example merely shows the structure of this function. It does not
* actively handle any device-specific ioctls and instead returns failure for
* every one. This is the most common case. Note, miocnak(9F) takes care of
* calling putnext(9F) for us.
*/
static void
example_m_ioctl(void *arg, queue_t *wq, mblk_t *mp)
{
miocnak(wq, mp, 0, EINVAL);
}
ioctl(9E), mac(9E), put(9E), mac_register(9F), miocack(9F),
miocnak(9F), putnext(9F), iocblk(9S), mac_register(9S)
Writing Device Drivers.
STREAMS Programming Guide.
illumos May 31, 2016 illumos
NAME
mc_ioctl - device specific I/O control operation
SYNOPSIS
#include <sys/types.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
void
prefix_m_ioctl(void *driver, queue_t *wq, mblk_t *mp);
INTERFACE LEVEL
illumos DDI Specific
PARAMETERS
driver A pointer to the driver's private data that was passed in via
the m_pdata member of the mac_register(9S) structure to the
mac_register(9F) function.
wq A pointer to a STREAMS write-side queue that the ioctl request
was received upon.
mp A pointer to a message block structure that contains the I/O
control request.
DESCRIPTION
The mc_ioctl() entry point is an optional GLDv3 entry point. It
provides a means for device-specific I/O control operations to be
initiated. In general, this entry point is not recommended for most
devices and is unimplemented.
The I/O control interface is not like a traditional character or block
device's ioctl(9E) entry point, rather it is a STREAMS-based I/O
control operation. The data pointer of the mp argument is a iocblk(9S)
structure. After handling the message, the driver will need to reply
to the message, which is usually done by using the miocack(9F) and
miocnak(9F) functions to prepare mp.
The device driver can access its soft state by casting the value
pointed to in driver. The driver should be careful and ensure that it
performs any necessary locking to access members of that structure
while processing the I/O control operation.
RETURN VALUES
Return information is not conveyed by the return value of this
function, rather it is encoded in the iocblk(9S) structure in the mp
argument.
EXAMPLES
The following example shows how a device driver might structure its
mc_ioctl() entry point.
#include <sys/types.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
/*
* Note, this example merely shows the structure of this function. It does not
* actively handle any device-specific ioctls and instead returns failure for
* every one. This is the most common case. Note, miocnak(9F) takes care of
* calling putnext(9F) for us.
*/
static void
example_m_ioctl(void *arg, queue_t *wq, mblk_t *mp)
{
miocnak(wq, mp, 0, EINVAL);
}
SEE ALSO
ioctl(9E), mac(9E), put(9E), mac_register(9F), miocack(9F),
miocnak(9F), putnext(9F), iocblk(9S), mac_register(9S)
Writing Device Drivers.
STREAMS Programming Guide.
illumos May 31, 2016 illumos