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