---------- Device parameters --------------

Devices have several parameters. In case of a network device this may be the
ip address, networking mask or similar and users need access to these
parameters. in U-Boot this is solved with device paramters. Device parameters
are always strings, although there are functions to interpret them as
something else. hush users can access parameters as a local variable which
have a dot (.) in them. So setting the ip address of the first ethernet
device is a matter of typing 'eth0.ip=192.168.0.7' on the console and can
then be read back with 'echo $eth0.ip'. The devinfo command shows a summary
about all devices currently present. If called with a device id as parameter
it shows the parameters available for a device.

Device parameters programming API
---------------------------------

struct param_d {
	char* (*get)(struct device_d *, struct param_d *param);
	int (*set)(struct device_d *, struct param_d *param, const char *val);
	ulong flags;
	char *name;
	struct param_d *next;
	char *value;
};

int dev_add_param(struct device_d *dev, struct param_d *par);

This function adds a new parameter to a device. At least the name field in
the new parameter struct has to be initialized. The 'get' and 'set' fields
can be set to NULL in which case the framework handles them. It is also
allowed to implement only one of the get/set functions. Care must be taken
with the initial value of the parameter. If the framework handles the set
function it will try to free the value of the parameter. If this is a
static array bad things will happen. A parameter can have the flag
PARAM_FLAG_RO which means that the parameter is readonly. It is perfectly ok
then to point the value to a static array.

const char *dev_get_param(struct device_d *dev, const char *name);

This function returns a pointer to the value of the parameter specified
with dev and name.
If the framework handles the get/set functions the parameter value strings
are alloceted with malloc and freed with free when another value is set for
this parameter. Drivers implementing set/get themselves are allowed to
return values in static arrays. This means that the pointers returned from
dev_get_param() are only valid until the next call to dev_get_param. If this
is not long enough strdup() or similar must be used.

int dev_set_param(struct device_d *dev, const char *name, const char *val);

Set the value of a parameter.

