ddi_getlongprop_buf(9F)
NAME
ddi_prop_op, ddi_getprop, ddi_getlongprop,
ddi_getlongprop_buf, ddi_getproplen - get property informa-
tion for leaf device drivers
SYNOPSIS
#include <sys/types.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
int ddi_prop_op(dev_t dev, dev_info_t *dip, ddi_prop_op_t
prop_op, int flags, char *name, caddr_t valuep, int
*lengthp);
int ddi_getprop(dev_t dev, dev_info_t *dip, int flags, char
*name, int defvalue);
int ddi_getlongprop(dev_t dev, dev_info_t *dip, int flags,
char *name, caddr_t valuep, int *lengthp);
int ddi_getlongprop_buf(dev_t dev, dev_info_t *dip, int
flags, char *name, caddr_t valuep, int *lengthp);
int ddi_getproplen(dev_t dev, dev_info_t *dip, int flags,
char *name, int *lengthp);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI). The ddi_getlongprop(),
ddi_getlongprop_buf(), ddi_getprop(), and ddi_getproplen()
functions are obsolete. Use ddi_prop_lookup(9F) instead of
ddi_getlongprop(), ddi_getlongprop_buf(), and
ddi_getproplen(). Use ddi_prop_get_int(9F) instead of
ddi_getprop().
PARAMETERS
dev Device number associated with property or
DDI_DEV_T_ANY as the wildcard device number.
dip Pointer to a device info node.
prop_op
Property operator.
flags Possible flag values are some combination of:
DDI_PROP_DONTPASS
do not pass request to parent device information
node if property not found
DDI_PROP_CANSLEEP
the routine may sleep while allocating memory
DDI_PROP_NOTPROM
do not look at PROM properties (ignored on
architectures that do not support PROM proper-
ties)
name String containing the name of the property.
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
ddi_prop_op(), lengthp should point to an int that
contains the length of callers buffer.
defvalue
The value that ddi_getprop() returns if the property
is not found.
DESCRIPTION
ddi_prop_op() gets arbitrary-size properties for leaf dev-
ices. The routine searches the device's property list. If it
does not find the property at the device level, it examines
the flags argument, and if DDI_PROP_DONTPASS is set, then
ddi_prop_op() returns DDI_PROP_NOT_FOUND. Otherwise, it
passes the request to the next level of the device info
tree. If it does find the property, but the property has
been explicitly undefined, it returns DDI_PROP_UNDEFINED.
Otherwise it returns either the property length, or both the
length and value of the property to the caller via the
valuep and lengthp pointers, depending on the value of
prop_op, as described below, and returns DDI_PROP_SUCCESS.
If a property cannot be found at all, DDI_PROP_NOT_FOUND is
returned.
Usually, the dev argument should be set to the actual device
number that this property applies to. However, if the dev
argument is DDI_DEV_T_ANY, the wildcard dev, then
ddi_prop_op() will match the request based on name only
(regardless of the actual dev the property was created
with). This property/dev match is done according to the pro-
perty search order which is to first search software proper-
ties created by the driver in last-in, first-out (LIFO)
order, next search software properties created by the system
in LIFO order, then search PROM properties if they exist in
the system architecture.
Property operations are specified by the prop_op argument.
If prop_op is PROP_LEN, then ddi_prop_op() just sets the
callers length, *lengthp, to the property length and returns
the value DDI_PROP_SUCCESS to the caller. The valuep argu-
ment is not used in this case. Property lengths are 0 for
boolean properties, sizeof(int) for integer properties, and
size in bytes for long (variable size) properties.
If prop_op is PROP_LEN_AND_VAL_BUF, then valuep should be a
pointer to a user-supplied buffer whose length should be
given in *lengthp by the caller. If the requested property
exists, ddi_prop_op() first sets *lengthp to the property
length. It then examines the size of the buffer supplied by
the caller, and if it is large enough, copies the property
value into that buffer, and returns DDI_PROP_SUCCESS. If the
named property exists but the buffer supplied is too small
to hold it, it returns DDI_PROP_BUF_TOO_SMALL.
If prop_op is PROP_LEN_AND_VAL_ALLOC, and the property is
found, ddi_prop_op() sets *lengthp to the property length.
It then attempts to allocate a buffer to return to the
caller using the kmem_alloc(9F) routine, so that memory can
be later recycled using kmem_free(9F). The driver is
expected to call kmem_free() with the returned address and
size when it is done using the allocated buffer. If the
allocation is successful, it sets *valuep to point to the
allocated buffer, copies the property value into the buffer
and returns DDI_PROP_SUCCESS. Otherwise, it returns
DDI_PROP_NO_MEMORY. Note that the flags argument may affect
the behavior of memory allocation in ddi_prop_op(). In par-
ticular, if DDI_PROP_CANSLEEP is set, then the routine will
wait until memory is available to copy the requested pro-
perty.
ddi_getprop() returns boolean and integer-size properties.
It is a convenience wrapper for ddi_prop_op() with prop_op
set to PROP_LEN_AND_VAL_BUF, and the buffer is provided by
the wrapper. By convention, this function returns a 1 for
boolean (zero-length) properties.
ddi_getlongprop() returns arbitrary-size properties. It is
a convenience wrapper for ddi_prop_op() with prop_op set to
PROP_LEN_AND_VAL_ALLOC, so that the routine will allocate
space to hold the buffer that will be returned to the caller
via *valuep.
ddi_getlongprop_buf() returns arbitrary-size properties. It
is a convenience wrapper for ddi_prop_op() with prop_op set
to PROP_LEN_AND_VAL_BUF so the user must supply a buffer.
ddi_getproplen() returns the length of a given property. It
is a convenience wrapper for ddi_prop_op() with prop_op set
to PROP_LEN.
RETURN VALUES
ddi_prop_op() ddi_getlongprop() ddi_getlongprop_buf()
ddi_getproplen() return:
DDI_PROP_SUCCESS
Property found and returned.
DDI_PROP_NOT_FOUND
Property not found.
DDI_PROP_UNDEFINED
Property already explicitly undefined.
DDI_PROP_NO_MEMORY
Property found, but unable to allocate memory. lengthp
points to the correct property length.
DDI_PROP_BUF_TOO_SMALL
Property found, but the supplied buffer is too small.
lengthp points to the correct property length.
ddi_getprop() returns:
The value of the property or the value passed into the rou-
tine as defvalue if the property is not found. By conven-
tion, the value of zero length properties (boolean proper-
ties) are returned as the integer value 1.
CONTEXT
These functions can be called from user or interrupt con-
text, provided DDI_PROP_CANSLEEP is not set; if it is set,
they can be called from user context only.
ATTRIBUTES
See attributes(5) for a description of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|___________________________|_______________________________|
| Stability Level | ddi_getlongprop(), |
| | ddi_getlongprop_buf(), |
| | ddi_getprop(), and|
| | ddi_getproplen() functions are|
| | Obsolete |
|___________________________|_______________________________|
SEE ALSO
attributes(5), ddi_prop_create(9F), ddi_prop_get_int(9F),
ddi_prop_lookup(9F), kmem_alloc(9F), kmem_free(9F)
Writing Device Drivers
Man(1) output converted with
man2html