ddi_prop_remove_all(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.
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 pro-
perty exists.
Property creation is done by creating a new property defini-
tion 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 defini-
tion 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 pro-
perty 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_int64(9F) or
ddi_prop_lookup_int64_array(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 nameand 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
ddi_prop_create()
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_undefine()
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.
ddi_prop_modify()
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.
ddi_prop_remove()
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 only be
called from user context; otherwise, they can be called from
interrupt or user 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(5) for a description of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|____________________________|______________________________|
| Stability Level | ddi_prop_create() and|
| | ddi_prop_modify() are|
| | Obsolete |
|____________________________|______________________________|
SEE ALSO
driver.conf(4), attributes(5), attach(9E),
ddi_getproplen(9F), ddi_prop_op(9F), ddi_prop_update(9F),
makedevice(9F)
Writing Device Drivers
Man(1) output converted with
man2html