summaryrefslogtreecommitdiffstats
path: root/include/driver.h
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:34 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:34 +0200
commit8dcc816ba942e4db1622df05e4bb0e049684dacf (patch)
tree50f3042d32a1220646f92dce2ecd443cd0f180fe /include/driver.h
parent62fb48c82b44436e85ae2a8a5c93ef178583cf65 (diff)
downloadbarebox-8dcc816ba942e4db1622df05e4bb0e049684dacf.tar.gz
barebox-8dcc816ba942e4db1622df05e4bb0e049684dacf.tar.xz
svn_rev_227
fix parameter handling
Diffstat (limited to 'include/driver.h')
-rw-r--r--include/driver.h34
1 files changed, 27 insertions, 7 deletions
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 <net.h>
+
#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);