From 8dcc816ba942e4db1622df05e4bb0e049684dacf Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Thu, 5 Jul 2007 18:01:34 +0200 Subject: svn_rev_227 fix parameter handling --- include/driver.h | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'include/driver.h') diff --git a/include/driver.h b/include/driver.h index 7cc1d51435..d4133cf97b 100644 --- a/include/driver.h +++ b/include/driver.h @@ -1,18 +1,34 @@ #ifndef DRIVER_H #define DRIVER_H +#include + #define MAX_DRIVER_NAME 16 #define MAP_READ 1 #define MAP_WRITE 2 +#define PARAM_TYPE_STRING 1 +#define PARAM_TYPE_ULONG 2 +#define PARAM_TYPE_IPADDR 3 + +#define PARAM_FLAG_RO (1 << 0) + +typedef union { + char *val_str; + ulong val_ulong; + IPaddr_t val_ip; +} value_t; + struct param_d { - char *(*get)(struct device_d *, struct param_d *param); - int (*set)(struct device_d *, struct param_d *param, char *val); + struct param_d* (*get)(struct device_d *, struct param_d *param); + int (*set)(struct device_d *, struct param_d *param, value_t val); + ulong type; + ulong flags; char *name; ulong cookie; struct param_d *next; - void *val; + value_t value; }; #define DEVICE_TYPE_UNKNOWN 0 @@ -58,8 +74,8 @@ struct driver_d { void (*info) (struct device_d *); void (*shortinfo) (struct device_d *); - struct param_d* (*get) (struct device_d*, int no); - int (*set) (struct device_d*, struct param_d *, char *val); + int (*get) (struct device_d*, struct param_d *); + int (*set) (struct device_d*, struct param_d *, value_t val); unsigned long type; void *type_data; @@ -79,8 +95,12 @@ struct device_d *get_device_by_type(ulong type, struct device_d *last); ssize_t read(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags); ssize_t write(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags); ssize_t erase(struct device_d *dev, size_t count, unsigned long offset); -char *dev_get_param(struct device_d *dev, char *name); -int dev_set_param(struct device_d *dev, char *name, char *val); +struct param_d* dev_get_param(struct device_d *dev, char *name); +int dev_set_param(struct device_d *dev, char *name, value_t val); +struct param_d *get_param_by_name(struct device_d *dev, char *name); +void print_param(struct param_d *param); +IPaddr_t dev_get_param_ip(struct device_d *dev, char *name); +int dev_set_param_ip(struct device_d *dev, char *name, IPaddr_t ip); int dev_add_parameter(struct device_d *dev, struct param_d *par); -- cgit v1.2.3