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
illumos DDI specific (illumos DDI). The
ddi_prop_create() and
ddi_prop_modify() functions are obsolete. Use
ddi_prop_update(9F) instead of these functions.
PARAMETERS
ddi_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
properties 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 argument must be set to the number of bytes
used by the data structure representing the
property being created.
Note that creating a property involves
allocating memory for the property list, the
property 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_SUCCESS 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
property 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 property 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
name and
dev), it
unlinks the property, frees its memory, and
returns
DDI_PROP_SUCCESS, otherwise, 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
partition 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(7) for a description of the following attributes:
+----------------+-----------------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+----------------+-----------------------+
|Stability Level |
ddi_prop_create() and |
| |
ddi_prop_modify() are |
| | Obsolete |
+----------------+-----------------------+
SEE ALSO
driver.conf(5),
attributes(7),
attach(9E),
ddi_getproplen(9F),
ddi_prop_op(9F),
ddi_prop_update(9F),
makedevice(9F) Writing Device Drivers June 20, 2021 DDI_PROP_CREATE(9F)