#include <sys/ddi.h> #include <sys/sunddi.h> int ddi_prop_update_int_array(dev_t dev, dev_info_t *dip, char *name, int *data, u_int nelements); int ddi_prop_update_int(dev_t dev, dev_info_t *dip, char *name, int data); int ddi_prop_update_string_array(dev_t dev, dev_info_t *dip, char *name, char **data, u_int nelements); int ddi_prop_update_string(dev_t dev, dev_info_t *dip, char *name, char *data); int ddi_prop_update_byte_array(dev_t dev, dev_info_t *dip, char *name, u_char *data, u_int nelements);
Solaris DDI specific (Solaris DDI).
The property update routines search for and, if found, modify the value of a given property. Properties are searched for based on the dip, name, dev, and the type of the data (integer, string or byte). The driver software properties list is searched. If the property is found, it is updated with the supplied value. If the property is not found on this list, a new property is created with the value supplied. For example, if a driver attempts to update the "foo" property, a property named "foo" is searched for on the driver’s software property list. If "foo" is found, the value is updated. If "foo" is not found, a new property named "foo" is created on the driver’s software property list with the supplied value even if a "foo" property exists on another property list (such as a PROM property list).
Every property value has a data type associated with it: byte, integer, or string. A property should be updated using a function with the same corresponding data type as the property value. For example, an integer property must be updated using either ddi_prop_update_int_array() or ddi_prop_update_int(). Attempts to update a property with a function that does correspond to the property value data type will result in the creation of another property with the same name. However, the data type of the new property value will correspond to the data type called out in the function name.
Usually, the dev argument should be set to the actual device number that this property is associated with. If the property is not associated with any particular dev, then the argument dev should be set to DDI_DEV_T_NONE. This property will then match a look up request (see ddi_prop_lookup(9F) ) with the match_dev argument set to DDI_DEV_T_ANY. If no dev is available for the device (for example during attach(9E) time), one can be created using makedevice(9F) with a major number of DDI_MAJOR_T_UNKNOWN. The update routines will then generate the correct dev when creating or updating the property.
name must always be set to the name of the property being updated.
For the routines ddi_prop_update_int_array(), ddi_prop_update_string_array(), ddi_prop_update_string(), and ddi_prop_update_byte_array() data is a pointer which points to memory containing the value of the property. In each case *data points to a different type of property value. See the individual descriptions of the routines below for details concerning the different values. nelements is an unsigned integer which contains the number of integer, string, or byte elements accounted for in the memory pointed at by *data.
For the routine ddi_prop_update_int(), data is the new value of the property.
The property update routines may block to allocate memory needed to hold the value of the property.
All of the property update routines return:
These functions can only be called from user or kernel context.
The following example demonstrates the use of ddi_prop_update().
int options[4]; /* * Create the "options" integer array with * our default values for these parameters */ options[0] = XX_OPTIONS0; options[1] = XX_OPTIONS1; options[2] = XX_OPTIONS2; options[3] = XX_OPTIONS3; i = ddi_prop_update_int_array(xx_dev, xx_dip, "options", &options, sizeof (options) / sizeof (int));
execve(2) , attach(9E) , ddi_prop_lookup(9F) , ddi_prop_remove(9F) , makedevice(9F)