ddi_prop_create(9F) Kernel Functions for Drivers ddi_prop_create(9F)NAME
ddi_prop_create, ddi_prop_modify, ddi_prop_remove, ddi_prop_remove_all,
ddi_prop_undefine - create, remove, or modify properties for leaf
device drivers
SYNOPSIS
#include <sys/conf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
int ddi_prop_create(dev_t dev, dev_info_t *dip, int flags,
char *name, caddr_t valuep, int length);
int ddi_prop_undefine(dev_t dev, dev_info_t *dip, int flags,
char *name);
int ddi_prop_modify(dev_t dev, dev_info_t *dip, int flags,
char *name, caddr_t valuep, int length);
int ddi_prop_remove(dev_t dev, dev_info_t *dip, char *name);
void ddi_prop_remove_all(dev_info_t *dip);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI). The ddi_prop_create() and
ddi_prop_modify() functions are obsolete. Use ddi_prop_update(9F)
instead of these functions.
PARAMETERSddi_prop_create()
dev dev_t of the device.
dip dev_info_t pointer of the device.
flags flag modifiers. The only possible flag value is
DDI_PROP_CANSLEEP: Memory allocation may sleep.
name name of property.
valuep pointer to property value.
length property length.
ddi_prop_undefine()
dev dev_t of the device.
dip dev_info_t pointer of the device.
flags flag modifiers. The only possible flag value is
DDI_PROP_CANSLEEP: Memory allocation may sleep.
name name of property.
ddi_prop_modify()
dev dev_t of the device.
dip dev_info_t pointer of the device.
flags flag modifiers. The only possible flag value is
DDI_PROP_CANSLEEP: Memory allocation may sleep.
name name of property.
valuep pointer to property value.
length property length.
ddi_prop_remove()
dev dev_t of the device.
dip dev_info_t pointer of the device.
name name of property.
ddi_prop_remove_all()
dip dev_info_t pointer of the device.
DESCRIPTION
Device drivers have the ability to create and manage their own proper‐
ties as well as gain access to properties that the system creates on
behalf of the driver. A driver uses ddi_getproplen(9F) to query whether
or not a specific property exists.
Property creation is done by creating a new property definition in the
driver's property list associated with dip.
Property definitions are stacked; they are added to the beginning of
the driver's property list when created. Thus, when searched for, the
most recent matching property definition will be found and its value
will be return to the caller.
The individual functions are described as follows:
ddi_prop_create()ddi_prop_create() adds a property to the
device's property list. If the property is not
associated with any particular dev but is
associated with the physical device itself,
then the argument dev should be the special
device DDI_DEV_T_NONE. If you do not have a
dev for your device (for example during
attach(9E) time), you can create one using
makedevice(9F) with a major number of
DDI_MAJOR_T_UNKNOWN. ddi_prop_create() will
then make the correct dev for your device.
For boolean properties, you must set length to
0. For all other properties, the length argu‐
ment must be set to the number of bytes used
by the data structure representing the prop‐
erty being created.
Note that creating a property involves allo‐
cating memory for the property list, the prop‐
erty name and the property value. If flags
does not contain DDI_PROP_CANSLEEP,
ddi_prop_create() returns DDI_PROP_NO_MEMORY
on memory allocation failure or DDI_PROP_SUC‐
CESS if the allocation succeeded. If
DDI_PROP_CANSLEEP was set, the caller may
sleep until memory becomes available.
ddi_prop_undefine()ddi_prop_undefine() is a special case of prop‐
erty creation where the value of the property
is set to undefined. This property has the
effect of terminating a property search at the
current devinfo node, rather than allowing the
search to proceed up to ancestor devinfo
nodes. However, ddi_prop_undefine() will not
terminate a search when the
ddi_prop_get_int(9F) or ddi_prop_lookup(9F)
routines are used for lookup of 64-bit prop‐
erty value. See ddi_prop_op(9F).
Note that undefining properties does involve
memory allocation, and therefore, is subject
to the same memory allocation constraints as
ddi_prop_create().
ddi_prop_modify()ddi_prop_modify() modifies the length and the
value of a property. If ddi_prop_modify()
finds the property in the driver's property
list, allocates memory for the property value
and returns DDI_PROP_SUCCESS. If the property
was not found, the function returns
DDI_PROP_NOT_FOUND.
Note that modifying properties does involve
memory allocation, and therefore, is subject
to the same memory allocation constraints as
ddi_prop_create().
ddi_prop_remove()ddi_prop_remove() unlinks a property from the
device's property list. If ddi_prop_remove()
finds the property (an exact match of both
nameand dev), it unlinks the property, frees
its memory, and returns DDI_PROP_SUCCESS, oth‐
erwise, it returns DDI_PROP_NOT_FOUND.
ddi_prop_remove_all()ddi_prop_remove_all() removes the properties
of all the dev_t's associated with the dip. It
is called before unloading a driver.
RETURN VALUES
The ddi_prop_create() function returns the following values:
DDI_PROP_SUCCESS On success.
DDI_PROP_NO_MEMORY On memory allocation failure.
DDI_PROP_INVAL_ARG If an attempt is made to create a property with
dev equal to DDI_DEV_T_ANY or if name is NULL or
name is the NULL string.
The ddi_prop_ undefine() function returns the following values:
DDI_PROP_SUCCESS On success.
DDI_PROP_NO_MEMORY On memory allocation failure.
DDI_PROP_INVAL_ARG If an attempt is made to create a property with
dev DDI_DEV_T_ANY or if name is NULL or name is
the NULL string.
The ddi_prop_modify() function returns the following values:
DDI_PROP_SUCCESS On success.
DDI_PROP_NO_MEMORY On memory allocation failure.
DDI_PROP_INVAL_ARG If an attempt is made to create a property with
dev equal to DDI_DEV_T_ANY or if name is NULL or
name is the NULL string.
DDI_PROP_NOT_FOUND On property search failure.
The ddi_prop_remove() function returns the following values:
DDI_PROP_SUCCESS On success.
DDI_PROP_INVAL_ARG If an attempt is made to create a property with
dev equal to DDI_DEV_T_ANY or if name is NULL or
name is the NULL string.
DDI_PROP_NOT_FOUND On property search failure.
CONTEXT
If DDI_PROP_CANSLEEP is set, these functions can cannot be called from
interrupt context. Otherwise, they can be called from user, interrupt,
or kernel context.
EXAMPLES
Example 1 Creating a Property
The following example creates a property called nblocks for each parti‐
tion on a disk.
int propval = 8192;
for (minor = 0; minor < 8; minor ++) {
(void) ddi_prop_create(makedevice(DDI_MAJOR_T_UNKNOWN, minor),
dev, DDI_PROP_CANSLEEP, "nblocks", (caddr_t) &propval,
sizeof (int));
...
}
ATTRIBUTES
See attributes(5) for a description of the following attributes:
┌────────────────────────────┬──────────────────────────────┐
│ ATTRIBUTE TYPE │ ATTRIBUTE VALUE │
├────────────────────────────┼──────────────────────────────┤
│Stability Level │ ddi_prop_create() and │
│ │ ddi_prop_modify() are Obso‐ │
│ │ lete │
└────────────────────────────┴──────────────────────────────┘
SEE ALSOdriver.conf(4), attributes(5), attach(9E), ddi_getproplen(9F),
ddi_prop_op(9F), ddi_prop_update(9F), makedevice(9F)
Writing Device Drivers
SunOS 5.11 16 Jan 2006 ddi_prop_create(9F)