Current File : //usr/man/man9e/prop_op.9e
'\" te
.\" Copyright (c) 2000 Sun Microsystems, Inc.  All Rights Reserved
.TH prop_op 9E "8 Jul 1996" "SunOS 5.11" "Driver Entry Points"
.SH NAME
prop_op \- report driver property information
.SH SYNOPSIS
.LP
.nf
#include <sys/types.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>

\fBint prefix\fR\fBprop_op\fR(\fBdev_t\fR \fIdev\fR, \fBdev_info_t *\fR\fIdip\fR, 
     \fBddi_prop_op_t\fR \fIprop_op\fR, \fBint\fR \fIflags\fR, \fBchar *\fR\fIname\fR, \fBcaddr_t\fR \fIvaluep\fR, 
     \fBint *\fR\fIlengthp\fR);
.fi

.SH INTERFACE LEVEL
.sp
.LP
Solaris DDI specific (Solaris DDI). This entry point is required, but it can be \fBddi_prop_op\fR(9F).
.SH ARGUMENTS
.sp
.ne 2
.mk
.na
\fB\fIdev\fR\fR
.ad
.RS 12n
.rt  
Device number associated with this device.
.RE

.sp
.ne 2
.mk
.na
\fB\fIdip\fR\fR
.ad
.RS 12n
.rt  
A pointer to the  device information structure for this device.
.RE

.sp
.ne 2
.mk
.na
\fB\fIprop_op\fR\fR
.ad
.RS 12n
.rt  
Property operator. Valid operators are: 
.sp
.ne 2
.mk
.na
\fB\fBPROP_LEN\fR \fR
.ad
.RS 26n
.rt  
Get property length only. (\fIvaluep\fR unaffected).
.RE

.sp
.ne 2
.mk
.na
\fB\fBPROP_LEN_AND_VAL_BUF\fR\fR
.ad
.RS 26n
.rt  
Get length and value into caller's buffer. (\fIvaluep\fR used as input).
.RE

.sp
.ne 2
.mk
.na
\fB\fBPROP_LEN_AND_VAL_ALLOC\fR\fR
.ad
.RS 26n
.rt  
Get length and value into allocated buffer. (\fIvaluep\fR returned as pointer to pointer to allocated buffer).
.RE

.RE

.sp
.ne 2
.mk
.na
\fB\fIflags\fR\fR
.ad
.RS 12n
.rt  
The only possible flag value is: 
.sp
.ne 2
.mk
.na
\fB\fBDDI_PROP_DONTPASS\fR\fR
.ad
.RS 21n
.rt  
Do not pass request to parent if property not found.
.RE

.RE

.sp
.ne 2
.mk
.na
\fB\fIname\fR\fR
.ad
.RS 12n
.rt  
Pointer to name of property to be interrogated.
.RE

.sp
.ne 2
.mk
.na
\fB\fIvaluep\fR \fR
.ad
.RS 12n
.rt  
If  \fIprop_op\fR is  \fBPROP_LEN_AND_VAL_BUF\fR, this should be a pointer to the user's buffer.  If \fIprop_op\fR is \fBPROP_LEN_AND_VAL_ALLOC\fR, this should be the \fIaddress\fR of a pointer.
.RE

.sp
.ne 2
.mk
.na
\fB\fIlengthp\fR \fR
.ad
.RS 12n
.rt  
On exit,  *\fIlengthp\fR will contain the property length.  If \fIprop_op\fR is  \fBPROP_LEN_AND_VAL_BUF\fR then \fIlengthp\fR should point to an \fBint\fR that contains the length of caller's buffer,  before calling \fBprop_op()\fR. 
.RE

.SH DESCRIPTION
.sp
.LP
\fBprop_op()\fR is an entry point which reports the values of certain properties of the driver or device to the system. Each driver must have a \fIprefix\fR \fBprop_op\fR entry point, but most drivers that do not need to create or manage their own properties can use \fBddi_prop_op()\fR for this entry point.  Then the driver can use \fBddi_prop_update\fR(9F) to create properties for its device. 
.SH RETURN VALUES
.sp
.LP
\fBprop_op()\fR should return:
.sp
.ne 2
.mk
.na
\fB\fBDDI_PROP_SUCCESS\fR \fR
.ad
.RS 27n
.rt  
Property found and returned.
.RE

.sp
.ne 2
.mk
.na
\fB\fBDDI_PROP_NOT_FOUND\fR \fR
.ad
.RS 27n
.rt  
Property not found.
.RE

.sp
.ne 2
.mk
.na
\fB\fBDDI_PROP_UNDEFINED\fR \fR
.ad
.RS 27n
.rt  
Prop explicitly undefined.
.RE

.sp
.ne 2
.mk
.na
\fB\fBDDI_PROP_NO_MEMORY\fR \fR
.ad
.RS 27n
.rt  
Property found, but unable to allocate memory. \fIlengthp\fR has the correct property length.
.RE

.sp
.ne 2
.mk
.na
\fB\fBDDI_PROP_BUF_TOO_SMALL\fR \fR
.ad
.RS 27n
.rt  
Property found, but the supplied buffer is too small. \fIlengthp\fR has the correct property length.
.RE

.SH EXAMPLES
.LP
\fBExample 1 \fRUsing \fBprop_op()\fR to Report Property Information
.sp
.LP
In the following example, \fBprop_op()\fR intercepts requests for the \fItemperature\fR property. The driver tracks changes to \fItemperature\fR using a variable in the state structure in order to avoid frequent calls to \fBddi_prop_update\fR(9F). The \fItemperature\fR property is only updated when a request is made for this property.  It then uses the system routine \fBddi_prop_op\fR(9F) to process the property request.  If the property request is not specific to a device, the driver does not intercept the request. This is indicated when the value of the  \fIdev\fR parameter is equal to \fBDDI_DEV_T_ANY\fR. 

.sp
.in +2
.nf
int temperature;	/* current device temperature */
 .
 .
 .
static int
xxprop_op(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
     int flags, char *name, caddr_t valuep, int *lengthp)
{
			int  instance;
			struct xxstate *xsp;
     if (dev == DDI_DEV_T_ANY)
				goto skip;
     instance = getminor(dev);
     xsp = ddi_get_soft_state(statep, instance);
     if (xsp == NULL)
				return (DDI_PROP_NOT_FOUND);
     if (strcmp(name, "temperature") == 0) {
				ddi_prop_update_int(dev, dip,\e
           "temperature", temperature);
     }
		       /*	other cases...	*/
     skip:
     return (ddi_prop_op(dev, dip, prop_op, flags,\e 
             name, valuep, lengthp));
}
.fi
.in -2

.SH SEE ALSO
.sp
.LP
\fBIntro\fR(9E), \fBddi_prop_op\fR(9F), \fBddi_prop_update\fR(9F) 
.sp
.LP
\fIWriting Device Drivers for Oracle Solaris 11.2\fR