prop_op(9E) manual page
Table of Contents
prop_op - report driver property information
#include <sys/types.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
int prefixprop_op(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
int flags, char *name, caddr_t valuep, int *lengthp)
Solaris
DDI specific (Solaris DDI). This entry point is required, but it can be
ddi_prop_op(9F)
.
- dev
- Device number associated with this device.
- dip
- A pointer to the device information structure for this device.
- prop_op
- Property operator. Valid operators are:
- PROP_LEN
- Get property length only.
(valuep unaffected)
- PROP_LEN_AND_VAL_BUF
- Get length and value into caller’s
buffer. (valuep used as input)
- PROP_LEN_AND_VAL_ALLOC
- Get length and value
into allocated buffer. (valuep returned as pointer to pointer to allocated
buffer)
- flags
- The only possible flag value is:
- DDI_PROP_DONTPASS
- Don’t
pass request to parent if property not found.
- name
- Pointer to name of property
to be interrogated.
- valuep
- If prop_op is PROP_LEN_AND_VAL_BUF,
this
should be a pointer to the users buffer. If prop_op is PROP_LEN_AND_VAL_ALLOC,
this should be the address of a pointer.
- lengthp
- On exit, *lengthp
will contain the property length. If prop_op is PROP_LEN_AND_VAL_BUF
then before calling prop_op(), lengthp should point to an int that
contains the length of caller’s buffer.
prop_op() is an entry
point which reports the values of certain "properties" of the driver or
device to the system. Each driver must have an xxprop_op entry point, but
most drivers which do not need to create or manage their own properties
can use ddi_prop_op() for this entry point. Then the driver can use ddi_prop_create(9F)
to create properties for its device.
prop_op() should return:
- DDI_PROP_SUCCESS
- Property found
and returned.
- DDI_PROP_NOT_FOUND
- Property not found.
- DDI_PROP_UNDEFINED
- Prop explicitly undefined.
- DDI_PROP_NO_MEMORY
- Property found, but unable
to allocate memory. lengthp has the correct property length.
- DDI_PROP_BUF_TOO_SMALL
- Property found, but the supplied buffer is too small. lengthp has the correct
property length.
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_NOTFOUND);
if (strcmp(name, "nblocks") == 0) {
ddi_prop_modify(dev, dip, "nblocks", flags,
&xsp->nblocks, sizeof(int));
}
/* other cases... */
skip:
return (ddi_prop_op(dev, dip, prop_op, flags, name,
valuep, lengthp));
}
ddi_prop_create(9F)
, ddi_prop_op(9F)
Table of Contents