xref: /illumos-gate/usr/src/man/man9e/mc_ioctl.9e (revision 72d3dbb9ab4481606cb93caca98ba3b3a8eb6ce2)
152d2369aSRobert Mustacchi.\"
252d2369aSRobert Mustacchi.\" This file and its contents are supplied under the terms of the
352d2369aSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
452d2369aSRobert Mustacchi.\" You may only use this file in accordance with the terms of version
552d2369aSRobert Mustacchi.\" 1.0 of the CDDL.
652d2369aSRobert Mustacchi.\"
752d2369aSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
852d2369aSRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
952d2369aSRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
1052d2369aSRobert Mustacchi.\"
1152d2369aSRobert Mustacchi.\"
1252d2369aSRobert Mustacchi.\" Copyright 2016 Joyent, Inc.
1352d2369aSRobert Mustacchi.\"
1452d2369aSRobert Mustacchi.Dd May 31, 2016
1552d2369aSRobert Mustacchi.Dt MC_IOCTL 9E
1652d2369aSRobert Mustacchi.Os
1752d2369aSRobert Mustacchi.Sh NAME
1852d2369aSRobert Mustacchi.Nm mc_ioctl
1952d2369aSRobert Mustacchi.Nd device specific I/O control operation
2052d2369aSRobert Mustacchi.Sh SYNOPSIS
2152d2369aSRobert Mustacchi.In sys/types.h
2252d2369aSRobert Mustacchi.In sys/stream.h
2352d2369aSRobert Mustacchi.In sys/stropts.h
2452d2369aSRobert Mustacchi.In sys/ddi.h
2552d2369aSRobert Mustacchi.In sys/sunddi.h
2652d2369aSRobert Mustacchi.Ft void
2752d2369aSRobert Mustacchi.Fo prefix_m_ioctl
2852d2369aSRobert Mustacchi.Fa "void *driver"
2952d2369aSRobert Mustacchi.Fa "queue_t *wq"
3052d2369aSRobert Mustacchi.Fa "mblk_t *mp"
3152d2369aSRobert Mustacchi.Fc
3252d2369aSRobert Mustacchi.Sh INTERFACE LEVEL
3352d2369aSRobert Mustacchiillumos DDI Specific
3452d2369aSRobert Mustacchi.Sh PARAMETERS
3552d2369aSRobert Mustacchi.Bl -tag -width Ds
3652d2369aSRobert Mustacchi.It Fa driver
3752d2369aSRobert MustacchiA pointer to the driver's private data that was passed in via the
3852d2369aSRobert Mustacchi.Sy m_pdata
3952d2369aSRobert Mustacchimember of the
4052d2369aSRobert Mustacchi.Xr mac_register 9S
4152d2369aSRobert Mustacchistructure to the
4252d2369aSRobert Mustacchi.Xr mac_register 9F
4352d2369aSRobert Mustacchifunction.
4452d2369aSRobert Mustacchi.It Fa wq
4552d2369aSRobert MustacchiA pointer to a STREAMS write-side queue that the ioctl request was
4652d2369aSRobert Mustacchireceived upon.
4752d2369aSRobert Mustacchi.It Fa mp
4852d2369aSRobert MustacchiA pointer to a message block structure that contains the I/O control
4952d2369aSRobert Mustacchirequest.
5052d2369aSRobert Mustacchi.El
5152d2369aSRobert Mustacchi.Sh DESCRIPTION
5252d2369aSRobert MustacchiThe
5352d2369aSRobert Mustacchi.Fn mc_ioctl
54*72d3dbb9SYuri Pankoventry point is an optional GLDv3 entry point.
55*72d3dbb9SYuri PankovIt provides a means for device-specific I/O control operations to be initiated.
56*72d3dbb9SYuri PankovIn general, this entry point is not recommended for most devices and is
5752d2369aSRobert Mustacchiunimplemented.
5852d2369aSRobert Mustacchi.Pp
5952d2369aSRobert MustacchiThe I/O control interface is not like a traditional character or block
6052d2369aSRobert Mustacchidevice's
6152d2369aSRobert Mustacchi.Xr ioctl 9E
62*72d3dbb9SYuri Pankoventry point, rather it is a STREAMS-based I/O control operation.
63*72d3dbb9SYuri PankovThe data pointer of the
6452d2369aSRobert Mustacchi.Fa mp
6552d2369aSRobert Mustacchiargument is a
6652d2369aSRobert Mustacchi.Xr iocblk 9S
67*72d3dbb9SYuri Pankovstructure.
68*72d3dbb9SYuri PankovAfter handling the message, the driver will need to reply to the message, which
69*72d3dbb9SYuri Pankovis usually done by using the
7052d2369aSRobert Mustacchi.Xr miocack 9F
7152d2369aSRobert Mustacchiand
7252d2369aSRobert Mustacchi.Xr miocnak 9F
7352d2369aSRobert Mustacchifunctions to prepare
7452d2369aSRobert Mustacchi.Fa mp .
7552d2369aSRobert Mustacchi.Pp
7652d2369aSRobert MustacchiThe device driver can access its soft state by casting the value pointed
7752d2369aSRobert Mustacchito in
7852d2369aSRobert Mustacchi.Fa driver .
7952d2369aSRobert MustacchiThe driver should be careful and ensure that it performs any necessary
8052d2369aSRobert Mustacchilocking to access members of that structure while processing the I/O
8152d2369aSRobert Mustacchicontrol operation.
8252d2369aSRobert Mustacchi.Sh RETURN VALUES
8352d2369aSRobert MustacchiReturn information is not conveyed by the return value of this function, rather
8452d2369aSRobert Mustacchiit is encoded in the
8552d2369aSRobert Mustacchi.Xr iocblk 9S
8652d2369aSRobert Mustacchistructure in the
8752d2369aSRobert Mustacchi.Fa mp
8852d2369aSRobert Mustacchiargument.
8952d2369aSRobert Mustacchi.Sh EXAMPLES
9052d2369aSRobert MustacchiThe following example shows how a device driver might structure its
9152d2369aSRobert Mustacchi.Fn mc_ioctl
9252d2369aSRobert Mustacchientry point.
9352d2369aSRobert Mustacchi.Bd -literal
9452d2369aSRobert Mustacchi#include <sys/types.h>
9552d2369aSRobert Mustacchi#include <sys/stream.h>
9652d2369aSRobert Mustacchi#include <sys/stropts.h>
9752d2369aSRobert Mustacchi#include <sys/ddi.h>
9852d2369aSRobert Mustacchi#include <sys/sunddi.h>
9952d2369aSRobert Mustacchi
10052d2369aSRobert Mustacchi/*
10152d2369aSRobert Mustacchi * Note, this example merely shows the structure of this function. It does not
10252d2369aSRobert Mustacchi * actively handle any device-specific ioctls and instead returns failure for
10352d2369aSRobert Mustacchi * every one. This is the most common case. Note, miocnak(9F) takes care of
10452d2369aSRobert Mustacchi * calling putnext(9F) for us.
10552d2369aSRobert Mustacchi */
10652d2369aSRobert Mustacchistatic void
10752d2369aSRobert Mustacchiexample_m_ioctl(void *arg, queue_t *wq, mblk_t *mp)
10852d2369aSRobert Mustacchi{
10952d2369aSRobert Mustacchi	miocnak(wq, mp, 0, EINVAL);
11052d2369aSRobert Mustacchi}
11152d2369aSRobert Mustacchi.Ed
11252d2369aSRobert Mustacchi.Sh SEE ALSO
11352d2369aSRobert Mustacchi.Xr ioctl 9E ,
11452d2369aSRobert Mustacchi.Xr mac 9E ,
11552d2369aSRobert Mustacchi.Xr put 9E ,
11652d2369aSRobert Mustacchi.Xr mac_register 9F ,
11752d2369aSRobert Mustacchi.Xr miocack 9F ,
11852d2369aSRobert Mustacchi.Xr miocnak 9F ,
11952d2369aSRobert Mustacchi.Xr putnext 9F ,
12052d2369aSRobert Mustacchi.Xr iocblk 9S ,
12152d2369aSRobert Mustacchi.Xr mac_register 9S
12252d2369aSRobert Mustacchi.Rs
12352d2369aSRobert Mustacchi.%T Writing Device Drivers
12452d2369aSRobert Mustacchi.Re
12552d2369aSRobert Mustacchi.Rs
12652d2369aSRobert Mustacchi.%T STREAMS Programming Guide
12752d2369aSRobert Mustacchi.Re
128